AvrIO  1.4.5
Bibliothèque C modulaire pour ATMEL AVR
sensor_database.h
1 
21 #ifndef _AVRIO_WUSB_SENSOR_DATABASE_H_
22 #define _AVRIO_WUSB_SENSOR_DATABASE_H_
23 
24 #include <avrio/wusb/sensor.h>
25 #include "wusb-config.h"
26 
27 __BEGIN_C_DECLS
28 /* ========================================================================== */
39 /* constants ================================================================ */
43 typedef enum {
44 
45  /* Flags */
50  /* Status */
54 
58 #define WSDBASE_SENSOR_INIT_FLAGS (0)
59 
64 #define WSDBASE_SENSOR_FILE_SIZE(DbaseSize) (sizeof(uint16_t)+sizeof(xWSensorRecord)*(DbaseSize))
65 
70 #define WSDBASE_SENSOR_DBASE_SIZE(FileSize) ((FileSize-sizeof(uint16_t))/sizeof(xWSensorRecord))
71 
72 /* structures =============================================================== */
76 typedef struct xWSensorRecord {
77 
78  uint32_t ulMid;
79  uint8_t ucFlag;
80  uint8_t ucBackDataLength;
81  uint8_t pucBackData[WUSB_CONFIG_HUB_BACKDATA_SIZE];
83 
87 typedef struct xWSensorDataBase {
88 
89  uint16_t usSize;
90  uint16_t usNextFreeDeviceId;
92 
93 /* == <API> == public application interface =====class WusbSensorDataBase=== */
107 int iWSdBaseOpen (int iArg1, void * pvArg2);
108 
114 uint16_t usWSdBaseAddSensor (uint32_t ulMid);
115 
121 bool xWSdBaseDeleteSensor (uint16_t usDeviceId);
122 
126 void vWSdBaseClear (void);
127 
128 #if defined(__DOXYGEN__)
129 
132 inline uint16_t usWSdBaseSize (void);
133 
137 uint16_t usWSdBaseLength (void);
138 
142 inline void vWSdBaseSetLength (uint16_t usLength);
143 
147 uint8_t ucWSdBaseSensorFlag (uint16_t usDeviceId);
148 
152 inline void vWSdBaseSensorSetFlag (uint16_t usDeviceId, uint8_t ucFlag);
153 
157 uint8_t ucWSdBaseSensorBackDataLength (uint16_t usDeviceId);
158 
162 void vWSdBaseSensorSetBackDataLength (uint16_t usDeviceId, uint8_t ucBackDataLength);
163 
169 uint8_t ucWSdBaseSensorBackData (uint16_t usDeviceId, uint8_t * pucBackData);
170 
176 inline void vWSdBaseSensorSetBackData ( uint16_t usDeviceId,
177  const uint8_t * pucBackData,
178  uint8_t ucBackDataLength); );
179 
183 uint32_t ulWSdBaseSensorMid (uint16_t usDeviceId);
184 
188 inline void vWSdBaseSensorSetMid (uint16_t usDeviceId, uint32_t ulMid);
189 
198 int iWSdBaseInit (size_t xFileSize);
199 
211 int iWSdBaseRead (void * pvAddress, uint8_t * pucData, size_t xDataLength);
212 
224 int iWSdBaseWrite (void * pvAddress, const uint8_t * pucData, size_t xDataLength);
225 
229 void vWSdBaseFindNextFreeDeviceId (void);
230 
234 inline uint16_t usWSdBaseNextFreeDeviceId (void);
235 /* == <API-END> == public application interface ===class WusbSensorDataBase= */
241 #else /* __DOXYGEN__ defined */
242 /* internal public functions ================================================ */
243 int iWSdBaseRead (void * pvAddress, uint8_t * pucData, size_t xDataLength);
244 int iWSdBaseWrite (void * pvAddress, const uint8_t * pucData, size_t xDataLength);
245 int iWSdBaseInit (size_t xFileSize);
246 uint16_t usWSdBaseLength (void);
247 void vWSdBaseFindNextFreeDeviceId (void);
248 uint32_t ulWSdBaseSensorMid (uint16_t usDeviceId);
249 uint8_t ucWSdBaseSensorFlag (uint16_t usDeviceId);
250 uint8_t ucWSdBaseSensorBackDataLength (uint16_t usDeviceId);
251 uint8_t ucWSdBaseSensorBackData (uint16_t usDeviceId, uint8_t * pucBackData);
252 void vWSdBaseSensorSetField ( uint16_t usDeviceId, uint8_t ucFieldOffset,
253  const void * pvValue, uint8_t ucSizeOfValue);
254 /* public variables ========================================================= */
255 extern xWSensorDataBase dSensorDbase;
256 
257 /* inline public functions ================================================== */
258 __STATIC_ALWAYS_INLINE (uint16_t
259 usWSdBaseSize (void)) {
260 
261  return dSensorDbase.usSize;
262 }
263 
264 __STATIC_ALWAYS_INLINE (uint16_t
266 
267  return dSensorDbase.usNextFreeDeviceId;
268 }
269 
270 __STATIC_ALWAYS_INLINE (void
271 vWSdBaseSetLength (uint16_t usLength)) {
272 
273  iWSdBaseWrite (0, (const uint8_t *)&usLength, sizeof(uint16_t));
274 }
275 
276 __STATIC_ALWAYS_INLINE (void
277 vWSdBaseSensorSetMid (uint16_t usDeviceId, uint32_t ulMid)) {
278 
279  vWSdBaseSensorSetField (usDeviceId,
281  &ulMid, sizeof(uint32_t));
282 }
283 
284 __STATIC_ALWAYS_INLINE (void
285 vWSdBaseSensorSetFlag (uint16_t usDeviceId, uint8_t ucFlag)) {
286 
287  vWSdBaseSensorSetField (usDeviceId,
289  &ucFlag, sizeof(uint8_t));
290 }
291 
292 __STATIC_ALWAYS_INLINE (void
293 vWSdBaseSensorSetBackDataLength (uint16_t usDeviceId, uint8_t ucBackDataLength)) {
294 
295  vWSdBaseSensorSetField (usDeviceId,
296  STRUCT_FIELD_OFFSET(xWSensorRecord, ucBackDataLength),
297  &ucBackDataLength, sizeof(uint8_t));
298 }
299 
300 
301 __STATIC_ALWAYS_INLINE (void
302 vWSdBaseSensorSetBackData (uint16_t usDeviceId, const uint8_t * pucBackData, uint8_t ucBackDataLength)) {
303 
304  vWSdBaseSensorSetField (usDeviceId,
305  STRUCT_FIELD_OFFSET(xWSensorRecord, pucBackData),
306  pucBackData, ucBackDataLength);
307  vWSdBaseSensorSetBackDataLength (usDeviceId, ucBackDataLength);
308 }
309 
310 #endif /* __DOXYGEN__ not defined */
311 /* ========================================================================== */
312 __END_C_DECLS
313 #endif /* _AVRIO_WUSB_SENSOR_DATABASE_H_ */
uint16_t usWSdBaseAddSensor(uint32_t ulMid)
Ajout d&#39;un nouveau capteur dans la base.
uint8_t ucWSdBaseSensorBackDataLength(uint16_t usDeviceId)
Lecture du nombre d&#39;octets à transmettre à un capteur enregistré
uint32_t ulWSdBaseSensorMid(uint16_t usDeviceId)
Lecture du MID d&#39;un capteur enregistré
int iWSdBaseOpen(int iArg1, void *pvArg2)
Cette fonction doit être implémentée par l&#39;utilisateur et fait partie de l&#39;interface logicielle entre...
uint8_t ucWSdBaseSensorBackData(uint16_t usDeviceId, uint8_t *pucBackData)
Lecture des octets à transmettre à un capteur enregistré
bool xWSdBaseDeleteSensor(uint16_t usDeviceId)
Retire un capteur de la base.
uint16_t usWSdBaseSize(void)
Renvoie la capacité de la base en nombre de capteurs.
uint8_t ucBackDataLength
void vWSdBaseFindNextFreeDeviceId(void)
Met à jour le prochain DeviceID libre.
void vWSdBaseSensorSetFlag(uint16_t usDeviceId, uint8_t ucFlag)
Modification des bits de flag et d&#39;état d&#39;un capteur enregistré
void vWSdBaseSetLength(uint16_t usLength)
Modifie le nombre de capteurs actuellement dans la base.
eWSensorRecordFlags
Indice des bits de flag et d&#39;état d&#39;un capteur.
uint8_t pucBackData[WUSB_CONFIG_HUB_BACKDATA_SIZE]
Enregistrement d&#39;un capteur.
int iWSdBaseWrite(void *pvAddress, const uint8_t *pucData, size_t xDataLength)
Cette fonction doit être implémentée par l&#39;utilisateur et fait partie de l&#39;interface logicielle entre...
uint16_t usNextFreeDeviceId
void vWSdBaseSensorSetBackDataLength(uint16_t usDeviceId, uint8_t ucBackDataLength)
Modification du nombre d&#39;octets à transmettre à un capteur enregistré
void vWSdBaseClear(void)
Efface la base.
uint16_t usWSdBaseNextFreeDeviceId(void)
Renvoie le prochain Device ID libre dans la base ou 0xFFFF si la base est pleine. ...
int iWSdBaseInit(size_t xFileSize)
Initialise la base de données.
void vWSdBaseSensorSetBackData(uint16_t usDeviceId, const uint8_t *pucBackData, uint8_t ucBackDataLength)
Ecriture des octets à transmettre à un capteur enregistré
struct xWSensorDataBase xWSensorDataBase
Base de données de capteurs.
uint8_t ucWSdBaseSensorFlag(uint16_t usDeviceId)
Lecture des bits de flag et d&#39;état d&#39;un capteur enregistré
uint16_t usWSdBaseLength(void)
Renvoie le nombre de capteurs actuellement dans la base.
struct xWSensorRecord xWSensorRecord
Enregistrement d&#39;un capteur.
Base de données de capteurs.
int iWSdBaseRead(void *pvAddress, uint8_t *pucData, size_t xDataLength)
Cette fonction doit être implémentée par l&#39;utilisateur et fait partie de l&#39;interface logicielle entre...
void vWSdBaseSensorSetMid(uint16_t usDeviceId, uint32_t ulMid)
Modification du MID d&#39;un capteur enregistré
#define STRUCT_FIELD_OFFSET(s, f)
Renvoie l&#39;offset d&#39;un champ dans une structure.
Definition: defs.h:423