public synchronized void reply(SpeedoReply l){
  count=l.getCount();
  series=l.getSeries();
  if (count > 0) {
switch (series) {
case 4:
      circ=12.5664F;
    readerLabel.setText(rb.getString("Reader40"));
  break;
case 5:
circ=18.8496F;
readerLabel.setText(rb.getString("Reader50"));
break;
case 6:
circ=50.2655F;
readerLabel.setText(rb.getString("Reader60"));
break;
default :
speedTextField.setText(rb.getString("ReaderErr"));
log.error("Invalid reader type");
break;
}
calcSpeed();
}
if (timerRunning == false) {
startReplyTimer();
startDisplayTimer();
startFastDisplayTimer();
timerRunning=true;
}
 else {
replyTimer.restart();
}
}

public synchronized void reply ( SpeedoReply l ) { count = l . getCount ( ) ; series = l . getSeries ( ) ; if ( count > 0 ) { switch ( series ) { case 4 : circ = 12.5664F ; readerLabel . setText ( rb . getString ( "Reader40" ) ) ; break ; case 5 : circ = 18.8496F ; readerLabel . setText ( rb . getString ( "Reader50" ) ) ; break ; case 6 : circ = 50.2655F ; readerLabel . setText ( rb . getString ( "Reader60" ) ) ; break ; default : speedTextField . setText ( rb . getString ( "ReaderErr" ) ) ; log . error ( "Invalid reader type" ) ; break ; } calcSpeed ( ) ; } if ( timerRunning == false ) { startReplyTimer ( ) ; startDisplayTimer ( ) ; startFastDisplayTimer ( ) ; timerRunning = true ; } else { replyTimer . restart ( ) ; } }
handle " replies " from the hardware . in fact , all the hardware does is send a constant stream of unsolicited speed updates .
