示例#1
0
//
// Member Function
//
int CWallPadKcm::Write(UCHAR *pData, int size)
{
	CContextSetup* pContextSetup = NULL;
	int ret = ERROR;
	ULONG ulTick, delay;

	if(m_serial.IsOpen())
	{
		DBGMSG(DBG_WALLPAD, "[WallPad:KCM] Try To Write\r\n");
		DBGDMP(DBG_WALLPAD, pData, size, TRUE);

		//수신중일경우 대기
		ulTick = get_mono_time();
		while(m_isRecv) 
		{ 
			usleep(1000); 
			if(get_elapsed_time(ulTick) >= 300)
			{
				DBGMSG(DBG_WALLPAD, "[WallPad:KCM] Wait for read done: Timeout!!\r\n");
				return -1;
			}
		}

		// 485 Enable
		g_gpio_mtm.SetGpioOutPin(GPIO_RS485_CTRL, LOW);

		// TX Enable후 최초 패킷을 전송하기까지 1.5[ms] 지연
		usleep(10);

		ret = m_serial.Write(pData, size);
		if(ret == size)
		{
			memcpy((UCHAR *)&m_packet, pData, sizeof(KCM_PACKET));
		}
		else
		{
			DBGMSG(DBG_WALLPAD, "[WallPad:KCM] Write Bytes Error, write=%d, expect=%d\e\n", ret, size);
		}

		//마지막 패킷 전송후 TX Disable 하기까지 지연 (패킷사이즈 전송시간 + 1.5[ms])
		delay = (size * 1042) + 10;	// 9600[bps]에서 1start+8bit+1stop 전송속도는 1.04167[ms] 이므로 21 byte는 21.875[ms]
		usleep(delay);

		// 485 Disable
		g_gpio_mtm.SetGpioOutPin(GPIO_RS485_CTRL, HIGH);

	#if 1
		if(g_isContextSetupWallPad)
		{
			pContextSetup = (CContextSetup*)g_state.GetCurrContext();
			if(pContextSetup)
			{
				pContextSetup->PrintPacket(pData, size, CYAN, FALSE);
			}
		}
	#endif
	}
示例#2
0
//------------------------------------------------------------------------------
// Function Name  : get_elapsed_time()
// Description    :
//------------------------------------------------------------------------------
u32 get_elapsed_time(u32 _p_time)
{
    u32 c_time, e_time;

    if (_p_time > MAX_TICK)
        return 0;	//Error Case

    c_time = get_mono_time();

    if (c_time >= _p_time)
        e_time = c_time - _p_time;
    else
        e_time = MAX_TICK - _p_time + c_time;

    return e_time;
}
示例#3
0
文件: main.cpp 项目: smallka/mulacula
int main()
{
	RPNElem elems[7];

	elems[0].type = RPN_VALUE;
	elems[0].u.value = 3;

	elems[1].type = RPN_VALUE;
	elems[1].u.value = 2.5;
	elems[2].type = RPN_VARIABLE;
	elems[2].u.index = 0;
	elems[3].type = RPN_BINARY_OP;
	elems[3].u.op = BINARY_OP_TIMES;

	elems[4].type = RPN_VARIABLE;
	elems[4].u.index = 1;
	elems[5].type = RPN_BINARY_OP;
	elems[5].u.op = BINARY_OP_MINUS;

	elems[6].type = RPN_BINARY_OP;
	elems[6].u.op = BINARY_OP_PLUS;

	std::vector<RPNElem> elem_list;
	for (int i = 0; i < 7; i++)
	{
		elem_list.push_back(elems[i]);
	}

	long start;
	float val;

	float a = 2;
	float b = 4;
	val = 0;
	start = get_mono_time();
	for (int i = 0; i < 1000000; i++)
	{
		val += 3 + (a * 2.5 - b);
	}
	printf("c %f %ld\n", val, get_mono_time() - start);

	val = 0;
	start = get_mono_time();
	for (int i = 0; i < 1000000; i++)
	{
		val += CalcRPN2RAW(elems, 7, 2, 4);
	}
	printf("raw %f %ld\n", val, get_mono_time() - start);

	val = 0;
	start = get_mono_time();
	for (int i = 0; i < 1000000; i++)
	{
		val += CalcRPN2(&elem_list, 2, 4);
	}
	printf("vector %f %ld\n", val, get_mono_time() - start);

	val = 0;
	start = get_mono_time();
	for (int i = 0; i < 1000000; i++)
	{
		val += CalcRPN2STACK(&elem_list, 2, 4);
	}
	printf("stack %f %ld\n", val, get_mono_time() - start);

	val = 0;
	std::vector<RPNElem> elem_list_attr;
	RPNElem elem_attr;
	elem_list_attr.clear();
	elem_attr.type = 1;
	elem_attr.u.value = 2.0;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 5;
	elem_attr.u.index = 1;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 4;
	elem_attr.u.op = 2;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 2;
	elem_attr.u.index = 0;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 5;
	elem_attr.u.index = 2;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 1;
	elem_attr.u.value = 4.0;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 4;
	elem_attr.u.op = 4;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 4;
	elem_attr.u.op = 3;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 4;
	elem_attr.u.op = 1;
	elem_list_attr.push_back(elem_attr);
	// 2.0-p.level+a*(p.attack/4)

	Player player;
	player.level = 10;
	player.attack = 9;
	player.defence = 4;

	start = get_mono_time();
	for (int i = 0; i < 1000000; i++)
	{
		val += CalcRPN2Player(&elem_list_attr, &player, 2, 4);
	}
	printf("player %f %ld\n", val, get_mono_time() - start);

	// ------------------------------------------------------

	val = 0;
	elem_list_attr.clear();
	elem_attr.type = 1;
	elem_attr.u.value = 2.0;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 5;
	elem_attr.u.index = 1;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 4;
	elem_attr.u.op = 2;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 2;
	elem_attr.u.index = 0;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 5;
	elem_attr.u.index = 2;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 1;
	elem_attr.u.value = 4.0;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 4;
	elem_attr.u.op = 4;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 4;
	elem_attr.u.op = 3;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 4;
	elem_attr.u.op = 1;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 1;
	elem_attr.u.value = 0.1;
	elem_list_attr.push_back(elem_attr);
	elem_attr.type = 4;
	elem_attr.u.op = 6;
	elem_list_attr.push_back(elem_attr);
	// max(2.0-p.level+a*(p.attack/4), 0.1)

	player.level = 10;
	player.attack = 9;
	player.defence = 4;

	printf("ans %f\n", CalcRPN2Player(&elem_list_attr, &player, 2, 4));

	return 0;
}