📄 ddf_frame.h
字号:
/*****************************************************************************
*
* Module : ddf_frame.h
* Description : Simple low level Device Driver Framework
* OS : SLOS 0.09
* Platform : e7t
* History :
*
* 19th November 2001 Andrew N. Sloss
* - implemented version DDF 0.01 from Chris Wright's
* specification
*
* December 2nd 2001 Andrew N. Sloss
* - added uid generator
*
*****************************************************************************/
/*****************************************************************************
* IMPORT
*****************************************************************************/
#include "../core/uid.h" /* UID generator ................... */
/*****************************************************************************
* MACROS
*****************************************************************************/
/* none... */
/*****************************************************************************
* DATATYPES
*****************************************************************************/
/* -- DATA_STR ----------------------------------------------------------------
*
* Description : for block transfer devices
* Fields : unsigned int size - size of the block
* : void *data - point to the block of data
*
*/
typedef struct data {
unsigned int size;
void *data;
} block_data_t;
/* -- DATA_STR ----------------------------------------------------------------
*
* Description : for block transfer devices
* Fields : unsigned int size - size of the block
* : void *data - point to the block of data
*
*/
typedef struct device_tree {
/* -----------------------------------------------------------
* Field : name
* Description : name of the device driver
* Example : "LED Driver"
*
*/
char name[12];
/* -----------------------------------------------------------
* Field : driver_id
* Description : is a unique identifer for the driver
* Example : for LED driver
*
*/
UID driver_id;
/* -----------------------------------------------------------
* Field : fn * init
* Description : initialize internel specific
* : device driver functions
* Example : led_init ();
* Returns : none...
*/
void (*init) (void);
/* -----------------------------------------------------------
* Field : fn * open
* Description : opens a device for access
* Example : uid = open (SERIAL,COM1);
* Returns : UID
*
* >0 - SUCCESS
* -1 - DEVICE_IN_USE
* -2 - DEVICE_UNKNOWN
*
*/
UID (*open) (unsigned int, unsigned int);
/* -----------------------------------------------------------
* Field : fn * close
* Description : opens a device for access
* Example : uid = open (SERIAL,COM1);
* Returns : UID
*
* 0 - DEVICE_SUCCESS
* -2 - DEVICE_UNKNOWN
*
*/
int (*close) (UID);
/**********************************************************
* WRITE
**********************************************************/
union
{
/* --------------------------------------------------------
* Field : fn * byte
* Description : write a byte to a particular device
* Example : write.byte (SEGMENT,SEVEN);
* Returns : none...
*
*/
void (*byte) (UID, BYTE);
/* --------------------------------------------------------
* Field : fn * bit
* Description : write a bit to a particular device
* Example : write.bit (LEDRED,REDON);
* Returns : none...
*
*/
void (*bit) (UID, BYTE);
/* --------------------------------------------------------
* Field : fn * bit
* Description : write a block to a particular device
* Example : write.block (ETHER,&PACKET);
* Returns : none...
*
*/
void (*block) (UID, block_data_t *);
} write;
/**********************************************************
* READ
**********************************************************/
union
{
/* --------------------------------------------------------
* Field : fn * byte
* Description : read a byte from a particular device
* Example : c = read.block (SERIAL,COM1);
* Returns : BYTE - 8-bit unsigned char
*
*/
BYTE (*byte) (UID);
/* --------------------------------------------------------
* Field : fn * bit
* Description : read a bit from a particular device
* Example : is_redled_on = read.bit (LED_RED);
* Returns : BYTE - only least significant bit is
* important
*
*/
BYTE (*bit) (UID);
/* --------------------------------------------------------
* Field : fn * block
* Description : write a block to a particular device
* Example : recieved = write.block (ETHER);
* Returns : block_data_t
*
*/
block_data_t *(*block) (UID);
} read;
} device_treestr ;
extern device_treestr devices[];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -