// ============================================================================= // 函数功能:复位看门狗 // 输入参数: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; }
// ============================================================================= // 函数功能:看门狗的属性设置 // 输入参数: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; }
// ============================================================================= // 函数功能:删除看门狗 // 输入参数: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; }
//----输入消息----------------------------------------------------------------- //功能: 输入设备获得新的输入后(例如新的键盘击键、鼠标点击等),调用本函数,把新的 // 消息传入系统。弹出事件,如果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; }
// ============================================================================= // 函数功能:创建虚拟看门狗 // 输入参数: // 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; }