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