PowerManger.c 2.4 KB
#include <stdio.h>
#include "JZsdkLib.h"

#define POWER_STATUS_OFF 0
#define POWER_STATUS_REBOOT 1

// 使用static限制全局变量可见范围
static T_JZsdkReturnCode (*g_PoweroffCallback)(void) = NULL;
static T_JZsdkReturnCode (*g_PoweronCallback)(void) = NULL;

T_JZsdkReturnCode PowerManager_RegisterPowerOffCallback(T_JZsdkReturnCode (*callback)(void))
{
    if (!callback) 
    {
        JZSDK_LOG_ERROR("Invalid NULL callback");
        return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
    }
    
    g_PoweroffCallback = callback;
    
    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;  
}

T_JZsdkReturnCode PowerManager_RegisterPowerOnCallback(T_JZsdkReturnCode (*callback)(void))
{
    if (!callback) 
    {
        JZSDK_LOG_ERROR("Invalid NULL callback");
        return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
    }

    g_PoweronCallback = callback;

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;  
}


//电源开关
T_JZsdkReturnCode PowerManger_PowerOff()
{
    JZSDK_LOG_INFO("执行关闭电源");    

    if (g_PoweroffCallback) {
        T_JZsdkReturnCode callbackRet = g_PoweroffCallback();
        if (callbackRet != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) 
        {
            JZSDK_LOG_ERROR("关机任务未正常执行");
        }
    }
    
    JZsdk_RunSystemCmd("poweroff");

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

//电源开机时的任务 //这意味着已经完成所有初始化
T_JZsdkReturnCode PowerManger_PowerOn()
{
    JZSDK_LOG_INFO("执行开机任务");

    if (g_PoweronCallback) {
        T_JZsdkReturnCode callbackRet = g_PoweronCallback();
        if (callbackRet != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) 
        {
            JZSDK_LOG_ERROR("开机任务未正常执行");
        }
    }

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

//电源管理初始化
T_JZsdkReturnCode PowerManger_Init()
{

}

//电源重启
T_JZsdkReturnCode PowerManger_PowerReboot()
{
    JZSDK_LOG_INFO("执行重启电源");
    JZsdk_RunSystemCmd("reboot");

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

//电源状态修改
T_JZsdkReturnCode PowerManger_SetPowerStatus(int status)
{
    switch (status)
    {
        case POWER_STATUS_OFF://如果设定为关机
            PowerManger_PowerOff();
        break;

        case POWER_STATUS_REBOOT://如果设定为重启
            PowerManger_PowerReboot();
        break;
        
    default:
        break;
    }
    
}