From b7afaa100f83a9eac2a71f5eb0fa97c578aaeecf Mon Sep 17 00:00:00 2001 From: Jacob Alexander Date: Fri, 1 Feb 2013 20:02:55 -0500 Subject: [PATCH] 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 --- CMakeLists.txt | 3 +++ USB/pjrc/arm/usb_desc.c | 18 ++++++------- USB/pjrc/usb_com.h | 18 ++----------- arm.cmake | 12 ++++++--- avr.cmake | 10 ++++++-- setup.cmake | 57 +++++++++++++++++++++++++++++++++++++++++ 6 files changed, 88 insertions(+), 30 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 01a3181..c361cd0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,6 +74,9 @@ set( SRCS ${DEBUG_SRCS} ) +#| Directories to include by default +include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ) + ### diff --git a/USB/pjrc/arm/usb_desc.c b/USB/pjrc/arm/usb_desc.c index 99c94bd..9fe82ec 100644 --- a/USB/pjrc/arm/usb_desc.c +++ b/USB/pjrc/arm/usb_desc.c @@ -408,19 +408,19 @@ static struct usb_string_descriptor_struct string0 = { }; 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 @@ const usb_descriptor_list_t usb_descriptor_list[] = { {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} }; diff --git a/USB/pjrc/usb_com.h b/USB/pjrc/usb_com.h index 73cb544..f62e90c 100644 --- a/USB/pjrc/usb_com.h +++ b/USB/pjrc/usb_com.h @@ -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 // Local Includes +#include // 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 ----- diff --git a/arm.cmake b/arm.cmake index f84fb25..025cbe2 100644 --- a/arm.cmake +++ b/arm.cmake @@ -62,6 +62,11 @@ message( STATUS "Compiler Source Files:" ) 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 @@ set( WARN "-Wall -g" ) #| 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 @@ set( GENDEPFLAGS "-MMD" ) #| 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...) diff --git a/avr.cmake b/avr.cmake index 43e1880..7bed316 100644 --- a/avr.cmake +++ b/avr.cmake @@ -51,6 +51,11 @@ set( COMPILER_SRCS ) +#| 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 @@ set( WARN "-Wall -Wstrict-prototypes" ) #| 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 @@ set( GENDEPFLAGS "-MMD -MP" ) #| 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 diff --git a/setup.cmake b/setup.cmake index 90340bb..4971e5e 100644 --- a/setup.cmake +++ b/setup.cmake @@ -142,3 +142,60 @@ message( "${USB_SRCS}" ) 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 ) + -- 2.39.2