AvrIO  1.4.5
Bibliothèque C modulaire pour ATMEL AVR
Hub WirelessUSB iDwaRF

Description détaillée

Implémente l'interface logicielle permettant de gérer un hub WirelessUSB. Cette interface se résume essentiellement à 2 fonctions permettant de recevoir les informations transmises par les capteurs et de leur transmettre en réponse des informations (de façon asynchrone donc...) :

Une fois l'initialisation effectuée à l'aide de rfInit(), l'utilisateur doit enregistrer sa fonction de gestion des paquets reçus à l'aide de rfRegisterCBSensorDataReceived() puis appeler rfProcessAll() à chaque itération de la boucle infinie du programme principal.

Graphe de collaboration de Hub WirelessUSB iDwaRF:

Énumérations

enum  COMMAND_STATUS {
  CMD_STATUS_SUCCESS, CMD_STATUS_UNKNOWN_CMD, CMD_STATUS_UNKNOWN_ID, CMD_STATUS_BUFFER_OVERFLOW,
  CMD_STATUS_PRIOR_PAYLOAD_LOST, CMD_STATUS_PN_CODE_INDEX_INVALID, CMD_STATUS_CHANNEL_INVALID, CMD_STATUS_MSG_QUEUED,
  CMD_STATUS_INVALID_CHANNEL
}
 Code renvoyés par les commandes envoyées au hub.
 
typedef void(* CBSENSORPACKETRECEIVED) (PACKET_TYPES PacketType, U16 DeviceId, U8 UserDataCount, volatile U8 *buf)
 Type de fonction de gestion de réception de paquets. Plus de détails...
 
void cbPacketReceived (PACKET_TYPES PacketType, U16 DeviceId, U8 UserDataCount, volatile U8 *buf)
 Exemple de fonction utilisateur de gestion de réception de paquets. Plus de détails...
 
void rfRegisterCBSensorDataReceived (CBSENSORPACKETRECEIVED cbSensor)
 Enregistre la fonction de réception de paquets. Plus de détails...
 
void rfReset (void)
 Effectue une réinitialisation logicielle du firmware et du processeur. Plus de détails...
 
PROTOCOL_STATUS rfGetProtocolStatus (void)
 Renvoie la variable d'état interne du firmware du hub. Plus de détails...
 
void rfStartBind (void)
 Valide le mode bind. Plus de détails...
 
void rfStopBind (void)
 Invalide le mode bind.
 
U16 rfGetMaximumDeviceId (void)
 Renvoie l'identifiant le plus élevé pouvant être géré par le hub. Plus de détails...
 
U8 rfGetSensorMID (U16 DeviceId, MID *mid)
 Test de la validité et lecture du MID d'un capteur. Plus de détails...
 
U8 rfDeleteSensor (U16 DeviceId)
 Suppression d'un capteur. Plus de détails...
 
U8 rfSetBackchannelData (U16 DeviceId, U8 userData, U16 beaconTime, U8 *buf, U8 length)
 Mémorise les données à trasmettre à un capteur par la canal de réponse. Plus de détails...
 
U8 rfIsBackchannelFree (U16 DeviceId)
 Teste s'il est possible de mémoriser des données pour un capteur. Plus de détails...
 
U8 rfConfigureNetwork (U8 pnCode, U8 nChannel, U32 *pMid)
 Reconfiguration des paramètres du réseau. Plus de détails...
 

Documentation des définitions de type

typedef void(* CBSENSORPACKETRECEIVED) (PACKET_TYPES PacketType, U16 DeviceId, U8 UserDataCount, volatile U8 *buf)

Type de fonction de gestion de réception de paquets.

Permet de simplifier la déclaration de la fonction d'enregistrement.

Définition à la ligne 72 du fichier idwarf/hub.h.

Documentation des fonctions

void cbPacketReceived ( PACKET_TYPES  PacketType,
U16  DeviceId,
U8  UserDataCount,
volatile U8 buf 
)

Exemple de fonction utilisateur de gestion de réception de paquets.

Appelée lorsqu'un paquet a été reçu venant d'un capteur. Il est possible d'accéder directement aux données actuelles du capteur à cet endroit. Toutefois, tout traitement prolongé doit être effectué dans le programme principal, par exemple en copiant les données fournies par cette fonction dans un buffer partagé ( Pile d'octets FIFO ). Cette fonction doit être enregistrée avec rfRegisterCBSensorDataReceived().

Paramètres
PacketTypeType de paquet reçu
DeviceIdIdentifiant du capteur à l'origine des informations.
bufPointeur sur le buffer où sont les données reçues du hub
UserDataCountNombre d'octets stockés dans le buffer
U8 rfConfigureNetwork ( U8  pnCode,
U8  nChannel,
U32 pMid 
)

Reconfiguration des paramètres du réseau.

Définit le PN Code, le canal et son sous-ensemble et permet de changer le MID du hub (d'où sont tirés le checksum seed et le CRC seed). Tous les capteurs déja liés sont perdus. Avec cette fonction, plus d'un hub peut être utilisé dans le même espace. Chaque hub est configuré pour utiliser un PN Code différent donc ils ne gênent pas du tout.

Paramètres
pnCodePN Code
nChannelCanal initial. Ce paramètre définit le sous-ensemble de canaux utilisés (cf le DVK Technical Reference Manual).
pMidMID du hub qui sera mémorisé en RAM (celui gravé dans la puce RF n'est pas modifiable).
Renvoie
CMD_STATUS_SUCCESS en cas de succès, un code COMMAND_STATUS en cas d'erreur
Exemples:
idwarf/terminal/hub/terminal_hub.c.
U8 rfDeleteSensor ( U16  DeviceId)

Suppression d'un capteur.

Si le hub ne doit plus traiter les messages d'un capteur spécifique ou si un capteur n'est plus disponible, un appel à cette fonction supprime le capteur ayant le DeviveId dans la mémoire du hub et définit son statut comme "non lié".

Paramètres
DeviceIdIdentifiant du capteur
Renvoie
CMD_STATUS_SUCCESS en cas de succès, CMD_STATUS_UNKNOWN_ID si l'identifiant est inconnu
Exemples:
idwarf/terminal/hub/terminal_hub.c.
U16 rfGetMaximumDeviceId ( void  )

Renvoie l'identifiant le plus élevé pouvant être géré par le hub.

Chaque capteur lié obtient une DeviceId et ses données sont stockées par le hub. Il existe plusieurs configurations possibles pour le stockage de ces informations et cette fonction retourne l'identifiant le plus élevé possible. Le hub ne pourra donc gérer au plus que rfGetMaximumDeviceId()+1 en même temps.

Renvoie
Capacité du hub en nombre de capteurs
Exemples:
idwarf/terminal/hub/terminal_hub.c.
PROTOCOL_STATUS rfGetProtocolStatus ( void  )

Renvoie la variable d'état interne du firmware du hub.

Pas vraiment nécessaire, mais peut être documenté et utilisé davantage dans l'avenir.

Exemples:
idwarf/terminal/hub/terminal_hub.c.
U8 rfGetSensorMID ( U16  DeviceId,
MID mid 
)

Test de la validité et lecture du MID d'un capteur.

Chaque capteur intégré au réseau est mémorisé par le firmware du hub. Chaque module RF a son propre identifiant unique, appelé MID. Cette valeur et le DeviceID correspondant sont mémorisé par le firmware.
Cette fonction peut être utilisée pour:

  • Tester pour chaque DeviceId s'il y a un capteur valide correspondant
  • Obtenir la valeur du MID chaque capteur MID valide
    Paramètres
    DeviceIdIdentifiant du capteur
    midPointeur où stocker le MID résultat (0 = pas de MID renvoyé)
    Renvoie
    1 si l'identifiant correspond à un capteur valide, 0 sinon.
Exemples:
idwarf/terminal/hub/terminal_hub.c.
U8 rfIsBackchannelFree ( U16  DeviceId)

Teste s'il est possible de mémoriser des données pour un capteur.

Aide à l'utilisation de rfSetBackchannelData()

Paramètres
DeviceIdIdentifiant du capteur
Renvoie
1 si il y a de la place pour stocker des données pour ce capteur, 0 sinon.
Exemples:
idwarf/terminal/hub/terminal_hub.c, et idwarf/tutorial/hub/tutorial_hub.c.
void rfRegisterCBSensorDataReceived ( CBSENSORPACKETRECEIVED  cbSensor)

Enregistre la fonction de réception de paquets.

Paramètres
cbSensorNom de la fonction implémentée par l'utilisateur
Exemples:
idwarf/terminal/hub/terminal_hub.c, et idwarf/tutorial/hub/tutorial_hub.c.
void rfReset ( void  )

Effectue une réinitialisation logicielle du firmware et du processeur.

Pas besoin de beaucoup, mais peut être pratique si vous voulez recommencer à zéro sans aucun capteur ou données stockées pour le traitement.

Exemples:
idwarf/terminal/hub/terminal_hub.c.
U8 rfSetBackchannelData ( U16  DeviceId,
U8  userData,
U16  beaconTime,
U8 buf,
U8  length 
)

Mémorise les données à trasmettre à un capteur par la canal de réponse.

Chaque fois que le capteur envoie des données au hub, le hub peut répondre avec des données qu'il envoie vers le capteur. Etant donné que le moment exact où le capteur va envoyer son paquet n'est inconnu, la réponse vers le capteur est stocké en mémoire par le hub. Cette fonction est utilisé pour stocker les données pour le capteur dans la mémoire du hub.
Au prochain échange avec le capteur, ces données lui seront transférées.

Paramètres
DeviceIdIdentifiant du capteur à qui seront envoyées les données
userDataUne valeur entre 0 et 31 à transmettre au capteur
beaconTimeCette valeur permet de paramétrer le temps d'endormissement du capteur (exprimée en tranches de temps de 125 ms). Si cette valeur vaut -1, le temps d'endormissement n'est pas transmis et cela permet d'utiliser deux octets supplémentaires pour le payload.le capteur
bufPointeur vers un buffer contenant les données à transmettre
lengthNombre d'octets dans le buffer. Si beaconTime est spécifié ce nombre doit être compris entre 0 et 8, si beaconTime vaut -1, ce nombre peut être compris entre 0 et 10.
Renvoie
CMD_STATUS_SUCCESS en cas de succès, CMD_STATUS_UNKNOWN_ID si l'identifiant est inconnu
Exemples:
idwarf/terminal/hub/terminal_hub.c, et idwarf/tutorial/hub/tutorial_hub.c.
void rfStartBind ( void  )

Valide le mode bind.

Le hub vérifie régulièrement PN0/CH0 à l'écoute de demande d'intégration de capteur. Si un capteur n'a pas la moindre idée des paramètres réseau (PN Code/Canal) à utiliser pour son intégration, il enverra des demandes d'intégration sur PN0/CH0 tant que nécessaire.
Si le hub est configuré pour fonctionner sur PN3 il ne pourra jamais "entendre" la demande du capteur car il n'écoute pas ce PN.
Il y a donc un mode où le hub écoute régulièrement PN0/CH0 quand il y a du temps disponible. Ce "bind" mode est activé et désactivé par les fonctions suivantes. Gardez à l'esprit, qu'un mode "bind" actif peut réduire le débit de données et constituer un risque potentiel pour la sécurité si vous ne voulez pas que d'autres capteurs soient intégrés au réseau

Exemples:
idwarf/terminal/hub/terminal_hub.c.