/*! \brief Check if the socket's client is able to answer a request. \warning This function blocks the runtime if no Trame is received. (It should be launch in a thread if a timeout is needed). */ bool SocketManager::checkConnexion(string from) { Trame* checkTrame = new Trame(from,CHECK_CON); sendTrame(checkTrame); Trame* returnedTrame = receiveTrame(); bool connected = (returnedTrame->getType() == ACK_CON); delete checkTrame; delete returnedTrame; return(connected); }
int main(void){ // char *filename = "main/image2.txt"; // FILE *fptr = NULL; // if((fptr = fopen(filename,"r")) == NULL) // { // fprintf(stderr,"error opening %s\n",filename); // return 1; // } // print_image(fptr); // fclose(fptr); // fprintf(stderr,"\n"); printf("Lancement du programme de test XBEE\n"); printf("Nous allons tester l'envoi de la trame suivante : 7E 00 04 08 01 4D 59 50\nAllez, c'est parti !\n"); /*Initialisation UART XBEE */ int xbee1 = serial_init("/dev/ttyUSB0",9600); int * xbee1Pointer = &xbee1; // Fonction pour creer une trame : computeTrame(uint16_t taille, uint8_t type, uint8_t * trameData) // On envoie cette trame pour le test : 7E 00 04 08 01 4D 59 50 //TODO : calculer la taille de la chaine envoyee //struct TrameXbee * trameTest = computeTrame(0x0004, "\x08\x01\x4D\x59"); // Trame Test envoie donnée : 7E 00 11 10 01 00 00 00 00 00 00 FF FF FF FE 00 00 01 02 03 ED struct TrameXbee * trameTest = computeTrame(0x0011, "\x10\x01\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFE\x00\x00\x01\x02\x03\xED"); //on va envoyer la trame créée avec sendTrame(int xbeeToUse, struct TrameXbee * trameToSend){ sendTrame(xbee1Pointer, trameTest); // ON VEUT RECUPERER LA TRAME RETOUR //struct TrameXbee * trameRetour = getTrame(xbee1Pointer); // j'essaie d'afficher la trame trouvee //afficherTrame(trameRetour); // FIN DU PROGRAMME close(xbee1); }
// MAIN int main(int argc, char ** argv){ printf("Lancement du programme Main...\n"); // CHOIX PERIPHERIQUE POUR LE ZIGBEE if(argc < 1){ printf("Please provide a dev name.\n"); return 0; } char * devname = argv[1]; printf("Lancement du programme DUMMYFPGA...\n"); int xbeeRNE = serial_init(devname,9600); int * xbeeRNEPointer = &xbeeRNE; // POUR POUVOIR FACILEMENT ENVOYER VERS LE COORDINATEUR uint8_t destRequest[8]; destRequest[0] = 0x00; destRequest[1] = 0x00; destRequest[2] = 0x00; destRequest[3] = 0x00; destRequest[4] = 0x00; destRequest[5] = 0x00; destRequest[6] = 0x00; destRequest[7] = 0x00; //CREATION D'UNE LISTE DE CAPTEUR listeCapteurs = initCaptorsList(); uint8_t question = 0x3F; // Pour pouvoir repondre a la demande '?' uint8_t numberCaptors = 0x01; // Nombre de capteurs (A mettre a jour) // INITIALISATION D'UN UNIQUE CAPTEUR (A FAIRE POUR TOUS LES CAPTEURS) uint8_t id = ID_TEMPERATURE; // Type de capteur uint8_t unitData = 0x0C; // unite (ici en degre celsius) uint8_t dataSize = 0x02; // le nombre d'octets qui composent la donnee (ici 2) uint8_t minTemp[2]; // Valeurs min et max et leur affectation (on suppose dataSize = 0x02) uint8_t maxTemp[2]; minTemp[0] = 0x00; // A METTRE A JOUR EN FONCTION DES DONNEES minTemp[1] = 0x00; maxTemp[0] = 0x00; maxTemp[1] = 0x40; uint8_t fpgaName[2]; // Nom du FPGA (ici "#1") fpgaName[0] = 0x23; fpgaName[1] = 0x31; addCaptor(listeCapteurs,id,dataSize,unitData,minTemp,maxTemp); //showCaptor(listeCapteurs->premier); // Pour afficher les differents champs du capteur // A FAIRE POUR TOUS LES AUTRES CAPTEURS int count = 0; int finish = 0; while(!finish){ printf("Count Value : %d", count); count++; struct TrameXbee * trameRetour = getTrame(xbeeRNEPointer); if(trameRetour){ afficherTrame(trameRetour); // // FIN DU PROGRAMME uint8_t idRetour = trameRetour->header.frameID; switch(idRetour){ case ID_NI :{ // ARRIVEE D'UN NOUVEAU FPGA DANS LE RESEAU, ON VA METTRE A JOUR LA TABLE // ICI ON NE SERA PAS DANS CE CAS LA break; } case ID_TX_STATUS :{ if (trameRetour->trameData[4] == 0x00){ printf("La trame a bien ete tranmise"); } break; } case ID_RX :{ uint8_t askCode = trameRetour->trameData[11]; switch(askCode){ case 0x3F :{ // REQUETE INFO CAPTEUR printf("On a reçu une requete de demande d'infos sur les capteurs !\n"); sendInfoCaptorValueFrameWithList(xbeeRNEPointer,name,listeCapteurs); break; } case 0x2A :{ // REQUETE VALEUR CAPTEUR uint8_t capteurCode = trameRetour->trameData[12]; fprintf(stderr, "Voici le code reçu : %02x\n", capteurCode); switch(capteurCode){ case ID_TEMPERATURE :{ printf("On a recu une requête du maitre qui veut connaitre la temperature\n"); uint8_t valeur[2]; valeur[0] = 0x00; valeur[1] = 0x3F; uint8_t destRequest[8]; destRequest[0] = 0x00; destRequest[1] = 0x00; destRequest[2] = 0x00; destRequest[3] = 0x00; destRequest[4] = 0x00; destRequest[5] = 0x00; destRequest[6] = 0x00; destRequest[7] = 0x00; uint8_t testString [4*2 +1]; sprintf(&testString[0],"%02x",0x2A); sprintf(&testString[2],"%02x",capteurCode); sprintf(&testString[4],"%02x",valeur[0]); sprintf(&testString[6],"%02x",valeur[1]); uint8_t bufferInfo[4]; convertZeroPadedHexIntoByte(testString,bufferInfo); struct TrameXbee * atToSend = computeATTrame(0x12, destRequest ,bufferInfo); sendTrame(xbeeRNEPointer, atToSend); break; } case ID_LIGHT :{ printf("On a recu une requête du maitre qui veut connaitre la luminosite\n"); break; } case ID_GYRO :{ printf("On a recu une requête du maitre qui veut connaitre l'orientation\n"); break; } case ID_ANALOG :{ printf("On a recu une requête du maitre qui veut connaitre la valeur analogique\n"); break; } default : printf("ERREUR PAS DE CAPTEUR ICI...\n"); break; } break; } default: break; } break; } default : break; } } else { printf("Pas de trame reçu on recommence !\n"); } } printf("Fin Du Programme. Merci d'avoir participe au test!\n"); close(xbeeRNE); }