char** convert_to_btnm_map(char* str, int& len) {
// Count number of commas to determine array size
int comma_count = 0;
for (char* p = str; *p; p++) {
if (*p == ',') comma_count++;
}
// Allocate memory for pointers (comma_count + 2 for null terminator)
char** btnm_map = (char**)malloc((comma_count + 3) * sizeof(char*));
// Replace commas with null terminators
char* token = strtok(str, ",");
int i = 0;
while (token != NULL) {
btnm_map[i] = token; // Directly use token pointers
token = strtok(NULL, ",");
if (*(token+1) = ',') {
*token = ',';
btnm_map[++i] = token;
*token++;
}
i++;
}
// Null terminate the array
btnm_map[i] = btnm_map[1] - 1;
len = i + 1;
return btnm_map;
}
// Usage example
void setup() {
Serial.begin(115200);
char* str = strdup("1,2,3,\n,4,555,600,999,,,d,e");
int len;
char** btnm_map = convert_to_btnm_map(str, len);
// Use btnm_map
for (int i = 0; i < len; i++) {
Serial.printf("cnt %d\n", i);
Serial.printf("len %d i %d %s\n", len, i,btnm_map[i]);
}
// Only free the array and original string
free(btnm_map);
free(str);
}
void loop() {
}
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK