Exemplo n.º 1
0
// =============================================================================
// 函数功能:复位看门狗
// 输入参数:wdt,待操作的看门狗
// 输出参数:
// 返回值  :true success while false failed
// 说明    :
// =============================================================================
bool_t Wdt_Clean(tagWdt *wdt)
{
    bool_t       result;
    tagWdtMsg    wdtmsg;
    atom_low_t   atom;
    s64          ostime;

    result = false;
    if(NULL != wdt)
    {
        atom = Int_LowAtomStart();
        if(ptWdtHead != wdt)
        {
            //可以直接修改wdtqueue
            ostime = DjyGetTime();
            __Wdt_RemovefQueue(wdt);
            wdt->deadtime = wdt->cycle + ostime;
            __Wdt_Add2Queque(wdt);
            Int_LowAtomEnd(atom);
        }
        else
        {
            //snd msg to the monitor task
            Int_LowAtomEnd(atom);
            wdtmsg.pwdt = wdt;
            wdtmsg.opcode = EN_WDTCMD_CLEAN;
            wdtmsg.para = 0;
            result = MsgQ_Send(ptWdtMsgBox,(u8 *)&wdtmsg,sizeof(tagWdtMsg),\
                               CN_TIMEOUT_FOREVER,CN_MSGQ_PRIO_NORMAL);
        }

    }
    return result;
}
Exemplo n.º 2
0
// =============================================================================
// 函数功能:看门狗的属性设置
// 输入参数:wdt,待操作的看门狗
//          type,操作类型,参见enum EN_WDTCMD的定义
//          para,随着type的不同而不同
// 输出参数:
// 返回值  :操作完毕的看门狗
// 说明    :操作码只能是EN_WDTCMD_PAUSE及其以下
// =============================================================================
bool_t Wdt_Ctrl(tagWdt *wdt, u32 type, ptu32_t para)
{
    bool_t       result;
    tagWdtMsg    wdtmsg;

    result = false;
    if((NULL != wdt)&&(type >= EN_WDTCMD_PAUSE)&&(type < EN_WDTCMD_INVALID))
    {
        wdtmsg.pwdt = wdt;
        wdtmsg.opcode = type;
        wdtmsg.para = para;
        result = MsgQ_Send(ptWdtMsgBox,(u8 *)&wdtmsg,sizeof(tagWdtMsg),\
                           CN_TIMEOUT_FOREVER,CN_MSGQ_PRIO_NORMAL);
    }
    return result;
}
Exemplo n.º 3
0
// =============================================================================
// 函数功能:删除看门狗
// 输入参数:wdt,待删除的看门狗
// 输出参数:
// 返回值  :true成功,false失败
// 说明    :和Wdt_Create_s成对调用
// =============================================================================
bool_t Wdt_Delete_s(tagWdt *wdt)
{
    bool_t       result;
    tagWdtMsg    wdtmsg;

    result = false;
    if(NULL != wdt)
    {
        wdtmsg.pwdt = wdt;
        wdtmsg.opcode = EN_WDTCMD_DEL;
        wdtmsg.para = 0;
        result = MsgQ_Send(ptWdtMsgBox,(u8 *)&wdtmsg,sizeof(tagWdtMsg),\
                           CN_TIMEOUT_FOREVER,CN_MSGQ_PRIO_NORMAL);
    }

    return result;
}
Exemplo n.º 4
0
//----输入消息-----------------------------------------------------------------
//功能: 输入设备获得新的输入后(例如新的键盘击键、鼠标点击等),调用本函数,把新的
//      消息传入系统。弹出事件,如果in_device->focus_evtt已初始化,则事件类型是
//      in_device->focus_evtt,如果未初始化,则事件类型是u16g_default_focus,
//      如果u16g_default_focus也没有初始化,则不弹出事件
//参数: in_device,目标输入设备的资源接点
//      msg_data,包含输入的数据
//      msg_size,输入消息的长度,字节数
//返回: true=成功,false=失败,一般是因为输入设备未安装。
//-----------------------------------------------------------------------------
bool_t Stddev_InputMsg(s32 stdin_id,u8 *msg_data, u32 msg_size)
{
    struct  tagRscNode  *current,*start,*target;
    struct tagInputDeviceMsg input_msg;
    tpInputMsgQ InputMsgQ;

    msg_size = msg_size;        //消除编译器告警

    start = &s_ptStdinDeviceRscTree->stdin_device_node;
    current = &s_ptStdinDeviceRscTree->stdin_device_node;

    //在资源队列中查找stdin_id对应的输入设备
    while((target = Rsc_TraveScion(start,current))!=NULL)
    {
        if(((struct tagStdinDeviceRsc *)target)->device_id == stdin_id)
            break;
        current = target;
    }
    if(target == NULL)        //未找到输入设备
        return false;

    InputMsgQ = ((struct tagStdinDeviceRsc *)target)->FocusMsgQ;
    ((struct tagStdinDeviceRsc *)target)->input_counter++;
    if(InputMsgQ == NULL)      //该设备的输入焦点未初始化
    {
        InputMsgQ = tg_pDefaultFocusMsgQ;      //取默认焦点(可能也未初始化)
    }

    if(InputMsgQ != NULL)
    {
        input_msg.input_data = *(union un_input_data *)msg_data;
        input_msg.input_type = ((struct tagStdinDeviceRsc *)target)->input_type;
        input_msg.device_id = ((struct tagStdinDeviceRsc *)target)->device_id;
        MsgQ_Send(InputMsgQ,(u8*)&input_msg,sizeof(struct tagInputDeviceMsg),
                    CN_TIMEOUT_FOREVER,CN_MSGQ_PRIO_NORMAL);
    }
    return true;
}
Exemplo n.º 5
0
// =============================================================================
// 函数功能:创建虚拟看门狗
// 输入参数:
//          wdt,用户自己提供的存储空间
//          dogname,看门狗名字
//          yip_cylce,狗叫周期,单位为微秒
//          yiphook,狗叫善后函数指针
//          yip_action,狗叫动作,当yiphook为空或者返回default时采用此值
//          levepara,看门狗超时的原因以及超时容忍次数等限制参数
// 输出参数:
// 返回值  :创建的虚拟看门狗,NULL表示失败
// 说明    :务必保证看门狗善后函数返回值的定义符合标准,见enum _EN_EXP_DEAL_TYPE
//           的声明(exp_api.h文件)
//           创建的看门狗若成功,则下次狗叫时间为当前时间+yip_cycle
// =============================================================================
tagWdt *Wdt_Create_s(tagWdt *wdt, char *dogname,u32 yip_cycle,\
        fnYipHook yiphook,ptu32_t yip_action, tagWdtTolerate *levelpara)
{

    tagWdt     *result;
    tagWdtMsg  wdtmsg;

    result = NULL;
    if((NULL != wdt)&&( 0 != yip_cycle))
    {
        memset((u8 *)wdt, 0, sizeof(tagWdt));
        wdt->pname = dogname;
        wdt->cycle = yip_cycle;
        wdt->fnhook = yiphook;
        wdt->action = yip_action;
        if(NULL != levelpara)
        {
            wdt->runtimelevel = levelpara->runtimelevel;
            wdt->sheduletimeslevel = levelpara->shtimeoutlevel;
        }
        wdt->taskownerid = CN_EVENT_ID_INVALID;

        //snd the msg to the service task
        wdtmsg.pwdt = wdt;
        wdtmsg.opcode = EN_WDTCMD_ADD;
        wdtmsg.para = 0;
        if(MsgQ_Send(ptWdtMsgBox,(u8 *)&wdtmsg, sizeof(tagWdtMsg),CN_TIMEOUT_FOREVER,CN_MSGQ_PRIO_NORMAL))
        {
            result = wdt;
        }
        else
        {
            memset((u8 *)wdt, 0, sizeof(tagWdt));
        }
    }

    return result;
}