//Main loop, wordt door gebruiker in loop aangeroepen. Voert 1 taak per keer uit, mag geen grote loops hebben, verdelen over meerdere runs
void GPSTP::loop() {
  //snel uitvoerende code, snel weer klaar zijn, 1 handeling per keer
  //Loop voor de verschilende staten van het afhandelen van een frame
  switch (_state) {
    //begin van frame
    case EXPECT_HEADER:
      if (_serial->available() > 0) {
        _expectHeader();
      }
      break;
    //Ontvang de daatwerkelijke header
    case RECIEVE_HEADER:
      if (_serial->available() > 0) {
        _startTime = millis();
        _recieveHeader();
      }
      //no serial data, but expected. Timeout countdown
      else {
        _timeOutHandler();
      }
      break;
    //verwerk header
    case PROCESS_HEADER:
      _processHeader();
      break;
    //ontvang payload (hier draait het om)
    case RECIEVE_PAYLOAD:
      if (_serial->available() > 0) {
        _startTime = millis();
        _recievePayload();
      }
      //no serial data, but expected. Timeout countdown
      else {
        _timeOutHandler();
      }
      break;
    //verwerk payload, het aan de handler geven van de payload
    case PROCESS_PAYLOAD:
      _processPayload();
      break;
    //ontvang de 16 bit (als 2 bytes) CRC
    case RECIEVE_CRC:
      if (_serial->available() > 0) {
        _startTime = millis();
        _recieveCRC();
      }
      //no serial data, but expected. Timeout countdown
      else {
        _timeOutHandler();
      }
      break;
    //bereken en controlleer de CRC
    case PROCESS_CRC:
      _processCRC();
      break;
  }
  //Niks hier plaatsen, alles in functies die worden aangeroepen boven, in de state switch
}
/**
 * Read from client buffer. (Overloading from superclass)
 */
void ClientDbxZonePro::_readFromClient()	{
	// When we enter here we expect to read a full package at a time, so we reset buffer:
	_resetBuffer();
	uint16_t len = 0;
	bool overflow = false;
	
	while (_client.available()) {
		if (_bufferWriteIndex<_binBufferSize)	{
			_binarybuffer[_bufferWriteIndex++] = _client.read();
		} else {	// Overflow. Only theoretical because we should at some point reach "21" for the headersize, see below.
			overflow = true;
			_client.read();
			_bufferWriteIndex++; 
		}
		
		if (_bufferWriteIndex==21)	{	// Header has been retrieved completely. Subprocess this:
			if (_binarybuffer[1] || _binarybuffer[2])	{
				// Error, we don't have that large a buffer!
				if (_serialOutput)	Serial.println(F("ERROR: Too large package."));
			}
			len = (_binarybuffer[3]<<8) | _binarybuffer[4];
			
			_processPayload(len-_bufferWriteIndex);

			_resetBuffer();
			len = 0;
			overflow = false;
		}
		
		if (overflow)	{
			Serial.print(F("ERROR: Buffer overflow: Package was "));
			Serial.print(len);
			Serial.println(F(" bytes."));
		}
	}
}