Example #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 = GetTickCount();
		while(m_isRecv) 
		{ 
			usleep(1000); 
			if(GetElapsedTick(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
	}
Example #2
0
int main(int argc, char* argv[])
{
	/*
	FN_PRINT("Msleep 1000ms");
	for (;;)
	{
		fn::Msleep(1000);
		FN_PRINT("after 1000ms");
	}
	*/

	FN_DUMP1(fn::CDatime::GetCurrentDatime().GetYmd());
	FN_DUMP1(fn::CDatime::GetCurrentDatime().GetHms());
	FN_DUMP1(fn::CDatime::GetCurrentDatime().GetYmdhms());
	FN_DUMP1(fn::CDatime::GetCurrentDatime().GetHmsm());


	clock_t c1 = GetElapsedTick();
	FN_PRINT("Enter Elapsed");
	Func();
	FN_PRINT("Leave Elapsed");
	clock_t c2 = GetElapsedTick();
	FN_PRINT("Elapsed = %ld ms", (c2 - c1) * 1000 / CLOCKS_PER_SEC);

	double ct1, ct2;
	fn::GetTimes(ct1);
	FN_PRINT("Enter GetTimes");
	Func();
	FN_PRINT("Leave GetTimes");
	fn::GetTimes(ct2);
	FN_PRINT("GetTimes = %.1lf ms", ct2 - ct1);


	//FN_PRINT("Elapsed Second = %d s", fn::GetElapsedSecond());


	// 2015-8-19_15:13:00 -> 1439968410
	FN_PRINT("Current = %ld", fn::GetCurrentSecond());

	FN_UT_SUCCESS();
	return 0;
}
Example #3
0
void* CMicrowave::MicrowaveHandler(void *pParam)
{
	CMicrowave *pThis = (CMicrowave *)pParam;
	UINT uValue, ulTick;

	DBGMSG(DBG_MICROWAVE, "%s: Start\r\n", __func__);

	ulTick = GetTickCount();

	while(pThis->m_fRunning)
	{
		if(pThis->m_isMeasureEnable)
		{
		#if 0
			uValue = pThis->GetAdcSamplingValue();
			if(uValue > g_setup_data.m_SetupData.adc_value)
			{
			//	post_event(GR_EVENT_TYPE_USER, EVT_MICROWAVE_DETECT, uValue, 0);
			}
		#else
			if(pThis->DoAdcSamplingStep())
			{
				uValue = pThis->GetAdcSamplingResult();
				if(uValue > g_setup_data.m_SetupData.adc_value)
				{
					if(GetElapsedTick(ulTick) >= MEASURE_REPORT_TERM)
					{
						g_message.SendMessage(MSG_MICROWAVE_EVENT);
						ulTick = GetTickCount();
					}
				}
			}
		#endif
		}

		usleep(MEASURE_PERIOD);
	}

	DBGMSG(DBG_MICROWAVE, "%s: End\r\n", __func__);

	pthread_exit(NULL); 
}
Example #4
0
void CContextElevator::ThreadProc()
{
	static int nArrowStep;
	static ULONG ulTickDraw;
	char szText[32] = {0,};

	//호출이 성공하고 엘리베이터 상태를 모니터링 하는 동안 동작함
//	if(m_nContextNum==0) return;

	switch(m_nThreadStep)
	{
	case 0:
		nArrowStep = 0;
		m_nThreadStep++;
		break;
	case 1:
		if( m_pObjectIcon && (m_nContextNum==2))
		{
			RedrawImage(m_wid_parent, m_gc, 245, 89, 500, 32, 245, 89, 500, 32, ELEVATOR_OBJ_BG);
			switch(m_nElevatorDir)
			{
			case MTM_DATA_EV_STATUS_STOP:
				DrawText("엘레베이터가 정지해 있습니다",  m_wid_parent, m_gc,  245, 89, 500, 32, g_font, 24, WHITE, TXT_HALIGN_LEFT|TXT_VALIGN_MIDDLE);
				break;
			case MTM_DATA_EV_STATUS_UP:
			case MTM_DATA_EV_STATUS_DOWN:
				DrawText("엘레베이터가 이동중 입니다",  m_wid_parent, m_gc,  245, 89, 500, 32, g_font, 24, WHITE, TXT_HALIGN_LEFT|TXT_VALIGN_MIDDLE);
				break;
			case MTM_DATA_EV_STATUS_ARRIVE:
				DrawText("엘레베이터가 도착 하였습니다",  m_wid_parent, m_gc,  245, 89, 500, 32, g_font, 24, WHITE, TXT_HALIGN_LEFT|TXT_VALIGN_MIDDLE);
				break;
			}

			//방향표시
			if( (m_nElevatorDir == MTM_DATA_EV_STATUS_STOP) || (m_nElevatorDir == MTM_DATA_EV_STATUS_ARRIVE) )
			{
				m_pObjectIcon->Draw(IMG_ENUM_ARROW_BLANK);
				nArrowStep = 0;
			}
			else if(m_nElevatorDir == MTM_DATA_EV_STATUS_DOWN)
			{
				switch(nArrowStep)
				{
				case 0:
					m_pObjectIcon->Draw(IMG_ENUM_ARROW_DOWN_1);
					break;
				case 1:
					m_pObjectIcon->Draw(IMG_ENUM_ARROW_DOWN_2);
					break;
				default:
					m_pObjectIcon->Draw(IMG_ENUM_ARROW_DOWN_3);
					break;
				}

				nArrowStep++;
				if(nArrowStep==5) nArrowStep=0;
			}
			else if(m_nElevatorDir == MTM_DATA_EV_STATUS_UP)
			{
				switch(nArrowStep)
				{
				case 0:
					m_pObjectIcon->Draw(IMG_ENUM_ARROW_UP_1);
					break;
				case 1:
					m_pObjectIcon->Draw(IMG_ENUM_ARROW_UP_2);
					break;
				default:
					m_pObjectIcon->Draw(IMG_ENUM_ARROW_UP_3);
					break;
				}

				nArrowStep++;
				if(nArrowStep==5) nArrowStep=0;
			}

			//층표시
			if(m_nElevatorFloor > 0)
			{
				if(m_nElevatorFloor >= 128)
					sprintf(szText, "B%2d\0", 256-m_nElevatorFloor);
				else
					sprintf(szText, "%3d\0", m_nElevatorFloor);
			}
			else if(m_nElevatorFloor < 0)
			{
				sprintf(szText, "B%2d\0", m_nElevatorFloor*(-1));
			}
		//	else
		//	{
		//		sprintf(szText, "L\0");
		//	}

		#if 0
			DrawText(szText, m_wid_parent, m_gc,  339+13, 240+13, 143-26, 127-26, g_font, 72, WHITE, TXT_HALIGN_CENTER|TXT_VALIGN_MIDDLE);
		#else
			RedrawImage(m_wid_parent, m_gc, 352, 253, 117, 101, 12, 12, 117, 101, ELEVATOR_OBJ_DISPLAY);
			DrawText(szText, m_wid_parent, m_gc,  352, 253, 117, 101, g_font, 80, WHITE, TXT_HALIGN_CENTER|TXT_VALIGN_TOP);
			//DrawText(szText, m_wid_parent, m_gc,  352, 253, 117, 101, g_font, 72, WHITE, TXT_HALIGN_CENTER|TXT_VALIGN_MIDDLE);
		#endif

			ulTickDraw = GetTickCount();
			m_nThreadStep++;
		}
		break;
	case 2:
		if(GetElapsedTick(ulTickDraw) >= 500)
		{
			m_nThreadStep--;
		}
		break;
	}
}