PresetTask.c 4.8 KB
#include "JZsdkLib.h"

#include "BaseConfig.h"

#ifdef MEGAPHONE_CONFIG_STATUS_ON

    #include "Megaphone/Megaphone.h"  

#endif

#define PRESET_TASK_FALG_PATH "/root/preset_task_flag"
static T_JZTaskHandle g_PrsetTask_Handle = NULL;

static U8_t g_PrsetTask_Flag = JZ_FLAGCODE_OFF; //预设任务的开启标志位
static U8_t g_PrsetTask_SaveContentFlag = JZ_FLAGCODE_OFF; //预设任务保存内容标志位

/*************************************
 * 
 *  获取预设任务的开启标志位
 * 
 * 
 * ********************/
int PrsetTask_GetPrsetTaskFlag()
{
    return g_PrsetTask_Flag;
}

/*************************************
 * 
 *  获取预设任务保存内容标志位
 * 
 * 
 * ********************/
int PrsetTask_GetPrsetTaskSaveContentFlag()
{
    return g_PrsetTask_SaveContentFlag;
}

/*******************
 * 
 *  创建一个预设任务
 * 
 * 
 * ***************/
static void *PrsetTask_CreatePrsetTask()
{
    T_JZsdkReturnCode ret;

    //等候设备启动完毕
    while (BaseConfig_GetDeviceInitFlag() != JZ_FLAGCODE_ON)
    {
        delayMs(100);
    }
    
    //都没开启预设任务
    if (g_PrsetTask_Flag != JZ_FLAGCODE_ON)
    {
        return NULL;
    }

#ifdef MEGAPHONE_CONFIG_STATUS_ON

    JZSDK_LOG_INFO("喊话器配置已已打开,创建喊话器预设任务");

    Megaphone_PresetTask(); //创建喊话器预设任务

#endif

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

/*******************
 * 
 *  开启关闭预设任务
 * 
 * ***************/
T_JZsdkReturnCode PrsetTask_SetPrsetTaskFlag(U8_t flag)
{
    T_JZsdkReturnCode ret;
    int realLen;

    T_JZsdkFSHandler *FSHandler = JZsdk_GetFsHandler();
    T_JZsdkFileHandle FileHandle;

    g_PrsetTask_Flag = flag;
    JZSDK_LOG_INFO("设置预设任务标志位完成 为0x%d", flag);

    ret = FSHandler->FileOpen(PRESET_TASK_FALG_PATH, FS_READ_AND_WRITE_CLEAR, &FileHandle);
    if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
    {
        JZSDK_LOG_ERROR("预设任务标志位文件打开失败");
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    ret = FSHandler->FileWrite_U8(FileHandle, &flag, 1, &realLen);
    if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
    {
        JZSDK_LOG_ERROR("预设任务标志位写入失败");
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    ret = FSHandler->FileClose(FileHandle);
    if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
    {
        JZSDK_LOG_ERROR("预设任务标志位文件关闭失败");
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    JZSDK_LOG_INFO("设置预设任务标志位保存完成", flag);

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

/*******************
 * 
 *  设置预设任务内容保存标志位
 * 
 * ***************/
T_JZsdkReturnCode PrsetTask_SetPrsetTaskSaveContentFlag(U8_t flag)
{
    g_PrsetTask_SaveContentFlag = flag;
    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

T_JZsdkReturnCode PrsetTask_Init()
{
    T_JZsdkReturnCode ret;
    int realLen;

    T_JZsdkOsalHandler *OsalHandler = JZsdk_Platform_GetOsalHandler();
    T_JZsdkFSHandler *FSHandler = JZsdk_GetFsHandler();

    //创建预设任务目录
    FSHandler->Mkdir("/root/Preset");

    //1、读取本地的预设任务标志位
    T_JZsdkFileHandle FileHandle;
    ret = FSHandler->FileOpen(PRESET_TASK_FALG_PATH, FS_ONLY_READ, &FileHandle);
    if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
    {
        JZSDK_LOG_ERROR("预设任务标志位获取失败,没有预设的任务");
        ret = FSHandler->FileOpen(PRESET_TASK_FALG_PATH, FS_READ_AND_WRITE_CLEAR, &FileHandle);
        if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
        {
            JZSDK_LOG_ERROR("预设任务标志位文件创建失败");
            return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
        }
        
        ret = FSHandler->FileWrite_U8(FileHandle, &g_PrsetTask_Flag, 1, &realLen);
        if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
        {
            JZSDK_LOG_ERROR("预设任务标志位写入失败");
            return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
        }

        g_PrsetTask_Flag = JZ_FLAGCODE_OFF;
        return ret;
    }
    
    //2、读取标志位
    ret = FSHandler->FileRead_U8(FileHandle, &g_PrsetTask_Flag, 1, &realLen);
    if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
    {
        JZSDK_LOG_ERROR("预设任务标志位读取失败");
        g_PrsetTask_Flag = JZ_FLAGCODE_OFF;
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    //3、关闭文件
    ret = FSHandler->FileClose(FileHandle);
    if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
    {
        JZSDK_LOG_ERROR("预设任务标志位文件关闭失败");
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }

    //创建一个预设任务的等候
    OsalHandler->TaskCreate("PresetTask", PrsetTask_CreatePrsetTask, 8192, NULL, &g_PrsetTask_Handle);

    return ret;
}