Bonjour à tous,
J'ai un doute concernant cette fonction, sachant que
à la valeur de
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part _config_radio.deveui;=> 8{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
et
à la valeur de
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part _config_radio.nwkskey;=> 16{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
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 struct Config_radio { char c_appeui[100]; // FOR OTAA uint8_t appeui[8]; // FOR OTAA char c_deveui[100]; // FOR OTAA uint8_t deveui[8]; // FOR OTAA char c_appkey[100]; // FOR OTAA uint8_t appkey[16]; // FOR OTAA uint32_t devaddr; // FOR ABP char c_devaddr[11]; // FOR ABP char c_appskey[100]; // FOR ABP uint8_t appskey[16]; // FOR ABP char c_nwkskey[100]; // FOR ABP uint8_t nwkskey[16]; // FOR ABP }; Config_radio _config_radio; charToUint8_t(_config_radio.c_deveui + 1,_config_radio.deveui); void Foxuino::charToUint8_t(const char * key, uint8_t table[]) { char * ptr; char buffer[100]; const char* separateur = ","; strncpy(buffer, key, 100); // on le duplique pour ne pas toucher à key buffer[99] = '\0'; ptr = strtok(buffer, separateur); // http://www.cplusplus.com/reference/cstring/strtok/ int i = 0; while (ptr && i < 16) { table[i++] = strtol(ptr, NULL, 16); // http://www.cplusplus.com/reference/cstdlib/strtol/ ptr = strtok(NULL, separateur); } }
Le premier questionnement, c'est la taille du buffer. Est-ce necessaire qu'elle soit de 100, alors que la plus grande valeur (taille) est de 16 (ref: nwkskey)
Le deuxième questionnement est la boucle
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 while (ptr && i < 16) { table[i++] = strtol(ptr, NULL, 16); // http://www.cplusplus.com/reference/cstdlib/strtol/ ptr = strtok(NULL, separateur); }
Initialement, cette fonction est prévue pour ceci
sachant _config_radio.c_nwkskey a une taille de 16
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 charToUint8_t(_config_radio.c_nwkskey + 1,_config_radio.nwkskey);
Donc que va-t-il se passer si _config_radio.c_deveui à une taille de 8.{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
Voyez-vous mon souci? La boucle devrait etre comme ceci
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 while (ptr && i < 8) { table[i++] = strtol(ptr, NULL, 8); // http://www.cplusplus.com/reference/cstdlib/strtol/ ptr = strtok(NULL, separateur); }
Mais si je laisse cette dernier avec le numéro 16
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 while (ptr && i < 16) { table[i++] = strtol(ptr, NULL, 16); // http://www.cplusplus.com/reference/cstdlib/strtol/ ptr = strtok(NULL, separateur); }
que risque-t-il de se passer après le 9 -> 16 pour
qui a la valeur de
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part _config_radio.deveui;=> 8{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
Est-ce que quelque chose vous interpelle?
Merci pour vos lumières
Partager