131 lines
5.8 KiB
C
Executable File
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
|