mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
support uart for std by pika_hal
This commit is contained in:
parent
765d32483f
commit
fd6d39143c
@ -48,24 +48,72 @@ void PikaStdDevice_UART_writeBytes(PikaObj* self, uint8_t* data, int length) {
|
|||||||
obj_runNativeMethod(self, "platformWriteBytes", NULL);
|
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, "%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) {
|
void PikaStdDevice_UART_platformEnable(PikaObj* self) {
|
||||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PikaStdDevice_UART_platformRead(PikaObj* self) {
|
void PikaStdDevice_UART_platformRead(PikaObj* self) {
|
||||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PikaStdDevice_UART_platformWrite(PikaObj* self) {
|
void PikaStdDevice_UART_platformWrite(PikaObj* self) {
|
||||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
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) {
|
void PikaStdDevice_UART_platformDisable(PikaObj* self) {
|
||||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PikaStdDevice_UART_platformReadBytes(PikaObj* self) {
|
void PikaStdDevice_UART_platformReadBytes(PikaObj* self) {
|
||||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PikaStdDevice_UART_platformWriteBytes(PikaObj* self) {
|
void PikaStdDevice_UART_platformWriteBytes(PikaObj* self) {
|
||||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
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);
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,7 @@ __exit:
|
|||||||
__platform_printf("Error: dev_open failed.\r\n");
|
__platform_printf("Error: dev_open failed.\r\n");
|
||||||
if (dev->ioctl_config) {
|
if (dev->ioctl_config) {
|
||||||
pikaFree(dev->ioctl_config, _pika_hal_dev_config_size(dev_type));
|
pikaFree(dev->ioctl_config, _pika_hal_dev_config_size(dev_type));
|
||||||
|
dev->ioctl_config = NULL;
|
||||||
}
|
}
|
||||||
if (dev) {
|
if (dev) {
|
||||||
pikaFree(dev, sizeof(pika_dev));
|
pikaFree(dev, sizeof(pika_dev));
|
||||||
@ -71,11 +72,12 @@ int pika_hal_close(pika_dev* dev) {
|
|||||||
}
|
}
|
||||||
ret = impl->close(dev);
|
ret = impl->close(dev);
|
||||||
__exit:
|
__exit:
|
||||||
if (NULL != dev) {
|
|
||||||
pikaFree(dev, sizeof(pika_dev));
|
|
||||||
}
|
|
||||||
if (NULL != dev->ioctl_config) {
|
if (NULL != dev->ioctl_config) {
|
||||||
pikaFree(dev->ioctl_config, _pika_hal_dev_config_size(dev->type));
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -48,24 +48,72 @@ void PikaStdDevice_UART_writeBytes(PikaObj* self, uint8_t* data, int length) {
|
|||||||
obj_runNativeMethod(self, "platformWriteBytes", NULL);
|
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, "%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) {
|
void PikaStdDevice_UART_platformEnable(PikaObj* self) {
|
||||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PikaStdDevice_UART_platformRead(PikaObj* self) {
|
void PikaStdDevice_UART_platformRead(PikaObj* self) {
|
||||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PikaStdDevice_UART_platformWrite(PikaObj* self) {
|
void PikaStdDevice_UART_platformWrite(PikaObj* self) {
|
||||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
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) {
|
void PikaStdDevice_UART_platformDisable(PikaObj* self) {
|
||||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PikaStdDevice_UART_platformReadBytes(PikaObj* self) {
|
void PikaStdDevice_UART_platformReadBytes(PikaObj* self) {
|
||||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PikaStdDevice_UART_platformWriteBytes(PikaObj* self) {
|
void PikaStdDevice_UART_platformWriteBytes(PikaObj* self) {
|
||||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user