#include "jj_param.h" #include "page_ui_widget.h" #include "page.h" #include "math.h" #define LINE_HEAD 0 #define LINE_END DATA_NUM - 2 static char Text[] = "RealTime Param"; int event_flag = 0; int32_t index_power = 0; static int8_t Curser = LINE_HEAD; // 定义光标位置 static int8_t Curser_Last = LINE_HEAD; // 定义光标位置 void param_set(); void param_printf(); void param_change(uint8_t index, int param_event); /*************************************************************************************** * * 以下为页面模板函数 * ***************************************************************************************/ /** * @brief 页面初始化事件 * @param 无 * @retval 无 */ static void Setup() { ips200_clear(); param_set(); Print_Curser(Curser, Curser_Last, RGB565_PURPLE); } /** * @brief 页面退出事件 * @param 无 * @retval 无 */ static void Exit() { } /** * @brief 页面循环执行的内容 * @param 无 * @retval 无 */ static void Loop() { } /** * @brief 页面事件 * @param btn:发出事件的按键 * @param event:事件编号 * @retval 无 */ static void Event(page_event event) { if (0 == event_flag) { Curser_Last = Curser; if (page_event_forward == event) { Curser--; // 光标上移 } else if (page_event_backward == event) { Curser++; // 光标下移 } else if (page_event_press_short == event) { event_flag = 1; // 选中参数 Print_Curser(Curser, Curser_Last, RGB565_RED); return; } else if (page_event_press_long == event) { jj_param_write(); Page_Shift(page_menu); return; } if (Curser < LINE_HEAD) { Curser = LINE_END; } else if (Curser > LINE_END) { Curser = LINE_HEAD; } Print_Curser(Curser, Curser_Last, RGB565_PURPLE); } else if (1 == event_flag) { param_change(Curser, event); param_printf(); } } /** * @brief 页面注册函数 * * @param pageID */ void PageRegister_page_param(unsigned char pageID) { Page_Register(pageID, Text, Setup, Loop, Exit, Event); } /** * @brief 参数显示更新 * */ void param_printf() { if (EINT32 == Param_Data[Curser].type) ips200_show_int(50, Curser * 18 + 2, *((int32_t *)(Param_Data[Curser].p_data)), 5); else if (EUINT32 == Param_Data[Curser].type) ips200_show_uint(50, Curser * 18 + 2, *((uint32_t *)(Param_Data[Curser].p_data)), 5); else if (EFLOAT == Param_Data[Curser].type) ips200_show_float(50, Curser * 18 + 2, *((float *)(Param_Data[Curser].p_data)), 4, 5); } /** * @brief 参数初始化显示 * */ void param_set() { for (int16_t i = 0; i < DATA_NUM - 1; i++) { ips200_show_string(10, i * 18 + 2, Param_Data[i].text); if (Param_Data[i].type == EINT32) ips200_show_int(50, i * 18 + 2, *((int32_t *)(Param_Data[i].p_data)), 5); else if (Param_Data[i].type == EFLOAT) ips200_show_float(50, i * 18 + 2, *((float *)(Param_Data[i].p_data)), 4, 5); } ips200_show_int(50, (DATA_NUM - 1) * 18 + 2, index_power, 5); } /** * @brief 参数改变 * * @param index 当前指针所指参数索引 * @param param_event 触发事件 */ void param_change(uint8_t index, int param_event) { if (page_event_forward == param_event) { if (Param_Data[Curser].type == EFLOAT) { *((float *)(Param_Data[Curser].p_data)) += powf(10.0f, (float)index_power); } else if (Param_Data[Curser].type == EINT32) { *((int32_t *)(Param_Data[Curser].p_data)) += pow(10, index_power + 2); } else if (Param_Data[Curser].type == EUINT32) { *((uint32_t *)(Param_Data[Curser].p_data)) += pow(10, index_power + 2); } } else if (page_event_backward == param_event) { if (Param_Data[index].type == EFLOAT) { *((float *)(Param_Data[index].p_data)) -= powf(10.0f, (float)index_power); } else if (Param_Data[index].type == EINT32) { *((int32_t *)(Param_Data[index].p_data)) -= pow(10, index_power + 2); } else if (Param_Data[index].type == EUINT32) { *((uint32_t *)(Param_Data[index].p_data)) -= pow(10, index_power + 2); } } else if (page_event_press_short == param_event) { index_power++; if (index_power > 2) { index_power = -2; } ips200_show_int(50, (DATA_NUM - 1) * 18 + 2, index_power, 5); } else if (page_event_press_long == param_event) { event_flag = 0; // 回归选择参数事件 Print_Curser(Curser, Curser_Last, RGB565_PURPLE); } }