![]() |
AvrIO
1.4.5
Bibliothèque C modulaire pour ATMEL AVR
|
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.
![]() |
É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... | |
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.
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().
PacketType | Type de paquet reçu |
DeviceId | Identifiant du capteur à l'origine des informations. |
buf | Pointeur sur le buffer où sont les données reçues du hub |
UserDataCount | Nombre d'octets stockés dans le buffer |
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.
pnCode | PN Code |
nChannel | Canal initial. Ce paramètre définit le sous-ensemble de canaux utilisés (cf le DVK Technical Reference Manual). |
pMid | MID du hub qui sera mémorisé en RAM (celui gravé dans la puce RF n'est pas modifiable). |
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é".
DeviceId | Identifiant du capteur |
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.
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.
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:
DeviceId | Identifiant du capteur |
mid | Pointeur où stocker le MID résultat (0 = pas de MID renvoyé) |
Teste s'il est possible de mémoriser des données pour un capteur.
Aide à l'utilisation de rfSetBackchannelData()
DeviceId | Identifiant du capteur |
void rfRegisterCBSensorDataReceived | ( | CBSENSORPACKETRECEIVED | cbSensor | ) |
Enregistre la fonction de réception de paquets.
cbSensor | Nom de la fonction implémentée par l'utilisateur |
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.
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.
DeviceId | Identifiant du capteur à qui seront envoyées les données |
userData | Une valeur entre 0 et 31 à transmettre au capteur |
beaconTime | Cette 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 |
buf | Pointeur vers un buffer contenant les données à transmettre |
length | Nombre 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. |
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