add IIC utils

This commit is contained in:
lyon 2024-02-12 23:10:49 +08:00
parent b51da56a49
commit dfa38f9f5e
9 changed files with 220 additions and 412 deletions

View File

@ -94,18 +94,6 @@ class GPIO(BaseDev):
def close(self): ...
def platformHigh(self): ...
def platformLow(self): ...
def platformEnable(self): ...
def platformDisable(self): ...
def platformSetMode(self): ...
def platformRead(self): ...
def Time() -> time:
""" deprecated use time module instead """
@ -174,15 +162,6 @@ class ADC(BaseDev):
def close(self): ...
@abstractmethod
def platformEnable(self): ...
@abstractmethod
def platformRead(self): ...
@abstractmethod
def platformDisable(self): ...
class DAC(BaseDev):
def __init__(self): ...
@ -298,24 +277,6 @@ class UART:
deprecated, you can use `setCallback` instead.
"""
@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): ...
@ -347,23 +308,6 @@ class IIC(BaseDev):
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):
@ -411,17 +355,6 @@ class PWM(BaseDev):
def close(self): ...
@abstractmethod
def platformEnable(self): ...
@abstractmethod
def platformSetFrequency(self): ...
@abstractmethod
def platformSetDuty(self): ...
@abstractmethod
def platformDisable(self): ...
class SPI(BaseDev):
@ -518,24 +451,6 @@ class CAN(BaseDev):
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")

View File

@ -1,14 +1,6 @@
#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");
}
@ -17,15 +9,6 @@ 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 = PIKA_HAL_OBJ2DEV(self);
if (NULL != dev) {
@ -40,7 +23,21 @@ static pika_dev* _get_dev(PikaObj* self) {
return dev;
}
void PikaStdDevice_ADC_platformEnable(PikaObj* self) {
pika_float PikaStdDevice_ADC_read(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);
return obj_getFloat(self, "val");
}
void PikaStdDevice_ADC_setPin(PikaObj* self, char* pin) {
obj_setStr(self, "pin", pin);
}
void PikaStdDevice_ADC_enable(PikaObj* self) {
pika_dev* dev = _get_dev(self);
if (NULL == dev) {
__platform_printf("Error: open ADC '%s' failed.\r\n",
@ -53,20 +50,11 @@ void PikaStdDevice_ADC_platformEnable(PikaObj* self) {
pika_hal_ioctl(dev, PIKA_HAL_IOCTL_ENABLE);
}
void PikaStdDevice_ADC_platformDisable(PikaObj* self) {
void PikaStdDevice_ADC_disable(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);

View File

@ -13,13 +13,9 @@ void PikaStdDevice_CAN_addFilter(PikaObj* self,
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
}
void PikaStdDevice_CAN_disable(PikaObj* self) {
obj_runNativeMethod(self, "platformDisable", NULL);
}
void PikaStdDevice_CAN_disable(PikaObj* self) {}
void PikaStdDevice_CAN_enable(PikaObj* self) {
obj_runNativeMethod(self, "platformEnable", NULL);
}
void PikaStdDevice_CAN_enable(PikaObj* self) {}
void PikaStdDevice_CAN_setId(PikaObj* self, int id) {
obj_setInt(self, "id", id);
@ -39,46 +35,18 @@ void PikaStdDevice_CAN_setBaudRate(PikaObj* self, int 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();
}

View File

@ -1,6 +1,20 @@
#include "PikaStdDevice_GPIO.h"
#include "PikaStdDevice_common.h"
static pika_dev* _get_dev(PikaObj* self) {
pika_dev* dev = PIKA_HAL_OBJ2DEV(self);
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_init(PikaObj* self) {
obj_setInt(self, "isEnable", 0);
obj_setStr(self, "pin", "none");
@ -28,12 +42,14 @@ void PikaStdDevice_GPIO___init__(PikaObj* self) {
void PikaStdDevice_GPIO_disable(PikaObj* self) {
obj_setInt(self, "isEnable", 0);
obj_runNativeMethod(self, "platformDisable", NULL);
pika_dev* dev = _get_dev(self);
pika_hal_ioctl(dev, PIKA_HAL_IOCTL_DISABLE);
}
void PikaStdDevice_GPIO_enable(PikaObj* self) {
obj_setInt(self, "isEnable", 1);
obj_runNativeMethod(self, "platformEnable", NULL);
pika_dev* dev = _get_dev(self);
pika_hal_ioctl(dev, PIKA_HAL_IOCTL_ENABLE);
}
char* PikaStdDevice_GPIO_getMode(PikaObj* self) {
@ -46,23 +62,47 @@ char* PikaStdDevice_GPIO_getPin(PikaObj* self) {
void PikaStdDevice_GPIO_low(PikaObj* self) {
obj_setInt(self, "isOn", 0);
obj_runNativeMethod(self, "platformLow", NULL);
pika_dev* dev = _get_dev(self);
uint32_t val = 0;
pika_hal_write(dev, &val, sizeof(val));
}
void PikaStdDevice_GPIO_high(PikaObj* self) {
obj_setInt(self, "isOn", 1);
obj_runNativeMethod(self, "platformHigh", NULL);
pika_dev* dev = _get_dev(self);
uint32_t val = 1;
pika_hal_write(dev, &val, sizeof(val));
}
int PikaStdDevice_GPIO_read(PikaObj* self) {
obj_runNativeMethod(self, "platformRead", NULL);
pika_dev* dev = _get_dev(self);
uint32_t val = 0;
pika_hal_read(dev, &val, sizeof(val));
obj_setInt(self, "readBuff", val);
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);
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);
} else {
obj_setErrorCode(self, 1);
obj_setSysOut(self, "[error] GPIO mode should be 'out' or 'in'.");
@ -79,75 +119,10 @@ void PikaStdDevice_GPIO_setPull(PikaObj* self, char* pull) {
}
}
static pika_dev* _get_dev(PikaObj* self) {
pika_dev* dev = PIKA_HAL_OBJ2DEV(self);
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) {

View File

@ -11,13 +11,9 @@ void PikaStdDevice_IIC___init__(PikaObj* self) {
PikaStdDevice_IIC_init(self);
}
void PikaStdDevice_IIC_enable(PikaObj* self) {
obj_runNativeMethod(self, "platformEnable", NULL);
}
void PikaStdDevice_IIC_enable(PikaObj* self) {}
void PikaStdDevice_IIC_disable(PikaObj* self) {
obj_runNativeMethod(self, "platformDisable", NULL);
}
void PikaStdDevice_IIC_disable(PikaObj* self) {}
void PikaStdDevice_IIC_setDeviceAddr(PikaObj* self, int addr) {
obj_setInt(self, "deviceAddr", addr);
@ -34,7 +30,6 @@ void PikaStdDevice_IIC_setPinSDA(PikaObj* self, char* 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,
@ -43,43 +38,16 @@ void PikaStdDevice_IIC_writeBytes(PikaObj* self,
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();
}

View File

@ -1,6 +1,20 @@
#include "PikaStdDevice_PWM.h"
#include "PikaStdDevice_common.h"
static pika_dev* _get_dev(PikaObj* self) {
pika_dev* dev = PIKA_HAL_OBJ2DEV(self);
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_init(PikaObj* self) {
obj_setStr(self, "pin", "none");
obj_setStr(self, "name", "none");
@ -19,20 +33,31 @@ void PikaStdDevice_PWM_setPin(PikaObj* self, char* pin) {
void PikaStdDevice_PWM_setFrequency(PikaObj* self, int freq) {
obj_setInt(self, "freq", freq);
obj_runNativeMethod(self, "platformSetFrequency", NULL);
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_setDuty(PikaObj* self, pika_float duty) {
obj_setFloat(self, "duty", duty);
obj_runNativeMethod(self, "platformSetDuty", NULL);
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_enable(PikaObj* self) {
obj_runNativeMethod(self, "platformEnable", NULL);
pika_dev* dev = _get_dev(self);
pika_hal_ioctl(dev, PIKA_HAL_IOCTL_ENABLE);
}
void PikaStdDevice_PWM_disable(PikaObj* self) {
obj_runNativeMethod(self, "platformDisable", NULL);
pika_dev* dev = _get_dev(self);
pika_hal_ioctl(dev, PIKA_HAL_IOCTL_DISABLE);
}
pika_float PikaStdDevice_PWM_getDuty(PikaObj* self) {
@ -63,49 +88,6 @@ void PikaStdDevice_PWM_setFreq(PikaObj* self, int freq) {
PikaStdDevice_PWM_setFrequency(self, freq);
}
static pika_dev* _get_dev(PikaObj* self) {
pika_dev* dev = PIKA_HAL_OBJ2DEV(self);
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);

View File

@ -1,96 +1,6 @@
#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 = PIKA_HAL_OBJ2DEV(self);
if (NULL != dev) {
@ -107,7 +17,7 @@ static pika_dev* _get_dev(PikaObj* self) {
return dev;
}
void PikaStdDevice_UART_platformEnable(PikaObj* self) {
void PikaStdDevice_UART_enable(PikaObj* self) {
pika_dev* dev = _get_dev(self);
if (NULL == dev) {
__platform_printf("Error: open UART '%d' failed.\r\n",
@ -163,23 +73,7 @@ void PikaStdDevice_UART_platformEnable(PikaObj* self) {
}
}
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) {
void PikaStdDevice_UART_disable(PikaObj* self) {
pika_dev* dev = _get_dev(self);
if (NULL == dev) {
__platform_printf("Error: open UART '%d' failed.\r\n",
@ -189,18 +83,94 @@ void PikaStdDevice_UART_platformDisable(PikaObj* self) {
pika_hal_ioctl(dev, PIKA_HAL_IOCTL_DISABLE);
}
void PikaStdDevice_UART_platformReadBytes(PikaObj* self) {
int len = obj_getInt(self, "length");
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) {
int len = 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);
return obj_getStr(self, "readData");
}
Arg* PikaStdDevice_UART_readBytes(PikaObj* self, int length) {
int len = 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);
return arg_copy(obj_getArg(self, "readData"));
}
void PikaStdDevice_UART_platformWriteBytes(PikaObj* self) {
uint8_t* data = obj_getBytes(self, "writeData");
int len = obj_getBytesSize(self, "writeData");
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) {
pika_dev* dev = _get_dev(self);
pika_hal_write(dev, data, strlen(data));
}
void PikaStdDevice_UART_writeBytes(PikaObj* self, uint8_t* data, int length) {
int len = length;
pika_dev* dev = _get_dev(self);
pika_hal_write(dev, data, len);
}

View File

@ -144,6 +144,27 @@ int pika_hal_utils_IIC_mem_write(pika_dev* dev,
return pika_hal_write(dev, data, size);
}
int pika_hal_utils_IIC_read(pika_dev* dev, uint8_t* data, uint32_t size) {
pika_hal_IIC_config* iic_config = (pika_hal_IIC_config*)dev->ioctl_config;
iic_config->mem_addr_ena = PIKA_HAL_IIC_MEM_ADDR_ENA_DISABLE;
if (pika_hal_ioctl(dev, PIKA_HAL_IOCTL_CONFIG, dev->ioctl_config) < 0) {
return -1;
}
return pika_hal_read(dev, data, size);
}
int pika_hal_utils_IIC_write(pika_dev* dev, uint8_t* data, uint32_t size) {
pika_hal_IIC_config* iic_config = (pika_hal_IIC_config*)dev->ioctl_config;
iic_config->mem_addr_ena = PIKA_HAL_IIC_MEM_ADDR_ENA_DISABLE;
if (pika_hal_ioctl(dev, PIKA_HAL_IOCTL_CONFIG, dev->ioctl_config) < 0) {
return -1;
}
return pika_hal_write(dev, data, size);
}
int pika_hal_utils_IIC_set_slave_addr(pika_dev* dev, uint32_t slave_addr) {
pika_hal_IIC_config* iic_config = (pika_hal_IIC_config*)dev->ioctl_config;
iic_config->slave_addr = slave_addr;

View File

@ -144,6 +144,27 @@ int pika_hal_utils_IIC_mem_write(pika_dev* dev,
return pika_hal_write(dev, data, size);
}
int pika_hal_utils_IIC_read(pika_dev* dev, uint8_t* data, uint32_t size) {
pika_hal_IIC_config* iic_config = (pika_hal_IIC_config*)dev->ioctl_config;
iic_config->mem_addr_ena = PIKA_HAL_IIC_MEM_ADDR_ENA_DISABLE;
if (pika_hal_ioctl(dev, PIKA_HAL_IOCTL_CONFIG, dev->ioctl_config) < 0) {
return -1;
}
return pika_hal_read(dev, data, size);
}
int pika_hal_utils_IIC_write(pika_dev* dev, uint8_t* data, uint32_t size) {
pika_hal_IIC_config* iic_config = (pika_hal_IIC_config*)dev->ioctl_config;
iic_config->mem_addr_ena = PIKA_HAL_IIC_MEM_ADDR_ENA_DISABLE;
if (pika_hal_ioctl(dev, PIKA_HAL_IOCTL_CONFIG, dev->ioctl_config) < 0) {
return -1;
}
return pika_hal_write(dev, data, size);
}
int pika_hal_utils_IIC_set_slave_addr(pika_dev* dev, uint32_t slave_addr) {
pika_hal_IIC_config* iic_config = (pika_hal_IIC_config*)dev->ioctl_config;
iic_config->slave_addr = slave_addr;