void CDavisLoggerSerial::readCallback(const char *data, size_t len) { boost::lock_guard<boost::mutex> l(readQueueMutex); try { //_log.Log(LOG_NORM,"Davis: received %ld bytes",len); switch (m_state) { case DSTATE_WAKEUP: if (len==2) { _log.Log(LOG_NORM,"Davis: System is Awake..."); m_state=DSTATE_LOOP; m_statecounter=DAVIS_READ_INTERVAL-1; } break; case DSTATE_LOOP: if (len==2) break; //could be a left over from the awake if (len!=100) { _log.Log(LOG_ERROR,"Davis: Invalid bytes received!..."); //lets try again try { clearReadCallback(); close(); doClose(); setErrorStatus(true); } catch(...) { //Don't throw from a Stop command } } else { if (!HandleLoopData((const unsigned char*)data,len)) { //error in data, try again... try { clearReadCallback(); close(); doClose(); setErrorStatus(true); } catch(...) { //Don't throw from a Stop command } } } break; } //onRFXMessage((const unsigned char *)data,len); } catch (...) { } }
void CDavisLoggerSerial::Do_Work() { int sec_counter = 0; while (!m_stoprequested) { sleep_seconds(1); sec_counter++; if (sec_counter % 12 == 0) { mytime(&m_LastHeartbeat); } if (m_stoprequested) break; #ifdef DEBUG_DAVIS sOnConnected(this); HandleLoopData(NULL,0); continue; #endif if (!isOpen()) { if (m_retrycntr==0) { _log.Log(LOG_STATUS,"Davis: serial setup retry in %d seconds...", RETRY_DELAY); } m_retrycntr++; if (m_retrycntr>=RETRY_DELAY) { m_retrycntr=0; OpenSerialDevice(); } } else { switch (m_state) { case DSTATE_WAKEUP: m_statecounter++; if (m_statecounter<5) { write("\n",1); } else { m_retrycntr=0; //still did not receive a wakeup, lets try again terminate(); } break; case DSTATE_LOOP: m_statecounter++; if (m_statecounter>=DAVIS_READ_INTERVAL) { m_statecounter=0; write("LOOP 1\n", 7); } break; } } } _log.Log(LOG_STATUS,"Davis: Serial Worker stopped..."); }
void CDavisLoggerSerial::Do_Work() { while (!m_stoprequested) { sleep_seconds(1); if (m_stoprequested) break; #ifdef DEBUG_DAVIS sOnConnected(this); HandleLoopData(NULL,0); continue; #endif if (!isOpen()) { if (m_retrycntr==0) { _log.Log(LOG_NORM,"Davis: serial setup retry in %d seconds...", RETRY_DELAY); } m_retrycntr++; if (m_retrycntr>=RETRY_DELAY) { m_retrycntr=0; OpenSerialDevice(); } } else { switch (m_state) { case DSTATE_WAKEUP: m_statecounter++; if (m_statecounter<5) { write("\n",1); } else { m_retrycntr=0; //still did not receive a wakeup, lets try again try { clearReadCallback(); close(); doClose(); setErrorStatus(true); } catch(...) { //Don't throw from a Stop command } } break; case DSTATE_LOOP: m_statecounter++; if (m_statecounter>=DAVIS_READ_INTERVAL) { m_statecounter=0; write("LOOP 1\n", 7); } break; } } } _log.Log(LOG_NORM,"Davis: Serial Worker stopped..."); }