2021-10-01 20:00:15 +08:00
|
|
|
#include "PikaStdDevice_UART.h"
|
|
|
|
#include "BaseObj.h"
|
2022-11-20 22:16:41 +08:00
|
|
|
#include "pika_hal.h"
|
2021-10-01 20:00:15 +08:00
|
|
|
|
|
|
|
void PikaStdDevice_UART_enable(PikaObj* self) {
|
2022-03-19 09:53:48 +08:00
|
|
|
obj_runNativeMethod(self, "platformEnable", NULL);
|
2021-10-01 20:00:15 +08:00
|
|
|
}
|
2022-03-07 14:58:21 +08:00
|
|
|
|
2022-11-20 22:16:41 +08:00
|
|
|
void PikaStdDevice_UART_disable(PikaObj* self) {
|
2022-03-19 09:53:48 +08:00
|
|
|
obj_runNativeMethod(self, "platformDisable", NULL);
|
2022-03-07 14:58:21 +08:00
|
|
|
}
|
|
|
|
|
2021-10-01 20:00:15 +08:00
|
|
|
void PikaStdDevice_UART_init(PikaObj* self) {
|
|
|
|
obj_setInt(self, "baudRate", 115200);
|
|
|
|
obj_setInt(self, "id", 1);
|
|
|
|
obj_setStr(self, "readBuff", "");
|
|
|
|
}
|
2021-12-10 23:02:40 +08:00
|
|
|
|
|
|
|
void PikaStdDevice_UART___init__(PikaObj* self) {
|
|
|
|
PikaStdDevice_UART_init(self);
|
|
|
|
}
|
|
|
|
|
2021-10-01 20:00:15 +08:00
|
|
|
char* PikaStdDevice_UART_read(PikaObj* self, int length) {
|
|
|
|
obj_setInt(self, "length", length);
|
2022-03-19 09:53:48 +08:00
|
|
|
obj_runNativeMethod(self, "platformRead", NULL);
|
2021-10-01 20:00:15 +08:00
|
|
|
return obj_getStr(self, "readData");
|
|
|
|
}
|
2022-05-23 17:10:37 +08:00
|
|
|
|
2022-11-20 22:16:41 +08:00
|
|
|
Arg* PikaStdDevice_UART_readBytes(PikaObj* self, int length) {
|
2022-05-23 17:10:37 +08:00
|
|
|
obj_setInt(self, "length", length);
|
|
|
|
obj_runNativeMethod(self, "platformReadBytes", NULL);
|
2022-05-24 15:26:12 +08:00
|
|
|
return arg_copy(obj_getArg(self, "readData"));
|
2022-05-23 17:10:37 +08:00
|
|
|
}
|
|
|
|
|
2021-10-01 20:00:15 +08:00
|
|
|
void PikaStdDevice_UART_setBaudRate(PikaObj* self, int baudRate) {
|
|
|
|
obj_setInt(self, "baudRate", baudRate);
|
|
|
|
}
|
|
|
|
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);
|
2022-03-19 09:53:48 +08:00
|
|
|
obj_runNativeMethod(self, "platformWrite", NULL);
|
2021-10-01 20:00:15 +08:00
|
|
|
}
|
|
|
|
|
2022-11-20 22:16:41 +08:00
|
|
|
void PikaStdDevice_UART_writeBytes(PikaObj* self, uint8_t* data, int length) {
|
2022-05-23 17:10:37 +08:00
|
|
|
obj_setBytes(self, "writeData", data, length);
|
|
|
|
obj_runNativeMethod(self, "platformWriteBytes", NULL);
|
|
|
|
}
|
|
|
|
|
2022-12-19 16:56:53 +08:00
|
|
|
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, "%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;
|
|
|
|
}
|
|
|
|
|
2021-11-14 19:40:06 +08:00
|
|
|
void PikaStdDevice_UART_platformEnable(PikaObj* self) {
|
2022-12-19 16:56:53 +08:00
|
|
|
pika_dev* dev = _get_dev(self);
|
|
|
|
if (NULL == dev) {
|
|
|
|
__platform_printf("Error: open UART '%d' failed.\r\n",
|
|
|
|
obj_getInt(self, "id"));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
pika_hal_UART_config cfg = {0};
|
|
|
|
cfg.baudrate = obj_getInt(self, "baudRate");
|
|
|
|
pika_hal_ioctl(dev, PIKA_HAL_IOCTL_CONFIG, &cfg);
|
|
|
|
pika_hal_ioctl(dev, PIKA_HAL_IOCTL_ENABLE);
|
2021-10-01 20:00:15 +08:00
|
|
|
}
|
2022-12-19 16:56:53 +08:00
|
|
|
|
2021-11-14 19:40:06 +08:00
|
|
|
void PikaStdDevice_UART_platformRead(PikaObj* self) {
|
2022-12-19 16:56:53 +08:00
|
|
|
int len = obj_getInt(self, "length");
|
|
|
|
obj_setBytes(self, "_readData", NULL, len + 1);
|
|
|
|
char* buff = obj_getBytes(self, "_readData");
|
|
|
|
pika_dev* dev = _get_dev(self);
|
|
|
|
pika_hal_read(dev, buff, len);
|
|
|
|
obj_setStr(self, "readData", buff);
|
2021-10-01 20:00:15 +08:00
|
|
|
}
|
2022-12-19 16:56:53 +08:00
|
|
|
|
2021-11-14 19:40:06 +08:00
|
|
|
void PikaStdDevice_UART_platformWrite(PikaObj* self) {
|
2022-12-19 16:56:53 +08:00
|
|
|
char* data = obj_getStr(self, "writeData");
|
|
|
|
pika_dev* dev = _get_dev(self);
|
|
|
|
pika_hal_write(dev, data, strlen(data));
|
2021-11-14 19:44:15 +08:00
|
|
|
}
|
2022-03-19 09:49:19 +08:00
|
|
|
|
2022-11-20 22:16:41 +08:00
|
|
|
void PikaStdDevice_UART_platformDisable(PikaObj* self) {
|
2022-12-19 16:56:53 +08:00
|
|
|
pika_dev* dev = _get_dev(self);
|
|
|
|
if (NULL == dev) {
|
|
|
|
__platform_printf("Error: open UART '%d' failed.\r\n",
|
|
|
|
obj_getInt(self, "id"));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
pika_hal_ioctl(dev, PIKA_HAL_IOCTL_DISABLE);
|
2022-03-19 09:49:19 +08:00
|
|
|
}
|
|
|
|
|
2022-11-20 22:16:41 +08:00
|
|
|
void PikaStdDevice_UART_platformReadBytes(PikaObj* self) {
|
2022-12-19 16:56:53 +08:00
|
|
|
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);
|
|
|
|
pika_hal_read(dev, buff, len);
|
|
|
|
obj_setBytes(self, "readData", buff, len);
|
2022-05-23 17:10:37 +08:00
|
|
|
}
|
|
|
|
|
2022-11-20 22:16:41 +08:00
|
|
|
void PikaStdDevice_UART_platformWriteBytes(PikaObj* self) {
|
2022-12-19 16:56:53 +08:00
|
|
|
uint8_t* data = obj_getBytes(self, "writeData");
|
|
|
|
int len = obj_getBytesLen(self, "writeData");
|
|
|
|
pika_dev* dev = _get_dev(self);
|
|
|
|
pika_hal_write(dev, data, len);
|
2022-05-23 17:10:37 +08:00
|
|
|
}
|