Fork of the espurna firmware for `mhsw` switches
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

165 lines
3.9 KiB

/* Generated by re2c 1.3 on Wed Mar 4 13:32:28 2020 */
#line 1 "led_pattern.h.in"
/*
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 `LedPattern::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:
const char *yyt1;const char *yyt2;const char *yyt3;
#line 37 "led_pattern.h"
{
char yych;
static const unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 64, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
64, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
};
yych = (char)*p;
if (yybm[0+yych] & 64) {
goto yy4;
}
if (yych <= '/') goto yy2;
if (yych <= '9') {
yyt1 = p;
goto yy7;
}
yy2:
++p;
yy3:
#line 45 "led_pattern.h.in"
{ return; }
#line 88 "led_pattern.h"
yy4:
yych = (char)*++p;
if (yybm[0+yych] & 64) {
goto yy4;
}
#line 46 "led_pattern.h.in"
{ goto loop; }
#line 96 "led_pattern.h"
yy7:
yych = (char)*(marker = ++p);
if (yybm[0+yych] & 128) {
goto yy10;
}
if (yych != ',') goto yy3;
yy8:
yych = (char)*++p;
if (yych <= '/') goto yy9;
if (yych <= '9') {
yyt2 = p;
goto yy12;
}
yy9:
p = marker;
goto yy3;
yy10:
yych = (char)*++p;
if (yybm[0+yych] & 128) {
goto yy10;
}
if (yych == ',') goto yy8;
goto yy9;
yy12:
yych = (char)*++p;
if (yych == ',') goto yy14;
if (yych <= '/') goto yy9;
if (yych <= '9') goto yy12;
goto yy9;
yy14:
yych = (char)*++p;
if (yych <= '/') goto yy9;
if (yych >= ':') goto yy9;
yyt3 = p;
yy15:
yych = (char)*++p;
if (yych <= '/') goto yy17;
if (yych <= '9') goto yy15;
yy17:
d1 = yyt1;
d2 = yyt2;
d3 = yyt3;
#line 47 "led_pattern.h.in"
{
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;
}
#line 163 "led_pattern.h"
}
#line 70 "led_pattern.h.in"
}