/* WARNING: The allocated strings in replacedStrsPtr must be released by the caller */ eEsifError EsifFpcAction_GetParams( EsifFpcActionPtr fpcActionPtr, EsifDataPtr paramsPtr, UInt8 numParams ) { eEsifError rc = ESIF_OK; UInt8 i; if ((NULL == fpcActionPtr) || (NULL == paramsPtr)) { rc = ESIF_E_PARAMETER_IS_NULL; goto exit; } for (i = 0; i < numParams; i++) { rc = EsifFpcAction_GetParamAsEsifData(fpcActionPtr, i, ¶msPtr[i]); if (ESIF_OK != rc) { break; } } exit: return rc; }
static eEsifError EsifSetActionDelegateAppc( const EsifUpDomainPtr domainPtr, const EsifDataPtr requestPtr, const EsifFpcActionPtr fpcActionPtr) { eEsifError rc = ESIF_E_PRIMITIVE_ACTION_FAILURE; EsifData p2 = { 0 }; EsifString appName = NULL; UInt32 opcode = 0; UNREFERENCED_PARAMETER(domainPtr); ESIF_ASSERT(NULL != domainPtr); ESIF_ASSERT(NULL != requestPtr); ESIF_ASSERT(NULL != requestPtr); // Action Parameter 2 is App Control Opcode ('STRT','STOP', etc) // Primitive requestPtr is App Name ("dptf", ...) rc = EsifFpcAction_GetParamAsEsifData(fpcActionPtr, 1, &p2); if ((ESIF_OK != rc) || (NULL == p2.buf_ptr)) { rc = ESIF_E_INVALID_ARGUMENT_COUNT; goto exit; } if ((p2.type == ESIF_DATA_UINT32) && (p2.data_len == sizeof(UInt32))) { opcode = *(UInt32 *)p2.buf_ptr; } if ((requestPtr->type == ESIF_DATA_STRING) && (NULL != requestPtr->buf_ptr)) { appName = (EsifString)requestPtr->buf_ptr; switch (opcode) { case 'TRTS': // STRT: Start App rc = EsifAppMgr_AppStart(appName); break; case 'POTS': // STOP: Stop App rc = EsifAppMgr_AppStop(appName); break; default: rc = ESIF_E_INVALID_REQUEST_TYPE; break; } } exit: return rc; }
static eEsifError ESIF_CALLCONV ActionDelegateSet( esif_context_t actCtx, EsifUpPtr upPtr, const EsifFpcPrimitivePtr primitivePtr, const EsifFpcActionPtr fpcActionPtr, EsifDataPtr requestPtr ) { eEsifError rc = ESIF_OK; EsifData p1 = {0}; UInt32 method; EsifUpDomainPtr domainPtr = NULL; UNREFERENCED_PARAMETER(actCtx); UNREFERENCED_PARAMETER(upPtr); ESIF_ASSERT(NULL != requestPtr); ESIF_ASSERT(NULL != requestPtr->buf_ptr); ESIF_ASSERT(NULL != primitivePtr); ESIF_ASSERT(NULL != fpcActionPtr); domainPtr = EsifUp_GetDomainById(upPtr, primitivePtr->tuple.domain); if (NULL == domainPtr) { ESIF_TRACE_ERROR("Unable to get domain\n"); rc = ESIF_E_PARAMETER_IS_OUT_OF_BOUNDS; goto exit; } rc = EsifFpcAction_GetParamAsEsifData(fpcActionPtr, 0, &p1); if ((ESIF_OK != rc) || (NULL == p1.buf_ptr)) { ESIF_TRACE_ERROR("Unable to get parameters\n"); goto exit; } method = *((UInt32 *)p1.buf_ptr); switch (method) { /* Set Temperature Trip Points */ case '0TAP': /* PAT0 */ ESIF_TRACE_INFO("PAT0 received\n"); rc = EsifSetActionDelegatePat0(domainPtr, requestPtr); break; case '1TAP': /* PAT1 */ ESIF_TRACE_INFO("PAT1 received\n"); rc = EsifSetActionDelegatePat1(domainPtr, requestPtr); break; case 'BSPS': /* SPSB: Set Participant Sample Behavior */ ESIF_TRACE_INFO("Set Sample Behavior received\n"); rc = EsifSetActionDelegateSampleBehavior(domainPtr, requestPtr); break; case 'PMTV': /* VTMP: Virtual Temperature */ ESIF_TRACE_INFO("Set Virtual Temperature received\n"); rc = EsifSetActionDelegateVirtualTemperature(domainPtr, requestPtr); break; case 'BHPS': /* SPHB: Set Participant Hysteresis Behavior */ ESIF_TRACE_INFO("Set Participant Hysteresis Behavior received\n"); rc = EsifSetActionDelegateSphb(domainPtr, requestPtr); break; case 'CSPS': /* SPSC: Set Platform State Of Charge */ ESIF_TRACE_INFO("Set OS Battery Percentage received\n"); rc = EsifSetActionDelegateToSignalOSEvent(domainPtr, requestPtr, ESIF_EVENT_OS_BATTERY_PERCENT_CHANGED); break; case 'SPPS': /* SPPS: Set Platform Power Source */ ESIF_TRACE_INFO("Set Platform Power Source received\n"); rc = EsifSetActionDelegateToSignalOSEvent(domainPtr, requestPtr, ESIF_EVENT_OS_POWER_SOURCE_CHANGED); break; case 'OPDS': /* SDPO: Set Display Orientation */ ESIF_TRACE_INFO("Set Display Orientation received\n"); rc = EsifSetActionDelegateToSignalOSEvent(domainPtr, requestPtr, ESIF_EVENT_DISPLAY_ORIENTATION_CHANGED); break; case 'OVDS': /* SDVO: Set Device Orientation */ ESIF_TRACE_INFO("Set Device Orientation received\n"); rc = EsifSetActionDelegateToSignalOSEvent(domainPtr, requestPtr, ESIF_EVENT_DEVICE_ORIENTATION_CHANGED); break; case 'COMS': /* SMOC: Set Motion Changed */ ESIF_TRACE_INFO("Set Motion Changed received\n"); rc = EsifSetActionDelegateToSignalOSEvent(domainPtr, requestPtr, ESIF_EVENT_MOTION_CHANGED); break; case 'MKDS': /* SDKM: Set Dock Mode */ ESIF_TRACE_INFO("Set Dock Mode received\n"); rc = EsifSetActionDelegateToSignalOSEvent(domainPtr, requestPtr, ESIF_EVENT_OS_DOCK_MODE_CHANGED); break; case 'MLCS': /* SCLM: Set Cooling Mode */ ESIF_TRACE_INFO("Set Cooling Mode received\n"); rc = EsifSetActionDelegateToSignalOSEvent(domainPtr, requestPtr, ESIF_EVENT_SYSTEM_COOLING_POLICY_CHANGED); break; case 'TSLS': /* SLST: Set Lid State */ ESIF_TRACE_INFO("Set Lid State received\n"); rc = EsifSetActionDelegateToSignalOSEvent(domainPtr, requestPtr, ESIF_EVENT_OS_LID_STATE_CHANGED); break; case 'TFPS': /* SPFT: Set Platform Type */ ESIF_TRACE_INFO("Set Platform Type received\n"); rc = EsifSetActionDelegateToSignalOSEvent(domainPtr, requestPtr, ESIF_EVENT_OS_PLATFORM_TYPE_CHANGED); break; case 'AGFS': /* SFGA: Set Foreground Application */ ESIF_TRACE_INFO("Set Foreground Application received\n"); rc = EsifSetActionDelegateToSignalForegroundAppChanged(domainPtr, requestPtr); break; case 'NOMS': /* SMON: Set Mobile Notification */ ESIF_TRACE_INFO("Set Mobile Notification request received\n"); rc = EsifSetActionDelegateToSignalOSEvent(domainPtr, requestPtr, ESIF_EVENT_OS_MOBILE_NOTIFICATION); break; case 'TESR': /* RSET: Reset Override */ ESIF_TRACE_INFO("Reset Override request received\n"); rc = EsifSetActionDelegateRset(domainPtr, requestPtr); break; case 'LAVE': /* EVAL: Re-evaluate participant capabilities */ ESIF_TRACE_INFO("Re-evaluate participant capabilities request received\n"); rc = EsifSetActionDelegateEvaluateParticipantCaps(domainPtr, requestPtr); break; case 'CPPA': /* APPC: Application Control */ ESIF_TRACE_INFO("Application Control\n"); rc = EsifSetActionDelegateAppc(domainPtr, requestPtr, fpcActionPtr); break; case 'PASS': /* SSAP: Specific Action Primitive execution */ rc = EsifSetActionDelegateSsap(upPtr, requestPtr); break; default: rc = ESIF_E_NOT_IMPLEMENTED; break; } exit: return rc; }
static eEsifError ESIF_CALLCONV ActionDelegateGet( esif_context_t actCtx, EsifUpPtr upPtr, const EsifFpcPrimitivePtr primitivePtr, const EsifFpcActionPtr fpcActionPtr, const EsifDataPtr requestPtr, const EsifDataPtr responsePtr ) { eEsifError rc = ESIF_OK; EsifData p1 = {0}; UInt32 method; EsifUpDomainPtr domainPtr = NULL; UNREFERENCED_PARAMETER(actCtx); UNREFERENCED_PARAMETER(upPtr); ESIF_ASSERT(NULL != responsePtr); ESIF_ASSERT(NULL != responsePtr->buf_ptr); ESIF_ASSERT(NULL != primitivePtr); ESIF_ASSERT(NULL != fpcActionPtr); domainPtr = EsifUp_GetDomainById(upPtr, primitivePtr->tuple.domain); if (NULL == domainPtr) { ESIF_TRACE_ERROR("Unable to get domain\n"); rc = ESIF_E_PARAMETER_IS_OUT_OF_BOUNDS; goto exit; } rc = EsifFpcAction_GetParamAsEsifData(fpcActionPtr, 0, &p1); if ((ESIF_OK != rc) || (NULL == p1.buf_ptr)) { ESIF_TRACE_ERROR("Unable to get parameters\n"); goto exit; } method = *((UInt32 *)p1.buf_ptr); switch (method) { /* Get Temperature Trip Points */ case '0TTG': /* GTT0 */ rc = EsifGetActionDelegateGtt0(domainPtr, responsePtr); break; case '1TTG': /* GTT1 */ rc = EsifGetActionDelegateGtt1(domainPtr, responsePtr); break; case 'PMT_': /* _TMP */ rc = EsifGetActionDelegateTemp(domainPtr, requestPtr, responsePtr); break; case 'GFNC': /* CNFG */ rc = EsifGetActionDelegateCnfg(domainPtr, requestPtr, responsePtr); break; case 'PMTV': /* VTMP */ rc = EsifGetActionDelegateVirtualTemperature(domainPtr, responsePtr); break; default: rc = ESIF_E_NOT_IMPLEMENTED; break; } exit: return rc; }