1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#include <stdio.h>
#include <stdlib.h>
#include "structure.h"
int i ;
uint16_t checkSum=0;
uint8_t Version = 2;
uint8_t LnHeader = 10 ;
uint32_t Timestamp = 1412054007 ;
union T_trame trame ;
char * bin (unsigned long int i)
{
static char buffer [1+sizeof (unsigned long int)*8] = { 0 };
char *p=buffer-1+sizeof (unsigned long int)*8;
do { *--p = '0' + (i & 1); i >>= 1; } while (i);
return p;
}
uint16_t F_Checksum (uint16_t checkSum)
{
for ( i=1; i<LnHeader; i++)
if (i != 3)
checkSum += trame.entete8bits[i];
checkSum += Version + LnHeader;
checkSum %= 0xFF ;
}
int main(int argc, char *argv[])
{
trame.entete8bits[0] = Version | LnHeader << 4 ; // Version + longueur en tête
trame.entete8bits[1] = 200; //Longueur total
trame.entete8bits[2] = 80; // Nombre de capteur
trame.entete8bits[4] = 34; //ID de la source
trame.entete8bits[5] = 63; // ID du destinataire
trame.entete16bits[3] = Timestamp & 0xFFFF ;
trame.entete16bits[4] = Timestamp >> 16 ;
printf("La longueur de l'entete est : %d octets\n",trame.entete8bits[0] >> 4) ;
printf("La version est : %d\n",trame.entete8bits[0] & 0x0F ) ;
printf("Le premier octet a pour valeur: %d, en binaire : %s\n", trame.entete8bits[0], bin(trame.entete8bits[0]));
printf("Longueur totale : %d octets\n", trame.entete8bits[1]) ;
printf("Nombre de capteurs %d \n", trame.entete8bits[2]) ;
printf ("Checksum = %d\n", F_Checksum(checkSum));
printf("ID de la source %d \n", trame.entete8bits[4]) ;
printf("ID du destinataire : %d \n", trame.entete8bits[5]) ;
printf("Premiere partie du timestamp %s \n", bin(trame.entete16bits[3])) ;
printf("Deuxieme partie du timestamp %s \n", bin(trame.entete16bits[4])) ;
printf("Timestamp decimal : %d\n", (trame.entete16bits[3] | trame.entete16bits[4] << 16)) ;
printf("Timestamp binaire : %s", bin((trame.entete16bits[3] | trame.entete16bits[4] << 16))) ;
return 0 ;
} |
Partager