void Printer::serialRead() { struct timeval tv; fd_set rfd; while(running) { tv.tv_sec = 1; tv.tv_usec = 0; FD_ZERO(&rfd); FD_SET(fd, &rfd); select(fd+1, &rfd, NULL, NULL, &tv); if(FD_ISSET(fd, &rfd)) { if(serialReadNum == 128) { // Screw it serialReadNum = 0; } writeMutex.lock(); fgets(serialReadBuffer + serialReadNum, 128 - serialReadNum, file); serialReadNum = strlen(serialReadBuffer); if(serialReadBuffer[serialReadNum - 1] == '\n') { serialReadNum = 0; serialParse(); } writeMutex.unlock(); } } }
int main(void) { unsigned long tmr1; int retVal; hardwareInit(); systemInit(); pnetNodeNumber = readNodeSw(); if (pnetNodeNumber == 0x0F) { sysStat |= ST_DEBUG_MODE; rs485TransmitEna(); putStr("\n\r DB CCS Child\r\n Ver "); // DEB, not for PROD putStr(verStr); putStr(", MLA\n\r"); menuDisplay(); putPrompt(); } rs485TransmitDisa(); while (1) { pnetNodeNumber = readNodeSw(); if (pnetNodeNumber == 0xF) sysStat |= ST_DEBUG_MODE; else sysStat &= ~ST_DEBUG_MODE; serialParse(); adcRHumid(ADC_SILENT); serialParse(); adcTemper(ADC_SILENT); adcTemperSecondary(ADC_SILENT); retVal = adcFloodSensor(ADC_SILENT); if (retVal == 1) sysStat |= ST_LIQUID_DETECTED; else if (retVal == 0) sysStat &= ~ST_LIQUID_DETECTED; if (sysStat & ST_DEBUG_MODE) LED_GREEN = 1; if (tmr1++ > 5000) { tmr1 = 0; childStateMach(CANCEL); // This is a crude timeout. Not sure how to improve it. We will rs485TransmitDisa(); // occasionally lose valid messages. But we need to break out of junky ones. } } // EO while (1) }