|
|
@@ -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);
|
|
|
+}
|