${DEBUG_SRCS}
)
+#| Directories to include by default
+include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} )
+
###
};
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
};
{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}
};
-/* 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
#include <stdint.h>
// Local Includes
+#include <buildvars.h> // Defines USB Parameters, partially generated by CMake
#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 -----
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
#| 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].
#| 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...)
)
+#| 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
#| 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].
#| 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
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 )
+