SD first attempt. Broken

This commit is contained in:
Alex Voinea 2019-11-20 20:25:51 +02:00
parent e2e32b455a
commit b3a587f5a4
5 changed files with 94 additions and 72 deletions

View File

@ -645,6 +645,7 @@ lcd_lcdupdate_func_t lcd_lcdupdate_func = 0;
static ShortTimer buttonBlanking; static ShortTimer buttonBlanking;
ShortTimer longPressTimer; ShortTimer longPressTimer;
LongTimer lcd_timeoutToStatus; LongTimer lcd_timeoutToStatus;
ShortTimer lcd_scrollTimer;
//! @brief Was button clicked? //! @brief Was button clicked?

View File

@ -102,6 +102,8 @@ extern uint8_t lcd_update_enabled;
extern LongTimer lcd_timeoutToStatus; extern LongTimer lcd_timeoutToStatus;
extern ShortTimer lcd_scrollTimer;
extern uint32_t lcd_next_update_millis; extern uint32_t lcd_next_update_millis;
extern uint8_t lcd_status_update_delay; extern uint8_t lcd_status_update_delay;

View File

@ -111,6 +111,15 @@ static void menu_back_no_reset(void)
} }
} }
void menu_back_no_feedback(void)
{
if (menu_depth > 0)
{
menu_depth--;
menu_goto(menu_stack[menu_depth].menu, menu_stack[menu_depth].position, false, true);
}
}
void menu_back_if_clicked(void) void menu_back_if_clicked(void)
{ {
if (lcd_clicked()) if (lcd_clicked())
@ -146,6 +155,16 @@ static void menu_submenu_no_reset(menu_func_t submenu)
} }
} }
void menu_submenu_scroll(menu_func_t submenu)
{
if (menu_depth < MENU_DEPTH_MAX)
{
menu_stack[menu_depth].menu = menu_menu;
menu_stack[menu_depth++].position = lcd_encoder;
menu_goto(submenu, menu_row, false, true);
}
}
uint8_t menu_item_ret(void) uint8_t menu_item_ret(void)
{ {
lcd_beeper_quick_feedback(); lcd_beeper_quick_feedback();

View File

@ -78,12 +78,16 @@ extern void menu_end(void);
extern void menu_back(void); extern void menu_back(void);
extern void menu_back(uint8_t nLevel); extern void menu_back(uint8_t nLevel);
extern void menu_back_no_feedback(void);
extern void menu_back_if_clicked(void); extern void menu_back_if_clicked(void);
extern void menu_back_if_clicked_fb(void); extern void menu_back_if_clicked_fb(void);
extern void menu_submenu(menu_func_t submenu); extern void menu_submenu(menu_func_t submenu);
extern void menu_submenu_scroll(menu_func_t submenu);
extern uint8_t menu_item_ret(void); extern uint8_t menu_item_ret(void);
//extern int menu_draw_item_printf_P(char type_char, const char* format, ...); //extern int menu_draw_item_printf_P(char type_char, const char* format, ...);

View File

@ -46,8 +46,8 @@
#include "first_lay_cal.h" #include "first_lay_cal.h"
int scrollstuff = 0; //filename scrolling
char longFilenameOLD[LONG_FILENAME_LENGTH]; const char* scrollPointer;
static void lcd_sd_updir(); static void lcd_sd_updir();
@ -313,7 +313,53 @@ bool bSettings; // flag (i.e. 'fake parameter'
const char STR_SEPARATOR[] PROGMEM = "------------"; const char STR_SEPARATOR[] PROGMEM = "------------";
static void lcd_filename_scroll() //this is a submenu
{
typedef struct
{
int8_t status;
int encoderInitial;
} _menu_data_t;
static_assert(sizeof(menu_data)>= sizeof(_menu_data_t),"_menu_data_t doesn't fit into menu_data");
_menu_data_t* _md = (_menu_data_t*)&(menu_data[0]);
if (_md->status == 0)
{
_md->status = 1;
_md->encoderInitial = lcd_encoder_diff / ENCODER_PULSES_PER_STEP;
lcd_scrollTimer.start();
}
if (LCD_CLICKED || (_md->encoderInitial != (lcd_encoder_diff / ENCODER_PULSES_PER_STEP))) //go back to sd_menu.
{
lcd_scrollTimer.stop();
// menu_depth--;
// menu_goto(menu_stack[menu_depth].menu, menu_stack[menu_depth].position + lcd_encoder_diff / ENCODER_PULSES_PER_STEP, false, true);
menu_back_no_feedback();
}
if(lcd_scrollTimer.expired(300))
{
uint8_t i = LCD_WIDTH - 1;
lcd_set_cursor(0, lcd_encoder);
lcd_print('>');
for (; i != 0; i--)
{
char c = *(scrollPointer + LCD_WIDTH - i);
if (c == '\0') break; //stop at the end of the string
else
{
lcd_print(c);
lcd_scrollTimer.start();
}
}
if (i != 0) //adds spaces if string is incomplete or at the end (instead of null).
{
lcd_space(i);
}
scrollPointer++;
}
}
/*
static void lcd_implementation_drawmenu_sdfile_selected(uint8_t row, const char* filename, char* longFilename) static void lcd_implementation_drawmenu_sdfile_selected(uint8_t row, const char* filename, char* longFilename)
{ {
char c; char c;
@ -372,21 +418,17 @@ static void lcd_implementation_drawmenu_sdfile_selected(uint8_t row, const char*
while(n--) while(n--)
lcd_print(' '); lcd_print(' ');
} }
static void lcd_implementation_drawmenu_sdfile(uint8_t row, const char* filename, char* longFilename) */
static void lcd_implementation_drawmenu_sdfile(uint8_t row, char* longFilename)
{ {
char c; char c;
uint8_t n = LCD_WIDTH - 1; uint8_t n = LCD_WIDTH - 1;
lcd_set_cursor(0, row); lcd_set_cursor(0, row);
lcd_print(' '); lcd_print((lcd_encoder == menu_item)?'>':' ');
if (longFilename[0] != '\0') while( ((c = *longFilename) != '\0') && (n>0) )
{
filename = longFilename;
longFilename[LCD_WIDTH-1] = '\0';
}
while( ((c = *filename) != '\0') && (n>0) )
{ {
lcd_print(c); lcd_print(c);
filename++; longFilename++;
n--; n--;
} }
while(n--) while(n--)
@ -441,9 +483,7 @@ static void lcd_implementation_drawmenu_sddirectory(uint8_t row, const char* fil
//#define MENU_ITEM_SDDIR(str, str_fn, str_fnl) MENU_ITEM(sddirectory, str, str_fn, str_fnl) //#define MENU_ITEM_SDDIR(str, str_fn, str_fnl) MENU_ITEM(sddirectory, str, str_fn, str_fnl)
//extern uint8_t menu_item_sddir(const char* str, const char* str_fn, char* str_fnl); //extern uint8_t menu_item_sddir(const char* str, const char* str_fn, char* str_fnl);
#define MENU_ITEM_SDFILE(str, str_fn, str_fnl) do { if (menu_item_sdfile(str, str_fn, str_fnl)) return; } while (0) #define MENU_ITEM_SDFILE(str_fn, str_fnl) do { if (menu_item_sdfile(str_fn, str_fnl)) return; } while (0)
//#define MENU_ITEM_SDFILE(str, str_fn, str_fnl) MENU_ITEM(sdfile, str, str_fn, str_fnl)
//extern uint8_t menu_item_sdfile(const char* str, const char* str_fn, char* str_fnl);
uint8_t menu_item_sddir(const char* str_fn, char* str_fnl) uint8_t menu_item_sddir(const char* str_fn, char* str_fnl)
@ -496,60 +536,18 @@ uint8_t menu_item_sddir(const char* str_fn, char* str_fnl)
#endif //NEW_SD_MENU #endif //NEW_SD_MENU
} }
static uint8_t menu_item_sdfile(const char* static uint8_t menu_item_sdfile(const char* str_fn, char* str_fnl)
#ifdef NEW_SD_MENU
str
#endif //NEW_SD_MENU
,const char* str_fn, char* str_fnl)
{ {
#ifdef NEW_SD_MENU
// printf_P(PSTR("menu sdfile\n"));
// str_fnl[19] = 0;
// printf_P(PSTR("menu file %d '%s' '%s'\n"), menu_row, str_fn, str_fnl);
if (menu_item == menu_line)
{
if (lcd_draw_update)
{
// printf_P(PSTR("menu file %d %d '%s'\n"), menu_row, menuData.sdcard_menu.viewState, str_fnl[0]?str_fnl:str_fn);
lcd_set_cursor(0, menu_row);
/* if (lcd_encoder == menu_item)
{
lcd_printf_P(PSTR("%c%-19s"), (lcd_encoder == menu_item)?'>':' ', (str_fnl[0]?str_fnl:str_fn) + 1);
if (menuData.sdcard_menu.viewState == 0)
{
menuData.sdcard_menu.viewState++;
lcd_printf_P(PSTR("%c%-19s"), (lcd_encoder == menu_item)?'>':' ', (str_fnl[0]?str_fnl:str_fn) + 1);
}
else if (menuData.sdcard_menu.viewState == 1)
{
lcd_printf_P(PSTR("%c%-19s"), (lcd_encoder == menu_item)?'>':' ', (str_fnl[0]?str_fnl:str_fn) + 2);
}
}
else*/
{
str_fnl[19] = 0;
lcd_printf_P(PSTR("%c%-19s"), (lcd_encoder == menu_item)?'>':' ', str_fnl[0]?str_fnl:str_fn);
}
// int cnt = lcd_printf_P(PSTR("%c%-19s"), (lcd_encoder == menu_item)?'>':' ', str_fnl);
// int cnt = lcd_printf_P(PSTR("%cTESTIK.gcode"), (lcd_encoder == menu_item)?'>':' ');
}
if (menu_clicked && (lcd_encoder == menu_item))
{
return menu_item_ret();
}
}
menu_item++;
return 0;
#else //NEW_SD_MENU
if (menu_item == menu_line) if (menu_item == menu_line)
{ {
if (lcd_draw_update) if (lcd_draw_update)
{ {
scrollPointer = (str_fnl[0] == '\0') ? str_fn : str_fnl;
if (lcd_encoder == menu_item) if (lcd_encoder == menu_item)
lcd_implementation_drawmenu_sdfile_selected(menu_row, str_fn, str_fnl); {
else if (lcd_scrollTimer.expired(1000)) menu_submenu_scroll(lcd_filename_scroll);
lcd_implementation_drawmenu_sdfile(menu_row, str_fn, str_fnl); }
else lcd_implementation_drawmenu_sdfile(menu_row, str_fnl);
} }
if (menu_clicked && (lcd_encoder == menu_item)) if (menu_clicked && (lcd_encoder == menu_item))
{ {
@ -560,7 +558,6 @@ static uint8_t menu_item_sdfile(const char*
} }
menu_item++; menu_item++;
return 0; return 0;
#endif //NEW_SD_MENU
} }
// Print temperature (nozzle/bed) (9 chars total) // Print temperature (nozzle/bed) (9 chars total)
@ -727,7 +724,7 @@ void lcdui_print_time(void)
//Print status line on status screen //Print status line on status screen
void lcdui_print_status_line(void) void lcdui_print_status_line(void)
{ {
if (IS_SD_PRINTING) /* if (IS_SD_PRINTING)
{ {
if (strcmp(longFilenameOLD, (card.longFilename[0] ? card.longFilename : card.filename)) != 0) if (strcmp(longFilenameOLD, (card.longFilename[0] ? card.longFilename : card.filename)) != 0)
{ {
@ -735,7 +732,7 @@ void lcdui_print_status_line(void)
sprintf_P(longFilenameOLD, PSTR("%s"), (card.longFilename[0] ? card.longFilename : card.filename)); sprintf_P(longFilenameOLD, PSTR("%s"), (card.longFilename[0] ? card.longFilename : card.filename));
scrollstuff = 0; scrollstuff = 0;
} }
} } */
if (heating_status) if (heating_status)
{ // If heating flag, show progress of heating { // If heating flag, show progress of heating
@ -780,7 +777,7 @@ void lcdui_print_status_line(void)
} }
else if ((IS_SD_PRINTING) && (custom_message_type == CustomMsg::Status)) else if ((IS_SD_PRINTING) && (custom_message_type == CustomMsg::Status))
{ // If printing from SD, show what we are printing { // If printing from SD, show what we are printing
if(strlen(longFilenameOLD) > LCD_WIDTH) /* if(strlen(longFilenameOLD) > LCD_WIDTH)
{ {
int inters = 0; int inters = 0;
int gh = scrollstuff; int gh = scrollstuff;
@ -806,7 +803,7 @@ void lcdui_print_status_line(void)
else else
{ {
lcd_printf_P(PSTR("%-20s"), longFilenameOLD); lcd_printf_P(PSTR("%-20s"), longFilenameOLD);
} } */
} }
else else
{ // Otherwise check for other special events { // Otherwise check for other special events
@ -4275,7 +4272,7 @@ static void prusa_stat_printinfo()
SERIAL_ECHO("][FEM:"); SERIAL_ECHO("][FEM:");
SERIAL_ECHO(itostr3(feedmultiply)); SERIAL_ECHO(itostr3(feedmultiply));
SERIAL_ECHO("][FNM:"); SERIAL_ECHO("][FNM:");
SERIAL_ECHO(longFilenameOLD); SERIAL_ECHO(card.longFilename);
SERIAL_ECHO("][TIM:"); SERIAL_ECHO("][TIM:");
if (starttime != 0) if (starttime != 0)
{ {
@ -7279,7 +7276,7 @@ void lcd_sdcard_menu()
return; // nothing to do (so don't thrash the SD card) return; // nothing to do (so don't thrash the SD card)
uint16_t fileCnt = card.getnrfilenames(); uint16_t fileCnt = card.getnrfilenames();
lcd_scrollTimer.start();
MENU_BEGIN(); MENU_BEGIN();
MENU_ITEM_BACK_P(_T(bMain?MSG_MAIN:MSG_BACK)); // i.e. default menu-item / menu-item after card insertion MENU_ITEM_BACK_P(_T(bMain?MSG_MAIN:MSG_BACK)); // i.e. default menu-item / menu-item after card insertion
card.getWorkDirName(); card.getWorkDirName();
@ -7309,11 +7306,10 @@ void lcd_sdcard_menu()
#else #else
card.getfilename(nr); card.getfilename(nr);
#endif #endif
if (card.filenameIsDir) if (card.filenameIsDir)
MENU_ITEM_SDDIR(card.filename, card.longFilename); MENU_ITEM_SDDIR(card.filename, card.longFilename);
else else
MENU_ITEM_SDFILE(_T(MSG_CARD_MENU), card.filename, card.longFilename); MENU_ITEM_SDFILE(card.filename, card.longFilename);
} else { } else {
MENU_ITEM_DUMMY(); MENU_ITEM_DUMMY();
} }