2#include "../../Defines.h"
20#define NUMBER_GROUPS 4
21#define STRING_MAX_SIZE 40
33#define EPROM_MAIN_GATEWAY_VALUE "1gt"
35#define EPROM_MAIN_BLE_SERVER_VALUE "2bs"
37#define EPROM_MAIN_BLE_CLIENT_VALUE "3bc"
40#define EPROM_STEPPER_BUZZER_VALUE "4bz"
42#define EPROM_STEPPER_SINGLE_FEED_VALUE "5sf"
44#define EPROM_STEPPER_AUTO_FEED_VALUE "6af"
46#define EPROM_STEPPER_JACKPOT_FEED_VALUE "7jf"
48#define EPROM_STEPPER_KIND_VALUE "8sk"
50#define EPROM_STEPPER_FEEDS_PER_JACKPOT_VALUE "9jp"
52#define EPROM_SENSOR_TILT_VALUE "TILT_10"
54#define EPROM_SENSOR_PIR_VALUE "11pr"
56#define EPROM_SEMANTIC_MARKER_ZOOMED_VALUE "12sz"
59#define EPROM_DISPLAY_ON_BLANK_SCREEN_VALUE "13bk"
61#define EPROM_DISPLAY_SCREEN_TIMEOUT_VALUE "14to"
63#define EPROM_HIGH_TEMP_POWEROFF_VALUE "15pw"
65#define EPROM_IS_MINIMAL_MENU_SETTING "16mm"
67#define EPROM_STEPPER_ANGLE_FLOAT_SETTING "17sa"
70#define EPROM_NO_BUTTON_CLICK_POWEROFF_SETTING "18po"
73#define EPROM_WIFI_CREDENTIAL_1_SETTING "19w1"
75#define EPROM_WIFI_CREDENTIAL_2_SETTING "20w2"
78#define EPROM_PAIRED_DEVICE_SETTING "21pd"
81#define EPROM_DEVICE_NAME_SETTING "22dn"
84#define EPROM_FIRST_TIME_FEATURE_SETTING "23fs"
87#define EPROM_ONLY_GEN3_CONNECT_SETTING "23gs"
90#define EPROM_SCREEN_COLOR_SETTING "24sc"
93#define EPROM_BLE_SERVER_USE_DEVICE_NAME_SETTING "25bs"
96#define EPROM_BLE_USE_DISCOVERED_PAIRED_DEVICE_SETTING "26bd"
99#define EPROM_USE_DOC_FOLLOW_SETTING "27df"
102#define EPROM_SUB_DAWGPACK_SETTING "28dg"
105#define EPROM_USE_SPIFF_SETTING "29sf"
108#define EPROM_PAIRED_DEVICE_ADDRESS_SETTING "30da"
113#define EPROM_STEPPER_FACTORY_CLOCKWISE_MOTOR_DIRECTION_SETTING "31md"
116#define EPROM_SENDWIFI_WITH_BLE "32wb"
119#define EPROM_NOTIFY_BLE_DISCOVERY "33bd"
122#define EPROM_PREFERENCE_TIMER_INT_SETTING "34tm"
125#define EPROM_PREFERENCE_SUPPORT_GROUPS_SETTING "35g"
128#define EPROM_PREFERENCE_GROUP_NAMES_SETTING "36g"
131#define EPROM_PREFERENCE_DEBUG_INFO_SETTING "37db"
135#define EPROM_DEV_ONLY_SM_SETTING "38dsm"
138#define EPROM_PREFERENCE_TIMER_MAX_INT_SETTING "39x"
141#define EPROM_PREFERENCE_ATOMS_SETTING "40a"
144#define EPROM_PREFERENCE_ATOM_KIND_SETTING "41Atom"
147#define EPROM_PREFERENCE_SM_ON_PIR_SETTING "42pir"
149#define EPROM_PREFERENCE_SM_COMMAND_PIR_SETTING "43pir"
151#define EPROM_PREFERENCE_SM_COMMAND_PIR_OFF_SETTING "44pir"
153#define EPROM_PREFERENCE_ATOM_SOCKET_GLOBAL_ONOFF_SETTING "45sock"
156#define EPROM_USE_SPIFF_MQTT_SETTING "46spiff"
158#define EPROM_USE_SPIFF_QRATOM_SETTING "47spiff"
164#define EPROM_STEPPER_AUTO_MOTOR_DIRECTION_SETTING "48a"
167#define EPROM_INCLUDE_GROUP_NAMES_SETTING "49e"
172#define EPROM_STEPPER_CLOCKWISE_MOTOR_DIRECTION_SETTING "50sf"
177#define EPROM_SENSOR_PLUGS_SETTING "51sp"
182#define EPROM_SENSORS_SETTING "52sensors"
187#define EPROM_STEPPER_RPM_SETTING "53sRPM"
191#define EPROM_STEPPER_2FEED_SETTING "542feed"
196#define EPROM_CHAIN_SENSORS_SETTING "6Chain5snsors"
200#include <Preferences.h>
202#define PREFERENCES_EPROM_MAIN_NAME "MainPrefs"
237 boolean found =
false;
240 char *topicName = rindex(topic,
'/');
248 if (group && strlen(group) == 0)
257 SerialTemp.printf(
"compare: %s to %s\n", topicName, group);
258 if (strcmp(topicName, group) == 0)
269 SerialTemp.printf(
"topicInIncludeGroup(%s) =%d\n", topicName, found);
276 SerialTemp.printf(
"parseIncludeGroups %s\n", groups);
289 if (!index(groups,
','))
301 for (token = strtok_r(str,
",",&rest); token != NULL; token = strtok_r(NULL,
",", &rest))
326 SerialTemp.printf(
"savePreference .. %d = '%s'\n", preferenceID, preferenceValue.c_str());
340#define MAX_APPEND 1500
359 SerialDebug.println(
" *** preference > max, emptying .. ");
401 sprintf(str,
"%d",val);
435 SerialLots.printf(
"getPreference_mainModule[%d] = %s\n", preferenceID,
_preferenceBuffer);
453 SerialLots.print(
" CACHE preference = ");
454 SerialLots.printf(
" [%d] = ",preferenceID);
455 SerialLots.println(valBool);
462 SerialLots.print(
" preference = ");
463 SerialLots.printf(
" [%d] = ",preferenceID);
464 SerialLots.println(val);
466 valBool = (strcmp(val,
"1")==0)?
true:
false;
479 SerialLots.print(
" set CACHE preference");
480 SerialLots.printf(
" [%d] = ",preferenceID);
481 SerialLots.println(flag);
517 float fval = atof(val);
525 sprintf(str,
"%2f",val);
541 SerialTemp.println(
"setOnBootPreferences_mainModule");
574 SerialDebug.println(
" **** SETTING SOME PREFES for PTStepper ****");
586 String preferenceValue;
587 int preferenceID = i;
590 if (preferenceValue && preferenceValue.length() > 0)
602 SerialLots.println(preferenceValue);
650#ifdef TODO_THIS_CACHE
685 SerialDebug.println(
"***initPreferencesMainModule");
709#ifdef ATOM_QRCODE_MODULE
730#ifdef ATOM_SOCKET_MODULE
756#ifdef ESP_32_FEEDER_BLE_GEN3
880# elif defined(ESP_M5_ATOM_S3)
882# elif defined(ESP_M5_ATOM_LITE)
884# elif defined(ESP_M5)
895#define DEFAULT_OFF_BLE_NAME
896#ifdef DEFAULT_OFF_BLE_NAME
1077#ifdef USE_SPIFF_MQTT_SETTING
1085#ifdef USE_SPIFF_QRATOM_SETTING
1151 SerialLots.println(
" ** setting PREFERENCE_STEPPER_2FEED_SETTING = 0");
1156 SerialError.printf(
" ** NO default for preference[%d]\n", i);
1165void resetSensorToDefault_mainModule()
1177#ifdef SERIAL_DEBUG_TEMP
1178 SerialTemp.println(
"******************");
1179 SerialTemp.println(VERSION);
1185 SerialTemp.printf(
"CONNECTED_BLE_DEVICE: %s\n", BLEDeviceName);
1271#ifdef M5CORE2_MODULE
1272 SerialTemp.printf(
"PREFERENCE_M5Core2_SETTING:\n");
1274#if (SERIAL_DEBUG_CALL)
1291 SerialTemp.println(
"");
1292 SerialTemp.print(
"JSONconfig: ");
1293 SerialTemp.print(JSONConfigString);
1294 SerialTemp.println(
"");
1295 SerialTemp.println(
"");
1306 SerialTemp.println(
" *** Example JSON messages you can modify and paste into serial monitor, no DEV required");
1309 SerialTemp.printf(
"{\"set\":\"sensors\",\"val\":\"%s\"}", (
char*)
"BuzzerSensorClass,19,22,L9110S_DCStepperClass,21,25");
1310 SerialTemp.println();
1313 SerialTemp.printf(
"{\"set\":\"sensors\",\"val\":\"%s\"}", (
char*)
"PIRSensorClass,23,33");
1314 SerialTemp.println();
1315 SerialTemp.printf(
"{\"set\":\"sensorPlugs\",\"val\":\"L9110S_DCStepperClass\"}");
1316 SerialTemp.println();
1317 SerialTemp.printf(
"{\"set\":\"M5AtomKind\",\"val\":\"M5HDriver\"}");
1318 SerialTemp.println();
1325 SerialTemp.printf(
"{\"set\":\"stepperAngle\",\"val\":\"250\"} --new Feeder");
1326 SerialTemp.println();
1329 SerialDebug.println(
"{\"ssid\":\"Bob\", \"ssidPassword\":\"scott\"}");
1331 SerialDebug.println(
"{\"set\":\"BLEUseDeviceName\", \"val\":\"off\"}");
1332 SerialDebug.println(
"FEED ALL");
1333 SerialDebug.println(
"{\"cmd\":\"feed\"}");
1339 SerialTemp.printf(
" *** PIN USE (%d) .. check for duplicated done next .. look for 'ERROR' \n", pinUseStruct->
pinUseCount);
1345 SerialLots.printf(
" *** PIN Count = %d\n", pinUseStruct->
pinUseCount);
1351 boolean duplicatePins =
false;
1353 for (
int i = 0; i < count - 1; i++)
1355 for (
int j = i + 1; j < count; j++)
1362 duplicatePins =
true;
1363 SerialError.printf(
"*** ERROR: DUPLICATE PIN: %d, (%s) == (%s)\n",pin1, pinUseStruct->
pinUseArray[i], pinUseStruct->
pinUseArray[j]);
1378 SerialLots.println(
"Clean EPROM.. ");
1389 SerialTemp.println(
"Setting _DiscoverM5PTClicker");
1410 SerialDebug.printf(
"M5AtomKind = %s\n", value.c_str());
1444 if (strcasecmp(atomKind,
"M5AtomScanner")==0)
1448 else if (strcasecmp(atomKind,
"M5AtomSocket")==0)
1457#define NEW_SENSORS_PREFERENCE
1465#ifdef ESP_M5_ATOM_S3
1485 SerialDebug.printf(
"SENSOR: %s,%d,%d\n", sensor->
sensorName, sensor->
pin1, sensor->
pin2);
1487 SerialDebug.printf(
"SENSOR: **** Null sensor ***\n");
1494 int count = sensors->
count;
1495 SerialDebug.printf(
"DEFINED_SENSORS SensorClassType (%ld):\n", count);
1496 SerialDebug.printf(
" ******** \n");
1497 for (
int i=0; i< count; i++)
1499 SerialDebug.println(
" print sensor 1");
1501 SerialDebug.println(
" DONE print sensor 1");
1504 SerialDebug.printf(
" ******** \n");
1519 SerialDebug.println(
" **** sensorsStructs_mainModule NULL ****");
1524 for (
int i=0; i< count; i++)
1546 SerialDebug.printf(
"setSensorsString_mainModule(%s)\n", sensorsString);
1548 if (!sensorsString || strlen(sensorsString)==0)
1569 SerialDebug.println(
"**** initSensorStringsFromEPROM_mainModule ****");
1581 char *copy = strdup(str);
1601 SerialDebug.printf(
"*** parseSensorString_mainModule: %s\n", sensorsString);
1603 if (!sensorsString || strlen(sensorsString)==0)
1605 SerialDebug.println(
"parseSensorString_mainModule: *** No Sensors or string **");
1616 strcpy(str,sensorsString);
1617 strcpy(strCopy,sensorsString);
1626 for (
int whichPass = 0; whichPass<2; whichPass++)
1628#define secondPass (whichPass == 1)
1633 numSensors = arrayIndex / max;
1634 strcpy(str,strCopy);
1635 SerialDebug.printf(
" ** Create sensors %d\n", numSensors);
1647 for (
char *token= strtok(str,
","); token!= NULL; token= strtok(NULL,
","))
1649 int indexInSensor = arrayIndex / max;
1650 int indexInArray = arrayIndex % max;
1654 switch (indexInArray)
1674 int pin = atoi(token);
1675#ifdef ESP_M5_ATOM_S3
1677 if (pin == 16 || pin == 17)
1680 SerialDebug.printf(
"*** BAD PIN: %d, setting to 22 ***\n", pin);
1685 sensorItems[indexInSensor].
pin1= pin;
1694 int pin = atoi(token);
1695#ifdef ESP_M5_ATOM_S3
1697 if (pin == 16 || pin == 17)
1699 SerialDebug.printf(
"*** BAD PIN: %d, setting to 22 ***\n", pin);
1704 sensorItems[indexInSensor].
pin2= pin;
1715 sensors->
count = numSensors;
1716 sensors->
sensors = sensorItems;
1718 SerialDebug.printf(
"parseSensorString_mainModule: ** sensors->count = %ld\n", sensors->
count);
1724#pragma mark CHAIN_STRUCT
1731 int buttonNumberArray[PIN_USE_MAX];
1733 char *setStringArray[PIN_USE_MAX];
1735 char *valStringArray[PIN_USE_MAX];
1737 char *deviceStringArray[PIN_USE_MAX];
1760 SerialDebug.printf(
"*** parseChainSensorString_mainModule: %s\n", chainUseString);
1771 return chainUseStruct;
1780 SerialDebug.printf(
"*** parseChainSensorString_mainModuleNEW:\n%s\n", chainUseString);
1787 if (!chainUseString || strlen(chainUseString)==0)
1789 SerialDebug.println(
"parseSensorString_mainModule: *** No chainUseString or string **");
1790 return chainUseStruct;
1799#define MAX_CHAIN_STRING 600
1804 SerialDebug.printf(
"ChainUseString length too big %d\n", strlen(chainUseString));
1807 strcpy(str,chainUseString);
1808 strcpy(strCopy,chainUseString);
1814 int numChainStructs;
1821 for (
int whichPass = 0; whichPass<2; whichPass++)
1823#define secondPass (whichPass == 1)
1830 numChainStructs = arrayIndex / max;
1831 strcpy(str,strCopy);
1832 SerialLots.printf(
" ** Create sensors %d\n", numChainStructs);
1844 for (
char *token= strtok(str,
","); token!= NULL; token= strtok(NULL,
","))
1846 int indexInSensor = arrayIndex / max;
1847 int indexInArray = arrayIndex % max;
1848 SerialLots.printf(
"%d Token[%d] = %s\n",indexInArray, indexInSensor, token);
1860 switch (indexInArray)
1870 int num = atoi(token);
1876 int num = atoi(token);
1877 chainButtonStructs[indexInSensor].
pressKind = num;
1891 char chainUseSample[200];
1892 sprintf(chainUseSample,
"CHAIN_USE: %s press=%d btn=%2d set= %s, val=%s dev=%s",chainButtonStructs[indexInSensor].classType, chainButtonStructs[indexInSensor].pressKind, chainButtonStructs[indexInSensor].buttonNumber, chainButtonStructs[indexInSensor].setString, chainButtonStructs[indexInSensor].valString, chainButtonStructs[indexInSensor].deviceString);
1907 SerialDebug.printf(
"parseSensorString_mainModule: ** sensors->count = %ld\n", numChainStructs);
1909 return chainUseStruct;
1921 strcpy(str,(
char*)
"BC,0,0,feed, ,$localhost,BC,0,2,feed, , ,BC,1,0,feed, ,$localhost,BC,1,2,feed, , ,BC,2,2,SM_MatrixCell,6,$dev,BC,2,1,togglesocket, ,M5AtomSocket,BC,2,0,togglesocket, ,M5AtomSocket,JC,3,0,feed, ,$localhost,JC,3,100,feed, , ,JC,3,101,togglesocket, ,M5AtomSocket,JC,3,102,feed, , ,JC,3,103,$SMART,QHmwUurxC3.1703806697279,");
1928 SerialDebug.println(
"DONE testParse");
1941 SerialDebug.printf(
"initSensors:initChainSensorStringsFromEPROM_mainModule = '%s'\n",
_chainSensorsEPROM);
1994#define TRY_JC_BUTTON_1
1995#ifdef TRY_JC_BUTTON_1
2026 SerialDebug.println(
"done register chain buttons");
2044 SerialDebug.printf(
"setChainSensorsString_mainModule(%s)\n", chainSensorsString);
2046 if (!chainSensorsString || strlen(chainSensorsString)==0)
2071 else if (strlen(str) == 0)
2083 for (
int lap = 0; lap < 2; lap++)
2085 boolean showAsEPROM = (lap == 0);
2096 SerialDebug.printf(
",");
2097 SerialDebug.printf(
"%s,%d,%d,%s,%s,%s (docfollow=%d)", chainButtonStruct->
classType, chainButtonStruct->
buttonNumber, chainButtonStruct->
pressKind,
non0string(chainButtonStruct->
setString),
non0string(chainButtonStruct->
valString),
non0string(chainButtonStruct->
deviceString), chainButtonStruct->
isDOCFOLLOW);
2100 SerialDebug.printf(
"%d -> %s\n", i, chainButtonStruct->
chainUse?chainButtonStruct->
chainUse:(
char*)
"NULL");
2106 if (strcmp(chainButtonStruct->
setString,
"$SMART")==0)
2121 SerialDebug.println();
2131boolean cachedChainDefinition(
char *smartAddress)
2134 boolean cached =
false;
2140 void setChainButtonStructSMART(char *valValue);
2144 void setChainButtonStructDOCFOLLOW(char *SMARTAddress);
2160 SerialDebug.println(
"requestChainSMARTButtons");
2166 SerialDebug.printf(
"%d SMARTButtons\n", chainUseStruct->
chainUseCount);
2177 if (strcmp(chainButtonStruct->
setString,
"$SMART")==0)
2179 char* smartAddress = chainButtonStruct->
valString;
2201#define MAX_SMART_ADDRESS 80
2214#define MAX_USE_SAMPLE 250
2234 SerialDebug.printf(
"setChainButtonStructDOCFOLLOW: %s\n", SMARTAddress);
2249 SerialDebug.printf(
"setDOCFOLLOW address=($SMART,%s,)\n",(
char*) SMARTAddress);
2253 chainButtonStruct->
setString = (
char*)
"$SMART";
2298void registerChain_mainModule(String classType,
int buttonNumber,
int pressKind, String setString, String valString, String deviceString)
2303 SerialError.printf(
"*** ERROR .. too many CHAINS defined ***\n");
2307 char chainUseSample[100];
2308 sprintf(chainUseSample,
"CHAIN_USE: %s btn=%2d press=%d set= %s, val=%s dev=%s",classType, buttonNumber,pressKind, setString.c_str(), valString.c_str(), deviceString.c_str());
2309 SerialLots.println(chainUseSample);
2321 char *chainUse = (
char*)calloc(strlen(chainUseSample)+1,
sizeof(char));
2322 strcpy(chainUse, chainUseSample);
2325 chainbuttonStruct->
chainUse = chainUse;
2334 chainbuttonStruct->
pressKind = pressKind;
2351 if (strcmp(chainbuttonStruct->
setString,
"$SMART")==0)
2371 else if (strcmp(chainbuttonStruct->
setString,
"$DC")==0|| strcmp(chainbuttonStruct->
setString,
"$DOCFOLLOW")==0)
2400 SerialDebug.printf(
"getChainUseStruct(%d)\n", pressKind);
2414 SerialDebug.printf(
"chainButton press=%d) = %s\n", chainButtonStruct->
pressKind, chainButtonStruct->
chainUse);
2417 SerialDebug.printf(
"matched button %ld, press=%ld \n", chainButtonStruct->
buttonNumber, pressKind);
2422 return chainButtonStruct;
2457 SerialDebug.printf(
"getChainUseStruct(%d, %d)\n", buttonNumber_1based, pressKind);
2469 if (chainButtonStruct->
buttonNumber == buttonNumber_1based)
2471 SerialDebug.printf(
"chainButton (%d, press=%d) = %s\n", buttonNumber_1based, chainButtonStruct->
pressKind, chainButtonStruct->
chainUse);
2475 SerialDebug.printf(
"matched button %ld, press=%ld \n", buttonNumber_1based, pressKind);
2480 return chainButtonStruct;
2508 SerialDebug.printf(
"getChainUseStructSMART(%s)\n", SMARTAddress);
2520 if (strcmp(chainButtonStruct->
SMARTAddress, SMARTAddress)==0)
2522 SerialDebug.printf(
"Found chainButton %s for SMART = %s\n", chainButtonStruct->
classType, SMARTAddress);
2524 return chainButtonStruct;
2540 SerialDebug.printf(
"setChainButtonStructSMART(%s)\n", valValue);
2559 if (strcmp(chainButtonStruct->
SMARTAddress, SMARTAddress)==0)
2561 SerialDebug.printf(
"Found chainButton %s for SMART = %s\n", chainButtonStruct->
classType, SMARTAddress);
2568 if (chainButtonStruct)
2570 SerialDebug.printf(
"FOUND chainButtonSMART(%s, %d) = %s", SMARTAddress, chainButtonStruct->
pressKind, chainButtonStruct->
chainUse);
2578 char chainUseSample[250];
2595 if (chainButtonStruct)
2597 SerialDebug.printf(
"processChainUseStruct: %s, %s\n", chainButtonStruct->
setString, chainButtonStruct->
valString);
2599 boolean isLocalHost =
false;
2600 boolean useCurrentDevice =
false;
2601 boolean nullValString =
false;
2603 nullValString =
true;
2604 if (deviceName && strlen(deviceName) > 0)
2607 switch (deviceName[0])
2612 if ( strcmp(deviceName,
"$localhost")==0)
2614 else if (strcmp(deviceName,
"$dev")==0)
2615 useCurrentDevice =
true;
2625 if (isLocalHost && strcmp(chainButtonStruct->
setString,
"feed")==0)
2644#define TRY_FEED_BLE_WIFI
2647#ifdef TRY_FEED_BLE_WIFI
2648 else if (strcmp(chainButtonStruct->
setString,
"feed")==0 &&
2654 SerialDebug.println(
"*** feed and BLE connected **");
boolean isConnectedBLEClient()
returns whether connected over BLE as a client to a server(like a ESP feeder)
void sendFeedCommandBLEClient()
sends the "feed" command over bluetooth to the connected device..
String getJSONConfigString()
retrieve the Configuration JSON string in JSON format..
void sendMessageNoChangeMQTT(char *message)
just send a message but without any extras
char * createCopy2(const char *stringA)
char * main_getUsername()
char * main_JSONStringForWIFICredentials()
retrieve a JSON string for the ssid and ssid_password: {'ssid':<ssid>,'ssidPassword':<pass>"}
char * main_getPassword()
return password
char * getServerServiceName_mainModule()
void main_dispatchAsyncCommand(int asyncCallCommand)
checks if any async commands are in 'dispatch' mode, and if so, invokes them, and sets their flag to ...
PinUseStruct * getPinUseStruct_mainModule()
get the pin use array
char * getChipIdString()
3.17.24 get the chip id as a string
char * connectedBLEDeviceName_mainModule()
returns the connected BLE Device name (the :NAME of advertisment, Address: 01:39:3f:33 part of name,...
char * createCopy(char *stringA)
#define ASYNC_SEND_MQTT_FEED_MESSAGE
sends a message (like FEED) on the users topic
#define NO_POWEROFF_AMOUNT_STRING_MAIN
#define ASYNC_CALL_CLEAN_EPROM
cleans the EPROM totally, and reboots
#define EPROM_DEV_ONLY_SM_SETTING
9.28.23 #272 only show Semantic Markers that are sent directly to the device
#define EPROM_NO_BUTTON_CLICK_POWEROFF_SETTING
sets screentimeout if not button clicks (set,noclick,val,seconds)
#define EPROM_MAIN_GATEWAY_VALUE
void cleanEPROM_mainModule()
clean the preferencesMainModule in EPROM
void savePreferenceInt_mainModule(int preferenceID, int val)
sets an int preference
boolean getDiscoverM5PTClicker()
get option
float getPreferenceFloat_mainModule(int preferenceID)
called to set a preference (which will be an identifier and a string, which can be converted to a num...
#define EPROM_WIFI_CREDENTIAL_2_SETTING
second wifi credential
void savePreferenceBoolean_mainModule(int preferenceID, boolean flag)
save a boolean preference
#define EPROM_FIRST_TIME_FEATURE_SETTING
a firsttime feature flag (only 1 per build) 7.12.22 defaulting to TRUE
#define EPROM_PREFERENCE_SUPPORT_GROUPS_SETTING
the preference for supporting GROUPS (default true)
#define EPROM_PAIRED_DEVICE_SETTING
the guest device paired with this M5 device (or NONE)
void savePreferenceATOMKind_MainModule(String value)
returned from mainModule
#define EPROM_PREFERENCE_TIMER_MAX_INT_SETTING
11.29.23 add the max time .. so a random can be used
char * _preferenceMainModuleLookupDefaults[MAX_MAIN_PREFERENCES]
array of default values to store in the EPROM if not defined..
char _preferenceBuffer[100]
PREFERENCES for the main module.
#define EPROM_STEPPER_ANGLE_FLOAT_SETTING
sets stepper angle, a floating point number
#define EPROM_USE_DOC_FOLLOW_SETTING
NOTE: these EPROM have to be lockstep the same as the PREFERENCE definitions in MainModule....
#define EPROM_PREFERENCE_ATOM_KIND_SETTING
1.4.24 What kind of ATOM plug (set, M5AtomKind, val= {M5AtomSocket, M5AtomScanner}
void printSensors_mainModule(SensorsStruct *sensors)
print sensors, passing in a struct
#define EPROM_PREFERENCE_SM_COMMAND_PIR_SETTING
1.10.24 The Semantic Marker command is sent on PIR, and the Command to send
char _buffer_ChainButtonSMARTAddress[MAX_SMART_ADDRESS]
SensorsStruct * getSensors_mainModule()
return the sensors defined
#define EPROM_PREFERENCE_SM_COMMAND_PIR_OFF_SETTING
1.11.24 The Semantic Marker command is sent on PIR, and the Command to send
char _includeGroupsStringArray[NUMBER_GROUPS][STRING_MAX_SIZE]
resulting group names
char * _preferenceMainModuleLookupEPROMNames[MAX_MAIN_PREFERENCES]
array of preference names (those used in process()
#define EPROM_PREFERENCE_ATOMS_SETTING
1.1.24 the preference for all the ATOM plugs (format: atomType:value} .. for now just use socket:on
void initChainSensorStringsFromEPROM_mainModule()
void appendPreference_mainModule(int preferenceID, String preferenceValue)
called to append to a a preference (which will be an identifier and a string, which can be converted ...
#define EPROM_PAIRED_DEVICE_ADDRESS_SETTING
9.3.22 eprom of the Address of desired BLE
ChainUseStruct * parseChainSensorString_mainModuleNEW(char *chainUseString)
void setDiscoverM5PTClicker(boolean flag)
#define EPROM_SENDWIFI_WITH_BLE
send WIFI to all except our device (and our paired) when
void setSensorsString_mainModule(char *sensorsString)
#define EPROM_BLE_SERVER_USE_DEVICE_NAME_SETTING
if set, the BLE Server (like PTFeeder) will tack on the device name (or none if not defined).
String _appendingPreferenceString
storage for the appending string
void resetAllPreferences_mainModule()
resets preferences.. Currently only reset all, but eventually reset(groups..)
#define EPROM_STEPPER_BUZZER_VALUE
buzzer on or off
#define EPROM_MAIN_BLE_SERVER_VALUE
BLEServer mode.
#define EPROM_STEPPER_SINGLE_FEED_VALUE
single feed mode
#define MAX_SMART_ADDRESS
ChainUseStruct * getChainUseStruct_mainModule()
get the pin use array
#define EPROM_STEPPER_CLOCKWISE_MOTOR_DIRECTION_SETTING
boolean getPreferenceBoolean_mainModule(int preferenceID)
called to set a preference (which will be an identifier and a string, which can be converted to a num...
#define EPROM_PREFERENCE_SM_ON_PIR_SETTING
1.10.24 Flag on whether a Semantic Marker command is sent on PIR, and the Command to send
void registerChain_mainModule(String classType, int buttonNumber, int pressKind, String setString, String valString, String deviceString)
void togglePreferenceBoolean_mainModule(int preferenceID)
toggles a preference boolean
#define EPROM_USE_SPIFF_SETTING
8.22.22 to turn on/off SPIFF use
void printSensor_mainModule(SensorStruct *sensor)
print sensor
#define EPROM_PREFERENCE_DEBUG_INFO_SETTING
a place to put some kind of Last Will of what went wrong .. for now (> max tries)
#define EPROM_SCREEN_COLOR_SETTING
color of the M5 screen
void resetPreference_mainModule(int preferenceID)
called to reset to blank a preference (which will be an identifier and a string, which can be convert...
#define EPROM_ONLY_GEN3_CONNECT_SETTING
if true, only BLEClient connect to GEN3 feeders..
boolean _isCachedPreferenceBoolean[MAX_MAIN_PREFERENCES]
array of boolean if the ID is cached..
void storePreference_mainModule(int preferenceID, String preferenceValue)
called to append to a a preference (which will be an identifier and a string, which can be converted ...
void initAppendingPreference_mainModule(int preferenceID)
called to init the preference. This won't save anything until storePreference called
char * getPreferenceATOMKind_MainModule()
new 1.4.24 setting ATOM kind (eg. M5AtomSocket, M5AtomScanner)
#define EPROM_STEPPER_FEEDS_PER_JACKPOT_VALUE
#define EPROM_PREFERENCE_ATOM_SOCKET_GLOBAL_ONOFF_SETTING
1.12.24 Whether the AtomSocket accepts global on/off messages
void savePreferenceFloat_mainModule(int preferenceID, float val)
called to set a preference (which will be an identifier and a string, which can be converted to a num...
void printChainSensors_mainModule(ChainUseStruct *chainUseStruct)
print sensors, passing in a struct
#define EPROM_DISPLAY_ON_BLANK_SCREEN_VALUE
Display preferences - show messages on blank screen- boolean.
#define EPROM_SENSOR_PIR_VALUE
proximity PIR
void savePreferenceIntFromString_mainModule(int preferenceID, char *val)
sets an int, but only if a valid integer, and no signs. If bad, then a 0 is stored
#define EPROM_USE_SPIFF_MQTT_SETTING
4.4.24 for MQTT use of spiff (or not)
#define EPROM_STEPPER_AUTO_MOTOR_DIRECTION_SETTING
#define EPROM_STEPPER_FACTORY_CLOCKWISE_MOTOR_DIRECTION_SETTING
#define EPROM_INCLUDE_GROUP_NAMES_SETTING
include these topics groups..
void setOnBootPreferences_mainModule()
set some defaults on boot - that override EPROM this can be called on the HOME screen to set back to ...
#define EPROM_STEPPER_RPM_SETTING
SensorsStruct * parseSensorString_mainModule(char *str)
return array of SensorsStruct after parsing string syntax: {SENSOR,pin1,pin2}
char _sensorsEPROM[1000]
the memory for the sensorsEPROM
char * non0string(char *str)
void initSensorStringsFromEPROM_mainModule()
ChainUseStruct * _chainUseStruct
global for use. This is an object (not a pointer) and has all the storage created statically
char _preferenceBufferString[100]
buffer for the string
#define EPROM_PREFERENCE_TIMER_INT_SETTING
the preference timer
boolean _cachedPreferenceBooleanValues[MAX_MAIN_PREFERENCES]
#define EPROM_STEPPER_JACKPOT_FEED_VALUE
jackpot feed
#define EPROM_SUB_DAWGPACK_SETTING
8.17.22 to turn on/off subscribing to the dawgpack topic
char _buffer_ChainButtonUseSample[MAX_USE_SAMPLE]
#define EPROM_NOTIFY_BLE_DISCOVERY
starts the BLE Discovery notification process - which might be internal or externa (via messages).
Preferences _preferencesMainModule
preferences for MAIN
#define EPROM_USE_SPIFF_QRATOM_SETTING
4.4.24 for QRATOM use of spiff (or not)
void parseIncludeGroups(char *groups)
8.2.24 set the include group (and cache it), called (indirectly from MQTT via setIncludeGroups
ChainButtonStruct * getChainButtonStruct(int buttonNumber_1based, int pressKind)
void requestChainSMARTButtons()
void resetChainSensorToDefault_mainModule()
#define EPROM_SENSOR_TILT_VALUE
sensor preferences for tilt on or off
#define MAX_APPEND
special preference string for saving and printing back later..
boolean topicInIncludeGroup(char *topic)
char * copyString_SMARTAddress(char *valString)
return memory that can be used (reused)
char * copyString_mainModule(char *str)
copy string
void setChainSensorsString_mainModule(char *chainSensorsString)
void setChainButtonStructSMART(char *valValue)
SensorsStruct * _sensorsStructs_mainModule
array of sensorStruct
#define EPROM_STEPPER_KIND_VALUE
the step kind
#define EPROM_HIGH_TEMP_POWEROFF_VALUE
sets the max temp for a poweroff
int getM5ATOMKind_MainModule()
new 1.4.24 setting ATOM kind (eg. ATOM_KIND_M5_SCANNER, ATOM_KIND_M5_SOCKET)
#define EPROM_STEPPER_AUTO_FEED_VALUE
auto feed
#define EPROM_BLE_USE_DISCOVERED_PAIRED_DEVICE_SETTING
#define PREFERENCES_EPROM_MAIN_NAME
the EPROM is in preferences.h
#define EPROM_WIFI_CREDENTIAL_1_SETTING
for now, save 2 WIFI Credentials
ChainUseStruct * parseChainSensorString_mainModule(char *chainUseString)
#define EPROM_MAIN_BLE_CLIENT_VALUE
BLEClient mode.
void setChainButtonStructDOCFOLLOW(char *SMARTAddress)
#define EPROM_DISPLAY_SCREEN_TIMEOUT_VALUE
sets the timeout value
int getPreferenceInt_mainModule(int preferenceID)
called to set a preference (which will be an identifier and a string, which can be converted to a num...
char * copyString_UseSample(char *valString, char *category)
char _chainSensorsEPROM[700]
int _cachedPreferenceIntValues[MAX_MAIN_PREFERENCES]
another cache for the Int values..
boolean _firstTimeAtomKind
if the preference was retrieved..
char _mqttMessage_ChainButton[100]
#define EPROM_SENSORS_SETTING
#define EPROM_PREFERENCE_GROUP_NAMES_SETTING
the preference setting group names to subscribe (but empty or # go to wildcard, this also supports wi...
void processChainButtonStruct(ChainButtonStruct *chainButtonStruct)
char * getPreference_mainModule(int preferenceID)
#define EPROM_SEMANTIC_MARKER_ZOOMED_VALUE
display preferences zoomed or not zoomed
SensorStruct * getSensor_mainModule(char *sensorName)
return the sensor specified or null
void setIncludeGroups(char *groups)
8.2.24 set the include group (and cache it), called from MQTT
boolean _DiscoverM5PTClicker
#define EPROM_STEPPER_2FEED_SETTING
void readAppendingPreference_mainModule(int preferenceID)
called to init the preference. This won't save anything until storePreference called
char * getPreferenceString_mainModule(int preferenceID)
returns the preference but in it's own string buffer. As long as you use it before calling getPrefere...
void printPreferenceValues_mainModule()
print the preferences to SerialDebug
#define EPROM_IS_MINIMAL_MENU_SETTING
whether to show the minimal or expanded menu
#define EPROM_DEVICE_NAME_SETTING
the device name
boolean _isCachedPreferenceInt[MAX_MAIN_PREFERENCES]
array of boolean if the ID is cached..
#define EPROM_SENSOR_PLUGS_SETTING
#define EPROM_CHAIN_SENSORS_SETTING
void initPreferencesMainModule()
initialize the _preferencesMainLookup with EPROM lookup names
void savePreference_mainModule(int preferenceID, String preferenceValue)
called to set a preference (which will be an identifier and a string, which can be converted to a num...
void readPreferences_mainModule()
reads the preferences. Save is everytime the savePreference is called
#define PREFERENCE_USE_SPIFF_SETTING
8.22.22 to turn on/off SPIFF use (more below..)
#define PREFERENCE_PAIRED_DEVICE_ADDRESS_SETTING
the paired device for guest device feeding (6.6.22) .. but the Address 9.3.22
#define PREFERENCE_STEPPER_KIND_VALUE
uses STEPPER type
#define PREFERENCE_SENSOR_TILT_VALUE
Sensor preferences.
#define BUTTON_JOYSTICK_BOTTOM
#define PREFERENCE_SUB_DAWGPACK_SETTING
8.17.22 to turn on/off subscribing to the dawgpack topic
#define PREFERENCE_STEPPER_SINGLE_FEED_VALUE
#define PREFERENCE_SM_COMMAND_PIR_OFF_SETTING
1.11.24 The Semantic Marker command is sent on PIR, and the Command to send on OFF (or opposite)
#define PREFERENCE_SENSOR_PLUGS_SETTING
#define PREFERENCE_STEPPER_FACTORY_CLOCKWISE_MOTOR_DIRECTION_SETTING
#define ATOM_KIND_M5_SCANNER
returned from mainModule
#define PREFERENCE_BLE_SERVER_USE_DEVICE_NAME_SETTING
if set, the BLE Server (like PTFeeder) will tack on the device name (or none if not defined).
#define PREFERENCE_ONLY_GEN3_CONNECT_SETTING
if true, only BLEClient connect to GEN3 feeders..
#define PREFERENCE_SENDWIFI_WITH_BLE
sends the WIFI to all except current device if set
#define PREFERENCE_NO_BUTTON_CLICK_POWEROFF_SETTING
#define PREFERENCE_SENSOR_PIR_VALUE
#define PREFERENCE_SUPPORT_GROUPS_SETTING
the preference for supporting GROUPS (default true)
#define PREFERENCE_INCLUDE_GROUP_NAMES_SETTING
8.2.24 don't change subscription but include these groups (eg. safeHouse,atlasDogs)
#define PREFERENCE_SEMANTIC_MARKER_ZOOMED_VALUE
Display preferences (SemanticMarker etc) - boolean.
#define PREFERENCE_STEPPER_JACKPOT_FEED_VALUE
#define BUTTON_JOYSTICK_LEFT
map x,y to quadrants
#define PREFERENCE_WIFI_CREDENTIAL_2_SETTING
#define ATOM_KIND_M5_SOCKET
#define PREFERENCE_STEPPER_RPM_SETTING
#define PREFERENCE_MAIN_BLE_SERVER_VALUE
#define BUTTON_DOUBLE_PRESS
#define PREFERENCE_PAIRED_DEVICE_SETTING
the paired device for guest device feeding (6.6.22)
#define PREFERENCE_STEPPER_BUZZER_VALUE
stepper preferences
#define PREFERENCE_DEV_ONLY_SM_SETTING
adding AP_DEBUG_MODE to let others know that DEBUG eprom is available. Turn this OFF for non dev
#define MAX_MAIN_PREFERENCES
******* 1 greater than last value **** IMPORTANT *** and no gaps..
#define PREFERENCE_ATOMS_SETTING
1.1.24 the preference for all the ATOM plugs (format: atomType:value} .. for now just use socket:on
#define PREFERENCE_BLE_USE_DISCOVERED_PAIRED_DEVICE_SETTING
#define BUTTON_JOYSTICK_RIGHT
#define PREFERENCE_USE_DOC_FOLLOW_SETTING
for
#define PREFERENCE_WIFI_CREDENTIAL_1_SETTING
#define PREFERENCE_ATOM_SOCKET_GLOBAL_ONOFF_SETTING
1.12.24 Whether the AtomSocket accepts global on/off messages
#define PREFERENCE_USE_SPIFF_MQTT_SETTING
#define PREFERENCE_DEBUG_INFO_SETTING
a place to put some kind of Last Will of what went wrong .. for now (> max tries)
#define PREFERENCE_CHAIN_SENSORS_SETTING
#define BUTTON_SHORT_PRESS
#define PREFERENCE_FIRST_TIME_FEATURE_SETTING
a firsttime feature flag (only 1 per build) 7.12.22 defaulting to TRUE
#define PREFERENCE_DISPLAY_SCREEN_TIMEOUT_VALUE
sets the timeout value
#define PREFERENCE_DISPLAY_ON_BLANK_SCREEN_VALUE
Display preferences - show messages on blank screen- boolean.
#define PREFERENCE_IS_MINIMAL_MENU_SETTING
sets the max temp for a poweroff
#define PREFERENCE_SCREEN_COLOR_SETTING
ithe color of the screen 0..n
#define PREFERENCE_NOTIFY_BLE_DISCOVERY
starts the BLE Discovery notification process - which might be internal or externa (via messages).
#define PREFERENCE_USE_SPIFF_QRATOM_SETTING
For MQTT writing to the QRATOM.
#define PREFERENCE_DEVICE_NAME_SETTING
the device name itself (6.6.22)
#define PREFERENCE_HIGH_TEMP_POWEROFF_VALUE
sets the max temp for a poweroff
#define PREFERENCE_STEPPER_FEEDS_PER_JACKPOT
#define PREFERENCE_GROUP_NAMES_SETTING
the preference setting group names to subscribe (but empty or # go to wildcard, this also supports wi...
#define PREFERENCE_STEPPER_ANGLE_FLOAT_SETTING
#define BUTTON_LONG_PRESS
#define PREFERENCE_STEPPER_2FEED_SETTING
#define PREFERENCE_STEPPER_AUTO_MOTOR_DIRECTION_SETTING
#define PREFERENCE_TIMER_MAX_INT_SETTING
the preference timer MAX (pairs with PREFERENCE_TIMER_INT_SETTING)
#define PREFERENCE_MAIN_GATEWAY_VALUE
#define BUTTON_JOYSTICK_TOP
#define PREFERENCE_STEPPER_CLOCKWISE_MOTOR_DIRECTION_SETTING
#define PREFERENCE_MAIN_BLE_CLIENT_VALUE
#define PREFERENCE_SM_ON_PIR_SETTING
1.10.24 Flag on whether a Semantic Marker command is sent on PIR, and the Command to send
#define PREFERENCE_TIMER_INT_SETTING
the preference timer
#define PREFERENCE_ATOM_KIND_SETTING
1.4.24 What kind of ATOM plug (set, M5AtomKind, val= {M5AtomSocket, M5AtomScanner}
#define PREFERENCE_SM_COMMAND_PIR_SETTING
1.10.24 The Semantic Marker command is sent on PIR, and the Command to send
#define PREFERENCE_SENSORS_SETTING
#define PREFERENCE_STEPPER_AUTO_FEED_VALUE
SMStruct parseSMAddress(char *str)
2.11.26 moved here from ChainButtonClassType
ChainButtonStruct * chainButtonStructArray
1.22.26 define a Chainbutton and creates N of them
int chainUseCount
number of chain
long pinNumArray[PIN_USE_MAX]
each pin
char * pinUseArray[PIN_USE_MAX]
string describing the module, etc
SensorClassType * sensorClassType
and the pointer to matching SensorClassType
SensorStruct * sensors
array of sensorStruct