void ProcessMessage(SMBData *smb) { if (smb->state != SMB_STATE_WRITE_REQUESTED) { smb->state = SMB_STATE_IDLE; return; } switch (smb->rxBuffer[0]) // Command code. { case DRV_WHO_AM_I: WhoAmI(smb); break; case DRV_SET_DIRECTION: SetDirection(smb); break; case DRV_SET_SPEED: SetSpeed(smb); break; case DRV_DRV_ENABLE: EnableMotors(smb); break; case DRV_SET_ADDRESS: SetAddress(smb); break; case DRV_DRV_DISABLE: DisableMotors(smb); break; default: UndefinedCommand(smb); break; } }
// Disables motors (base class closes I2C connection) Motor::~Motor() { DisableMotors(); }