123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861 |
- /**
- * @file hv_mw_SystemManager.c
- * @brief SystemManager source file
- * @details This file provides the following functions: \n
- * (1) event dispatch \n
- * (2) system task handle \n
- * (3) Feed functions \n
- *
- * @author HiView SoC Software Team
- * @version 1.0.0
- * @date 2022-08-25
- * @copyright Copyright(c),2022-8, Hiview Software. All rights reserved.
- * @par History:
- * <table>
- * <tr><th>Author <th>Date <th>Change Description
- * <tr><td>Hiview SoC Software Team <td>2022-08-25 <td>init
- * </table>
- */
- #include "hv_comm_DataType.h"
- #include "hv_comm_Define.h"
- #include "hv_comm_Log.h"
- #include "hv_comm_shell_hvconfig.h"
- #include "hv_comm_Timer.h"
- #include "hv_comm_Assert.h"
- #include "hv_comm_DataBase.h"
- #include "hv_comm_MemParser.h"
- #include "hv_mw_SystemManager.h"
- #include "hv_mw_Video.h"
- #include "hv_mw_Audio.h"
- #include "hv_mw_StateMachine.h"
- #include "hv_mw_EventHub.h"
- #include "hv_mw_OsdInit.h"
- #include "hv_mw_OsdTask.h"
- #include "hv_mw_UrgentTask.h"
- #ifdef CONFIG_USER_AMBLIGHT_ON
- #include "hv_mw_AmbientLight.h"
- #endif
- #include "hv_mw_PowerManager.h"
- #include "hv_mw_PanelManager.h"
- #include "hv_mw_Channel_Manager.h"
- #include "hv_mw_InputPortManager.h"
- #include "hv_mw_Hdmi.h"
- #include "hv_mw_Hdcp.h"
- #include "hv_mw_DisplayPort.h"
- #include "hv_mw_Ddcci.h"
- #include "hv_mw_Factory.h"
- #if (defined(CONFIG_USER_USB_OTA_ON) || defined(CONFIG_USER_USB_BILLBOARD_ON))
- #include "hv_mw_UsbTask.h"
- #endif
- #ifdef CONFIG_USER_TYPE_C_ON
- #include "hv_mw_TypecTask.h"
- #endif
- #include "hv_mw_PQ.h"
- #include "hv_drv_Mailbox.h"
- #include "hv_drv_PLL.h"
- #include "hv_drv_Uart.h"
- #include "hv_drv_Flash.h"
- #include "hv_drv_Watchdog.h"
- #include "hv_drv_Pinshare.h"
- #include "hv_drv_Physical.h"
- #include "hv_drv_Flash.h"
- #include "hv_drv_Gpio.h"
- #include "hv_drv_Mprt.h"
- #include "hv_drv_DpuMainMute.h"
- #ifdef CONFIG_USER_DOUBLE_CHANNEL_ON
- #include "hv_drv_DpuSubMute.h"
- #endif
- #if (HV_CONFIG_ON == HV_PROJECT_CONFIG_PLATFORM)
- #include "HvPlatform.h"
- #endif
- #include "hv_app_PQ.h"
- #include "hv_app_Ddcci.h"
- #include "hv_chip_Config.h"
- /*QueueLength 指Message Queue最大存储多少item定义*/
- #define SYSTEM_QUEUE_LENGTH 100
- #define OSD_QUEUE_LENGTH 100
- #define EVENT_HUB_QUEUE_LENGTH 50
- #define URGENT_QUEUE_LENGTH 50
- #ifdef CONFIG_USER_TYPE_C_ON
- #define TYPEC_QUEUE_LENGTH 100
- #endif
- #ifdef CONFIG_USER_USB_OTA_ON
- #define USB_QUEUE_LENGTH 10
- #endif
- /*任务栈控件大小定义,单位4字节!*/
- #define SYSTEM_TASK_STACK_SIZE 2048 /*8K*/
- #define OSD_TASK_STACK_SIZE 2048 /*8K*/
- #define USB_TASK_STACK_SIZE 2048 /*8K*/
- #define TYPEC_TASK_STACK_SIZE 2048 /*8K*/
- #define EVENTHUB_TASK_STACK_SIZE 512 /*2K*/
- #define AMBIENTLIGHT_TASK_STACK_SIZE 512 /*2K*/
- #define URGENT_TASK_STACK_SIZE 512 /*2K*/
- /*任务优先级定义,FreeRTOS数值越大代表优先级别越高*/
- #define SYSTEM_TASK_PRIORITY 4
- #define OSD_TASK_PRIORITY 4
- #define EVENTHUB_TASK_PRIORITY 4
- #define USB_TASK_PRIORITY 2
- #define TYPEC_TASK_PRIORITY 4
- #define AMBIENTLIGHT_TASK_PRIORITY 2
- #define URGENT_TASK_PRIORITY 6
- #ifdef HV_SCALER_DEBUG_VERSION
- #define TEST_CLIENT_TASK_STACK_SIZE 512 /*2K*/
- #define TEST_CLIENT_TASK_PRIORITY 2
- #endif
- /*#define configTIMER_TASK_PRIORITY 5*/
- #define HV_HDMI0_RX_HPD_INT BIT_0
- #define HV_HDMI1_RX_HPD_INT BIT_1
- #define PQTOOL_SWINT_TRIGGER_VAL BIT_3
- static SystemManager s_stSystemManager;
- /****************************inner function begin*************************************************/
- static VOID EventDispatch(const SystemEvent* pstSystemEvent);
- static VOID SetDbgSPIDefaultType(UCHAR8 type);
- /****************************inner function begin*************************************************/
- Status Hv_Mw_System_Init( VOID )
- {
- HV_LOG_DEBUG(SYSTEM, "Hv_Mw_System_Init begin!!!");
- HV_VOS_IRQ_T u64Mask = 0;
- Hv_Vos_DisableIrq(&u64Mask);
- HV_ASSERT_SUCCESS(Hv_Drv_Phy_Init());
- Hv_Drv_PLL_Init();
- Hv_Drv_Pinshare_Init();
- Hv_Drv_Flash_ConfigPartFlag();
- Hv_Drv_Sscg_Init();
- Hv_Drv_Eeprom_Init();
- //Hv_Comm_CopyLogoData();
- HV_ASSERT_SUCCESS(Hv_Common_Db_Init());
- /* check the default uart switch */
- if (HV_FALSE == HV_COMMON_DATABASE_GET(FactoryData, bUartEnable))
- {
- Hv_Drv_EnableUart(HV_FALSE);
- }
- /* set dbgspi default type AHB, not AXI */
- SetDbgSPIDefaultType(1);
- #ifdef HV_SCALER_DEBUG_VERSION
- HV_SHELL_INIT();
- #endif
- HV_ASSERT_SUCCESS(Hv_Mw_Panel_Init());
- HV_LOG_DEBUG(SYSTEM, "Hv_Mw_Panel_Init success!!!");
- HV_ASSERT_SUCCESS(Hv_Mw_Power_ManagerInit());
- HV_LOG_DEBUG(SYSTEM, "Hv_Mw_Power_ManagerInit success!!!");
- HV_ASSERT_SUCCESS(Hv_Mw_InputPortManager_Init());
- HV_LOG_DEBUG(SYSTEM, "Hv_Mw_InputPortManager_Init success!!!");
- HV_ASSERT_SUCCESS(Hv_Mw_Channel_Manager_Init());
- HV_LOG_DEBUG(SYSTEM, "Hv_Mw_Channel_Manager_Init success!!!");
- HV_ASSERT_SUCCESS(Hv_App_PQ_DispCtrlInit());
- HV_LOG_DEBUG(SYSTEM, "Hv_App_PQ_DispCtrlInit success!!!");
- HV_ASSERT_SUCCESS(Hv_Mw_Audio_Init());
- HV_LOG_DEBUG(SYSTEM, "Hv_Mw_Audio_Init success!!!");
- HV_ASSERT_SUCCESS(Hv_Mw_OsdInit());
- HV_LOG_DEBUG(SYSTEM, "Hv_Mw_OsdInit success!!!");
- HV_ASSERT_SUCCESS(Hv_Mw_Ddcci_Init());
- HV_LOG_DEBUG(SYSTEM, "Hv_Mw_Ddcci_Init success!!!");
- Hv_App_Ddcci_Init();
- #ifdef CONFIG_USER_AMBLIGHT_ON
- Hv_Mw_AmbientLightPwmInit();
- #endif
- Hv_Drv_Flash_SetQspiMode(HV_FLASH_CONFIG_TYPE, FLASH_STANDARD, FLASH_USE_POLLING);
- HV_LOG_DEBUG(SYSTEM, "Monitor System initial success!");
- return HV_SUCCESS;
- }
- VOID Hv_Mw_System_TaskCreate( VOID )
- {
- HV_LOG_DEBUG(SYSTEM, "Hv_Mw_System_TaskCreate begin!!!");
- Hv_Vos_TASK_INIT_PARAMS param = {0};
- param.arg = NULL;
- param.entry = Hv_Mw_System_TaskHandle;
- param.name = "SystemManagerTask";
- param.priority = SYSTEM_TASK_PRIORITY;
- param.stackSize = SYSTEM_TASK_STACK_SIZE;
- Hv_Vos_TaskInit(¶m);
- param.entry = Hv_Mw_EventHubTaskHandle;
- param.name = "EventHubTask";
- param.priority = EVENTHUB_TASK_PRIORITY;
- param.stackSize = EVENTHUB_TASK_STACK_SIZE;
- Hv_Vos_TaskInit(¶m);
- param.entry = Hv_Mw_OsdTaskHandle;
- param.name = "OsdTask";
- param.priority = OSD_TASK_PRIORITY;
- param.stackSize = OSD_TASK_STACK_SIZE;
- Hv_Vos_TaskInit(¶m);
- param.entry = Hv_Mw_Urgent_TaskHandle;
- param.name = "UrgentTask";
- param.priority = URGENT_TASK_PRIORITY;
- param.stackSize = URGENT_TASK_STACK_SIZE;
- s_stSystemManager.xUrgentTaskHandle = Hv_Vos_TaskInit(¶m);
- #ifdef HV_SCALER_DEBUG_VERSION
- param.entry = Hv_Debug_ShellTaskHandle;
- param.name = "CLITask";
- param.priority = TEST_CLIENT_TASK_PRIORITY;
- param.stackSize = TEST_CLIENT_TASK_STACK_SIZE;
- s_stSystemManager.xShellTaskHandle = Hv_Vos_TaskInit(¶m);
- #endif
- #ifdef CONFIG_USER_AMBLIGHT_ON
- param.entry = Hv_Mw_AmbientLightTaskHandle;
- param.name = "AmbientLightTask";
- param.priority = AMBIENTLIGHT_TASK_PRIORITY;
- param.stackSize = AMBIENTLIGHT_TASK_STACK_SIZE;
- s_stSystemManager.xAmbLightTaskHandle = Hv_Vos_TaskInit(¶m);
- #endif
- #ifdef CONFIG_USER_TYPE_C_ON
- param.entry = Hv_Mw_TypecTaskHandle;
- param.name = "TypecTask";
- param.priority = TYPEC_TASK_PRIORITY;
- param.stackSize = TYPEC_TASK_STACK_SIZE;
- Hv_Vos_TaskInit(¶m);
- #endif
- #if (defined(CONFIG_USER_USB_OTA_ON) || defined(CONFIG_USER_USB_BILLBOARD_ON))
- param.entry = Hv_Mw_UsbTaskHandle;
- param.name = "UsbTask";
- param.priority = USB_TASK_PRIORITY;
- param.stackSize = USB_TASK_STACK_SIZE;
- Hv_Vos_TaskInit(¶m);
- #endif
- #if (HV_CONFIG_ON == HV_PROJECT_CONFIG_PLATFORM)
- Hv_User_AddPlatformTask();
- #endif
- HV_LOG_DEBUG(SYSTEM, "Hv_Mw_System_TaskCreate end success!!!");
- return;
- }
- VOID Hv_Mw_System_AllMessageQueueCreate( VOID )
- {
- Hv_Vos_QUEUE_INIT_PARAMS stQueueInitParam = {0};
- stQueueInitParam.queueLen = OSD_QUEUE_LENGTH;
- stQueueInitParam.itemSize = sizeof(OsdEvent);
- HV_VOS_QUEUE_S* xOsdQueue = Hv_Vos_QueueInit(&stQueueInitParam);
- HV_ASSERT_VALID_PTR_VOID(xOsdQueue);
- s_stSystemManager.xOsdQueue = xOsdQueue;
- stQueueInitParam.queueLen = SYSTEM_QUEUE_LENGTH;
- stQueueInitParam.itemSize = sizeof(SystemEvent);
- HV_VOS_QUEUE_S* xSystemQueue = Hv_Vos_QueueInit(&stQueueInitParam);
- HV_ASSERT_VALID_PTR_VOID(xSystemQueue);
- s_stSystemManager.xSystemQueue = xSystemQueue;
- stQueueInitParam.queueLen = EVENT_HUB_QUEUE_LENGTH;
- stQueueInitParam.itemSize = sizeof(Event);
- HV_VOS_QUEUE_S* xEventHubQueue = Hv_Vos_QueueInit(&stQueueInitParam);
- HV_ASSERT_VALID_PTR_VOID(xEventHubQueue);
- s_stSystemManager.xEventHubQueue = xEventHubQueue;
- stQueueInitParam.queueLen = URGENT_QUEUE_LENGTH;
- stQueueInitParam.itemSize = sizeof(UrgentEvent);
- HV_VOS_QUEUE_S* xUrgentQueue = Hv_Vos_QueueInit(&stQueueInitParam);
- HV_ASSERT_VALID_PTR_VOID(xUrgentQueue);
- s_stSystemManager.xUrgentQueue = xUrgentQueue;
- #ifdef CONFIG_USER_TYPE_C_ON
- stQueueInitParam.queueLen = TYPEC_QUEUE_LENGTH;
- stQueueInitParam.itemSize = sizeof(TypecEvent);
- HV_VOS_QUEUE_S* xTypecQueue = Hv_Vos_QueueInit(&stQueueInitParam);
- HV_ASSERT_VALID_PTR_VOID(xTypecQueue);
- s_stSystemManager.xTypecQueue = xTypecQueue;
- #endif
- #ifdef CONFIG_USER_USB_OTA_ON
- stQueueInitParam.queueLen = USB_QUEUE_LENGTH;
- stQueueInitParam.itemSize = sizeof(UsbEvent);
- HV_VOS_QUEUE_S* xUsbOtaQueue = Hv_Vos_QueueInit(&stQueueInitParam);
- HV_ASSERT_VALID_PTR_VOID(xUsbOtaQueue);
- s_stSystemManager.xUsbQueue = xUsbOtaQueue;
- #endif
- HV_LOG_DEBUG(SYSTEM, "Hv_Mw_System_AllMessageQueueCreate success!!!");
- return;
- }
- HV_VOS_QUEUE_S* Hv_Mw_System_GetSystemQueue( VOID )
- {
- return s_stSystemManager.xSystemQueue;
- }
- HV_VOS_QUEUE_S* Hv_Mw_System_GetOsdQueue( VOID )
- {
- return s_stSystemManager.xOsdQueue;
- }
- #ifdef CONFIG_USER_TYPE_C_ON
- HV_VOS_QUEUE_S* Hv_Mw_System_GetTypecQueue( VOID )
- {
- return s_stSystemManager.xTypecQueue;
- }
- #endif
- #ifdef CONFIG_USER_USB_OTA_ON
- HV_VOS_QUEUE_S* Hv_Mw_System_GetUsbQueue( VOID )
- {
- return s_stSystemManager.xUsbQueue;
- }
- #endif
- HV_VOS_QUEUE_S* Hv_Mw_System_GetEventHubQueue( VOID )
- {
- return s_stSystemManager.xEventHubQueue;
- }
- HV_ATTR_ISR_SECTION HV_VOS_QUEUE_S* Hv_Mw_System_GetUrgentQueue( VOID )
- {
- return s_stSystemManager.xUrgentQueue;
- }
- HV_ATTR_ISR_SECTION HV_VOS_TASK_S* Hv_Mw_System_UrgentTaskHandle( VOID )
- {
- return s_stSystemManager.xUrgentTaskHandle;
- }
- #ifdef HV_SCALER_DEBUG_VERSION
- HV_VOS_TASK_S* Hv_Mw_System_ShellTaskHandle( VOID )
- {
- return s_stSystemManager.xShellTaskHandle;
- }
- #endif
- VOID Hv_Mw_System_TaskAndIrqEnable( VOID )
- {
- HV_VOS_IRQ_T u64Mask = 0;
-
- HV_LOG_DEBUG(SYSTEM, "Monitor OS Starup!");
- /*使能任务*/
- Hv_Vos_TaskStart();
-
- /*启用中断总开关*/
- Hv_Vos_RestoreIrq(&u64Mask);
-
- return;
- }
- #ifdef HV_SCALER_DEBUG_VERSION
- static CHAR8* EventTypeConvert(SystemRevEventType enEventType)
- {
- CHAR8* paEventType[] =
- {
- "power",
- "osd",
- "channel",
- "inputport",
- "panel",
- "timer",
- "ddc/ci"
- };
- if(enEventType >= sizeof(paEventType) / sizeof(paEventType[0]))
- {
- return "NULL";
- }
- else
- {
- return paEventType[enEventType];
- }
- }
- static CHAR8* OSDEventIDConvert(USHORT16 enEventType)
- {
- CHAR8* paEventIDType[] =
- {
- "osd brightness",
- "osd contrast",
- "osd sharpness",
- "osd color temp",
- "osd hdr switch",
- "osd aspect ratio",
- "osd pxp config",
- "osd hdmi version",
- "osd dp version",
- "osd main source",
- "osd sub source",
- "osd pxp audio source",
- "osd volume",
- "osd audio time delay",
- "osd freesync switch",
- "osd datapatch reconfig",
- "osd pip sub window position",
- "osd pip sub window size reconfig",
- "osd video auto select source",
- "osd magnify glass switch",
- "osd magnify glass set ratio",
- "osd magnify glass set pos",
- "osd magnify glass set size",
- "osd hue r",
- "osd hue g",
- "osd hue b",
- "osd hue c",
- "osd hue m",
- "osd hue y",
- "osd sat r",
- "osd sat g",
- "osd sat b",
- "osd sat c",
- "osd sat m",
- "osd lum r",
- "osd lum g",
- "osd lum b",
- "osd lum c",
- "osd lum m",
- "osd lum y",
- "osd main or sub source swap",
- "osd video hflip",
- "osd video vflip",
- "osd auto update edid",
- "osd inp pattern",
- "osd main montage"
- "osd main montage",
- "osd over scan",
- "osd bright frame",
- "osd pro esport",
- };
- if(enEventType >= sizeof(paEventIDType) / sizeof(paEventIDType[0]))
- {
- return "NULL";
- }
- else
- {
- return paEventIDType[enEventType];
- }
- }
- #endif
- static VOID OsdCommandEventDispatch(const SystemEvent* pstSystemEvent)
- {
- UINT32 uiValue = pstSystemEvent->uiValue;
- SystemEvent stSystemEvent = {0};
- ChannelEvent stChannelEvent = {0};
- #ifdef HV_SCALER_DEBUG_VERSION
- if(SYSTEM_REV_EVENT_TYPE_TIMER == pstSystemEvent->enEventType)
- {
- HV_LOG_INFO(SYSTEM, "System %s,%s,0x%03x", EventTypeConvert(pstSystemEvent->enEventType),TimerEventIDConvert((TIMER_EVENT_E)pstSystemEvent->usEventId), pstSystemEvent->uiValue);
- }
- if(SYSTEM_REV_EVENT_TYPE_OSD_SETTING == pstSystemEvent->enEventType)
- {
- HV_LOG_INFO(SYSTEM, "System %s,%s,0x%03x", EventTypeConvert(pstSystemEvent->enEventType),OSDEventIDConvert(pstSystemEvent->usEventId), pstSystemEvent->uiValue);
- }
- #endif
- switch ((SettingParamId)pstSystemEvent->usEventId)
- {
- #ifdef CONFIG_USER_DOUBLE_CHANNEL_ON
- case SETTING_PARAM_ID_PXP_CONFIG:
- {
- if (0 == uiValue)/*Pip关闭*/
- {
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_PXP_DISABLE;
- stChannelEvent.enChannelType = CHANNEL_TYPE_MAIN;
- stChannelEvent.usValue = uiValue;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_SUB_PXP_DISABLE;
- stChannelEvent.enChannelType = CHANNEL_TYPE_SUB;
- stChannelEvent.usValue = uiValue;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- }
- else/*PbP打开 PiP打开*/
- {
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_PXP_ENABLE;
- stChannelEvent.enChannelType = CHANNEL_TYPE_MAIN;
- stChannelEvent.usValue = uiValue;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_PXP_ENABLE;
- stChannelEvent.enChannelType = CHANNEL_TYPE_SUB;
- stChannelEvent.usValue = uiValue;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- }
- break;
- }
- case SETTING_PARAM_ID_SUB_SOURCE:
- {
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_RESELECT_VIDEO_SRC;
- stChannelEvent.usValue = uiValue;
- stChannelEvent.enChannelType = CHANNEL_TYPE_SUB;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- break;
- }
- case SETTING_PARAM_ID_PIP_SUB_WINDOW_SIZE_RECONFIG:
- {
- /*配置了PIP场景重新设置PIP大小需要重新配置SUB 通路*/
- if (1 == HV_COMMON_DATABASE_GET(UserData, ucPxPMode))
- {
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_DATA_PATH_RECONFIG;
- stChannelEvent.usValue = uiValue;
- stChannelEvent.enChannelType = CHANNEL_TYPE_SUB;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- HV_LOG_DEBUG(SYSTEM, "receive Sub Dpu datapath reconfig");
- }
- break;
- }
- case SETTING_PARAM_ID_MAIN_OR_SUB_SOURCE_SWAP:
- {
- const ChannelManager* pstChannelManager = Hv_Mw_Channel_GetManager();
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_MAIN_SUB_SOURCE_SWAP;
- stChannelEvent.enChannelType = CHANNEL_TYPE_MAIN;
- stChannelEvent.usValue = pstChannelManager->astChannelData[1].enChannelSrcLinkPortIndex;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_MAIN_SUB_SOURCE_SWAP;
- stChannelEvent.enChannelType = CHANNEL_TYPE_SUB;
- stChannelEvent.usValue = pstChannelManager->astChannelData[0].enChannelSrcLinkPortIndex;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- break;
- }
- case SETTING_PARAM_ID_MAGNIFY_GLASS_SWITCH:
- {
- if (0 == uiValue)/*放大镜关闭*/
- {
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_SUB_MAGNIFY_DISABLE;
- stChannelEvent.enChannelType = CHANNEL_TYPE_SUB;
- stChannelEvent.usValue = uiValue;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- }
- else if (1 == uiValue)
- {
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_MAGNIFY_ENABLE;
- stChannelEvent.enChannelType = CHANNEL_TYPE_MAIN;
- stChannelEvent.usValue = uiValue;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_MAGNIFY_ENABLE;
- stChannelEvent.enChannelType = CHANNEL_TYPE_SUB;
- stChannelEvent.usValue = uiValue;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- }
- else if (3 == uiValue)
- {
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_SUB_MAGNIFY_DISABLE;
- stChannelEvent.enChannelType = CHANNEL_TYPE_SUB;
- stChannelEvent.usValue = 0;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_MAGNIFY_DISABLE;
- stChannelEvent.enChannelType = CHANNEL_TYPE_MAIN;
- stChannelEvent.usValue = 0;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- }
- break;
- }
- #endif
- case SETTING_PARAM_ID_MAIN_SOURCE:
- {
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_RESELECT_VIDEO_SRC;
- stChannelEvent.usValue = uiValue;
- stChannelEvent.enChannelType = CHANNEL_TYPE_MAIN;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- break;
- }
-
- case SETTING_PARAM_ID_FREE_SYNC_SWITCH:
- {
- /*仅主通道支持FreeSync模式!!!*/
- HV_LOG_DEBUG(SYSTEM, "receive FreeSyncSitch uiValue=%u", uiValue);
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_FREE_SYNC_SWITCH;
- stChannelEvent.usValue = uiValue;/*value unused*/
- stChannelEvent.enChannelType = CHANNEL_TYPE_MAIN;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- break;
- }
- case SETTING_PARAM_ID_HDR_SWITCH:
- {
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_HDR_SWITCH;
- stChannelEvent.usValue = HV_COMMON_DATABASE_GET(UserData, enHdrSwitch);
- stChannelEvent.enChannelType = CHANNEL_TYPE_MAIN;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- break;
- }
- case SETTING_PARAM_ID_PRO_ESPORT_SWITCH:
- {
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_FREE_SYNC_SWITCH;
- stChannelEvent.usValue = HV_COMMON_DATABASE_GET(UserData, ucProEsportSwitch);
- stChannelEvent.enChannelType = CHANNEL_TYPE_MAIN;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- break;
- }
- case SETTING_PARAM_ID_ASPECT_RATIO:
- {
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_SET_ASPECT_RATIO;
- stChannelEvent.usValue = HV_COMMON_DATABASE_GET(UserData, ucProportion);
- stChannelEvent.enChannelType = CHANNEL_TYPE_MAIN;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- #ifdef CONFIG_USER_DOUBLE_CHANNEL_ON
- stChannelEvent.enChannelType = CHANNEL_TYPE_SUB;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- #endif
- break;
- }
- case SETTING_PARAM_ID_DATA_PATH_RECONFIG:
- {
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_DATA_PATH_RECONFIG;
- stChannelEvent.usValue = uiValue;
- stChannelEvent.enChannelType = CHANNEL_TYPE_MAIN;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- HV_LOG_DEBUG(SYSTEM, "receive Main Dpu datapath reconfig");
- #ifdef CONFIG_USER_DOUBLE_CHANNEL_ON
- /*PIP 或者PBP打开的case 发送sub通道重配置消息*/
- if (0 != (HV_COMMON_DATABASE_GET(UserData, ucPxPMode) || HV_COMMON_DATABASE_GET(UserData, bMagnifyGlassSw)))
- {
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_DATA_PATH_RECONFIG;
- stChannelEvent.usValue = uiValue;
- stChannelEvent.enChannelType = CHANNEL_TYPE_SUB;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- HV_LOG_DEBUG(SYSTEM, "receive Sub Dpu datapath reconfig");
- }
- else
- {
- /*在PIB or PBP已关闭的case 固定发送一条关闭辅助通道的消息,对于sub通道来说即使多一条关闭消息也不会产生额外的问题,
- 如果是之前开启了,resume userdata导致的重配,此case会关闭掉辅通道*/
- stChannelEvent.usEventId = CHANNEL_EVENT_ID_SUB_PXP_DISABLE;
- stChannelEvent.usValue = 0;
- stChannelEvent.enChannelType = CHANNEL_TYPE_SUB;
- HV_ASSERT_PEEK_SUCCESS(Hv_Mw_Channel_SendInnerMsg(&stChannelEvent));
- HV_LOG_DEBUG(SYSTEM, "receive Sub Dpu datapath disable");
- }
- #endif
- break;
- }
- default:
- {
- break;
- }
- }
- return;
- }
- /** set debug spi default type
- * @param[in] type 0:dbg_spi2axi; 1:dbg_spi2ahb
- */
- static VOID SetDbgSPIDefaultType(UCHAR8 type)
- {
- HV_W32_FIELD(SYS_REG_SH5_TOP0_REG_SH5_WDG_FILED0, reg_sh5_dbg_spi_sel, type);
- return;
- }
- static BOOL IsPowerTimerOutTimer(const SystemEvent* pstSystemEvent)
- {
- BOOL bIsTimerEvent = (SYSTEM_REV_EVENT_TYPE_TIMER == pstSystemEvent->enEventType);
- BOOL bIsPowerTimerEventId = (SYS_EVENT_TIMER_POWR_BEGIN <= pstSystemEvent->usEventId) && (SYS_EVENT_TIMER_POWR_END >= pstSystemEvent->usEventId);
- return bIsTimerEvent && bIsPowerTimerEventId;
- }
- static BOOL IsInputPortTimerOutTimer(const SystemEvent* pstSystemEvent)
- {
- BOOL bIsTimerEvent = (SYSTEM_REV_EVENT_TYPE_TIMER == pstSystemEvent->enEventType);
- BOOL bIsInputPortTimerEventId = (SYS_EVENT_TIMER_IP_BEGIN <= pstSystemEvent->usEventId) && (SYS_EVENT_TIMER_IP_END >= pstSystemEvent->usEventId);
- return bIsTimerEvent && bIsInputPortTimerEventId;
- }
- static BOOL IsChanelTimerOutTimer(const SystemEvent* pstSystemEvent)
- {
- BOOL bIsTimerEvent = (SYSTEM_REV_EVENT_TYPE_TIMER == pstSystemEvent->enEventType);
- BOOL bIsChannelTimerEventId = (SYS_EVENT_TIMER_CHANNEL_BEGIN <= pstSystemEvent->usEventId) && (SYS_EVENT_TIMER_CHANNEL_TIMER_END >= pstSystemEvent->usEventId);
- return bIsTimerEvent && bIsChannelTimerEventId;
- }
- static BOOL IsPanelTimerOutTimer(const SystemEvent* pstSystemEvent)
- {
- BOOL bIsTimerEvent = (SYSTEM_REV_EVENT_TYPE_TIMER == pstSystemEvent->enEventType);
- BOOL bIsPanelTimerEventId = (SYS_EVENT_TIMER_PANEL_BEGIN <= pstSystemEvent->usEventId) && (SYS_EVENT_TIMER_PANEL_END >= pstSystemEvent->usEventId);
- return bIsTimerEvent && bIsPanelTimerEventId;
- }
- static VOID EventDispatch(const SystemEvent* pstSystemEvent)
- {
- if ((SYSTEM_REV_EVENT_TYPE_POWER == pstSystemEvent->enEventType) || IsPowerTimerOutTimer(pstSystemEvent))
- {
- HV_ASSERT_PEEK_SUCCESS_VOID(Hv_Mw_Power_SystemQueueMsgProc(pstSystemEvent));
- }
- else if ((SYSTEM_REV_EVENT_TYPE_INPUTPORT == pstSystemEvent->enEventType) || IsInputPortTimerOutTimer(pstSystemEvent))
- {
- HV_ASSERT_PEEK_SUCCESS_VOID(Hv_Mw_InputPort_ProcSystemQueueMsg(pstSystemEvent));
- }
- else if (SYSTEM_REV_EVENT_TYPE_OSD_SETTING == pstSystemEvent->enEventType)
- {
- OsdCommandEventDispatch(pstSystemEvent);
- }
- else if ((SYSTEM_REV_EVENT_TYPE_PANEL == pstSystemEvent->enEventType) || IsPanelTimerOutTimer(pstSystemEvent))
- {
- HV_ASSERT_PEEK_SUCCESS_VOID(Hv_Mw_Panel_ProcSystemQueueMsg(pstSystemEvent));
- }
- else if ((SYSTEM_REV_EVENT_TYPE_CHANNEL == pstSystemEvent->enEventType) || IsChanelTimerOutTimer(pstSystemEvent))
- {
- HV_ASSERT_PEEK_SUCCESS_VOID(Hv_Mw_Channel_ProcSystemQueueMsg(pstSystemEvent));
- }
- else if (SYSTEM_REV_EVENT_TYPE_DDCCI == pstSystemEvent->enEventType)
- {
- HV_ASSERT_PEEK_SUCCESS_VOID(Hv_Mw_Ddcci_ProcSystemQueueMsg(pstSystemEvent));
- }
- else
- {
- /*Do notihng*/
- }
- if (Hv_Mw_Panel_HasInnerMsgs())
- {
- HV_ASSERT_PEEK_SUCCESS_VOID(Hv_Mw_Panel_ProcInnerMsgs());
- }
- if (Hv_Mw_InputPort_HasInnerMsgs())
- {
- HV_ASSERT_PEEK_SUCCESS_VOID(Hv_Mw_InputPort_ProcInnerMsgs());
- }
- if (Hv_Mw_Ddcci_HasInnerMsgs())
- {
- HV_ASSERT_PEEK_SUCCESS_VOID(Hv_Mw_Ddcci_ProcInnerMsgs());
- }
- if (Hv_Mw_Channel_HasInnerMsgs())
- {
- HV_ASSERT_PEEK_SUCCESS_VOID(Hv_Mw_Channel_ProcInnerMsgs());
- }
- if ((SYSTEM_REV_EVENT_TYPE_TIMER == pstSystemEvent->enEventType)
- && (SYS_EVENT_TIMER_DATABASE_SYNC_TIMER == pstSystemEvent->usEventId))
- {
- Hv_Mw_Factory_SavePanelOnCountTime(HV_FALSE);
- /*业务流程均处理完成后周期检查database中数据是否改变,改变则同步到flash/eeprom*/
- Hv_Mw_DataBase_Sync();
- Hv_Drv_WDG_Feed(DATABASE_PERIOD_SYNC_GLOBAL_TO_FLASH_TIMER_LENGTH * 3);
- }
- return;
- }
- static VOID DatabaseSyncTimerStart( VOID )
- {
- static HV_TIMER_INIT_PARAMS stSystemDatabaseSyncTimerParam = \
- {"SystemDatabaseSyncTimer", DATABASE_PERIOD_SYNC_GLOBAL_TO_FLASH_TIMER_LENGTH, HV_TRUE, &stSystemDatabaseSyncTimerParam, Hv_Common_Timer_DispatchEvent, SYS_EVENT_TIMER_DATABASE_SYNC_TIMER};
- s_stSystemManager.pstDatabaseSyncTimer = Hv_Vos_Timer_Create(&stSystemDatabaseSyncTimerParam);
- HV_ASSERT_VALID_PTR_VOID(s_stSystemManager.pstDatabaseSyncTimer);
- Hv_Drv_WDG_Feed(DATABASE_PERIOD_SYNC_GLOBAL_TO_FLASH_TIMER_LENGTH * 2);
- Hv_Drv_WDG_Enable();
- Hv_Vos_Timer_Start(s_stSystemManager.pstDatabaseSyncTimer);
- return;
- }
- HV_VOS_ISR_RESULT_E Hv_Mw_System_SwIntIsrHandle(UINT32 uiIrqNum, VOID *arg)
- {
- SystemEvent stSysEvent;
- HV_VOS_QUEUE_S* xSystembQueue = Hv_Mw_System_GetSystemQueue();
- HV_ASSERT_VALID_PTR_RET_NO_LOG(xSystembQueue, HV_VOS_ISR_HANDLED);
- UINT32 uiSwintStatus = Hv_Drv_Mailbox_GetSwIntStatus();
- /*Notice: Clear interrupt should use irq - HV_CHIP_IRQ_BASE. We should modify this api.*/
- Hv_Vos_WClrMiscInt(uiIrqNum - HV_CHIP_IRQ_BASE);
- Hv_Drv_Mailbox_ClearSwIntStatus(uiSwintStatus);
-
- if(PQTOOL_SWINT_TRIGGER_VAL & uiSwintStatus)
- {
- stSysEvent.enEventType = SYSTEM_REV_EVENT_TYPE_DDCCI;
- stSysEvent.ucPortIndex = DDCCI_PORT_PQTOOL;
- stSysEvent.uiValue = Hv_Drv_Mailbox_GetPQToolCmdPort();
- Hv_Vos_QueueSendFromISR(xSystembQueue, (void *)&stSysEvent);
- }
- if(HV_HDMI0_RX_HPD_INT & uiSwintStatus)
- {
- HV_Drv_HdmirRx_ResetScdcWith5V(0);
- Hv_Mw_HdmiRx_CableDetCheck(0);
- }
- if(HV_HDMI1_RX_HPD_INT & uiSwintStatus)
- {
- HV_Drv_HdmirRx_ResetScdcWith5V(1);
- Hv_Mw_HdmiRx_CableDetCheck(1);
- }
- return HV_VOS_ISR_HANDLED;
- }
- VOID Hv_Mw_System_SwIntIRQInit()
- {
- //Register sw int handler for pq tool protocol.
- Hv_Vos_AttachIsr(HV_CHIP_IRQ_PM51, Hv_Mw_System_SwIntIsrHandle, NULL);
- Hv_Vos_UnmaskIrq(HV_CHIP_IRQ_PM51);
- }
- VOID Hv_Mw_System_Task_Init(VOID)
- {
- Hv_Mw_System_SwIntIRQInit();
- /*Audio timer start*/
- Hv_Mw_Audio_StartSoundDelayTimer();
- /*Database period timer creat and start*/
- DatabaseSyncTimerStart();
- if (HV_TRUE == HV_COMMON_DATABASE_GET(SystemData, bFactoryMode))
- {
- Hv_Mw_FactoryModeToPm(HV_TRUE);
- }
- return;
- }
- VOID Hv_Mw_System_TaskHandle( VOID *arg )
- {
- HV_ASSERT_VALID_PTR_VOID(s_stSystemManager.xSystemQueue);
- SystemEvent stSystemEvent = {0};
- Hv_Mw_System_Task_Init();
- for (;;)
- {
- #ifdef SW_DUMMY_DEBUG
- HV_WT32(SW_DUMMY_SM_TASK, (HV_RD32(SW_DUMMY_SM_TASK)+1));
- #endif
- if (Hv_Vos_QueueRecv(s_stSystemManager.xSystemQueue, (VOID*)&stSystemEvent))
- {
- EventDispatch(&stSystemEvent);
- }
- Hv_Vos_TaskYield();
- }
- return;
- }
- VOID Hv_Mw_System_SetDatabaseSyncTimerEnable(BOOL bEn)
- {
- if(NULL != s_stSystemManager.pstDatabaseSyncTimer)
- {
- if(bEn)
- {
- Hv_Vos_Timer_Rstart(s_stSystemManager.pstDatabaseSyncTimer, DATABASE_PERIOD_SYNC_GLOBAL_TO_FLASH_TIMER_LENGTH);
- }
- else
- {
- Hv_Vos_Timer_Rstop(s_stSystemManager.pstDatabaseSyncTimer);
- #ifdef CONFIG_USER_WATCHDOG_ON
- Hv_Drv_WDG_Disable();
- #endif
- }
- }
- return;
- }
|