Issue #28: Start GUI for Temp Profile execution

This commit is contained in:
Mario Hüttel 2021-03-21 21:07:54 +01:00
parent a25b249d77
commit 78b63c853f
5 changed files with 134 additions and 4 deletions

View File

@ -33,7 +33,7 @@
/ 2: Enable with LF-CRLF conversion. */ / 2: Enable with LF-CRLF conversion. */
#define FF_USE_FIND 0 #define FF_USE_FIND 1
/* This option switches filtered directory read functions, f_findfirst() and /* This option switches filtered directory read functions, f_findfirst() and
/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */ / f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */

View File

@ -87,4 +87,6 @@ void menu_list_scroll_up(struct menu_list *list);
void menu_list_enter_selected_entry(struct menu_list *list, struct lcd_menu *menu); void menu_list_enter_selected_entry(struct menu_list *list, struct lcd_menu *menu);
uint32_t menu_list_get_currently_selected(struct menu_list *list);
#endif /* __MENU_H__ */ #endif /* __MENU_H__ */

View File

@ -695,11 +695,37 @@ shellmatta_retCode_t shell_cmd_execute(const shellmatta_handle_t handle, const c
uint32_t dlen; uint32_t dlen;
(void)args; (void)args;
(void)len; (void)len;
int opt_stat;
char option;
char *argument;
uint32_t arg_len;
const char *script_name = NULL;
const shellmatta_opt_long_t options[] = {
{NULL, '\0', SHELLMATTA_OPT_ARG_NONE},
};
while (1) {
opt_stat = shellmatta_opt_long(handle, options, &option, &argument, &arg_len);
if (opt_stat != SHELLMATTA_OK)
break;
switch (option) {
case '\0':
script_name = argument;
break;
default:
break;
}
}
if (!script_name) {
shellmatta_printf(handle, "No script name specified!\r\n");
return SHELLMATTA_ERROR;
}
shellmatta_read(handle, &data, &dlen); shellmatta_read(handle, &data, &dlen);
if (!running) { if (!running) {
res = temp_profile_executer_start("profile.tpr"); res = temp_profile_executer_start(script_name);
if (res != PL_RET_SUCCESS) { if (res != PL_RET_SUCCESS) {
switch (res) { switch (res) {

View File

@ -36,6 +36,7 @@
#include <string.h> #include <string.h>
#include <inttypes.h> #include <inttypes.h>
#include <reflow-controller/oven-driver.h> #include <reflow-controller/oven-driver.h>
#include <fatfs/ff.h>
static char IN_SECTION(.ccm.bss) display_buffer[4][21] = {0}; static char IN_SECTION(.ccm.bss) display_buffer[4][21] = {0};
static struct lcd_menu IN_SECTION(.ccm.bss) reflow_menu; static struct lcd_menu IN_SECTION(.ccm.bss) reflow_menu;
@ -372,6 +373,98 @@ static void gui_menu_constant_temperature_driver(struct lcd_menu *menu, enum men
} }
/**
* @brief load_temperature_file_list_from_sdcard
* @return -1 File error, 0 successful
*/
static int load_temperature_file_list_from_sdcard(char (*list)[17], uint32_t len)
{
uint32_t i, j;
DIR directory;
FILINFO finfo;
FRESULT fres;
if (!list)
return -1001;
/* Zero out the list */
for (i = 0; i < len; i++) {
for (j = 0; j < sizeof(*list); j++) {
list[i][j] = 0;
}
}
/* find the frist file */
fres = f_findfirst(&directory, &finfo, "/", "*.tpr");
i = 0;
while (fres == FR_OK && finfo.fname[0]) {
strncpy(list[i], finfo.fname, sizeof(*list));
fres = f_findnext(&directory, &finfo);
i++;
if (i >= len)
break;
}
if (fres != FR_OK) {
return -1;
}
return (int)i;
}
static void gui_menu_temp_profile_select(struct lcd_menu *menu, enum menu_entry_func_entry entry_type, void *parent)
{
static void *my_parent;
static char profile_list[10][17];
static bool file_error = false;
static uint8_t currently_selected = 0U;
static uint8_t current_scroll_offset = 0U;
static uint8_t loaded;
int res;
if (entry_type == MENU_ENTRY_FIRST_ENTER) {
menu_display_clear(menu);
my_parent = parent;
res = load_temperature_file_list_from_sdcard(profile_list, 10);
file_error = false;
loaded = 0;
if (res < 0) {
file_error = true;
}
current_scroll_offset = 0u;
currently_selected = 0u;
loaded = (uint32_t)res;
menu_lcd_outputf(menu, 0, "Select:");
} else if (entry_type == MENU_ENTRY_DROPBACK) {
menu_entry_dropback(menu, my_parent);
return;
}
if (menu_get_button_ready_state(menu)) {
if (menu_get_button_state(menu) == BUTTON_LONG) {
menu_entry_dropback(menu, my_parent);
}
if (file_error) {
menu_lcd_outputf(menu, 0, "Disk Error");
menu_lcd_outputf(menu, 1, "SD inserted?");
if (menu_get_button_state(menu) == BUTTON_SHORT_RELEASED)
menu_entry_dropback(menu, my_parent);
return;
}
if (loaded == 0) {
menu_lcd_outputf(menu, 0, "No profiles");
menu_lcd_outputf(menu, 1, "found");
if (menu_get_button_state(menu) == BUTTON_SHORT_RELEASED)
menu_entry_dropback(menu, my_parent);
return;
}
}
}
static void gui_menu_constant_temperature_driver_setup(struct lcd_menu *menu, enum menu_entry_func_entry entry_type, void *parent) static void gui_menu_constant_temperature_driver_setup(struct lcd_menu *menu, enum menu_entry_func_entry entry_type, void *parent)
{ {
static void IN_SECTION(.ccm.bss) *my_parent; static void IN_SECTION(.ccm.bss) *my_parent;
@ -412,6 +505,7 @@ static void gui_menu_root_entry(struct lcd_menu *menu, enum menu_entry_func_entr
bool menu_changed = false; bool menu_changed = false;
static const char * const root_entry_names[] = { static const char * const root_entry_names[] = {
"Constant Temp", "Constant Temp",
"Temp Profile",
"Monitoring", "Monitoring",
"Error Flags", "Error Flags",
"About", "About",
@ -419,6 +513,7 @@ static void gui_menu_root_entry(struct lcd_menu *menu, enum menu_entry_func_entr
}; };
static const menu_func_t root_entry_funcs[] = { static const menu_func_t root_entry_funcs[] = {
gui_menu_constant_temperature_driver_setup, gui_menu_constant_temperature_driver_setup,
gui_menu_temp_profile_select,
gui_menu_monitor, gui_menu_monitor,
gui_menu_err_flags, gui_menu_err_flags,
gui_menu_about, gui_menu_about,

View File

@ -273,3 +273,10 @@ void menu_display_clear(struct lcd_menu *menu)
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
menu->update_display(i, ""); menu->update_display(i, "");
} }
uint32_t menu_list_get_currently_selected(struct menu_list *list)
{
if (!list)
return 0;
return list->currently_selected;
}