K1Guitar/UI/UI_UsbModeConfirm.c

85 lines
2.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "includes.h"
extern const Touch_AreaTypeDef *pCurrentTouch_Area;
const Touch_AreaTypeDef Touch_UsbConfirm_Areas[] =
{
{ 0, 44, 0, 40, 0, 0, GUI_CANCEL, NULL },
{ UI0902_USB_BTN_XL, (uint16_t)(UI0902_USB_BTN_XL + UI0902_USB_BTN_W - 1),
UI0902_USB_BTN_Y, (uint16_t)(UI0902_USB_BTN_Y + UI0902_USB_BTN_H - 1),
0, 0, GUI_CANCEL, NULL },
{ UI0902_USB_BTN_XR, (uint16_t)(UI0902_USB_BTN_XR + UI0902_USB_BTN_W - 1),
UI0902_USB_BTN_Y, (uint16_t)(UI0902_USB_BTN_Y + UI0902_USB_BTN_H - 1),
0, 0, GUI_CONFIRM, NULL },
};
#define TOUCH_AREA_USB_CONFIRM_NUM (sizeof(Touch_UsbConfirm_Areas)/sizeof(Touch_AreaTypeDef))
static void UI_UsbConfirm_RevertToMidi(void)
{
NvmParam_Type *nvm = drv_nvm_param_ptr();
mGuiData_SystemSETTING[GUI_USB_MODE].Current = NVM_USB_MIDI;
nvm->param.UsbMode = NVM_USB_MIDI;
drv_nvm_save_to_flash();
MenuPage_Setting_Proc();
}
void UI_UsbModeConfirm_Init(void)
{
UI_ClearFocus();
LCD_WR_PIC_FROM_FLASH(0, 0, UI0902_TXT_USB_CONFIRM_W, UI0902_TXT_USB_CONFIRM_H,
UI0902_TXT_USB_CONFIRM_ADDR);
UI_DrawSubPageHeader((const uint8_t *)"\xCF\xB5\xCD\xB3\xC9\xE8\xD6\xC3");
LCD_WR_PIC_FROM_FLASH(UI0902_USB_BTN_XL, UI0902_USB_BTN_Y,
UI0902_BTN_USB_CANCEL_DARK_W, UI0902_BTN_USB_CANCEL_DARK_H,
UI0902_BTN_USB_CANCEL_DARK_ADDR);
LCD_WR_PIC_FROM_FLASH(UI0902_USB_BTN_XR, UI0902_USB_BTN_Y,
UI0902_BTN_USB_CONFIRM_BLUE_W, UI0902_BTN_USB_CONFIRM_BLUE_H,
UI0902_BTN_USB_CONFIRM_BLUE_ADDR);
pCurrentTouch_Area = Touch_UsbConfirm_Areas;
}
void UI_UsbModeConfirm_Process(DisplayTaskMessage_Type msg)
{
uint8_t k;
NvmParam_Type *nvm;
switch (msg.MessageType)
{
case MSG_ID_TOUCH:
for (k = 0; k < TOUCH_AREA_USB_CONFIRM_NUM; k++)
{
if (msg.HiByte >= pCurrentTouch_Area[k].x_min &&
msg.HiByte <= pCurrentTouch_Area[k].x_max &&
msg.LoByte >= pCurrentTouch_Area[k].y_min &&
msg.LoByte <= pCurrentTouch_Area[k].y_max)
{
switch (pCurrentTouch_Area[k].ID)
{
case GUI_CANCEL:
UI_UsbConfirm_RevertToMidi();
break;
case GUI_CONFIRM:
nvm = drv_nvm_param_ptr();
nvm->param.UsbMode = NVM_USB_UPDATE;
/* 先记备份寄存器,再写 Flash。系统复位不清 BPR,
* Boot 不按圆键 4 也会留下烧录。关中断放在保存之后,
* 避免日志互斥在关中断后永远等不到超时。 */
drv_nvm_arm_usb_boot();
drv_nvm_save_to_flash();
__disable_irq();
nvic_system_reset();
break;
default:
break;
}
ResetAutoPowerCount();
break;
}
}
break;
default:
break;
}
}