驱动优化
This commit is contained in:
@@ -66,7 +66,7 @@ void drv_device_unregister(drv_device_t* self){
|
||||
drv_device_t* drv_device_find(const char* name){
|
||||
drv_rbtree_node_t* p = drv_rbtree_find(&s_drv_rbtree, name);
|
||||
if(p==NULL) return NULL;
|
||||
return &p->device;
|
||||
return p->device;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -19,13 +19,11 @@
|
||||
#endif /*INCLUDED_OS_LIST_H*/
|
||||
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
typedef struct {
|
||||
void* handle;
|
||||
os_list_node_t node;
|
||||
os_err_t (*init)(void* handle, void* args);
|
||||
os_err_t (*destroy)(void* handle, void* args);
|
||||
os_err_t (*open)(void* handle, void* args);
|
||||
|
||||
@@ -26,7 +26,7 @@ OS_STATIC_FORCE_INLINE
|
||||
void node_init(rbtree_t* tree, rbtree_node_t * self, drv_device_t* val){
|
||||
self->left = self->right = self->parent = 0;
|
||||
self->color = RED;
|
||||
self->device = *val;
|
||||
self->device = val;
|
||||
}
|
||||
|
||||
OS_STATIC_FORCE_INLINE
|
||||
@@ -78,7 +78,7 @@ void rotate_right(rbtree_t* self, rbtree_node_t * y){
|
||||
|
||||
static rbtree_node_t * find(rbtree_t* self, const char* key, rbtree_node_t * x){
|
||||
while(x){
|
||||
int cmp = node_cmp(x->device.name, key);
|
||||
int cmp = node_cmp(key, x->device->name);
|
||||
if(cmp < 0){
|
||||
x = x->left;
|
||||
}else if(cmp > 0){
|
||||
@@ -201,7 +201,7 @@ void node_insert_fixup(rbtree_t* tree, rbtree_node_t * node){
|
||||
node_set_black(tree->root);
|
||||
}
|
||||
|
||||
OS_STATIC_FORCE_INLINE
|
||||
static
|
||||
void node_insert(rbtree_t* tree, rbtree_node_t * node){
|
||||
int cmp = 0;
|
||||
rbtree_node_t * y = NULL;
|
||||
@@ -210,7 +210,7 @@ void node_insert(rbtree_t* tree, rbtree_node_t * node){
|
||||
// 1. 将红黑树当作一颗二叉查找树,将节点添加到二叉查找树中。
|
||||
while (x) {
|
||||
y = x;
|
||||
cmp = node_cmp(node->device.name, x->device.name);
|
||||
cmp = node_cmp(node->device->name, x->device->name);
|
||||
if (cmp < 0)
|
||||
x = x->left;
|
||||
else
|
||||
@@ -223,7 +223,7 @@ void node_insert(rbtree_t* tree, rbtree_node_t * node){
|
||||
tree->root = node;
|
||||
}else{
|
||||
// 判断插入父节点的左边还是右边
|
||||
cmp = node_cmp(node->device.name, y->device.name);
|
||||
cmp = node_cmp(node->device->name, y->device->name);
|
||||
if(cmp < 0){
|
||||
y->left = node;
|
||||
}else{
|
||||
|
||||
@@ -30,7 +30,7 @@ typedef struct drv_rbtree_node_s{
|
||||
struct drv_rbtree_node_s* right;
|
||||
struct drv_rbtree_node_s* parent;
|
||||
char color;
|
||||
drv_device_t device;
|
||||
drv_device_t* device;
|
||||
}drv_rbtree_node_t;
|
||||
|
||||
typedef struct {
|
||||
|
||||
+6
-13
@@ -8,22 +8,15 @@
|
||||
typedef struct drv_softi2c_t drv_softi2c_t;
|
||||
|
||||
struct drv_softi2c_t{
|
||||
drv_device_t root;
|
||||
os_uint_t scl_clock;
|
||||
void* scl_port;
|
||||
os_uint_t scl_pin;
|
||||
os_uint_t sda_clock;
|
||||
void* sda_port;
|
||||
os_uint_t sda_pin;
|
||||
os_err_t (*put)(drv_softi2c_t* self, const uint8_t data);
|
||||
os_err_t (*get)(drv_softi2c_t* self, uint8_t* data);
|
||||
drv_device_t device;
|
||||
os_err_t (*put)(void* self, uint8_t data);
|
||||
os_err_t (*get)(void* self, uint8_t ack, uint8_t* data);
|
||||
os_err_t (*wait_ack)(void* handle);
|
||||
};
|
||||
|
||||
#define drv_softi2c_start(dev) drv_device_open(dev)
|
||||
#define drv_softi2c_stop(dev) drv_device_close(dev)
|
||||
#define drv_softi2c_put(dev, data) (dev)->put((drv_softi2c_t*)(dev)->handle, data)
|
||||
#define drv_softi2c_get(dev, data) (dev)->get((drv_softi2c_t*)(dev)->handle, data)
|
||||
|
||||
|
||||
#define drv_softi2c_put(dev, data) ((drv_softi2c_t*)(dev->handle))->put((dev)->handle, (data))
|
||||
#define drv_softi2c_get(dev, ack, data) ((drv_softi2c_t*)(dev->handle))->get((dev)->handle, (ack), (data))
|
||||
|
||||
#endif /*INCLUDED_DRV_SOFTI2C_H*/
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
#include <drv_spi.h>
|
||||
@@ -0,0 +1,28 @@
|
||||
#ifndef INCLUDED_DRV_SPI_H
|
||||
#define INCLUDED_DRV_SPI_H
|
||||
|
||||
#ifndef INCLUDED_DRV_DEVICE_H
|
||||
#include <drv_device.h>
|
||||
#endif /*INCLUDED_DRV_DEVICE_H*/
|
||||
|
||||
/* ------------------------------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
|
||||
typedef struct {
|
||||
drv_device_t device;
|
||||
os_err_t (*cs_low)(void* handle);
|
||||
os_err_t (*cs_high)(void* handle);
|
||||
os_err_t (*put)(void* handle, uint8_t data);
|
||||
os_err_t (*get)(void* handle, uint8_t* data);
|
||||
os_err_t (*send_halfword)(void* handle, uint16_t data);
|
||||
os_err_t (*read_halfword)(void* handle, uint16_t* data);
|
||||
}drv_spi_t;
|
||||
|
||||
#define drv_spi_cs_low(dev) ((drv_spi_t*)(dev->handle))->cs_low((dev)->handle)
|
||||
#define drv_spi_cs_high(dev) ((drv_spi_t*)(dev->handle))->cs_high((dev)->handle)
|
||||
#define drv_spi_put(dev, data) ((drv_spi_t*)(dev->handle))->put((dev)->handle, data)
|
||||
#define drv_spi_get(dev, data) ((drv_spi_t*)(dev->handle))->get((dev)->handle, data)
|
||||
#define drv_spi_send_halfword(dev, data) ((drv_spi_t*)(dev->handle))->send_halfword((dev)->handle, data)
|
||||
#define drv_spi_read_halfword(dev, data) ((drv_spi_t*)(dev->handle))->read_halfword((dev)->handle, data)
|
||||
|
||||
#endif /*INCLUDED_DRV_SPI_H*/
|
||||
@@ -13,6 +13,8 @@
|
||||
#cmakedefine OS_CFG_IDLE_TASK_STACK_SIZE @OS_CFG_IDLE_TASK_STACK_SIZE@
|
||||
#cmakedefine OS_CFG_IDLE_TASK_TICKS @OS_CFG_IDLE_TASK_TICKS@
|
||||
#cmakedefine OS_CFG_IDLE_TASK_PRIORITY @OS_CFG_IDLE_TASK_PRIORITY@
|
||||
#cmakedefine OS_CFG_NAME_MAX @OS_CFG_NAME_MAX@
|
||||
#cmakedefine OS_CFG_DEVICE_MAX @OS_CFG_DEVICE_MAX@
|
||||
|
||||
|
||||
/* ==================================================================================================== */
|
||||
@@ -34,4 +36,12 @@
|
||||
#define OS_CFG_PRIORITY_MAX OS_CFG_CPU_INT_NBITS
|
||||
#endif /* OS_CFG_PRIORITY_MAX */
|
||||
|
||||
#ifndef OS_CFG_NAME_MAX
|
||||
#define OS_CFG_NAME_MAX 8
|
||||
#endif /* OS_CFG_NAME_MAX */
|
||||
|
||||
#ifndef OS_CFG_DEVICE_MAX
|
||||
#define OS_CFG_DEVICE_MAX 10
|
||||
#endif /* OS_CFG_DEVICE_MAX */
|
||||
|
||||
#endif /*INCLUDED_OS_CONFIG_H*/
|
||||
|
||||
Reference in New Issue
Block a user