Choco OS  V.0.16.9.0
Join to the chocolate world
oc_ioctl.h
Go to the documentation of this file.
1 
28 #ifndef INC_DRIVERS_OC_IOCTL_H_
29 #define INC_DRIVERS_OC_IOCTL_H_
30 
31 #include <stdint.h>
32 #include <oc_null.h>
33 
39 #define _________________________________________MACROS_SECTION_____________________________________________________________________________
40 
43 #define oC_IOCTL_SPECIAL_COMMAND_ID 0xF2
44 #define oC_IOCTL_NORMAL_COMMAND_ID 0xA2
45 
46 
47 #define _oC_Ioctl_MakeCommand(GROUP,INDEX,SIZE) (((GROUP) << 16) | ((SIZE & 0xFF) << 8) | ((INDEX) << 0))
48 #define oC_Ioctl_MakeCommand(GROUP,INDEX,TYPE) ((oC_IOCTL_NORMAL_COMMAND_ID << 24) | _oC_Ioctl_MakeCommand(GROUP,INDEX,sizeof(TYPE)) )
49 #define oC_Ioctl_MakeSpecialCommand(GROUP,INDEX,TYPE) ((oC_IOCTL_SPECIAL_COMMAND_ID << 24) | _oC_Ioctl_MakeCommand(GROUP,INDEX,sizeof(TYPE)) )
50 
51 #define oC_Ioctl_IsNormalCommand(COMMAND) (((COMMAND) >> 24) == oC_IOCTL_NORMAL_COMMAND_ID)
52 #define oC_Ioctl_IsSpecialCommand(COMMAND) (((COMMAND) >> 24) == oC_IOCTL_SPECIAL_COMMAND_ID)
53 #define oC_Ioctl_IsCorrectCommand(COMMAND) oC_Ioctl_IsNormalCommand(COMMAND) || oC_Ioctl_IsSpecialCommand(COMMAND)
54 
55 #undef _________________________________________MACROS_SECTION_____________________________________________________________________________
56 
63 #define _________________________________________TYPES_SECTION______________________________________________________________________________
64 
67 typedef uint32_t oC_Ioctl_Command_t;
68 
69 #undef _________________________________________TYPES_SECTION______________________________________________________________________________
70 
77 #define _________________________________________SPECIAL_COMMANDS_SECTION___________________________________________________________________
78 
79 #define oC_IOCTL_COMMAND_GET_DRIVER_VERSION oC_Ioctl_MakeSpecialCommand(0x00,uint32_t)
80 
81 typedef enum
82 {
83  oC_Ioctl_SpecialGroup_Driver ,
84  oC_Ioctl_SpecialGroup_DevFs ,
85  oC_Ioctl_SpecialGroup_FileSystem ,
86 } oC_Ioctl_SpecialGroup_t;
87 
88 typedef enum
89 {
90  oC_Ioctl_Group_Configure ,
91  oC_Ioctl_Group_GPIO ,
92 } oC_Ioctl_Group_t;
93 
94 typedef enum
95 {
96  oC_IoCtl_SpecialCommand_GetDriverVersion = oC_Ioctl_MakeSpecialCommand(oC_Ioctl_SpecialGroup_Driver , 0x01 , uint32_t) ,
97 
98  oC_IoCtl_SpecialCommand_SetDriverContext = oC_Ioctl_MakeSpecialCommand(oC_Ioctl_SpecialGroup_DevFs , 0x01 , uint32_t) ,
99 
100  oC_IoCtl_SpecialCommand_SetFileOffset = oC_Ioctl_MakeSpecialCommand(oC_Ioctl_SpecialGroup_FileSystem , 0x01 , uint32_t) ,
101  oC_IoCtl_SpecialCommand_ClearRxFifo = oC_Ioctl_MakeSpecialCommand(oC_Ioctl_SpecialGroup_FileSystem , 0x02 , uint32_t) ,
102  oC_IoCtl_SpecialCommand_ClearTxFifo = oC_Ioctl_MakeSpecialCommand(oC_Ioctl_SpecialGroup_FileSystem , 0x03 , uint32_t) ,
103 } oC_IoCtl_SpecialCommand_t;
104 
105 typedef enum
106 {
107  oC_Ioctl_NormalCommand_Enable = oC_Ioctl_MakeCommand(oC_Ioctl_Group_Configure , 0x01 , NULL ) ,
108  oC_Ioctl_NormalCommand_Disable = oC_Ioctl_MakeCommand(oC_Ioctl_Group_Configure , 0x02 , NULL ) ,
109 } oC_Ioctl_NormalCommand_t;
110 
111 #undef _________________________________________SPECIAL_COMMANDS_SECTION___________________________________________________________________
112 
113 
114 #endif /* INC_DRIVERS_OC_IOCTL_H_ */
Definition of the null pointer.
#define NULL
pointer to a zero
Definition: oc_null.h:37