mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
!170 PikaStdDevice_v1.11.7_1668967321013
Merge pull request !170 from pikabot/PikaStdDevice_v1.11.7_1668967321013
This commit is contained in:
commit
9dc9426c6f
@ -9,6 +9,7 @@ void PikaStdDevice_GPIO_init(PikaObj* self) {
|
||||
obj_setInt(self, "isOn", 0);
|
||||
obj_setStr(self, "pull", "none");
|
||||
obj_setInt(self, "id", -999);
|
||||
obj_setPtr(self, "pika_dev", NULL);
|
||||
}
|
||||
|
||||
int PikaStdDevice_GPIO_getId(PikaObj* self) {
|
||||
@ -76,38 +77,70 @@ void PikaStdDevice_GPIO_setPull(PikaObj* self, char* pull) {
|
||||
}
|
||||
}
|
||||
|
||||
static pika_dev* _get_dev(PikaObj* self){
|
||||
pika_dev* dev = obj_getPtr(self, "pika_dev");
|
||||
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) {
|
||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
||||
pika_dev* dev = _get_dev(self);
|
||||
pika_hal_ioctl(dev, PIKA_IOCTL_DISABLE);
|
||||
}
|
||||
|
||||
void PikaStdDevice_GPIO_platformEnable(PikaObj* self) {
|
||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
||||
pika_dev* dev = _get_dev(self);
|
||||
pika_hal_ioctl(dev, PIKA_IOCTL_ENABLE);
|
||||
}
|
||||
|
||||
void PikaStdDevice_GPIO_platformLow(PikaObj* self) {
|
||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
||||
pika_dev* dev = _get_dev(self);
|
||||
uint32_t val = 0;
|
||||
pika_hal_write(dev, &val, sizeof(val));
|
||||
}
|
||||
|
||||
void PikaStdDevice_GPIO_platformHigh(PikaObj* self) {
|
||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
||||
pika_dev* dev = _get_dev(self);
|
||||
uint32_t val = 1;
|
||||
pika_hal_write(dev, &val, sizeof(val));
|
||||
}
|
||||
|
||||
void PikaStdDevice_GPIO_platformSetMode(PikaObj* self) {
|
||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
||||
}
|
||||
|
||||
void PikaStdDevice_GPIO_platformOff(PikaObj* self) {
|
||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
||||
}
|
||||
|
||||
void PikaStdDevice_GPIO_platformOn(PikaObj* self) {
|
||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
||||
char* mode = obj_getStr(self, "mode");
|
||||
pika_GPIO_config cfg = {0};
|
||||
if(strEqu(mode, "in")){
|
||||
cfg.dir = PIKA_GPIO_DIR_IN;
|
||||
}else{
|
||||
cfg.dir = PIKA_GPIO_DIR_OUT;
|
||||
}
|
||||
pika_dev* dev = _get_dev(self);
|
||||
char* pull = obj_getStr(self, "pull");
|
||||
if (strEqu(pull, "up")){
|
||||
cfg.pull = PIKA_GPIO_PULL_UP;
|
||||
}
|
||||
if (strEqu(pull, "down")){
|
||||
cfg.pull = PIKA_GPIO_PULL_DOWN;
|
||||
}
|
||||
if (strEqu(pull, "none")) {
|
||||
cfg.pull = PIKA_GPIO_PULL_NONE;
|
||||
}
|
||||
pika_hal_ioctl(dev, PIKA_IOCTL_CONFIG, &cfg);
|
||||
}
|
||||
|
||||
void PikaStdDevice_GPIO_platformRead(PikaObj* self) {
|
||||
ABSTRACT_METHOD_NEED_OVERRIDE_ERROR();
|
||||
pika_dev* dev = _get_dev(self);
|
||||
uint32_t val = 0;
|
||||
pika_hal_read(dev, &val, sizeof(val));
|
||||
obj_setInt(self, "readBuff", val);
|
||||
}
|
||||
|
@ -4,7 +4,7 @@
|
||||
#define PIKA_HAL_TABLE_FILE_API
|
||||
#include "pika_hal_table.h"
|
||||
|
||||
static const pika_dev_impl pika_dev_impl_list[_PIKA_DEV_TYPE_MAX] = {
|
||||
static const pika_dev_impl pika_dev_impl_list[] = {
|
||||
#define PIKA_HAL_TABLE_IMPL
|
||||
#include "pika_hal_table.h"
|
||||
};
|
||||
@ -18,10 +18,12 @@ static pika_dev_impl* _pika_dev_get_impl(pika_dev_type type) {
|
||||
|
||||
pika_dev* pika_hal_open(pika_dev_type dev_type, char* name) {
|
||||
if (dev_type >= _PIKA_DEV_TYPE_MAX) {
|
||||
__platform_printf("Error: dev_type invalied.\r\n");
|
||||
return NULL;
|
||||
}
|
||||
pika_dev_impl* impl = _pika_dev_get_impl(dev_type);
|
||||
if (impl->open == NULL) {
|
||||
__platform_printf("Error: dev_open_impl not implamented.\r\n");
|
||||
return NULL;
|
||||
}
|
||||
pika_dev* dev = (pika_dev*)pikaMalloc(sizeof(pika_dev));
|
||||
@ -29,8 +31,9 @@ pika_dev* pika_hal_open(pika_dev_type dev_type, char* name) {
|
||||
return NULL;
|
||||
}
|
||||
dev->type = dev_type;
|
||||
if (impl->open(dev) != 0) {
|
||||
if (impl->open(dev, name) != 0) {
|
||||
pikaFree(dev, sizeof(pika_dev));
|
||||
__platform_printf("Error: dev_open failed.\r\n");
|
||||
return NULL;
|
||||
}
|
||||
return dev;
|
||||
@ -49,7 +52,7 @@ int pika_hal_close(pika_dev* dev) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
int pika_hal_read(pika_dev* dev, uint8_t* buf, size_t len) {
|
||||
int pika_hal_read(pika_dev* dev, void* buf, size_t len) {
|
||||
if (dev == NULL) {
|
||||
return -1;
|
||||
}
|
||||
@ -60,7 +63,7 @@ int pika_hal_read(pika_dev* dev, uint8_t* buf, size_t len) {
|
||||
return impl->read(dev, buf, len);
|
||||
}
|
||||
|
||||
int pika_hal_write(pika_dev* dev, uint8_t* buf, size_t len) {
|
||||
int pika_hal_write(pika_dev* dev, void* buf, size_t len) {
|
||||
if (dev == NULL) {
|
||||
return -1;
|
||||
}
|
||||
@ -71,20 +74,20 @@ int pika_hal_write(pika_dev* dev, uint8_t* buf, size_t len) {
|
||||
return impl->write(dev, buf, len);
|
||||
}
|
||||
|
||||
static const int _pika_hal_cmd_arg_cnt[_PIKA_DEV_CMD_MAX] = {
|
||||
[PIKA_DEV_CMD_ENABLE] = 0,
|
||||
[PIKA_DEV_CMD_DISABLE] = 0,
|
||||
[PIKA_DEV_CMD_CONFIG] = 1,
|
||||
static const int _pika_hal_cmd_arg_cnt[_PIKA_IOCTL_MAX] = {
|
||||
[PIKA_IOCTL_ENABLE] = 0,
|
||||
[PIKA_IOCTL_DISABLE] = 0,
|
||||
[PIKA_IOCTL_CONFIG] = 1,
|
||||
};
|
||||
|
||||
static int _pika_hal_get_arg_cnt(pika_dev_cmd cmd) {
|
||||
if (cmd >= _PIKA_DEV_CMD_MAX) {
|
||||
static int _pika_hal_get_arg_cnt(pika_ioctl_cmd cmd) {
|
||||
if (cmd >= _PIKA_IOCTL_MAX) {
|
||||
return -1;
|
||||
}
|
||||
return _pika_hal_cmd_arg_cnt[cmd];
|
||||
}
|
||||
|
||||
int pika_hal_ioctl(pika_dev* dev, pika_dev_cmd cmd, ...) {
|
||||
int pika_hal_ioctl(pika_dev* dev, pika_ioctl_cmd cmd, ...) {
|
||||
if (dev == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
@ -4,8 +4,8 @@
|
||||
#include <stdint.h>
|
||||
|
||||
/*
|
||||
* pika_dev_hal is a C HAL lib for PikaScript modules.
|
||||
* the api of pika_dev_hal is similar to the api of posix file API.
|
||||
* pika_hal is a C Device HAL lib for PikaScript modules.
|
||||
* the API of pika_hal is similar to the posix file API.
|
||||
*/
|
||||
|
||||
typedef enum pika_dev_type {
|
||||
@ -14,12 +14,12 @@ typedef enum pika_dev_type {
|
||||
_PIKA_DEV_TYPE_MAX,
|
||||
} pika_dev_type;
|
||||
|
||||
typedef enum pika_dev_cmd {
|
||||
PIKA_DEV_CMD_ENABLE,
|
||||
PIKA_DEV_CMD_DISABLE,
|
||||
PIKA_DEV_CMD_CONFIG,
|
||||
_PIKA_DEV_CMD_MAX,
|
||||
} pika_dev_cmd;
|
||||
typedef enum pika_ioctl_cmd {
|
||||
PIKA_IOCTL_ENABLE,
|
||||
PIKA_IOCTL_DISABLE,
|
||||
PIKA_IOCTL_CONFIG,
|
||||
_PIKA_IOCTL_MAX,
|
||||
} pika_ioctl_cmd;
|
||||
|
||||
typedef enum pika_gpio_dir {
|
||||
PIKA_GPIO_DIR_IN,
|
||||
@ -60,18 +60,18 @@ typedef struct pika_dev {
|
||||
} pika_dev;
|
||||
|
||||
typedef struct pika_dev_impl {
|
||||
int (*open)(pika_dev* dev);
|
||||
int (*open)(pika_dev* dev, char* name);
|
||||
int (*close)(pika_dev* dev);
|
||||
int (*read)(pika_dev* dev, uint8_t* buf, size_t count);
|
||||
int (*write)(pika_dev* dev, uint8_t* buf, size_t count);
|
||||
int (*ioctl)(pika_dev* dev, pika_dev_cmd cmd, uintptr_t cfg);
|
||||
int (*read)(pika_dev* dev, void* buf, size_t count);
|
||||
int (*write)(pika_dev* dev, void* buf, size_t count);
|
||||
int (*ioctl)(pika_dev* dev, pika_ioctl_cmd cmd, uintptr_t cfg);
|
||||
} pika_dev_impl;
|
||||
|
||||
/* posix file like API */
|
||||
pika_dev* pika_hal_open(pika_dev_type dev_type, char* name);
|
||||
int pika_hal_close(pika_dev* dev);
|
||||
int pika_hal_read(pika_dev* dev, uint8_t* buf, size_t len);
|
||||
int pika_hal_write(pika_dev* dev, uint8_t* buf, size_t len);
|
||||
int PIKA_HAL_TABLE_FILE_API(pika_dev* dev, pika_dev_cmd cmd, ...);
|
||||
int pika_hal_read(pika_dev* dev, void* buf, size_t len);
|
||||
int pika_hal_write(pika_dev* dev, void* buf, size_t len);
|
||||
int pika_hal_ioctl(pika_dev* dev, pika_ioctl_cmd cmd, ...);
|
||||
|
||||
#endif
|
||||
|
@ -1,7 +1,7 @@
|
||||
#undef pika_hal_table_add
|
||||
#if defined(PIKA_HAL_TABLE_FILE_API)
|
||||
#define pika_hal_table_add(dev_name) \
|
||||
PIKA_WEAK int pika_##dev_name##_open(pika_dev* dev) { \
|
||||
PIKA_WEAK int pika_##dev_name##_open(pika_dev* dev, char* name) { \
|
||||
WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \
|
||||
return -1; \
|
||||
} \
|
||||
@ -9,12 +9,12 @@
|
||||
WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \
|
||||
return -1; \
|
||||
} \
|
||||
PIKA_WEAK int pika_##dev_name##_read(pika_dev* dev, uint8_t* buf, \
|
||||
PIKA_WEAK int pika_##dev_name##_read(pika_dev* dev, void* buf, \
|
||||
size_t len) { \
|
||||
WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \
|
||||
return -1; \
|
||||
} \
|
||||
PIKA_WEAK int pika_##dev_name##_write(pika_dev* dev, uint8_t* buf, \
|
||||
PIKA_WEAK int pika_##dev_name##_write(pika_dev* dev, void* buf, \
|
||||
size_t len) { \
|
||||
WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \
|
||||
return -1; \
|
||||
@ -32,17 +32,17 @@
|
||||
WEAK_FUNCTION_NEED_OVERRIDE_ERROR() \
|
||||
return -1; \
|
||||
} \
|
||||
int pika_##dev_name##_ioctl(pika_dev* dev, pika_dev_cmd cmd, \
|
||||
int pika_##dev_name##_ioctl(pika_dev* dev, pika_ioctl_cmd cmd, \
|
||||
uintptr_t arg) { \
|
||||
if (NULL == dev) { \
|
||||
return -1; \
|
||||
} \
|
||||
switch (cmd) { \
|
||||
case PIKA_DEV_CMD_ENABLE: \
|
||||
case PIKA_IOCTL_ENABLE: \
|
||||
return pika_##dev_name##_ioctl_enable(dev); \
|
||||
case PIKA_DEV_CMD_DISABLE: \
|
||||
case PIKA_IOCTL_DISABLE: \
|
||||
return pika_##dev_name##_ioctl_disable(dev); \
|
||||
case PIKA_DEV_CMD_CONFIG: \
|
||||
case PIKA_IOCTL_CONFIG: \
|
||||
return pika_##dev_name##_ioctl_config( \
|
||||
dev, (pika_##dev_name##_config*)arg); \
|
||||
default: \
|
||||
|
@ -164,7 +164,8 @@ releases = [
|
||||
"v1.10.3 11088f6b4ba3d5b545fe4bfdc8c27ab4fbe01936",
|
||||
"v1.10.4 f09ea25237cd35a27fd071198ff771c8b4a088ad",
|
||||
"v1.11.0 f8b529a956da57d8623247bea594e65469cac1c5",
|
||||
"v1.11.2 95642575a3e17e4c52e28cdbfbef900e02db61e0"
|
||||
"v1.11.2 95642575a3e17e4c52e28cdbfbef900e02db61e0",
|
||||
"v1.11.7 b7112610bb29109fd7268bf7162004561d73daa1"
|
||||
]
|
||||
|
||||
[[packages]]
|
||||
|
Loading…
x
Reference in New Issue
Block a user