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 "usb-hid/keyboard.hpp"
5#include "usb.h"
6#include "usb-hid/hid.hpp"
7#include <ioforge/ioforge.hpp>
8#include <usb.h>
9
11
13 if (!dev->pipe) {
14 log(mod, "ERROR: missing pipe on %s", dev->base.name);
15 return;
16 }
17
18 set_configuration(dev, 1);
19
20 set_iddle(dev);
21
23
24 if (dev->protocol == HID_KEYBOARD) {
25 keyboard.load(dev);
26 }
27}
28
30 uintptr_t setiddle_paddr = 0;
31 struct usb_setup_packet* setiddle =
32 (struct usb_setup_packet*) IOUtils::DMAAlloc(
33 sizeof(struct usb_setup_packet), &setiddle_paddr);
34
35 setiddle->bRequest = SET_IDLE;
36 setiddle->bmRequestType = 0b00100001;
37 // setiddle->wValue = 0;
38 setiddle->wValue = ((uint16_t) dev->endpoints[0].interval);
39 setiddle->wIndex = 0;
40 setiddle->wLength = 0;
41
42 // todo: modify send method to add endpoint parameter
43 dev->controller->ops.send(dev->addr, dev->endpoints[0].address,
44 setiddle_paddr, sizeof(*setiddle), 0, 0);
45
46 IOUtils::DMAFree((void*) setiddle_paddr, (void*) setiddle,
47 sizeof(*setiddle));
48}
49
51 uintptr_t setreport_paddr = 0;
52 struct usb_setup_packet* setreport =
53 (struct usb_setup_packet*) IOUtils::DMAAlloc(
54 sizeof(struct usb_setup_packet), &setreport_paddr);
55
56 setreport->bRequest = SET_REPORT;
57 setreport->bmRequestType = 0b00100001;
58 setreport->wValue = ((uint16_t) dev->endpoints[0].interval);
59 setreport->wIndex = 0;
60 setreport->wLength = 0;
61
62 // todo: modify send method to add endpoint parameter
63 dev->controller->ops.send(dev->addr, dev->endpoints[0].address,
64 setreport_paddr,
65 sizeof(struct usb_setup_packet), 0, 0);
66
67 IOUtils::DMAFree((void*) setreport_paddr, (void*) setreport,
68 sizeof(struct usb_setup_packet));
69}
70
72 uintptr_t setreport_paddr = 0;
73 struct usb_setup_packet* setreport =
74 (struct usb_setup_packet*) IOUtils::DMAAlloc(
75 sizeof(struct usb_setup_packet), &setreport_paddr);
76
77 setreport->bRequest = GET_REPORT;
78 setreport->bmRequestType = 0b10100001;
79 setreport->wValue = ((uint16_t) dev->endpoints[0].interval);
80 setreport->wIndex = 0;
81 setreport->wLength = 0;
82
83 // todo: modify send method to add endpoint parameter
84 dev->controller->ops.send(dev->addr, dev->endpoints[0].address,
85 setreport_paddr,
86 sizeof(struct usb_setup_packet), 0, 0);
87
88 IOUtils::DMAFree((void*) setreport_paddr, (void*) setreport,
89 sizeof(struct usb_setup_packet));
90}
91
94 uintptr_t setreport_paddr = 0;
95 struct usb_setup_packet* setreport =
96 (struct usb_setup_packet*) IOUtils::DMAAlloc(
97 sizeof(struct usb_setup_packet), &setreport_paddr);
98
99 setreport->bRequest = SET_PROTOCOL;
100 setreport->bmRequestType = 0b00100001;
101 setreport->wValue = protocol;
102 setreport->wIndex = interface;
103 setreport->wLength = 0;
104
105 // TODO: modify send method to add endpoint parameter
106 dev->controller->ops.send(dev->addr, dev->endpoints[0].address,
107 setreport_paddr,
108 sizeof(struct usb_setup_packet), 0, 0);
109
110 IOUtils::DMAFree((void*) setreport_paddr, (void*) setreport,
111 sizeof(struct usb_setup_packet));
112}
const char * mod
Definition ioforge.hpp:65
static void set_configuration(struct ioforge_usb_device *dev, uint8_t val)
static HIDKeyboard keyboard
Definition hid.hpp:27
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
#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 long uintptr_t
Definition type.h:73
unsigned char uint8_t
Definition type.h:7
@ REPORT_PROTOCOL
Definition hid.hpp:7
@ HID_KEYBOARD
Definition hid.hpp:9
@ SET_PROTOCOL
Definition usb.h:71
@ GET_REPORT
Definition usb.h:66
@ SET_IDLE
Definition usb.h:70
@ SET_REPORT
Definition usb.h:69