21 #ifndef _AVRIO_WUSB_NETWORK_H_ 22 #define _AVRIO_WUSB_NETWORK_H_ 24 #include <avrio/task.h> 25 #include <avrio/state.h> 26 #include <avrio/wusb/net/device/device.h> 27 #include <avrio/wusb/net/packet.h> 55 #define WNET_VERSION "1.0" 61 #define WNET_BIND_PNCODE 0 66 #define WNET_BIND_CHANNEL 0 71 #define WNET_INVALID_DEVICEID 0xFFFF 122 #if defined(__DOXYGEN__) 203 inline void vWNetTxPktSetAllFlags (uint8_t ucFlags);
474 # include "wusb-config.h" 478 #if WUSB_CONFIG_NETWORK_CHANNEL_CONFIG == 1 479 #define WNET_NUM_OF_SUBSETS 6 480 #define WNET_NUM_OF_CH_PER_SUBSET 13 481 #define WNET_NUM_OF_CH_USED 78 482 #elif WUSB_CONFIG_NETWORK_CHANNEL_CONFIG == 2 483 #define WNET_NUM_OF_SUBSETS 7 484 #define WNET_NUM_OF_CH_PER_SUBSET 11 485 #define WNET_NUM_OF_CH_USED 77 486 #elif WUSB_CONFIG_NETWORK_CHANNEL_CONFIG == 3 487 #define WNET_NUM_OF_SUBSETS 8 488 #define WNET_NUM_OF_CH_PER_SUBSET 9 489 #define WNET_NUM_OF_CH_USED 72 490 #elif WUSB_CONFIG_NETWORK_CHANNEL_CONFIG == 4 491 #define WNET_NUM_OF_SUBSETS 9 492 #define WNET_NUM_OF_CH_PER_SUBSET 8 493 #define WNET_NUM_OF_CH_USED 72 494 #elif WUSB_CONFIG_NETWORK_CHANNEL_CONFIG == 5 495 #define WNET_NUM_OF_SUBSETS 10 496 #define WNET_NUM_OF_CH_PER_SUBSET 7 497 #define WNET_NUM_OF_CH_USED 70 498 #elif WUSB_CONFIG_NETWORK_CHANNEL_CONFIG == 6 499 #define WNET_NUM_OF_SUBSETS 11 500 #define WNET_NUM_OF_CH_PER_SUBSET 7 501 #define WNET_NUM_OF_CH_USED 77 502 #elif WUSB_CONFIG_NETWORK_CHANNEL_CONFIG == 7 503 #define WNET_NUM_OF_SUBSETS 12 504 #define WNET_NUM_OF_CH_PER_SUBSET 6 505 #define WNET_NUM_OF_CH_USED 72 506 #elif WUSB_CONFIG_NETWORK_CHANNEL_CONFIG == 8 507 #define WNET_NUM_OF_SUBSETS 13 508 #define WNET_NUM_OF_CH_PER_SUBSET 6 509 #define WNET_NUM_OF_CH_USED 78 511 #error Unsupported CHANNEL_CONFIG value 515 typedef struct WusbNetwork {
520 uint16_t usCorruptError;
543 extern WusbNetwork dNet;
547 __STATIC_ALWAYS_INLINE (
void 554 __STATIC_ALWAYS_INLINE (uint8_t
561 __STATIC_ALWAYS_INLINE (uint8_t
567 __STATIC_ALWAYS_INLINE (uint8_t
575 __STATIC_ALWAYS_INLINE (
void 585 return &dNet.xConfig;
589 __STATIC_ALWAYS_INLINE (uint8_t
592 return dNet.xConfig.ucChannel;
596 __STATIC_ALWAYS_INLINE (uint8_t
599 return dNet.xConfig.ucChecksumSeed;
603 __STATIC_ALWAYS_INLINE (uint8_t
606 return dNet.xConfig.ucCrcSeed;
610 __STATIC_ALWAYS_INLINE (uint8_t
613 return dNet.xConfig.ucPnCode;
617 __STATIC_ALWAYS_INLINE (
bool 620 return xWPktBit (dNet.xConfig.ucStatus, eFlag);
624 __STATIC_ALWAYS_INLINE (
bool 631 __STATIC_ALWAYS_INLINE (uint8_t
634 return WNET_NUM_OF_CH_USED;
638 __STATIC_ALWAYS_INLINE (uint8_t
641 return WNET_NUM_OF_SUBSETS;
656 return &dNet.pxTxPacket;
664 return &dNet.pxRxPacket;
668 __STATIC_ALWAYS_INLINE (uint8_t
675 __STATIC_ALWAYS_INLINE (uint8_t
682 __STATIC_ALWAYS_INLINE (
bool 689 __STATIC_ALWAYS_INLINE (uint8_t
696 __STATIC_ALWAYS_INLINE (uint16_t
703 __STATIC_ALWAYS_INLINE (uint32_t
710 __STATIC_ALWAYS_INLINE (uint8_t *
718 __STATIC_ALWAYS_INLINE (uint8_t *
725 __STATIC_ALWAYS_INLINE (uint8_t
733 __STATIC_ALWAYS_INLINE (
void 736 dNet.xConfig.ucChecksumSeed = ucValue;
740 __STATIC_ALWAYS_INLINE (
void 743 dNet.xConfig.ucCrcSeed = ucValue;
747 __STATIC_ALWAYS_INLINE (
void 750 vWPktSetBit (&dNet.xConfig.ucStatus, eFlag, ucValue);
754 __STATIC_ALWAYS_INLINE (
void 761 __STATIC_ALWAYS_INLINE (
void 764 dNet.xConfig.ucStatus ^= 1<<eFlag;
769 __STATIC_ALWAYS_INLINE (
void 776 __STATIC_ALWAYS_INLINE (
void 783 __STATIC_ALWAYS_INLINE (
void 790 __STATIC_ALWAYS_INLINE (
void 797 __STATIC_ALWAYS_INLINE (
void 804 __STATIC_ALWAYS_INLINE (
void 811 __STATIC_ALWAYS_INLINE (
void 812 vWNetTxPktSetAllFlags (uint8_t ucFlags)) {
818 __STATIC_ALWAYS_INLINE (
void 825 __STATIC_ALWAYS_INLINE (
void 832 __STATIC_ALWAYS_INLINE (
void 839 __STATIC_ALWAYS_INLINE (
void 849 typedef struct xWNetTestResult {
853 uint16_t usCorrupted;
858 int iWNetTestSetup (
void);
875 eWNetErrorCode eWNetTestSensorPing (uint16_t usCount, uint16_t usInterval,
876 xWNetTestResult * pxResult);
881 eWNetErrorCode eWNetTestSensorBind (uint16_t usMaxRetries, uint16_t usInterval,
882 xWNetTestResult * pxResult);
884 #define iWNetTestSetup() (0) 885 #define eWNetTestHub(t) (WNET_SUCCESS) 886 #define eWNetTestSensorPing(c,i,r) (WNET_SUCCESS) 887 #define eWNetTestSensorBind(m,i,r) (WNET_SUCCESS) 890 #ifdef WNET_DEBUG_ONUART 891 void vWNetDbgDumpConfig(
void);
892 void vWNetDbgDumpRxPacket(
void);
893 void vWNetDbgDumpTxPacket(
void);
894 void vWNetDbgNoResp(
void);
895 void vWNetDbgSend(
void);
897 #define vWNetDbgDumpConfig() 898 #define vWNetDbgDumpRxPacket() 899 #define vWNetDbgDumpTxPacket() 900 #define vWNetDbgNoResp() 901 #define vWNetDbgSend() void vWPktSetFlag(xWusbPacket *pxPkt, uint8_t ucIndex, bool xValue)
Modifie l'état d'un bit de flag de l'entête d'un paquet.
uint8_t ucWNetAckTimeout(void)
Renvoie le délai d'attente pour la réception d'un paquet ACK La valeur renvoyée tient compte des para...
bool xWNetStatus(eWNetStatusCode eFlag)
Etat logique d'un bit d'état ou de contrôle de la configuration du réseau.
bool xWNetSingleByteDeviceId(void)
Renvoie true si les Device ID sont codés sur un octet.
void vWPktAddBytes_P(xWusbPacket *pxPkt, const uint8_t *pucBytes, uint8_t ucLength)
Ajoute une suite d'octets au paquet.
void vWNetTxPktSetType(uint8_t ucPacketType)
Modifie le type du paquet TX.
void vWPktSetHeader(xWusbPacket *pxPkt, uint8_t ucValue)
Modifie l'en-tête préexistant du paquet.
uint8_t ucWNetCrcSeed(void)
CRC seed courant.
bool xWPktBit(uint8_t Byte, uint8_t Bit)
Renvoie l'état du bit de rang Bit de l'octet Byte.
void vWNetTxPktNew(uint8_t ucPacketType)
Initialise une nouveau paquet de type ucPacketType.
bool xWNetRxPktFlag(uint8_t ucIndex)
Etat du flag d'index ucIndex de l'entête du paquet reçu.
void vWNetTxPktAddByte(uint8_t ucByte)
Ajoute un octet au paquet TX.
int8_t xTaskHandle
xTaskHandle Identifiant d'une tâche
void vWNetSaveConfigToEEPROM(void)
Sauvegarde la configuration courante en EEPROM.
Configuration du réseau Nto1.
void vWNetTxPktAddDeviceId(uint16_t usDeviceId)
Ajoute le Device ID au paquet TX L'ajout se fait en respectant le flag WNET_SINGLEBYTE de mode du rés...
uint8_t * pucWNetRxPktBytes(uint8_t ucOffset)
Pointeur sur l'octet d'offset ucOffset du paquet reçu.
xWusbPacket * pxWNetTxPacket(void)
Renvoie un pointeur sur le paquet de transmission.
uint8_t xStateGet(xState *pxState)
Lit la valeur d'une machine d'état de façon atomique.
Paquet réseau WirelessUSB
void vWNetTxPktAddWord(uint16_t usWord)
Ajoute un mot de 16 bits au paquet TX.
uint8_t ucWNetBindTimeout(void)
Renvoie le délai d'attente pour la réception d'un paquet BIND La valeur renvoyée tient compte des par...
const xWNetConfig * pxWNetCurrentConfig(void)
Configuration courante.
void vWNetToggleStatus(eWNetStatusCode eFlag)
Bascule l'état d'un bit d'état ou de contrôle de la configuration du réseau.
eWNetStatusCode
Indice des bits de mode et d'état utilisés par le réseau.
uint16_t usWNetRxPktDeviceId(void)
Device ID du paquet reçu Cette fonction s'adapte en fonction du bit WPKT_SINGLE reçu. Si ce bit est à 1 dans le paquet reçu, le Device ID est lu comme un octet et converti en uint16_t. Cette fonction ne doit être utilisée que si le paquet reçu est de type DATA, ACK ou BIND_RESPONSE.
void vWNetInit(eWDevDataRate eDataRate)
Initialise le réseau L'initialisation du réseau se fait avec les valeurs sauvegardées en EEPROM...
eWNetErrorCode
Codes d'erreurs et d'état du réseau Nto1 0 signifie "Aucune erreur", une valeur négative indique une ...
uint8_t ucWNetPnCode(void)
Index du Pn Code courant.
uint8_t ucWNetRand(void)
Renvoie un nombre pseudo aléatoire compris entre 1 et 31 Le générateur pseudo aléatoire est initilial...
void vWNetSetConfig(const xWNetConfig *pxConfig)
Modifie la configuration à partir d'une structure xWNetConfig.
void vWNetTxPktSetHeader(uint8_t ucHeader)
Modifie l'entête du paquet TX.
uint8_t ucWNetRxPktHeader(void)
Entête du paquet reçu.
void vWNetTxPktSetFlag(uint8_t ucIndex, bool ucValue)
Modifie l'état d'un bit de flag d'index ucIndex dans l'entête du paquet TX.
void vWPktAddWord(xWusbPacket *pxPkt, uint16_t usValue)
Ajoute un mot de 16 bits (little endian) au paquet.
uint8_t ucWNetChannel(void)
Index du canal courant.
uint8_t xWPktDataPayloadLength(xWusbPacket *pxPkt)
Renvoie le nombre d'octets du payload.
void vWPktSetType(xWusbPacket *pxPkt, uint8_t ucValue)
Modifie le type de paquet.
xWusbPacket * pxWNetRxPacket(void)
Pointeur sur le paquet de réception.
uint8_t ucWNetNumberOfSubsets(void)
Nombre de sous-ensembles de canaux.
uint8_t ucWNetChecksumSeed(void)
Checksum seed courant.
uint32_t ulWNetRxPktDword(uint8_t ucOffset)
Mot de 32 bits d'offset ucOffset du paquet reçu.
volatile uint8_t xState
Le type xState est une variable atomique qui peut évoluer entre 0 et 255.
void vWNetSetSingleByteDeviceId(bool xEnable)
Active le codage des Device ID sur un octet.
void vWPktSetBit(uint8_t *Byte, uint8_t Bit, bool xValue)
Modifie l'état du bit de rang Bit de l'octet pointé par Byte.
void vWNetTxPktSend(void)
Envoie le paquet Tx sur le réseau Le paquet doit être préparé avec les différentes fonctions d'assert...
uint16_t usWPktWord(xWusbPacket *pxPkt, uint8_t Offset)
Renvoie la valeur d'un mot de 16 bits (little endian) du paquet.
void vWPktAddStr(xWusbPacket *pxPkt, const char *pcStr)
Ajoute une chaîne de caractères sans le zéro terminal au paquet.
void vWNetGoToNextChannel(void)
Passe au canal suivant dans le subset utilisé
eWNetErrorCode eWNetError(void)
Renvoie la dernière erreur.
void vWNetTxPktAddBytes(const uint8_t *pucBytes, uint8_t ucLength)
Ajoute une suite d'octets au paquet TX.
uint8_t ucWPktType(xWusbPacket *pxPkt)
Renvoie le type du paquet.
void vWDevWaitStatus(eWDevStatus eStatus)
Attends que le module passe à l'état Status.
eWDevDataRate
Différentes vitesse de transmission.
void vWNetWaitIdle(void)
Attends que le réseau passe à l'état Disponible.
uint8_t ucWNetRxPktDataPayloadLength(void)
Longueur du payload du paquet DATA reçu Si le paquet reçu n'est pas un paquet DATA, cette fonction renvoie 0.
void vWNetTxPktAddTrailer(void)
Ajoute le CRC et le checksum en queue de paquet Cette fonction modifie le bit Signle Byte Device ID (...
void vWNetSetChecksumSeed(uint8_t ucValue)
Modifie le checksum seed.
void vWNetTxPktAddStr(const char *pcStr)
Ajoute une chaîne de caractères à zéro terminal au paquet TX Le zéro final n'est pas ajouté au paquet...
bool xWNetSetChannel(uint8_t ucIndex)
Modifie le canal.
bool xWNetSetPnCode(uint8_t ucValue)
Modifie le Pn Code du réseau.
uint8_t xWPktLength(xWusbPacket *pxPkt)
Renvoie le nombre d'octets stockés dans le paquet.
uint8_t * pucWNetRxPktDataPayload(void)
Pointeur sur le premier octet du payload du paquet DATA reçu Si le paquet reçu n'est pas un paquet DA...
uint8_t ucWNetRxPktType(void)
Type du paquet reçu.
void vWPktAddByte(xWusbPacket *pxPkt, uint8_t ucValue)
Ajoute un octet au paquet.
uint8_t ucWPktHeader(xWusbPacket *pxPkt)
Renvoie la valeur de l'en-tête du paquet.
void vWDevTransmit(const uint8_t *Data, uint8_t Length)
Transmission d'un message.
uint8_t ucWNetNumberOfPnCodes(void)
Nombre de PnCode possibles.
void vWNetSetStatus(eWNetStatusCode eFlag, bool ucValue)
Modifie l'état d'un bit d'état ou de contrôle de la configuration du réseau.
uint8_t ucWPktByte(xWusbPacket *pxPkt, uint8_t Offset)
Renvoie la valeur d'un octet du paquet.
void vWPktAddStr_P(xWusbPacket *pxPkt, const char *pcStr)
Ajoute une chaîne de caractères sans le zéro terminal au paquet.
void vWNetSetCrcSeed(uint8_t ucValue)
Modifie le crc seed.
uint8_t ucWNetRxPktByte(uint8_t ucOffset)
Octet d'offset ucOffset du paquet reçu L'offset 0 correspond à l'entête du paquet.
uint16_t usWNetRxPktWord(uint8_t ucOffset)
Mot de 16 bits d'offset ucOffset du paquet reçu.
uint8_t ucWNetNumberOfChannelsUsed(void)
Nombre de canaux possibles.
void vWNetTxPktAddBytes_P(const uint8_t *pucBytes, uint8_t ucLength)
Ajoute une suite d'octets résidant en mémoire programme au paquet TX.
void vWPktAddBytes(xWusbPacket *pxPkt, const uint8_t *pucBytes, uint8_t ucLength)
Ajoute une suite d'octets au paquet.
uint8_t ucWNetPingTimeout(void)
Renvoie le délai d'attente pour la réception d'un paquet PING La valeur renvoyée tient compte des par...
void vWPktToggleFlag(xWusbPacket *pxPkt, uint8_t ucIndex)
Bascule l'état d'un drapeau du paquet.
uint8_t * pucWPktRaw(xWusbPacket *pxPkt)
Renvoie un pointeur sur la zone mémoire où sont stockés les octets du paquet.
void vWNetTxPktToggleFlag(uint8_t ucIndex)
Bascule le flag d'index ucIndex dans l'entête du paquet TX.
bool xWPktSetAllFlags(xWusbPacket *pxPkt, uint8_t ucFlags)
Modifie l'état des bits de flag de l'entête d'un paquet.
bool xWPktFlag(xWusbPacket *pxPkt, uint8_t ucIndex)
Renvoie l'état d'un drapeau du paquet.
uint32_t ulWPktDword(xWusbPacket *pxPkt, uint8_t Offset)
Renvoie la valeur d'un mot de 16 bits (little endian) du paquet.
uint8_t * pucWPktDataPayload(xWusbPacket *pxPkt)
Renvoie un pointeur sur la zone mémoire où sont stockés les octets du payload.
eWDevDataRate eWDevGetDataRate(void)
Renvoie la vitesse de transmission.
eWNetErrorCode eWNetRxPktWait(int16_t iTimeoutMs)
Attends la réception d'un paquet. Si iTimeoutMs négatif, la fonction attends indéfiniment et sort uni...
void vWNetTxPktAddStr_P(const char *pcStr)
Ajoute une chaîne de caractères à zéro terminal résidant en mémoire programme au paquet TX Le zéro fi...