#define ArrLen(x) (sizeof(x)/sizeof(x[0]))
char buf_input[64];
bool led_state, header_mode, stdin_mode;
char header[32];
String buf;
const char* ll = "1713636000";
String s = "1713636000";
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
Serial.println();
unsigned long x = strtol(ll, 0, 10);
Serial.print("long: "); Serial.println(x);
stdin_mode = false;
}
typedef enum : uint8_t {
HEAD_TYPE,
HEAD_ACTION,
HEAD_PARAMS,
HEAD_DATA,
HEAD_ENUM_N
} header_enum;
struct header_t {
header_enum id;
const char* label;
char data[16];
void reset() { memset(data, '\0',16); }
}
header_data[HEAD_ENUM_N] = {
{HEAD_TYPE, "Type", {'\0'}},
{HEAD_ACTION,"Action", {'\0'}},
{HEAD_PARAMS,"Params", {'\0'}},
{HEAD_DATA, "Data", {'\0'}},
};
// -------------------------------------
void checkHeader(char* str) {
uint8_t index = 0;
if (str) {
for (int i=0; i<HEAD_ENUM_N; i++)
header_data[i].reset();
if (strchr(str, ' ')) {
char *token = strtok(str, " ");
do {
strncpy( header_data[index].data, token, 16 );
token = strtok(nullptr, " ");
} while (token && (++index < HEAD_ENUM_N));
}
}
}
void loop() {
if (Serial.available()) {
if (Serial.find("#HEAD ")) {
memset(header, '\0', sizeof(header)-1);
int n = Serial.readBytesUntil('\n', header, sizeof(header)-1); header[n] = '\0';
if (n > 0)
checkHeader(header);
}
}
else if (stdin_mode)
if (!(millis()%1000))
digitalWrite(LED_BUILTIN, led_state=!led_state);
}