From d4cb80ee03df44d5abba75a323256b29119d7e87 Mon Sep 17 00:00:00 2001 From: asdf Date: Sat, 22 Jul 2023 13:57:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95commit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package/PikaStdDevice/LICENSE | 21 + package/PikaStdDevice/PikaStdDevice.pyi | 510 ------------------ package/PikaStdDevice/PikaStdDevice_ADC.c | 73 --- package/PikaStdDevice/PikaStdDevice_BaseDev.c | 32 -- package/PikaStdDevice/PikaStdDevice_CAN.c | 84 --- package/PikaStdDevice/PikaStdDevice_DAC.c | 52 -- package/PikaStdDevice/PikaStdDevice_GPIO.c | 172 ------ package/PikaStdDevice/PikaStdDevice_IIC.c | 85 --- package/PikaStdDevice/PikaStdDevice_PWM.c | 112 ---- package/PikaStdDevice/PikaStdDevice_SPI.c | 99 ---- package/PikaStdDevice/PikaStdDevice_UART.c | 262 --------- package/PikaStdDevice/PikaStdDevice_common.c | 31 -- package/PikaStdDevice/PikaStdDevice_common.h | 12 - package/PikaStdDevice/README.md | 30 ++ package/PikaStdDevice/pika_hal.c | 325 ----------- package/PikaStdDevice/pika_hal.h | 499 ----------------- package/PikaStdDevice/pika_hal_SOFT_IIC.c | 276 ---------- package/PikaStdDevice/pika_hal_SOFT_SPI.c | 155 ------ package/PikaStdDevice/pika_hal_table.h | 15 - package/PikaStdDevice/pika_hal_table_rule.h | 121 ----- 20 files changed, 51 insertions(+), 2915 deletions(-) create mode 100644 package/PikaStdDevice/LICENSE delete mode 100644 package/PikaStdDevice/PikaStdDevice.pyi delete mode 100644 package/PikaStdDevice/PikaStdDevice_ADC.c delete mode 100644 package/PikaStdDevice/PikaStdDevice_BaseDev.c delete mode 100644 package/PikaStdDevice/PikaStdDevice_CAN.c delete mode 100644 package/PikaStdDevice/PikaStdDevice_DAC.c delete mode 100644 package/PikaStdDevice/PikaStdDevice_GPIO.c delete mode 100644 package/PikaStdDevice/PikaStdDevice_IIC.c delete mode 100644 package/PikaStdDevice/PikaStdDevice_PWM.c delete mode 100644 package/PikaStdDevice/PikaStdDevice_SPI.c delete mode 100644 package/PikaStdDevice/PikaStdDevice_UART.c delete mode 100644 package/PikaStdDevice/PikaStdDevice_common.c delete mode 100644 package/PikaStdDevice/PikaStdDevice_common.h create mode 100644 package/PikaStdDevice/README.md delete mode 100644 package/PikaStdDevice/pika_hal.c delete mode 100644 package/PikaStdDevice/pika_hal.h delete mode 100644 package/PikaStdDevice/pika_hal_SOFT_IIC.c delete mode 100644 package/PikaStdDevice/pika_hal_SOFT_SPI.c delete mode 100644 package/PikaStdDevice/pika_hal_table.h delete mode 100644 package/PikaStdDevice/pika_hal_table_rule.h diff --git a/package/PikaStdDevice/LICENSE b/package/PikaStdDevice/LICENSE new file mode 100644 index 000000000..c3c7618ca --- /dev/null +++ b/package/PikaStdDevice/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 李昂 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/package/PikaStdDevice/PikaStdDevice.pyi b/package/PikaStdDevice/PikaStdDevice.pyi deleted file mode 100644 index fa6d6f914..000000000 --- a/package/PikaStdDevice/PikaStdDevice.pyi +++ /dev/null @@ -1,510 +0,0 @@ -""" -## PikaStdDevice - -PikaStdDevice is a standard and abstract device module for PikaScript. - -PikaStdDevice supplies the standard device API for users. - -Document: https://pikadoc-en.readthedocs.io/en/latest/PikaStdDevice%20%E6%A0%87%E5%87%86%E8%AE%BE%E5%A4%87.html - -""" -from PikaObj import * - - -class GPIO(BaseDev): - def __init__(self): ... - - def setPin(self, pinName: str): - """ - Use the name of the pin to select the GPIO pin. - - example: `"PA0"`, `"PA1"` ... - """ - - def setId(self, id: int): - """ - Use the id of the pin to select the GPIO pin. - - example: 0, 1 ... - """ - - def getId(self) -> int: - """ - Get the id of the pin. - """ - - def getPin(self) -> str: - """ - Get the name of the pin. - """ - - def setMode(self, mode: str): - """ - Set the mode of the pin. - example: "in", "out" ... - """ - - def getMode(self) -> str: - """ - Get the mode of the pin. - """ - - def setPull(self, pull: str): - """ - Set the pull of the pin. - example: `"up"`, `"down"`, `"none"` ... - """ - - def enable(self): - """Enable the pin.""" - - def disable(self): - """Disable the pin.""" - - def high(self): - """Set the pin to high.""" - - def low(self): - """Set the pin to low.""" - - def read(self) -> int: - """Read the pin value.""" - - SIGNAL_RISING: int - SIGNAL_FALLING: int - SIGNAL_ANY: int - - def setCallBack(self, eventCallBack: any, filter: int): - """ - Add a callback function to the pin. - Example: - ``` python - def cb1(signal): - print("cb1", signal) - io.setCallBack(cb1, io.SIGNAL_RISING) - ``` - The `signal` parameter is the signal type. - The callback function will be called when the signal is triggered. - """ - - def close(self): ... - - def platformHigh(self): ... - - def platformLow(self): ... - - def platformEnable(self): ... - - def platformDisable(self): ... - - def platformSetMode(self): ... - - def platformRead(self): ... - - -def Time() -> time: - """ use time module instead """ - - -class ADC(BaseDev): - def __init__(self): ... - - def setPin(self, pin: str): - """ - Use the name of the pin to select the ADC pin. - example: `"PA0"`, `"PA1"` ... - """ - - def enable(self): - """Enable the ADC.""" - - def disable(self): - """Disable the ADC.""" - - def read(self) -> float: - """Read the ADC value.""" - - def close(self): ... - - @abstractmethod - def platformEnable(self): ... - - @abstractmethod - def platformRead(self): ... - - @abstractmethod - def platformDisable(self): ... - - -class DAC(BaseDev): - def __init__(self): ... - - def setPin(self, pin: str): - """ - Use the name of the pin to select the DAC pin. - example: `"PA0"`, `"PA1"` ... - """ - - def enable(self): - """Enable the DAC.""" - - def disable(self): - """Disable the DAC.""" - - def write(self, val: float): - """write the DAC value.""" - - def close(self): ... - - -class UART: - def __init__(self): ... - - def setBaudRate(self, baudRate: int): - """Set the baud rate.""" - - def setId(self, id: int): - """Set the id of the UART.""" - - STOP_BITS_1: int - STOP_BITS_2: int - STOP_BITS_1_5: int - - def setStopBits(self, stopBits: int): - """Set the stop bits of the UART.""" - - PARITY_NONE: int - PARITY_EVEN: int - PARITY_ODD: int - - def setParity(self, parity: int): - """Set the parity of the UART.""" - - FLOW_CONTROL_NONE: int - FLOW_CONTROL_RTS: int - FLOW_CONTROL_CTS: int - FLOW_CONTROL_RTS_CTS: int - - def setFlowControl(self, flowControl: int): - """Set the flow control of the UART.""" - - def setDataBits(self, dataBits: int): - """Set the data bits of the UART.""" - - def enable(self): - """Enable the UART.""" - - def disable(self): - """Disable the UART.""" - - def write(self, data: str): - """Write string to the UART.""" - - def writeBytes(self, data: bytes, length: int): - """Write bytes to the UART.""" - - def read(self, length: int) -> str: - """Read string from the UART.""" - - def readBytes(self, length: int) -> bytes: - """Read bytes from the UART.""" - - def setPinTX(self, pin: str): - """ - Remap the TX pin. - """ - - def setPinRX(self, pin: str): - """ - Remap the RX pin. - """ - - def setPinCTS(self, pin: str): - """ - Remap the CTS pin. - """ - - def setPinRTS(self, pin: str): - """ - Remap the RTS pin. - """ - - def close(self): ... - - SIGNAL_RX: int - SIGNAL_TX: int - - def setCallBack(self, eventCallBack: any, filter: int): - """ - Add a callback function to the pin. - Example: - ``` python - def cb1(signal): - print(uart.read(-1)) - io.setCallBack(cb1, uart.SIGNAL_RX) - ``` - """ - - @abstractmethod - def platformEnable(self): ... - - @abstractmethod - def platformWrite(self): ... - - @abstractmethod - def platformWriteBytes(self): ... - - @abstractmethod - def platformRead(self): ... - - @abstractmethod - def platformReadBytes(self): ... - - @abstractmethod - def platformDisable(self): ... - - -class IIC(BaseDev): - def __init__(self): ... - - def setPinSCL(self, pin: str): - """Set the SCL pin.""" - - def setPinSDA(self, pin: str): - """Set the SDA pin.""" - - def setDeviceAddr(self, addr: int): - """Set the device address.""" - - def enable(self): - """Enable the IIC.""" - - def disable(self): - """Disable the IIC.""" - - def write(self, addr: int, data: str): - """Write string to the IIC.""" - - def writeBytes(self, addr: int, data: bytes, length: int): - """Write bytes to the IIC.""" - - def read(self, addr: int, length: int) -> str: - """Read string from the IIC.""" - - def readBytes(self, addr: int, length: int) -> bytes: - """Read bytes from the IIC.""" - - @abstractmethod - def platformEnable(self): ... - - @abstractmethod - def platformWrite(self): ... - - @abstractmethod - def platformWriteBytes(self): ... - - @abstractmethod - def platformRead(self): ... - - @abstractmethod - def platformReadBytes(self): ... - - @abstractmethod - def platformDisable(self): ... - - -class PWM(BaseDev): - def __init__(self): ... - - def setName(self, name: str): - """Use the device name to select the PWM pin. - exmpale: `"PWM0"`, `"PWM1"` ... - """ - - def getName(self) -> str: - """Get the device name.""" - - def setChannel(self, ch: int): - """Set the channel.""" - - def getChannel(self) -> int: - """Get the channel.""" - - def setPin(self, pin: str): - """Use the name of the pin to select the PWM pin. - example: `"PA0"`, `"PA1"` ... - """ - - def setFrequency(self, freq: int): - """Set the frequency.""" - - def setFreq(self, freq: int): - """Set the frequency.""" - - def setDuty(self, duty: float): - """Set the duty.""" - - def enable(self): - """Enable the PWM.""" - - def disable(self): - """Disable the PWM.""" - - def getFrequency(self) -> int: - """Get the frequency.""" - - def getDuty(self) -> float: - """Get the duty.""" - - def close(self): ... - - @abstractmethod - def platformEnable(self): ... - - @abstractmethod - def platformSetFrequency(self): ... - - @abstractmethod - def platformSetDuty(self): ... - - @abstractmethod - def platformDisable(self): ... - - -class SPI(BaseDev): - def __init__(self): ... - - def setPinSCK(self, pin: str): - """Set the SCK pin.""" - - def setPinMOSI(self, pin: str): - """Set the MOSI pin.""" - - def setPinMISO(self, pin: str): - """Set the MISO pin.""" - - def setName(self, name: str): - """Use the device name to select the SPI pin. - exmpale: `"SPI0"`, `"SPI1"` ... - """ - - def setId(self, id: int): - """Set the id of the SPI. - example: `0`, `1` ... - """ - - def setPolarity(self, polarity: int): - """Set the polarity.""" - - def setPhase(self, phase: int): - """Set the phase.""" - - def setBaudRate(self, baudRate: int): - """Set the baud rate.""" - - def enable(self): - """Enable the SPI.""" - - def disable(self): - """Disable the SPI.""" - - def write(self, data: str): - """Write string to the SPI.""" - - def writeBytes(self, data: bytes, length: int): - """Write bytes to the SPI.""" - - def read(self, length: int) -> str: - """Read string from the SPI.""" - - def readBytes(self, length: int) -> bytes: - """Read bytes from the SPI.""" - - @abstractmethod - def platformEnable(self): ... - - @abstractmethod - def platformWrite(self): ... - - @abstractmethod - def platformWriteBytes(self): ... - - @abstractmethod - def platformRead(self): ... - - @abstractmethod - def platformReadBytes(self): ... - - @abstractmethod - def platformDisable(self): ... - - -class CAN(BaseDev): - def __init__(self): ... - - def setName(self, name: str): - """Use the device name to select the CAN pin. - exmpale: `"CAN0"`, `"CAN1"` ... - """ - - def setId(self, id: int): - """Use the id to select the CAN pin. - example: `0`, `1` ... - """ - - def setBaudRate(self, baudRate: int): - """Set the baud rate.""" - - def setMode(self, mode: str): - """Set the mode. - example: `"normal"`, `"loopback"`, `"silent"`, `"silent_loopback"` - """ - - def enable(self): - """Enable the CAN.""" - - def disable(self): - """Disable the CAN.""" - - def write(self, data: str): - """Write string to the CAN.""" - - def writeBytes(self, data: bytes, length: int): - """Write bytes to the CAN.""" - - def read(self, length: int) -> str: - """Read string from the CAN.""" - - def readBytes(self, length: int) -> bytes: - """Read bytes from the CAN.""" - - def addFilter(self, id: int, ide: int, rtr: int, mode: int, mask: int, hdr: int): - """Add a filter.""" - - @abstractmethod - def platformEnable(self): ... - - @abstractmethod - def platformWrite(self): ... - - @abstractmethod - def platformWriteBytes(self): ... - - @abstractmethod - def platformRead(self): ... - - @abstractmethod - def platformReadBytes(self): ... - - @abstractmethod - def platformDisable(self): ... - - -class BaseDev: - @PIKA_C_MACRO_IF("PIKA_EVENT_ENABLE") - def addEventCallBack(self, eventCallback: any): - """ Add an event callback. """ - - @abstractmethod - @PIKA_C_MACRO_IF("PIKA_EVENT_ENABLE") - def platformGetEventId(self): ... diff --git a/package/PikaStdDevice/PikaStdDevice_ADC.c b/package/PikaStdDevice/PikaStdDevice_ADC.c deleted file mode 100644 index 2749d909c..000000000 --- a/package/PikaStdDevice/PikaStdDevice_ADC.c +++ /dev/null @@ -1,73 +0,0 @@ -#include "PikaStdDevice_ADC.h" -#include "PikaStdDevice_common.h" - -void PikaStdDevice_ADC_enable(PikaObj* self) { - obj_runNativeMethod(self, "platformEnable", NULL); -} - -void PikaStdDevice_ADC_disable(PikaObj* self) { - obj_runNativeMethod(self, "platformDisable", NULL); -} - -void PikaStdDevice_ADC_init(PikaObj* self) { - obj_setStr(self, "pin", "PA0"); -} - -void PikaStdDevice_ADC___init__(PikaObj* self) { - PikaStdDevice_ADC_init(self); -} - -pika_float PikaStdDevice_ADC_read(PikaObj* self) { - obj_runNativeMethod(self, "platformRead", NULL); - return obj_getFloat(self, "val"); -} - -void PikaStdDevice_ADC_setPin(PikaObj* self, char* pin) { - obj_setStr(self, "pin", pin); -} - -static pika_dev* _get_dev(PikaObj* self) { - pika_dev* dev = obj_getPtr(self, "pika_dev"); - if (NULL != dev) { - return dev; - } - dev = pika_hal_open(PIKA_HAL_ADC, obj_getStr(self, "pin")); - if (NULL == dev) { - __platform_printf("Error: open ADC '%s' failed.\r\n", - obj_getStr(self, "pin")); - } - obj_setPtr(self, "pika_dev", dev); - return dev; -} - -void PikaStdDevice_ADC_platformEnable(PikaObj* self) { - pika_dev* dev = _get_dev(self); - if (NULL == dev) { - __platform_printf("Error: open ADC '%s' failed.\r\n", - obj_getStr(self, "pin")); - return; - } - pika_hal_ADC_config cfg = {0}; - cfg.continue_or_single = PIKA_HAL_ADC_SINGLE; - pika_hal_ioctl(dev, PIKA_HAL_IOCTL_CONFIG, &cfg); - pika_hal_ioctl(dev, PIKA_HAL_IOCTL_ENABLE); -} - -void PikaStdDevice_ADC_platformDisable(PikaObj* self) { - pika_dev* dev = _get_dev(self); - pika_hal_ioctl(dev, PIKA_HAL_IOCTL_DISABLE); -} - -void PikaStdDevice_ADC_platformRead(PikaObj* self) { - pika_dev* dev = _get_dev(self); - pika_hal_ADC_config* cfg = (pika_hal_ADC_config*)dev->ioctl_config; - uint32_t val_i = 0; - pika_hal_read(dev, &val_i, sizeof(val_i)); - pika_float val = (pika_float)val_i / (pika_float)cfg->max * cfg->vref; - val = val_i * obj_setFloat(self, "val", val); -} - -void PikaStdDevice_ADC_close(PikaObj* self) { - pika_dev* dev = _get_dev(self); - pika_hal_close(dev); -} diff --git a/package/PikaStdDevice/PikaStdDevice_BaseDev.c b/package/PikaStdDevice/PikaStdDevice_BaseDev.c deleted file mode 100644 index bb2f90032..000000000 --- a/package/PikaStdDevice/PikaStdDevice_BaseDev.c +++ /dev/null @@ -1,32 +0,0 @@ -#include "PikaStdDevice_BaseDev.h" -#include "PikaStdDevice_common.h" - -#if !PIKASCRIPT_VERSION_REQUIRE_MINIMUN(1, 10, 4) -#error "This library requires PikaScript version 1.10.4 or higher" -#endif - -PikaEventListener* g_pika_device_event_listener; - -void PikaStdDevice_BaseDev_addEventCallBack(PikaObj* self, Arg* eventCallBack) { -#if PIKA_EVENT_ENABLE - obj_setArg(self, "eventCallBack", eventCallBack); - /* init event_listener for the first time */ - if (NULL == g_pika_device_event_listener) { - pika_eventListener_init(&g_pika_device_event_listener); - } - if (PIKA_RES_OK != obj_runNativeMethod(self, "platformGetEventId", NULL)) { - obj_setErrorCode(self, 1); - __platform_printf("Error: Method %s no found.\r\n", - "platformGetEventId"); - } - uint32_t eventId = obj_getInt(self, "eventId"); - pika_eventListener_registEvent(g_pika_device_event_listener, eventId, self); -#else - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] PIKA_EVENT_ENABLE is disabled."); -#endif -} - -void PikaStdDevice_BaseDev_platformGetEventId(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} diff --git a/package/PikaStdDevice/PikaStdDevice_CAN.c b/package/PikaStdDevice/PikaStdDevice_CAN.c deleted file mode 100644 index 0efcffc26..000000000 --- a/package/PikaStdDevice/PikaStdDevice_CAN.c +++ /dev/null @@ -1,84 +0,0 @@ -#include "PikaStdDevice_CAN.h" -#include "PikaStdDevice_common.h" - -void PikaStdDevice_CAN___init__(PikaObj* self) {} - -void PikaStdDevice_CAN_addFilter(PikaObj* self, - int hdr, - int id, - int ide, - int mask, - int mode, - int rtr) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_CAN_disable(PikaObj* self) { - obj_runNativeMethod(self, "platformDisable", NULL); -} - -void PikaStdDevice_CAN_enable(PikaObj* self) { - obj_runNativeMethod(self, "platformEnable", NULL); -} - -void PikaStdDevice_CAN_setId(PikaObj* self, int id) { - obj_setInt(self, "id", id); -} - -void PikaStdDevice_CAN_setMode(PikaObj* self, char* mode) { - obj_setStr(self, "mode", mode); -} - -void PikaStdDevice_CAN_setName(PikaObj* self, char* name) { - obj_setStr(self, "name", name); -} - -void PikaStdDevice_CAN_setBaudRate(PikaObj* self, int baudRate) { - obj_setInt(self, "baudRate", baudRate); -} - -char* PikaStdDevice_CAN_read(PikaObj* self, int length) { - obj_setInt(self, "length", length); - obj_runNativeMethod(self, "platformRead", NULL); - return obj_getStr(self, "readData"); -} - -Arg* PikaStdDevice_CAN_readBytes(PikaObj* self, int length) { - obj_setInt(self, "length", length); - obj_runNativeMethod(self, "platformReadBytes", NULL); - return arg_copy(obj_getArg(self, "readData")); -} - -void PikaStdDevice_CAN_write(PikaObj* self, char* data) { - obj_setStr(self, "writeData", data); - obj_runNativeMethod(self, "platformWrite", NULL); -} - -void PikaStdDevice_CAN_writeBytes(PikaObj* self, uint8_t* data, int length) { - obj_setBytes(self, "writeData", data, length); - obj_runNativeMethod(self, "platformWriteBytes", NULL); -} - -void PikaStdDevice_CAN_platformDisable(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_CAN_platformEnable(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_CAN_platformRead(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_CAN_platformWrite(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_CAN_platformReadBytes(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_CAN_platformWriteBytes(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} diff --git a/package/PikaStdDevice/PikaStdDevice_DAC.c b/package/PikaStdDevice/PikaStdDevice_DAC.c deleted file mode 100644 index 6f8b833c6..000000000 --- a/package/PikaStdDevice/PikaStdDevice_DAC.c +++ /dev/null @@ -1,52 +0,0 @@ -#include "PikaStdDevice_DAC.h" -#include "PikaStdDevice_common.h" - -static pika_dev* _get_dev(PikaObj* self) { - pika_dev* dev = obj_getPtr(self, "pika_dev"); - if (NULL != dev) { - return dev; - } - dev = pika_hal_open(PIKA_HAL_DAC, obj_getStr(self, "pin")); - if (NULL == dev) { - __platform_printf("Error: open DAC '%s' failed.\r\n", - obj_getStr(self, "pin")); - } - obj_setPtr(self, "pika_dev", dev); - return dev; -} - -void PikaStdDevice_DAC_enable(PikaObj* self) { - pika_dev* dev = _get_dev(self); - pika_hal_DAC_config cfg = {0}; - pika_hal_ioctl(dev, PIKA_HAL_IOCTL_CONFIG, &cfg); - pika_hal_ioctl(dev, PIKA_HAL_IOCTL_ENABLE); -} - -void PikaStdDevice_DAC_setPin(PikaObj* self, char* pin) { - obj_setStr(self, "pin", pin); -} - -void PikaStdDevice_DAC_disable(PikaObj* self) { - pika_dev* dev = _get_dev(self); - pika_hal_ioctl(dev, PIKA_HAL_IOCTL_DISABLE); -} - -void PikaStdDevice_DAC_init(PikaObj* self) { - obj_setStr(self, "pin", "PA0"); -} - -void PikaStdDevice_DAC___init__(PikaObj* self) { - PikaStdDevice_DAC_init(self); -} - -void PikaStdDevice_DAC_write(PikaObj* self, pika_float val) { - pika_dev* dev = _get_dev(self); - pika_hal_DAC_config* cfg = (pika_hal_DAC_config*)dev->ioctl_config; - uint32_t val_i = (val / cfg->vref) * cfg->max; - pika_hal_write(dev, &val_i, sizeof val_i); -} - -void PikaStdDevice_DAC_close(PikaObj* self) { - pika_dev* dev = _get_dev(self); - pika_hal_close(dev); -} diff --git a/package/PikaStdDevice/PikaStdDevice_GPIO.c b/package/PikaStdDevice/PikaStdDevice_GPIO.c deleted file mode 100644 index cd5a0894b..000000000 --- a/package/PikaStdDevice/PikaStdDevice_GPIO.c +++ /dev/null @@ -1,172 +0,0 @@ -#include "PikaStdDevice_GPIO.h" -#include "PikaStdDevice_common.h" - -void PikaStdDevice_GPIO_init(PikaObj* self) { - obj_setInt(self, "isEnable", 0); - obj_setStr(self, "pin", "none"); - obj_setStr(self, "mode", "out"); - obj_setInt(self, "isOn", 0); - obj_setStr(self, "pull", "none"); - obj_setInt(self, "id", -999); - obj_setPtr(self, "pika_dev", NULL); -} - -int PikaStdDevice_GPIO_getId(PikaObj* self) { - return obj_getInt(self, "id"); -} - -void PikaStdDevice_GPIO_setId(PikaObj* self, int id) { - obj_setInt(self, "id", id); -} - -void PikaStdDevice_GPIO___init__(PikaObj* self) { - PikaStdDevice_GPIO_init(self); - obj_setInt(self, "SIGNAL_RISING", PIKA_HAL_GPIO_EVENT_SIGNAL_RISING); - obj_setInt(self, "SIGNAL_FALLING", PIKA_HAL_GPIO_EVENT_SIGNAL_FALLING); - obj_setInt(self, "SIGNAL_ANY", PIKA_HAL_GPIO_EVENT_SIGNAL_ANY); -} - -void PikaStdDevice_GPIO_disable(PikaObj* self) { - obj_setInt(self, "isEnable", 0); - obj_runNativeMethod(self, "platformDisable", NULL); -} - -void PikaStdDevice_GPIO_enable(PikaObj* self) { - obj_setInt(self, "isEnable", 1); - obj_runNativeMethod(self, "platformEnable", NULL); -} - -char* PikaStdDevice_GPIO_getMode(PikaObj* self) { - return obj_getStr(self, "mode"); -} - -char* PikaStdDevice_GPIO_getPin(PikaObj* self) { - return obj_getStr(self, "pin"); -} - -void PikaStdDevice_GPIO_low(PikaObj* self) { - obj_setInt(self, "isOn", 0); - obj_runNativeMethod(self, "platformLow", NULL); -} - -void PikaStdDevice_GPIO_high(PikaObj* self) { - obj_setInt(self, "isOn", 1); - obj_runNativeMethod(self, "platformHigh", NULL); -} - -int PikaStdDevice_GPIO_read(PikaObj* self) { - obj_runNativeMethod(self, "platformRead", NULL); - return obj_getInt(self, "readBuff"); -} - -void PikaStdDevice_GPIO_setMode(PikaObj* self, char* mode) { - if (strEqu(mode, "out") || strEqu(mode, "in")) { - obj_setStr(self, "mode", mode); - obj_runNativeMethod(self, "platformSetMode", NULL); - } else { - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] GPIO mode should be 'out' or 'in'."); - } -} - -void PikaStdDevice_GPIO_setPull(PikaObj* self, char* pull) { - if (strEqu(pull, "up") || strEqu(pull, "down") || strEqu(pull, "none")) { - obj_setStr(self, "pull", pull); - } else { - obj_setErrorCode(self, 1); - obj_setSysOut(self, - "[error] GPIO pull should be 'up', 'down' or 'none'."); - } -} - -static pika_dev* _get_dev(PikaObj* self) { - pika_dev* dev = obj_getPtr(self, "pika_dev"); - if (NULL != dev) { - return dev; - } - dev = pika_hal_open(PIKA_HAL_GPIO, obj_getStr(self, "pin")); - if (NULL == dev) { - __platform_printf("Error: open GPIO '%s' failed.\r\n", - obj_getStr(self, "pin")); - } - obj_setPtr(self, "pika_dev", dev); - return dev; -} - -void PikaStdDevice_GPIO_setPin(PikaObj* self, char* pinName) { - obj_setStr(self, "pin", pinName); -} - -void PikaStdDevice_GPIO_platformDisable(PikaObj* self) { - pika_dev* dev = _get_dev(self); - pika_hal_ioctl(dev, PIKA_HAL_IOCTL_DISABLE); -} - -void PikaStdDevice_GPIO_platformEnable(PikaObj* self) { - pika_dev* dev = _get_dev(self); - pika_hal_ioctl(dev, PIKA_HAL_IOCTL_ENABLE); -} - -void PikaStdDevice_GPIO_platformLow(PikaObj* self) { - pika_dev* dev = _get_dev(self); - uint32_t val = 0; - pika_hal_write(dev, &val, sizeof(val)); -} - -void PikaStdDevice_GPIO_platformHigh(PikaObj* self) { - pika_dev* dev = _get_dev(self); - uint32_t val = 1; - pika_hal_write(dev, &val, sizeof(val)); -} - -void PikaStdDevice_GPIO_platformSetMode(PikaObj* self) { - char* mode = obj_getStr(self, "mode"); - pika_hal_GPIO_config cfg = {0}; - if (strEqu(mode, "in")) { - cfg.dir = PIKA_HAL_GPIO_DIR_IN; - } else { - cfg.dir = PIKA_HAL_GPIO_DIR_OUT; - } - pika_dev* dev = _get_dev(self); - char* pull = obj_getStr(self, "pull"); - if (strEqu(pull, "up")) { - cfg.pull = PIKA_HAL_GPIO_PULL_UP; - } - if (strEqu(pull, "down")) { - cfg.pull = PIKA_HAL_GPIO_PULL_DOWN; - } - if (strEqu(pull, "none")) { - cfg.pull = PIKA_HAL_GPIO_PULL_NONE; - } - pika_hal_ioctl(dev, PIKA_HAL_IOCTL_CONFIG, &cfg); -} - -void PikaStdDevice_GPIO_platformRead(PikaObj* self) { - pika_dev* dev = _get_dev(self); - uint32_t val = 0; - pika_hal_read(dev, &val, sizeof(val)); - obj_setInt(self, "readBuff", val); -} - -void PikaStdDevice_GPIO_setCallBack(PikaObj* self, - Arg* eventCallback, - int filter) { -#if PIKA_EVENT_ENABLE - pika_dev* dev = _get_dev(self); - _PikaStdDevice_setCallBack(self, eventCallback, (uintptr_t)dev); - /* regist event to pika_hal */ - pika_hal_GPIO_config cfg_cb = {0}; - cfg_cb.event_callback = (void*)_PikaStdDevice_event_handler; - cfg_cb.event_callback_filter = filter; - cfg_cb.event_callback_ena = PIKA_HAL_EVENT_CALLBACK_ENA_ENABLE; - pika_hal_ioctl(dev, PIKA_HAL_IOCTL_CONFIG, &cfg_cb); -#else - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] PIKA_EVENT_ENABLE is disabled."); -#endif -} - -void PikaStdDevice_GPIO_close(PikaObj* self) { - pika_dev* dev = _get_dev(self); - pika_hal_close(dev); -} diff --git a/package/PikaStdDevice/PikaStdDevice_IIC.c b/package/PikaStdDevice/PikaStdDevice_IIC.c deleted file mode 100644 index 332d896e2..000000000 --- a/package/PikaStdDevice/PikaStdDevice_IIC.c +++ /dev/null @@ -1,85 +0,0 @@ -#include "PikaStdDevice_IIC.h" -#include "PikaStdDevice_common.h" - -void PikaStdDevice_IIC_init(PikaObj* self) { - obj_setInt(self, "deviceAddr", 0); - obj_setStr(self, "SCLpin", "PA0"); - obj_setStr(self, "SDApin", "PA1"); -} - -void PikaStdDevice_IIC___init__(PikaObj* self) { - PikaStdDevice_IIC_init(self); -} - -void PikaStdDevice_IIC_enable(PikaObj* self) { - obj_runNativeMethod(self, "platformEnable", NULL); -} - -void PikaStdDevice_IIC_disable(PikaObj* self) { - obj_runNativeMethod(self, "platformDisable", NULL); -} - -void PikaStdDevice_IIC_setDeviceAddr(PikaObj* self, int addr) { - obj_setInt(self, "deviceAddr", addr); -} - -void PikaStdDevice_IIC_setPinSCL(PikaObj* self, char* pin) { - obj_setStr(self, "SCLpin", pin); -} - -void PikaStdDevice_IIC_setPinSDA(PikaObj* self, char* pin) { - obj_setStr(self, "SDApin", pin); -} - -void PikaStdDevice_IIC_write(PikaObj* self, int addr, char* data) { - obj_setStr(self, "writeData", data); - obj_setInt(self, "writeAddr", addr); - obj_runNativeMethod(self, "platformWrite", NULL); -} - -void PikaStdDevice_IIC_writeBytes(PikaObj* self, - int addr, - uint8_t* data, - int length) { - obj_setBytes(self, "writeData", data, length); - obj_setInt(self, "writeAddr", addr); - obj_runNativeMethod(self, "platformWriteBytes", NULL); -} - -char* PikaStdDevice_IIC_read(PikaObj* self, int addr, int length) { - obj_setInt(self, "length", length); - obj_setInt(self, "readAddr", addr); - obj_runNativeMethod(self, "platformRead", NULL); - return obj_getStr(self, "readData"); -} - -Arg* PikaStdDevice_IIC_readBytes(PikaObj* self, int addr, int length) { - obj_setInt(self, "length", length); - obj_setInt(self, "readAddr", addr); - obj_runNativeMethod(self, "platformReadBytes", NULL); - return arg_copy(obj_getArg(self, "readData")); -} - -void PikaStdDevice_IIC_platformWrite(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_IIC_platformEnable(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_IIC_platformDisable(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_IIC_platformRead(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_IIC_platformReadBytes(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_IIC_platformWriteBytes(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} diff --git a/package/PikaStdDevice/PikaStdDevice_PWM.c b/package/PikaStdDevice/PikaStdDevice_PWM.c deleted file mode 100644 index 1bffbdd47..000000000 --- a/package/PikaStdDevice/PikaStdDevice_PWM.c +++ /dev/null @@ -1,112 +0,0 @@ -#include "PikaStdDevice_PWM.h" -#include "PikaStdDevice_common.h" - -void PikaStdDevice_PWM_init(PikaObj* self) { - obj_setStr(self, "pin", "none"); - obj_setStr(self, "name", "none"); - obj_setInt(self, "freq", 1000); - obj_setInt(self, "ch", 0); - obj_setFloat(self, "duty", 0.5f); -} - -void PikaStdDevice_PWM___init__(PikaObj* self) { - PikaStdDevice_PWM_init(self); -} - -void PikaStdDevice_PWM_setPin(PikaObj* self, char* pin) { - obj_setStr(self, "pin", pin); -} - -void PikaStdDevice_PWM_setFrequency(PikaObj* self, int freq) { - obj_setInt(self, "freq", freq); - obj_runNativeMethod(self, "platformSetFrequency", NULL); -} - -void PikaStdDevice_PWM_setDuty(PikaObj* self, pika_float duty) { - obj_setFloat(self, "duty", duty); - obj_runNativeMethod(self, "platformSetDuty", NULL); -} - -void PikaStdDevice_PWM_enable(PikaObj* self) { - obj_runNativeMethod(self, "platformEnable", NULL); -} - -void PikaStdDevice_PWM_disable(PikaObj* self) { - obj_runNativeMethod(self, "platformDisable", NULL); -} - -pika_float PikaStdDevice_PWM_getDuty(PikaObj* self) { - return obj_getFloat(self, "duty"); -} - -int PikaStdDevice_PWM_getFrequency(PikaObj* self) { - return obj_getInt(self, "freq"); -} - -char* PikaStdDevice_PWM_getName(PikaObj* self) { - return obj_getStr(self, "name"); -} - -void PikaStdDevice_PWM_setName(PikaObj* self, char* name) { - obj_setStr(self, "name", name); -} - -void PikaStdDevice_PWM_setChannel(PikaObj* self, int ch) { - obj_setInt(self, "ch", ch); -} - -int PikaStdDevice_PWM_getChannel(PikaObj* self) { - return obj_getInt(self, "ch"); -} - -void PikaStdDevice_PWM_setFreq(PikaObj* self, int freq) { - PikaStdDevice_PWM_setFrequency(self, freq); -} - -static pika_dev* _get_dev(PikaObj* self) { - pika_dev* dev = obj_getPtr(self, "pika_dev"); - if (NULL != dev) { - return dev; - } - dev = pika_hal_open(PIKA_HAL_PWM, obj_getStr(self, "pin")); - if (NULL == dev) { - __platform_printf("Error: open PWM '%s' failed.\r\n", - obj_getStr(self, "pin")); - } - obj_setPtr(self, "pika_dev", dev); - return dev; -} - -void PikaStdDevice_PWM_platformEnable(PikaObj* self) { - pika_dev* dev = _get_dev(self); - pika_hal_ioctl(dev, PIKA_HAL_IOCTL_ENABLE); -} - -void PikaStdDevice_PWM_platformSetDuty(PikaObj* self) { - pika_float duty = obj_getFloat(self, "duty"); // 0.0 ~ 1.0 - uint32_t freq = obj_getInt(self, "freq"); // Hz - pika_hal_PWM_config cfg = {0}; - /* ns */ - cfg.duty = (uint32_t)(1000000000.0f / freq * duty); - pika_hal_ioctl(_get_dev(self), PIKA_HAL_IOCTL_CONFIG, &cfg); -} - -void PikaStdDevice_PWM_platformSetFrequency(PikaObj* self) { - uint32_t freq = obj_getInt(self, "freq"); // Hz - pika_float duty = obj_getFloat(self, "duty"); // 0.0 ~ 1.0 - pika_hal_PWM_config cfg = {0}; - /* ns */ - cfg.period = (uint32_t)(1000000000.0f / freq); - cfg.duty = (uint32_t)(1000000000.0f / freq * duty); - pika_hal_ioctl(_get_dev(self), PIKA_HAL_IOCTL_CONFIG, &cfg); -} - -void PikaStdDevice_PWM_platformDisable(PikaObj* self) { - pika_dev* dev = _get_dev(self); - pika_hal_ioctl(dev, PIKA_HAL_IOCTL_DISABLE); -} - -void PikaStdDevice_PWM_close(PikaObj* self) { - pika_dev* dev = _get_dev(self); - pika_hal_close(dev); -} diff --git a/package/PikaStdDevice/PikaStdDevice_SPI.c b/package/PikaStdDevice/PikaStdDevice_SPI.c deleted file mode 100644 index fe55ddf12..000000000 --- a/package/PikaStdDevice/PikaStdDevice_SPI.c +++ /dev/null @@ -1,99 +0,0 @@ -#include "PikaStdDevice_SPI.h" -#include "PikaStdDevice_common.h" - -void PikaStdDevice_SPI___init__(PikaObj* self) { - obj_setInt(self, "baudRate", 1000); - obj_setInt(self, "id", 0); - obj_setStr(self, "name", "none"); - obj_setInt(self, "phase", 0); - obj_setStr(self, "MISOpin", "none"); - obj_setStr(self, "MOSIpin", "none"); - obj_setStr(self, "SCKpin", "none"); - obj_setInt(self, "polarity", 0); -} - -void PikaStdDevice_SPI_disable(PikaObj* self) { - obj_runNativeMethod(self, "platformDisable", NULL); -} - -void PikaStdDevice_SPI_enable(PikaObj* self) { - obj_runNativeMethod(self, "platformEnable", NULL); -} - -void PikaStdDevice_SPI_write(PikaObj* self, char* data) { - obj_setStr(self, "writeData", data); - obj_runNativeMethod(self, "platformWrite", NULL); -} - -void PikaStdDevice_SPI_writeBytes(PikaObj* self, uint8_t* data, int length) { - obj_setBytes(self, "writeData", data, length); - obj_runNativeMethod(self, "platformWriteBytes", NULL); -} - -char* PikaStdDevice_SPI_read(PikaObj* self, int length) { - obj_setInt(self, "length", length); - obj_runNativeMethod(self, "platformRead", NULL); - return obj_getStr(self, "readData"); -} - -Arg* PikaStdDevice_SPI_readBytes(PikaObj* self, int length) { - obj_setInt(self, "length", length); - obj_runNativeMethod(self, "platformReadBytes", NULL); - return arg_copy(obj_getArg(self, "readData")); -} - -void PikaStdDevice_SPI_setBaudRate(PikaObj* self, int baudRate) { - obj_setInt(self, "baudRate", baudRate); -} - -void PikaStdDevice_SPI_setId(PikaObj* self, int id) { - obj_setInt(self, "id", id); -} - -void PikaStdDevice_SPI_setName(PikaObj* self, char* name) { - obj_setStr(self, "name", name); -} - -void PikaStdDevice_SPI_setPhase(PikaObj* self, int phase) { - obj_setInt(self, "phase", phase); -} - -void PikaStdDevice_SPI_setPinMISO(PikaObj* self, char* pin) { - obj_setStr(self, "MISOpin", pin); -} - -void PikaStdDevice_SPI_setPinMOSI(PikaObj* self, char* pin) { - obj_setStr(self, "MOSIpin", pin); -} - -void PikaStdDevice_SPI_setPinSCK(PikaObj* self, char* pin) { - obj_setStr(self, "SCKpin", pin); -} - -void PikaStdDevice_SPI_setPolarity(PikaObj* self, int polarity) { - obj_setInt(self, "polarity", polarity); -} - -void PikaStdDevice_SPI_platformDisable(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_SPI_platformEnable(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_SPI_platformWrite(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_SPI_platformRead(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_SPI_platformWriteBytes(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} - -void PikaStdDevice_SPI_platformReadBytes(PikaObj* self) { - ABSTRACT_METHOD_NEED_OVERRIDE_ERROR(); -} diff --git a/package/PikaStdDevice/PikaStdDevice_UART.c b/package/PikaStdDevice/PikaStdDevice_UART.c deleted file mode 100644 index 2de444d80..000000000 --- a/package/PikaStdDevice/PikaStdDevice_UART.c +++ /dev/null @@ -1,262 +0,0 @@ -#include "PikaStdDevice_UART.h" -#include "PikaStdDevice_common.h" - -void PikaStdDevice_UART_enable(PikaObj* self) { - obj_runNativeMethod(self, "platformEnable", NULL); -} - -void PikaStdDevice_UART_disable(PikaObj* self) { - obj_runNativeMethod(self, "platformDisable", NULL); -} - -void PikaStdDevice_UART_init(PikaObj* self) { - /* const */ - obj_setInt(self, "FLOW_CONTROL_NONE", PIKA_HAL_UART_FLOW_CONTROL_NONE); - obj_setInt(self, "FLOW_CONTROL_RTS", PIKA_HAL_UART_FLOW_CONTROL_RTS); - obj_setInt(self, "FLOW_CONTROL_CTS", PIKA_HAL_UART_FLOW_CONTROL_CTS); - obj_setInt(self, "FLOW_CONTROL_RTS_CTS", - PIKA_HAL_UART_FLOW_CONTROL_RTS_CTS); - - obj_setInt(self, "SIGNAL_RX", PIKA_HAL_UART_EVENT_SIGNAL_RX); - obj_setInt(self, "SIGNAL_TX", PIKA_HAL_UART_EVENT_SIGNAL_TX); - - obj_setInt(self, "STOP_BITS_1", PIKA_HAL_UART_STOP_BITS_1); - obj_setInt(self, "STOP_BITS_2", PIKA_HAL_UART_STOP_BITS_2); - obj_setInt(self, "STOP_BITS_1_5", PIKA_HAL_UART_STOP_BITS_1_5); - obj_setInt(self, "PARITY_NONE", PIKA_HAL_UART_PARITY_NONE); - obj_setInt(self, "PARITY_ODD", PIKA_HAL_UART_PARITY_ODD); - obj_setInt(self, "PARITY_EVEN", PIKA_HAL_UART_PARITY_EVEN); - - /* default */ - obj_setInt(self, "baudRate", 115200); - obj_setInt(self, "id", 1); - obj_setStr(self, "readBuff", ""); - obj_setInt(self, "flowControl", PIKA_HAL_UART_FLOW_CONTROL_NONE); - obj_setStr(self, "TXpin", "none"); - obj_setStr(self, "RXpin", "none"); - obj_setStr(self, "RTSpin", "none"); - obj_setStr(self, "CTSpin", "none"); - obj_setInt(self, "dataBits", 8); - obj_setInt(self, "parity", PIKA_HAL_UART_PARITY_NONE); - obj_setInt(self, "stopBits", PIKA_HAL_UART_STOP_BITS_1); -} - -void PikaStdDevice_UART___init__(PikaObj* self) { - PikaStdDevice_UART_init(self); -} - -char* PikaStdDevice_UART_read(PikaObj* self, int length) { - obj_setInt(self, "length", length); - obj_runNativeMethod(self, "platformRead", NULL); - return obj_getStr(self, "readData"); -} - -Arg* PikaStdDevice_UART_readBytes(PikaObj* self, int length) { - obj_setInt(self, "length", length); - obj_runNativeMethod(self, "platformReadBytes", NULL); - return arg_copy(obj_getArg(self, "readData")); -} - -void PikaStdDevice_UART_setBaudRate(PikaObj* self, int baudRate) { - obj_setInt(self, "baudRate", baudRate); -} - -void PikaStdDevice_UART_setFlowControl(PikaObj* self, int flowControl) { - obj_setInt(self, "flowControl", flowControl); -} - -void PikaStdDevice_UART_setDataBits(PikaObj* self, int dataBits) { - obj_setInt(self, "dataBits", dataBits); -} - -void PikaStdDevice_UART_setParity(PikaObj* self, int parity) { - obj_setInt(self, "parity", parity); -} - -void PikaStdDevice_UART_setStopBits(PikaObj* self, int stopBits) { - obj_setInt(self, "stopBits", stopBits); -} - -void PikaStdDevice_UART_setId(PikaObj* self, int id) { - obj_setInt(self, "id", id); -} - -void PikaStdDevice_UART_write(PikaObj* self, char* data) { - obj_setStr(self, "writeData", data); - obj_runNativeMethod(self, "platformWrite", NULL); -} - -void PikaStdDevice_UART_writeBytes(PikaObj* self, uint8_t* data, int length) { - obj_setBytes(self, "writeData", data, length); - obj_runNativeMethod(self, "platformWriteBytes", NULL); -} - -static pika_dev* _get_dev(PikaObj* self) { - pika_dev* dev = obj_getPtr(self, "pika_dev"); - if (NULL != dev) { - return dev; - } - int id = obj_getInt(self, "id"); - char id_str[32] = {0}; - sprintf(id_str, "UART%d", id); - dev = pika_hal_open(PIKA_HAL_UART, id_str); - if (NULL == dev) { - __platform_printf("Error: open UART '%s' failed.\r\n", id_str); - } - obj_setPtr(self, "pika_dev", dev); - return dev; -} - -void PikaStdDevice_UART_platformEnable(PikaObj* self) { - pika_dev* dev = _get_dev(self); - if (NULL == dev) { - __platform_printf("Error: open UART '%d' failed.\r\n", - (int)obj_getInt(self, "id")); - return; - } - pika_hal_UART_config cfg = {0}; - cfg.baudrate = obj_getInt(self, "baudRate"); - cfg.flow_control = obj_getInt(self, "flowControl"); - cfg.stop_bits = obj_getInt(self, "stopBits"); - cfg.parity = obj_getInt(self, "parity"); - cfg.data_bits = obj_getInt(self, "dataBits"); - if (!strEqu(obj_getStr(self, "TXpin"), "none")) { - cfg.TX = pika_hal_open(PIKA_HAL_GPIO, obj_getStr(self, "TXpin")); - if (NULL == cfg.TX) { - __platform_printf("Error: open GPIO '%s' failed.\r\n", - obj_getStr(self, "TXpin")); - } - } - if (!strEqu(obj_getStr(self, "RXpin"), "none")) { - cfg.RX = pika_hal_open(PIKA_HAL_GPIO, obj_getStr(self, "RXpin")); - if (NULL == cfg.RX) { - __platform_printf("Error: open GPIO '%s' failed.\r\n", - obj_getStr(self, "RXpin")); - } - } - if (!strEqu(obj_getStr(self, "RTSpin"), "none")) { - cfg.RTS = pika_hal_open(PIKA_HAL_GPIO, obj_getStr(self, "RTSpin")); - if (NULL == cfg.RTS) { - __platform_printf("Error: open GPIO '%s' failed.\r\n", - obj_getStr(self, "RTSpin")); - } - } - if (!strEqu(obj_getStr(self, "CTSpin"), "none")) { - cfg.CTS = pika_hal_open(PIKA_HAL_GPIO, obj_getStr(self, "CTSpin")); - if (NULL == cfg.CTS) { - __platform_printf("Error: open GPIO '%s' failed.\r\n", - obj_getStr(self, "CTSpin")); - } - } - int err = -1; - err = pika_hal_ioctl(dev, PIKA_HAL_IOCTL_CONFIG, &cfg); - if (err != 0) { - __platform_printf("Error: config UART '%d' failed.\r\n", - (int)obj_getInt(self, "id")); - return; - } - err = pika_hal_ioctl(dev, PIKA_HAL_IOCTL_ENABLE); - if (err != 0) { - __platform_printf("Error: enable UART '%d' failed.\r\n", - (int)obj_getInt(self, "id")); - return; - } -} - -void PikaStdDevice_UART_platformRead(PikaObj* self) { - int len = obj_getInt(self, "length"); - obj_setBytes(self, "_readData", NULL, len + 1); - char* buff = (char*)obj_getBytes(self, "_readData"); - pika_dev* dev = _get_dev(self); - int len_get = pika_hal_read(dev, buff, len); - buff[len_get] = 0; - obj_setStr(self, "readData", buff); -} - -void PikaStdDevice_UART_platformWrite(PikaObj* self) { - char* data = obj_getStr(self, "writeData"); - pika_dev* dev = _get_dev(self); - pika_hal_write(dev, data, strlen(data)); -} - -void PikaStdDevice_UART_platformDisable(PikaObj* self) { - pika_dev* dev = _get_dev(self); - if (NULL == dev) { - __platform_printf("Error: open UART '%d' failed.\r\n", - (int)obj_getInt(self, "id")); - return; - } - pika_hal_ioctl(dev, PIKA_HAL_IOCTL_DISABLE); -} - -void PikaStdDevice_UART_platformReadBytes(PikaObj* self) { - int len = obj_getInt(self, "length"); - obj_setBytes(self, "_readData", NULL, len + 1); - uint8_t* buff = obj_getBytes(self, "_readData"); - pika_dev* dev = _get_dev(self); - int len_get = pika_hal_read(dev, buff, len); - obj_setBytes(self, "readData", buff, len_get); -} - -void PikaStdDevice_UART_platformWriteBytes(PikaObj* self) { - uint8_t* data = obj_getBytes(self, "writeData"); - int len = obj_getBytesSize(self, "writeData"); - pika_dev* dev = _get_dev(self); - pika_hal_write(dev, data, len); -} - -void PikaStdDevice_UART_setCallBack(PikaObj* self, - Arg* eventCallBack, - int filter) { -#if PIKA_EVENT_ENABLE - pika_dev* dev = _get_dev(self); - _PikaStdDevice_setCallBack(self, eventCallBack, (uintptr_t)dev); - /* regist event to pika_hal */ - pika_hal_UART_config cfg_cb = {0}; - cfg_cb.event_callback = (void*)_PikaStdDevice_event_handler; - cfg_cb.event_callback_filter = filter; - cfg_cb.event_callback_ena = PIKA_HAL_EVENT_CALLBACK_ENA_ENABLE; - pika_hal_ioctl(dev, PIKA_HAL_IOCTL_CONFIG, &cfg_cb); -#else - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] PIKA_EVENT_ENABLE is disabled."); -#endif -} - -void PikaStdDevice_UART_close(PikaObj* self) { - pika_dev* dev = _get_dev(self); - pika_hal_UART_config* cfg = (pika_hal_UART_config*)dev->ioctl_config; - if (NULL != cfg->TX) { - pika_hal_close(cfg->TX); - cfg->TX = NULL; - } - if (NULL != cfg->RX) { - pika_hal_close(cfg->RX); - cfg->RX = NULL; - } - if (NULL != cfg->RTS) { - pika_hal_close(cfg->RTS); - cfg->RTS = NULL; - } - if (NULL != cfg->CTS) { - pika_hal_close(cfg->CTS); - cfg->CTS = NULL; - } - pika_hal_close(dev); -} - -void PikaStdDevice_UART_setPinCTS(PikaObj* self, char* pin) { - obj_setStr(self, "CTSpin", pin); -} - -void PikaStdDevice_UART_setPinRTS(PikaObj* self, char* pin) { - obj_setStr(self, "RTSpin", pin); -} - -void PikaStdDevice_UART_setPinRX(PikaObj* self, char* pin) { - obj_setStr(self, "RXpin", pin); -} - -void PikaStdDevice_UART_setPinTX(PikaObj* self, char* pin) { - obj_setStr(self, "TXpin", pin); -} diff --git a/package/PikaStdDevice/PikaStdDevice_common.c b/package/PikaStdDevice/PikaStdDevice_common.c deleted file mode 100644 index 6c861236b..000000000 --- a/package/PikaStdDevice/PikaStdDevice_common.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "PikaStdDevice_common.h" - -extern PikaEventListener* g_pika_device_event_listener; -void _PikaStdDevice_event_handler(pika_dev* dev, int signal) { - pika_eventListener_sendSignal(g_pika_device_event_listener, (uintptr_t)dev, - signal); -} - -void _PikaStdDevice_setCallBack(PikaObj* self, - Arg* eventCallback, - uint32_t eventId) { - obj_setArg(self, "eventCallBack", eventCallback); - /* init event_listener for the first time */ - if (NULL == g_pika_device_event_listener) { - pika_eventListener_init(&g_pika_device_event_listener); - } - /* regist event to event listener */ - pika_eventListener_registEvent(g_pika_device_event_listener, eventId, self); -} - -extern volatile PikaObj* __pikaMain; -PikaObj* PikaStdDevice_Time(PikaObj* self) { - PikaObj* time = obj_getPtr((PikaObj*)__pikaMain, "time"); - if (NULL == time) { - obj_setErrorCode(self, -1); - obj_setSysOut(self, "Error: please install and import 'time' module"); - return NULL; - } - obj_refcntInc(time); - return time; -} diff --git a/package/PikaStdDevice/PikaStdDevice_common.h b/package/PikaStdDevice/PikaStdDevice_common.h deleted file mode 100644 index a8a19a86c..000000000 --- a/package/PikaStdDevice/PikaStdDevice_common.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _PIKA_STDDEVICE_COMMON_H -#define _PIKA_STDDEVICE_COMMON_H -#include "PikaObj.h" -#include "PikaVM.h" -#include "pika_hal.h" -void _PikaStdDevice_setCallBack(PikaObj* self, - Arg* eventCallback, - uint32_t eventId); - -void _PikaStdDevice_event_handler(pika_dev* dev, int signal); - -#endif diff --git a/package/PikaStdDevice/README.md b/package/PikaStdDevice/README.md new file mode 100644 index 000000000..490534358 --- /dev/null +++ b/package/PikaStdDevice/README.md @@ -0,0 +1,30 @@ +# PHP + +嵌入式Python速成班,基于PikaPython,简称为PHP(PikaPython 黄埔) + +## 第一期 + +- [开班公告(报名截止至2023年6月30日)](https://mp.weixin.qq.com/s?__biz=MzU4NzUzMDc1OA==&mid=2247484801&idx=1&sn=194d567cb5c8174f43007a0a0427b11a&chksm=fdebd2e8ca9c5bfeeff134aa906acb3de2496ea1faed3bba8ba61139705ea427d577183a2e19&token=955099065&lang=zh_CN#rd) + +- [开发板资料(开源硬件)](Phase1/Hardware) + +开发板底版: + +- 主控:ESP32S3 +- 4G:FS800 +- rs485 +- 蜂鸣器 +- nand FLASH +- 继电器 +- 12V供电 +- 温度传感器 +- 光敏电阻 + +![9bd0a46068c3f96db0ad85e40709d6d](assets/9bd0a46068c3f96db0ad85e40709d6d.png) + +LCD拓展板: + +- 240*320 LCD屏 +- 按键*4 + +![3769ab4d3c57bd9d48ca4e07b48603a](assets/3769ab4d3c57bd9d48ca4e07b48603a.png) \ No newline at end of file diff --git a/package/PikaStdDevice/pika_hal.c b/package/PikaStdDevice/pika_hal.c deleted file mode 100644 index 1ae4f4777..000000000 --- a/package/PikaStdDevice/pika_hal.c +++ /dev/null @@ -1,325 +0,0 @@ -#include "pika_hal.h" -#include "PikaObj.h" - -#define PIKA_HAL_TABLE_FILE_API -#include "pika_hal_table.h" - -static const pika_dev_impl pika_dev_impl_list[] = { -#define PIKA_HAL_TABLE_IMPL -#include "pika_hal_table.h" -}; - -#define _PIKA_DEV_TYPE_MAX \ - (sizeof pika_dev_impl_list / sizeof pika_dev_impl_list[0]) - -static pika_dev_impl* _pika_dev_get_impl(PIKA_HAL_DEV_TYPE type) { - if (type >= _PIKA_DEV_TYPE_MAX) { - return NULL; - } - return (pika_dev_impl*)&pika_dev_impl_list[type]; -} - -static size_t _pika_hal_dev_config_size(PIKA_HAL_DEV_TYPE dev_type) { -#define PIKA_HAL_TABLE_DEV_CONFIG_SIZE -#include "pika_hal_table.h" - return 0; -} - -pika_dev* pika_hal_open(PIKA_HAL_DEV_TYPE dev_type, char* name) { - if (NULL == name) { - __platform_printf("Error: dev_open name is NULL.\r\n"); - return NULL; - } - int ret = -1; - pika_dev* dev = NULL; - if (dev_type >= _PIKA_DEV_TYPE_MAX) { - __platform_printf("Error: dev_type invalied.\r\n"); - goto __exit; - } - pika_dev_impl* impl = _pika_dev_get_impl(dev_type); - dev = (pika_dev*)pikaMalloc(sizeof(pika_dev)); - if (dev == NULL) { - goto __exit; - } - memset(dev, 0, sizeof(pika_dev)); - dev->type = dev_type; - dev->ioctl_config = pikaMalloc(_pika_hal_dev_config_size(dev_type)); - if (dev->ioctl_config == NULL) { - goto __exit; - } - memset(dev->ioctl_config, 0, _pika_hal_dev_config_size(dev_type)); - ret = impl->open(dev, name); -__exit: - if (0 == ret) { - return dev; - } - /* error */ - __platform_printf("Error: dev_open failed.\r\n"); - if (dev && dev->ioctl_config) { - pikaFree(dev->ioctl_config, _pika_hal_dev_config_size(dev_type)); - dev->ioctl_config = NULL; - } - if (dev) { - pikaFree(dev, sizeof(pika_dev)); - } - return NULL; -} - -int pika_hal_close(pika_dev* dev) { - int ret = -1; - if (dev == NULL) { - goto __exit; - } - pika_dev_impl* impl = _pika_dev_get_impl(dev->type); - if (impl->close == NULL) { - goto __exit; - } - ret = impl->close(dev); -__exit: - if (NULL != dev && NULL != dev->ioctl_config) { - pikaFree(dev->ioctl_config, _pika_hal_dev_config_size(dev->type)); - dev->ioctl_config = NULL; - } - if (NULL != dev) { - pikaFree(dev, sizeof(pika_dev)); - } - return ret; -} - -int pika_hal_read(pika_dev* dev, void* buf, size_t len) { - if (dev == NULL) { - return -1; - } - pika_dev_impl* impl = _pika_dev_get_impl(dev->type); - if (impl->read == NULL) { - return -1; - } - return impl->read(dev, buf, len); -} - -int pika_hal_write(pika_dev* dev, void* buf, size_t len) { - if (dev == NULL) { - return -1; - } - pika_dev_impl* impl = _pika_dev_get_impl(dev->type); - if (impl->write == NULL) { - return -1; - } - return impl->write(dev, buf, len); -} - -static const int _pika_hal_cmd_arg_cnt[] = { - [PIKA_HAL_IOCTL_CONFIG] = 1, - [PIKA_HAL_IOCTL_ENABLE] = 0, - [PIKA_HAL_IOCTL_DISABLE] = 0, -}; - -#define _PIKA_HAL_CMD_ARG_CNT_MAX \ - (sizeof _pika_hal_cmd_arg_cnt / sizeof _pika_hal_cmd_arg_cnt[0]) - -static int _pika_hal_get_arg_cnt(PIKA_HAL_IOCTL_CMD cmd) { - return _pika_hal_cmd_arg_cnt[PIKA_HAL_IOCTL_CONFIG]; -} - -int _pika_hal_ioctl_merge_config(pika_dev* dev, void* config_in) { -#define PIKA_HAL_TABLE_IOCTL_MERGE_CONFIG -#include "pika_hal_table.h" - return -1; -} - -int pika_hal_ioctl(pika_dev* dev, PIKA_HAL_IOCTL_CMD cmd, ...) { - int ret = -1; - PIKA_HAL_IOCTL_CMD cmd_origin = cmd; - if (dev == NULL) { - return -1; - } - cmd = _pika_hal_get_arg_cnt(cmd_origin); - if (cmd < 0) { - return -1; - } - pika_dev_impl* impl = _pika_dev_get_impl(dev->type); - if (impl->ioctl == NULL) { - return -1; - } - void* arg_in = NULL; - if (cmd != 0) { - va_list args; - va_start(args, cmd); - arg_in = va_arg(args, void*); - if (cmd_origin == PIKA_HAL_IOCTL_CONFIG) { - ret = _pika_hal_ioctl_merge_config(dev, arg_in); - } else { - ret = 0; - } - va_end(args); - if (0 != ret) { - return ret; - } - } - if (cmd_origin == PIKA_HAL_IOCTL_CONFIG) { - ret = impl->ioctl(dev, cmd_origin, dev->ioctl_config); - } else { - ret = impl->ioctl(dev, cmd_origin, arg_in); - } - if (ret == 0) { - if (cmd_origin == PIKA_HAL_IOCTL_ENABLE) { - dev->is_enabled = 1; - } - if (cmd_origin == PIKA_HAL_IOCTL_DISABLE) { - dev->is_enabled = 0; - } - } - return ret; -} - -#define _IOCTL_CONFIG_USE_DEFAULT(item, default) \ - if (src->item == 0) { \ - if (dst->item == 0) { \ - /* use default value */ \ - dst->item = default; \ - } else { \ - /* keep exist value */ \ - } \ - } else { \ - /* use input value */ \ - dst->item = src->item; \ - } - -#define _IOCTL_CONFIG_USE_DEFAULT_STR(item, default) \ - if (src->item[0] == '\0') { \ - if (dst->item[0] == '\0') { \ - /* use default value */ \ - strcpy(dst->item, default); \ - } else { \ - /* keep exist value */ \ - } \ - } else { \ - /* use input value */ \ - strcpy(dst->item, src->item); \ - } - -int pika_hal_GPIO_ioctl_merge_config(pika_hal_GPIO_config* dst, - pika_hal_GPIO_config* src) { - // printf("before merge: dst->dir=%d, src->dir=%d\r\n", dst->dir, src->dir); - _IOCTL_CONFIG_USE_DEFAULT(dir, PIKA_HAL_GPIO_DIR_IN); - // printf("after merge: dst->dir=%d, src->dir=%d\r\n", dst->dir, src->dir); - _IOCTL_CONFIG_USE_DEFAULT(pull, PIKA_HAL_GPIO_PULL_NONE); - _IOCTL_CONFIG_USE_DEFAULT(speed, PIKA_HAL_GPIO_SPEED_10M); - _IOCTL_CONFIG_USE_DEFAULT(event_callback, NULL); - _IOCTL_CONFIG_USE_DEFAULT(event_callback_filter, - PIKA_HAL_GPIO_EVENT_SIGNAL_RISING); - _IOCTL_CONFIG_USE_DEFAULT(event_callback_ena, - PIKA_HAL_EVENT_CALLBACK_ENA_ENABLE); - return 0; -} - -int pika_hal_UART_ioctl_merge_config(pika_hal_UART_config* dst, - pika_hal_UART_config* src) { - _IOCTL_CONFIG_USE_DEFAULT(baudrate, PIKA_HAL_UART_BAUDRATE_115200); - _IOCTL_CONFIG_USE_DEFAULT(data_bits, PIKA_HAL_UART_DATA_BITS_8); - _IOCTL_CONFIG_USE_DEFAULT(stop_bits, PIKA_HAL_UART_STOP_BITS_1); - _IOCTL_CONFIG_USE_DEFAULT(parity, PIKA_HAL_UART_PARITY_NONE); - _IOCTL_CONFIG_USE_DEFAULT(flow_control, PIKA_HAL_UART_FLOW_CONTROL_NONE); - _IOCTL_CONFIG_USE_DEFAULT(event_callback, NULL); - _IOCTL_CONFIG_USE_DEFAULT(event_callback_filter, - PIKA_HAL_UART_EVENT_SIGNAL_RX); - _IOCTL_CONFIG_USE_DEFAULT(event_callback_ena, - PIKA_HAL_EVENT_CALLBACK_ENA_ENABLE); - _IOCTL_CONFIG_USE_DEFAULT(TX, NULL); - _IOCTL_CONFIG_USE_DEFAULT(RX, NULL); - _IOCTL_CONFIG_USE_DEFAULT(RTS, NULL); - _IOCTL_CONFIG_USE_DEFAULT(CTS, NULL); - return 0; -} - -int pika_hal_SPI_ioctl_merge_config(pika_hal_SPI_config* dst, - pika_hal_SPI_config* src) { - _IOCTL_CONFIG_USE_DEFAULT(lsb_or_msb, PIKA_HAL_SPI_MSB); - _IOCTL_CONFIG_USE_DEFAULT(master_or_slave, PIKA_HAL_SPI_MASTER); - _IOCTL_CONFIG_USE_DEFAULT(mode, PIKA_HAL_SPI_MODE_0); - _IOCTL_CONFIG_USE_DEFAULT(data_width, PIKA_HAL_SPI_DATA_WIDTH_8); - _IOCTL_CONFIG_USE_DEFAULT(speed, PIKA_HAL_SPI_SPEED_2M); - _IOCTL_CONFIG_USE_DEFAULT(timeout, PIKA_HAL_SPI_TIMEOUT_1000MS); - return 0; -} - -int pika_hal_SOFT_SPI_ioctl_merge_config(pika_hal_SOFT_SPI_config* dst, - pika_hal_SOFT_SPI_config* src) { - _IOCTL_CONFIG_USE_DEFAULT(lsb_or_msb, PIKA_HAL_SPI_MSB); - _IOCTL_CONFIG_USE_DEFAULT(master_or_slave, PIKA_HAL_SPI_MASTER); - _IOCTL_CONFIG_USE_DEFAULT(mode, PIKA_HAL_SPI_MODE_0); - _IOCTL_CONFIG_USE_DEFAULT(data_width, PIKA_HAL_SPI_DATA_WIDTH_8); - _IOCTL_CONFIG_USE_DEFAULT(speed, PIKA_HAL_SPI_SPEED_2M); - _IOCTL_CONFIG_USE_DEFAULT(timeout, PIKA_HAL_SPI_TIMEOUT_1000MS); - _IOCTL_CONFIG_USE_DEFAULT(CS, NULL); - _IOCTL_CONFIG_USE_DEFAULT(SCK, NULL); - _IOCTL_CONFIG_USE_DEFAULT(MOSI, NULL); - _IOCTL_CONFIG_USE_DEFAULT(MISO, NULL); - return 0; -} - -int pika_hal_IIC_ioctl_merge_config(pika_hal_IIC_config* dst, - pika_hal_IIC_config* src) { - _IOCTL_CONFIG_USE_DEFAULT(address_width, PIKA_HAL_IIC_ADDRESS_WIDTH_7BIT); - _IOCTL_CONFIG_USE_DEFAULT(master_or_slave, PIKA_HAL_IIC_MASTER); - _IOCTL_CONFIG_USE_DEFAULT(slave_addr, 0); - _IOCTL_CONFIG_USE_DEFAULT(mem_addr_ena, PIKA_HAL_IIC_MEM_ADDR_ENA_DISABLE); - _IOCTL_CONFIG_USE_DEFAULT(mem_addr_size, PIKA_HAL_IIC_MEM_ADDR_SIZE_8BIT); - dst->mem_addr = src->mem_addr; - _IOCTL_CONFIG_USE_DEFAULT(speed, PIKA_HAL_IIC_SPEED_100K); - _IOCTL_CONFIG_USE_DEFAULT(timeout, PIKA_HAL_IIC_TIMEOUT_1000MS); - return 0; -} - -int pika_hal_SOFT_IIC_ioctl_merge_config(pika_hal_SOFT_IIC_config* dst, - pika_hal_SOFT_IIC_config* src) { - _IOCTL_CONFIG_USE_DEFAULT(SDA, NULL); - _IOCTL_CONFIG_USE_DEFAULT(SCL, NULL); - _IOCTL_CONFIG_USE_DEFAULT(address_width, PIKA_HAL_IIC_ADDRESS_WIDTH_7BIT); - _IOCTL_CONFIG_USE_DEFAULT(master_or_slave, PIKA_HAL_IIC_MASTER); - _IOCTL_CONFIG_USE_DEFAULT(slave_addr, 0); - _IOCTL_CONFIG_USE_DEFAULT(mem_addr_ena, PIKA_HAL_IIC_MEM_ADDR_ENA_DISABLE); - _IOCTL_CONFIG_USE_DEFAULT(mem_addr_size, PIKA_HAL_IIC_MEM_ADDR_SIZE_8BIT); - dst->mem_addr = src->mem_addr; - _IOCTL_CONFIG_USE_DEFAULT(speed, PIKA_HAL_IIC_SPEED_100K); - _IOCTL_CONFIG_USE_DEFAULT(timeout, PIKA_HAL_IIC_TIMEOUT_1000MS); - return 0; -} - -int pika_hal_PWM_ioctl_merge_config(pika_hal_PWM_config* dst, - pika_hal_PWM_config* src) { - _IOCTL_CONFIG_USE_DEFAULT(period, PIKA_HAL_PWM_PERIOD_1MS * 10); - // _IOCTL_CONFIG_USE_DEFAULT(duty, 0); - dst->duty = src->duty; - return 0; -} - -int pika_hal_ADC_ioctl_merge_config(pika_hal_ADC_config* dst, - pika_hal_ADC_config* src) { - _IOCTL_CONFIG_USE_DEFAULT(sampling_resolution, PIKA_HAL_ADC_RESOLUTION_12); - _IOCTL_CONFIG_USE_DEFAULT(sampling_freq, PIKA_HAL_ADC_SAMPLING_FREQ_100); - _IOCTL_CONFIG_USE_DEFAULT(continue_or_single, PIKA_HAL_ADC_SINGLE); - _IOCTL_CONFIG_USE_DEFAULT(vref, (pika_float)3.3); - _IOCTL_CONFIG_USE_DEFAULT(max, 8192); - return 0; -} - -int pika_hal_DAC_ioctl_merge_config(pika_hal_DAC_config* dst, - pika_hal_DAC_config* src) { - _IOCTL_CONFIG_USE_DEFAULT(speed, PIKA_HAL_DAC_SPEED_1K * 8); - _IOCTL_CONFIG_USE_DEFAULT(sampling_resolution, PIKA_HAL_DAC_RESOLUTION_12); - _IOCTL_CONFIG_USE_DEFAULT(vref, (pika_float)3.3); - _IOCTL_CONFIG_USE_DEFAULT(max, 3300000); - return 0; -} - -int pika_hal_WIFI_ioctl_merge_config(pika_hal_WIFI_config* dst, - pika_hal_WIFI_config* src) { - _IOCTL_CONFIG_USE_DEFAULT(mode, PIKA_HAL_WIFI_MODE_STA); - _IOCTL_CONFIG_USE_DEFAULT(channel, PIKA_HAL_WIFI_CHANNEL_0); - _IOCTL_CONFIG_USE_DEFAULT(max_connection, PIKA_HAL_WIFI_MAX_CONNECTION_4); - _IOCTL_CONFIG_USE_DEFAULT_STR(ap_ssid, "pikapython.com"); - _IOCTL_CONFIG_USE_DEFAULT_STR(ap_bssid, ""); - _IOCTL_CONFIG_USE_DEFAULT_STR(ap_password, "pikapython.com"); - return 0; -} diff --git a/package/PikaStdDevice/pika_hal.h b/package/PikaStdDevice/pika_hal.h deleted file mode 100644 index 0eab837b5..000000000 --- a/package/PikaStdDevice/pika_hal.h +++ /dev/null @@ -1,499 +0,0 @@ -#ifndef _PIKA_DEV_HAL_H -#define _PIKA_DEV_HAL_H -#include -#include -#include "PikaObj.h" - -/* - * pika_hal is a C Device HAL lib for PikaScript modules. - * the API of pika_hal is similar to the posix file API. - */ - -typedef enum { -#define PIKA_HAL_TABLE_DEV_TYPE -#include "pika_hal_table.h" -} PIKA_HAL_DEV_TYPE; - -typedef struct { - PIKA_HAL_DEV_TYPE type; - PIKA_BOOL is_enabled; - void* ioctl_config; - void* platform_data; -} pika_dev; - -typedef enum { - PIKA_HAL_IOCTL_CONFIG, - PIKA_HAL_IOCTL_ENABLE, - PIKA_HAL_IOCTL_DISABLE, - PIKA_HAL_IOCTL_WIFI_GET_ACTIVE, - PIKA_HAL_IOCTL_WIFI_GET_STATUS, - PIKA_HAL_IOCTL_WIFI_SCAN, - PIKA_HAL_IOCTL_WIFI_CONNECT, - PIKA_HAL_IOCTL_WIFI_DISCONNECT, - PIKA_HAL_IOCTL_WIFI_SET_IFCONFIG, - PIKA_HAL_IOCTL_WIFI_GET_IFCONFIG, - _ = 0xFFFFFFFF, // make sure it is 4 byte width -} PIKA_HAL_IOCTL_CMD; - -/* posix file like API */ -pika_dev* pika_hal_open(PIKA_HAL_DEV_TYPE dev_type, char* name); -int pika_hal_close(pika_dev* dev); -int pika_hal_read(pika_dev* dev, void* buf, size_t len); -int pika_hal_write(pika_dev* dev, void* buf, size_t len); -int pika_hal_ioctl(pika_dev* dev, PIKA_HAL_IOCTL_CMD cmd, ...); - -typedef enum { - _PIKA_HAL_GPIO_DIR_UNUSED = 0, - PIKA_HAL_GPIO_DIR_IN, - PIKA_HAL_GPIO_DIR_OUT, -} PIKA_HAL_GPIO_DIR; - -typedef enum { - _PIKA_HAL_GPIO_PULL_UNUSED = 0, - PIKA_HAL_GPIO_PULL_NONE, - PIKA_HAL_GPIO_PULL_UP, - PIKA_HAL_GPIO_PULL_DOWN, -} PIKA_HAL_GPIO_PULL; - -typedef enum { - _PIKA_HAL_GPIO_SPEED_UNUSED = 0, - PIKA_HAL_GPIO_SPEED_1M = 1000000, - PIKA_HAL_GPIO_SPEED_2M = 2000000, - PIKA_HAL_GPIO_SPEED_5M = 5000000, - PIKA_HAL_GPIO_SPEED_10M = 10000000, - PIKA_HAL_GPIO_SPEED_20M = 20000000, - PIKA_HAL_GPIO_SPEED_50M = 50000000, - PIKA_HAL_GPIO_SPEED_100M = 100000000, -} PIKA_HAL_GPIO_SPEED; - -typedef enum { - _PIKA_HAL_EVENT_CALLBACK_ENA_UNUSED = 0, - PIKA_HAL_EVENT_CALLBACK_ENA_ENABLE, - PIKA_HAL_EVENT_CALLBACK_ENA_DISABLE, -} PIKA_HAL_EVENT_CALLBACK_ENA; - -typedef enum { - _PIKA_HAL_GPIO_EVENT_SIGNAL_UNUSED = 0, - PIKA_HAL_GPIO_EVENT_SIGNAL_RISING, - PIKA_HAL_GPIO_EVENT_SIGNAL_FALLING, - PIKA_HAL_GPIO_EVENT_SIGNAL_ANY, -} PIKA_HAL_GPIO_EVENT_SIGNAL; - -typedef struct { - PIKA_HAL_GPIO_DIR dir; - PIKA_HAL_GPIO_PULL pull; - PIKA_HAL_GPIO_SPEED speed; - void (*event_callback)(pika_dev* dev, PIKA_HAL_GPIO_EVENT_SIGNAL signal); - PIKA_HAL_GPIO_EVENT_SIGNAL event_callback_filter; - PIKA_HAL_EVENT_CALLBACK_ENA event_callback_ena; -} pika_hal_GPIO_config; - -typedef enum { - _PIKA_HAL_UART_BAUDRATE_UNUSED = 0, - PIKA_HAL_UART_BAUDRATE_9600 = 9600, - PIKA_HAL_UART_BAUDRATE_19200 = 19200, - PIKA_HAL_UART_BAUDRATE_38400 = 38400, - PIKA_HAL_UART_BAUDRATE_57600 = 57600, - PIKA_HAL_UART_BAUDRATE_115200 = 115200, - PIKA_HAL_UART_BAUDRATE_2000000 = 2000000, - PIKA_HAL_UART_BAUDRATE_10000000 = 10000000, -} PIKA_HAL_UART_BAUDRATE; - -typedef enum { - _PIKA_HAL_UART_DATA_BITS_UNUSED = 0, - PIKA_HAL_UART_DATA_BITS_5 = 5, - PIKA_HAL_UART_DATA_BITS_6 = 6, - PIKA_HAL_UART_DATA_BITS_7 = 7, - PIKA_HAL_UART_DATA_BITS_8 = 8, -} PIKA_HAL_UART_DATA_BITS; - -typedef enum { - _PIKA_HAL_UART_STOP_BITS_UNUSED = 0, - PIKA_HAL_UART_STOP_BITS_1 = 1, - PIKA_HAL_UART_STOP_BITS_2 = 2, - PIKA_HAL_UART_STOP_BITS_1_5 = 3, -} PIKA_HAL_UART_STOP_BITS; - -typedef enum { - _PIKA_HAL_UART_PARITY_UNUSED = 0, - PIKA_HAL_UART_PARITY_NONE, - PIKA_HAL_UART_PARITY_ODD, - PIKA_HAL_UART_PARITY_EVEN, -} PIKA_HAL_UART_PARITY; - -typedef enum { - _PIKA_HAL_UART_EVENT_SIGNAL_UNUSED = 0, - PIKA_HAL_UART_EVENT_SIGNAL_RX, - PIKA_HAL_UART_EVENT_SIGNAL_TX, - PIKA_HAL_UART_EVENT_SIGNAL_ANY, -} PIKA_HAL_UART_EVENT_SIGNAL; - -typedef enum { - _PIKA_HAL_UART_FLOW_CONTROL_UNUSED = 0, - PIKA_HAL_UART_FLOW_CONTROL_NONE, - PIKA_HAL_UART_FLOW_CONTROL_RTS, - PIKA_HAL_UART_FLOW_CONTROL_CTS, - PIKA_HAL_UART_FLOW_CONTROL_RTS_CTS, -} PIKA_HAL_UART_FLOW_CONTROL; - -typedef struct { - PIKA_HAL_UART_BAUDRATE baudrate; - PIKA_HAL_UART_DATA_BITS data_bits; - PIKA_HAL_UART_STOP_BITS stop_bits; - PIKA_HAL_UART_PARITY parity; - PIKA_HAL_UART_FLOW_CONTROL flow_control; - void (*event_callback)(pika_dev* dev, PIKA_HAL_UART_EVENT_SIGNAL signal); - PIKA_HAL_UART_EVENT_SIGNAL event_callback_filter; - PIKA_HAL_EVENT_CALLBACK_ENA event_callback_ena; - pika_dev* TX; - pika_dev* RX; - pika_dev* RTS; - pika_dev* CTS; -} pika_hal_UART_config; - -typedef uint32_t PIKA_HAL_IIC_SLAVE_ADDR; -typedef uint32_t PIKA_HAL_IIC_MEM_ADDR; - -typedef enum PIKA_HAL_IIC_MEM_ADDR_SIZE { - _PIKA_HAL_IIC_MEM_ADDR_SIZE_UNUSED = 0, - PIKA_HAL_IIC_MEM_ADDR_SIZE_8BIT = 1, - PIKA_HAL_IIC_MEM_ADDR_SIZE_16BIT = 2, - PIKA_HAL_IIC_MEM_ADDR_SIZE_24BIT = 3, - PIKA_HAL_IIC_MEM_ADDR_SIZE_32BIT = 4, -} PIKA_HAL_IIC_MEM_ADDR_SIZE; - -typedef enum PIKA_HAL_IIC_MEM_ADDR_ENA { - _PIKA_HAL_IIC_MEM_ADDR_ENA_UNUSED = 0, - PIKA_HAL_IIC_MEM_ADDR_ENA_DISABLE, - PIKA_HAL_IIC_MEM_ADDR_ENA_ENABLE, -} PIKA_HAL_IIC_MEM_ADDR_ENA; - -typedef enum { - _PIKA_HAL_IIC_SPEED_UNUSED = 0, - PIKA_HAL_IIC_SPEED_100K = 100000, - PIKA_HAL_IIC_SPEED_400K = 400000, - PIKA_HAL_IIC_SPEED_1M = 1000000, -} PIKA_HAL_IIC_SPEED; - -typedef enum PIKA_HAL_IIC_MASTER_OR_SLAVE { - _PIKA_HAL_IIC_MASTER_OR_SLAVE_UNUSED = 0, - PIKA_HAL_IIC_MASTER, - PIKA_HAL_IIC_SLAVE, -} PIKA_HAL_IIC_MASTER_OR_SLAVE; - -typedef enum PIKA_HAL_IIC_ADDRESS_WIDTH { - _PIKA_HAL_IIC_ADDRESS_WIDTH_UNUSED = 0, - PIKA_HAL_IIC_ADDRESS_WIDTH_7BIT = 7, - PIKA_HAL_IIC_ADDRESS_WIDTH_10BIT = 10, -} PIKA_HAL_IIC_ADDRESS_WIDTH; - -typedef enum PIKA_HAL_IIC_TIMEOUT { - _PIKA_HAL_IIC_TIMEOUT_UNUSED = 0, - PIKA_HAL_IIC_TIMEOUT_1MS = 1, - PIKA_HAL_IIC_TIMEOUT_2MS = 2, - PIKA_HAL_IIC_TIMEOUT_5MS = 5, - PIKA_HAL_IIC_TIMEOUT_10MS = 10, - PIKA_HAL_IIC_TIMEOUT_20MS = 20, - PIKA_HAL_IIC_TIMEOUT_50MS = 50, - PIKA_HAL_IIC_TIMEOUT_100MS = 100, - PIKA_HAL_IIC_TIMEOUT_200MS = 200, - PIKA_HAL_IIC_TIMEOUT_500MS = 500, - PIKA_HAL_IIC_TIMEOUT_1000MS = 1000, -} PIKA_HAL_IIC_TIMEOUT; - -typedef struct { - PIKA_HAL_IIC_ADDRESS_WIDTH address_width; - PIKA_HAL_IIC_MASTER_OR_SLAVE master_or_slave; - PIKA_HAL_IIC_SLAVE_ADDR slave_addr; - PIKA_HAL_IIC_MEM_ADDR_ENA mem_addr_ena; - PIKA_HAL_IIC_MEM_ADDR mem_addr; - PIKA_HAL_IIC_MEM_ADDR_SIZE mem_addr_size; - PIKA_HAL_IIC_SPEED speed; - PIKA_HAL_IIC_TIMEOUT timeout; -} pika_hal_IIC_config; - -typedef struct { - pika_dev* SDA; - pika_dev* SCL; - PIKA_HAL_IIC_ADDRESS_WIDTH address_width; - PIKA_HAL_IIC_MASTER_OR_SLAVE master_or_slave; - PIKA_HAL_IIC_SLAVE_ADDR slave_addr; - PIKA_HAL_IIC_MEM_ADDR_ENA mem_addr_ena; - PIKA_HAL_IIC_MEM_ADDR mem_addr; - PIKA_HAL_IIC_MEM_ADDR_SIZE mem_addr_size; - PIKA_HAL_IIC_SPEED speed; - PIKA_HAL_IIC_TIMEOUT timeout; -} pika_hal_SOFT_IIC_config; - -typedef enum PIKA_HAL_SPI_TIMEOUT { - _PIKA_HAL_SPI_TIMEOUT_UNUSED = 0, - PIKA_HAL_SPI_TIMEOUT_1MS = 1, - PIKA_HAL_SPI_TIMEOUT_2MS = 2, - PIKA_HAL_SPI_TIMEOUT_5MS = 5, - PIKA_HAL_SPI_TIMEOUT_10MS = 10, - PIKA_HAL_SPI_TIMEOUT_20MS = 20, - PIKA_HAL_SPI_TIMEOUT_50MS = 50, - PIKA_HAL_SPI_TIMEOUT_100MS = 100, - PIKA_HAL_SPI_TIMEOUT_200MS = 200, - PIKA_HAL_SPI_TIMEOUT_500MS = 500, - PIKA_HAL_SPI_TIMEOUT_1000MS = 1000, -} PIKA_HAL_SPI_TIMEOUT; - -typedef enum { - _PIKA_HAL_SPI_LSB_OR_MSB_UNUSED = 0, - PIKA_HAL_SPI_LSB, - PIKA_HAL_SPI_MSB, -} PIKA_HAL_SPI_LSB_OR_MSB; - -typedef enum { - _PIKA_HAL_SPI_MASTER_OR_SLAVE_UNUSED = 0, - PIKA_HAL_SPI_MASTER, - PIKA_HAL_SPI_SLAVE, -} PIKA_HAL_SPI_MASTER_OR_SLAVE; - -typedef enum { - _PIKA_HAL_SPI_MODE_UNUSED = 0, - PIKA_HAL_SPI_MODE_0, - PIKA_HAL_SPI_MODE_1, - PIKA_HAL_SPI_MODE_2, - PIKA_HAL_SPI_MODE_3, -} PIKA_HAL_SPI_MODE; - -typedef enum { - _PIKA_HAL_SPI_DATA_UNUSED = 0, - PIKA_HAL_SPI_DATA_WIDTH_8 = 8, - PIKA_HAL_SPI_DATA_WIDTH_16 = 16, -} PIKA_HAL_SPI_DATA_WIDTH; - -typedef enum { - _PIKA_HAL_SPI_SPEED_UNUSED = 0, - PIKA_HAL_SPI_SPEED_1M = 1000000, - PIKA_HAL_SPI_SPEED_2M = 2000000, - PIKA_HAL_SPI_SPEED_5M = 5000000, - PIKA_HAL_SPI_SPEED_10M = 10000000, - PIKA_HAL_SPI_SPEED_20M = 20000000, - PIKA_HAL_SPI_SPEED_50M = 50000000, - PIKA_HAL_SPI_SPEED_100M = 100000000, -} PIKA_HAL_SPI_SPEED; - -typedef struct { - PIKA_HAL_SPI_LSB_OR_MSB lsb_or_msb; - PIKA_HAL_SPI_MASTER_OR_SLAVE master_or_slave; - PIKA_HAL_SPI_MODE mode; - PIKA_HAL_SPI_DATA_WIDTH data_width; - PIKA_HAL_SPI_SPEED speed; - PIKA_HAL_SPI_TIMEOUT timeout; -} pika_hal_SPI_config; - -typedef struct { - PIKA_HAL_SPI_LSB_OR_MSB lsb_or_msb; - PIKA_HAL_SPI_MASTER_OR_SLAVE master_or_slave; - PIKA_HAL_SPI_MODE mode; - PIKA_HAL_SPI_DATA_WIDTH data_width; - PIKA_HAL_SPI_SPEED speed; - PIKA_HAL_SPI_TIMEOUT timeout; - pika_dev* CS; - pika_dev* SCK; - pika_dev* MOSI; - pika_dev* MISO; -} pika_hal_SOFT_SPI_config; - -typedef enum { - _PIKA_HAL_ADC_RESOLUTION_UNUSED = 0, - PIKA_HAL_ADC_RESOLUTION_8 = 8, - PIKA_HAL_ADC_RESOLUTION_10 = 10, - PIKA_HAL_ADC_RESOLUTION_12 = 12, - PIKA_HAL_ADC_RESOLUTION_14 = 14, - PIKA_HAL_ADC_RESOLUTION_16 = 16, -} PIKA_HAL_ADC_RESOLUTION; - -typedef enum PIKA_HAL_ADC_SAMPLING_FREQ { - _PIKA_HAL_ADC_SAMPLING_FREQ_UNUSED = 0, - PIKA_HAL_ADC_SAMPLING_FREQ_100 = 100, - PIKA_HAL_ADC_SAMPLING_FREQ_1K = 1000, - PIKA_HAL_ADC_SAMPLING_FREQ_10K = 10000, - PIKA_HAL_ADC_SAMPLING_FREQ_100K = 100000, - PIKA_HAL_ADC_SAMPLING_FREQ_1M = 1000000, - PIKA_HAL_ADC_SAMPLING_FREQ_10M = 10000000, -} PIKA_HAL_ADC_SAMPLING_FREQ; - -typedef enum PIKA_HAL_ADC_CONTINUOU_OR_SINGLE { - _PIKA_HAL_ADC_CONTINUOU_OR_SINGLE_UNUSED = 0, - PIKA_HAL_ADC_SINGLE, - PIKA_HAL_ADC_CONTINUOU, -} PIKA_HAL_ADC_CONTINUOU_OR_SINGLE; - -typedef pika_float PIKA_HAL_ADC_VREF; -typedef uint32_t PIKA_HAL_ADC_MAX; - -typedef struct { - PIKA_HAL_ADC_RESOLUTION sampling_resolution; - PIKA_HAL_ADC_SAMPLING_FREQ sampling_freq; - PIKA_HAL_ADC_CONTINUOU_OR_SINGLE continue_or_single; - PIKA_HAL_ADC_MAX max; - PIKA_HAL_ADC_VREF vref; -} pika_hal_ADC_config; - -typedef enum { - _PIKA_HAL_DAC_RESOLUTION_UNUSED = 0, - PIKA_HAL_DAC_RESOLUTION_8 = 8, - PIKA_HAL_DAC_RESOLUTION_10 = 10, - PIKA_HAL_DAC_RESOLUTION_12 = 12, - PIKA_HAL_DAC_RESOLUTION_14 = 14, - PIKA_HAL_DAC_RESOLUTION_16 = 16, -} PIKA_HAL_DAC_RESOLUTION; - -typedef enum PIKA_HAL_DAC_SPEED { - _PIKA_HAL_DAC_SPEED_UNUSED = 0, - PIKA_HAL_DAC_SPEED_100 = 100, - PIKA_HAL_DAC_SPEED_1K = 1000, - PIKA_HAL_DAC_SPEED_10K = 10000, - PIKA_HAL_DAC_SPEED_100K = 100000, - PIKA_HAL_DAC_SPEED_1M = 1000000, - PIKA_HAL_DAC_SPEED_10M = 10000000, - PIKA_HAL_DAC_SPEED_20M = 20000000, - PIKA_HAL_DAC_SPEED_50M = 50000000, - PIKA_HAL_DAC_SPEED_100M = 100000000, -} PIKA_HAL_DAC_SPEED; - -typedef pika_float PIKA_HAL_DAC_VREF; -typedef uint32_t PIKA_HAL_DAC_MAX; - -typedef struct pika_hal_DAC_config { - PIKA_HAL_DAC_RESOLUTION sampling_resolution; - PIKA_HAL_DAC_SPEED speed; - PIKA_HAL_DAC_MAX max; - PIKA_HAL_DAC_VREF vref; -} pika_hal_DAC_config; - -typedef enum { - _PIKA_HAL_DAC_UNUSED = 0, - PIKA_HAL_PWM_CHANNEL_0, - PIKA_HAL_PWM_CHANNEL_1, - PIKA_HAL_PWM_CHANNEL_2, - PIKA_HAL_PWM_CHANNEL_3, - PIKA_HAL_PWM_CHANNEL_4, - PIKA_HAL_PWM_CHANNEL_5, - PIKA_HAL_PWM_CHANNEL_6, - PIKA_HAL_PWM_CHANNEL_7, -} PIKA_HAL_PWM_CHANNEL; - -typedef enum { - PIKA_HAL_PWM_PERIOD_1NS = 1, - PIKA_HAL_PWM_PERIOD_1US = 1000, - PIKA_HAL_PWM_PERIOD_1MS = 1000000, - PIKA_HAL_PWM_PERIOD_1S = 1000000000, -} PIKA_HAL_PWM_PERIOD; - -typedef enum { - PIKA_HAL_PWM_DUTY_1NS = 1, - PIKA_HAL_PWM_DUTY_1US = 1000, - PIKA_HAL_PWM_DUTY_1MS = 1000000, - PIKA_HAL_PWM_DUTY_1S = 1000000000, -} PIKA_HAL_PWM_DUTY; - -typedef struct { - PIKA_HAL_PWM_PERIOD period; - PIKA_HAL_PWM_DUTY duty; -} pika_hal_PWM_config; - -typedef enum { - _PIKA_HAL_WIFI_MODE_UNUSED = 0, - PIKA_HAL_WIFI_MODE_STA, - PIKA_HAL_WIFI_MODE_AP, -} PIKA_HAL_WIFI_MODE; - -typedef enum { - _PIKA_HAL_WIFI_STATUS_UNUSED = 0, - PIKA_HAL_WIFI_STATUS_IDLE, - PIKA_HAL_WIFI_STATUS_CONNECTING, - PIKA_HAL_WIFI_STATUS_WRONG_PASSWORD, - PIKA_HAL_WIFI_STATUS_NO_AP_FOUND, - PIKA_HAL_WIFI_STATUS_CONNECT_FAIL, - PIKA_HAL_WIFI_STATUS_GOT_IP, -} PIKA_HAL_WIFI_STATUS; - -typedef enum { - _PIKA_HAL_WIFI_CHANNEL_UNUSED = 0, - PIKA_HAL_WIFI_CHANNEL_0, - PIKA_HAL_WIFI_CHANNEL_1, - PIKA_HAL_WIFI_CHANNEL_2, - PIKA_HAL_WIFI_CHANNEL_3, - PIKA_HAL_WIFI_CHANNEL_4, - PIKA_HAL_WIFI_CHANNEL_5, - PIKA_HAL_WIFI_CHANNEL_6, - PIKA_HAL_WIFI_CHANNEL_7, - PIKA_HAL_WIFI_CHANNEL_8, - PIKA_HAL_WIFI_CHANNEL_9, - PIKA_HAL_WIFI_CHANNEL_10, - PIKA_HAL_WIFI_CHANNEL_11, -} PIKA_HAL_WIFI_CHANNEL; - -typedef enum { - _PIKA_HAL_WIFI_MAX_CONNECTION = 0, - PIKA_HAL_WIFI_MAX_CONNECTION_1, - PIKA_HAL_WIFI_MAX_CONNECTION_2, - PIKA_HAL_WIFI_MAX_CONNECTION_3, - PIKA_HAL_WIFI_MAX_CONNECTION_4, - PIKA_HAL_WIFI_MAX_CONNECTION_5, - PIKA_HAL_WIFI_MAX_CONNECTION_6, - PIKA_HAL_WIFI_MAX_CONNECTION_7, - PIKA_HAL_WIFI_MAX_CONNECTION_8, - PIKA_HAL_WIFI_MAX_CONNECTION_9, - PIKA_HAL_WIFI_MAX_CONNECTION_10 -} PIKA_HAL_WIFI_MAX_CONNECTION; - -#define PIKA_HAL_WIFI_PARAM_MAX_LEN 32 -typedef struct pika_hal_WIFI_config { - PIKA_HAL_WIFI_MODE mode; - PIKA_HAL_WIFI_CHANNEL channel; - PIKA_HAL_WIFI_MAX_CONNECTION max_connection; - char ap_ssid[PIKA_HAL_WIFI_PARAM_MAX_LEN]; - char ap_bssid[PIKA_HAL_WIFI_PARAM_MAX_LEN]; - char ap_password[PIKA_HAL_WIFI_PARAM_MAX_LEN]; -} pika_hal_WIFI_config; - -typedef struct pika_hal_WIFI_connect_config { - char ssid[PIKA_HAL_WIFI_PARAM_MAX_LEN]; - char bssid[PIKA_HAL_WIFI_PARAM_MAX_LEN]; - char password[PIKA_HAL_WIFI_PARAM_MAX_LEN]; -} pika_hal_WIFI_connect_config; - -typedef struct pika_hal_WIFI_ifconfig { - char ip[PIKA_HAL_WIFI_PARAM_MAX_LEN]; - char netmask[PIKA_HAL_WIFI_PARAM_MAX_LEN]; - char gateway[PIKA_HAL_WIFI_PARAM_MAX_LEN]; - char dns[PIKA_HAL_WIFI_PARAM_MAX_LEN]; -} pika_hal_WIFI_ifconfig; - -typedef struct pika_hal_WIFI_record { - char ssid[PIKA_HAL_WIFI_PARAM_MAX_LEN]; - uint8_t bssid[PIKA_HAL_WIFI_PARAM_MAX_LEN]; - size_t bssid_len; - int channel; - int rssi; - int authmode; -} pika_hal_WIFI_record; - -typedef struct pika_hal_WIFI_scan_result { - int count; - pika_hal_WIFI_record records[]; -} pika_hal_WIFI_scan_result; - -typedef struct pika_dev_impl { - int (*open)(pika_dev* dev, char* name); - int (*close)(pika_dev* dev); - int (*read)(pika_dev* dev, void* buf, size_t count); - int (*write)(pika_dev* dev, void* buf, size_t count); - int (*ioctl)(pika_dev* dev, PIKA_HAL_IOCTL_CMD cmd, void* cfg); -} pika_dev_impl; - -/* platform API */ -#define PIKA_HAL_TABLE_PLATFORM_API -#include "pika_hal_table.h" - -/* config merge headers */ -#define PIKA_HAL_TABLE_IOCTL_MERGE_CONFIG_HEADER -#include "pika_hal_table.h" - -#endif diff --git a/package/PikaStdDevice/pika_hal_SOFT_IIC.c b/package/PikaStdDevice/pika_hal_SOFT_IIC.c deleted file mode 100644 index 8c9f55a04..000000000 --- a/package/PikaStdDevice/pika_hal_SOFT_IIC.c +++ /dev/null @@ -1,276 +0,0 @@ -#include "pika_hal.h" -#include - -static void _IIC_SDA_input(pika_hal_SOFT_IIC_config* iic_cfg) { - pika_hal_GPIO_config cfg_SDA = {0}; - cfg_SDA.dir = PIKA_HAL_GPIO_DIR_IN; - pika_hal_ioctl(iic_cfg->SDA, PIKA_HAL_IOCTL_CONFIG, &cfg_SDA); -} - -static void _IIC_SDA_output(pika_hal_SOFT_IIC_config* iic_cfg) { - pika_hal_GPIO_config cfg_SDA = {0}; - cfg_SDA.dir = PIKA_HAL_GPIO_DIR_OUT; - pika_hal_ioctl(iic_cfg->SDA, PIKA_HAL_IOCTL_CONFIG, &cfg_SDA); -} - -static int _GPIO_write(pika_dev* dev, uint32_t val) { - return pika_hal_write(dev, &val, sizeof(val)); -} - -static uint32_t _GPIO_read(pika_dev* dev) { - uint32_t val = 0; - pika_hal_read(dev, &val, sizeof(val)); - return val; -} - -static void _IIC_Delay(void) { - pika_sleep_ms(3); -} - -static void _IIC_Start(pika_hal_SOFT_IIC_config* cfg) { - pika_debug("iic start"); - _IIC_SDA_output(cfg); - _GPIO_write(cfg->SDA, 1); - _GPIO_write(cfg->SCL, 1); - _IIC_Delay(); - _GPIO_write(cfg->SDA, 0); - _IIC_Delay(); - _GPIO_write(cfg->SCL, 0); -} - -static void _IIC_Stop(pika_hal_SOFT_IIC_config* cfg) { - pika_debug("iic stop"); - _IIC_SDA_output(cfg); - _GPIO_write(cfg->SDA, 0); - _GPIO_write(cfg->SCL, 1); - _IIC_Delay(); - _GPIO_write(cfg->SDA, 1); - _IIC_Delay(); -} - -static pika_bool _IIC_SendByte(pika_hal_SOFT_IIC_config* cfg, uint8_t byte) { - pika_debug(" - iic write: 0x%02X", byte); - _IIC_SDA_output(cfg); - for (int i = 0; i < 8; i++) { - _GPIO_write(cfg->SCL, 0); - _IIC_Delay(); - if (byte & 0x80) { - _GPIO_write(cfg->SDA, 1); - } else { - _GPIO_write(cfg->SDA, 0); - } - _IIC_Delay(); - _GPIO_write(cfg->SCL, 1); - _IIC_Delay(); - byte <<= 1; - } - - // 在发送完字节后检查ACK信号 - _GPIO_write(cfg->SCL, 0); - _IIC_Delay(); - _IIC_SDA_input(cfg); // 设置SDA为输入 - _GPIO_write(cfg->SCL, 1); // 将SCL线设置为高,让从设备发送ACK信号 - - int timeout = 1000; - uint32_t ack = 0; - do { - _IIC_Delay(); - ack = !_GPIO_read(cfg->SDA); // 如果从设备发送了ACK信号,SDA线会被拉低 - } while (ack == 0 && timeout-- > 0); - - // pika_debug("ack timeout:%d", timeout); - if (timeout <= 0) { - pika_platform_printf("Error: IIC write byte timeout\r\n"); - } - - _GPIO_write(cfg->SCL, 0); // 将SCL线设置为低,完成一个I2C周期 - return ack; -} - -static void _IIC_Ack(pika_hal_SOFT_IIC_config* cfg) { - _GPIO_write(cfg->SCL, 0); // 拉低时钟线 - _IIC_SDA_output(cfg); // 设置SDA为输出 - _GPIO_write(cfg->SDA, 0); // 拉低数据线 - _IIC_Delay(); - _GPIO_write(cfg->SCL, 1); // 产生时钟 - _IIC_Delay(); - _GPIO_write(cfg->SCL, 0); // 拉低时钟线 -} - -static void _IIC_NAck(pika_hal_SOFT_IIC_config* cfg) { - _GPIO_write(cfg->SCL, 0); // 拉低时钟线 - _IIC_SDA_output(cfg); // 设置SDA为输出 - _GPIO_write(cfg->SDA, 1); // 数据线拉高 - _IIC_Delay(); - _GPIO_write(cfg->SCL, 1); // 产生时钟 - _IIC_Delay(); - _GPIO_write(cfg->SCL, 0); // 拉低时钟线 -} - -static uint8_t _IIC_ReadByte(pika_hal_SOFT_IIC_config* cfg, uint8_t ack) { - uint8_t byte = 0; - _IIC_SDA_input(cfg); - for (int i = 0; i < 8; i++) { - _GPIO_write(cfg->SCL, 1); - _IIC_Delay(); - byte <<= 1; - if (_GPIO_read(cfg->SDA)) { - byte |= 0x01; - } - _GPIO_write(cfg->SCL, 0); - _IIC_Delay(); - } - // 在读取完一个字节后发送ACK信号 - if (ack) { - _IIC_Ack(cfg); // 如果ack为真,发送ACK信号 - } else { - _IIC_NAck(cfg); // 如果ack为假,发送NACK信号 - } - pika_debug(" - iic read: 0x%02X", byte); - return byte; -} - -int pika_hal_platform_SOFT_IIC_write(pika_dev* dev, void* buf, size_t count) { - pika_hal_SOFT_IIC_config* iic_cfg = - (pika_hal_SOFT_IIC_config*)dev->ioctl_config; - uint8_t* data = (uint8_t*)buf; - - _IIC_Start(iic_cfg); - uint8_t addr_write = (iic_cfg->slave_addr << 1) | 0x00; // 方向位为0代表写 - // pika_debug("iic addr_write: 0x%02X", addr_write); - _IIC_SendByte(iic_cfg, addr_write); // 方向位为0代表写 - - // 如果启用了mem_addr_ena,将设备地址和内存地址发送到I2C总线 - if (iic_cfg->mem_addr_ena == PIKA_HAL_IIC_MEM_ADDR_ENA_ENABLE) { - if (iic_cfg->mem_addr_size == PIKA_HAL_IIC_MEM_ADDR_SIZE_8BIT) { - _IIC_SendByte(iic_cfg, iic_cfg->mem_addr & 0xFF); - } else if (iic_cfg->mem_addr_size == PIKA_HAL_IIC_MEM_ADDR_SIZE_16BIT) { - _IIC_SendByte(iic_cfg, (iic_cfg->mem_addr >> 8) & 0xFF); - _IIC_SendByte(iic_cfg, iic_cfg->mem_addr & 0xFF); - } - } - - for (int i = 0; i < count; i++) { - _IIC_SendByte(iic_cfg, data[i]); - } - _IIC_Stop(iic_cfg); - return count; -} - -int pika_hal_platform_SOFT_IIC_read(pika_dev* dev, void* buf, size_t count) { - pika_hal_SOFT_IIC_config* iic_cfg = - (pika_hal_SOFT_IIC_config*)dev->ioctl_config; - uint8_t* data = (uint8_t*)buf; - - _IIC_Start(iic_cfg); - - // 如果启用了mem_addr_ena,先写设备地址和内存地址 - if (iic_cfg->mem_addr_ena == PIKA_HAL_IIC_MEM_ADDR_ENA_ENABLE) { - uint8_t addr_write = - (iic_cfg->slave_addr << 1) | 0x00; // 方向位为0代表写 - // pika_debug("iic addr_write: 0x%02X", addr_write); - _IIC_SendByte(iic_cfg, addr_write); // 方向位为0代表写 - if (iic_cfg->mem_addr_size == PIKA_HAL_IIC_MEM_ADDR_SIZE_8BIT) { - _IIC_SendByte(iic_cfg, iic_cfg->mem_addr & 0xFF); - } else if (iic_cfg->mem_addr_size == PIKA_HAL_IIC_MEM_ADDR_SIZE_16BIT) { - _IIC_SendByte(iic_cfg, (iic_cfg->mem_addr >> 8) & 0xFF); - _IIC_SendByte(iic_cfg, iic_cfg->mem_addr & 0xFF); - } - _IIC_Start(iic_cfg); - } - - uint8_t addr_read = (iic_cfg->slave_addr << 1) | 0x01; // 方向位为1代表读 - // pika_debug("iic addr_read: 0x%02X", addr_read); - _IIC_SendByte(iic_cfg, addr_read); // 方向位为1代表读 - - for (int i = 0; i < count - 1; i++) { - // data[i] = _IIC_ReadByte(iic_cfg, 1); - data[i] = _IIC_ReadByte(iic_cfg, 1); - } - data[count - 1] = _IIC_ReadByte(iic_cfg, 0); - _IIC_Stop(iic_cfg); - return count; -} - -int pika_hal_platform_SOFT_IIC_open(pika_dev* dev, char* name) { - return 0; -} - -int pika_hal_platform_SOFT_IIC_close(pika_dev* dev) { - pika_hal_SOFT_IIC_config* cfg = - (pika_hal_SOFT_IIC_config*)dev->ioctl_config; - if (cfg->SDA != NULL) { - pika_hal_close(cfg->SDA); - } - if (cfg->SCL != NULL) { - pika_hal_close(cfg->SCL); - } - return 0; -} - -int pika_hal_platform_SOFT_IIC_ioctl_config(pika_dev* dev, - pika_hal_SOFT_IIC_config* cfg) { - if (cfg->SDA == NULL || cfg->SCL == NULL) { - __platform_printf( - "Error: SOFT IIC config error, SDA and SCL must be set\r\n"); - return -1; - } - // 检查软件IIC配置项是否正确 - if (cfg->master_or_slave != PIKA_HAL_IIC_MASTER && - cfg->master_or_slave != PIKA_HAL_IIC_SLAVE) { - __platform_printf( - "Error: SOFT IIC config error, master_or_slave must be set\r\n"); - return -1; - } - if (cfg->address_width != PIKA_HAL_IIC_ADDRESS_WIDTH_7BIT && - cfg->address_width != PIKA_HAL_IIC_ADDRESS_WIDTH_10BIT) { - __platform_printf( - "Error: SOFT IIC config error, address_width must be set\r\n"); - return -1; - } - if (cfg->mem_addr_ena != PIKA_HAL_IIC_MEM_ADDR_ENA_ENABLE && - cfg->mem_addr_ena != PIKA_HAL_IIC_MEM_ADDR_ENA_DISABLE) { - __platform_printf( - "Error: SOFT IIC config error, mem_addr_ena must be set\r\n"); - return -1; - } - if (cfg->mem_addr_size != PIKA_HAL_IIC_MEM_ADDR_SIZE_8BIT && - cfg->mem_addr_size != PIKA_HAL_IIC_MEM_ADDR_SIZE_16BIT) { - __platform_printf( - "Error: SOFT IIC config error, mem_addr_size must be set\r\n"); - return -1; - } - // 在这里,我们暂时不检查speed和timeout,因为软件模拟的I2C可能无法精确控制速度和超时。 - return 0; -} - -int pika_hal_platform_SOFT_IIC_ioctl_enable(pika_dev* dev) { - pika_hal_SOFT_IIC_config* cfg = - (pika_hal_SOFT_IIC_config*)dev->ioctl_config; - if (cfg->SDA == NULL || cfg->SCL == NULL) { - __platform_printf( - "Error: SOFT IIC config error, SDA and SCL must be set\r\n"); - return -1; - } - pika_hal_GPIO_config cfg_SDA = {0}; - pika_hal_GPIO_config cfg_SCL = {0}; - cfg_SDA.dir = PIKA_HAL_GPIO_DIR_OUT; - cfg_SCL.dir = PIKA_HAL_GPIO_DIR_OUT; - pika_hal_ioctl(cfg->SDA, PIKA_HAL_IOCTL_CONFIG, &cfg_SDA); - pika_hal_ioctl(cfg->SCL, PIKA_HAL_IOCTL_CONFIG, &cfg_SCL); - - pika_hal_ioctl(cfg->SDA, PIKA_HAL_IOCTL_ENABLE); - pika_hal_ioctl(cfg->SCL, PIKA_HAL_IOCTL_ENABLE); - - _GPIO_write(cfg->SDA, 1); - _GPIO_write(cfg->SCL, 1); - return 0; -} - -int pika_hal_platform_SOFT_IIC_ioctl_disable(pika_dev* dev) { - pika_hal_SOFT_IIC_config* cfg = - (pika_hal_SOFT_IIC_config*)dev->ioctl_config; - pika_hal_ioctl(cfg->SDA, PIKA_HAL_IOCTL_DISABLE); - pika_hal_ioctl(cfg->SCL, PIKA_HAL_IOCTL_DISABLE); - return 0; -} diff --git a/package/PikaStdDevice/pika_hal_SOFT_SPI.c b/package/PikaStdDevice/pika_hal_SOFT_SPI.c deleted file mode 100644 index f41c0a008..000000000 --- a/package/PikaStdDevice/pika_hal_SOFT_SPI.c +++ /dev/null @@ -1,155 +0,0 @@ -#include "pika_hal.h" - -static int _GPIO_write(pika_dev* dev, uint32_t val) { - return pika_hal_write(dev, &val, sizeof(val)); -} - -static uint32_t _GPIO_read(pika_dev* dev) { - uint32_t val = 0; - pika_hal_read(dev, &val, sizeof(val)); - return val; -} - -int pika_hal_platform_SOFT_SPI_open(pika_dev* dev, char* name) { - return 0; -} - -int pika_hal_platform_SOFT_SPI_close(pika_dev* dev) { - pika_hal_SOFT_SPI_config* cfg = - (pika_hal_SOFT_SPI_config*)dev->ioctl_config; - if (cfg->CS != NULL) { - pika_hal_close(cfg->CS); - } - if (cfg->SCK != NULL) { - pika_hal_close(cfg->SCK); - } - if (cfg->MOSI != NULL) { - pika_hal_close(cfg->MOSI); - } - if (cfg->MISO != NULL) { - pika_hal_close(cfg->MISO); - } - return 0; -} - -int pika_hal_platform_SOFT_SPI_ioctl_config(pika_dev* dev, - pika_hal_SOFT_SPI_config* cfg) { - if (cfg->SCK == NULL || cfg->MOSI == NULL) { - __platform_printf( - "Error: SOFT SPI config error, CS, SCK, MOSI, MISO must be " - "set\r\n"); - return -1; - } - return 0; -} - -int pika_hal_platform_SOFT_SPI_ioctl_enable(pika_dev* dev) { - pika_hal_SOFT_SPI_config* cfg = - (pika_hal_SOFT_SPI_config*)dev->ioctl_config; - if (cfg->SCK == NULL || cfg->MOSI == NULL) { - __platform_printf( - "Error: SOFT SPI config error, CS, SCK, MOSI, MISO must be " - "set\r\n"); - return -1; - } - pika_hal_GPIO_config cfg_CS = {0}; - pika_hal_GPIO_config cfg_SCK = {0}; - pika_hal_GPIO_config cfg_MOSI = {0}; - pika_hal_GPIO_config cfg_MISO = {0}; - cfg_CS.dir = PIKA_HAL_GPIO_DIR_OUT; - cfg_SCK.dir = PIKA_HAL_GPIO_DIR_OUT; - cfg_MOSI.dir = PIKA_HAL_GPIO_DIR_OUT; - cfg_MISO.dir = PIKA_HAL_GPIO_DIR_IN; - - if (NULL != cfg->CS) { - pika_hal_ioctl(cfg->CS, PIKA_HAL_IOCTL_CONFIG, &cfg_CS); - } - pika_hal_ioctl(cfg->SCK, PIKA_HAL_IOCTL_CONFIG, &cfg_SCK); - pika_hal_ioctl(cfg->MOSI, PIKA_HAL_IOCTL_CONFIG, &cfg_MOSI); - if (NULL != cfg->MISO) { - pika_hal_ioctl(cfg->MISO, PIKA_HAL_IOCTL_CONFIG, &cfg_MISO); - } - - if (NULL != cfg->CS) { - pika_hal_ioctl(cfg->CS, PIKA_HAL_IOCTL_ENABLE); - } - pika_hal_ioctl(cfg->SCK, PIKA_HAL_IOCTL_ENABLE); - pika_hal_ioctl(cfg->MOSI, PIKA_HAL_IOCTL_ENABLE); - if (NULL != cfg->MISO) { - pika_hal_ioctl(cfg->MISO, PIKA_HAL_IOCTL_ENABLE); - } - - if (NULL != cfg->CS) { - _GPIO_write(cfg->CS, 1); - } - _GPIO_write(cfg->SCK, 1); - _GPIO_write(cfg->MOSI, 1); - return 0; -} - -int pika_hal_platform_SOFT_SPI_ioctl_disable(pika_dev* dev) { - pika_hal_SOFT_SPI_config* cfg = - (pika_hal_SOFT_SPI_config*)dev->ioctl_config; - if (NULL != cfg->CS) { - pika_hal_ioctl(cfg->CS, PIKA_HAL_IOCTL_DISABLE); - } - pika_hal_ioctl(cfg->SCK, PIKA_HAL_IOCTL_DISABLE); - pika_hal_ioctl(cfg->MOSI, PIKA_HAL_IOCTL_DISABLE); - if (NULL != cfg->MISO) { - pika_hal_ioctl(cfg->MISO, PIKA_HAL_IOCTL_DISABLE); - } - return 0; -} - -static inline int SPIv_WriteData(pika_hal_SOFT_SPI_config* cfg, uint8_t Data) { - unsigned char i = 0; - for (i = 8; i > 0; i--) { - if (Data & 0x80) - _GPIO_write(cfg->MOSI, 1); - else - _GPIO_write(cfg->MOSI, 0); - _GPIO_write(cfg->SCK, 0); - _GPIO_write(cfg->SCK, 1); - Data <<= 1; - } - return 0; -} - -int pika_hal_platform_SOFT_SPI_write(pika_dev* dev, void* buf, size_t count) { - pika_hal_SOFT_SPI_config* cfg = - (pika_hal_SOFT_SPI_config*)dev->ioctl_config; - uint8_t* data = (uint8_t*)buf; - if (NULL != cfg->CS) { - _GPIO_write(cfg->CS, 0); - } - for (int i = 0; i < count; i++) { - SPIv_WriteData(cfg, data[i]); - } - if (NULL != cfg->CS) { - _GPIO_write(cfg->CS, 1); - } - return count; -} - -int pika_hal_platform_SOFT_SPI_read(pika_dev* dev, void* buf, size_t count) { - pika_hal_SOFT_SPI_config* cfg = - (pika_hal_SOFT_SPI_config*)dev->ioctl_config; - if (NULL == cfg->MISO) { - __platform_printf("Error: SOFT SPI config error, MISO must be set\r\n"); - return -1; - } - uint8_t* data = (uint8_t*)buf; - if (NULL != cfg->CS) { - _GPIO_write(cfg->CS, 0); - } - for (int i = 0; i < count; i++) { - data[i] = 0; - for (int j = 0; j < 8; j++) { - _GPIO_write(cfg->SCK, 0); - _GPIO_write(cfg->SCK, 1); - data[i] |= (_GPIO_read(cfg->MISO) << (7 - j)); - } - } - _GPIO_write(cfg->CS, 1); - return count; -} diff --git a/package/PikaStdDevice/pika_hal_table.h b/package/PikaStdDevice/pika_hal_table.h deleted file mode 100644 index 52d9c4c1b..000000000 --- a/package/PikaStdDevice/pika_hal_table.h +++ /dev/null @@ -1,15 +0,0 @@ -#include "pika_hal_table_rule.h" - -/* clang-format off */ - -pika_hal_table_add(GPIO) -pika_hal_table_add(UART) -pika_hal_table_add(IIC) -pika_hal_table_add(SPI) -pika_hal_table_add(ADC) -pika_hal_table_add(DAC) -pika_hal_table_add(PWM) -pika_hal_table_add(SOFT_SPI) -pika_hal_table_add(SOFT_IIC) -pika_hal_table_add(WIFI) - diff --git a/package/PikaStdDevice/pika_hal_table_rule.h b/package/PikaStdDevice/pika_hal_table_rule.h deleted file mode 100644 index 70a7cef51..000000000 --- a/package/PikaStdDevice/pika_hal_table_rule.h +++ /dev/null @@ -1,121 +0,0 @@ -#undef pika_hal_table_add -#if defined(PIKA_HAL_TABLE_FILE_API) -#define pika_hal_table_add(dev_name) \ - PIKA_WEAK int pika_hal_platform_##dev_name##_open(pika_dev* dev, \ - char* name) { \ - WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \ - return -1; \ - } \ - PIKA_WEAK int pika_hal_platform_##dev_name##_close(pika_dev* dev) { \ - WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \ - return -1; \ - } \ - PIKA_WEAK int pika_hal_platform_##dev_name##_read(pika_dev* dev, \ - void* buf, size_t len) { \ - WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \ - return -1; \ - } \ - PIKA_WEAK int pika_hal_platform_##dev_name##_write( \ - pika_dev* dev, void* buf, size_t len) { \ - WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \ - return -1; \ - } \ - PIKA_WEAK int pika_hal_platform_##dev_name##_ioctl_enable(pika_dev* dev) { \ - WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \ - return -1; \ - } \ - PIKA_WEAK int pika_hal_platform_##dev_name##_ioctl_disable( \ - pika_dev* dev) { \ - WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \ - return -1; \ - } \ - PIKA_WEAK int pika_hal_platform_##dev_name##_ioctl_config( \ - pika_dev* dev, pika_hal_##dev_name##_config* cfg) { \ - WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \ - return -1; \ - } \ - PIKA_WEAK int pika_hal_platform_##dev_name##_ioctl_others( \ - pika_dev* dev, PIKA_HAL_IOCTL_CMD cmd, void* arg) { \ - WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \ - return -1; \ - } \ - int pika_hal_##dev_name##_ioctl(pika_dev* dev, PIKA_HAL_IOCTL_CMD cmd, \ - void* arg) { \ - if (NULL == dev) { \ - return -1; \ - } \ - switch (cmd) { \ - case PIKA_HAL_IOCTL_ENABLE: \ - return pika_hal_platform_##dev_name##_ioctl_enable(dev); \ - case PIKA_HAL_IOCTL_DISABLE: \ - return pika_hal_platform_##dev_name##_ioctl_disable(dev); \ - case PIKA_HAL_IOCTL_CONFIG: \ - return pika_hal_platform_##dev_name##_ioctl_config( \ - dev, (pika_hal_##dev_name##_config*)arg); \ - default: \ - return pika_hal_platform_##dev_name##_ioctl_others(dev, cmd, \ - arg); \ - } \ - } - -#endif - -#if defined(PIKA_HAL_TABLE_DEV_TYPE) -#define pika_hal_table_add(dev_name) PIKA_HAL_##dev_name, -#endif - -#if defined(PIKA_HAL_TABLE_IMPL) -#define pika_hal_table_add(dev_name) \ - [PIKA_HAL_##dev_name] = { \ - .open = pika_hal_platform_##dev_name##_open, \ - .close = pika_hal_platform_##dev_name##_close, \ - .read = pika_hal_platform_##dev_name##_read, \ - .write = pika_hal_platform_##dev_name##_write, \ - .ioctl = pika_hal_##dev_name##_ioctl, \ - }, -#endif - -#if defined(PIKA_HAL_TABLE_PLATFORM_API) -#define pika_hal_table_add(dev_name) \ - int pika_hal_platform_##dev_name##_open(pika_dev* dev, char* name); \ - int pika_hal_platform_##dev_name##_close(pika_dev* dev); \ - int pika_hal_platform_##dev_name##_read(pika_dev* dev, void* buf, \ - size_t len); \ - int pika_hal_platform_##dev_name##_write(pika_dev* dev, void* buf, \ - size_t len); \ - int pika_hal_platform_##dev_name##_ioctl_enable(pika_dev* dev); \ - int pika_hal_platform_##dev_name##_ioctl_disable(pika_dev* dev); \ - int pika_hal_platform_##dev_name##_ioctl_config( \ - pika_dev* dev, pika_hal_##dev_name##_config* cfg); \ - int pika_hal_platform_##dev_name##_ioctl_others( \ - pika_dev* dev, PIKA_HAL_IOCTL_CMD cmd, void* arg); -#endif - -#if defined(PIKA_HAL_TABLE_DEV_CONFIG_SIZE) -#define pika_hal_table_add(dev_name) \ - if (dev_type == PIKA_HAL_##dev_name) { \ - return sizeof(pika_hal_##dev_name##_config); \ - } -#endif - -#if defined(PIKA_HAL_TABLE_IOCTL_MERGE_CONFIG) -#define pika_hal_table_add(dev_name) \ - if (dev->type == PIKA_HAL_##dev_name) { \ - return pika_hal_##dev_name##_ioctl_merge_config(dev->ioctl_config, \ - config_in); \ - } -#endif - -#if defined(PIKA_HAL_TABLE_IOCTL_MERGE_CONFIG_HEADER) -#define pika_hal_table_add(dev_name) \ - int pika_hal_##dev_name##_ioctl_merge_config( \ - pika_hal_##dev_name##_config* dst, pika_hal_##dev_name##_config* src); -#endif - -#undef PIKA_HAL_TABLE_FILE_API -#undef PIKA_HAL_TABLE_DEV_TYPE -#undef PIKA_HAL_TABLE_IMPL -#undef PIKA_HAL_TABLE_PLATFORM_API -#undef PIKA_HAL_TABLE_DEV_CONFIG_SIZE -#undef PIKA_HAL_TABLE_IOCTL_MERGE_CONFIG -#undef PIKA_HAL_TABLE_IOCTL_MERGE_CONFIG_HEADER