XenevaOS
Loading...
Searching...
No Matches
Classes | Macros | Functions | Variables
main.cpp File Reference
#include <aurora.h>
#include <Drivers/usb.h>
#include <aucon.h>
#include <Mm/pmmngr.h>
#include <Mm/vmmngr.h>
#include "hid.h"
#include <Fs/Dev/devinput.h>
#include <Hal/serial.h>
Include dependency graph for main.cpp:

Classes

struct  ReportState
 
struct  ReportItem
 

Macros

#define HID_DESCRIPTOR_HID   0x21
 
#define HID_DESCRIPTOR_REPORT   0x22
 
#define HID_DESCRIPTOR_PHYSICAL   0x23
 
#define HID_MAIN_ITEM_TAG_INPUT   0x80
 
#define HID_MAIN_ITEM_TAG_OUTPUT   0x90
 
#define HID_MAIN_ITEM_TAG_FEATURE   0xB0
 
#define HID_MAIN_ITEM_TAG_COLLECTION   0xA0
 
#define HID_MAIN_ITEM_TAG_END_COLLECTION   0xC0
 
#define HID_GLOBAL_ITEM_TAG_USAGE_PAGE   0x4
 
#define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM   0x14
 
#define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM   0x24
 
#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM   0x34
 
#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM   0x44
 
#define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT   0x54
 
#define HID_GLOBAL_ITEM_TAG_UNIT   0x64
 
#define HID_GLOBAL_ITEM_TAG_REPORT_SIZE   0x74
 
#define HID_GLOBAL_ITEM_TAG_REPORT_ID   0x84
 
#define HID_GLOBAL_ITEM_TAG_REPORT_COUNT   0x94
 
#define HID_GLOBAL_ITEM_TAG_PUSH   0xA4
 
#define HID_GLOBAL_ITEM_TAG_POP   0xB4
 
#define HID_LOCAL_ITEM_TAG_USAGE   0x8
 
#define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM   0x18
 
#define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM   0x28
 
#define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX   0x38
 
#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM   0x48
 
#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM   0x58
 
#define HID_LOCAL_ITEM_TAG_STRING_INDEX   0x78
 
#define HID_LOCAL_ITEM_TAG_STRING_MINIMUM   0x88
 
#define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM   0x98
 
#define HID_LOCAL_ITEM_TAG_DELIMITER   0xA8
 
#define HID_COLLECTION_TYPE_PHYSICAL   0x00
 
#define HID_COLLECTION_TYPE_APPLICATION   0x01
 
#define HID_COLLECTION_TYPE_LOGICAL   0x02
 
#define HID_COLLECTION_TYPE_REPORT   0x03
 
#define HID_COLLECTION_NAMED_ARRAY   0x04
 
#define HID_COLLECTION_USAGE_SWITCH   0x05
 
#define HID_COLLECTION_USAGE_MODIFIER   0x06
 
#define HID_ITEM_TYPE_MAIN   0
 
#define HID_ITEM_TYPE_GLOBAL   1
 
#define HID_ITEM_TYPE_LOCAL   2
 
#define HID_ITEM_TYPE_RESERVED   3
 
#define HID_APPLICATION_GENERIC_DESKTOP_CTL   1
 
#define HID_APPLICATION_KEYBOARD_KEYPAD   7
 
#define HID_APPLICATION_BUTTONS   9
 
#define HID_APPLICATION_LEDS   8
 
#define HID_USAGE_X_AXIS   0x30
 
#define HID_USAGE_Y_AXIS   0x31
 
#define HID_USAGE_Z_AXIS   0x32
 
#define HID_USAGE_WHEEL   0x38
 
#define REPORT_ITEM_INPUT   1
 
#define REPORT_ITEM_OUTPUT   2
 
#define REPORT_ITEM_FEATURE   3
 
#define REPORT_ITEM_USAGE_MOUSE   1
 

Functions

AU_EXTERN AU_EXPORT int AuUSBDriverUnload (AuUSBDeviceStruc *dev)
 
void SetProtocol (AuUSBDeviceStruc *dev)
 
void SetIDLE (AuUSBDeviceStruc *dev)
 
void GetReport (AuUSBDeviceStruc *dev, uint64_t buffer, uint16_t report_bytes)
 
bool HIDParseReportDescriptor (uint8_t *report, size_t reportBytes)
 
int usb_pow (int a, int b)
 
void HIDCallback (void *dev, void *slot, void *endp)
 
AU_EXTERN AU_EXPORT int AuUSBDriverMain (AuUSBDeviceStruc *dev)
 

Variables

ReportItem items [32]
 
uintptr_t reportItemLength
 
uint64_t mouse_data
 
AuUSBDeviceStrucdevice
 
void * endpoint
 

Macro Definition Documentation

◆ HID_APPLICATION_BUTTONS

#define HID_APPLICATION_BUTTONS   9

◆ HID_APPLICATION_GENERIC_DESKTOP_CTL

#define HID_APPLICATION_GENERIC_DESKTOP_CTL   1

◆ HID_APPLICATION_KEYBOARD_KEYPAD

#define HID_APPLICATION_KEYBOARD_KEYPAD   7

◆ HID_APPLICATION_LEDS

#define HID_APPLICATION_LEDS   8

◆ HID_COLLECTION_NAMED_ARRAY

#define HID_COLLECTION_NAMED_ARRAY   0x04

◆ HID_COLLECTION_TYPE_APPLICATION

#define HID_COLLECTION_TYPE_APPLICATION   0x01

◆ HID_COLLECTION_TYPE_LOGICAL

#define HID_COLLECTION_TYPE_LOGICAL   0x02

◆ HID_COLLECTION_TYPE_PHYSICAL

#define HID_COLLECTION_TYPE_PHYSICAL   0x00

◆ HID_COLLECTION_TYPE_REPORT

#define HID_COLLECTION_TYPE_REPORT   0x03

◆ HID_COLLECTION_USAGE_MODIFIER

#define HID_COLLECTION_USAGE_MODIFIER   0x06

◆ HID_COLLECTION_USAGE_SWITCH

#define HID_COLLECTION_USAGE_SWITCH   0x05

◆ HID_DESCRIPTOR_HID

#define HID_DESCRIPTOR_HID   0x21

BSD 2-Clause License

Copyright (c) 2022-2023, Manas Kamal Choudhury All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

◆ HID_DESCRIPTOR_PHYSICAL

#define HID_DESCRIPTOR_PHYSICAL   0x23

◆ HID_DESCRIPTOR_REPORT

#define HID_DESCRIPTOR_REPORT   0x22

◆ HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM

#define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM   0x24

◆ HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM

#define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM   0x14

◆ HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM

#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM   0x44

◆ HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM

#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM   0x34

◆ HID_GLOBAL_ITEM_TAG_POP

#define HID_GLOBAL_ITEM_TAG_POP   0xB4

◆ HID_GLOBAL_ITEM_TAG_PUSH

#define HID_GLOBAL_ITEM_TAG_PUSH   0xA4

◆ HID_GLOBAL_ITEM_TAG_REPORT_COUNT

#define HID_GLOBAL_ITEM_TAG_REPORT_COUNT   0x94

◆ HID_GLOBAL_ITEM_TAG_REPORT_ID

#define HID_GLOBAL_ITEM_TAG_REPORT_ID   0x84

◆ HID_GLOBAL_ITEM_TAG_REPORT_SIZE

#define HID_GLOBAL_ITEM_TAG_REPORT_SIZE   0x74

◆ HID_GLOBAL_ITEM_TAG_UNIT

#define HID_GLOBAL_ITEM_TAG_UNIT   0x64

◆ HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT

#define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT   0x54

◆ HID_GLOBAL_ITEM_TAG_USAGE_PAGE

#define HID_GLOBAL_ITEM_TAG_USAGE_PAGE   0x4

◆ HID_ITEM_TYPE_GLOBAL

#define HID_ITEM_TYPE_GLOBAL   1

◆ HID_ITEM_TYPE_LOCAL

#define HID_ITEM_TYPE_LOCAL   2

◆ HID_ITEM_TYPE_MAIN

#define HID_ITEM_TYPE_MAIN   0

◆ HID_ITEM_TYPE_RESERVED

#define HID_ITEM_TYPE_RESERVED   3

◆ HID_LOCAL_ITEM_TAG_DELIMITER

#define HID_LOCAL_ITEM_TAG_DELIMITER   0xA8

◆ HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX

#define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX   0x38

◆ HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM

#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM   0x58

◆ HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM

#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM   0x48

◆ HID_LOCAL_ITEM_TAG_STRING_INDEX

#define HID_LOCAL_ITEM_TAG_STRING_INDEX   0x78

◆ HID_LOCAL_ITEM_TAG_STRING_MAXIMUM

#define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM   0x98

◆ HID_LOCAL_ITEM_TAG_STRING_MINIMUM

#define HID_LOCAL_ITEM_TAG_STRING_MINIMUM   0x88

◆ HID_LOCAL_ITEM_TAG_USAGE

#define HID_LOCAL_ITEM_TAG_USAGE   0x8

◆ HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM

#define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM   0x28

◆ HID_LOCAL_ITEM_TAG_USAGE_MINIMUM

#define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM   0x18

◆ HID_MAIN_ITEM_TAG_COLLECTION

#define HID_MAIN_ITEM_TAG_COLLECTION   0xA0

◆ HID_MAIN_ITEM_TAG_END_COLLECTION

#define HID_MAIN_ITEM_TAG_END_COLLECTION   0xC0

◆ HID_MAIN_ITEM_TAG_FEATURE

#define HID_MAIN_ITEM_TAG_FEATURE   0xB0

◆ HID_MAIN_ITEM_TAG_INPUT

#define HID_MAIN_ITEM_TAG_INPUT   0x80

◆ HID_MAIN_ITEM_TAG_OUTPUT

#define HID_MAIN_ITEM_TAG_OUTPUT   0x90

◆ HID_USAGE_WHEEL

#define HID_USAGE_WHEEL   0x38

◆ HID_USAGE_X_AXIS

#define HID_USAGE_X_AXIS   0x30

◆ HID_USAGE_Y_AXIS

#define HID_USAGE_Y_AXIS   0x31

◆ HID_USAGE_Z_AXIS

#define HID_USAGE_Z_AXIS   0x32

◆ REPORT_ITEM_FEATURE

#define REPORT_ITEM_FEATURE   3

◆ REPORT_ITEM_INPUT

#define REPORT_ITEM_INPUT   1

◆ REPORT_ITEM_OUTPUT

#define REPORT_ITEM_OUTPUT   2

◆ REPORT_ITEM_USAGE_MOUSE

#define REPORT_ITEM_USAGE_MOUSE   1

Function Documentation

◆ AuUSBDriverMain()

AU_EXTERN AU_EXPORT int AuUSBDriverMain ( AuUSBDeviceStruc dev)

◆ AuUSBDriverUnload()

AU_EXTERN AU_EXPORT int AuUSBDriverUnload ( AuUSBDeviceStruc dev)

◆ GetReport()

void GetReport ( AuUSBDeviceStruc dev,
uint64_t  buffer,
uint16_t  report_bytes 
)

◆ HIDCallback()

void HIDCallback ( void *  dev,
void *  slot,
void *  endp 
)

◆ HIDParseReportDescriptor()

bool HIDParseReportDescriptor ( uint8_t report,
size_t  reportBytes 
)

◆ SetIDLE()

void SetIDLE ( AuUSBDeviceStruc dev)

◆ SetProtocol()

void SetProtocol ( AuUSBDeviceStruc dev)

◆ usb_pow()

int usb_pow ( int  a,
int  b 
)

Variable Documentation

◆ device

◆ endpoint

void* endpoint

◆ items

ReportItem items[32]

◆ mouse_data

uint64_t mouse_data

◆ reportItemLength

uintptr_t reportItemLength