mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-02-05 17:28:23 +08:00
add IIC utils
This commit is contained in:
parent
b51da56a49
commit
dfa38f9f5e
@ -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")
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user