Bonjour à tous,

J'ai un doute concernant cette fonction, sachant que

Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
_config_radio.deveui;
à la valeur de
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
=> 8

et
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
_config_radio.nwkskey;
à la valeur de
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
=> 16

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
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
charToUint8_t(_config_radio.c_nwkskey + 1,_config_radio.nwkskey);
sachant _config_radio.c_nwkskey a une taille de 16
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
Donc que va-t-il se passer si _config_radio.c_deveui à une taille de 8.

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

Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
_config_radio.deveui;
qui a la valeur de
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
=> 8

Est-ce que quelque chose vous interpelle?

Merci pour vos lumières