瀏覽代碼

push pika_hal.c

lyon 3 年之前
父節點
當前提交
3ecb76f3a2

+ 22 - 1
package/PikaStdDevice/PikaStdDevice.pyi

@@ -67,6 +67,7 @@ class GPIO(BaseDev):
 
     def read(self) -> int:
         """Read the pin value."""
+    
 
     SIGNAL_RISING: int
     SIGNAL_FALLING: int
@@ -188,6 +189,26 @@ class 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
@@ -203,7 +224,7 @@ class UART:
         io.setCallBack(cb1, uart.SIGNAL_RX)
         ```
         """
-
+    
     @abstractmethod
     def platformEnable(self): ...
 

+ 80 - 4
package/PikaStdDevice/PikaStdDevice_UART.c

@@ -24,6 +24,10 @@ void PikaStdDevice_UART_init(PikaObj* self) {
     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");
 }
 
 void PikaStdDevice_UART___init__(PikaObj* self) {
@@ -84,14 +88,53 @@ void PikaStdDevice_UART_platformEnable(PikaObj* self) {
     pika_dev* dev = _get_dev(self);
     if (NULL == dev) {
         __platform_printf("Error: open UART '%d' failed.\r\n",
-                          obj_getInt(self, "id"));
+                          (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");
-    pika_hal_ioctl(dev, PIKA_HAL_IOCTL_CONFIG, &cfg);
-    pika_hal_ioctl(dev, PIKA_HAL_IOCTL_ENABLE);
+    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) {
@@ -114,7 +157,7 @@ void PikaStdDevice_UART_platformDisable(PikaObj* self) {
     pika_dev* dev = _get_dev(self);
     if (NULL == dev) {
         __platform_printf("Error: open UART '%d' failed.\r\n",
-                          obj_getInt(self, "id"));
+                          (int)obj_getInt(self, "id"));
         return;
     }
     pika_hal_ioctl(dev, PIKA_HAL_IOCTL_DISABLE);
@@ -156,5 +199,38 @@ void PikaStdDevice_UART_setCallBack(PikaObj* self,
 
 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);
+}

+ 9 - 1
package/PikaStdDevice/pika_hal.c

@@ -26,6 +26,10 @@ static size_t _pika_hal_dev_config_size(PIKA_HAL_DEV_TYPE dev_type) {
 }
 
 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) {
@@ -203,6 +207,10 @@ int pika_hal_UART_ioctl_merge_config(pika_hal_UART_config* dst,
                               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;
 }
 
@@ -218,7 +226,7 @@ int pika_hal_SPI_ioctl_merge_config(pika_hal_SPI_config* dst,
 }
 
 int pika_hal_SOFT_SPI_ioctl_merge_config(pika_hal_SOFT_SPI_config* dst,
-                                    pika_hal_SOFT_SPI_config* src) {
+                                         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);

+ 4 - 0
package/PikaStdDevice/pika_hal.h

@@ -138,6 +138,10 @@ typedef struct {
     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;

文件差異過大導致無法顯示
+ 0 - 78
packages.toml


+ 2 - 0
test/unix-time-test.cpp

@@ -145,6 +145,8 @@ TEST(timetest, sleep) {
     /* init */
     pikaMemInfo.heapUsedMax = 0;
     PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
+    extern unsigned char pikaModules_py_a[];
+    obj_linkLibrary(pikaMain, pikaModules_py_a);
     /* run */
     __platform_printf("BEGIN\r\n");
 

部分文件因文件數量過多而無法顯示