]> git.donarmstrong.com Git - kiibohd-controller.git/commitdiff
Finished USB for Teensy 3.1 (Now 3.1 compatible!)
authorJacob Alexander <haata@kiibohd.com>
Mon, 3 Feb 2014 05:12:20 +0000 (21:12 -0800)
committerJacob Alexander <haata@kiibohd.com>
Sat, 22 Mar 2014 21:14:23 +0000 (14:14 -0700)
Debug/led/led.c
Debug/print/print.c
Debug/print/print.h
Output/pjrcUSB/arm/usb_desc.c
Output/pjrcUSB/arm/usb_desc.h
Output/pjrcUSB/arm/usb_mem.c
Output/pjrcUSB/output_com.c

index e8a28cc0771d17c19ec2452782420ceb16f41802..4ecff2a1647349faf03bbe6854946c0900c78463 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011 by Jacob Alexander
+/* Copyright (C) 2011-2014 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
@@ -42,7 +42,7 @@ inline void init_errorLED()
        DDRD |= (1<<6);
 
 // ARM
-#elif defined(_mk20dx128_)
+#elif defined(_mk20dx128_) || defined(_mk20dx256_)
 
        // Setup pin - Pin 11 -> C5 - See Lib/pin_map.teensy3 for more details on pins
        PORTC_PCR5 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1);
@@ -68,7 +68,7 @@ inline void errorLED( uint8_t on )
        }
 
 // ARM
-#elif defined(_mk20dx128_)
+#elif defined(_mk20dx128_) || defined(_mk20dx256_)
 
        // Error LED On (C5)
        if ( on ) {
index 4f765ac1db6bcc40ca4ee9139e1b896e5751e347..5fcb97f27c8989cf9aff96d199ad0e78b9ecb476 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2013 by Jacob Alexander
+/* Copyright (C) 2011-2014 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
@@ -37,7 +37,7 @@ void usb_debug_putstr( char* s )
 #if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
        while ( *s != '\0' )
                usb_debug_putchar( *s++ );
-#elif defined(_mk20dx128_) // ARM
+#elif defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
        // Count characters until NULL character, then send the amount counted
        uint32_t count = 0;
        while ( s[count] != '\0' )
@@ -84,7 +84,7 @@ void _print(const char *s)
                        usb_debug_putchar('\r');
                usb_debug_putchar(c);
        }
-#elif defined(_mk20dx128_) // ARM
+#elif defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
        usb_debug_putstr( (char*)s );
 #endif
 }
index 8a07baae1950794497bcfe02d2630edbd1846991..bf9aacdb9698a6abb7dd1d3d773947695d36b4c5 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2011-2013 by Jacob Alexander
+/* Copyright (C) 2011-2014 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
@@ -30,7 +30,7 @@
 #include <avr/pgmspace.h>
 #include "avr/usb_keyboard_debug.h"
 
-#elif defined(_mk20dx128_)
+#elif defined(_mk20dx128_) || defined(_mk20dx256_)
 
 #include "arm/usb_serial.h"
 
index 51143e580912c91e1d49cc0104dd70b42e076bf5..c5d9982329e6b94bcc0e8fb92fe927c1a8666be6 100644 (file)
@@ -358,23 +358,30 @@ struct usb_string_descriptor_struct {
         uint16_t wString[];
 };
 
-static struct usb_string_descriptor_struct string0 = {
+extern struct usb_string_descriptor_struct usb_string_manufacturer_name
+        __attribute__ ((weak, alias("usb_string_manufacturer_name_default")));
+extern struct usb_string_descriptor_struct usb_string_product_name
+        __attribute__ ((weak, alias("usb_string_product_name_default")));
+extern struct usb_string_descriptor_struct usb_string_serial_number
+        __attribute__ ((weak, alias("usb_string_serial_number_default")));
+
+struct usb_string_descriptor_struct string0 = {
         4,
         3,
         {0x0409}
 };
 
-static struct usb_string_descriptor_struct string1 = {
+struct usb_string_descriptor_struct usb_string_manufacturer_name_default = {
         sizeof(STR_MANUFACTURER),
         3,
         STR_MANUFACTURER
 };
-static struct usb_string_descriptor_struct string2 = {
+struct usb_string_descriptor_struct usb_string_product_name_default = {
        sizeof(STR_PRODUCT),
         3,
         STR_PRODUCT
 };
-static struct usb_string_descriptor_struct string3 = {
+struct usb_string_descriptor_struct usb_string_serial_number_default = {
        sizeof(STR_SERIAL),
         3,
        STR_SERIAL
@@ -399,10 +406,10 @@ const usb_descriptor_list_t usb_descriptor_list[] = {
         {0x2200, MOUSE_INTERFACE, mouse_report_desc, sizeof(mouse_report_desc)},
         {0x2100, MOUSE_INTERFACE, config_descriptor+MOUSE_DESC_OFFSET, 9},
 #endif
-        {0x0300, 0x0000, (const uint8_t *)&string0, 4},
-        {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)},
+        {0x0300, 0x0000, (const uint8_t *)&string0, 0},
+        {0x0301, 0x0409, (const uint8_t *)&usb_string_manufacturer_name, 0},
+        {0x0302, 0x0409, (const uint8_t *)&usb_string_product_name, 0},
+        {0x0303, 0x0409, (const uint8_t *)&usb_string_serial_number, 0},
        {0, 0, NULL, 0}
 };
 
index 4703de7fd68e151081b8d393c98e1e5f21fc2a69..acebf5f0271a6faf06e7960c5db8c166a8e42a40 100644 (file)
 #define ENDPOINT_RECEIVE_ONLY          0x19
 #define ENDPOINT_TRANSMIT_AND_RECEIVE  0x1D
 
-// Some operating systems, especially Windows, may cache USB device
-// info.  Changes to the device name may not update on the same
-// computer unless the vendor or product ID numbers change, or the
-// "bcdDevice" revision code is increased.
+/*
+To modify a USB Type to have different interfaces, start in this
+file.  Delete the XYZ_INTERFACE lines for any interfaces you
+wish to remove, and copy them from another USB Type for any you
+want to add.
+
+Give each interface a unique number, and edit NUM_INTERFACE to
+reflect the number of interfaces.
+
+Within each interface, make sure it uses a unique set of endpoints.
+Edit NUM_ENDPOINTS to be at least the largest endpoint number used.
+Then edit the ENDPOINT*_CONFIG lines so each endpoint is configured
+the proper way (transmit, receive, or both).
+
+The CONFIG_DESC_SIZE and any XYZ_DESC_OFFSET numbers must be
+edited to the correct sizes.  See usb_desc.c for the giant array
+of bytes.  Someday these may be done automatically..... (but how?)
+
+If you are using existing interfaces, the code in each file should
+automatically adapt to the changes you specify.  If you need to
+create a new type of interface, you'll need to write the code which
+sends and receives packets, and presents an API to the user.
+
+Finally, edit usb_inst.cpp, which creats instances of the C++
+objects for each combination.
+
+Some operating systems, especially Windows, may cache USB device
+info.  Changes to the device name may not update on the same
+computer unless the vendor or product ID numbers change, or the
+"bcdDevice" revision code is increased.
+
+If these instructions are missing steps or could be improved, please
+let me know?  http://forum.pjrc.com/forums/4-Suggestions-amp-Bug-Reports
+*/
+
+
 
 #define DEVICE_CLASS           0xEF
 #define DEVICE_SUBCLASS        0x02
 #define DEVICE_PROTOCOL        0x01
 #define EP0_SIZE               64
-#define NUM_ENDPOINTS          15
+#define NUM_ENDPOINTS          6
+#define NUM_USB_BUFFERS        30
 #define NUM_INTERFACE          4
 #define CDC_IAD_DESCRIPTOR     1
 #define CDC_STATUS_INTERFACE   0
 #define MOUSE_ENDPOINT        5
 #define MOUSE_SIZE            8
 #define MOUSE_INTERVAL        2
+#define JOYSTICK_INTERFACE    4        // Joystick
+#define JOYSTICK_ENDPOINT     6
+#define JOYSTICK_SIZE         16
+#define JOYSTICK_INTERVAL     1
 #define KEYBOARD_DESC_OFFSET   (9+8 + 9+5+5+4+5+7+9+7+7 + 9)
 #define MOUSE_DESC_OFFSET      (9+8 + 9+5+5+4+5+7+9+7+7 + 9+9+7 + 9)
-#define CONFIG_DESC_SIZE       (9+8 + 9+5+5+4+5+7+9+7+7 + 9+9+7 + 9+9+7)
+#define JOYSTICK_DESC_OFFSET   (9+8 + 9+5+5+4+5+7+9+7+7 + 9+9+7 + 9+9+7 + 9)
+#define CONFIG_DESC_SIZE       (9+8 + 9+5+5+4+5+7+9+7+7 + 9+9+7 + 9+9+7 + 9+9+7)
 #define ENDPOINT1_CONFIG       ENDPOINT_TRANSIMIT_ONLY
 #define ENDPOINT2_CONFIG       ENDPOINT_TRANSIMIT_ONLY
 #define ENDPOINT3_CONFIG       ENDPOINT_RECEIVE_ONLY
 #define ENDPOINT4_CONFIG       ENDPOINT_TRANSIMIT_ONLY
 #define ENDPOINT5_CONFIG       ENDPOINT_TRANSIMIT_ONLY
-
+#define ENDPOINT6_CONFIG       ENDPOINT_TRANSIMIT_ONLY
 
 
 // NUM_ENDPOINTS = number of non-zero endpoints (0 to 15)
index 9793e5692ad2685086384904280539f6ec5b0abb..8a909cf192d063343034c2ea8224634e29f0cadf 100644 (file)
 #include "usb_dev.h"
 #include "usb_mem.h"
 
-#define NUM_BUF 30
-
 __attribute__ ((section(".usbbuffers"), used))
-//static unsigned char usb_buffer_memory[NUM_BUF * sizeof(usb_packet_t)];
-unsigned char usb_buffer_memory[NUM_BUF * sizeof(usb_packet_t)];
+unsigned char usb_buffer_memory[NUM_USB_BUFFERS * sizeof(usb_packet_t)];
 
 static uint32_t usb_buffer_available = 0xFFFFFFFF;
 
@@ -53,7 +50,7 @@ usb_packet_t * usb_malloc(void)
        __disable_irq();
        avail = usb_buffer_available;
        n = __builtin_clz(avail); // clz = count leading zeros
-       if (n >= NUM_BUF) {
+       if (n >= NUM_USB_BUFFERS) {
                __enable_irq();
                return NULL;
        }
@@ -82,7 +79,7 @@ void usb_free(usb_packet_t *p)
 
        //serial_print("free:");
        n = ((uint8_t *)p - usb_buffer_memory) / sizeof(usb_packet_t);
-       if (n >= NUM_BUF) return;
+       if (n >= NUM_USB_BUFFERS) return;
        //serial_phex(n);
        //serial_print("\n");
 
index 78c797e93558a8e5a03e4fb446bfc026a11fe7fa..6e258ddad5c96b22e3019b4562f440da87c56d8a 100644 (file)
@@ -30,7 +30,7 @@
 // USB Includes
 #if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_)
 #include "avr/usb_keyboard_debug.h"
-#elif defined(_mk20dx128_)
+#elif defined(_mk20dx128_) || defined(_mk20dx256_)
 #include "arm/usb_keyboard.h"
 #include "arm/usb_dev.h"
 #endif
@@ -110,7 +110,7 @@ inline void usb_send(void)
 inline void output_firmwareReload()
 {
 #if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_)
-#elif defined(_mk20dx128_)
+#elif defined(_mk20dx128_) || defined(_mk20dx256_)
        usb_device_reload();
 #endif
 }