ENTS-tock
Environmental NeTworked Sensor firmware on Tock OS
Loading...
Searching...
No Matches
user_config.cc
Go to the documentation of this file.
1#include "user_config.h"
2
7#include <libtock/net/eui64.h>
8#include <libtock/services/alarm.h>
9#include <ulog.h>
10
12
13static libtock_alarm_t alarm = {};
14
20void UserConfigStopCallback(uint32_t, uint32_t, void* ptr);
21
22void UserConfigStart(uint32_t retry_ms) {
23 // variables to store WiFi host info
24 char ssid[255] = {};
25 char ip[16] = {};
26 char mac[18] = {};
27
28 // constant password for AP
29 const char pass[] = "ilovedirt";
30
31 // Reload user config from FRAM
32 UserConfigStatus status_load = UserConfigLoad();
33
34 // start user config interface
35 if (status_load == USERCONFIG_OK) {
36 // print current user config
37 ulog_info("Current user configuration:");
38 ulog_info("---------------------------");
40 } else {
41 ulog_error("Could not load user config.");
42 }
43
44 // Get device address
45 uint64_t dev_eui = 0;
46 libtock_eui64_get(&dev_eui);
47 uint32_t devAddr = (uint32_t)(dev_eui & 0xFFFFFFFF);
48
49 snprintf(ssid, sizeof(ssid), "ents-%08lX", devAddr);
50
51 bool controller_status = true;
52 controller_status = ControllerWiFiHost(ssid, pass);
53 if (controller_status) {
54 ulog_info("Successfully started WiFi AP!");
55 } else {
56 ulog_error("Failed to start WiFi AP!");
57 return;
58 }
59
60 controller_status = ControllerUserConfigStart();
61 if (controller_status) {
62 ulog_info("Successfully started user config webserver!");
63 } else {
64 ulog_error("Failed to start user config webserver!");
65 return;
66 }
67
68 ulog_info("Sending FRAM configuration to ESP32...");
70 if (status != USERCONFIG_OK) {
71 ulog_info("Failed to send config to ESP32: %d", status);
72 }
73
74 // Get host info
75 ControllerWiFiHostInfo(ssid, ip, mac, NULL);
76 ulog_info("WiFi AP Info:");
77 ulog_info("---------------");
78 ulog_info("ssid \"%s\"", ssid);
79 ulog_info("pass \"%s\"", pass);
80 ulog_info("User Config http://%s/", ip);
81 ulog_info("WiFi AP MAC: \"%s\"", mac);
82
84
85 // autostop if retry_ms is specified
86 if (retry_ms > 0) {
87 UserConfigStop(retry_ms);
88 }
89}
90
92 // Reload user config from FRAM
93 // UserConfigStatus status_load = UserConfigLoad();
94
95 // Get Config from esp32
96 ulog_info("Requesting configuration from ESP32...");
98
99 if (status != USERCONFIG_OK) {
100 ulog_error("Something went wrong with getting user config");
101 }
102
103 // Reload user config from FRAM
104 if (UserConfigLoad() != USERCONFIG_OK) {
105 ulog_error("Error saved configuration not valid!");
106 ulog_info("Try sending configuration again.");
107
108 while (1);
109 }
110
111 // Print updated config
112 ulog_info("Updated user configuration:");
113 ulog_info("---------------------------");
115}
116
117void UserConfigStop(uint32_t retry_ms) {
119 libtock_alarm_in_ms(retry_ms, UserConfigStopCallback, (void*)&retry_ms,
120 &alarm);
121}
122
123void UserConfigStopCallback(uint32_t, uint32_t, void* ptr) {
124 ulog_info("Stopping UserConfig webserver...\t");
125
126 // deference to retry delay
127 uint32_t retry_ms = *(uint32_t*)ptr;
128
129 uint8_t clients = 0;
130 ControllerWiFiHostInfo(NULL, NULL, NULL, &clients);
131
132 // Handle if there are still clients connected
133 if (clients > 0) {
134 ulog_error("Error! %d clients still connected!", clients);
135 UserConfigStop(retry_ms);
136 return;
137 }
138
139 // Try to stop WiFI
140 if (!ControllerWiFiStopHost()) {
141 ulog_info("Error! Could not stop WiFi network!");
142 UserConfigStop(retry_ms);
143 } else {
145 ulog_info("Stopped!");
146
147 // if uploading via LoRaWAN deep sleep esp32
148 const UserConfiguration* cfg = UserConfigGet();
149 if (cfg->Upload_method == Uploadmethod_LoRa) {
150 ulog_info("Putting esp in deep sleep mode...");
152 }
153 }
154}
155
156int UserConfigCurrentStatus(void) { return state; }
const char ssid[]
const char pass[]
bool ControllerWiFiHost(const char *ssid, const char *passwd)
Sets the esp32 as a WiFi access point.
Definition wifi.c:156
void ControllerWiFiHostInfo(char *ssid, char *ip, char *mac, uint8_t *clients)
Gets information about the current access point.
Definition wifi.c:186
bool ControllerWiFiStopHost(void)
Stops the esp32 from acting as a WiFi access point.
Definition wifi.c:173
void UserConfigPrint(void)
Prints the current user configuration over serial.
UserConfigStatus UserConfigLoad(void)
Loads user configuration data from FRAM to RAM.
const UserConfiguration * UserConfigGet(void)
Gets a reference to the loaded user configuration data in RAM.
UserConfigStatus
Definition user_config.h:51
@ USERCONFIG_OK
Definition user_config.h:52
WiFi interface implementation with the esp32.
bool ControllerPowerSleep(void)
Definition power.c:40
Power interface for the esp32.
Controls the user config webserver.
UserConfigState
Definition user_config.h:16
@ USERCONFIG_STATE_ON
Definition user_config.h:18
@ USERCONFIG_STATE_STOPPING
Definition user_config.h:19
@ USERCONFIG_STATE_OFF
Definition user_config.h:17
void UserConfigUpdateFromServer(void)
UserConfigState state
int UserConfigCurrentStatus(void)
Get the current user config state.
void UserConfigStopCallback(uint32_t, uint32_t, void *ptr)
Stops the user config webserver.
void UserConfigStop(uint32_t retry_ms)
Stops the user config webserver.
void UserConfigStart(uint32_t retry_ms)
Starts the user config webserver.
UserConfigStatus ControllerUserConfigSend(void)
Send user configuration to ESP32.
bool ControllerUserConfigStart(void)
Start the user configuration website.
UserConfigStatus ControllerUserConfigRequest(void)
Request user configuration from ESP32.
User configuration WiFi interface.