// // 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 }
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; }
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); }
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; } }