HALFRED  0.4.0
hal_iobus.h
Go to the documentation of this file.
1 
10 #ifndef HAL_IOBUS_H_
11 #define HAL_IOBUS_H_
12 
13 // -----------------------------------------------------------------------------
14 // IOBus structure
15 // -----------------------------------------------------------------------------
16 
17 typedef enum{
18  IOBUS_Ready = 0,
19  IOBUS_Busy
20 } IOBUS_TransactionState;
21 
22 // type of IO Bus Address
23 typedef uint64_t IOBusAddr;
24 
25 typedef struct IOBusDesc* IOBus;
26 struct IOBusDesc {
27  // variables
28  IOBUS_TransactionState state;
29  // methods
30  HALRESULT (*Init)(IOBus);
31  HALRESULT (*Deinit)(IOBus);
32  HALRESULT (*EnableWrite)(IOBus);
33  HALRESULT (*DisableWrite)(IOBus);
34  HALRESULT (*EnableRead)(IOBus);
35  HALRESULT (*DisableRead)(IOBus);
36  size_t (*GetReadCount)(IOBus);
37  size_t (*GetWriteSpace)(IOBus);
38  size_t (*Read)(IOBus, IOBusAddr, void*, size_t, IOTime);
39  size_t (*Write)(IOBus, IOBusAddr, const void*, size_t, IOTime);
40  HALRESULT (*StartTransaction)(IOBus);
41  HALRESULT (*EndTransaction)(IOBus);
42  size_t (*RawWrite)(IOBus, const void*, size_t, IOTime);
43  size_t (*SearchDevices)(IOBus, IOBusAddr*, IOTime);
44 };
45 
46 // -----------------------------------------------------------------------------
47 // PUBLIC API
48 // -----------------------------------------------------------------------------
49 
50 #define IOBUS_Init(iobus) (iobus)->Init((iobus))
51 
52 #define IOBUS_Deinit(iobus) (iobus)->Deinit((iobus))
53 
54 #define IOBUS_EnableWrite(iobus) (iobus)->EnableWrite((iobus))
55 
56 #define IOBUS_DisableWrite(iobus) (iobus)->DisableWrite((iobus))
57 
58 #define IOBUS_EnableRead(iobus) (iobus)->EnableRead((iobus))
59 
60 #define IOBUS_DisableRead(iobus) (iobus)->DisableRead((iobus))
61 
62 #define IOBUS_GetReadCount(iobus) (iobus)->GetReadCount((iobus))
63 
64 #define IOBUS_GetWriteSpace(iobus) (iobus)->GetWriteSpace((iobus))
65 
66 #define IOBUS_Read(iobus, addr, data, size, timeout) (iobus)->Read((iobus), (addr), (data), (size), (timeout))
67 
68 #define IOBUS_Write(iobus, addr, data, size, timeout) (iobus)->Write((iobus), (addr), (data), (size), (timeout))
69 
70 #define IOBUS_StartTransaction(iobus) (iobus)->StartTransaction((iobus))
71 
72 #define IOBUS_EndTransaction(iobus) (iobus)->EndTransaction((iobus))
73 
74 #define IOBUS_RawWrite(iobus, data, size, timeout) (iobus)->RawWrite((iobus), (data), (size), (timeout))
75 
76 #define IOBUS_SearchDevices(iobus, data, timeout) (iobus)->SearchDevices((iobus), (data), (timeout))
77 
78 // -----------------------------------------------------------------------------
79 // IOBusDevice Structure
80 // -----------------------------------------------------------------------------
81 
83  IOBus bus;
84  IOBusAddr address;
85  void* param;
86 };
87 
88 typedef struct IOBusDeviceDesc* IOBusDevice;
89 
90 // -----------------------------------------------------------------------------
91 // Declaration of new IOBus Device (obviously, name must be different)
92 // -----------------------------------------------------------------------------
93 
94 #define IOBUS_DEVICE_DECLARE(name, IOBus, addr, parameters) \
95  struct IOBusDeviceDesc name ## _desc = { \
96  .bus = (IOBus), \
97  .address = (addr), \
98  .param = (parameters) \
99  }; \
100  IOBusDevice name = &name ## _desc;
101 
102 
103 #endif /* HAL_IOBUS_H_ */
HALRESULT
Definition: hal_defs.h:16
Definition: hal_iobus.h:82
OSTime IOTime
Definition: hal_iodevice.h:270
Definition: hal_iobus.h:26