-
Notifications
You must be signed in to change notification settings - Fork 383
/
Copy pathusbdriver.cpp
102 lines (82 loc) · 3.25 KB
/
usbdriver.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*
* SPDX-License-Identifier: MIT
* SPDX-FileCopyrightText: Copyright (c) 2024 Open Stick Community (gp2040-ce.info)
*/
#ifndef _USBDRIVER_CPP_
#define _USBDRIVER_CPP_
#include "tusb.h"
#include "drivermanager.h"
static bool usb_mounted;
static bool usb_suspended;
bool get_usb_mounted(void) {
return usb_mounted;
}
bool get_usb_suspended(void) {
return usb_suspended;
}
const usbd_class_driver_t *usbd_app_driver_get_cb(uint8_t *driver_count) {
*driver_count = 1;
return DriverManager::getInstance().getDriver()->get_class_driver();
}
uint16_t tud_hid_get_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t *buffer, uint16_t reqlen) {
return DriverManager::getInstance().getDriver()->get_report(report_id, report_type, buffer, reqlen);
}
// Invoked when received SET_REPORT control request or
// received data on OUT endpoint ( Report ID = 0, Type = 0 )
void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id, hid_report_type_t report_type, uint8_t const *buffer, uint16_t bufsize) {
DriverManager::getInstance().getDriver()->set_report(report_id, report_type, buffer, bufsize);
}
// Invoked when device is mounted
void tud_mount_cb(void)
{
usb_mounted = true;
usb_suspended = false;
}
// Invoked when device is unmounted
void tud_umount_cb(void)
{
usb_mounted = false;
usb_suspended = false;
}
// Invoked when usb bus is suspended
// remote_wakeup_en : if host allow us to perform remote wakeup
// Within 7ms, device must draw an average of current less than 2.5 mA from bus
void tud_suspend_cb(bool remote_wakeup_en) {
(void)remote_wakeup_en;
usb_suspended = true;
}
// Invoked when usb bus is resumed
void tud_resume_cb(void) {
usb_suspended = false;
}
// Vendor Controlled XFER occured
bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage,
tusb_control_request_t const *request) {
return DriverManager::getInstance().getDriver()->vendor_control_xfer_cb(rhport, stage, request);
}
// Invoked when received GET STRING DESCRIPTOR request
// Application return pointer to descriptor, whose contents must exist long enough for transfer to complete
uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid) {
return DriverManager::getInstance().getDriver()->get_descriptor_string_cb(index, langid);
}
// Invoked when received GET DEVICE DESCRIPTOR
// Application return pointer to descriptor
uint8_t const *tud_descriptor_device_cb() {
return DriverManager::getInstance().getDriver()->get_descriptor_device_cb();
}
// Invoked when received GET HID REPORT DESCRIPTOR
// Application return pointer to descriptor
// Descriptor contents must exist long enough for transfer to complete
uint8_t const *tud_hid_descriptor_report_cb(uint8_t itf) {
return DriverManager::getInstance().getDriver()->get_hid_descriptor_report_cb(itf);
}
// Invoked when received GET CONFIGURATION DESCRIPTOR
// Application return pointer to descriptor
// Descriptor contents must exist long enough for transfer to complete
uint8_t const *tud_descriptor_configuration_cb(uint8_t index) {
return DriverManager::getInstance().getDriver()->get_descriptor_configuration_cb(index);
}
uint8_t const* tud_descriptor_device_qualifier_cb() {
return DriverManager::getInstance().getDriver()->get_descriptor_device_qualifier_cb();
}
#endif