esp-ena/components/interface/interface-data.c

218 lines
6.1 KiB
C
Raw Normal View History

2020-08-16 16:40:05 +02:00
// 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"
2020-08-16 16:40:05 +02:00
#include "ena-storage.h"
#include "interface.h"
typedef enum
{
INTERFACE_DATA_DEL_TEK = 0,
INTERFACE_DATA_DEL_EXPOSURE_INFO,
INTERFACE_DATA_DEL_TEMP_RPI,
INTERFACE_DATA_DEL_RPI,
INTERFACE_DATA_DEL_LAST_EXPOSURE,
INTERFACE_DATA_DEL_ALL,
} interface_data_state_t;
static int current_interface_data_state;
static int current_data_index;
static bool confirm_current;
void interface_data_set(void)
{
if (!confirm_current)
{
interface_main_start();
}
else
{
confirm_current = 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);
2020-08-16 16:40:05 +02:00
}
}
void interface_data_rst(void)
{
if (confirm_current)
{
switch (current_interface_data_state)
{
case INTERFACE_DATA_DEL_TEK:
ena_storage_erase_tek();
break;
case INTERFACE_DATA_DEL_EXPOSURE_INFO:
ena_storage_erase_exposure_information();
break;
case INTERFACE_DATA_DEL_TEMP_RPI:
ena_storage_erase_temporary_beacon();
break;
case INTERFACE_DATA_DEL_RPI:
ena_storage_erase_beacon();
break;
case INTERFACE_DATA_DEL_LAST_EXPOSURE:
ena_storage_write_last_exposure_date(0);
break;
case INTERFACE_DATA_DEL_ALL:
ena_storage_erase_all();
2020-08-16 16:40:05 +02:00
break;
}
confirm_current = 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);
}
else
{
display_clear_line(2, false);
display_clear_line(4, false);
display_clear_line(6, false);
confirm_current = true;
2020-08-16 16:40:05 +02:00
}
}
void interface_data_lft(void)
{
interface_datetime_start();
2020-08-16 16:40:05 +02:00
}
void interface_data_rht(void)
{
#if defined(CONFIG_ENA_INTERFACE_DEBUG)
interface_debug_start();
#else
interface_info_start();
#endif
2020-08-16 16:40:05 +02:00
}
void interface_data_mid(void)
{
if (!confirm_current)
{
display_clear_line(2, false);
display_clear_line(4, false);
display_clear_line(6, false);
2020-08-16 16:40:05 +02:00
confirm_current = true;
}
}
void interface_data_up(void)
{
current_interface_data_state--;
if (current_interface_data_state < INTERFACE_DATA_DEL_TEK)
{
current_interface_data_state = INTERFACE_DATA_DEL_ALL;
current_data_index = 3;
}
else if (current_interface_data_state < current_data_index)
{
current_data_index--;
}
display_clear_line(2, false);
display_clear_line(4, false);
display_clear_line(6, false);
2020-08-16 16:40:05 +02:00
}
void interface_data_dwn(void)
{
current_interface_data_state++;
if (current_interface_data_state > INTERFACE_DATA_DEL_ALL)
{
current_interface_data_state = INTERFACE_DATA_DEL_TEK;
current_data_index = 0;
}
else if (current_interface_data_state >= (current_data_index + 3))
{
current_data_index++;
}
display_clear_line(2, false);
display_clear_line(4, false);
display_clear_line(6, false);
2020-08-16 16:40:05 +02:00
}
void interface_data_display(void)
{
display_menu_headline(interface_get_label_text(&interface_text_headline_data), true, 0);
2020-08-16 16:40:05 +02:00
if (confirm_current)
{
display_text_line_column(interface_get_label_text(&interface_text_data_del[current_interface_data_state]), 2, 2, false);
display_text_line_column("?", 2, strlen(interface_get_label_text(&interface_text_data_del[current_interface_data_state])) + 2, false);
2020-08-16 16:40:05 +02:00
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);
2020-08-16 16:40:05 +02:00
}
else
{
display_clear_line(2, false);
display_clear_line(4, false);
display_clear_line(6, false);
2020-08-16 16:40:05 +02:00
for (int i = 0; i < 3; i++)
{
int index = i + current_data_index;
if (index <= INTERFACE_DATA_DEL_ALL)
{
if (index == current_interface_data_state)
{
display_data(display_gfx_arrow_right, 8, i * 2 + 2, 8, false);
}
else
{
display_data(display_gfx_clear, 8, i * 2 + 2, 8, false);
2020-08-16 16:40:05 +02:00
}
display_text_line_column(interface_get_label_text(&interface_text_data_del[index]), i * 2 + 2, 2, false);
2020-08-16 16:40:05 +02:00
}
}
}
}
void interface_data_start(void)
{
current_interface_data_state = INTERFACE_DATA_DEL_TEK;
interface_register_command_callback(INTERFACE_COMMAND_RST, &interface_data_rst);
interface_register_command_callback(INTERFACE_COMMAND_SET, &interface_data_set);
interface_register_command_callback(INTERFACE_COMMAND_LFT, &interface_data_lft);
interface_register_command_callback(INTERFACE_COMMAND_RHT, &interface_data_rht);
interface_register_command_callback(INTERFACE_COMMAND_MID, &interface_data_mid);
interface_register_command_callback(INTERFACE_COMMAND_UP, &interface_data_up);
interface_register_command_callback(INTERFACE_COMMAND_DWN, &interface_data_dwn);
2020-08-16 16:40:05 +02:00
interface_set_display_function(&interface_data_display);
2020-08-16 16:40:05 +02:00
}