///////////////////////////////////////////////////////////////////// // 函数名称:Class_Table_Check // 函数功能:课程表检测,检测是否有定时开关机信息 // 入口参数: // // 出口参数:无 //////////////////////////////////////////////////////////////////// BYTE Class_Table_Check(void) { struct CLASS_TABLE_REC *pClass; struct REALTIME_TYPE *ptime; BYTE *pBase, i, buf[3]; struct MSG_REV_TYPE Rev; if ((gClassT.Curr_rec == 0) || (gClassT.Curr_rec > 7)) return FALSE; Rev.Type = DEV_XCOM_TIME; pBase = (BYTE *)(gClassT.Class_Table_Rec + 3); ptime = RealTime_Get(); for (i = 0; i <= gClassT.Curr_rec; i++) { pClass = (struct CLASS_TABLE_REC *)(pBase + i * sizeof(struct CLASS_TABLE_REC)); if ((pClass->class_begin.hour == ptime->hour) && (pClass->class_begin.min == ptime->min)) { if (gDeviceTable.Class.Flag & CLASS_TASK_FLAG_OVER) { buf[0] = MSG_DEV_MAINBARD; buf[1] = MSG_OPTION_CLASS_BEGIN; buf[2] = 3; Msg_send(buf, 3, (uint8 *)&Rev); return TRUE; } } else if ((pClass->class_over.hour == ptime->hour) && (pClass->class_over.min == ptime->min)) { if (gDeviceTable.Class.Flag & CLASS_TASK_FLAG_OVER) return FALSE; buf[0] = MSG_DEV_MAINBARD; buf[1] = MSG_OPTION_CLASS_OVER; buf[2] = 0; Msg_send(buf, 3, (uint8 *)&Rev); return TRUE; } } return FALSE; }
//////////////////////////////////////////////////////////////////// // 函数名称:void UDP_msg_rev(uint8 *p) // 函数功能:网络命令解析 // 入口参数: // // // 出口参数:无 //////////////////////////////////////////////////////////////////// void UDP_msg_rev(uint8 *pdata) { struct tagIC2CMD_Header cmd; NetP *pnet; BYTE buf[8], rev_buf[12]; struct BASE_MSG *pmsg; struct MSG_REV_TYPE *prev; memcpy((BYTE *)&cmd, pdata + sizeof( struct XCOM_REV_TYPE), sizeof(struct tagIC2CMD_Header)); pnet = (NetP *)Get_NetPort(); if (cmd.dwSyncHead != CMD_ABLE_ICII) return; IPDword_TO_Byte(buf, cmd.dwToIP); if ((cmd.byteProtocolType & CMD_SENDER_ACK) == CMD_SENDER_ACK) { buf[0] = MSG_DEV_MAINBARD; buf[1] = MSG_OPTION_COMM; buf[2] = cmd.byteFrameIndex; buf[3] = DEV_XCOM_UDP; Task_Rec_Del(buf, 4); //删除消息列表中的重发消息 } else { if (buf[3] == 0xff) { pmsg = (struct BASE_MSG *)(pdata + sizeof(struct XCOM_REV_TYPE) + sizeof(struct tagIC2CMD_Header)); if (pmsg->option == MSG_OPTION_FILE_REQ) return; } UDP_Send_ACK(pdata); prev = (struct MSG_REV_TYPE *)rev_buf; prev->Type = DEV_XCOM_UDP; IPDword_TO_Byte(buf, cmd.dwFromIP); memcpy(prev->des_ip, buf, 4); /* pmsg=(struct BASE_MSG)pdata+sizeof(struct XCOM_REV_TYPE)+sizeof(struct tagIC2CMD_Header); p=(uint8 *)pmsg+2; if ((pmsg->device==MSG_DEV_MAINBARD)&&(pmsg->option==MSG_OPTION_CLASS_BEGIN)) {*p=4; } if ((pmsg->device==MSG_DEV_MAINBARD)&&(pmsg->option==MSG_OPTION_CLASS_OVER)) {*p=0; } */ Msg_send((uint8 *)pdata + sizeof(struct XCOM_REV_TYPE) + sizeof(struct tagIC2CMD_Header), cmd.wDataLen, rev_buf); } pnet = pnet; }
/*============================================================================== * Name : void Client_test_cb(struct ev_loop* lp, ev_io* wt, int ev) * Abstr : Check the connection is established successful or not * Params : struct ev_loop* lp: inner event loop * ev_io* wt: socket io watcher * int ev: specific event * Return : * Modify : *=============================================================================*/ static void Client_test_cb(struct ev_loop* lp, ev_io* wt, int ev) { int8 err; uint16 len; /* msg length */ CONN_INFO* conn; /* connection with servant server */ err = EXEC_SUCS; len = 0; conn = container_of(wt, CONN_INFO, io_wt); /* stop the socket io watcher */ ev_io_stop(host_loop, wt); ev_async_send(host_loop, &async_wt); /* check the result of connect */ switch (ev) { case EV_WRITE: /* connect success */ log_debug(log_cat, "%s: connect success [s_fd=%d]", &conn->name[0], conn->fd); conn->is_alive = TRUE; /* send login msg */ err = Msg_send(&(conn->fd), &(conn->s_buf[0]), &(conn->name[0])); if (!err) { Client_switch_to_recv(conn); } else { Client_switch_to_stop(conn); } break; case EV_READ: case (EV_READ | EV_WRITE): default: /* connect failed */ log_fatal(log_cat, "%s: connect failed [s_fd=%d] [%s]", &conn->name[0], conn->fd, strerror(errno)); Client_switch_to_stop(conn); break; } }
//////////////////////////////////////////////////////////////////// // 函数名称: // 函数功能:处理 // 入口参数:void *pdata // // MSG_OPTION_CLASS_BEGIN // 出口参数:无 //////////////////////////////////////////////////////////////////// //void K8_UDP_Rec_Process( tagCommand *pcommand, eip *prec) void K8_UDP_Rec_Process( void *pdata, eip *prec) { uint8 buf[300] = {0}, rev_buf[80], n, *p; uint16 i; struct MSG_REV_TYPE rec_type; struct SFILE_TRANSLATE_TYPE File_type; struct BASE_MSG Base_msg; tagCommand pcommand; p = (uint8 *)pdata; Mem_Copy((uint8 *)&pcommand, p, sizeof( tagCommand)); rec_type.Type = DEV_XCOM_UDP; rec_type.des_ip[0] = prec->SourceIp[0]; rec_type.des_ip[1] = prec->SourceIp[1]; rec_type.des_ip[2] = prec->SourceIp[2]; rec_type.des_ip[3] = prec->SourceIp[3]; memcpy(&rev_buf, &rec_type, sizeof(struct MSG_REV_TYPE)); //memcpy(&buf[4], p + sizeof(struct BASE_MSG) + sizeof(struct SFILE_TRANSLATE_TYPE), sizeof(tagCommand)); Base_msg.device = MSG_DEV_LMT; //IP_printf("recive S:%x R:%x C:%x F:%x\n",pcommand->sender,pcommand->receiver,pcommand->command,pcommand->flag); //buf[0]=MSG_DEV_LMT; switch(pcommand.command) { case EMCOMMANDREMOTECONTROLLER: Base_msg.device = MSG_DEV_LAN_KB; Base_msg.option = MSG_OPTION_LAN_KEY; buf[2] = KEY_VAL; switch(pcommand.flag) { case EMRCACTIONPOWERON: buf[3] = KEY_CLASS_BEGIN; buf[4] = KEY_CLASS_BEGIN >> 8; break; case EMRCACTIONPOWEROFF: buf[3] = KEY_CLASS_BEGIN; buf[4] = KEY_CLASS_BEGIN >> 8; break; case EMRCACTIONRECORDSTART: buf[3] = KEY_REC_PUSH ; buf[4] = KEY_REC_PUSH >> 8; break; case EMRCACTIONRECORDPAUSE: buf[3] = KEY_REC_PUSH; buf[4] = KEY_REC_PUSH >> 8; break; case EMRCACTIONRECORDSTOP: buf[3] = KEY_REC_STOP; buf[4] = KEY_REC_STOP >> 8; break; case EMRCACTIONDEVPC: buf[3] = KEY_DEVICE_PC; buf[4] = KEY_DEVICE_PC >> 8; break; case EMRCACTIONDEVNPC: buf[3] = KEY_DEVICE_NPC; buf[4] = KEY_DEVICE_NPC >> 8; break; case EMRCACTIONDEVSHOW: buf[3] = KEY_DEVICE_SHOW; buf[4] = KEY_DEVICE_SHOW >> 8; break; } break; case EMCOMMANDHEARTBEAT: Base_msg.option = MSG_OPTION_REC_K8; break; case EMCOMMANDCOM1: case EMCOMMANDCOM2: case EMCOMMANDCOM3: case EMCOMMANDCOM4: case EMCOMMANDSETBAUDRATE: Base_msg.option = MSG_OPTION_SCAMERA_CONTRL; break; case EMCOMMANDRESET: Base_msg.option = MSG_OPTION_RESET; break; case EMCOMMANDFILEREQ: Base_msg.option = MSG_OPTION_FILE_REQ; File_type.FileType = FILE_TYPE_TABLE; File_type.FilePage = pcommand.flag; memcpy(&buf[2], &File_type, sizeof(struct SFILE_TRANSLATE_TYPE)); break; case EMCOMMANDFILESEND: Base_msg.option = MSG_OPTION_FILE_SEND; File_type.FileType = FILE_TYPE_TABLE; File_type.FilePage = pcommand.flag; memcpy(&buf[2], &File_type, sizeof(struct SFILE_TRANSLATE_TYPE)); break; default: Base_msg.option = MSG_OPTION_NONE; break; } //Msg_send(buf,sizeof(tagCommand)+4,rev_buf); memcpy(&buf[0], &Base_msg, sizeof(struct BASE_MSG)); if(Base_msg.option == MSG_OPTION_FILE_SEND) { n = sizeof(struct BASE_MSG) + sizeof(struct SFILE_TRANSLATE_TYPE); memcpy(&buf[n], p + sizeof(tagCommand), 256); //IP_printf_256(&buf[n]); Msg_send(buf, sizeof(struct BASE_MSG) + sizeof(struct SFILE_TRANSLATE_TYPE) +256, rev_buf); } else { Msg_send(buf, 30, rev_buf); } //IP_printf("buf:%x %x %x %x %x %x %x %x %x %x\n",buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9]); }