/*! \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);
}
Exemplo n.º 2
0
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);

}
Exemplo n.º 3
0
// 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);
	
}