// 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; }
/* * 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); } }