]> git.donarmstrong.com Git - kiibohd-controller.git/commitdiff
Preparing ARM for USB NKRO
authorJacob Alexander <haata@kiibohd.com>
Sun, 21 Sep 2014 23:29:53 +0000 (16:29 -0700)
committerJacob Alexander <haata@kiibohd.com>
Sun, 21 Sep 2014 23:29:53 +0000 (16:29 -0700)
- API changes from the AVR NKRO support

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

index 8f78fcee459e9cce1a69410690fbea4f4f34811a..020f210891fbddb33eee21ab74512f69d93a077a 100644 (file)
@@ -20,9 +20,9 @@ set( CHIP
 #      "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 @@ include( initialize )
 #| 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(  DebugModule "full" )
 ##| 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" )
 
 
 
index 6abcd4123aeb8529d716c82ced6592d0fa1c6610..07ef394c2e157604b9439ccc2e66f4dba69c63eb 100644 (file)
@@ -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
  * 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.
  * 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 @@ static uint8_t transmit_previous_timeout=0;
 #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;
 }
 
index bcbea72c2ac42dff531d3ba1b2e0b812b02acf20..8184879a5d6e724085ce72fe073f0f21b88669bd 100644 (file)
@@ -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
  * 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.
 #ifndef USBkeyboard_h_
 #define USBkeyboard_h_
 
+// ----- Includes -----
+
+// Compiler Includes
 #include <inttypes.h>
-#include "output_com.h"
 
-int usb_keyboard_send(void);
+// Local Includes
+#include <output_com.h>
+
+
+
+// ----- Functions -----
+
+void usb_keyboard_send();
+
+
 
 #endif // USBkeyboard_h_
 
index 95503af700cc04c5af5a88c119727b4542641467..5c3e9d65e6dddbd21ec1229f0f2570f016217aa7 100644 (file)
@@ -99,6 +99,7 @@ inline void usb_keyboard_send()
        // Send boot keyboard interrupt packet(s)
        case 0:
                usb_keyboard_toHost();
+               USBKeys_Changed = USBKeyChangeState_None;
                break;
 
        // Send NKRO keyboard interrupts packet(s)
index 715a362246c7fe70b6ac6043366c9a313e89c5e9..6bc027591199cc593780af012e4e619f086a76fd 100644 (file)
@@ -106,7 +106,7 @@ volatile uint8_t  USBKeys_LEDs = 0;
 // 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 @@ inline void Output_setup()
 // 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 )