38 #include <sys/types.h>
46 #include "exception.hpp"
48 #include "dsMgrProductTraitsHandler.h"
49 #include "dsAudioSettings.h"
51 #define PWRMGR_REBOOT_REASON_MAINTENANCE "MAINTENANCE_REBOOT"
52 #define MAX_NUM_VIDEO_PORTS 5
55 char port[DSMGR_MAX_VIDEO_PORT_NAME_LENGTH];
59 extern IARM_Result_t _dsGetAudioPort(
void *arg);
60 extern IARM_Result_t _dsEnableAudioPort(
void *arg);
61 extern IARM_Result_t _dsSetFPState(
void *arg);
62 extern IARM_Result_t _dsGetEnablePersist(
void *arg);
63 extern void _setEASAudioMode();
67 static pthread_mutex_t dsLock = PTHREAD_MUTEX_INITIALIZER;
69 static bool get_video_port_standby_setting(
const char * port);
70 static void _PwrEventHandler(
const char *owner, IARM_EventId_t eventId,
void *data,
size_t len);
71 static int _SetLEDStatus(IARM_Bus_PWRMgr_PowerState_t powerState);
72 int _SetAVPortsPowerState(IARM_Bus_PWRMgr_PowerState_t powerState);
73 static IARM_Result_t _SetStandbyVideoState(
void *arg);
74 static IARM_Result_t _GetStandbyVideoState(
void *arg);
75 static IARM_Result_t _SetAvPortState(
void *arg);
76 static IARM_Result_t _SetLEDState(
void *arg);
77 static IARM_Result_t _SetRebootConfig(
void *arg);
79 static IARM_Bus_PWRMgr_PowerState_t curState;
80 static IARM_Bus_PWRMgr_PowerState_t prevState;
82 #define IARM_BUS_Lock(lock) pthread_mutex_lock(&dsLock)
83 #define IARM_BUS_Unlock(lock) pthread_mutex_unlock(&dsLock)
86 void initPwrEventListner()
88 INT_INFO(
"Entering [%s]\r\n", __FUNCTION__);
92 #ifdef POWERMGR_PRODUCT_PROFILE_ID
93 if(
true == dsMgrProductTraits::ux_controller::initialize_ux_controller(POWERMGR_PRODUCT_PROFILE_ID))
95 ux = dsMgrProductTraits::ux_controller::get_instance();
100 INT_DEBUG(
"dsmgr product traits not supported.\n");
107 INT_DEBUG(
"Exception Caught during [device::Manager::Initialize]\r\n");
117 if(ret != IARM_RESULT_SUCCESS)
119 INT_DEBUG(
"Failed to get power state from pwrmgr Settnig defalt powerstate %d \r\n", IARM_BUS_PWRMGR_POWERSTATE_OFF);
120 prevState = IARM_BUS_PWRMGR_POWERSTATE_OFF;
121 curState = IARM_BUS_PWRMGR_POWERSTATE_STANDBY;
125 INT_DEBUG(
"Deep Sleep Manager Init with Power State %d\r\n",param.curState);
126 curState = param.curState;
127 prevState = param.prevState;
130 ux->applyPostRebootConfig(curState, prevState);
137 _SetLEDStatus(curState);
138 _SetAVPortsPowerState(curState);
143 static void _PwrEventHandler(
const char *owner, IARM_EventId_t eventId,
void *data,
size_t len)
145 INT_INFO(
"Entering [%s]\r\n", __FUNCTION__);
146 IARM_Bus_PWRMgr_PowerState_t newState;
147 IARM_Bus_PWRMgr_PowerState_t curState;
159 INT_DEBUG(
"[%s] Got MODCHANGED Event from %d to %d \r\n",__FUNCTION__, eventData->data.state.curState, eventData->data.state.newState);
160 newState = eventData->data.state.newState;
161 curState = eventData->data.state.curState;
163 ux->applyPowerStateChangeConfig(newState, curState);
166 _SetLEDStatus(newState);
168 _SetAVPortsPowerState(newState);
182 static int _SetLEDStatus(IARM_Bus_PWRMgr_PowerState_t powerState)
184 INT_INFO(
"Entering [%s]\r\n", __FUNCTION__);
191 if( powerState != IARM_BUS_PWRMGR_POWERSTATE_ON )
193 #ifdef FP_POWER_LED_ON_IN_LOW_POWER_MODE //For devices like TVs that are expected to have lights on when in one of the standby modes.
195 INT_DEBUG(
"[PWRMgr-_SetLEDStatus] Settings the Power LED State to ON\r\n");
198 INT_DEBUG(
"[PWRMgr-_SetLEDStatus] Settings the Power LED State to OFF \r\n");
204 INT_DEBUG(
"[PWRMgr-_SetLEDStatus] Settings the Power LED State to ON \r\n");
207 _dsSetFPState(¶m);
210 INT_DEBUG(
"Exception Caught during [PWRMgr - _SetLEDStatus]\r\n");
216 int _SetAVPortsPowerState(IARM_Bus_PWRMgr_PowerState_t powerState)
218 INT_INFO(
"Entering [%s]\r\n", __FUNCTION__);
222 if (powerState != IARM_BUS_PWRMGR_POWERSTATE_ON)
224 if (IARM_BUS_PWRMGR_POWERSTATE_OFF != powerState)
226 INT_INFO(
"[%s] POWERSTATE %d \r\n", __FUNCTION__, powerState);
231 for (
size_t i = 0; i < videoPorts.
size(); i++)
233 bool doEnable = get_video_port_standby_setting(videoPorts.at(i).
getName().c_str());
234 INT_DEBUG(
"[%s]Video port %s will be %s in standby mode.\n", __FUNCTION__, videoPorts.at(i).
getName().c_str(), (doEnable ?
"enabled" :
"disabled"));
235 if (
false == doEnable)
241 INT_DEBUG(
"[%s] Video port exception %d \r\n", __FUNCTION__, powerState);
243 INT_INFO(
"[%s] Video port standby done \r\n",__FUNCTION__);
251 for (
size_t i = 0; i < videoPorts.
size(); i++)
258 INT_DEBUG(
"[%s] Video port exception %d \r\n", __FUNCTION__, powerState);
260 INT_INFO(
"[%s] Video port disable done \r\n", __FUNCTION__ );
268 numPorts =
dsUTL_DIM(kSupportedPortTypes);
269 for (i = 0; i < numPorts; i++)
272 memset(&getHandle, 0,
sizeof(getHandle));
273 getHandle.type = *audioPort;
275 _dsGetAudioPort(&getHandle);
277 memset(&setMode, 0,
sizeof(setMode));
278 setMode.handle = getHandle.handle;
279 setMode.enabled =
false;
280 _dsEnableAudioPort(&setMode);
285 INT_DEBUG(
"[%s] audio port exception \r\n", __FUNCTION__);
294 for (
size_t i = 0; i < videoPorts.
size(); i++)
296 videoPorts.at(i).
enable();
304 numPorts =
dsUTL_DIM(kSupportedPortTypes);
305 for (i = 0; i < numPorts; i++)
308 memset(&getHandle, 0,
sizeof(getHandle));
309 getHandle.type = *audioPort;
311 _dsGetAudioPort(&getHandle);
313 memset(&setMode, 0,
sizeof(setMode));
314 setMode.handle = getHandle.handle;
315 setMode.enabled =
false;
316 _dsGetEnablePersist(&setMode);
318 if (setMode.enabled ==
true)
322 INT_INFO(
"[%s] Enabling audio ports %d \r\n", __FUNCTION__, powerState);
323 _dsEnableAudioPort(&setMode);
326 if (isEAS == IARM_BUS_SYS_MODE_EAS)
329 INT_INFO(
"[%s] Force Stereo in EAS mode \r\n", __FUNCTION__);
335 INT_DEBUG(
"[%s] Audio port exception \r\n",__FUNCTION__);
342 INT_DEBUG(
"Exception Caught during [%s]\r\n", __FUNCTION__);
348 static bool get_video_port_standby_setting(
const char * port)
350 INT_INFO(
"Entering [%s]\r\n", __FUNCTION__);
353 INT_DEBUG(
"[%s]Error! Port name is NULL!\n", __FUNCTION__);
356 for(
int i = 0; i < MAX_NUM_VIDEO_PORTS; i++)
358 if(0 == strncasecmp(port, g_standby_video_port_setting[i].port, DSMGR_MAX_VIDEO_PORT_NAME_LENGTH))
360 return g_standby_video_port_setting[i].isEnabled;
366 static IARM_Result_t _SetStandbyVideoState(
void *arg)
368 INT_INFO(
"Entering [%s]\r\n", __FUNCTION__);
370 if(NULL == param->port)
373 INT_DEBUG(
"[%s] empty port name. Cannot proceed.\n", __FUNCTION__);
374 return IARM_RESULT_SUCCESS;
380 for(i = 0; i < MAX_NUM_VIDEO_PORTS; i++)
382 if(0 == strncasecmp(param->port, g_standby_video_port_setting[i].port, DSMGR_MAX_VIDEO_PORT_NAME_LENGTH))
385 g_standby_video_port_setting[i].isEnabled = ((0 == param->isEnabled) ?
false :
true);
389 if(MAX_NUM_VIDEO_PORTS == i)
392 for(i = 0; i < MAX_NUM_VIDEO_PORTS; i++)
394 if(
'\0' == g_standby_video_port_setting[i].port[0])
396 strncpy(g_standby_video_port_setting[i].port, param->port, (DSMGR_MAX_VIDEO_PORT_NAME_LENGTH - 1));
397 g_standby_video_port_setting[i].isEnabled = ((0 == param->isEnabled) ?
false :
true);
402 if(MAX_NUM_VIDEO_PORTS == i)
404 INT_DEBUG(
"[%s] Error! Out of room to write new video port setting for standby mode.\n", __FUNCTION__);
410 if((IARM_BUS_PWRMGR_POWERSTATE_ON != curState) && (IARM_BUS_PWRMGR_POWERSTATE_OFF != curState))
413 INT_DEBUG(
"[%s] Setting standby %s port status to %s.\n", __FUNCTION__, param->port, ((1 == param->isEnabled)?
"enabled" :
"disabled"));
414 if(1 == param->isEnabled)
421 INT_DEBUG(
"[%s] video port %s will be %s when going into standby mode.\n", __FUNCTION__, param->port, ((1 == param->isEnabled)?
"enabled" :
"disabled"));
426 INT_DEBUG(
"Exception Caught during [%s]. Possible bad video port.\n", __FUNCTION__);
429 return IARM_RESULT_SUCCESS;
432 static IARM_Result_t _GetStandbyVideoState(
void *arg)
434 INT_INFO(
"Entering [%s]\r\n", __FUNCTION__);
436 if(NULL == param->port)
438 INT_DEBUG(
"[%s]Bad port name. Cannot get state.\n", __FUNCTION__);
439 return IARM_RESULT_SUCCESS;
449 INT_DEBUG(
"Exception Caught during [%s]. Possible bad video port.\n", __FUNCTION__);
451 return IARM_RESULT_SUCCESS;
453 param->isEnabled = ((
true == get_video_port_standby_setting(param->port))? 1 : 0);
455 return IARM_RESULT_SUCCESS;
458 static IARM_Result_t _SetAvPortState(
void *arg)
460 INT_INFO(
"Entering [%s]\r\n", __FUNCTION__);
464 INT_DEBUG(
"Bad Parameter.\n");
465 return IARM_RESULT_SUCCESS;
468 _SetAVPortsPowerState((IARM_Bus_PWRMgr_PowerState_t)param->avPortPowerState);
470 return IARM_RESULT_SUCCESS;
473 static IARM_Result_t _SetLEDState(
void *arg)
475 INT_INFO(
"Entering [%s]\r\n", __FUNCTION__);
479 INT_DEBUG(
"[%s] Bad Parameter.\n", __FUNCTION__);
480 return IARM_RESULT_SUCCESS;
483 _SetLEDStatus((IARM_Bus_PWRMgr_PowerState_t)param->ledState);
485 return IARM_RESULT_SUCCESS;
488 static IARM_Result_t _SetRebootConfig(
void *arg)
490 INT_INFO(
"Entering [%s]\r\n", __FUNCTION__);
494 INT_DEBUG(
"[%s]Bad Parameter.\n", __FUNCTION__);
495 return IARM_RESULT_SUCCESS;
497 param->reboot_reason_custom[
sizeof(param->reboot_reason_custom) - 1] =
'\0';
500 if(0 == strncmp(PWRMGR_REBOOT_REASON_MAINTENANCE, param->reboot_reason_custom,
sizeof(param->reboot_reason_custom)))
501 ux->applyPreMaintenanceRebootConfig((IARM_Bus_PWRMgr_PowerState_t)param->powerState);
503 ux->applyPreRebootConfig((IARM_Bus_PWRMgr_PowerState_t)param->powerState);
507 return IARM_RESULT_SUCCESS;