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