aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2009-06-21 09:22:31 +0000
committerDean Camera <dean@fourwalledcubicle.com>2009-06-21 09:22:31 +0000
commit730624f745648cbd32bec7da64833cb2aadd44ea (patch)
tree1fc67eab7c45f67d3005d3dfdb614629a47c3567 /LUFA
parent9d506553aa750264ff6045ff9180397993cb37c0 (diff)
downloadlufa-730624f745648cbd32bec7da64833cb2aadd44ea.tar.gz
lufa-730624f745648cbd32bec7da64833cb2aadd44ea.tar.bz2
lufa-730624f745648cbd32bec7da64833cb2aadd44ea.zip
Added new USE_INTERNAL_SERIAL define for using the unique serial numbers in some AVR models as the USB device's serial number, added NO_INTERNAL_SERIAL compile time option to turn off new serial number reading code. Updated Mass Storage and CDC based demos to use the new device serial number if the device it is compiled for supports it.
Diffstat (limited to 'LUFA')
-rw-r--r--LUFA/Drivers/USB/HighLevel/StdDescriptors.h30
-rw-r--r--LUFA/Drivers/USB/LowLevel/DevChapter9.c2
-rw-r--r--LUFA/Drivers/USB/LowLevel/DevChapter9.h11
-rw-r--r--LUFA/ManPages/ChangeLog.txt3
-rw-r--r--LUFA/ManPages/CompileTimeTokens.txt8
5 files changed, 30 insertions, 24 deletions
diff --git a/LUFA/Drivers/USB/HighLevel/StdDescriptors.h b/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
index 2ce75b2d9..274b84fc4 100644
--- a/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
+++ b/LUFA/Drivers/USB/HighLevel/StdDescriptors.h
@@ -74,6 +74,21 @@
* descriptor does not exist.
*/
#define NO_DESCRIPTOR 0
+
+ #if (!defined(NO_INTERNAL_SERIAL) && (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))) || defined(__DOXYGEN__)
+ /** String descriptor index for the device's unique serial number string descriptor within the device.
+ * This unique serial number is used by the host to associate resources to the device (such as drivers or COM port
+ * number allocations) to a device regardless of the port it is plugged in to on the host. Some USB AVRs contain
+ * a unique serial number internally, and setting the device descriptors serial number string index to this value
+ * will cause it to use the internal serial number.
+ *
+ * On unsupported devices, this will evaluate to NO_DESCRIPTOR and so will force the host to create a pseduo-serial
+ * number for the device.
+ */
+ #define USE_INTERNAL_SERIAL 0xDC
+ #else
+ #define USE_INTERNAL_SERIAL NO_DESCRIPTOR
+ #endif
/** Macro to calculate the power value for the device descriptor, from a given number of milliamps. */
#define USB_CONFIG_POWER_MA(mA) (mA >> 1)
@@ -244,13 +259,14 @@
*/
uint8_t SerialNumStrIndex; /**< String index for the product's globally unique hexadecimal
* serial number, in uppercase Unicode ASCII.
- *
- * \note On some AVR models, there is an embedded serial number
- * in the chip which can be used for the device serial number.
- * To use this serial number, define USE_INTERNAL_SERIAL to a
- * unique string index number in the project makefile and set
- * this value to USE_INTERNAL_SERIAL.
- *
+ *
+ * \note On some AVR models, there is an embedded serial number
+ * in the chip which can be used for the device serial number.
+ * To use this serial number, set this to USE_INTERNAL_SERIAL.
+ * On unsupported devices, this will evaluate to 0 and will cause
+ * the host to generate a pseudo-unique value for the device upon
+ * insertion.
+ *
* \see ManufacturerStrIndex structure entry.
*/
diff --git a/LUFA/Drivers/USB/LowLevel/DevChapter9.c b/LUFA/Drivers/USB/LowLevel/DevChapter9.c
index 55b49b803..4014ed1ca 100644
--- a/LUFA/Drivers/USB/LowLevel/DevChapter9.c
+++ b/LUFA/Drivers/USB/LowLevel/DevChapter9.c
@@ -179,7 +179,7 @@ static void USB_Device_GetDescriptor(void)
void* DescriptorPointer;
uint16_t DescriptorSize;
- #if defined(USE_INTERNAL_SERIAL)
+ #if !defined(NO_INTERNAL_SERIAL) && (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
if (USB_ControlRequest.wValue == ((DTYPE_String << 8) | USE_INTERNAL_SERIAL))
{
uint8_t SignatureDescriptor[2 + (sizeof(int16_t) * 12)];
diff --git a/LUFA/Drivers/USB/LowLevel/DevChapter9.h b/LUFA/Drivers/USB/LowLevel/DevChapter9.h
index 65fa0418c..505256e68 100644
--- a/LUFA/Drivers/USB/LowLevel/DevChapter9.h
+++ b/LUFA/Drivers/USB/LowLevel/DevChapter9.h
@@ -45,21 +45,12 @@
#include "../HighLevel/USBTask.h"
#include "LowLevel.h"
- /* Preprocessor Checks: */
- #if defined(USE_INTERNAL_SERIAL) && !(defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR))
- #error USE_INTERNAL_SERIAL invalid, the selected AVR model does not contain unique serial bytes.
- #endif
-
- #if defined(USE_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL <= 1)
- #error USE_INTERNAL_SERIAL must be defined to the string descriptor index chosen for the serial number descriptor.
- #endif
-
/* Enable C linkage for C++ Compilers: */
#if defined(__cplusplus)
extern "C" {
#endif
- /* Public Interface - May be used in end-application: */
+ /* Public Interface - May be used in end-application: */
/* Global Variables: */
/** Indicates the currently set configuration number of the device. USB devices may have several
* different configurations which the host can select between; this indicates the currently selected
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index f7ae4c664..6f116da67 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -28,7 +28,8 @@
* cleared to prevent endpoint type corruption
* - Fix documentation mentioning Pipe_GetCurrentToken() function when real name is Pipe_GetPipeToken()
* - Extend USB_GetDeviceConfigDescriptor() routine to require the configuration number within the device to fetch
- * - Added new USE_INTERNAL_SERIAL compile time option
+ * - Added new USE_INTERNAL_SERIAL define for using the unique serial numbers in some AVR models as the USB device's serial number,
+ * added NO_INTERNAL_SERIAL compile time option to turn off new serial number reading code
*
* \section Sec_ChangeLog090605 Version 090605
*
diff --git a/LUFA/ManPages/CompileTimeTokens.txt b/LUFA/ManPages/CompileTimeTokens.txt
index e1f248d8f..bc49ba2cc 100644
--- a/LUFA/ManPages/CompileTimeTokens.txt
+++ b/LUFA/ManPages/CompileTimeTokens.txt
@@ -80,13 +80,11 @@
* compatibility. If this token is defined, the structure element names are switched to the LUFA-specific but more descriptive
* names documented in the StdDescriptors.h source file.
*
- * <b>USE_INTERNAL_SERIAL</b> - ( \ref Group_Descriptors ) \n
+ * <b>NO_INTERNAL_SERIAL</b> - ( \ref Group_Descriptors ) \n
* Some AVR models contain a unique 20-digit serial number which can be used as the device serial number, while in device mode. This
* allows the host to uniquely identify the device regardless of if it is moved between USB ports on the same computer, allowing
- * allocated resources (such as drivers, COM Port number allocations) to be preserved. To make the library use this value for the
- * device's serial number, define this token in the project makefile, set it to a unique string descriptor index (i.e. one not used
- * elsewhere in the device for a string descriptor) and set the Device Descriptor's serial number descriptor index entry to the
- * USE_INTERNAL_SERIAL value.
+ * allocated resources (such as drivers, COM Port number allocations) to be preserved. This is not needed in many apps, and so the
+ * code that performs this task can be disabled by defining this option and passing it to the compiler via the -D switch.
*
* <b>FIXED_CONTROL_ENDPOINT_SIZE</b> - ( \ref Group_EndpointManagement ) \n
* By default, the library determines the size of the control endpoint (when in device mode) by reading the device descriptor.