/*---------------------------------------------------------------------------------------------- * 函数: rx_timeout_for_tftpd() * * 说明: tftp服务器的DPC例程, 用于接收数据包时超时的处理 **--------------------------------------------------------------------------------------------*/ void __internal __rx_timeout_for_tftpd(void * data, INT16S nr) { nr = nr; timeout_wait_rx = 1; TaskAwake((HANDLE)data); /*lint !e507*/ }
/*---------------------------------------------------------------------------------------------- * 函数: tftpd_dispatcher() * * 说明: TFTP数据包处理(启动处理任务) * * 输入: 1) ip_pkt IP数据包 * 2) pkt_len 数据包大小 **--------------------------------------------------------------------------------------------*/ void apical tftpd_dispatcher(INT08S *ip_pkt, INT16S pkt_len) { static HANDLE tftpd_task = InvalidHandle-1; static INT08S * rx_buf = NULL; void __daemon tftpd_daemon(void * data); if(!ip_pkt)return; if(!rx_buf) allocate_buffer(rx_buf, INT08S *, (INT32U)TFTP_RX_BUF_SIZE, return); if(pkt_len > TFTP_RX_BUF_SIZE){ pkt_len = TFTP_RX_BUF_SIZE; } if(tftp_packet_lock){ return; } DispatchLock(); MEMCPY(rx_buf, ip_pkt, pkt_len); tftp_packet_received = 1; DispatchUnlock(); if(tftpd_task == InvalidHandle-1){ tftpd_task=TaskCreate(tftpd_daemon, (void *)rx_buf, "tftpd", NULL, 2048, PRIO_NET, TASK_CREATE_OPT_NONE); } else { TaskAwake(tftpd_task); } }
static int spriteProc(sTaskBody *body, int msg, int lParam, int rParam) { int res = 0; SpriteVar *var = (SpriteVar *)TaskGetVar(body, sizeof(SpriteVar), MEM_APP); switch(msg) { case MSG_CREATE: { char *name = (char *)StkRefFrameP(0); var->obj = (Sprite *)StkRefFrameP(1); sParam *param = (sParam *)StkRefFrameP(2); int delay = StkRefFrameI(3); char id_str[ID_MAXLEN]; sprintf(id_str, "%s.delay", name); delay += ParamGetReal(param, id_str) * FRAME_RATE; if(delay > 0) TaskSleep(body, delay); sprintf(id_str, "%s.frame", name); var->frame = ParamGetReal(param, id_str) * FRAME_RATE; sprintf(id_str, "%s.slow", name); var->slow = ParamGetReal(param, id_str); sprintf(id_str, "%s.start", name); if(ParamIsExists(param, id_str)) { var->pos_start = *ParamGetFVec2(param, id_str); } else { var->pos_start = var->obj->pos; } sprintf(id_str, "%s.end", name); if(ParamIsExists(param, id_str)) { var->pos_end = *ParamGetFVec2(param, id_str); } else { var->pos_end = var->obj->pos; } var->obj->pos = var->pos_start; sprintf(id_str, "%s.s_sc", name); if(ParamIsExists(param, id_str)) { var->scale_start = *ParamGetFVec2(param, id_str); } else { var->scale_start = var->obj->scale; } sprintf(id_str, "%s.e_sc", name); if(ParamIsExists(param, id_str)) { var->scale_end = *ParamGetFVec2(param, id_str); } else { var->scale_end = var->obj->scale; } var->obj->scale = var->scale_start; } break; case MSG_KILL: { } break; case MSG_STEP: { var->count += 1; float d = (float)var->count / (float)var->frame; if(var->slow) d = d * d; else d = (2.0f - d) * d; var->obj->pos.x = var->pos_start.x + (var->pos_end.x - var->pos_start.x) * d; var->obj->pos.y = var->pos_start.y + (var->pos_end.y - var->pos_start.y) * d; var->obj->scale.x = var->scale_start.x + (var->scale_end.x - var->scale_start.x) * d; var->obj->scale.y = var->scale_start.y + (var->scale_end.y - var->scale_start.y) * d; res = (var->count == var->frame); } break; case MSG_GAME_TITLE_SKIP_EFFECT: { TaskAwake(body); var->count = var->frame - 1; } break; } return res; }