Beispiel #1
0
// Recieve distance from URM device
byte URMSerial::getMeasurement(int& value)
{
  if(!hasReading()) return NOTREADY;
  
  if(reqTimeout()) return TIMEOUT;
  

	// Read in data
	readSerial();

    // Validate the reading type
    switch(serialData[Header]) // Three types of command responses. 0x11 is a temperature, 0x22 Distance, 0x33 EEPROM
    {
     case COMMAND_DISTANCE:
        return processDistance(value);

     break;
     case COMMAND_TEMP:
        return processTemperature(value);
     break;
    }

    // Strange return result!
	distanceRequested = temperatureRequested = false; // This is a bug fix. If an error was returned (conrrupt byte array), reset distance measurements so we can re-request
    value = 0;
    return ERROR;
}
Beispiel #2
0
/*
 * Processes an event from the CanHandler.
 */
void CanIO::handleCanFrame(CAN_FRAME *frame)
{
    switch (frame->id) {
    case CAN_ID_GEVCU_EXT_TEMPERATURE:
        processTemperature(frame->data.byte);
        break;
    case CAN_ID_GEVCU_EXT_FLOW_COOL:
        status.flowCoolant = frame->data.high;
        break;
    case CAN_ID_GEVCU_EXT_FLOW_HEAT:
        status.flowHeater = frame->data.high;
        break;
    }
}
/*
 * Processes an event from the CanHandler.
 *
 * In case a CAN message was received which pass the masking and id filtering,
 * this method is called. Depending on the ID of the CAN message, the data of
 * the incoming message is processed.
 */
void BrusaMotorController::handleCanFrame( CAN_FRAME *frame) {
	switch (frame->id) {
	case CAN_ID_STATUS:
		processStatus(frame->data.bytes);
		break;
	case CAN_ID_ACTUAL_VALUES:
		processActualValues(frame->data.bytes);
		break;
	case CAN_ID_ERRORS:
		processErrors(frame->data.bytes);
		break;
	case CAN_ID_TORQUE_LIMIT:
		processTorqueLimit(frame->data.bytes);
		break;
	case CAN_ID_TEMP:
		processTemperature(frame->data.bytes);
		break;
	default:
		Logger::warn(BRUSA_DMC5, "received unknown frame id %X", frame->id);
	}
}