/**
 * Parses a line from client. (Overloading from superclass)
 */
void ClientKramerVSHDMIMatrix::_parseline()	{
	_bufferReadIndex=0;
	bool value;

	if (isNextPartOfBuffer_P(PSTR("~01@ OK")))	{
		_initialize();
	} else if (isNextPartOfBuffer_P(PSTR("~01@SIGNAL ")))	{
		uint8_t inputIndex = parseInt();
		_bufferReadIndex++;
		isNextPartOfBuffer_P(PSTR(" "));	// This will automatically increment _bufferReadIndex is there is a space - exactly what we need... :-)
		value = parseInt();
		
		if (inputIndex>0 && inputIndex <= ClientKramerVSHDMIMatrix_NUMINPUTS)	{
			_signalState[inputIndex-1] = value;
			if (_serialOutput>1) Serial.print(F("_signalState["));
			if (_serialOutput>1) Serial.print(inputIndex);
			if (_serialOutput>1) Serial.print(F("]="));
			if (_serialOutput>1) Serial.println(_signalState[inputIndex-1]);
		}
	} else if (isNextPartOfBuffer_P(PSTR("~01@VID ")))	{
		_hasInitialized = true;
		
		uint8_t inputIndex = parseInt();
		_bufferReadIndex++;
		uint8_t outputIndex = parseInt();
		
		if (outputIndex>0 && outputIndex <= ClientKramerVSHDMIMatrix_NUMOUTPUTS)	{
			_outputRouting[outputIndex-1] = inputIndex;
			if (_serialOutput>1) Serial.print(F("_outputRouting["));
			if (_serialOutput>1) Serial.print(outputIndex);
			if (_serialOutput>1) Serial.print(F("]="));
			if (_serialOutput>1) Serial.println(_outputRouting[outputIndex-1]);
		}
	}
}
Example #2
0
/**
 * Parses a line from client. (Overloading from superclass)
 */
void ClientBMDVideohubTCP::_parseline() {

  uint8_t inputNum;
  uint8_t outputNum;

  /*
          Additional sections in the protocol not (yet) supported:
                  MONITORING OUTPUT LABELS:
                  VIDEO MONITORING OUTPUT ROUTING:
                  MONITORING OUTPUT LOCKS:
                  SERIAL PORT LABELS:
                  SERIAL PORT ROUTING:
                  SERIAL PORT LOCKS:
                  SERIAL PORT DIRECTIONS:
                  PROCESSING UNIT ROUTING:
                  PROCESSING UNIT LOCKS:
                  FRAME LABELS:
                  FRAME BUFFER ROUTING:
                  FRAME BUFFER LOCKS:
  */

  if (!strcmp(_buffer, "")) {
    _section = 0;
  } else if (!strcmp_P(_buffer, PSTR("PROTOCOL PREAMBLE:"))) { // strcmp_P("RAM STRING", PSTR("FLASH STRING"));
    if (_serialOutput) {
      Serial.print(F("Connection to Videohub "));
      Serial.print(_IP);
      Serial.println(F(" confirmed, pulling status"));
    }
    _section = 1;
    _hasInitialized = true;
    _lastStatusRequest = millis();
  } else if (!strcmp_P(_buffer, PSTR("VIDEOHUB DEVICE:"))) {
    _section = 2;
  } else if (!strcmp_P(_buffer, PSTR("INPUT LABELS:"))) {
    _section = 3;
  } else if (!strcmp_P(_buffer, PSTR("OUTPUT LABELS:"))) {
    _section = 4;
  } else if (!strcmp_P(_buffer, PSTR("VIDEO OUTPUT LOCKS:"))) {
    _section = 5;
  } else if (!strcmp_P(_buffer, PSTR("VIDEO OUTPUT ROUTING:"))) {
    _section = 6;
  } else {
    _bufferReadIndex = 0;
    switch (_section) {
    case 2: // VIDEOHUB DEVICE
      if (isNextPartOfBuffer_P(PSTR("Device present: "))) {
        _devicePresent = isNextPartOfBuffer_P(PSTR("true"));
        if (_serialOutput > 1)
          Serial.print(F("_devicePresent="));
        if (_serialOutput > 1)
          Serial.println(_devicePresent);
      }
      if (isNextPartOfBuffer_P(PSTR("Video inputs: "))) {
        _numInputs = parseInt();
        if (_serialOutput > 1)
          Serial.print(F("_numInputs="));
        if (_serialOutput > 1)
          Serial.println(_numInputs);
      }
      if (isNextPartOfBuffer_P(PSTR("Video processing units: "))) {
        _numProcUnits = parseInt();
        if (_serialOutput > 1)
          Serial.print(F("_numProcUnits="));
        if (_serialOutput > 1)
          Serial.println(_numProcUnits);
      }
      if (isNextPartOfBuffer_P(PSTR("Video outputs: "))) {
        _numOutputs = parseInt();
        if (_serialOutput > 1)
          Serial.print(F("_numOutputs="));
        if (_serialOutput > 1)
          Serial.println(_numOutputs);
      }
      if (isNextPartOfBuffer_P(PSTR("Video monitoring outputs: "))) {
        _numMonOutputs = parseInt();
        if (_serialOutput > 1)
          Serial.print(F("_numMonOutputs="));
        if (_serialOutput > 1)
          Serial.println(_numMonOutputs);
      }
      if (isNextPartOfBuffer_P(PSTR("Serial ports: "))) {
        _serialPorts = parseInt();
        if (_serialOutput > 1)
          Serial.print(F("_serialPorts="));
        if (_serialOutput > 1)
          Serial.println(_serialPorts);
      }
      break;
    case 3: // INPUT LABELS
      inputNum = parseInt();
      if (inputNum < ClientBMDVideohubTCP_NUMINPUTS) {
        _bufferReadIndex++;

        uint8_t idx = 0;
        memset(_inputLabels[inputNum], 0, ClientBMDVideohubTCP_LABELLEN);
        while (idx < ClientBMDVideohubTCP_LABELLEN - 1 && _bufferReadIndex < _bufferWriteIndex) {
          _inputLabels[inputNum][idx++] = _buffer[_bufferReadIndex];
          _bufferReadIndex++;
        }

        if (_serialOutput > 1)
          Serial.print(F("_inputLabels "));
        if (_serialOutput > 1)
          Serial.print(inputNum);
        if (_serialOutput > 1)
          Serial.print(F("="));
        if (_serialOutput > 1)
          Serial.println(_inputLabels[inputNum]);
      }
      break;
    case 4: // OUTPUT LABELS
      outputNum = parseInt();
      if (outputNum < ClientBMDVideohubTCP_NUMOUTPUTS) {
        _bufferReadIndex++;

        uint8_t idx = 0;
        memset(_outputLabels[outputNum], 0, ClientBMDVideohubTCP_LABELLEN);
        while (idx < ClientBMDVideohubTCP_LABELLEN - 1 && _bufferReadIndex < _bufferWriteIndex) {
          _outputLabels[outputNum][idx++] = _buffer[_bufferReadIndex];
          _bufferReadIndex++;
        }

        if (_serialOutput > 1)
          Serial.print(F("_outputLabels "));
        if (_serialOutput > 1)
          Serial.print(outputNum);
        if (_serialOutput > 1)
          Serial.print(F("="));
        if (_serialOutput > 1)
          Serial.println(_outputLabels[outputNum]);
      }
      break;
    case 5: // VIDEO OUTPUT LOCKS
      outputNum = parseInt();
      if (outputNum < ClientBMDVideohubTCP_NUMOUTPUTS) {
        _outputLocks[outputNum] = _buffer[_bufferReadIndex + 1];
        if (_serialOutput > 1)
          Serial.print(F("_outputLock "));
        if (_serialOutput > 1)
          Serial.print(outputNum);
        if (_serialOutput > 1)
          Serial.print(F("="));
        if (_serialOutput > 1)
          Serial.println(_outputLocks[outputNum]);
      }
      break;
    case 6: // VIDEO OUTPUT ROUTING
      outputNum = parseInt();
      if (outputNum < ClientBMDVideohubTCP_NUMOUTPUTS) {
        _bufferReadIndex++;
        _outputRouting[outputNum] = parseInt();
        if (_serialOutput > 1)
          Serial.print(F("_outputRouting "));
        if (_serialOutput > 1)
          Serial.print(outputNum);
        if (_serialOutput > 1)
          Serial.print(F("="));
        if (_serialOutput > 1)
          Serial.println(_outputRouting[outputNum]);
      }
      break;
    }
  }
}
/**
 * Parses a line from client. (Overloading from superclass)
 */
void ClientBMDSmartView::_parseline()	{
	

	if (!strcmp(_buffer,""))	{
		_section = 0;
	} else if (!strcmp_P(_buffer,PSTR("PROTOCOL PREAMBLE:")))	{		//strcmp_P("RAM STRING", PSTR("FLASH STRING"));
		_section = 1;
		_hasInitialized = true;
		if (_serialOutput)	Serial.println(F("Connection confirmed, getting status"));
	} else if (!strcmp_P(_buffer,PSTR("SMARTVIEW DEVICE:")))	{
		_section = 2;
	} else if (!strcmp_P(_buffer,PSTR("NETWORK:")))	{
		_section = 3;
	} else if (!strcmp_P(_buffer,PSTR("MONITOR A:")))	{
		_section = 4;
	} else if (!strcmp_P(_buffer,PSTR("MONITOR B:")))	{
		_section = 5;
	} else {

		_bufferReadIndex = 0;

		switch(_section)	{
			case 4: 	// Monitor A or B:
			case 5:
				if (isNextPartOfBuffer_P(PSTR("Brightness: ")))	{
					_Smart_brightness[_section-4] = parseInt();

					if (_serialOutput>1) {
						Serial.print(F("Brightness, Mon "));
						Serial.print(_section-4);
						Serial.print(F(": "));
						Serial.println(_Smart_brightness[_section-4]);
					}
				}
				
				if (isNextPartOfBuffer_P(PSTR("Contrast: ")))	{
					_Smart_contrast[_section-4] = parseInt();

					if (_serialOutput>1) {
						Serial.print(F("Contrast, Mon "));
						Serial.print(_section-4);
						Serial.print(F(": "));
						Serial.println(_Smart_contrast[_section-4]);
					}
				}
				
				if (isNextPartOfBuffer_P(PSTR("Saturation: ")))	{
					_Smart_saturation[_section-4] = parseInt();

					if (_serialOutput>1) {
						Serial.print(F("Saturation, Mon "));
						Serial.print(_section-4);
						Serial.print(F(": "));
						Serial.println(_Smart_saturation[_section-4]);
					}
				}

				if (isNextPartOfBuffer_P(PSTR("Identify: ")))	{
					if (isNextPartOfBuffer_P(PSTR("true")))	{
						_Smart_identify[_section-4] = true;
					} else {
						_Smart_identify[_section-4] = false;
					}

					if (_serialOutput>1) {
						Serial.print(F("Identify, Mon "));
						Serial.print(_section-4);
						Serial.print(F(": "));
						Serial.println(_Smart_identify[_section-4]);
					}
				}

				if (isNextPartOfBuffer_P(PSTR("Border: ")))	{
					if (isNextPartOfBuffer_P(PSTR("None")))	{
						_Smart_border[_section-4] = 0;
					} else if (isNextPartOfBuffer_P(PSTR("Red")))	{
						_Smart_border[_section-4] = 1;
					} else if (isNextPartOfBuffer_P(PSTR("Green")))	{
						_Smart_border[_section-4] = 2;
					} else if (isNextPartOfBuffer_P(PSTR("Blue")))	{
						_Smart_border[_section-4] = 3;
/*					} else if (isNextPartOfBuffer_P(PSTR("White")))	{	// Doesn't work yet?
						_Smart_border[_section-4] = 4;
*/					} else {
						_Smart_border[_section-4] = 255;
					}

					if (_serialOutput>1) {
						Serial.print(F("Identify, Mon "));
						Serial.print(_section-4);
						Serial.print(F(": "));
						Serial.println(_Smart_border[_section-4]);
					}
				}

				if (isNextPartOfBuffer_P(PSTR("WidescreenSD: ")))	{
					if (isNextPartOfBuffer_P(PSTR("auto")))	{
						_Smart_widescreenSD[_section-4] = 0;
					} else if (isNextPartOfBuffer_P(PSTR("on")))	{
						_Smart_widescreenSD[_section-4] = 1;
					} else if (isNextPartOfBuffer_P(PSTR("off")))	{
						_Smart_widescreenSD[_section-4] = 2;
					} else {
						_Smart_widescreenSD[_section-4] = 255;
					}

					if (_serialOutput>1) {
						Serial.print(F("WidescreenSD, Mon "));
						Serial.print(_section-4);
						Serial.print(F(": "));
						Serial.println(_Smart_widescreenSD[_section-4]);
					}
				}

				if (isNextPartOfBuffer_P(PSTR("ScopeMode: ")))	{
					if (isNextPartOfBuffer_P(PSTR("Picture")))	{
						_Smart_scopeMode[_section-4] = 0;
					} else if (isNextPartOfBuffer_P(PSTR("AudioDbfs")))	{
						_Smart_scopeMode[_section-4] = 1;
					} else if (isNextPartOfBuffer_P(PSTR("AudioDbvu")))	{
						_Smart_scopeMode[_section-4] = 2;
					} else if (isNextPartOfBuffer_P(PSTR("Histogram")))	{
						_Smart_scopeMode[_section-4] = 3;
					} else if (isNextPartOfBuffer_P(PSTR("ParadeRGB")))	{
						_Smart_scopeMode[_section-4] = 4;
					} else if (isNextPartOfBuffer_P(PSTR("ParadeYUV")))	{
						_Smart_scopeMode[_section-4] = 5;
					} else if (isNextPartOfBuffer_P(PSTR("Vector100")))	{
						_Smart_scopeMode[_section-4] = 6;
					} else if (isNextPartOfBuffer_P(PSTR("Vector75")))	{
						_Smart_scopeMode[_section-4] = 7;
					} else if (isNextPartOfBuffer_P(PSTR("WaveformLuma")))	{
						_Smart_scopeMode[_section-4] = 8;
					} else {
						_Smart_scopeMode[_section-4] = 255;
					}

					if (_serialOutput>1) {
						Serial.print(F("ScopeMode, Mon "));
						Serial.print(_section-4);
						Serial.print(F(": "));
						Serial.println(_Smart_scopeMode[_section-4]);
					}
				}
				
				if (isNextPartOfBuffer_P(PSTR("AudioChannel: ")))	{
					_Smart_audioChannel[_section-4] = parseInt();

					if (_serialOutput>1) {
						Serial.print(F("AudioChannel, Mon "));
						Serial.print(_section-4);
						Serial.print(F(": "));
						Serial.println(_Smart_audioChannel[_section-4]);
					}
				}
			break;
		}
	}
}