Esempio n. 1
0
/*----------------------------------------------------------------------------------------------
 * 函数:    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*/
}
Esempio n. 2
0
/*----------------------------------------------------------------------------------------------
 * 函数:    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);
    }
}
Esempio n. 3
0
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;
}