Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
hid.cpp
Go to the documentation of this file.
1#include "ioforge/ioforge.h"
4#include "type.h"
5#include "usb-hid/keyboard.hpp"
6#include "usb.h"
7#include "usb-hid/hid.hpp"
8#include <ioforge/ioforge.hpp>
9#include <usb.h>
10
12
14 if (!dev->pipe) {
15 log(mod, "ERROR: missing pipe on %s", dev->base.name);
16 return;
17 }
18
19 set_configuration(dev, 1);
20
21 set_iddle(dev);
22
24
25 serial2_printf("dev at : 0x%x\n", dev);
26 if (dev->protocol == HID_KEYBOARD) {
27 keyboard.load(dev);
28 }
29 serial2_printf("dev at : 0x%x\n", dev);
30}
31
33 uintptr_t setiddle_paddr = 0;
34 struct usb_setup_packet* setiddle =
35 (struct usb_setup_packet*) IOUtils::DMAAlloc(
36 sizeof(struct usb_setup_packet), &setiddle_paddr);
37
38 setiddle->bRequest = SET_IDLE;
39 setiddle->bmRequestType = 0b00100001;
40 // setiddle->wValue = 0;
41 setiddle->wValue = ((uint16_t) dev->endpoints[0].interval);
42 setiddle->wIndex = 0;
43 setiddle->wLength = 0;
44
45 // todo: modify send method to add endpoint parameter
46 dev->controller->ops.send(dev->addr, dev->endpoints[0].address,
47 (uint32_t) setiddle_paddr, sizeof(*setiddle),
48 0, 0);
49
50 IOUtils::DMAFree((void*) setiddle_paddr, (void*) setiddle,
51 sizeof(*setiddle));
52}
53
55 UNUSED(report);
56 uintptr_t setreport_paddr = 0;
57 struct usb_setup_packet* setreport =
58 (struct usb_setup_packet*) IOUtils::DMAAlloc(
59 sizeof(struct usb_setup_packet), &setreport_paddr);
60
61 setreport->bRequest = SET_REPORT;
62 setreport->bmRequestType = 0b00100001;
63 setreport->wValue = ((uint16_t) dev->endpoints[0].interval);
64 setreport->wIndex = 0;
65 setreport->wLength = 0;
66
67 // todo: modify send method to add endpoint parameter
68 dev->controller->ops.send(dev->addr, dev->endpoints[0].address,
69 (uint32_t) setreport_paddr,
70 sizeof(struct usb_setup_packet), 0, 0);
71
72 IOUtils::DMAFree((void*) setreport_paddr, (void*) setreport,
73 sizeof(struct usb_setup_packet));
74}
75
77 uintptr_t setreport_paddr = 0;
78 struct usb_setup_packet* setreport =
79 (struct usb_setup_packet*) IOUtils::DMAAlloc(
80 sizeof(struct usb_setup_packet), &setreport_paddr);
81
82 setreport->bRequest = GET_REPORT;
83 setreport->bmRequestType = 0b10100001;
84 setreport->wValue = ((uint16_t) dev->endpoints[0].interval);
85 setreport->wIndex = 0;
86 setreport->wLength = 0;
87
88 // todo: modify send method to add endpoint parameter
89 dev->controller->ops.send(dev->addr, dev->endpoints[0].address,
90 (uint32_t) setreport_paddr,
91 sizeof(struct usb_setup_packet), 0, 0);
92
93 IOUtils::DMAFree((void*) setreport_paddr, (void*) setreport,
94 sizeof(struct usb_setup_packet));
95}
96
99 uintptr_t setreport_paddr = 0;
100 struct usb_setup_packet* setreport =
101 (struct usb_setup_packet*) IOUtils::DMAAlloc(
102 sizeof(struct usb_setup_packet), &setreport_paddr);
103
104 setreport->bRequest = SET_PROTOCOL;
105 setreport->bmRequestType = 0b00100001;
106 setreport->wValue = protocol;
107 setreport->wIndex = interface;
108 setreport->wLength = 0;
109
110 // TODO: modify send method to add endpoint parameter
111 dev->controller->ops.send(dev->addr, dev->endpoints[0].address,
112 (uint32_t) setreport_paddr,
113 sizeof(struct usb_setup_packet), 0, 0);
114
115 IOUtils::DMAFree((void*) setreport_paddr, (void*) setreport,
116 sizeof(struct usb_setup_packet));
117}
const char * mod
Definition ioforge.hpp:65
static void set_configuration(struct ioforge_usb_device *dev, uint8_t val)
void set_protocol(ioforge_usb_device *dev, uint8_t interface, uint8_t protocol)
Definition hid.cpp:92
void get_report(ioforge_usb_device *dev)
Definition hid.cpp:71
void hid_device_setup(ioforge_usb_device *dev)
Definition hid.cpp:12
void set_report(ioforge_usb_device *dev, uint8_t report)
Definition hid.cpp:50
void set_iddle(ioforge_usb_device *dev)
Definition hid.cpp:29
@ REPORT_PROTOCOL
Definition hid.hpp:7
@ HID_KEYBOARD
Definition hid.hpp:9
void serial2_printf(const char *fmt,...)
#define log(mod, fmt,...)
Definition ioforge.hpp:12
uint8_t protocol
Definition ipv4.h:6
void(* send)(uint32_t addr, uint8_t endpoint, uint32_t data_phys, size_t request_size, uint32_t response_phys, size_t response_size)
Definition ioforge_usb.h:16
char name[64]
Definition ioforge.h:30
struct UsbControllerOp ops
Definition ioforge_usb.h:23
struct ioforge_device base
Definition ioforge_usb.h:35
struct ioforge_usb_controller_service * controller
Definition ioforge_usb.h:52
struct ioforge_usb_endpoint endpoints[16]
Definition ioforge_usb.h:53
uint8_t bmRequestType
Definition usb.h:81
uint16_t wLength
Definition usb.h:85
uint16_t wValue
Definition usb.h:83
uint16_t wIndex
Definition usb.h:84
uint8_t bRequest
Definition usb.h:82
unsigned short uint16_t
Definition type.h:13
unsigned int uint32_t
Definition type.h:19
unsigned long uintptr_t
Definition type.h:73
#define UNUSED(x)
Definition type.h:100
unsigned char uint8_t
Definition type.h:7
static HIDKeyboard keyboard
Definition hid.cpp:11
@ SET_PROTOCOL
Definition usb.h:71
@ GET_REPORT
Definition usb.h:66
@ SET_IDLE
Definition usb.h:70
@ SET_REPORT
Definition usb.h:69