package se.nicklasgavelin.sphero.response.regular; import se.nicklasgavelin.sphero.response.ResponseMessage; /** * Version response giving the version of the Sphero. * * @author Orbotix * @author Nicklas Gavelin, nicklas.gavelin@gmail.com, LuleƄ University of Technology */ public class VersioningResponse extends ResponseMessage { private int modelNumber = 0; // Indexes private static final int RECORD_VERSION_INDEX = 0, MODEL_VERSION_INDEX = 1, HARDWARE_VERSION_INDEX = 2, MAIN_APPLICATION_VERSION_INDEX_1 = 3, MAIN_APPLICATION_VERSION_INDEX_2 = 4, BOOTLOADER_VERSION_INDEX = 5, ORB_BASIC_VERSION_INDEX = 6, OVERLAY_MANAGER_VERSION_INDEX = 7; // Values private String recordVersion = null, hardwareVersion = null, mainApplicationVersion = null, overlayManagerVersion = null, bootloaderVersion = null, orbBasicVersion = null; /** * Create a version response from a data array * * @param rh The response header containing the response data */ public VersioningResponse( ResponseHeader rh )// byte[] data ) { super( rh );// super( DEVICE_COMMAND.VERSIONING, data ); // Check so that we got a valid response if( !isCorrupt() ) { byte[] data = this.getPacketPayload(); this.recordVersion = ( ( data[RECORD_VERSION_INDEX] >> 4 ) + "." + ( 0xF & data[RECORD_VERSION_INDEX] ) ); this.modelNumber = data[MODEL_VERSION_INDEX]; this.hardwareVersion = ( ( data[HARDWARE_VERSION_INDEX] >> 4 ) + "." + ( 0xF & data[HARDWARE_VERSION_INDEX] ) ); this.mainApplicationVersion = ( data[MAIN_APPLICATION_VERSION_INDEX_1] + "." + data[MAIN_APPLICATION_VERSION_INDEX_2] ); this.bootloaderVersion = ( ( data[BOOTLOADER_VERSION_INDEX] >> 4 ) + "." + ( 0xF & data[BOOTLOADER_VERSION_INDEX] ) ); this.orbBasicVersion = ( ( data[ORB_BASIC_VERSION_INDEX] >> 4 ) + "." + ( 0xF & data[ORB_BASIC_VERSION_INDEX] ) ); this.overlayManagerVersion = ( ( data[OVERLAY_MANAGER_VERSION_INDEX] >> 4 ) + "." + ( 0xF & data[OVERLAY_MANAGER_VERSION_INDEX] ) ); } } /** * Returns the bootloader version number * * @return The bootloader version number or null if no version number */ public String getBootloaderVersion() { return this.bootloaderVersion; } /** * Returns the hardware version number * * @return The hardware version number null if no version number */ public String getHardwareVersion() { return this.hardwareVersion; } /** * Returns the main application version number * * @return The main application version number null if no version number */ public String getMainApplicationVersion() { return this.mainApplicationVersion; } /** * Returns the model number * * @return The model number or 0 if no version number */ public int getModelNumber() { return this.modelNumber; } /** * Returns the orb basic version number * * @return The orb basic version number null if no version number */ public String getOrbBasicVersion() { return this.orbBasicVersion; } /** * Returns the overlay manager version number * * @return The overlay manager version number null if no version number */ public String getOverlayManagerVersion() { return this.overlayManagerVersion; } /** * Returns the record version number * * @return The record version number null if no version number */ public String getRecordVersion() { return this.recordVersion; } @Override public String toString() { return getClass().getCanonicalName() + "[recordVersion=" + getRecordVersion() + ", overlayManagerVersion=" + getOverlayManagerVersion() + ", orbBasicVersion=" + getOrbBasicVersion() + ", modelNumber=" + getModelNumber() + ", mainApplicationVersion=" + getMainApplicationVersion() + ", hardwareVersion=" + getHardwareVersion() + ", bootloaderVersion=" + getBootloaderVersion() + "]"; } }