changeset 224:138e5ca7f8e4

Preparing ARM for USB NKRO - API changes from the AVR NKRO support
author Jacob Alexander <haata@kiibohd.com>
date Sun, 21 Sep 2014 16:29:53 -0700
parents fc3b9cb190cc
children b4e7a712cc15
files CMakeLists.txt Output/pjrcUSB/arm/usb_keyboard.c Output/pjrcUSB/arm/usb_keyboard.h Output/pjrcUSB/avr/usb_keyboard_serial.c Output/pjrcUSB/output_com.c
diffstat 5 files changed, 74 insertions(+), 44 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt	Sun Sep 21 11:55:37 2014 -0700
+++ b/CMakeLists.txt	Sun Sep 21 16:29:53 2014 -0700
@@ -20,9 +20,9 @@
 #	"at90usb162"       # Teensy   1.0 (avr)
 #	"atmega32u4"       # Teensy   2.0 (avr)
 #	"at90usb646"       # Teensy++ 1.0 (avr)
-	"at90usb1286"      # Teensy++ 2.0 (avr)
+#	"at90usb1286"      # Teensy++ 2.0 (avr)
 #	"mk20dx128"        # Teensy   3.0 (arm)
-#	"mk20dx128vlf5"    # McHCK    mk20dx128vlf5
+	"mk20dx128vlf5"    # McHCK    mk20dx128vlf5
 #	"mk20dx256"        # Teensy   3.1 (arm)
 )
 
@@ -48,8 +48,7 @@
 #| Please look at the {Scan,Macro,Output,Debug} for information on the modules and how to create new ones
 
 ##| Deals with acquiring the keypress information and turning it into a key index
-set(   ScanModule "DPH" )
-#set(   ScanModule "MD1" )
+set(   ScanModule "MD1" )
 
 ##| Provides the mapping functions for DefaultMap and handles any macro processing before sending to the OutputModule
 set(  MacroModule "PartialMap" )
@@ -89,17 +88,15 @@
 ##| Set the base keyboard .kll map, defaults to "defaultMap" if not found
 ##| Looks in Scan/<Module Name> for the available BaseMaps
 ##| TODO Support layering in basemap
-set(     BaseMap "kishsaver" )
-#set(     BaseMap "defaultMap" )
+set(     BaseMap "defaultMap" )
 
 ##| Layer additonal .kll maps on the BaseMap, layers are in order from 1st to nth
 ##| Can be set to ""
-#set(  DefaultMap "colemak stdFuncMap" )
-set(  DefaultMap "colemak kishsaver_unix1 stdFuncMap" )
+set(  DefaultMap "colemak stdFuncMap" )
 
 ##| ParitalMaps available on top of the BaseMap. See above for syntax on specifying multiple layers vs. layering
 ##| Can be set to ""
-#set( PartialMaps "hhkbpro2" )
+set( PartialMaps "hhkbpro2" )
 
 
 
--- a/Output/pjrcUSB/arm/usb_keyboard.c	Sun Sep 21 11:55:37 2014 -0700
+++ b/Output/pjrcUSB/arm/usb_keyboard.c	Sun Sep 21 16:29:53 2014 -0700
@@ -1,6 +1,7 @@
 /* Teensyduino Core Library
  * http://www.pjrc.com/teensy/
  * Copyright (c) 2013 PJRC.COM, LLC.
+ * Modifications by Jacob Alexander 2013-2014
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files (the
@@ -10,10 +11,10 @@
  * permit persons to whom the Software is furnished to do so, subject to
  * the following conditions:
  *
- * 1. The above copyright notice and this permission notice shall be 
+ * 1. The above copyright notice and this permission notice shall be
  * included in all copies or substantial portions of the Software.
  *
- * 2. If the Software is incorporated into a build system that allows 
+ * 2. If the Software is incorporated into a build system that allows
  * selection among a list of target devices, then similar target
  * devices manufactured by PJRC.COM must be included in the list of
  * target devices and selectable in the same manner.
@@ -28,17 +29,26 @@
  * SOFTWARE.
  */
 
+// ----- Includes -----
+
+// Compiler Includes
+#include <string.h> // for memcpy()
+
+// Project Includes
+#include <Lib/OutputLib.h>
+#include <print.h>
+
+// Local Includes
 #include "usb_dev.h"
 #include "usb_keyboard.h"
-#include <Lib/OutputLib.h>
-#include <string.h> // for memcpy()
+
 
 
+// ----- Defines -----
+
 // Maximum number of transmit packets to queue so we don't starve other endpoints for memory
 #define TX_PACKET_LIMIT 4
 
-static uint8_t transmit_previous_timeout=0;
-
 // When the PC isn't listening, how long do we wait before discarding data?
 #define TX_TIMEOUT_MSEC 50
 
@@ -51,32 +61,53 @@
 #endif
 
 
+
+// ----- Variables -----
+
+static uint8_t transmit_previous_timeout = 0;
+
+
+
+// ----- Functions -----
+
 // send the contents of keyboard_keys and keyboard_modifier_keys
-int usb_keyboard_send(void)
+void usb_keyboard_send()
 {
-	uint32_t wait_count=0;
+	uint32_t wait_count = 0;
 	usb_packet_t *tx_packet;
 
-	while (1) {
-		if (!usb_configuration) {
-			return -1;
+	while ( 1 )
+	{
+		if ( !usb_configuration )
+		{
+			erro_print("USB not configured...");
+			return;
 		}
-		if (usb_tx_packet_count(KEYBOARD_ENDPOINT) < TX_PACKET_LIMIT) {
+		if ( usb_tx_packet_count(KEYBOARD_ENDPOINT) < TX_PACKET_LIMIT )
+		{
 			tx_packet = usb_malloc();
-			if (tx_packet) break;
+			if ( tx_packet )
+				break;
 		}
-		if (++wait_count > TX_TIMEOUT || transmit_previous_timeout) {
+		if ( ++wait_count > TX_TIMEOUT || transmit_previous_timeout )
+		{
 			transmit_previous_timeout = 1;
-			return -1;
+			warn_print("USB Transmit Timeout...");
+			return;
 		}
 		yield();
 	}
+
+	// Boot Mode
 	*(tx_packet->buf) = USBKeys_Modifiers;
 	*(tx_packet->buf + 1) = 0;
-	memcpy(tx_packet->buf + 2, USBKeys_Array, USB_MAX_KEY_SEND);
+	memcpy( tx_packet->buf + 2, USBKeys_Keys, USB_BOOT_MAX_KEYS );
 	tx_packet->len = 8;
-	usb_tx(KEYBOARD_ENDPOINT, tx_packet);
 
-	return 0;
+	// Send USB Packet
+	usb_tx( KEYBOARD_ENDPOINT, tx_packet );
+	USBKeys_Changed = USBKeyChangeState_None;
+
+	return;
 }
 
--- a/Output/pjrcUSB/arm/usb_keyboard.h	Sun Sep 21 11:55:37 2014 -0700
+++ b/Output/pjrcUSB/arm/usb_keyboard.h	Sun Sep 21 16:29:53 2014 -0700
@@ -1,6 +1,7 @@
 /* Teensyduino Core Library
  * http://www.pjrc.com/teensy/
  * Copyright (c) 2013 PJRC.COM, LLC.
+ * Modifications by Jacob Alexander 2013-2014
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files (the
@@ -10,10 +11,10 @@
  * permit persons to whom the Software is furnished to do so, subject to
  * the following conditions:
  *
- * 1. The above copyright notice and this permission notice shall be 
+ * 1. The above copyright notice and this permission notice shall be
  * included in all copies or substantial portions of the Software.
  *
- * 2. If the Software is incorporated into a build system that allows 
+ * 2. If the Software is incorporated into a build system that allows
  * selection among a list of target devices, then similar target
  * devices manufactured by PJRC.COM must be included in the list of
  * target devices and selectable in the same manner.
@@ -31,10 +32,21 @@
 #ifndef USBkeyboard_h_
 #define USBkeyboard_h_
 
+// ----- Includes -----
+
+// Compiler Includes
 #include <inttypes.h>
-#include "output_com.h"
+
+// Local Includes
+#include <output_com.h>
+
+
 
-int usb_keyboard_send(void);
+// ----- Functions -----
+
+void usb_keyboard_send();
+
+
 
 #endif // USBkeyboard_h_
 
--- a/Output/pjrcUSB/avr/usb_keyboard_serial.c	Sun Sep 21 11:55:37 2014 -0700
+++ b/Output/pjrcUSB/avr/usb_keyboard_serial.c	Sun Sep 21 16:29:53 2014 -0700
@@ -99,6 +99,7 @@
 	// Send boot keyboard interrupt packet(s)
 	case 0:
 		usb_keyboard_toHost();
+		USBKeys_Changed = USBKeyChangeState_None;
 		break;
 
 	// Send NKRO keyboard interrupts packet(s)
--- a/Output/pjrcUSB/output_com.c	Sun Sep 21 11:55:37 2014 -0700
+++ b/Output/pjrcUSB/output_com.c	Sun Sep 21 16:29:53 2014 -0700
@@ -106,7 +106,7 @@
 // Protocol setting from the host.
 // 0 - Boot Mode
 // 1 - NKRO Mode (Default, unless set by a BIOS or boot interface)
-volatile uint8_t  USBKeys_Protocol = 1;
+volatile uint8_t  USBKeys_Protocol = 0;
 
 // Indicate if USB should send update
 // OS only needs update if there has been a change in state
@@ -379,29 +379,18 @@
 // USB Data Send
 inline void Output_send()
 {
-	// Don't send update if USB has not changed
-	if ( !USBKeys_Changed )
-	{
-		// Clear modifiers and keys
-		USBKeys_Modifiers = 0;
-		USBKeys_Sent      = 0;
-
-		return;
-	}
-
 	// Boot Mode Only, unset stale keys
 	if ( USBKeys_Protocol == 0 )
 		for ( uint8_t c = USBKeys_Sent; c < USB_BOOT_MAX_KEYS; c++ )
 			USBKeys_Keys[c] = 0;
 
-	// Send keypresses
+	// Send keypresses while there are pending changes
 	while ( USBKeys_Changed )
 		usb_keyboard_send();
 
 	// Clear modifiers and keys
 	USBKeys_Modifiers = 0;
 	USBKeys_Sent      = 0;
-	USBKeys_Changed   = USBKeyChangeState_None;
 
 	// Signal Scan Module we are finished
 	switch ( USBKeys_Protocol )