changeset 78:c5e5e684478d

CMake generated strings that configure the USB info section - Defined Manufacturer name - Product name now references each of the selected modules - Serial number refers to the last commit date, branch, and whether modified since the last commit
author Jacob Alexander <triplehaata@gmail.com>
date Fri, 01 Feb 2013 20:02:55 -0500
parents a977fbfdb7a5
children b9f4eeb89b80
files CMakeLists.txt USB/pjrc/arm/usb_desc.c USB/pjrc/usb_com.h arm.cmake avr.cmake setup.cmake
diffstat 6 files changed, 88 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt	Fri Feb 01 16:49:32 2013 -0500
+++ b/CMakeLists.txt	Fri Feb 01 20:02:55 2013 -0500
@@ -74,6 +74,9 @@
 	${DEBUG_SRCS}
 )
 
+#| Directories to include by default
+include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
+
 
 
 ###
--- a/USB/pjrc/arm/usb_desc.c	Fri Feb 01 16:49:32 2013 -0500
+++ b/USB/pjrc/arm/usb_desc.c	Fri Feb 01 20:02:55 2013 -0500
@@ -408,19 +408,19 @@
 };
 
 static struct usb_string_descriptor_struct string1 = {
-        2 + MANUFACTURER_NAME_LEN * 2,
+        sizeof(STR_MANUFACTURER),
         3,
-        MANUFACTURER_NAME
+        STR_MANUFACTURER
 };
 static struct usb_string_descriptor_struct string2 = {
-	2 + PRODUCT_NAME_LEN * 2,
+	sizeof(STR_PRODUCT),
         3,
-        PRODUCT_NAME
+        STR_PRODUCT
 };
 static struct usb_string_descriptor_struct string3 = {
-        12,
+	sizeof(STR_SERIAL),
         3,
-        {'1','2','3','4','5'}
+	STR_SERIAL
 };
 
 
@@ -447,9 +447,9 @@
         {0x2100, JOYSTICK_INTERFACE, config_descriptor+JOYSTICK_DESC_OFFSET, 9},
 #endif
         {0x0300, 0x0000, (const uint8_t *)&string0, 4},
-        {0x0301, 0x0409, (const uint8_t *)&string1, 2 + MANUFACTURER_NAME_LEN * 2},
-        {0x0302, 0x0409, (const uint8_t *)&string2, 2 + PRODUCT_NAME_LEN * 2},
-        {0x0303, 0x0409, (const uint8_t *)&string3, 12},
+        {0x0301, 0x0409, (const uint8_t *)&string1, sizeof(STR_MANUFACTURER)},
+        {0x0302, 0x0409, (const uint8_t *)&string2, sizeof(STR_PRODUCT)},
+        {0x0303, 0x0409, (const uint8_t *)&string3, sizeof(STR_SERIAL)},
 	{0, 0, NULL, 0}
 };
 
--- a/USB/pjrc/usb_com.h	Fri Feb 01 16:49:32 2013 -0500
+++ b/USB/pjrc/usb_com.h	Fri Feb 01 20:02:55 2013 -0500
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011 by Jacob Alexander
+/* Copyright (C) 2013 by Jacob Alexander
  * 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
@@ -28,6 +28,7 @@
 #include <stdint.h>
 
 // Local Includes
+#include <buildvars.h> // Defines USB Parameters, partially generated by CMake
 
 
 
@@ -37,21 +38,6 @@
 #define USB_MAX_KEY_SEND 6
 
 
-// You can change these to give your code its own name.
-// TODO Add to Teensy 3
-#define STR_MANUFACTURER	L"MfgName"
-#define STR_PRODUCT		L"Keyboard"
-
-
-// Mac OS-X and Linux automatically load the correct drivers.  On
-// Windows, even though the driver is supplied by Microsoft, an
-// INF file is needed to load the driver.  These numbers need to
-// match the INF file.
-#define VENDOR_ID		0x16C0
-#define PRODUCT_ID		0x0487 // New ID for Teensy 3
-//#define PRODUCT_ID		0x047D // Old ID for Teensy 2
-
-
 
 // ----- Variables -----
 
--- a/arm.cmake	Fri Feb 01 16:49:32 2013 -0500
+++ b/arm.cmake	Fri Feb 01 20:02:55 2013 -0500
@@ -62,6 +62,11 @@
 message( "${COMPILER_SRCS}" )
 
 
+#| USB Defines
+set( VENDOR_ID  "0x16C0" )
+set( PRODUCT_ID "0x0487" )
+
+
 #| Compiler flag to set the C Standard level.
 #|     c89   = "ANSI" C
 #|     gnu89 = c89 plus GCC extensions
@@ -77,7 +82,8 @@
 
 #| Tuning Options
 #|  -f...:        tuning, see GCC manual
-set( TUNING "-mthumb -nostdlib -fdata-sections -ffunction-sections" )
+#| NOTE: -fshort-wchar is specified to allow USB strings be passed conveniently
+set( TUNING "-mthumb -nostdlib -fdata-sections -ffunction-sections -fshort-wchar" )
 
 
 #| Optimization level, can be [0, 1, 2, 3, s]. 
@@ -105,11 +111,11 @@
 
 
 #| Compiler Flags
-add_definitions( "-mcpu=${CPU} -DF_CPU=${F_CPU} -D_${CHIP}_=1 -O${OPT} ${TUNING} ${WARN} ${CSTANDARD} ${GENDEPFLAGS} -I${CMAKE_CURRENT_SOURCE_DIR}" )
+add_definitions( "-mcpu=${CPU} -DF_CPU=${F_CPU} -D_${CHIP}_=1 -O${OPT} ${TUNING} ${WARN} ${CSTANDARD} ${GENDEPFLAGS}" )
 
 
 #| Linker Flags
-set( LINKER_FLAGS "-mcpu=${CPU} -Wl,-Map=${TARGET}.map,--cref -Wl,--gc-sections -mthumb -T${CMAKE_CURRENT_SOURCE_DIR}/Lib/${CHIP}.ld" )
+set( LINKER_FLAGS "-mcpu=${CPU} -Wl,-Map=${TARGET}.map,--cref -Wl,--gc-sections -mthumb -Wl,--no-wchar-size-warning -T${CMAKE_CURRENT_SOURCE_DIR}/Lib/${CHIP}.ld" )
 
 
 #| Hex Flags (XXX, CMake seems to have issues if you quote the arguments for the custom commands...)
--- a/avr.cmake	Fri Feb 01 16:49:32 2013 -0500
+++ b/avr.cmake	Fri Feb 01 20:02:55 2013 -0500
@@ -51,6 +51,11 @@
 )
 
 
+#| USB Defines
+set( VENDOR_ID  "0x16C0" )
+set( PRODUCT_ID "0x047D" )
+
+
 #| Compiler flag to set the C Standard level.
 #|     c89   = "ANSI" C
 #|     gnu89 = c89 plus GCC extensions
@@ -66,7 +71,8 @@
 
 #| Tuning Options
 #|  -f...:        tuning, see GCC manual and avr-libc documentation
-set( TUNING "-funsigned-char -funsigned-bitfields -ffunction-sections -fpack-struct -fshort-enums" )
+#| NOTE: -fshort-wchar is specified to allow USB strings be passed conveniently
+set( TUNING "-funsigned-char -funsigned-bitfields -ffunction-sections -fpack-struct -fshort-enums -fshort-wchar" )
 
 
 #| Optimization level, can be [0, 1, 2, 3, s]. 
@@ -94,7 +100,7 @@
 
 
 #| Compiler Flags
-add_definitions( "-mmcu=${MCU} -DF_CPU=${F_CPU} -D_${MCU}_=1 -O${OPT} ${TUNING} ${WARN} ${CSTANDARD} ${GENDEPFLAGS} -I${CMAKE_CURRENT_SOURCE_DIR}" )
+add_definitions( "-mmcu=${MCU} -DF_CPU=${F_CPU} -D_${MCU}_=1 -O${OPT} ${TUNING} ${WARN} ${CSTANDARD} ${GENDEPFLAGS}" )
 
 
 #| Linker Flags
--- a/setup.cmake	Fri Feb 01 16:49:32 2013 -0500
+++ b/setup.cmake	Fri Feb 01 20:02:55 2013 -0500
@@ -142,3 +142,60 @@
 message( STATUS "Detected Debug Module Source Files:" )
 message( "${DEBUG_SRCS}" )
 
+
+
+###
+# Generate USB Defines
+#
+
+#| Manufacturer name
+set( MANUFACTURER "Kiibohd" )
+
+
+#| Serial Number
+#| Attempt to call Git to get the branch, last commit date, and whether code modified since last commit
+
+#| Modified
+#| Takes a bit of work to extract the "M " using CMake, and not using it if there are not modifications
+execute_process( COMMAND git status -s -uno --porcelain
+	WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+	OUTPUT_VARIABLE Git_Modified_INFO
+	ERROR_QUIET
+	OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+string( LENGTH "${Git_Modified_INFO}" Git_Modified_LENGTH )
+if ( ${Git_Modified_LENGTH} GREATER 2 )
+	string( SUBSTRING "${Git_Modified_INFO}" 1 2 Git_Modified_Flag_INFO )
+endif ( ${Git_Modified_LENGTH} GREATER 2 )
+
+#| Branch
+execute_process( COMMAND git rev-parse --abbrev-ref HEAD
+	WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+	OUTPUT_VARIABLE Git_Branch_INFO
+	ERROR_QUIET
+	OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+
+#| Date
+execute_process( COMMAND git show -s --format=%ci
+	WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+	OUTPUT_VARIABLE Git_Date_INFO
+	RESULT_VARIABLE Git_RETURN
+	ERROR_QUIET
+	OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+
+
+#| Only use Git variables if we were successful in calling the commands
+if ( ${Git_RETURN} EQUAL 0 )
+	set( GitLastCommitDate "${Git_Modified_Flag_INFO}${Git_Branch_INFO} - ${Git_Date_INFO}" )
+else ( ${Git_RETURN} EQUAL 0 )
+	# TODO Figure out a good way of finding the current branch + commit date + modified
+	set( GitLastCommitDate "Pft...Windows Build" )
+endif ( ${Git_RETURN} EQUAL 0 )
+
+
+#| Uses CMake variables to include as defines
+#| Primarily for USB configuration
+configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/Lib/_buildvars.h buildvars.h )
+