mirror of
https://github.com/Lurkars/esp-ena.git
synced 2026-05-08 20:10:37 +02:00
support for ena-eke-proxy, improved interface
This commit is contained in:
@@ -4,6 +4,7 @@ idf_component_register(
|
||||
"interface-main.c"
|
||||
"interface-data.c"
|
||||
"interface-datetime.c"
|
||||
"interface-info.c"
|
||||
"interface-input.c"
|
||||
"interface-label.c"
|
||||
"interface-report.c"
|
||||
@@ -12,6 +13,7 @@ idf_component_register(
|
||||
INCLUDE_DIRS "."
|
||||
PRIV_REQUIRES
|
||||
ena
|
||||
ena-eke-proxy
|
||||
display
|
||||
display-ssd1306
|
||||
rtc
|
||||
|
||||
@@ -91,12 +91,12 @@ void interface_data_rst(void)
|
||||
|
||||
void interface_data_lft(void)
|
||||
{
|
||||
interface_wifi_start();
|
||||
interface_datetime_start();
|
||||
}
|
||||
|
||||
void interface_data_rht(void)
|
||||
{
|
||||
interface_settings_start();
|
||||
interface_info_start();
|
||||
}
|
||||
|
||||
void interface_data_mid(void)
|
||||
@@ -190,6 +190,7 @@ void interface_data_start(void)
|
||||
interface_register_command_callback(INTERFACE_COMMAND_UP, &interface_data_up);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_DWN, &interface_data_dwn);
|
||||
interface_set_display_function(&interface_data_display);
|
||||
interface_set_display_refresh_function(NULL);
|
||||
|
||||
ESP_LOGD(INTERFACE_LOG, "start delete data interface");
|
||||
}
|
||||
|
||||
@@ -49,12 +49,12 @@ void interface_datetime_set(void)
|
||||
|
||||
void interface_datetime_lft(void)
|
||||
{
|
||||
interface_settings_start();
|
||||
interface_wifi_start();
|
||||
}
|
||||
|
||||
void interface_datetime_rht(void)
|
||||
{
|
||||
interface_wifi_start();
|
||||
interface_data_start();
|
||||
}
|
||||
|
||||
void interface_datetime_mid(void)
|
||||
@@ -106,7 +106,8 @@ void interface_datetime_display(void)
|
||||
display_clear_line( edit_line + 1, false);
|
||||
|
||||
time(¤t_timstamp);
|
||||
current_tm = localtime(¤t_timstamp);
|
||||
current_tm = gmtime(¤t_timstamp);
|
||||
current_tm->tm_hour = current_tm->tm_hour + (interface_get_timezone_offset()) % 24;
|
||||
|
||||
strftime(time_buffer, 16, INTERFACE_FORMAT_TIME, current_tm);
|
||||
display_text_line_column( time_buffer, 3, 4, false);
|
||||
@@ -168,6 +169,7 @@ void interface_datetime_start(void)
|
||||
interface_register_command_callback(INTERFACE_COMMAND_DWN, &interface_datetime_dwn);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_SET, &interface_datetime_set);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_RST, NULL);
|
||||
interface_set_display_function(&interface_datetime_display);
|
||||
interface_set_display_function(NULL);
|
||||
interface_set_display_refresh_function(&interface_datetime_display);
|
||||
ESP_LOGD(INTERFACE_LOG, "start datetime interface");
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
// Copyright 2020 Lukas Haubaum
|
||||
//
|
||||
// Licensed under the GNU Affero General Public License, Version 3;
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
|
||||
// https://www.gnu.org/licenses/agpl-3.0.html
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "esp_log.h"
|
||||
#include "driver/gpio.h"
|
||||
|
||||
#include "display.h"
|
||||
#include "display-gfx.h"
|
||||
|
||||
#include "ena-storage.h"
|
||||
#include "ena-exposure.h"
|
||||
|
||||
#include "interface.h"
|
||||
|
||||
void interface_info_set(void)
|
||||
{
|
||||
interface_main_start();
|
||||
}
|
||||
|
||||
void interface_info_rst(void)
|
||||
{
|
||||
}
|
||||
|
||||
void interface_info_lft(void)
|
||||
{
|
||||
interface_data_start();
|
||||
}
|
||||
|
||||
void interface_info_rht(void)
|
||||
{
|
||||
interface_settings_start();
|
||||
}
|
||||
|
||||
void interface_info_mid(void)
|
||||
{
|
||||
}
|
||||
|
||||
void interface_info_up(void)
|
||||
{
|
||||
}
|
||||
|
||||
void interface_info_dwn(void)
|
||||
{
|
||||
}
|
||||
|
||||
void interface_info_display(void)
|
||||
{
|
||||
char data_chars[10];
|
||||
display_menu_headline(interface_get_label_text(&interface_text_headline_info), true, 0);
|
||||
|
||||
display_text_line_column(interface_get_label_text(&interface_text_info_num_keys), 2, 1, false);
|
||||
|
||||
sprintf(data_chars, "%u", ena_storage_beacons_count());
|
||||
display_text_line_column(data_chars, 2, 9, false);
|
||||
|
||||
ena_exposure_summary_t *current_exposure_summary = ena_exposure_current_summary();
|
||||
|
||||
display_text_line_column(interface_get_label_text(&interface_text_info_exp_days), 4, 1, false);
|
||||
sprintf(data_chars, "%d", current_exposure_summary->days_since_last_exposure);
|
||||
if (current_exposure_summary->days_since_last_exposure < 0)
|
||||
{
|
||||
display_text_line_column("/", 4, 12, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
display_text_line_column(data_chars, 4, 12, false);
|
||||
}
|
||||
|
||||
display_text_line_column(interface_get_label_text(&interface_text_info_exp_num), 5, 1, false);
|
||||
sprintf(data_chars, "%d", current_exposure_summary->num_exposures);
|
||||
display_text_line_column(data_chars, 5, 12, false);
|
||||
|
||||
display_text_line_column(interface_get_label_text(&interface_text_info_exp_max), 6, 1, false);
|
||||
sprintf(data_chars, "%d", current_exposure_summary->max_risk_score);
|
||||
display_text_line_column(data_chars, 6, 12, false);
|
||||
|
||||
display_text_line_column(interface_get_label_text(&interface_text_info_exp_sum), 7, 1, false);
|
||||
sprintf(data_chars, "%d", current_exposure_summary->risk_score_sum);
|
||||
display_text_line_column(data_chars, 7, 12, false);
|
||||
}
|
||||
|
||||
void interface_info_start(void)
|
||||
{
|
||||
|
||||
interface_register_command_callback(INTERFACE_COMMAND_RST, &interface_info_rst);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_SET, &interface_info_set);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_LFT, &interface_info_lft);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_RHT, &interface_info_rht);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_MID, &interface_info_mid);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_UP, &interface_info_up);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_DWN, &interface_info_dwn);
|
||||
interface_set_display_function(&interface_info_display);
|
||||
interface_set_display_refresh_function(NULL);
|
||||
|
||||
ESP_LOGD(INTERFACE_LOG, "start info interface");
|
||||
}
|
||||
@@ -154,6 +154,7 @@ void interface_input_mid(void)
|
||||
current_text[current_cursor] = current_char_set[current_char_index];
|
||||
printf("current_char_set: %d %s\n", strlen(current_char_set), current_char_set);
|
||||
}
|
||||
|
||||
void interface_input_up(void)
|
||||
{
|
||||
if (current_char_index == 0)
|
||||
@@ -314,5 +315,6 @@ void interface_input(interface_text_callback callback_rst, interface_text_callba
|
||||
interface_register_command_callback(INTERFACE_COMMAND_DWN, &interface_input_dwn);
|
||||
|
||||
interface_set_display_function(&interface_input_display);
|
||||
interface_set_display_refresh_function(NULL);
|
||||
ESP_LOGD(INTERFACE_LOG, "start input interface");
|
||||
}
|
||||
|
||||
@@ -27,23 +27,36 @@ void interface_init_label(void)
|
||||
// EN
|
||||
interface_text_button_cancel.text[EN] = "CANCEL";
|
||||
interface_text_button_ok.text[EN] = "OK";
|
||||
interface_text_button_back.text[EN] = "BACK";
|
||||
interface_text_button_menu.text[EN] = "MENU";
|
||||
interface_text_button_report.text[EN] = "REPORT";
|
||||
|
||||
interface_text_headline_tan.text[EN] = "ENTER TAN";
|
||||
interface_text_headline_report.text[EN] = "REPORT";
|
||||
interface_text_headline_wifi.text[EN] = "WIFI";
|
||||
interface_text_headline_time.text[EN] = "TIME/DATE";
|
||||
interface_text_headline_data.text[EN] = "DEL DATA";
|
||||
interface_text_headline_settings.text[EN] = "SETTING";
|
||||
interface_text_headline_info.text[EN] = "INFO";
|
||||
interface_text_headline_debug.text[EN] = "DEBUG";
|
||||
|
||||
interface_text_wifi_scanning.text[EN] = "Scanning...";
|
||||
|
||||
interface_text_settings_locale.text[EN] = "Language:";
|
||||
interface_text_settings_locales[EN].text[EN] = "EN";
|
||||
interface_text_settings_locales[DE].text[EN] = "DE";
|
||||
|
||||
interface_text_settings_timezone.text[EN] = "Timezone:";
|
||||
interface_text_settings_timezone.text[EN] = "UTC:";
|
||||
|
||||
interface_text_wifi_scanning.text[EN] = "Scanning...";
|
||||
interface_text_info_num_keys.text[EN] = "Seen:";
|
||||
interface_text_info_exp_days.text[EN] = "Last Exp:";
|
||||
interface_text_info_exp_num.text[EN] = "Num Exp:";
|
||||
interface_text_info_exp_max.text[EN] = "Score:";
|
||||
interface_text_info_exp_sum.text[EN] = "Scores:";
|
||||
|
||||
interface_text_report_pending.text[EN] = "Uploading...";
|
||||
interface_text_report_success.text[EN] = "Upload succeed!";
|
||||
interface_text_report_fail.text[EN] = "Upload failed!";
|
||||
|
||||
interface_text_data_del[0].text[EN] = "DEL TEK";
|
||||
interface_text_data_del[1].text[EN] = "DEL Exp Info";
|
||||
@@ -75,26 +88,40 @@ void interface_init_label(void)
|
||||
|
||||
// DE
|
||||
interface_text_button_cancel.text[DE] = "ZURÜCK";
|
||||
interface_text_button_back.text[DE] = "ZURÜCK";
|
||||
interface_text_button_ok.text[DE] = "OK";
|
||||
interface_text_button_menu.text[DE] = "MENU";
|
||||
interface_text_button_report.text[DE] = "MELDEN";
|
||||
|
||||
interface_text_headline_tan.text[DE] = "TAN EING.";
|
||||
interface_text_headline_report.text[DE] = "MELDEN";
|
||||
interface_text_headline_wifi.text[DE] = "WLAN";
|
||||
interface_text_headline_time.text[DE] = "ZEIT/DATUM";
|
||||
interface_text_headline_data.text[DE] = "DATEN ENTF";
|
||||
interface_text_headline_settings.text[DE] = "EINSTEL.";
|
||||
interface_text_headline_info.text[DE] = "INFOS";
|
||||
interface_text_headline_debug.text[DE] = "DEBUG";
|
||||
|
||||
interface_text_wifi_scanning.text[DE] = "Scannen...";
|
||||
|
||||
interface_text_settings_locale.text[DE] = "Sprache:";
|
||||
interface_text_settings_locales[EN].text[DE] = "EN";
|
||||
interface_text_settings_locales[DE].text[DE] = "DE";
|
||||
|
||||
interface_text_settings_timezone.text[DE] = "Zeitzone:";
|
||||
interface_text_settings_timezone.text[DE] = "GMT:";
|
||||
|
||||
interface_text_wifi_scanning.text[DE] = "Scannen...";
|
||||
interface_text_info_num_keys.text[DE] = "Gesehen:";
|
||||
interface_text_info_exp_days.text[DE] = "letz. Exp:";
|
||||
interface_text_info_exp_num.text[DE] = "Anz. Exp:";
|
||||
interface_text_info_exp_max.text[DE] = "Score:";
|
||||
interface_text_info_exp_sum.text[DE] = "Scores:";
|
||||
|
||||
interface_text_data_del[0].text[DE] = "ENTF TEK";
|
||||
interface_text_report_pending.text[DE] = "Hochladen...";
|
||||
interface_text_report_success.text[DE] = "Erfolgreich!";
|
||||
interface_text_report_fail.text[DE] = "Fehlgeschlagen!";
|
||||
|
||||
interface_text_data_del[0]
|
||||
.text[DE] = "ENTF TEK";
|
||||
interface_text_data_del[1].text[DE] = "ENTF Exp Info";
|
||||
interface_text_data_del[2].text[DE] = "ENTF Tmp RPI";
|
||||
interface_text_data_del[3].text[DE] = "ENTF RPI";
|
||||
|
||||
@@ -30,11 +30,10 @@ static time_t current_timstamp;
|
||||
static struct tm *current_tm;
|
||||
static char time_buffer[32];
|
||||
static char text_buffer[32];
|
||||
static bool wifi_connected;
|
||||
|
||||
void interface_main_set(void)
|
||||
{
|
||||
interface_datetime_start();
|
||||
interface_info_start();
|
||||
}
|
||||
|
||||
void interface_main_rst(void)
|
||||
@@ -44,28 +43,83 @@ void interface_main_rst(void)
|
||||
|
||||
void interface_main_display(void)
|
||||
{
|
||||
if (wifi_connected)
|
||||
ena_exposure_summary_t *current_exposure_summary = ena_exposure_current_summary();
|
||||
|
||||
time(¤t_timstamp);
|
||||
uint32_t last_update = current_exposure_summary->last_update;
|
||||
|
||||
// status unknown if no update or last update older than two days
|
||||
if (last_update == 0 || ((current_timstamp - last_update) / (60 * 60 * 24)) > 2)
|
||||
{
|
||||
display_data( display_gfx_wifi, 8, 0, 0, false);
|
||||
display_data(display_gfx_question[0], 24, 0, 12, false);
|
||||
display_data(display_gfx_question[1], 24, 1, 12, false);
|
||||
display_data(display_gfx_question[2], 24, 2, 12, false);
|
||||
display_data(display_gfx_question[3], 24, 3, 12, false);
|
||||
}
|
||||
else if (current_exposure_summary->max_risk_score < 100)
|
||||
{
|
||||
display_data(display_gfx_smile[0], 24, 0, 12, false);
|
||||
display_data(display_gfx_smile[1], 24, 1, 12, false);
|
||||
display_data(display_gfx_smile[2], 24, 2, 12, false);
|
||||
display_data(display_gfx_smile[3], 24, 3, 12, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
display_data( display_gfx_cross, 8, 0, 0, false);
|
||||
display_data(display_gfx_sad[0], 24, 0, 12, false);
|
||||
display_data(display_gfx_sad[1], 24, 1, 12, false);
|
||||
display_data(display_gfx_sad[2], 24, 2, 12, false);
|
||||
display_data(display_gfx_sad[3], 24, 3, 12, false);
|
||||
}
|
||||
// clock icon
|
||||
display_data(display_gfx_clock, 8, 4, 8, false);
|
||||
|
||||
// last update
|
||||
struct tm *last_update_tm = gmtime((time_t *)&last_update);
|
||||
|
||||
last_update_tm->tm_hour = last_update_tm->tm_hour + (interface_get_timezone_offset()) % 24;
|
||||
|
||||
sprintf(time_buffer, "%02d %s %02d:%02d",
|
||||
last_update_tm->tm_mday,
|
||||
interface_get_label_text(&interface_texts_month[last_update_tm->tm_mon]),
|
||||
last_update_tm->tm_hour,
|
||||
last_update_tm->tm_min);
|
||||
|
||||
if (last_update != 0)
|
||||
{
|
||||
display_text_line_column(time_buffer, 4, 3, false);
|
||||
}
|
||||
|
||||
// buttons
|
||||
display_set_button(interface_get_label_text(&interface_text_button_menu), true, false);
|
||||
display_set_button(interface_get_label_text(&interface_text_button_report), false, true);
|
||||
}
|
||||
|
||||
void interface_main_display_refresh(void)
|
||||
{
|
||||
if (wifi_controller_connection() != NULL)
|
||||
{
|
||||
display_data(display_gfx_wifi, 8, 0, 0, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
display_data(display_gfx_cross, 8, 0, 0, false);
|
||||
}
|
||||
|
||||
time(¤t_timstamp);
|
||||
current_tm = localtime(¤t_timstamp);
|
||||
current_tm = gmtime(¤t_timstamp);
|
||||
|
||||
current_tm->tm_hour = current_tm->tm_hour + (interface_get_timezone_offset()) % 24;
|
||||
|
||||
// curent date
|
||||
sprintf(text_buffer, "%s %s %d",
|
||||
interface_get_label_text(&interface_texts_weekday[current_tm->tm_wday]),
|
||||
interface_get_label_text(&interface_texts_month[current_tm->tm_mon]),
|
||||
current_tm->tm_mday);
|
||||
display_text_line_column( text_buffer, 0, 16 - strlen(text_buffer), false);
|
||||
display_text_line_column(text_buffer, 0, 16 - strlen(text_buffer), false);
|
||||
|
||||
// current time
|
||||
strftime(time_buffer, 16, INTERFACE_FORMAT_TIME, current_tm);
|
||||
display_text_line_column( time_buffer, 1, 16 - strlen(time_buffer), false);
|
||||
display_text_line_column(time_buffer, 1, 16 - strlen(time_buffer), false);
|
||||
}
|
||||
|
||||
void interface_main_start(void)
|
||||
@@ -79,64 +133,9 @@ void interface_main_start(void)
|
||||
interface_register_command_callback(INTERFACE_COMMAND_UP, NULL);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_DWN, NULL);
|
||||
|
||||
if (wifi_controller_connection() != NULL)
|
||||
{
|
||||
wifi_connected = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
wifi_connected = false;
|
||||
}
|
||||
|
||||
interface_set_display_function(&interface_main_display);
|
||||
interface_set_display_refresh_function(&interface_main_display_refresh);
|
||||
|
||||
ena_exposure_summary_t *current_exposure_summary = ena_exposure_current_summary();
|
||||
|
||||
time(¤t_timstamp);
|
||||
uint32_t last_update = ena_storage_read_last_exposure_date();
|
||||
|
||||
// status unknown if no update or last update older than two days
|
||||
if (last_update == 0 || ((current_timstamp - last_update) / (60 * 60 * 24)) > 2)
|
||||
{
|
||||
display_data( display_gfx_question[0], 24, 0, 12, false);
|
||||
display_data( display_gfx_question[1], 24, 1, 12, false);
|
||||
display_data( display_gfx_question[2], 24, 2, 12, false);
|
||||
display_data( display_gfx_question[3], 24, 3, 12, false);
|
||||
}
|
||||
else if (current_exposure_summary->max_risk_score < 100)
|
||||
{
|
||||
display_data( display_gfx_smile[0], 24, 0, 12, false);
|
||||
display_data( display_gfx_smile[1], 24, 1, 12, false);
|
||||
display_data( display_gfx_smile[2], 24, 2, 12, false);
|
||||
display_data( display_gfx_smile[3], 24, 3, 12, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
display_data( display_gfx_sad[0], 24, 0, 12, false);
|
||||
display_data( display_gfx_sad[1], 24, 1, 12, false);
|
||||
display_data( display_gfx_sad[2], 24, 2, 12, false);
|
||||
display_data( display_gfx_sad[3], 24, 3, 12, false);
|
||||
}
|
||||
// clock icon
|
||||
display_data( display_gfx_clock, 8, 4, 8, false);
|
||||
|
||||
// last update
|
||||
struct tm *last_update_tm = localtime((time_t*) &last_update);
|
||||
|
||||
sprintf(time_buffer, "%02d %s %02d:%02d",
|
||||
last_update_tm->tm_mday,
|
||||
interface_get_label_text(&interface_texts_month[last_update_tm->tm_mon]),
|
||||
last_update_tm->tm_hour,
|
||||
last_update_tm->tm_min);
|
||||
|
||||
if (last_update != 0)
|
||||
{
|
||||
display_text_line_column( time_buffer, 4, 3, false);
|
||||
}
|
||||
|
||||
// buttons
|
||||
display_set_button( interface_get_label_text(&interface_text_button_menu), true, false);
|
||||
display_set_button( interface_get_label_text(&interface_text_button_report), false, true);
|
||||
|
||||
interface_main_display();
|
||||
ESP_LOGD(INTERFACE_LOG, "start main interface");
|
||||
}
|
||||
|
||||
@@ -24,154 +24,290 @@
|
||||
|
||||
#include "wifi-controller.h"
|
||||
|
||||
#include "ena-eke-proxy.h"
|
||||
|
||||
#include "interface.h"
|
||||
|
||||
static int interface_report_tan[10] = {5, 5, 5, 5, 5, 5, 5, 5, 5, 5};
|
||||
static int interface_report_tan_index = 0;
|
||||
static char current_tan[10];
|
||||
static uint8_t current_cursor;
|
||||
static char current_char_set[32];
|
||||
static uint8_t current_char_index;
|
||||
static char char_set_uppercase[32];
|
||||
static char char_set_numeric[32];
|
||||
static uint8_t current_max_index;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
INTERFACE_REPORT_STATUS_NONE = 0,
|
||||
INTERFACE_REPORT_STATUS_PENDING,
|
||||
INTERFACE_REPORT_STATUS_SUCCESS,
|
||||
INTERFACE_REPORT_STATUS_FAIL
|
||||
} report_status_e;
|
||||
|
||||
static int current_report_status = INTERFACE_REPORT_STATUS_NONE;
|
||||
|
||||
void interface_report_display(void)
|
||||
{
|
||||
display_clear();
|
||||
if (current_report_status == INTERFACE_REPORT_STATUS_NONE)
|
||||
{
|
||||
display_menu_headline(interface_get_label_text(&interface_text_headline_tan), false, 0);
|
||||
// buttons
|
||||
display_set_button(interface_get_label_text(&interface_text_button_cancel), true, false);
|
||||
if (current_cursor == 9)
|
||||
{
|
||||
display_set_button(interface_get_label_text(&interface_text_button_ok), false, true);
|
||||
}
|
||||
|
||||
if (current_cursor > 0)
|
||||
{
|
||||
display_data(display_gfx_arrow_left, 8, 3, 8, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
display_data(display_gfx_clear, 8, 3, 8, false);
|
||||
}
|
||||
|
||||
if (current_cursor < 9)
|
||||
{
|
||||
display_data(display_gfx_arrow_right, 8, 3, 112, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
display_data(display_gfx_clear, 8, 3, 112, false);
|
||||
}
|
||||
|
||||
display_clear_line(2, false);
|
||||
display_clear_line(4, false);
|
||||
|
||||
display_text_line_column("-", 3, 5, false);
|
||||
display_text_line_column("-", 3, 9, false);
|
||||
display_text_line_column("___", 3, 2, false);
|
||||
display_text_line_column("___", 3, 6, false);
|
||||
display_text_line_column("____", 3, 10, false);
|
||||
|
||||
int offset = 2;
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
if (i < current_cursor)
|
||||
{
|
||||
display_chars(¤t_tan[i], 1, 3, i + offset, true);
|
||||
}
|
||||
}
|
||||
|
||||
if (current_cursor > 2)
|
||||
{
|
||||
offset = 3;
|
||||
for (int i = 3; i < 6; i++)
|
||||
{
|
||||
if (i < current_cursor)
|
||||
{
|
||||
display_chars(¤t_tan[i], 1, 3, i + offset, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (current_cursor > 5)
|
||||
{
|
||||
offset = 4;
|
||||
for (int i = 6; i < 10; i++)
|
||||
{
|
||||
if (i < current_cursor)
|
||||
{
|
||||
display_chars(¤t_tan[i], 1, 3, i + offset, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
display_data(display_gfx_arrow_up, 8, 2, current_cursor * 8 + offset * 8, false);
|
||||
display_data(display_gfx_arrow_down, 8, 4, current_cursor * 8 + offset * 8, false);
|
||||
|
||||
display_chars(¤t_tan[current_cursor], 1, 3, current_cursor + offset, false);
|
||||
}
|
||||
else if (current_report_status == INTERFACE_REPORT_STATUS_PENDING)
|
||||
{
|
||||
|
||||
display_menu_headline(interface_get_label_text(&interface_text_headline_report), false, 0);
|
||||
display_text_line_column(interface_get_label_text(&interface_text_report_pending), 4, 1, false);
|
||||
}
|
||||
else if (current_report_status == INTERFACE_REPORT_STATUS_SUCCESS)
|
||||
{
|
||||
display_menu_headline(interface_get_label_text(&interface_text_headline_report), false, 0);
|
||||
display_text_line_column(interface_get_label_text(&interface_text_report_success), 3, 1, false);
|
||||
display_set_button(interface_get_label_text(&interface_text_button_ok), false, true);
|
||||
}
|
||||
else if (current_report_status == INTERFACE_REPORT_STATUS_FAIL)
|
||||
{
|
||||
display_menu_headline(interface_get_label_text(&interface_text_headline_report), false, 0);
|
||||
display_text_line_column(interface_get_label_text(&interface_text_report_fail), 3, 1, false);
|
||||
display_set_button(interface_get_label_text(&interface_text_button_back), true, false);
|
||||
display_set_button(interface_get_label_text(&interface_text_button_ok), false, true);
|
||||
}
|
||||
}
|
||||
|
||||
void interface_report_set_char_set(void)
|
||||
{
|
||||
char *ret;
|
||||
char cur_char = current_tan[current_cursor];
|
||||
|
||||
if ((ret = strchr(char_set_uppercase, cur_char)) != NULL)
|
||||
{
|
||||
strcpy(current_char_set, char_set_uppercase);
|
||||
current_char_index = strlen(current_char_set) - strlen(ret);
|
||||
}
|
||||
else if ((ret = strchr(char_set_numeric, cur_char)) != NULL)
|
||||
{
|
||||
strcpy(current_char_set, char_set_numeric);
|
||||
current_char_index = strlen(current_char_set) - strlen(ret);
|
||||
}
|
||||
}
|
||||
|
||||
void interface_report_set(void)
|
||||
{
|
||||
interface_main_start();
|
||||
if (current_report_status == INTERFACE_REPORT_STATUS_NONE)
|
||||
{
|
||||
interface_main_start();
|
||||
}
|
||||
else if (current_report_status == INTERFACE_REPORT_STATUS_FAIL)
|
||||
{
|
||||
current_report_status = INTERFACE_REPORT_STATUS_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
void interface_report_rst(void)
|
||||
{
|
||||
// TODO: REPORT here, check tan etc.
|
||||
if (current_cursor == 9 && current_report_status == INTERFACE_REPORT_STATUS_NONE)
|
||||
{
|
||||
current_report_status = INTERFACE_REPORT_STATUS_PENDING;
|
||||
interface_report_display();
|
||||
ESP_LOGI(INTERFACE_LOG, "publish tan: %s", current_tan);
|
||||
esp_err_t err = ena_eke_proxy_upload(current_tan, 0);
|
||||
if (err == ESP_OK)
|
||||
{
|
||||
current_report_status = INTERFACE_REPORT_STATUS_SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
current_report_status = INTERFACE_REPORT_STATUS_FAIL;
|
||||
}
|
||||
interface_report_display();
|
||||
}
|
||||
else if (current_report_status == INTERFACE_REPORT_STATUS_SUCCESS || current_report_status == INTERFACE_REPORT_STATUS_FAIL)
|
||||
{
|
||||
interface_main_start();
|
||||
}
|
||||
}
|
||||
|
||||
void interface_report_mid(void)
|
||||
{
|
||||
if (current_report_status == INTERFACE_REPORT_STATUS_NONE)
|
||||
{
|
||||
if (current_char_set[0] == char_set_uppercase[0])
|
||||
{
|
||||
strcpy(current_char_set, char_set_numeric);
|
||||
}
|
||||
else if (current_char_set[0] == char_set_numeric[0])
|
||||
{
|
||||
strcpy(current_char_set, char_set_uppercase);
|
||||
}
|
||||
current_char_index = 0;
|
||||
current_tan[current_cursor] = current_char_set[current_char_index];
|
||||
}
|
||||
}
|
||||
|
||||
void interface_report_lft(void)
|
||||
{
|
||||
if (interface_report_tan_index > 0)
|
||||
if (current_report_status == INTERFACE_REPORT_STATUS_NONE)
|
||||
{
|
||||
interface_report_tan_index--;
|
||||
if (current_cursor > 0)
|
||||
{
|
||||
current_cursor--;
|
||||
interface_report_set_char_set();
|
||||
}
|
||||
}
|
||||
ESP_LOGD(INTERFACE_LOG, "tan index %d", interface_report_tan_index);
|
||||
}
|
||||
|
||||
void interface_report_rht(void)
|
||||
{
|
||||
if (interface_report_tan_index < 9)
|
||||
if (current_report_status == INTERFACE_REPORT_STATUS_NONE)
|
||||
{
|
||||
interface_report_tan_index++;
|
||||
if (current_cursor < 9)
|
||||
{
|
||||
current_cursor++;
|
||||
|
||||
if (current_cursor > current_max_index)
|
||||
{
|
||||
current_max_index = current_cursor;
|
||||
strcpy(current_char_set, char_set_uppercase);
|
||||
|
||||
current_char_index = 0;
|
||||
current_tan[current_cursor] = current_char_set[current_char_index];
|
||||
}
|
||||
else
|
||||
{
|
||||
interface_report_set_char_set();
|
||||
}
|
||||
}
|
||||
}
|
||||
ESP_LOGD(INTERFACE_LOG, "tan index %d", interface_report_tan_index);
|
||||
}
|
||||
|
||||
void interface_report_up(void)
|
||||
{
|
||||
if (interface_report_tan[interface_report_tan_index] > 0)
|
||||
if (current_report_status == INTERFACE_REPORT_STATUS_NONE)
|
||||
{
|
||||
interface_report_tan[interface_report_tan_index]--;
|
||||
}
|
||||
else
|
||||
{
|
||||
interface_report_tan[interface_report_tan_index] = 9;
|
||||
if (current_char_index == 0)
|
||||
{
|
||||
current_char_index = strlen(current_char_set) - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
current_char_index--;
|
||||
}
|
||||
|
||||
current_tan[current_cursor] = current_char_set[current_char_index];
|
||||
}
|
||||
}
|
||||
|
||||
void interface_report_dwn(void)
|
||||
{
|
||||
if (interface_report_tan[interface_report_tan_index] < 9)
|
||||
if (current_report_status == INTERFACE_REPORT_STATUS_NONE)
|
||||
{
|
||||
interface_report_tan[interface_report_tan_index]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
interface_report_tan[interface_report_tan_index] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void interface_report_display(void)
|
||||
{
|
||||
display_menu_headline( interface_get_label_text(&interface_text_headline_tan), false, 0);
|
||||
|
||||
// buttons
|
||||
display_set_button( interface_get_label_text(&interface_text_button_cancel), true, false);
|
||||
display_set_button( interface_get_label_text(&interface_text_button_ok), false, true);
|
||||
|
||||
static char tan_buffer[10] = {0};
|
||||
|
||||
if (interface_report_tan_index > 0)
|
||||
{
|
||||
display_data( display_gfx_arrow_left, 8, 3, 8, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
display_data( display_gfx_clear, 8, 3, 8, false);
|
||||
}
|
||||
|
||||
if (interface_report_tan_index < 9)
|
||||
{
|
||||
display_data( display_gfx_arrow_right, 8, 3, 112, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
display_data( display_gfx_clear, 8, 3, 112, false);
|
||||
}
|
||||
|
||||
for (int i = 0; i < interface_report_tan_index + 1; i++)
|
||||
{
|
||||
sprintf(&tan_buffer[i], "%d", interface_report_tan[i]);
|
||||
}
|
||||
|
||||
display_clear_line( 2, false);
|
||||
display_clear_line( 4, false);
|
||||
|
||||
display_text_line_column( "-", 3, 5, false);
|
||||
display_text_line_column( "-", 3, 9, false);
|
||||
display_text_line_column( "___", 3, 2, false);
|
||||
display_text_line_column( "___", 3, 6, false);
|
||||
display_text_line_column( "____", 3, 10, false);
|
||||
|
||||
int offset = 2;
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
if (i < interface_report_tan_index)
|
||||
if (current_char_index == strlen(current_char_set) - 1)
|
||||
{
|
||||
display_chars( &tan_buffer[i], 1, 3, i + offset, true);
|
||||
current_char_index = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (interface_report_tan_index > 2)
|
||||
{
|
||||
offset = 3;
|
||||
for (int i = 3; i < 6; i++)
|
||||
else
|
||||
{
|
||||
if (i < interface_report_tan_index)
|
||||
{
|
||||
display_chars( &tan_buffer[i], 1, 3, i + offset, true);
|
||||
}
|
||||
current_char_index++;
|
||||
}
|
||||
|
||||
current_tan[current_cursor] = current_char_set[current_char_index];
|
||||
}
|
||||
|
||||
if (interface_report_tan_index > 5)
|
||||
{
|
||||
offset = 4;
|
||||
for (int i = 6; i < 10; i++)
|
||||
{
|
||||
if (i < interface_report_tan_index)
|
||||
{
|
||||
display_chars( &tan_buffer[i], 1, 3, i + offset, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
display_data( display_gfx_arrow_up, 8, 2, interface_report_tan_index * 8 + offset * 8, false);
|
||||
display_data( display_gfx_arrow_down, 8, 4, interface_report_tan_index * 8 + offset * 8, false);
|
||||
|
||||
display_chars( &tan_buffer[interface_report_tan_index], 1, 3, interface_report_tan_index + offset, false);
|
||||
}
|
||||
|
||||
void interface_report_start(void)
|
||||
{
|
||||
|
||||
display_utf8_to_ascii("ABCDEFGHIJKLMNOPQRSTUVWXYZ", char_set_uppercase);
|
||||
display_utf8_to_ascii("0123456789", char_set_numeric);
|
||||
|
||||
strcpy(current_char_set, char_set_uppercase);
|
||||
|
||||
current_report_status = INTERFACE_REPORT_STATUS_NONE;
|
||||
current_max_index = 0;
|
||||
current_char_index = 0;
|
||||
current_cursor = 0;
|
||||
current_tan[current_cursor] = current_char_set[current_char_index];
|
||||
|
||||
interface_register_command_callback(INTERFACE_COMMAND_RST, &interface_report_rst);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_SET, &interface_report_set);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_MID, &interface_report_mid);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_LFT, &interface_report_lft);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_RHT, &interface_report_rht);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_UP, &interface_report_up);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_DWN, &interface_report_dwn);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_MID, NULL);
|
||||
interface_set_display_function(&interface_report_display);
|
||||
interface_set_display_refresh_function(NULL);
|
||||
|
||||
ESP_LOGD(INTERFACE_LOG, "start report interface");
|
||||
}
|
||||
|
||||
@@ -33,6 +33,17 @@ typedef enum
|
||||
} interface_settings_state_t;
|
||||
|
||||
static int current_interface_settings_state;
|
||||
static int current_timezone_offset = 0;
|
||||
|
||||
int interface_get_timezone_offset(void)
|
||||
{
|
||||
return current_timezone_offset;
|
||||
}
|
||||
|
||||
void interface_set_timezone_offset(int timezone_offset)
|
||||
{
|
||||
current_timezone_offset = timezone_offset;
|
||||
}
|
||||
|
||||
void interface_settings_set(void)
|
||||
{
|
||||
@@ -45,12 +56,12 @@ void interface_settings_rst(void)
|
||||
|
||||
void interface_settings_lft(void)
|
||||
{
|
||||
interface_data_start();
|
||||
interface_info_start();
|
||||
}
|
||||
|
||||
void interface_settings_rht(void)
|
||||
{
|
||||
interface_datetime_start();
|
||||
interface_wifi_start();
|
||||
}
|
||||
|
||||
void interface_settings_mid(void)
|
||||
@@ -62,12 +73,12 @@ void interface_settings_mid(void)
|
||||
current_interface_settings_state = INTERFACE_SETTINGS_LOCALE;
|
||||
}
|
||||
|
||||
display_clear_line( 2, false);
|
||||
display_clear_line( 3, false);
|
||||
display_clear_line( 4, false);
|
||||
display_clear_line( 5, false);
|
||||
display_clear_line( 6, false);
|
||||
display_clear_line( 7, false);
|
||||
display_clear_line(2, false);
|
||||
display_clear_line(3, false);
|
||||
display_clear_line(4, false);
|
||||
display_clear_line(5, false);
|
||||
display_clear_line(6, false);
|
||||
display_clear_line(7, false);
|
||||
}
|
||||
|
||||
void interface_settings_up(void)
|
||||
@@ -83,6 +94,14 @@ void interface_settings_up(void)
|
||||
interface_set_locale(interface_get_locale() - 1);
|
||||
}
|
||||
}
|
||||
else if (current_interface_settings_state == INTERFACE_SETTINGS_TIMEZONE)
|
||||
{
|
||||
current_timezone_offset++;
|
||||
if (current_timezone_offset > 12)
|
||||
{
|
||||
current_timezone_offset = -11;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void interface_settings_dwn(void)
|
||||
@@ -99,34 +118,72 @@ void interface_settings_dwn(void)
|
||||
interface_set_locale(interface_get_locale() + 1);
|
||||
}
|
||||
}
|
||||
else if (current_interface_settings_state == INTERFACE_SETTINGS_TIMEZONE)
|
||||
{
|
||||
current_timezone_offset--;
|
||||
if (current_timezone_offset < -11)
|
||||
{
|
||||
current_timezone_offset = 12;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void interface_settings_display(void)
|
||||
{
|
||||
display_menu_headline( interface_get_label_text(&interface_text_headline_settings), true, 0);
|
||||
display_menu_headline(interface_get_label_text(&interface_text_headline_settings), true, 0);
|
||||
|
||||
display_text_line_column( interface_get_label_text(&interface_text_settings_locale), 3, 1, false);
|
||||
display_text_line_column(interface_get_label_text(&interface_text_settings_locale), 3, 1, false);
|
||||
|
||||
display_text_line_column( interface_get_label_text(&interface_text_settings_timezone), 6, 1, false);
|
||||
display_text_line_column(interface_get_label_text(&interface_text_settings_timezone), 6, 1, false);
|
||||
|
||||
if (current_interface_settings_state == INTERFACE_SETTINGS_LOCALE)
|
||||
{
|
||||
display_data( display_gfx_arrow_up, 8, 2, 12 * 8 + 4, false);
|
||||
display_data(display_gfx_arrow_up, 8, 2, 11 * 8 + 4, false);
|
||||
display_text_line_column(
|
||||
interface_get_label_text(&interface_text_settings_locales[interface_get_locale()]), 3, 12, true);
|
||||
display_data( display_gfx_arrow_down, 8, 4, 12 * 8 + 4, false);
|
||||
interface_get_label_text(&interface_text_settings_locales[interface_get_locale()]), 3, 11, true);
|
||||
display_data(display_gfx_arrow_down, 8, 4, 11 * 8 + 4, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
display_text_line_column(
|
||||
interface_get_label_text(&interface_text_settings_locales[interface_get_locale()]), 3, 12, true);
|
||||
interface_get_label_text(&interface_text_settings_locales[interface_get_locale()]), 3, 11, false);
|
||||
}
|
||||
|
||||
char timezone_char[32];
|
||||
timezone_char[0] = ' ';
|
||||
if (current_timezone_offset == 0)
|
||||
{
|
||||
timezone_char[0] = ' ';
|
||||
sprintf(&timezone_char[1], "%d", current_timezone_offset);
|
||||
timezone_char[2] = ' ';
|
||||
}
|
||||
else if (current_timezone_offset > 0)
|
||||
{
|
||||
timezone_char[0] = '+';
|
||||
sprintf(&timezone_char[1], "%d", current_timezone_offset);
|
||||
if (current_timezone_offset < 10)
|
||||
{
|
||||
timezone_char[2] = ' ';
|
||||
}
|
||||
}
|
||||
else if (current_timezone_offset < 0)
|
||||
{
|
||||
sprintf(&timezone_char[0], "%d", current_timezone_offset);
|
||||
if (current_timezone_offset > -10)
|
||||
{
|
||||
timezone_char[2] = ' ';
|
||||
}
|
||||
}
|
||||
|
||||
if (current_interface_settings_state == INTERFACE_SETTINGS_TIMEZONE)
|
||||
{
|
||||
|
||||
display_data( display_gfx_arrow_up, 8, 5, 12 * 8 + 4, false);
|
||||
display_data( display_gfx_arrow_down, 8, 7, 12 * 8 + 4, false);
|
||||
display_data(display_gfx_arrow_up, 8, 5, 7 * 8, false);
|
||||
display_chars(timezone_char, 3, 6, 6, true);
|
||||
display_data(display_gfx_arrow_down, 8, 7, 7 * 8, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
display_chars(timezone_char, 3, 6, 6, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,6 +199,7 @@ void interface_settings_start(void)
|
||||
interface_register_command_callback(INTERFACE_COMMAND_UP, &interface_settings_up);
|
||||
interface_register_command_callback(INTERFACE_COMMAND_DWN, &interface_settings_dwn);
|
||||
interface_set_display_function(&interface_settings_display);
|
||||
interface_set_display_refresh_function(NULL);
|
||||
|
||||
ESP_LOGD(INTERFACE_LOG, "start settings interface");
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ void interface_wifi_input_set(char *text, uint8_t cursor)
|
||||
|
||||
ESP_LOGD(INTERFACE_LOG, "ssid: '%s' password '%s'", current_wifi_config.sta.ssid, current_wifi_config.sta.password);
|
||||
|
||||
if (wifi_controller_connect(current_wifi_config) == ESP_OK)
|
||||
if (wifi_controller_connect(current_wifi_config, NULL) == ESP_OK)
|
||||
{
|
||||
interface_main_start();
|
||||
}
|
||||
@@ -63,19 +63,18 @@ void interface_wifi_set(void)
|
||||
|
||||
void interface_wifi_lft(void)
|
||||
{
|
||||
interface_datetime_start();
|
||||
interface_settings_start();
|
||||
}
|
||||
|
||||
void interface_wifi_rht(void)
|
||||
{
|
||||
interface_data_start();
|
||||
interface_datetime_start();
|
||||
}
|
||||
void interface_wifi_mid(void)
|
||||
{
|
||||
memset(¤t_wifi_config, 0, sizeof(wifi_config_t));
|
||||
memcpy(current_wifi_config.sta.ssid, ap_info[ap_selected].ssid, strlen((char *)ap_info[ap_selected].ssid));
|
||||
interface_input(&interface_wifi_input_rst, &interface_wifi_input_set, 64);
|
||||
interface_input_set_text("muffimuffi");
|
||||
}
|
||||
void interface_wifi_up(void)
|
||||
{
|
||||
@@ -114,13 +113,16 @@ void interface_wifi_dwn(void)
|
||||
|
||||
void interface_wifi_display(void)
|
||||
{
|
||||
display_menu_headline( interface_get_label_text(&interface_text_headline_wifi), true, 0);
|
||||
display_menu_headline(interface_get_label_text(&interface_text_headline_wifi), true, 0);
|
||||
}
|
||||
|
||||
void interface_wifi_display_refresh(void)
|
||||
{
|
||||
if (ap_count > 0)
|
||||
{
|
||||
display_clear_line( 2, false);
|
||||
display_clear_line( 4, false);
|
||||
display_clear_line( 6, false);
|
||||
display_clear_line(2, false);
|
||||
display_clear_line(4, false);
|
||||
display_clear_line(6, false);
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
int index = i + ap_index;
|
||||
@@ -128,36 +130,36 @@ void interface_wifi_display(void)
|
||||
{
|
||||
if (index == ap_selected)
|
||||
{
|
||||
display_data( display_gfx_arrow_right, 8, i * 2 + 2, 8, false);
|
||||
display_data(display_gfx_arrow_right, 8, i * 2 + 2, 8, false);
|
||||
}
|
||||
|
||||
if (sizeof(ap_info[i].ssid) > 0)
|
||||
{
|
||||
display_text_line_column( (char *)ap_info[index].ssid, i * 2 + 2, 2, false);
|
||||
display_text_line_column((char *)ap_info[index].ssid, i * 2 + 2, 2, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
display_text_line_column( " / ", i * 2 + 2, 2, false);
|
||||
display_text_line_column(" / ", i * 2 + 2, 2, false);
|
||||
}
|
||||
|
||||
if (ap_info[index].rssi >= -67)
|
||||
{
|
||||
display_data( display_gfx_wifi, 8, i * 2 + 2, 112, false);
|
||||
display_data(display_gfx_wifi, 8, i * 2 + 2, 112, false);
|
||||
}
|
||||
else if (ap_info[index].rssi >= -80)
|
||||
{
|
||||
display_data( display_gfx_wifi_low, 8, i * 2 + 2, 112, false);
|
||||
display_data(display_gfx_wifi_low, 8, i * 2 + 2, 112, false);
|
||||
}
|
||||
else if (ap_info[index].rssi >= -90)
|
||||
{
|
||||
display_data( display_gfx_wifi_lowest, 8, i * 2 + 2, 112, false);
|
||||
display_data(display_gfx_wifi_lowest, 8, i * 2 + 2, 112, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
display_text_line_column( interface_get_label_text(&interface_text_wifi_scanning), 4, 1, false);
|
||||
display_text_line_column(interface_get_label_text(&interface_text_wifi_scanning), 4, 1, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,6 +174,8 @@ void interface_wifi_start(void)
|
||||
interface_register_command_callback(INTERFACE_COMMAND_RST, NULL);
|
||||
|
||||
interface_set_display_function(&interface_wifi_display);
|
||||
interface_set_display_refresh_function(&interface_wifi_display_refresh);
|
||||
interface_wifi_display();
|
||||
|
||||
ESP_LOGD(INTERFACE_LOG, "start wifi interface and scanning");
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <stdio.h>
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include <freertos/timers.h>
|
||||
#include "driver/gpio.h"
|
||||
#include "esp_log.h"
|
||||
|
||||
@@ -24,6 +25,10 @@
|
||||
|
||||
static interface_command_callback command_callbacks[INTERFACE_COMMANDS_SIZE];
|
||||
static interface_display_function current_display_function;
|
||||
static interface_display_function current_display_refresh_function;
|
||||
|
||||
static TimerHandle_t interface_idle_timer;
|
||||
static bool interface_idle = false;
|
||||
|
||||
void interface_register_command_callback(interface_command_t command, interface_command_callback callback)
|
||||
{
|
||||
@@ -36,30 +41,70 @@ void interface_set_display_function(interface_display_function display_function)
|
||||
current_display_function = display_function;
|
||||
}
|
||||
|
||||
void interface_set_display_refresh_function(interface_display_function display_function)
|
||||
{
|
||||
display_clear();
|
||||
current_display_refresh_function = display_function;
|
||||
}
|
||||
|
||||
void interface_execute_command(interface_command_t command)
|
||||
{
|
||||
if (command_callbacks[command] != NULL)
|
||||
if (!interface_idle && command_callbacks[command] != NULL)
|
||||
{
|
||||
display_clear();
|
||||
xTimerReset(interface_idle_timer, 0);
|
||||
(*command_callbacks[command])();
|
||||
if (current_display_function != NULL || current_display_refresh_function != NULL)
|
||||
{
|
||||
display_clear();
|
||||
if (current_display_refresh_function != NULL)
|
||||
{
|
||||
vTaskDelay(10 / portTICK_PERIOD_MS);
|
||||
(*current_display_refresh_function)();
|
||||
}
|
||||
if (current_display_function != NULL)
|
||||
{
|
||||
vTaskDelay(10 / portTICK_PERIOD_MS);
|
||||
(*current_display_function)();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (interface_idle && command == INTERFACE_COMMAND_SET)
|
||||
{
|
||||
xTimerReset(interface_idle_timer, 0);
|
||||
interface_idle = false;
|
||||
display_on(true);
|
||||
}
|
||||
}
|
||||
|
||||
void interface_display_task(void *pvParameter)
|
||||
{
|
||||
xTimerStart(interface_idle_timer, 0);
|
||||
|
||||
while (1)
|
||||
{
|
||||
if (current_display_function != NULL)
|
||||
if (current_display_refresh_function != NULL)
|
||||
{
|
||||
(*current_display_function)();
|
||||
(*current_display_refresh_function)();
|
||||
}
|
||||
vTaskDelay(500 / portTICK_PERIOD_MS);
|
||||
}
|
||||
}
|
||||
|
||||
void interface_idle_callback(TimerHandle_t timer)
|
||||
{
|
||||
display_on(false);
|
||||
interface_idle = true;
|
||||
}
|
||||
|
||||
void interface_start(void)
|
||||
{
|
||||
xTaskCreate(&interface_display_task, "interface_display_task", 4096, NULL, 5, NULL);
|
||||
|
||||
interface_idle_timer = xTimerCreate(
|
||||
"interface_idle",
|
||||
(15 * 1000) / portTICK_PERIOD_MS,
|
||||
false,
|
||||
NULL,
|
||||
interface_idle_callback);
|
||||
|
||||
// init label
|
||||
interface_init_label();
|
||||
@@ -71,4 +116,6 @@ void interface_start(void)
|
||||
{
|
||||
display_data(display_gfx_logo[i], 64, i, 32, false);
|
||||
}
|
||||
|
||||
xTaskCreate(&interface_display_task, "interface_display_task", 4096, NULL, 5, NULL);
|
||||
}
|
||||
|
||||
@@ -24,8 +24,6 @@
|
||||
|
||||
#define INTERFACE_LOG "INTERFACE" // TAG for Logging
|
||||
|
||||
|
||||
|
||||
#define INTERFACE_FORMAT_TIME "%X"
|
||||
|
||||
#define INTERFACE_NUM_LOCALE 2
|
||||
@@ -64,23 +62,37 @@ typedef struct
|
||||
// label variables
|
||||
interface_label_t interface_text_button_cancel;
|
||||
interface_label_t interface_text_button_ok;
|
||||
interface_label_t interface_text_button_back;
|
||||
interface_label_t interface_text_button_menu;
|
||||
interface_label_t interface_text_button_report;
|
||||
|
||||
interface_label_t interface_text_headline_tan;
|
||||
interface_label_t interface_text_headline_report;
|
||||
interface_label_t interface_text_headline_wifi;
|
||||
interface_label_t interface_text_headline_time;
|
||||
interface_label_t interface_text_headline_data;
|
||||
interface_label_t interface_text_headline_settings;
|
||||
interface_label_t interface_text_headline_info;
|
||||
interface_label_t interface_text_headline_debug;
|
||||
|
||||
interface_label_t interface_text_settings_locale;
|
||||
interface_label_t interface_text_settings_locales[INTERFACE_NUM_LOCALE];
|
||||
interface_label_t interface_text_settings_timezone;
|
||||
|
||||
interface_label_t interface_text_info_num_keys;
|
||||
interface_label_t interface_text_info_exp_update;
|
||||
interface_label_t interface_text_info_exp_days;
|
||||
interface_label_t interface_text_info_exp_num;
|
||||
interface_label_t interface_text_info_exp_max;
|
||||
interface_label_t interface_text_info_exp_sum;
|
||||
|
||||
interface_label_t interface_text_report_pending;
|
||||
interface_label_t interface_text_report_success;
|
||||
interface_label_t interface_text_report_fail;
|
||||
|
||||
interface_label_t interface_text_wifi_scanning;
|
||||
|
||||
interface_label_t interface_text_data_del[5];
|
||||
interface_label_t interface_text_data_del[6];
|
||||
|
||||
interface_label_t interface_texts_weekday[7];
|
||||
|
||||
@@ -117,7 +129,7 @@ void interface_init_label(void);
|
||||
char *interface_get_label_text(interface_label_t *label);
|
||||
|
||||
/**
|
||||
* @brief set locale for interface
|
||||
* @brief get locale for interface
|
||||
*
|
||||
* @return
|
||||
* interface_locale_t current locale
|
||||
@@ -131,6 +143,21 @@ interface_locale_t interface_get_locale(void);
|
||||
*/
|
||||
void interface_set_locale(interface_locale_t locale);
|
||||
|
||||
/**
|
||||
* @brief get timezone offset for interface
|
||||
*
|
||||
* @return
|
||||
* int current timezone offset
|
||||
*/
|
||||
int interface_get_timezone_offset(void);
|
||||
|
||||
/**
|
||||
* @brief set timezone offset for interface
|
||||
*
|
||||
* @param[in] timezone_offset the timezone offset to set
|
||||
*/
|
||||
void interface_set_timezone_offset(int timezone_offset);
|
||||
|
||||
/**
|
||||
* @brief register a callback function for command event
|
||||
*
|
||||
@@ -153,6 +180,13 @@ void interface_execute_command(interface_command_t command);
|
||||
*/
|
||||
void interface_set_display_function(interface_display_function display_function);
|
||||
|
||||
/**
|
||||
* @brief set the display refresh function
|
||||
*
|
||||
* @param[in] display_function display function
|
||||
*/
|
||||
void interface_set_display_refresh_function(interface_display_function display_function);
|
||||
|
||||
/**
|
||||
* @brief start interface logic
|
||||
*
|
||||
@@ -190,6 +224,11 @@ void interface_wifi_start(void);
|
||||
*/
|
||||
void interface_settings_start(void);
|
||||
|
||||
/**
|
||||
* @brief start info interface
|
||||
*/
|
||||
void interface_info_start(void);
|
||||
|
||||
/**
|
||||
* @brief start interface for input
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user