|
楼主 |
发表于 2020-10-25 01:46:13
|
显示全部楼层
又改了一下,比较完整一点
- #ifndef _RTS_DRIVER_H
- #define _RTS_DRIVER_H
- #include "stdint.h"
- /*
- |=======================================|
- | app | |
- |-------------------------| |
- | rts_driver | middleware |functionware |
- |---------------------------------------|
- | hardware |
- |=======================================|
- */
- typedef enum
- {
- RTS_DRIVER_TYPE_UNKNOW=0,
- RTS_DRIVER_TYPE_UART,
- RTS_DRIVER_TYPE_SPI,
- RTS_DRIVER_TYPE_I2C,
- RTS_DRIVER_TYPE_I2S,
- RTS_DRIVER_TYPE_SDIO,
- RTS_DRIVER_TYPE_USB,
- RTS_DRIVER_TYPE_FLASH,
- RTS_DRIVER_TYPE_RTC,
- RTS_DRIVER_TYPE_WATCHDOG,
- RTS_DRIVER_TYPE_ADC,
- RTS_DRIVER_TYPE_PIN,
- RTS_DRIVER_TYPE_EEPROM,
- RTS_DRIVER_TYPE_PWM,
- RTS_DRIVER_TYPE_TIMER,
- RTS_DRIVER_TYPE_DAC,
- RTS_DRIVER_TYPE_CRC,
- RTS_DRIVER_TYPE_DMA,
- }rts_driver_type_t;
- typedef struct
- {
- const char * name;
- const rts_driver_type_t type;
- const uint32_t api_ver;
- const void * api;
- }rts_driver_t;
- #define RTS_DRIVER_API_VER(x,y,z) (((0x##x)<<24)|((0x##y)<<8)|(0x##z))
- const char *rts_driver_get_type_str(const rts_driver_t *dev);
- #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && __ARMCC_VERSION >= 6000000)
- #define RTS_DRIVER_SECTION(x) __attribute__((section(x)))
- #elif defined(__ICCARM__)
- #define RTS_DRIVER_SECTION(x) @ x
- #elif defined(__GNUC__)
- #define RTS_DRIVER_SECTION(x) __attribute__((section(x)))
- #else
- #define RTS_DRIVER_SECTION(x)
- #endif
- #define RTS_DRIVER_REGISTER(_name,_type,_api_ver,_api) \
- static const rts_driver_t rts_driver_##_name RTS_DRIVER_SECTION("RTS_DRIVER_LIST")= \
- { \
- .name=#_name, \
- .type=_type, \
- .api_ver=_api_ver, \
- .api=_api \
- }
- #endif
复制代码
- #ifndef _RTS_UART_H
- #define _RTS_UART_H
- #include "stdint.h"
- #include "rts_driver.h"
- #define RTS_UART_API_VERSION RTS_DRIVER_API_VER(0,0,1)
- //error codes
- typedef enum
- {
- RTS_UART_SUCCESS=0,
- RTS_UART_ERROR,
- RTS_UART_BUSY,
- RTS_UART_UNSUPPORT_BAUDRATE,
- RTS_UART_UNSUPPORT_DATA_BITS,
- RTS_UART_UNSUPPORT_PARITY,
- RTS_UART_UNSUPPORT_STOP_BITS,
- RTS_UART_UNSUPPORT_APIS
- }rts_uart_err_t;
- //control cmd lists
- #define RTS_UART_BAUDRATE (1<<0) //arg: baud rate(dafault:9600)
- #define RTS_UART_DATA_BITS_5 (1<<1)
- #define RTS_UART_DATA_BITS_6 (1<<2)
- #define RTS_UART_DATA_BITS_7 (1<<3)
- #define RTS_UART_DATA_BITS_8 (1<<4) //default
- #define RTS_UART_DATA_BITS_9 (1<<5)
- #define RTS_UART_PARITY_EVEN (1<<6)
- #define RTS_UART_PARITY_NONE (1<<7) //default
- #define RTS_UART_PARITY_ODD (1<<8)
- #define RTS_UART_STOP_BITS_1 (1<<9) //default
- #define RTS_UART_STOP_BITS_2 (1<<10)
- #define RTS_UART_STOP_BITS_1_5 (1<<11)
- #define RTS_UART_STOP_BITS_0_5 (1<<12)
- #define RTS_UART_POLL_SEND (1<<13) //default
- #define RTS_UART_POLL_READ (1<<14)
- #define RTS_UART_INTTERPUT_SEND (1<<15)
- #define RTS_UART_INTTERPUT_READ (1<<16) //defalut
- #define RTS_UART_DMA_SEND (1<<17)
- #define RTS_UART_DMA_READ (1<<18)
- #define RTS_UART_QUEUE_SEND (1<<19)
- #define RTS_UART_QUEUE_READ (1<<20)
- #pragma anon_unions
- struct rts_uart
- {
- struct
- {
- uint32_t support_poll_send:1;
- uint32_t support_poll_read:1;
- uint32_t support_intterput_send:1;
- uint32_t support_intterput_read:1;
- uint32_t support_dma_send:1;
- uint32_t support_dma_read:1;
- uint32_t support_queue_send:1;
- uint32_t support_queue_read:1;
- };
- rts_uart_err_t (*init)(struct rts_uart *dev);
- void (*uninit)(struct rts_uart *dev);
- rts_uart_err_t (*control)(struct rts_uart *dev,uint32_t control,uint32_t arg);
- uint32_t (*poll_send)(struct rts_uart *dev,uint8_t *buffer,uint32_t len);
- uint32_t (*poll_read)(struct rts_uart *dev,uint8_t *buffer,uint32_t size);
- uint32_t (*intterput_send)(struct rts_uart *dev,uint8_t *buffer,uint32_t len);
- void (*intterput_read_set_callback)(struct rts_uart *dev,void (*callback)(uint8_t data));
- uint32_t (*dma_send)(struct rts_uart *dev,uint8_t *buffer,uint32_t len);
- void (*dma_read_set_callback)(struct rts_uart *dev,uint8_t *dmabuffer,uint32_t size,void (*callback)(uint8_t *buf,uint32_t len));
- uint32_t (*queue_send)(struct rts_uart *dev,uint8_t *buffer,uint32_t len);
- uint32_t (*queue_read)(struct rts_uart *dev,uint8_t *buffer,uint32_t len);
- };
- //rts uart api
- inline rts_uart_err_t rts_uart_init(struct rts_uart *dev);
- inline void rts_uart_uninit(struct rts_uart *dev);
- inline rts_uart_err_t rts_uart_control(struct rts_uart *dev,uint32_t control,uint32_t arg);
- inline uint32_t rts_uart_poll_send(struct rts_uart *dev,uint8_t *buffer,uint32_t len);
- inline uint32_t rts_uart_poll_read(struct rts_uart *dev,uint8_t *buffer,uint32_t size);
- inline uint32_t rts_uart_intterput_send(struct rts_uart *dev,uint8_t *buffer,uint32_t len);
- inline void rts_uart_intterput_read_set_callback(struct rts_uart *dev,void (*callback)(uint8_t data));
- inline uint32_t rts_uart_dma_send(struct rts_uart *dev,uint8_t *buffer,uint32_t len);
- inline void rts_uart_dma_read_set_callback(struct rts_uart *dev,uint8_t *dmabuffer,uint32_t size,void (*callback)(uint8_t *buf,uint32_t len));
- inline uint32_t rts_uart_queue_send(struct rts_uart *dev,uint8_t *buffer,uint32_t len);
- inline uint32_t rts_uart_queue_read(struct rts_uart *dev,uint8_t *buffer,uint32_t len);
- #endif
复制代码
- #include "rts_uart.h"
- #include "stdint.h"
- inline rts_uart_err_t rts_uart_init(struct rts_uart *dev)
- {
- return dev->init(dev);
- }
- inline void rts_uart_uninit(struct rts_uart *dev)
- {
- dev->uninit(dev);
- }
- inline rts_uart_err_t rts_uart_control(struct rts_uart *dev,uint32_t control,uint32_t arg)
- {
- return dev->control(dev,control,arg);
- }
- inline uint32_t rts_uart_poll_send(struct rts_uart *dev,uint8_t *buffer,uint32_t len)
- {
- if(!dev->support_poll_send) return 0;
- return dev->poll_send(dev,buffer,len);
- }
- inline uint32_t rts_uart_poll_read(struct rts_uart *dev,uint8_t *buffer,uint32_t len)
- {
- if(!dev->support_poll_read)return 0;
- return dev->poll_read(dev,buffer,len);
- }
- inline uint32_t rts_uart_intterput_send(struct rts_uart *dev,uint8_t *buffer,uint32_t len)
- {
- if(!dev->support_intterput_send)return 0;
- return dev->intterput_send(dev,buffer,len);
- }
- inline void rts_uart_intterput_read_set_callback(struct rts_uart *dev,void (*callback)(uint8_t data))
- {
- if(!dev->support_intterput_read)return;
- dev->intterput_read_set_callback(dev,callback);
- }
- inline uint32_t rts_uart_dma_send(struct rts_uart *dev,uint8_t *buffer,uint32_t len)
- {
- if(!dev->support_dma_send)return 0;
- return dev->dma_send(dev,buffer,len);
- }
- inline void rts_uart_dma_read_set_callback(struct rts_uart *dev,uint8_t *dmabuffer,uint32_t size,void (*callback)(uint8_t *buf,uint32_t len))
- {
- if(!dev->support_dma_read)return;
- dev->dma_read_set_callback(dev,dmabuffer,size,callback);
- }
- inline uint32_t rts_uart_queue_send(struct rts_uart *dev,uint8_t *buffer,uint32_t len)
- {
- if(!dev->support_queue_send)return 0;
- return dev->queue_send(dev,buffer,len);
- }
- inline uint32_t rts_uart_queue_read(struct rts_uart *dev,uint8_t *buffer,uint32_t len)
- {
- if(!dev->support_queue_read)return 0;
- return dev->queue_read(dev,buffer,len);
- }
复制代码 |
|