|
1 | | -/* |
2 | | - _______ _ _ _____ ____ |
3 | | - |__ __| | | | |/ ____| _ \ |
4 | | - | | ___ ___ _ __ _ _| | | | (___ | |_) | |
5 | | - | |/ _ \/ _ \ '_ \| | | | | | |\___ \| _ < |
6 | | - | | __/ __/ | | | |_| | |__| |____) | |_) | |
7 | | - |_|\___|\___|_| |_|\__, |\____/|_____/|____/ |
8 | | - __/ | |
9 | | - |___/ |
10 | | -
|
11 | | - TeenyUSB - light weight usb stack for STM32 micro controllers |
12 | | -
|
13 | | - Copyright (c) 2019 XToolBox - admin@xtoolbox.org |
14 | | - www.tusb.org |
15 | | -
|
16 | | - Permission is hereby granted, free of charge, to any person obtaining a copy |
17 | | - of this software and associated documentation files (the "Software"), to deal |
18 | | - in the Software without restriction, including without limitation the rights |
19 | | - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
20 | | - copies of the Software, and to permit persons to whom the Software is |
21 | | - furnished to do so, subject to the following conditions: |
22 | | -
|
23 | | - The above copyright notice and this permission notice shall be included in all |
24 | | - copies or substantial portions of the Software. |
25 | | -
|
26 | | - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
27 | | - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
28 | | - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
29 | | - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
30 | | - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
31 | | - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
32 | | - SOFTWARE. |
33 | | -*/ |
34 | 1 | #include <Arduino_MachineControl.h> |
| 2 | +#include <USBHost.h> |
| 3 | + |
| 4 | +#include "TUSB_helpers.h" |
35 | 5 |
|
36 | 6 | using namespace machinecontrol; |
37 | 7 |
|
| 8 | +// Redirect log output from MbedOS and low-level libraries to Serial |
38 | 9 | REDIRECT_STDOUT_TO(Serial); |
39 | 10 |
|
40 | | -static int process_key(tusbh_ep_info_t* ep, const uint8_t* key); |
41 | | - |
42 | | -static const tusbh_boot_key_class_t cls_boot_key = { |
43 | | - .backend = &tusbh_boot_keyboard_backend, |
44 | | - //.on_key = process_key |
45 | | -}; |
46 | | - |
47 | | -static const tusbh_boot_mouse_class_t cls_boot_mouse = { |
48 | | - .backend = &tusbh_boot_mouse_backend, |
49 | | - // .on_mouse = process_mouse |
50 | | -}; |
51 | | - |
52 | | -static const tusbh_hid_class_t cls_hid = { |
53 | | - .backend = &tusbh_hid_backend, |
54 | | - //.on_recv_data = process_hid_recv, |
55 | | - //.on_send_done = process_hid_sent, |
56 | | -}; |
57 | | - |
58 | | -static const tusbh_hub_class_t cls_hub = { |
59 | | - .backend = &tusbh_hub_backend, |
60 | | -}; |
61 | | - |
62 | | -static const tusbh_vendor_class_t cls_vendor = { |
63 | | - .backend = &tusbh_vendor_backend, |
64 | | - //.transfer_done = process_vendor_xfer_done |
65 | | -}; |
66 | | - |
67 | | -int msc_ff_mount(tusbh_interface_t* interface, int max_lun, const tusbh_block_info_t* blocks); |
68 | | -int msc_ff_unmount(tusbh_interface_t* interface); |
69 | | - |
70 | | -static const tusbh_msc_class_t cls_msc_bot = { |
71 | | - .backend = &tusbh_msc_bot_backend, |
72 | | - // .mount = msc_ff_mount, |
73 | | - // .unmount = msc_ff_unmount, |
74 | | -}; |
75 | | - |
76 | | -static const tusbh_cdc_acm_class_t cls_cdc_acm = { |
77 | | - .backend = &tusbh_cdc_acm_backend, |
78 | | -}; |
79 | | - |
80 | | -static const tusbh_cdc_rndis_class_t cls_cdc_rndis = { |
81 | | - .backend = &tusbh_cdc_rndis_backend, |
82 | | -}; |
83 | | - |
84 | | -static const tusbh_class_reg_t class_table[] = { |
85 | | - (tusbh_class_reg_t)&cls_boot_key, |
86 | | - (tusbh_class_reg_t)&cls_boot_mouse, |
87 | | - (tusbh_class_reg_t)&cls_hub, |
88 | | - (tusbh_class_reg_t)&cls_msc_bot, |
89 | | - (tusbh_class_reg_t)&cls_cdc_acm, |
90 | | - (tusbh_class_reg_t)&cls_cdc_rndis, |
91 | | - (tusbh_class_reg_t)&cls_hid, |
92 | | - (tusbh_class_reg_t)&cls_vendor, |
93 | | - 0, |
94 | | -}; |
95 | | - |
| 11 | +USBHost usb; |
96 | 12 |
|
97 | 13 | void setup() |
98 | 14 | { |
99 | 15 | Serial1.begin(115200); |
100 | | - usb_controller.init(class_table); |
| 16 | + usb_controller.powerEnable(); |
| 17 | + usb.Init(USB_CORE_ID_FS, class_table); |
101 | 18 |
|
102 | 19 | } |
103 | 20 |
|
104 | 21 | void loop() { |
105 | | - usb_controller.usb.Task(); |
| 22 | + usb.Task(); |
106 | 23 | } |
107 | 24 |
|
108 | | -#define MOD_CTRL (0x01 | 0x10) |
109 | | -#define MOD_SHIFT (0x02 | 0x20) |
110 | | -#define MOD_ALT (0x04 | 0x40) |
111 | | -#define MOD_WIN (0x08 | 0x80) |
112 | 25 |
|
113 | | -#define LED_NUM_LOCK 1 |
114 | | -#define LED_CAPS_LOCK 2 |
115 | | -#define LED_SCROLL_LOCK 4 |
116 | | - |
117 | | -#define stdin_recvchar Serial1.write |
118 | | - |
119 | | -static uint8_t key_leds; |
120 | | -static const char knum[] = "1234567890"; |
121 | | -static const char ksign[] = "!@#$%^&*()"; |
122 | | -static const char tabA[] = "\t -=[]\\#;'`,./"; |
123 | | -static const char tabB[] = "\t _+{}|~:\"~<>?"; |
124 | | -// route the key event to stdin |
125 | | -static int process_key(tusbh_ep_info_t* ep, const uint8_t* keys) |
126 | | -{ |
127 | | - printf("\n"); |
128 | | - uint8_t modify = keys[0]; |
129 | | - uint8_t key = keys[2]; |
130 | | - uint8_t last_leds = key_leds; |
131 | | - if (key >= KEY_A && key <= KEY_Z) { |
132 | | - char ch = 'A' + key - KEY_A; |
133 | | - if ( (!!(modify & MOD_SHIFT)) == (!!(key_leds & LED_CAPS_LOCK)) ) { |
134 | | - ch += 'a' - 'A'; |
135 | | - } |
136 | | - stdin_recvchar(ch); |
137 | | - Serial.print(ch); |
138 | | - } else if (key >= KEY_1 && key <= KEY_0) { |
139 | | - if (modify & MOD_SHIFT) { |
140 | | - stdin_recvchar(ksign[key - KEY_1]); |
141 | | - } else { |
142 | | - stdin_recvchar(knum[key - KEY_1]); |
143 | | - } |
144 | | - } else if (key >= KEY_TAB && key <= KEY_SLASH) { |
145 | | - if (modify & MOD_SHIFT) { |
146 | | - stdin_recvchar(tabB[key - KEY_TAB]); |
147 | | - } else { |
148 | | - stdin_recvchar(tabA[key - KEY_TAB]); |
149 | | - } |
150 | | - } else if (key == KEY_ENTER) { |
151 | | - stdin_recvchar('\r'); |
152 | | - } else if (key == KEY_CAPSLOCK) { |
153 | | - key_leds ^= LED_CAPS_LOCK; |
154 | | - } else if (key == KEY_NUMLOCK) { |
155 | | - key_leds ^= LED_NUM_LOCK; |
156 | | - } else if (key == KEY_SCROLLLOCK) { |
157 | | - key_leds ^= LED_SCROLL_LOCK; |
158 | | - } |
159 | | - |
160 | | - if (key_leds != last_leds) { |
161 | | - tusbh_set_keyboard_led(ep, key_leds); |
162 | | - } |
163 | | - return 0; |
164 | | -} |
0 commit comments