  * userIO
  */
 char * userInput(char * message) {
-	char * input = NULL;
+	unsigned long timeLoopStart,timeLoop;
 	int nread = 0;
-	Serial.print(message);
-	while (!(nread = Serial.readBytes(commsBuffer, COMMS_BUFFER_SIZE)));
-	if (nread == COMMS_BUFFER_SIZE)
-		return input; // buffer overflow
+	if (message)
+		Serial.print(message);
+	timeLoopStart = timeLoop = millis();
+	// Serial timeout triggers on full commsBuffer, just wait for first command
+	while (nread == 0 && timeLoop - timeLoopStart < SERIAL_HOST_DELAY_MS) {
+		// drop older contents on buffer overflow
+		while ((nread = Serial.readBytes(commsBuffer, COMMS_BUFFER_SIZE)) == COMMS_BUFFER_SIZE);
+		timeLoop = millis();
+	}		
 	commsBuffer[nread] = 0;
-	input = commsBuffer;
-	return input;
+	return nread == 0 ? NULL : commsBuffer;
 }
 
 /* 

 * **** **** **** **** **** ****/

#define BPS_HOST 9600
#define COMMS_BUFFER_SIZE 256

/* 
 * ultra sonic telemeter mesure


		case IN_STEPPER:
			if (!(input = userInput("STEPS: ")))
				while (!(input = userInput(NULL)));
			value = atoi(input);
			stepperCommand(value);
			newState = IN_CMD;
