Files
2022-11-13 22:53:56 +01:00

131 lines
5.8 KiB
C
Executable File

#ifndef ULTI_LCD2_HI_LIB_H
#define ULTI_LCD2_HI_LIB_H
#include "UltiLCD2_low_lib.h"
#include "UltiLCD2_gfx.h"
typedef void (*menuFunc_t)();
typedef char* (*entryNameCallback_t)(uint8_t nr);
typedef void (*entryDetailsCallback_t)(uint8_t nr);
#define ENCODER_TICKS_PER_MAIN_MENU_ITEM 8
#define ENCODER_TICKS_PER_SCROLL_MENU_ITEM 4
#define ENCODER_NO_SELECTION (ENCODER_TICKS_PER_MAIN_MENU_ITEM * -11)
#define MAIN_MENU_ITEM_POS(n) (ENCODER_TICKS_PER_MAIN_MENU_ITEM * (n) + ENCODER_TICKS_PER_MAIN_MENU_ITEM / 2)
#define SCROLL_MENU_ITEM_POS(n) (ENCODER_TICKS_PER_SCROLL_MENU_ITEM * (n) + ENCODER_TICKS_PER_SCROLL_MENU_ITEM / 2)
#define SELECT_MAIN_MENU_ITEM(n) do { lcd_lib_encoder_pos = MAIN_MENU_ITEM_POS(n); } while(0)
#define SELECT_SCROLL_MENU_ITEM(n) do { lcd_lib_encoder_pos = SCROLL_MENU_ITEM_POS(n); } while(0)
#define SELECTED_MAIN_MENU_ITEM() (lcd_lib_encoder_pos / ENCODER_TICKS_PER_MAIN_MENU_ITEM)
#define SELECTED_SCROLL_MENU_ITEM() (lcd_lib_encoder_pos / ENCODER_TICKS_PER_SCROLL_MENU_ITEM)
#define IS_SELECTED_MAIN(n) ((n) == SELECTED_MAIN_MENU_ITEM())
#define IS_SELECTED_SCROLL(n) ((n) == SELECTED_SCROLL_MENU_ITEM())
void lcd_change_to_menu(menuFunc_t nextMenu, int16_t newEncoderPos = ENCODER_NO_SELECTION);
void lcd_tripple_menu(const char* left, const char* right, const char* bottom);
void lcd_basic_screen();
void lcd_info_screen(menuFunc_t cancelMenu, menuFunc_t callbackOnCancel = NULL, const char* cancelButtonText = NULL);
void lcd_question_screen(menuFunc_t optionAMenu, menuFunc_t callbackOnA, const char* AButtonText, menuFunc_t optionBMenu, menuFunc_t callbackOnB, const char* BButtonText);
void lcd_scroll_menu(const char* menuNameP, int8_t entryCount, entryNameCallback_t entryNameCallback, entryDetailsCallback_t entryDetailsCallback);
void lcd_progressbar(uint8_t progress);
void lcd_menu_edit_setting();
extern const char* lcd_setting_name;
extern const char* lcd_setting_postfix;
extern void* lcd_setting_ptr;
extern uint8_t lcd_setting_type;
extern int16_t lcd_setting_min;
extern int16_t lcd_setting_max;
extern int16_t lcd_setting_start_value;
extern menuFunc_t currentMenu;
extern menuFunc_t previousMenu;
extern menuFunc_t postMenuCheck;
extern int16_t previousEncoderPos;
extern uint8_t minProgress;
#define LCD_EDIT_SETTING(_setting, _name, _postfix, _min, _max) do { \
lcd_change_to_menu(lcd_menu_edit_setting); \
lcd_setting_name = PSTR(_name); \
lcd_setting_postfix = PSTR(_postfix); \
lcd_setting_ptr = &_setting; \
lcd_setting_type = sizeof(_setting); \
lcd_setting_start_value = lcd_lib_encoder_pos = _setting; \
lcd_setting_min = _min; \
lcd_setting_max = _max; \
} while(0)
#define LCD_EDIT_SETTING_BYTE_PERCENT(_setting, _name, _postfix, _min, _max) do { \
lcd_change_to_menu(lcd_menu_edit_setting); \
lcd_setting_name = PSTR(_name); \
lcd_setting_postfix = PSTR(_postfix); \
lcd_setting_ptr = &_setting; \
lcd_setting_type = 5; \
lcd_setting_start_value = lcd_lib_encoder_pos = int(_setting) * 100 / 255; \
lcd_setting_min = _min; \
lcd_setting_max = _max; \
} while(0)
#define LCD_EDIT_SETTING_FLOAT001(_setting, _name, _postfix, _min, _max) do { \
lcd_change_to_menu(lcd_menu_edit_setting); \
lcd_setting_name = PSTR(_name); \
lcd_setting_postfix = PSTR(_postfix); \
lcd_setting_ptr = &_setting; \
lcd_setting_type = 3; \
lcd_setting_start_value = lcd_lib_encoder_pos = (_setting) * 100.0 + 0.5; \
lcd_setting_min = (_min) * 100; \
lcd_setting_max = (_max) * 100; \
} while(0)
#define LCD_EDIT_SETTING_FLOAT100(_setting, _name, _postfix, _min, _max) do { \
lcd_change_to_menu(lcd_menu_edit_setting); \
lcd_setting_name = PSTR(_name); \
lcd_setting_postfix = PSTR("00" _postfix); \
lcd_setting_ptr = &(_setting); \
lcd_setting_type = 7; \
lcd_setting_start_value = lcd_lib_encoder_pos = (_setting) / 100 + 0.5; \
lcd_setting_min = (_min) / 100 + 0.5; \
lcd_setting_max = (_max) / 100 + 0.5; \
} while(0)
#define LCD_EDIT_SETTING_FLOAT1(_setting, _name, _postfix, _min, _max) do { \
lcd_change_to_menu(lcd_menu_edit_setting); \
lcd_setting_name = PSTR(_name); \
lcd_setting_postfix = PSTR(_postfix); \
lcd_setting_ptr = &(_setting); \
lcd_setting_type = 8; \
lcd_setting_start_value = lcd_lib_encoder_pos = (_setting) + 0.5; \
lcd_setting_min = (_min) + 0.5; \
lcd_setting_max = (_max) + 0.5; \
} while(0)
#define LCD_EDIT_SETTING_SPEED(_setting, _name, _postfix, _min, _max) do { \
lcd_change_to_menu(lcd_menu_edit_setting); \
lcd_setting_name = PSTR(_name); \
lcd_setting_postfix = PSTR(_postfix); \
lcd_setting_ptr = &(_setting); \
lcd_setting_type = 6; \
lcd_setting_start_value = lcd_lib_encoder_pos = (_setting) / 60 + 0.5; \
lcd_setting_min = (_min) / 60 + 0.5; \
lcd_setting_max = (_max) / 60 + 0.5; \
} while(0)
extern uint8_t led_glow;
extern uint8_t led_glow_dir;
#define LED_NORMAL() lcd_lib_led_color(48,48,60)
#define LED_GLOW() lcd_lib_led_color(8 + led_glow, 8 + led_glow, 32 + led_glow)
#define LED_GLOW_ERROR() lcd_lib_led_color(led_glow,128-led_glow,led_glow);
//If we have a heated bed, then the heated bed menu entries have a size of 1, else they have a size of 0.
#if TEMP_SENSOR_BED != 0
#define BED_MENU_OFFSET 1
#else
#define BED_MENU_OFFSET 0
#endif
#ifdef USE_CHANGE_TEMPERATURE
#define USE_CHANGE_TEMPERATURE_MENU_OFFSET 2
#else
#define USE_CHANGE_TEMPERATURE_MENU_OFFSET 0
#endif
#endif//ULTI_LCD2_HI_LIB_H