#ifndef __GLOBAL_H__ #define __GLOBAL_H__ #define MSG_ID_POWER_ON 0 #define MSG_ID_POWER_OFF 1 #define MSG_TYPE_MN_TASK 2 #define MSG_TYPE_UI_TASK 3 #define MSG_TYPE_BL_TASK 4 #define MSG_ID_TM1629_KEY 10 #define MSG_ID_TM1617_KEY 11 #define MSG_ID_TOUCH 12 #define MSG_ID_TOUCH_LONG_REPEAT 13 #define MSG_ID_BP_KEY 14 #define MSG_ID_ADCIN1KEY 15 #define MSG_ID_HP_SPK_IN 16 #define MSG_ID_EC_VOL 17 #define MSG_ID_BATTERY_VALUE 18 #define MSG_ID_POWOFF_CHARG 19 #define MSG_ID_LIGHT_LED 20 #define MSG_ID_PITCH_OFFSET 21 #define MSG_ID_KEY_1617 22 #define MSG_ID_CHORD_OFFSET 23 #define MSG_ID_BP_TRANSPOSE 24 #define MSG_ID_TAP_SPEED 25 #define MSG_ID_LOOP_LIGHT 26 #define MSG_ID_CHARG 27 #define MSG_ID_BLE_UI_REFRESH 28 #define MSG_ID_BLE_STYLE_SET 29 #define MSG_ID_LOW_BAT_TIP 30 #define MSG_ID_STOP_BAND 31 /* 停止键/收束:MainTask 串行硬停 */ #define MSG_ID_START_FOLLOWUP 32 /* 保留:软停补发已撤销,不再使用 */ #define MSG_ID_HEAVY_BOOT 33 /* 包电压高于 6.8V 后才点开机灯并初始化音源 */ #define GPIO_PIN_RESET false #define GPIO_PIN_SET true #define HAL_GPIO_ReadPin(gpio_x, pins) gpio_output_data_bit_read(gpio_x, pins) #define HAL_GPIO_WritePin(gpio_x, pins, flag) gpio_bits_write(gpio_x,pins,flag) #define GPIO_InitStruct gpio_init_struct typedef struct { uint16_t MessageType; uint16_t ID; // Key ID / Encorder ID uint16_t HiByte; uint16_t LoByte; }DisplayTaskMessage_Type; typedef struct { uint8_t x; uint8_t w; // Сд w uint8_t y; uint8_t h; const unsigned char *p; uint8_t Tab_Align; // ��д A uint16_t Tab_fc; // ��ɫ���� 16λ�� uint16_t Tab_bc; uint8_t Tab_size; uint8_t Text_Align; uint16_t Text_fc; uint16_t Text_bc; uint8_t Text_size; uint8_t Id; } LEBEL_UI; typedef struct { uint16_t Current; uint16_t Min; uint16_t Max; uint16_t Id; }GUI_SWITCH; // �������ṹ�� typedef struct { uint16_t x_min; // X��С uint16_t x_max; // X��� uint16_t y_min; // Y��С uint16_t y_max; // Y��� int8_t Flag; //-1-�� 1-�� uint8_t Value; uint8_t ID; void (*action)(uint8_t,const LEBEL_UI *,GUI_SWITCH *); // ������ִ�еĺ��� } Touch_AreaTypeDef; // ���ӿؼ��ṹ�壨��ȫ�����ͼ��240x320���� typedef struct { uint16_t x; // ���Ӳ����Ͻ�X uint16_t y; // ���Ӳ����Ͻ�Y uint16_t w; // ���Ӳۿ��� uint16_t h; // ���Ӳ��ܸ߶� uint8_t val; // ��ǰֵ 0~10��0=���£�10=���ϣ� uint8_t id; // ��� 0~3 uint16_t prev_slider_y; // �ϴλ���Y���꣬��������ˢ�� char name[8]; // ���ӱ��⣨MIX/STR/MIC/REV�� } Fader_t; typedef enum { GUI_TRANSPOSE = 0, GUI_SPEED, GUI_MODE_PARAM, GUI_TIMBRE_SELECT, GUI_PLAY_SECTION=4, GUI_TAB_INDEX, GUI_AUTOBAND_SW, GUI_BL_SW, GUI_TAB_LAST_INDEX, GUI_NAV_BAR, /* 0902 底栏:Value 0万能 1普通 2专业 3设置 */ }GUIID; typedef enum { SONG_MODE_PARAM = 0, EXPRESS_MODE_PARAM = 1, ALL_MODE_PARAM = 2, }PARAM_ID; // TAB �������� typedef enum { TAB_A = 0, // ���� TAB_B = 1, // ���� TAB_C = 2, // ���� TAB_D = 3, // ���� } TAB_SECTION_INDEX; typedef enum { GUI_VERSION = 0, GUI_USB_MODE = 1, GUI_AUTOCLOSE = 2, GUI_RESTORE = 3, GUI_BLUETOOTH_SW = 4, /* 不在设置列表绘制;状态栏 / NVM 同步 */ GUI_CANCEL, GUI_CONFIRM, GUI_LANGUAGE_PICK, }GUI_SYSTEMSETTING_ID; // ��ɫ���壨�ͽ�ͼ��ȫһ�£� #define FADER_BG 0x001F // ���Ӳ۱��������� #define FADER_GREEN 0x07E0 // ��ɫ�� #define FADER_YELLOW 0xFFE0 // ��ɫ�� #define FADER_RED 0xF800 // ��ɫ�� #define FADER_SLIDER 0x039F // ������ɫ #define FADER_TEXT 0xFFFF // ���ְ�ɫ extern rt_mutex_t TM1629_Mutex; extern rt_mutex_t TM1617_Mutex; extern rt_mq_t MainTask_msg; extern rt_mq_t UITask_msg; extern rt_mq_t BLTask_msg; extern rt_sem_t UART4_sem; extern rt_timer_t OutTime_Stop_timer; extern uint8_t KEY_ID_1629; extern bool powon; void Power_Key_Scan(void); void Power_Key_IsrTick(void); void Power_Key_FaultLoop(void); void Power_Key_WatchdogInit(void); void Power_Key_ConsumePress(void); void PowerOff_CutRails(void); void AutoPowerOff_Scan(void); void System_PowerOn(void); /* 彩灯一开始就请求上电;主循环执行,不堵 UI。未就绪前禁止进模式起奏 */ void System_RequestAudioBringUp(void); void System_AudioBringUp_Poll(void); uint8_t Audio_IsReady(void); uint8_t Audio_BringupStarted(void); void Audio_AbortIfNotReady(void); void Power_ChargeIdle_LogPoll(void); /* 高于 6.8V:充电页背光保持;低于等于 6.8V:亮 10s 后关屏。拔电时复位倒计时。 */ void Power_ChargeBacklightSteady(void); void Power_ChargeBacklightLowHold(void); void Power_ChargeBacklightSessionReset(void); /* 读回各路电源输出电平:main/dream/v12/bt 为 1=开;chg 为 1=充电使能(低有效) */ void Power_LogRails(const char *where); void System_RequestPowerOff(void); void System_PowerOff_Poll(void); /* 低电量:停声+提示后 10s 关机(主循环 Poll) */ void System_LowBat_Arm(void); void System_LowBat_Poll(void); uint8_t System_LowBat_IsActive(void); extern uint8_t Led; extern bool PressFlag; extern volatile uint32_t ADDRESS; extern uint8_t key_toggle[4]; extern bool StartFlag; extern bool InModeFlag; /* 已进入演奏模式;模式选择页必须为 false */ extern int16_t MIC_VOL_MAP[11]; extern const uint8_t Version[3]; extern uint8_t AutoCloseTime; extern uint16_t mAutoPowerOffCount; extern bool AutoCloseFlag; extern const Touch_AreaTypeDef *pCurrentTouch_Area; extern const Touch_AreaTypeDef Touch_Areas[]; extern uint8_t TOUCH_AREA_NUM; // 4�����ӣ����ࡢ���֡���˷硢���죩 extern Fader_t faders[4]; extern GUI_SWITCH mGuiData[]; extern const LEBEL_UI UI_Label[]; extern GUI_SWITCH ParamGuiData[]; extern void (*CurrUIProcress)(DisplayTaskMessage_Type xEvent); /* 普通模式:松手后偶拍收束轮询(由 Read_Cur_Measure 调用) */ void FreeMode_PollEvenBeatStop(void); /* 当前调一级大和弦(把位1 + maj);开机/进模式/前奏/拨片兜底共用 */ void Accomp_ApplyDefaultIChord(void); static void ShowPowerOn(); void GET_ParamNum_Str(int16_t NUM, uint8_t ValidLen, char* Str, uint8_t hasSign); void MainTask_Sendmsg(uint16_t ID, uint16_t ID2, uint16_t HiByte, uint16_t LoByte); void UITask_Sendmsg(uint16_t ID, uint16_t ID2, uint16_t HiByte, uint16_t LoByte); void BLTask_Sendmsg(uint16_t ID, uint16_t ID2, uint16_t HiByte, uint16_t LoByte); void ResetAutoPowerCount(void); uint8_t GUI_Item_AjustValue(GUI_SWITCH * Group, int8_t Dir); void GUI_Item_AjustLoopValue(GUI_SWITCH * Group, int8_t Dir); void Send_volume(uint8_t vol); void MasterVolume_Reapply(void); /* 尾奏起奏:ADC 尾奏键与万能第4段落键共用 */ void AutoBand_StartOutro(void); void ADC_IN1_KEY_Handle(uint8_t key,bool on); void TM1617_Handle(uint8_t key); void TM1629_Handle(uint8_t key); void Pick_Handle(); void Loop_Light_Handle(uint8_t measure); void Stop_AutoBand(void); void Stop_AutoBand_Soft(void); /* 兼容:等同 Stop_AutoBand */ extern uint8_t Band_TickGate; void Stop_AutoBand_Request(void); /* 投递 MSG_ID_STOP_BAND → 硬停 */ uint8_t Band_IsPlaying(void); void Band_ForceStopBeforeStart(void); /* 兼容空操作 */ void Band_AbsorbEatenStart(void); /* 兼容空操作 */ void Band_MarkRealStop(void); /* 兼容空操作 */ uint8_t Band_TakeStartFollowup(void); /* 兼容:恒返回 0 */ void Band_BeginStartFollowup(void); /* 兼容空操作 */ void Band_EndStartFollowup(void); /* 兼容空操作 */ void BL_Set_led(uint8_t Led, uint8_t chord_type); /* App 曲目引导灯有效时,拨片不要把琴颈打成全绿 */ void AppNeckLed_NoteGuide(void); void AppNeckLed_ClearGuide(void); uint8_t AppNeckLed_IsGuide(void); uint8_t GetChordNotesByType(uint8_t MIDI_Index,uint8_t type,uint8_t *buff); void FretChord_FillUseMidi(uint8_t key); /* 源品位 III~VII:按 C 大调「和弦伴奏发音顺序」填 8 音(已含固定调半音)。I/II 返回 0 */ uint8_t AccompPattern_Fill(uint8_t key, uint8_t out[8]); /* 伴奏已在播时仅更新和弦音,不 Restart(快转调) */ void Accomp_UpdatePlayingChord(void); /* 切模式/停键前记住专业移调与最后指板和弦 */ void Accomp_RememberPlayContext(void); /* 段落键等主动刷新伴奏活动,避免 PlayTick 短暂停滞被判为已停 */ void Band_NotifyPlayActivity(void); void BT_Chord_offset_map(uint8_t pos_offset,uint8_t chord_offset); void BT_Pitch_offset_map(uint8_t pos_offset,uint8_t pitch_offset); void Read_Cur_Measure(); #endif