|
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 - [email protected] |
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