| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- /*
- mui_u8g2.h
- Monochrome minimal user interface: Glue code between mui and u8g2.
- Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)
- Copyright (c) 2021, olikraus@gmail.com
- All rights reserved.
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
-
- * Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or other
- materials provided with the distribution.
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- #ifndef MUI_U8G2_H
- #define MUI_U8G2_H
- #include "mui.h"
- /*==========================================*/
- /* C++ compatible */
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define MUI_U8G2_COMMA ,
- typedef const char * (*mui_u8g2_get_list_element_cb)(void *data, uint16_t index);
- typedef uint16_t (*mui_u8g2_get_list_count_cb)(void *data);
- struct mui_u8g2_list_struct
- {
- uint16_t *selection;
- void *data;
- mui_u8g2_get_list_element_cb get_list_element;
- mui_u8g2_get_list_count_cb get_list_count;
- } MUI_PROGMEM;
- typedef const struct mui_u8g2_list_struct mui_u8g2_list_t;
- #if defined(__GNUC__) && defined(__AVR__)
- # define mui_u8g2_list_get_selection_ptr(list) ((uint16_t *)mui_pgm_wread(&((list)->selection)))
- # define mui_u8g2_list_get_data_ptr(list) ((void *)mui_pgm_wread(&((list)->data)))
- # define mui_u8g2_list_get_element_cb(list) ((mui_u8g2_get_list_element_cb)mui_pgm_wread(&((list)->get_list_element)))
- # define mui_u8g2_list_get_count_cb(list) ((mui_u8g2_get_list_count_cb)mui_pgm_wread(&((list)->get_list_count)))
- #else
- # define mui_u8g2_list_get_selection_ptr(list) ((list)->selection)
- # define mui_u8g2_list_get_data_ptr(list) ((list)->data)
- # define mui_u8g2_list_get_element_cb(list) ((list)->get_list_element)
- # define mui_u8g2_list_get_count_cb(list) ((list)->get_list_count)
- #endif
- struct mui_u8g2_u8_min_max_struct
- {
- uint8_t *value;
- uint8_t min;
- uint8_t max;
- } MUI_PROGMEM;
- typedef const struct mui_u8g2_u8_min_max_struct mui_u8g2_u8_min_max_t;
- #if defined(__GNUC__) && defined(__AVR__)
- # define mui_u8g2_u8mm_get_min(u8mm) mui_pgm_read(&((u8mm)->min))
- # define mui_u8g2_u8mm_get_max(u8mm) mui_pgm_read(&((u8mm)->max))
- # define mui_u8g2_u8mm_get_valptr(u8mm) ((uint8_t *)mui_pgm_wread(&((u8mm)->value)))
- #else
- # define mui_u8g2_u8mm_get_min(u8mm) ((u8mm)->min)
- # define mui_u8g2_u8mm_get_max(u8mm) ((u8mm)->max)
- # define mui_u8g2_u8mm_get_valptr(u8mm) ((u8mm)->value)
- #endif
- /* helper functions */
- u8g2_uint_t mui_get_x(mui_t *ui);
- u8g2_uint_t mui_get_y(mui_t *ui);
- u8g2_t *mui_get_U8g2(mui_t *ui);
- u8g2_uint_t mui_u8g2_get_draw_button_pi_flags(mui_t *ui) MUI_NOINLINE;
- void mui_u8g2_draw_button_utf(mui_t *ui, u8g2_uint_t flags, u8g2_uint_t width, u8g2_uint_t padding_h, u8g2_uint_t padding_v, const char *text) MUI_NOINLINE;
- void mui_u8g2_draw_button_utf_pi(mui_t *ui, u8g2_uint_t width, u8g2_uint_t padding_h, const char *text);
- /* ready to use field functions */
- uint8_t mui_u8g2_draw_text(mui_t *ui, uint8_t msg);
- uint8_t mui_u8g2_btn_goto_wm_fi(mui_t *ui, uint8_t msg);
- uint8_t mui_u8g2_btn_goto_w2_fi(mui_t *ui, uint8_t msg);
- uint8_t mui_u8g2_btn_goto_w1_pi(mui_t *ui, uint8_t msg);
- uint8_t mui_u8g2_btn_goto_w1_fi(mui_t *ui, uint8_t msg);
- uint8_t mui_u8g2_btn_exit_wm_fi(mui_t *ui, uint8_t msg);
- uint8_t mui_u8g2_u8_chkbox_wm_pi(mui_t *ui, uint8_t msg); /* MUIF_VARIABLE, MUI_XY */
- uint8_t mui_u8g2_u8_radio_wm_pi(mui_t *ui, uint8_t msg); /* MUIF_VARIABLE,MUI_XYAT */
- uint8_t mui_u8g2_u8_opt_line_wa_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_VARIABLE,MUI_XYAT */
- uint8_t mui_u8g2_u8_opt_line_wa_mud_pi(mui_t *ui, uint8_t msg); /* MUIF_VARIABLE,MUI_XYAT */
- uint8_t mui_u8g2_u8_opt_parent_wm_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_VARIABLE, MUI_XYAT */
- uint8_t mui_u8g2_u8_opt_radio_child_wm_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_VARIABLE, MUI_XYA */
- uint8_t mui_u8g2_u8_opt_radio_child_w1_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_VARIABLE, MUI_XYA */
- uint8_t mui_u8g2_u8_opt_child_wm_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_VARIABLE, MUI_XYA */
- uint8_t mui_u8g2_goto_parent(mui_t *ui, uint8_t msg); /* MUIF_RO */
- uint8_t mui_u8g2_goto_child_w1_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_BUTTON, MUI_XYA */
- uint8_t mui_u8g2_u8_char_wm_mud_pi(mui_t *ui, uint8_t msg); /* MUIF_VARIABLE,MUI_XY, usually requires a monospaced font line profont12 */
- /*===== data = mui_u8g2_u8_min_max_t* =====*/
- /* gcc note: the macro uses array compound literals to extend the lifetime in C++, see last section in https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html */
- #define MUIF_U8G2_U8_MIN_MAX(id, valptr, min, max, muif) \
- MUIF(id, MUIF_CFLAG_IS_CURSOR_SELECTABLE, \
- (void *)((mui_u8g2_u8_min_max_t [] ) {{ (valptr) MUI_U8G2_COMMA (min) MUI_U8G2_COMMA (max)}}), \
- (muif))
- uint8_t mui_u8g2_u8_min_max_wm_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U8_MIN_MAX, MUI_XY */
- uint8_t mui_u8g2_u8_min_max_wm_mud_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U8_MIN_MAX, MUI_XY */
- uint8_t mui_u8g2_u8_min_max_wm_mse_pf(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U8_MIN_MAX, MUI_XY */
- uint8_t mui_u8g2_u8_min_max_wm_mud_pf(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U8_MIN_MAX, MUI_XY */
- /*===== data = mui_u8g2_list_t* =====*/
- /* similar to mui_u8g2_u8_opt_line, but u16 and dynamic list */
- #define MUIF_U8G2_U16_LIST(id, valptr, dataptr, getcb, cntcb, muif) \
- MUIF(id, MUIF_CFLAG_IS_CURSOR_SELECTABLE, \
- (void *)((mui_u8g2_list_t [] ) {{ (valptr) MUI_U8G2_COMMA (dataptr) MUI_U8G2_COMMA (getcb) MUI_U8G2_COMMA (cntcb)}}), \
- (muif))
-
- uint8_t mui_u8g2_u16_list_line_wa_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U16_LIST, MUI_XYA, arg=pixel fieldsize */
- uint8_t mui_u8g2_u16_list_line_wa_mud_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U16_LIST, MUI_XYA, arg=pixel fieldsize */
- uint8_t mui_u8g2_u16_list_parent_wm_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U16_LIST, MUI_XYA, arg=subform */
- uint8_t mui_u8g2_u16_list_child_w1_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U16_LIST, MUI_XYA, arg=sub element number */
- uint8_t mui_u8g2_u16_list_goto_w1_mse_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U16_LIST first char of the string denotes the target form */
- #ifdef __cplusplus
- }
- #endif
- #endif /* MUI_U8G2_H */
|