Newer
Older
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#ifdef NOTYETIMPLEMENTED
#include "krabipacket.h"
KrabiPacket::KrabiPacket()
{
packet = new uint8_t[KRABIPACKET_MAXSIZE];
header = new uint8_t[KRABIPACKET_HEADER_MAXSIZE];
length = 0;
lengthHeader = 0; //Def, type ?
}
KrabiPacket::~KrabiPacket()
{
delete [] packet;
delete [] header;
}
void KrabiPacket::add(char* data)
{
int size = 0;
while( data[size] != '\0' )
size ++;
if (length + size >= KRABIPACKET_MAXSIZE || lengthHeader + 2 >= KRABIPACKET_HEADER_MAXSIZE) return;
for(int i=0; i<size; i++)
packet[length + i] = data[i];
header[lengthHeader] = 's';
header[lengthHeader + 1] = size;
length += size;
lengthHeader += 2;
}
void KrabiPacket::add(int data)
{
add((uint32_t) data);
}
void KrabiPacket::add(uint8_t data)
{
if (length + 1 >= KRABIPACKET_MAXSIZE || lengthHeader + 1 >= KRABIPACKET_HEADER_MAXSIZE) return;
packet[length] = data;
header[lengthHeader] = 'b';
length += 1;
lengthHeader++;
}
void KrabiPacket::add(uint32_t data)
{
if (length + 4 >= KRABIPACKET_MAXSIZE || lengthHeader + 1 >= KRABIPACKET_HEADER_MAXSIZE) return;
for(int i=0; i<4; i++)
{
packet[length + 3 - i] = (uint8_t)(data % 256);
data >>= 8;
}
header[lengthHeader] = 'i';
length += 1; // 4 plutôt non ???????
lengthHeader++;
}
uint16_t KrabiPacket::getLength()
{
//Pourquoi int16 ???
/* FIXEDBASE = 3 cf getPacket() */
return KRABIPACKET_FIXEDBASESIZE + lengthHeader + length;
}
uint8_t* KrabiPacket::getPacket()
{
uint8_t* final = new uint8_t[KRABIPACKET_MAXSIZE];
/*Final de taille lengthHeader + length + 3
(FIXEDBASESIZE == 3) donc de taille final[0] */
//Longueur totale du packet final
final[0] = getLength();//TODO : int 16 dans int8
//Longueur du header
final[1] = lengthHeader;//TODO : Taille,type ??? initialisé jamais défini
uint8_t checksum = 0;
//Ecriture du packet et calcul de la CS
for(int i=0; i<lengthHeader; i++)
{
final[2+i] = header[i];
checksum += header[i];
}
for(int i=0; i<length; i++)
{
final[2+lengthHeader+i] = packet[i];
checksum += packet[i];
}
//Ecriture de la CS
final[2+lengthHeader+length] = checksum;
return final;
}
#endif