AvrIO  1.4.5
Bibliothèque C modulaire pour ATMEL AVR
avrio/wusb/hub.h
1 
21 #ifndef _AVRIO_WUSB_HUB_H_
22 #define _AVRIO_WUSB_HUB_H_
23 
24 #include <avrio/mutex.h>
25 #include <avrio/task.h>
26 #include <avrio/wusb/net/network.h>
27 #include <avrio/wusb/hub/sensor_database.h>
28 
29 __BEGIN_C_DECLS
30 /* ========================================================================== */
40 /* macros =================================================================== */
41 /* constants ================================================================ */
42 #define WHUB_MAJOR (0x01)
43 #define WHUB_MINOR (0x00)
44 #define WHUB_BUILD (0x00)
45 
50 typedef enum {
51 
54  /* Mode */
60  /* Sensor Status */
64  /* Hub Status */
65  WHUB_BIND = 6,
68 } eWHubStatus;
69 
74 typedef enum {
75 
76  WHUB_RESPONSE = 0x80,
77  WHUB_RSP_HUB_INFO = 0x81,
78  WHUB_RSP_BIND = 0x82,
79  WHUB_RSP_BIND_INFO = 0x83,
80  WHUB_RSP_DELETE_NODE = 0x84,
81  WHUB_RSP_SEND_MSG = 0x85,
82  WHUB_RSP_INCOMING_MSG = 0x86,
83  WHUB_RSP_ENUM_DEVICES = 0x87,
84  WHUB_RSP_NETWORK_CONFIG = 0x88,
85  WHUB_RSP_NETWORK_STATUS = 0x89,
86  WHUB_RSP_RESET = 0x8A,
87  WHUB_RSP_CHANGE_CHANNEL = 0x8B,
88  WHUB_RSP_UNKNOWN_CMD = 0xFF
89 } eWHubMsgId;
90 
95 typedef enum {
96 
97  WHUB_STA_SUCCESS = 0x00,
98  WHUB_STA_UNKNOWN_ID = 0x01,
99  WHUB_STA_BUFFER_OVERFLOW = 0x02,
100  WHUB_STA_PRIOR_PAYLOAD_LOST = 0x03,
101  WHUB_STA_PN_CODE_INDEX_INVALID = 0x04,
102  WHUB_STA_CHANNEL_INVALID = 0x05,
103  WHUB_STA_MSG_QUEUED = 0x06,
104 
105  WHUB_STA_SEARCH_CHANNEL_FAILURE = 0x08
107 
108 /* structures =============================================================== */
113 typedef struct xWHubMessage {
114 
115  uint8_t ucId;
116  uint8_t ucStatus;
117  uint16_t usDeviceId;
118  uint8_t ucDataLength;
119  uint8_t * pucData;
120 } xWHubMessage;
121 
126 typedef struct xWHubConfig {
127 
128  uint8_t ucStatus;
129  uint8_t ucDataChannel;
130  uint8_t ucBindChannel;
131  uint8_t ucDataPnCode;
132 } xWHubConfig;
133 
138 typedef struct xWHubService {
139 
140  xTaskHandle xTask;
142  uint8_t ucRssiCounter;
143 } xWHubService;
144 
149 typedef struct xWusbHub {
150 
151  uint8_t ucFlag;
152  uint8_t ucNoiseThreshold;
155  xWHubMessage xMsg;
156 } xWusbHub;
157 
158 /* == <API> == public application interface ========class xWusbHub=========== */
170 int iWHubInit ( eWDevDataRate eDataRate,
171  int iSensorDbaseFileArg1,
172  void * pvSensorDbaseFileArg2);
187 const xWHubMessage * pxWHubLoop (void);
188 
189 #if defined(__DOXYGEN__)
190 
193 inline uint8_t ucWHubStatus (void);
194 
198 inline bool xWHubStatusFlag (eWHubStatus eFlag);
199 
203 void vWHubSetStatusFlag (eWHubStatus eFlag, bool xValue);
204 
209 
213 inline uint8_t ucWHubDataChannel (void);
214 
222 bool xWHubSetDataChannel (uint8_t ucIndex);
223 
227 inline uint8_t ucWHubBindChannel (void);
228 
232 inline uint8_t ucWHubDataPnCode (void);
233 
241 bool xWHubSetDataPnCode (uint8_t ucIndex);
242 
246 inline const uint8_t * pucWHubMid (void);
247 
258 void vWHubSetMid (const uint8_t * pucMid);
259 
260 /*
261  * @brief Passe de canal en canal dans le subset à la recherche le premier canal disponible
262  */
263 void vWHubFindAnAvailableChannel (void);
264 
268 inline uint16_t usWHubNumberOfNodes (void);
269 
273 inline uint16_t usWHubMaxNumberOfNodes (void);
274 
278 inline uint16_t usWHubDeleteAllNodes (void);
279 
285 inline bool WHubNodeDelete (uint16_t ucDeviceId);
286 
294 bool xWHubNodeFlag (uint16_t ucDeviceId, uint8_t * pucNodeFlag);
295 
299 inline void vWHubNodeSetFlag (uint16_t ucDeviceId, uint8_t ucNodeFlag);
300 
305 inline uint32_t ulWHubNodeMid (uint16_t ucDeviceId);
306 
311 inline uint8_t ucWHubNodeDataLength (uint16_t ucDeviceId);
312 
317 inline void vWHubNodeSetData (uint16_t ucDeviceId, uint8_t ucDataLength, const uint8_t * pucData);
318 
319 /* == <API-END> == public application interface ====class xWusbHub=========== */
325 #else /* __DOXYGEN__ defined */
326 /* internal public functions ================================================ */
327 bool xWHubNodeFlag (uint16_t ucDeviceId, uint8_t * pucNodeFlag);
328 bool xWHubSetDataPnCode (uint8_t ucIndex);
329 bool xWHubSetDataChannel (uint8_t ucIndex);
330 void vWHubSetMid (const uint8_t * pucMid);
331 void vWHubFindAnAvailableChannel (void);
332 void vWHubSetStatusFlag (eWHubStatus eFlag, bool xValue);
334 
335 /* public variables ========================================================= */
336 extern xWusbHub dHub;
337 
338 /* inline public functions ================================================== */
339 
340 /*------------ Getters Hub Config -------------*/
341 __STATIC_ALWAYS_INLINE (uint8_t
342 ucWHubStatus (void)) {
343 
344  return dHub.xConfig.ucStatus;
345 }
346 
347 __STATIC_ALWAYS_INLINE (bool
348 xWHubStatusFlag (eWHubStatus eFlag)) {
349 
350  return xWPktBit (dHub.xConfig.ucStatus, eFlag);
351 }
352 
353 __STATIC_ALWAYS_INLINE (const uint8_t *
354 pucWHubMid (void)) {
355 
356  return pucWDevMid();
357 }
358 
359 __STATIC_ALWAYS_INLINE (uint8_t
360 ucWHubDataChannel (void)) {
361 
362  return dHub.xConfig.ucDataChannel;
363 }
364 
365 __STATIC_ALWAYS_INLINE (uint8_t
366 ucWHubBindChannel (void)) {
367 
368  return dHub.xConfig.ucBindChannel;
369 }
370 
371 __STATIC_ALWAYS_INLINE (uint8_t
372 ucWHubDataPnCode (void)) {
373 
374  return dHub.xConfig.ucDataPnCode;
375 }
376 
377 /*------------ Getters Node -------------*/
378 __STATIC_ALWAYS_INLINE (uint16_t
379 usWHubNumberOfNodes (void)) {
380 
381  return usWSdBaseLength();
382 }
383 
384 __STATIC_ALWAYS_INLINE (uint16_t
385 usWHubMaxNumberOfNodes (void)) {
386 
387  return usWSdBaseSize();
388 }
389 
390 __STATIC_ALWAYS_INLINE (size_t
391 ucWHubNodeDataLength (uint16_t ucDeviceId)) {
392 
393  return ucWSdBaseSensorBackDataLength (ucDeviceId);
394 }
395 
396 __STATIC_ALWAYS_INLINE (uint32_t
397 ulWHubNodeMid (uint16_t ucDeviceId)) {
398 
399  return ulWSdBaseSensorMid (ucDeviceId);
400 }
401 
402 /*------------ Setters Node -------------*/
403 __STATIC_ALWAYS_INLINE (void
404 usWHubDeleteAllNodes (void)) {
405 
406  vWSdBaseClear();
407 }
408 
409 __STATIC_ALWAYS_INLINE (bool
410 WHubNodeDelete (uint16_t ucDeviceId)) {
411 
412  return xWSdBaseDeleteSensor (ucDeviceId);
413 }
414 
415 __STATIC_ALWAYS_INLINE (void
416 vWHubNodeSetData (uint16_t ucDeviceId, uint8_t DataLength, const uint8_t * Data)) {
417 
418  vWSdBaseSensorSetBackData (ucDeviceId, Data, DataLength);
419 }
420 
421 __STATIC_ALWAYS_INLINE (void
422 vWHubNodeSetFlag (uint16_t ucDeviceId, uint8_t NodeFlag)) {
423 
424  vWSdBaseSensorSetFlag (ucDeviceId, NodeFlag);
425 }
426 
427 #endif /* __DOXYGEN__ not defined */
428 /* ========================================================================== */
429 __END_C_DECLS
430 #endif /* _AVRIO_WUSB_HUB_H_ */
uint8_t ucDataChannel
bool xWPktBit(uint8_t Byte, uint8_t Bit)
Renvoie l&#39;état du bit de rang Bit de l&#39;octet Byte.
uint16_t usDeviceId
int8_t xTaskHandle
xTaskHandle Identifiant d&#39;une tâche
Definition: task.h:58
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é
uint8_t ucDataLength
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.
const uint8_t * pucWHubMid(void)
Lecture des 4 octets de l&#39;identifiant de fabrication.
uint8_t ucWHubBindChannel(void)
Renvoie le canal actuellement utilisé pour l&#39;intégration automatique des capteurs au réseau...
uint8_t ucWHubNodeDataLength(uint16_t ucDeviceId)
Renvoie le nombre d&#39;octets enregistrés à transmettre à un capteur Aucune vérification n&#39;est effectué ...
void vWSdBaseSensorSetFlag(uint16_t usDeviceId, uint8_t ucFlag)
Modification des bits de flag et d&#39;état d&#39;un capteur enregistré
void vWHubNodeSetFlag(uint16_t ucDeviceId, uint8_t ucNodeFlag)
Modification des bits de flag et d&#39;état d&#39;un capteur enregistré
bool xWHubStatusFlag(eWHubStatus eFlag)
Renvoie l&#39;état d&#39;un bit d&#39;état ou de mode du hub.
bool WHubNodeDelete(uint16_t ucDeviceId)
Retire un capteur du réseau.
volatile uint8_t xMutex
Type mutex.
Definition: mutex.h:59
void vWHubNodeSetData(uint16_t ucDeviceId, uint8_t ucDataLength, const uint8_t *pucData)
Enregistre les octets à transmettre à un capteur Aucune vérification n&#39;est effectué sur ucDeviceId...
eWHubStatus
Indice des bits de mode et d&#39;état utilisés par un hub.
xWHubConfig xConfig
Classe WirelessUSB™ Hub.
uint8_t ucWHubStatus(void)
Renvoie tous bits d&#39;état ou de mode du hub.
uint8_t * pucData
uint8_t ucWHubDataPnCode(void)
Renvoie le PnCode actuellement utilisé pour la transmission de données.
uint8_t ucStatus
void vWSdBaseClear(void)
Efface la base.
const uint8_t * pucWDevMid(void)
Lecture des 4 octets de l&#39;identifiant de fabrication (REG_MID)
void vWSdBaseSensorSetBackData(uint16_t usDeviceId, const uint8_t *pucBackData, uint8_t ucBackDataLength)
Ecriture des octets à transmettre à un capteur enregistré
uint8_t ucFlag
eWDevDataRate
Différentes vitesse de transmission.
Definition: device.h:53
uint8_t ucWHubDataChannel(void)
Renvoie le canal actuellement utilisé pour la transmission de données.
Classe Message entre hub et hôte.
xWHubService xService
bool xWHubSetDataChannel(uint8_t ucIndex)
Modifie le canal actuellement utilisé pour la transmission de données La modification n&#39;est effectuée...
eWHubMsgStatus
Comptes rendus échangées entre hub et hôte.
uint16_t usWHubDeleteAllNodes(void)
Retire tous les capteurs du réseau.
eWHubMsgId
Identifiants des messages échangées du hub vers l&#39;hôte.
bool xWHubNodeFlag(uint16_t ucDeviceId, uint8_t *pucNodeFlag)
Lecture des bits de flag et d&#39;état d&#39;un capteur avec vérification de sa validité Si le capteur corres...
uint8_t ucDataPnCode
const xWHubMessage * pxWHubLoop(void)
Fonction qui gère l&#39;intégralité du réseau WirelessUSB™ Cette fonction doit être appellée le plus sou...
uint8_t ucStatus
uint16_t usWSdBaseLength(void)
Renvoie le nombre de capteurs actuellement dans la base.
void vWHubSetMid(const uint8_t *pucMid)
Modifie les 4 octets de l&#39;identifiant de fabrication La modificiation se fait en RAM. Elle est perdue lors d&#39;un RESET. Attention, normalement le MID est fourni par le fabricant du module et n&#39;est pas accessible en écriture. La modification du MID risque de provoquer des conflits sur le réseau (si un autre node a le même MID). Le Crc Seed et le Checksum Seed du réseau sont mis à jour par cette fonction.
int iWHubInit(eWDevDataRate eDataRate, int iSensorDbaseFileArg1, void *pvSensorDbaseFileArg2)
Initialisation du Hub Cette fonction initialise tous les élèments nécessaires au fonctionnement du hu...
void vWHubSetStatusFlag(eWHubStatus eFlag, bool xValue)
Active ou désactive un bit d&#39;état du hub.
uint16_t usWHubNumberOfNodes(void)
Renvoie le nombre de capteurs actuellement enregistrés sur le réseau.
uint8_t ucBindChannel
void vWHubToggleStatusFlag(eWHubStatus eFlag)
Bascule l&#39;état d&#39;un bit d&#39;état du hub.
uint16_t usWHubMaxNumberOfNodes(void)
Renvoie le nombre de capteurs maximal.
Eléments pour la gestion des services du hub.
bool xWHubSetDataPnCode(uint8_t ucIndex)
Modifie le PnCode actuellement utilisé pour la transmission de données La modification n&#39;est effectué...
uint32_t ulWHubNodeMid(uint16_t ucDeviceId)
Renvoie le Mid d&#39;un capteur enregistré Aucune vérification n&#39;est effectué sur ucDeviceId.
Configuration d&#39;un hub.