/*

LED MODULE

Copyright (C) 2020 by Maxim Prokhorov <prokhorov dot max at outlook dot com>

*/

#pragma once

#include "led.h"

#include <cstring>

// Scans input string with format
// '<on1>,<off1>,<repeats1> <on2>,<off2>,<repeats2> ...'
// Directly changing `led.pattern.delays` contents

void _ledLoadPattern(led_t& led, const char* input) {
    char buffer[16];

    const char* d1;
    const char* d2;
    const char* d3;

    const char* p = input;
    const char* marker;

    auto& pattern = led.pattern;
    pattern.delays.clear();

loop:
/*!stags:re2c format = 'const char *@@;'; */
/*!re2c
        re2c:define:YYCTYPE = char;
        re2c:define:YYCURSOR = p;
        re2c:define:YYMARKER = marker;
        re2c:yyfill:enable   = 0;
        re2c:yych:conversion = 1;
        re2c:indent:top      = 1;

        end = "\x00";
        wsp = [ \t]+;
        num = [0-9]+;

        * { return; }
        wsp { goto loop; }
        @d1 num [,] @d2 num [,] @d3 num {
            unsigned long on;
            unsigned long off;
            unsigned char repeats;

            memcpy(buffer, d1, int(d2 - d1));
            buffer[int(d2 - d1 - 1)] = '\0';
            on = strtoul(buffer, nullptr, 10);

            memcpy(buffer, d2, int(d3 - d2));
            buffer[int(d3 - d2 - 1)] = '\0';
            off = strtoul(buffer, nullptr, 10);

            memcpy(buffer, d3, int(p - d3));
            buffer[int(p - d3)] = '\0';
            repeats = strtoul(buffer, nullptr, 10);

            pattern.delays.emplace_back(on, off, repeats);

            goto loop;
        }
*/
}
