diff --git a/radio/bootloader/include/MSD.h b/radio/bootloader/include/MSD.h
deleted file mode 100644
index 23a934d35..000000000
--- a/radio/bootloader/include/MSD.h
+++ /dev/null
@@ -1,233 +0,0 @@
-/* ----------------------------------------------------------------------------
- * ATMEL Microcontroller Software Support
- * ----------------------------------------------------------------------------
- * Copyright (c) 2008, Atmel Corporation
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the disclaimer below.
- *
- * Atmel's name may not be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
- * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ----------------------------------------------------------------------------
- */
-
-//------------------------------------------------------------------------------
-/// \unit
-/// !Purpose
-///
-/// Mass Storage class definitions.
-///
-/// See
-/// -
-/// USB Mass Storage Class Spec. Overview
-/// -
-/// USB Mass Storage Class Bulk-Only Transport
-///
-/// !Usage
-///
-/// -# Uses "MSD Requests" to check incoming requests from USB Host.
-/// -# Uses "MSD Subclass Codes" and "MSD Protocol Codes" to fill %device
-/// interface descriptors for a MSD %device.
-/// -# Handle the incoming Bulk data with "MSD CBW Definitions" and MSCbw
-/// structure.
-/// -# Prepare the outgoing Bulk data with "MSD CSW Definitions" and MSCsw
-/// structure.
-//------------------------------------------------------------------------------
-
-#ifndef MSD_H
-#define MSD_H
-
-//------------------------------------------------------------------------------
-// Definitions
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \page "MSD Requests"
-/// This page lists MSD-specific requests ( Actually for Bulk-only protocol ).
-///
-/// !Requests
-/// - MSD_BULK_ONLY_RESET
-/// - MSD_GET_MAX_LUN
-
-/// Reset the mass storage %device and its associated interface.
-#define MSD_BULK_ONLY_RESET 0xFF
-/// Return the maximum LUN number supported by the %device.
-#define MSD_GET_MAX_LUN 0xFE
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \page "MSD Subclass Codes"
-/// This page lists the Subclass Codes for bInterfaceSubClass field.
-/// (Table 2.1, USB Mass Storage Class Spec. Overview)
-///
-/// !SubClasses
-/// - MSD_SUBCLASS_RBC
-/// - MSD_SUBCLASS_SFF_MCC
-/// - MSD_SUBCLASS_QIC
-/// - MSD_SUBCLASS_UFI
-/// - MSD_SUBCLASS_SFF
-/// - MSD_SUBCLASS_SCSI
-
-/// Reduced Block Commands (RBC) T10
-#define MSD_SUBCLASS_RBC 0x01
-/// C/DVD devices
-#define MSD_SUBCLASS_SFF_MCC 0x02
-/// Tape device
-#define MSD_SUBCLASS_QIC 0x03
-/// Floppy disk drive (FDD) device
-#define MSD_SUBCLASS_UFI 0x04
-/// Floppy disk drive (FDD) device
-#define MSD_SUBCLASS_SFF 0x05
-/// SCSI transparent command set
-#define MSD_SUBCLASS_SCSI 0x06
-//------------------------------------------------------------------------------
-
-
-//------------------------------------------------------------------------------
-/// \page "MSD Protocol Codes"
-/// This page lists the Transport Protocol codes for MSD.
-/// (Table 3.1, USB Mass Storage Class Spec. Overview)
-///
-/// !Protocols
-/// - MSD_PROTOCOL_CBI_COMPLETION
-/// - MSD_PROTOCOL_CBI
-/// - MSD_PROTOCOL_BULK_ONLY
-
-/// Control/Bulk/Interrupt (CBI) Transport (with command complete interrupt)
-#define MSD_PROTOCOL_CBI_COMPLETION 0x00
-/// Control/Bulk/Interrupt (CBI) Transport (no command complete interrupt)
-#define MSD_PROTOCOL_CBI 0x01
-/// Bulk-Only Transport
-#define MSD_PROTOCOL_BULK_ONLY 0x50
-//------------------------------------------------------------------------------
-
-/// Test unit control:
-#define CTRL_NOT_READY 0x00
-#define CTRL_GOOD 0x01
-#define CTRL_BUSY 0x02
-
-//------------------------------------------------------------------------------
-/// \page "MSD CBW Definitions"
-/// This page lists the Command Block Wrapper (CBW) definitions.
-///
-/// !Constants
-/// - MSD_CBW_SIZE
-/// - MSD_CBW_SIGNATURE
-///
-/// !Fields
-/// - MSD_CBW_DEVICE_TO_HOST
-
-/// Command Block Wrapper Size
-#define MSD_CBW_SIZE 31
-/// 'USBC' 0x43425355
-#define MSD_CBW_SIGNATURE 0x43425355
-
-/// CBW bmCBWFlags field
-#define MSD_CBW_DEVICE_TO_HOST (1 << 7)
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \page "MSD CSW Definitions"
-/// This page lists the Command Status Wrapper (CSW) definitions.
-///
-/// !Constants
-/// - MSD_CSW_SIZE
-/// - MSD_CSW_SIGNATURE
-///
-/// !Command Block Status Values
-/// (Table 5.3 , USB Mass Storage Class Bulk-Only Transport)
-/// - MSD_CSW_COMMAND_PASSED
-/// - MSD_CSW_COMMAND_FAILED
-/// - MSD_CSW_PHASE_ERROR
-
-/// Command Status Wrapper Size
-#define MSD_CSW_SIZE 13
-/// 'USBS' 0x53425355
-#define MSD_CSW_SIGNATURE 0x53425355
-
-/// Command Passed (good status)
-#define MSD_CSW_COMMAND_PASSED 0
-/// Command Failed
-#define MSD_CSW_COMMAND_FAILED 1
-/// Phase Error
-#define MSD_CSW_PHASE_ERROR 2
-//------------------------------------------------------------------------------
-
-
-//------------------------------------------------------------------------------
-// Structures
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// Command Block Wrapper (CBW),
-/// See Table 5.1, USB Mass Storage Class Bulk-Only Transport.
-///
-/// The CBW shall start on a packet boundary and shall end as a
-/// short packet with exactly 31 (1Fh) bytes transferred.
-//------------------------------------------------------------------------------
-typedef struct {
-
- /// 'USBC' 0x43425355 (little endian)
- unsigned int dCBWSignature;
- /// Must be the same as dCSWTag
- unsigned int dCBWTag;
- /// Number of bytes transfer
- unsigned int dCBWDataTransferLength;
- /// Indicates the directin of the transfer:
- /// 0x80=IN=device-to-host,
- /// 0x00=OUT=host-to-device
- unsigned char bmCBWFlags;
- /// bits 0->3: bCBWLUN
- unsigned char bCBWLUN :4,
- bReserved1:4; /// reserved
- /// bits 0->4: bCBWCBLength
- unsigned char bCBWCBLength:5,
- bReserved2 :3; /// reserved
- /// Command block
- unsigned char pCommand[16];
-
-} MSCbw;
-
-//------------------------------------------------------------------------------
-/// Command Status Wrapper (CSW),
-/// See Table 5.2, USB Mass Storage Class Bulk-Only Transport.
-//------------------------------------------------------------------------------
-typedef struct
-{
- /// 'USBS' 0x53425355 (little endian)
- unsigned int dCSWSignature;
- /// Must be the same as dCBWTag
- unsigned int dCSWTag;
- /// For Data-Out the device shall report in the dCSWDataResidue the
- /// difference between the amount of data expected as stated in the
- /// dCBWDataTransferLength, and the actual amount of data processed by
- /// the device. For Data-In the device shall report in the dCSWDataResidue
- /// the difference between the amount of data expected as stated in the
- /// dCBWDataTransferLength and the actual amount of relevant data sent by
- /// the device. The dCSWDataResidue shall not exceed the value sent in the
- /// dCBWDataTransferLength.
- unsigned int dCSWDataResidue;
- /// Indicates the success or failure of the command.
- unsigned char bCSWStatus;
-
-} MSCsw;
-
-#endif //#ifndef MSD_H
-
diff --git a/radio/bootloader/include/MSDDriver.h b/radio/bootloader/include/MSDDriver.h
deleted file mode 100644
index 30e6b087c..000000000
--- a/radio/bootloader/include/MSDDriver.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* ----------------------------------------------------------------------------
- * ATMEL Microcontroller Software Support
- * ----------------------------------------------------------------------------
- * Copyright (c) 2008, Atmel Corporation
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the disclaimer below.
- *
- * Atmel's name may not be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
- * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ----------------------------------------------------------------------------
- */
-
-//------------------------------------------------------------------------------
-/// \unit
-/// !Purpose
-///
-/// Mass storage %device driver implementation.
-///
-/// !Usage
-///
-/// -# Enable and setup USB related pins (see pio & board.h).
-/// -# Configure the memory interfaces used for Mass Storage LUNs
-/// (see memories, MSDLun.h).
-/// -# Configure the USB MSD %driver using MSDDriver_Initialize.
-/// -# Invoke MSDDriver_StateMachine in main loop to handle all Mass Storage
-/// operations.
-//------------------------------------------------------------------------------
-
-#ifndef MSDDRIVER_H
-#define MSDDRIVER_H
-
-//------------------------------------------------------------------------------
-// Headers
-//------------------------------------------------------------------------------
-
-#include "MSD.h"
-#include "MSDLun.h"
-// #include
-
-//------------------------------------------------------------------------------
-// Global functions
-//------------------------------------------------------------------------------
-
-extern void MSDDriver_Initialize(MSDLun *luns, unsigned char numLuns);
-
-extern void MSDDriver_RequestHandler(const USBGenericRequest *request);
-
-extern void MSDDriver_StateMachine(void);
-
-extern void MSDDriver_RemoteWakeUp(void);
-
-extern void MSDDriver_DataCallback(unsigned char isRead,
- unsigned int dataLength,
- unsigned int nullCnt,
- unsigned int fullCnt);
-
-#endif // #ifndef MSDDRIVER_H
-
diff --git a/radio/bootloader/include/MSDLun.h b/radio/bootloader/include/MSDLun.h
deleted file mode 100644
index 799775541..000000000
--- a/radio/bootloader/include/MSDLun.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/* ----------------------------------------------------------------------------
- * ATMEL Microcontroller Software Support
- * ----------------------------------------------------------------------------
- * Copyright (c) 2008, Atmel Corporation
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the disclaimer below.
- *
- * Atmel's name may not be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
- * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ----------------------------------------------------------------------------
- */
-
-//------------------------------------------------------------------------------
-/// \unit
-/// !Purpose
-///
-/// Logical Unit Number (LUN) used by the Mass Storage driver and the SCSI
-/// protocol. Represents a logical hard-drive.
-///
-/// !Usage
-/// -# Initialize Memory related pins (see pio & board.h).
-/// -# Initialize a Media instance for the LUN (see memories).
-/// -# Initlalize the LUN with LUN_Init, and link to the initialized Media.
-/// -# To read data from the LUN linked media, uses LUN_Read.
-/// -# To write data to the LUN linked media, uses LUN_Write.
-/// -# To unlink the media, uses LUN_Eject.
-//------------------------------------------------------------------------------
-
-#ifndef MSDLUN_H
-#define MSDLUN_H
-
-//------------------------------------------------------------------------------
-// Headers
-//------------------------------------------------------------------------------
-
-#include "SBC.h"
-#include
-#include
-#include
-
-//------------------------------------------------------------------------------
-// Definitions
-//------------------------------------------------------------------------------
-
-/// LUN RC: success
-#define LUN_STATUS_SUCCESS 0x00
-/// LUN RC: error
-#define LUN_STATUS_ERROR 0x02
-
-/// Media of LUN is removed
-#define LUN_NOT_PRESENT 0x00
-/// LUN is ejected by host
-#define LUN_EJECTED 0x01
-/// Media of LUN is changed
-#define LUN_CHANGED 0x10
-/// LUN Not Ready to Ready transition
-#define LUN_TRANS_READY LUN_CHANGED
-/// Media of LUN is ready
-#define LUN_READY 0x11
-
-//------------------------------------------------------------------------------
-// Structures
-//------------------------------------------------------------------------------
-
-/// LUN structure
-typedef struct {
-
- /// Pointer to a SBCInquiryData instance.
- SBCInquiryData *inquiryData;
- /// Fifo for USB transfer, must be assigned.
- MSDIOFifo ioFifo;
- /// Pointer to Media instance for the LUN.
- Media *media;
- /// Pointer to a Monitor Function to analyze the flow of LUN.
- /// \param flowDirection 1 - device to host (READ10)
- /// 0 - host to device (WRITE10)
- /// \param dataLength Length of data transferred in bytes.
- /// \param fifoNullCount Times that FIFO is NULL to wait
- /// \param fifoFullCount Times that FIFO is filled to wait
- void (*dataMonitor)(unsigned char flowDirection,
- unsigned int dataLength,
- unsigned int fifoNullCount,
- unsigned int fifoFullCount);
- /// The start position of the media (blocks) allocated to the LUN.
- unsigned int baseAddress;
- /// The size of the media (blocks) allocated to the LUN.
- unsigned int size;
- /// Sector size of the media in number of media blocks
- unsigned short blockSize;
- /// The LUN can be readonly even the media is writable
-#ifdef __cplusplus
- unsigned char protectd;
-#else
- unsigned char protected;
-#endif
-
- /// The LUN status (Ejected/Changed/)
- unsigned char status;
-
- /// Data for the RequestSense command.
- SBCRequestSenseData requestSenseData;
- /// Data for the ReadCapacity command.
- SBCReadCapacity10Data readCapacityData;
-
-} MSDLun;
-
-//------------------------------------------------------------------------------
-// Exported functions
-//------------------------------------------------------------------------------
-extern void LUN_Init(MSDLun *lun,
- Media *media,
- unsigned char *ioBuffer,
- unsigned int ioBufferSize,
- unsigned int baseAddress,
- unsigned int size,
- unsigned short blockSize,
-#ifdef __cplusplus
- unsigned char protectd,
-#else
- unsigned char protected,
-#endif
- void (*dataMonitor)(unsigned char flowDirection,
- unsigned int dataLength,
- unsigned int fifoNullCount,
- unsigned int fifoFullCount));
-
-extern unsigned char LUN_Eject(MSDLun *lun);
-
-extern unsigned char LUN_Write(MSDLun *lun,
- unsigned int blockAddress,
- void *data,
- unsigned int length,
- TransferCallback callback,
- void *argument);
-
-extern unsigned char LUN_Read(MSDLun *lun,
- unsigned int blockAddress,
- void *data,
- unsigned int length,
- TransferCallback callback,
- void *argument);
-
-#endif //#ifndef MSDLUN_H
-
diff --git a/radio/bootloader/include/SBC.h b/radio/bootloader/include/SBC.h
deleted file mode 100644
index 3c3f93c69..000000000
--- a/radio/bootloader/include/SBC.h
+++ /dev/null
@@ -1,653 +0,0 @@
-/* ----------------------------------------------------------------------------
- * ATMEL Microcontroller Software Support
- * ----------------------------------------------------------------------------
- * Copyright (c) 2008, Atmel Corporation
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the disclaimer below.
- *
- * Atmel's name may not be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
- * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ----------------------------------------------------------------------------
- */
-
-//------------------------------------------------------------------------------
-/// \unit
-/// !Purpose
-///
-/// SCSI definitions.
-///
-/// !Usage
-///
-/// -# After command block received, Access and decode the SCSI command block
-/// with SBCCommand structure.
-//------------------------------------------------------------------------------
-
-#ifndef SBC_H
-#define SBC_H
-
-//------------------------------------------------------------------------------
-// Definitions
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \page "SBC Operation Codes"
-/// This page lists operation codes of commands described in the SBC-3
-/// standard.
-///
-/// \note That most commands are actually defined in other standards,
-/// like SPC-4. Optional commands are not included here.
-///
-/// \see sbc3r07.pdf - Section 5.1 - Table 12
-/// \see spc4r06.pdf
-/// \see SBCCommand
-///
-/// !Codes
-/// - SBC_INQUIRY
-/// - SBC_READ_10
-/// - SBC_READ_CAPACITY_10
-/// - SBC_REQUEST_SENSE
-/// - SBC_TEST_UNIT_READY
-/// - SBC_WRITE_10
-///
-/// !Optional Codes but required by Windows
-/// - SBC_PREVENT_ALLOW_MEDIUM_REMOVAL
-/// - SBC_MODE_SENSE_6
-/// - SBC_VERIFY_10
-/// - SBC_READ_FORMAT_CAPACITIES
-
-/// Request information regarding parameters of the target and Logical Unit.
-#define SBC_INQUIRY 0x12
-/// Request the transfer data to the host.
-#define SBC_READ_10 0x28
-/// Request capacities of the currently installed medium.
-#define SBC_READ_CAPACITY_10 0x25
-/// Request that the device server transfer sense data.
-#define SBC_REQUEST_SENSE 0x03
-/// Check if the LUN is ready
-#define SBC_TEST_UNIT_READY 0x00
-/// Request that the device write the data transferred by the host.
-#define SBC_WRITE_10 0x2A
-
-/// Request that the target enable or disable the removal of the medium in
-/// the Logical Unit.
-#define SBC_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1E
-/// Report parameters.
-#define SBC_MODE_SENSE_6 0x1A
-/// Request that the %device verify the data on the medium.
-#define SBC_VERIFY_10 0x2F
-/// Request a list of the possible capacities that can be formatted on medium
-#define SBC_READ_FORMAT_CAPACITIES 0x23
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \page "SBC Periph. Qualifiers"
-/// This page lists the peripheral qualifier values specified in the INQUIRY
-/// data
-/// \see spc4r06.pdf - Section 6.4.2 - Table 83
-/// \see SBCInquiryData
-///
-/// !Qualifiers
-/// - SBC_PERIPHERAL_DEVICE_CONNECTED
-/// - SBC_PERIPHERAL_DEVICE_NOT_CONNECTED
-/// - SBC_PERIPHERAL_DEVICE_NOT_SUPPORTED
-
-#define SBC_PERIPHERAL_DEVICE_CONNECTED 0x00
-#define SBC_PERIPHERAL_DEVICE_NOT_CONNECTED 0x01
-#define SBC_PERIPHERAL_DEVICE_NOT_SUPPORTED 0x03
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \page "SBC Periph. Types"
-/// This page lists peripheral device types specified in the INQUIRY data
-/// \see spc4r06.pdf - Section 6.4.2 - Table 84
-/// \see SBCInquiryData
-///
-/// !Types
-/// - SBC_DIRECT_ACCESS_BLOCK_DEVICE
-/// - SBC_SEQUENTIAL_ACCESS_DEVICE
-/// - SBC_PRINTER_DEVICE
-/// - SBC_PROCESSOR_DEVICE
-/// - SBC_WRITE_ONCE_DEVICE
-/// - SBC_CD_DVD_DEVICE
-/// - SBC_SCANNER_DEVICE
-/// - SBC_OPTICAL_MEMORY_DEVICE
-/// - SBC_MEDIA_CHANGER_DEVICE
-/// - SBC_COMMUNICATION_DEVICE
-/// - SBC_STORAGE_ARRAY_CONTROLLER_DEVICE
-/// - SBC_ENCLOSURE_SERVICES_DEVICE
-/// - SBC_SIMPLIFIED_DIRECT_ACCESS_DEVICE
-/// - SBC_OPTICAL_CARD_READER_WRITER_DEVICE
-/// - SBC_BRIDGE_CONTROLLER_COMMANDS
-/// - SBC_OBJECT_BASED_STORAGE_DEVICE
-
-#define SBC_DIRECT_ACCESS_BLOCK_DEVICE 0x00
-#define SBC_SEQUENTIAL_ACCESS_DEVICE 0x01
-#define SBC_PRINTER_DEVICE 0x02
-#define SBC_PROCESSOR_DEVICE 0x03
-#define SBC_WRITE_ONCE_DEVICE 0x04
-#define SBC_CD_DVD_DEVICE 0x05
-#define SBC_SCANNER_DEVICE 0x06
-#define SBC_OPTICAL_MEMORY_DEVICE 0x07
-#define SBC_MEDIA_CHANGER_DEVICE 0x08
-#define SBC_COMMUNICATION_DEVICE 0x09
-#define SBC_STORAGE_ARRAY_CONTROLLER_DEVICE 0x0C
-#define SBC_ENCLOSURE_SERVICES_DEVICE 0x0D
-#define SBC_SIMPLIFIED_DIRECT_ACCESS_DEVICE 0x0E
-#define SBC_OPTICAL_CARD_READER_WRITER_DEVICE 0x0F
-#define SBC_BRIDGE_CONTROLLER_COMMANDS 0x10
-#define SBC_OBJECT_BASED_STORAGE_DEVICE 0x11
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \brief Version value for the SBC-3 specification
-/// \see spc4r06.pdf - Section 6.4.2 - Table 85
-#define SBC_SPC_VERSION_4 0x06
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \brief Values for the TPGS field returned in INQUIRY data
-/// \see spc4r06.pdf - Section 6.4.2 - Table 86
-#define SBC_TPGS_NONE 0x0
-#define SBC_TPGS_ASYMMETRIC 0x1
-#define SBC_TPGS_SYMMETRIC 0x2
-#define SBC_TPGS_BOTH 0x3
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \brief Version descriptor value for the SBC-3 specification
-/// \see spc4r06.pdf - Section 6.4.2 - Table 87
-#define SBC_VERSION_DESCRIPTOR_SBC_3 0x04C0
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \page "SBC Sense Response Codes"
-/// This page lists sense data response codes returned in REQUEST SENSE data
-/// \see spc4r06.pdf - Section 4.5.1 - Table 12
-///
-/// !Codes
-/// - SBC_SENSE_DATA_FIXED_CURRENT
-/// - SBC_SENSE_DATA_FIXED_DEFERRED
-/// - SBC_SENSE_DATA_DESCRIPTOR_CURRENT
-/// - SBC_SENSE_DATA_DESCRIPTOR_DEFERRED
-
-#define SBC_SENSE_DATA_FIXED_CURRENT 0x70
-#define SBC_SENSE_DATA_FIXED_DEFERRED 0x71
-#define SBC_SENSE_DATA_DESCRIPTOR_CURRENT 0x72
-#define SBC_SENSE_DATA_DESCRIPTOR_DEFERRED 0x73
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \page "SBC Sense Keys"
-/// This page lists sense key values returned in the REQUEST SENSE data
-/// \see spc4r06.pdf - Section 4.5.6 - Table 27
-///
-/// !Keys
-/// - SBC_SENSE_KEY_NO_SENSE
-/// - SBC_SENSE_KEY_RECOVERED_ERROR
-/// - SBC_SENSE_KEY_NOT_READY
-/// - SBC_SENSE_KEY_MEDIUM_ERROR
-/// - SBC_SENSE_KEY_HARDWARE_ERROR
-/// - SBC_SENSE_KEY_ILLEGAL_REQUEST
-/// - SBC_SENSE_KEY_UNIT_ATTENTION
-/// - SBC_SENSE_KEY_DATA_PROTECT
-/// - SBC_SENSE_KEY_BLANK_CHECK
-/// - SBC_SENSE_KEY_VENDOR_SPECIFIC
-/// - SBC_SENSE_KEY_COPY_ABORTED
-/// - SBC_SENSE_KEY_ABORTED_COMMAND
-/// - SBC_SENSE_KEY_VOLUME_OVERFLOW
-/// - SBC_SENSE_KEY_MISCOMPARE
-
-/// No specific sense key. Successful command.
-#define SBC_SENSE_KEY_NO_SENSE 0x00
-/// Command completed succesfully with some recovery action by the %device.
-#define SBC_SENSE_KEY_RECOVERED_ERROR 0x01
-/// The device can not be accessed.
-#define SBC_SENSE_KEY_NOT_READY 0x02
-/// Command terminated with a error condition that was probably caused by a
-/// flaw in the medium or an error in the recorded data.
-#define SBC_SENSE_KEY_MEDIUM_ERROR 0x03
-/// Hardware failure while performing the command or during a self test.
-#define SBC_SENSE_KEY_HARDWARE_ERROR 0x04
-/// Illegal parameter found in the command or additional parameters.
-#define SBC_SENSE_KEY_ILLEGAL_REQUEST 0x05
-/// Removable medium may have been changed or the %device has been reset.
-#define SBC_SENSE_KEY_UNIT_ATTENTION 0x06
-/// Write on a block that is protected.
-#define SBC_SENSE_KEY_DATA_PROTECT 0x07
-/// Indicates that a write-once device or a sequential-access device
-/// encountered blank medium or format-defined end-of-data indication while
-/// reading or a write-once device encountered a non-blank medium while writing.
-#define SBC_SENSE_KEY_BLANK_CHECK 0x08
-/// Reporting vendor specific conditions.
-#define SBC_SENSE_KEY_VENDOR_SPECIFIC 0x09
-/// EXTENDED COPY command was aborted.
-#define SBC_SENSE_KEY_COPY_ABORTED 0x0A
-/// Device aborted the command.
-#define SBC_SENSE_KEY_ABORTED_COMMAND 0x0B
-/// A buffered peripheral device is overflow.
-#define SBC_SENSE_KEY_VOLUME_OVERFLOW 0x0D
-/// The source data did not match the data read from the medium.
-#define SBC_SENSE_KEY_MISCOMPARE 0x0E
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \page "SBC Sense Additionals"
-/// This page lists additional sense code values returned in REQUEST SENSE data
-/// \see spc4r06.pdf - Section 4.5.6 - Table 28
-///
-/// !Additional Codes
-/// - SBC_ASC_LOGICAL_UNIT_NOT_READY
-/// - SBC_ASC_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE
-/// - SBC_ASC_INVALID_FIELD_IN_CDB
-/// - SBC_ASC_WRITE_PROTECTED
-/// - SBC_ASC_FORMAT_CORRUPTED
-/// - SBC_ASC_INVALID_COMMAND_OPERATION_CODE
-/// - SBC_ASC_TOO_MUCH_WRITE_DATA
-/// - SBC_ASC_NOT_READY_TO_READY_CHANGE
-/// - SBC_ASC_MEDIUM_NOT_PRESENT
-
-#define SBC_ASC_LOGICAL_UNIT_NOT_READY 0x04
-#define SBC_ASC_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE 0x21
-#define SBC_ASC_INVALID_FIELD_IN_CDB 0x24
-#define SBC_ASC_WRITE_PROTECTED 0x27
-#define SBC_ASC_FORMAT_CORRUPTED 0x31
-#define SBC_ASC_INVALID_COMMAND_OPERATION_CODE 0x20
-#define SBC_ASC_TOO_MUCH_WRITE_DATA 0x26
-#define SBC_ASC_NOT_READY_TO_READY_CHANGE 0x28
-#define SBC_ASC_MEDIUM_NOT_PRESENT 0x3A
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \brief MEDIUM TYPE field value for direct-access block devices
-/// \see sbc3r06.pdf - Section 6.3.1
-#define SBC_MEDIUM_TYPE_DIRECT_ACCESS_BLOCK_DEVICE 0x00
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \brief MRIE field values
-/// \see sbc3r06.pdf - Section 7.4.11 - Table 286
-#define SBC_MRIE_NO_REPORTING 0x00
-#define SBC_MRIE_ASYNCHRONOUS 0x01
-#define SBC_MRIE_GENERATE_UNIT_ATTENTION 0x02
-#define SBC_MRIE_COND_GENERATE_RECOVERED_ERROR 0x03
-#define SBC_MRIE_UNCOND_GENERATE_RECOVERED_ERROR 0x04
-#define SBC_MRIE_GENERATE_NO_SENSE 0x05
-#define SBC_MRIE_ON_REQUEST 0x06
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \brief Supported mode pages
-/// \see sbc3r06.pdf - Section 6.3.1 - Table 115
-#define SBC_PAGE_READ_WRITE_ERROR_RECOVERY 0x01
-#define SBC_PAGE_INFORMATIONAL_EXCEPTIONS_CONTROL 0x1C
-#define SBC_PAGE_RETURN_ALL 0x3F
-#define SBC_PAGE_VENDOR_SPECIFIC 0x00
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/// \page "MSD Endian Macros"
-/// This page lists the macros for endianness conversion.
-///
-/// !Macros
-/// - WORDB
-/// - DWORDB
-/// - STORE_DWORDB
-/// - STORE_WORDB
-/// \brief Converts a byte array to a word value using the big endian format
-#define WORDB(bytes) ((unsigned short) ((bytes[0] << 8) | bytes[1]))
-
-/// \brief Converts a byte array to a dword value using the big endian format
-#define DWORDB(bytes) ((unsigned int) ((bytes[0] << 24) | (bytes[1] << 16) \
- | (bytes[2] << 8) | bytes[3]))
-
-/// \brief Stores a dword value in a byte array, in big endian format
-#define STORE_DWORDB(dword, bytes) \
- bytes[0] = (unsigned char) (((dword) >> 24) & 0xFF); \
- bytes[1] = (unsigned char) (((dword) >> 16) & 0xFF); \
- bytes[2] = (unsigned char) (((dword) >> 8) & 0xFF); \
- bytes[3] = (unsigned char) ((dword) & 0xFF);
-
-/// \brief Stores a word value in a byte array, in big endian format
-#define STORE_WORDB(word, bytes) \
- bytes[0] = (unsigned char) (((word) >> 8) & 0xFF); \
- bytes[1] = (unsigned char) ((word) & 0xFF);
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-// Structures
-//------------------------------------------------------------------------------
-
-#ifdef __ICCARM__ // IAR
-#pragma pack(1) // IAR
-#define __attribute__(...) // IAR
-#endif // IAR
-
-//------------------------------------------------------------------------------
-/// \brief Structure for the INQUIRY command
-/// \see spc4r06.pdf - Section 6.4.1 - Table 81
-//------------------------------------------------------------------------------
-typedef struct {
-
- unsigned char bOperationCode; //!< 0x12 : SBC_INQUIRY
- unsigned char isEVPD:1, //!< Type of requested data
- bReserved1:7; //!< Reserved bits
- unsigned char bPageCode; //!< Specifies the VPD to return
- unsigned char pAllocationLength[2]; //!< Size of host buffer
- unsigned char bControl; //!< 0x00
-
-} __attribute__ ((packed)) SBCInquiry; // GCC
-
-//------------------------------------------------------------------------------
-/// \brief Standard INQUIRY data format returned by the device
-/// \see spc4r06.pdf - Section 6.4.2 - Table 82
-//------------------------------------------------------------------------------
-typedef struct {
-
- unsigned char bPeripheralDeviceType:5, //!< Peripheral device type
- bPeripheralQualifier :3; //!< Peripheral qualifier
- unsigned char bReserved1:7, //!< Reserved bits
- isRMB :1; //!< Is media removable ?
- unsigned char bVersion; //!< SPC version used
- unsigned char bResponseDataFormat:4, //!< Must be 0x2
- isHIGHSUP :1, //!< Hierarchical addressing used ?
- isNORMACA :1, //!< ACA attribute supported ?
- bObsolete1 :2; //!< Obsolete bits
- unsigned char bAdditionalLength; //!< Length of remaining INQUIRY data
- unsigned char isSCCS :1, //!< Embedded SCC ?
- isACC :1, //!< Access control coordinator ?
- bTPGS :2, //!< Target port support group
- is3PC :1, //!< Third-party copy supported ?
- bReserved2:2, //!< Reserved bits
- isProtect :1; //!< Protection info supported ?
- unsigned char bObsolete2:1, //!< Obsolete bit
- isEncServ :1, //!< Embedded enclosure service comp?
- isVS :1, //!< ???
- isMultiP :1, //!< Multi-port device ?
- bObsolete3:3, //!< Obsolete bits
- bUnused1 :1; //!< Unused feature
- unsigned char bUnused2:6, //!< Unused features
- isCmdQue:1, //!< Task management model supported ?
- isVS2 :1; //!< ???
- unsigned char pVendorID[8]; //!< T10 vendor identification
- unsigned char pProductID[16]; //!< Vendor-defined product ID
- unsigned char pProductRevisionLevel[4];//!< Vendor-defined product revision
- unsigned char pVendorSpecific[20]; //!< Vendor-specific data
- unsigned char bUnused3; //!< Unused features
- unsigned char bReserved3; //!< Reserved bits
- unsigned short pVersionDescriptors[8]; //!< Standards the device complies to
- unsigned char pReserved4[22]; //!< Reserved bytes
-
-} __attribute__ ((packed)) SBCInquiryData; // GCC
-
-//------------------------------------------------------------------------------
-/// \brief Data structure for the READ (10) command
-/// \see sbc3r07.pdf - Section 5.7 - Table 34
-//------------------------------------------------------------------------------
-typedef struct {
-
- unsigned char bOperationCode; //!< 0x28 : SBC_READ_10
- unsigned char bObsolete1:1, //!< Obsolete bit
- isFUA_NV:1, //!< Cache control bit
- bReserved1:1, //!< Reserved bit
- isFUA:1, //!< Cache control bit
- isDPO:1, //!< Cache control bit
- bRdProtect:3; //!< Protection information to send
- unsigned char pLogicalBlockAddress[4]; //!< Index of first block to read
- unsigned char bGroupNumber:5, //!< Information grouping
- bReserved2:3; //!< Reserved bits
- unsigned char pTransferLength[2]; //!< Number of blocks to transmit
- unsigned char bControl; //!< 0x00
-
-} __attribute__ ((packed)) SBCRead10; // GCC
-
-//------------------------------------------------------------------------------
-/// \brief Structure for the READ CAPACITY (10) command
-/// \see sbc3r07.pdf - Section 5.11.1 - Table 40
-//------------------------------------------------------------------------------
-typedef struct {
-
- unsigned char bOperationCode; //!< 0x25 : RBC_READ_CAPACITY
- unsigned char bObsolete1:1, //!< Obsolete bit
- bReserved1:7; //!< Reserved bits
- unsigned char pLogicalBlockAddress[4]; //!< Block to evaluate if PMI is set
- unsigned char pReserved2[2]; //!< Reserved bytes
- unsigned char isPMI:1, //!< Partial medium indicator bit
- bReserved3:7; //!< Reserved bits
- unsigned char bControl; //!< 0x00
-
-} __attribute__ ((packed)) SBCReadCapacity10;
-
-//------------------------------------------------------------------------------
-/// \brief Data returned by the device after a READ CAPACITY (10) command
-/// \see sbc3r07.pdf - Section 5.11.2 - Table 41
-//------------------------------------------------------------------------------
-typedef struct {
-
- unsigned char pLogicalBlockAddress[4]; //!< Address of last logical block
- unsigned char pLogicalBlockLength[4]; //!< Length of each logical block
-
-} __attribute__ ((packed)) SBCReadCapacity10Data;
-
-//------------------------------------------------------------------------------
-/// \brief Structure for the REQUEST SENSE command
-/// \see spc4r06.pdf - Section 6.26 - Table 170
-//------------------------------------------------------------------------------
-typedef struct {
-
- unsigned char bOperationCode; //!< 0x03 : SBC_REQUEST_SENSE
- unsigned char isDesc :1, //!< Type of information expected
- bReserved1:7; //!< Reserved bits
- unsigned char pReserved2[2]; //!< Reserved bytes
- unsigned char bAllocationLength; //!< Size of host buffer
- unsigned char bControl; //!< 0x00
-
-} __attribute__ ((packed)) SBCRequestSense;
-
-//------------------------------------------------------------------------------
-/// \brief Fixed format sense data returned after a REQUEST SENSE command has
-/// been received with a DESC bit cleared.
-/// \see spc4r06.pdf - Section 4.5.3 - Table 26
-//------------------------------------------------------------------------------
-typedef struct {
-
- unsigned char bResponseCode:7, //!< Sense data format
- isValid :1; //!< Information field is standard
- unsigned char bObsolete1; //!< Obsolete byte
- unsigned char bSenseKey :4, //!< Generic error information
- bReserved1:1, //!< Reserved bit
- isILI :1, //!< SSC
- isEOM :1, //!< SSC
- isFilemark:1; //!< SSC
- unsigned char pInformation[4]; //!< Command-specific
- unsigned char bAdditionalSenseLength; //!< sizeof(SBCRequestSense_data)-8
- unsigned char pCommandSpecificInformation[4]; //!< Command-specific
- unsigned char bAdditionalSenseCode; //!< Additional error information
- unsigned char bAdditionalSenseCodeQualifier; //!< Further error information
- unsigned char bFieldReplaceableUnitCode; //!< Specific component code
- unsigned char bSenseKeySpecific:7, //!< Additional exception info
- isSKSV :1; //!< Is sense key specific valid?
- unsigned char pSenseKeySpecific[2]; //!< Additional exception info
-
-} __attribute__ ((packed)) SBCRequestSenseData;
-
-//------------------------------------------------------------------------------
-/// \brief Data structure for the TEST UNIT READY command
-/// \see spc4r06.pdf - Section 6.34 - Table 192
-//------------------------------------------------------------------------------
-typedef struct {
-
- unsigned char bOperationCode; //!< 0x00 : SBC_TEST_UNIT_READY
- unsigned char pReserved1[4]; //!< Reserved bits
- unsigned char bControl; //!< 0x00
-
-} __attribute__ ((packed)) SBCTestUnitReady; // GCC
-
-//------------------------------------------------------------------------------
-/// \brief Structure for the WRITE (10) command
-/// \see sbc3r07.pdf - Section 5.26 - Table 70
-//------------------------------------------------------------------------------
-typedef struct {
-
- unsigned char bOperationCode; //!< 0x2A : SBC_WRITE_10
- unsigned char bObsolete1:1, //!< Obsolete bit
- isFUA_NV:1, //!< Cache control bit
- bReserved1:1, //!< Reserved bit
- isFUA:1, //!< Cache control bit
- isDPO:1, //!< Cache control bit
- bWrProtect:3; //!< Protection information to send
- unsigned char pLogicalBlockAddress[4]; //!< First block to write
- unsigned char bGroupNumber:5, //!< Information grouping
- bReserved2:3; //!< Reserved bits
- unsigned char pTransferLength[2]; //!< Number of blocks to write
- unsigned char bControl; //!< 0x00
-
-} __attribute__ ((packed)) SBCWrite10;
-
-//------------------------------------------------------------------------------
-/// \brief Structure for the PREVENT/ALLOW MEDIUM REMOVAL command
-/// \see sbc3r07.pdf - Section 5.5 - Table 30
-//------------------------------------------------------------------------------
-typedef struct {
-
- unsigned char bOperationCode; //!< 0x1E : SBC_PREVENT_ALLOW_MEDIUM_REMOVAL
- unsigned char pReserved1[3]; //!< Reserved bytes
- unsigned char bPrevent:2, //!< Accept/prohibit removal
- bReserved2:6; //!< Reserved bits
- unsigned char bControl; //!< 0x00
-
-} __attribute__ ((packed)) SBCMediumRemoval; // GCC
-
-//------------------------------------------------------------------------------
-/// \brief Structure for the MODE SENSE (6) command
-/// \see spc4r06 - Section 6.9.1 - Table 98
-//------------------------------------------------------------------------------
-typedef struct {
-
- unsigned char bOperationCode; //!< 0x1A : SBC_MODE_SENSE_6
- unsigned char bReserved1:3, //!< Reserved bits
- isDBD:1, //!< Disable block descriptors bit
- bReserved2:4; //!< Reserved bits
- unsigned char bPageCode:6, //!< Mode page to return
- bPC:2; //!< Type of parameter values to return
- unsigned char bSubpageCode; //!< Mode subpage to return
- unsigned char bAllocationLength; //!< Host buffer allocated size
- unsigned char bControl; //!< 0x00
-
-} __attribute__ ((packed)) SBCModeSense6; // GCC
-
-//------------------------------------------------------------------------------
-/// \brief Header for the data returned after a MODE SENSE (6) command
-/// \see spc4r06.pdf - Section 7.4.3 - Table 268
-//------------------------------------------------------------------------------
-typedef struct {
-
- unsigned char bModeDataLength; //!< Length of mode data to follow
- unsigned char bMediumType; //!< Type of medium (SBC_MEDIUM_TYPE_DIRECT_ACCESS_BLOCK_DEVICE)
- unsigned char bReserved1:4, //!< Reserved bits
- isDPOFUA:1, //!< DPO/FUA bits supported ?
- bReserved2:2, //!< Reserved bits
- isWP:1; //!< Is medium write-protected ?
- unsigned char bBlockDescriptorLength; //!< Length of all block descriptors
-
-} __attribute__ ((packed)) SBCModeParameterHeader6; // GCC
-
-//------------------------------------------------------------------------------
-/// \brief Informational exceptions control mode page
-/// \see spc4r06.pdf - Section 7.4.11 - Table 285
-//------------------------------------------------------------------------------
-typedef struct {
-
- unsigned char bPageCode:6, //!< 0x1C : SBC_PAGE_INFORMATIONAL_EXCEPTIONS_CONTROL
- isSPF:1, //!< Page or subpage data format
- isPS:1; //!< Parameters saveable ?
- unsigned char bPageLength; //!< Length of page data (0x0A)
- unsigned char isLogErr:1, //!< Should informational exceptions be logged ?
- isEBackErr:1, //!< Enable background error bit
- isTest:1, //!< Create a device test failure ?
- isDExcpt:1, //!< Disable exception control bit
- isEWasc:1, //!< Report warnings ?
- isEBF:1, //!< Enable background function bit
- bReserved1:1, //!< Reserved bit
- isPerf:1; //!< Delay acceptable when treating exceptions ?
- unsigned char bMRIE:4, //!< Method of reporting informational exceptions
- bReserved2:4; //!< Reserved bits
- unsigned char pIntervalTimer[4]; //!< Error reporting period
- unsigned char pReportCount[4]; //!< Maximum number of time a report can be issued
-
-} __attribute__ ((packed)) SBCInformationalExceptionsControl; // GCC
-
-//------------------------------------------------------------------------------
-/// \brief Read/write error recovery mode page
-/// \see sbc3r07.pdf - Section 6.3.5 - Table 122
-//------------------------------------------------------------------------------
-typedef struct {
-
- unsigned char bPageCode:6, //!< 0x01 : SBC_PAGE_READ_WRITE_ERROR_RECOVERY
- isSPF:1, //!< Page or subpage data format
- isPS:1; //!< Parameters saveable ?
- unsigned char bPageLength; //!< Length of page data (0x0A)
- unsigned char isDCR:1, //!< Disable correction bit
- isDTE:1, //!< Data terminate on error bit
- isPER:1, //!< Post error bit
- isEER:1, //!< Enable early recovery bit
- isRC:1, //!< Read continuous bit
- isTB:1, //!< Transfer block bit
- isARRE:1, //!< Automatic read reallocation enabled bit
- isAWRE:1; //!< Automatic write reallocation enabled bit
- unsigned char bReadRetryCount; //!< Number of retries when reading
- unsigned char pObsolete1[3]; //!< Obsolete bytes
- unsigned char bReserved1; //!< Reserved byte
- unsigned char bWriteRetryCount; //!< Number of retries when writing
- unsigned char bReserved2; //!< Reserved byte
- unsigned char pRecoveryTimeLimit[2]; //!< Maximum time duration for error recovery
-
-} __attribute__ ((packed)) SBCReadWriteErrorRecovery; // GCC
-
-//------------------------------------------------------------------------------
-/// \brief Generic structure for holding information about SBC commands
-/// \see SBCInquiry
-/// \see SBCRead10
-/// \see SBCReadCapacity10
-/// \see SBCRequestSense
-/// \see SBCTestUnitReady
-/// \see SBCWrite10
-/// \see SBCMediumRemoval
-/// \see SBCModeSense6
-//------------------------------------------------------------------------------
-typedef union {
-
- unsigned char bOperationCode; //!< Operation code of the command
- SBCInquiry inquiry; //!< INQUIRY command
- SBCRead10 read10; //!< READ (10) command
- SBCReadCapacity10 readCapacity10; //!< READ CAPACITY (10) command
- SBCRequestSense requestSense; //!< REQUEST SENSE command
- SBCTestUnitReady testUnitReady; //!< TEST UNIT READY command
- SBCWrite10 write10; //!< WRITE (10) command
- SBCMediumRemoval mediumRemoval; //!< PREVENT/ALLOW MEDIUM REMOVAL command
- SBCModeSense6 modeSense6; //!< MODE SENSE (6) command
-
-} SBCCommand;
-
-#ifdef __ICCARM__ // IAR
-#pragma pack() // IAR
-#endif // IAR
-
-#endif //#ifndef SBC_H
-