Browse Source

Add some comments

main
PaulStoffregen 7 years ago
parent
commit
c2adf01769
1 changed files with 27 additions and 1 deletions
  1. +27
    -1
      hid.cpp

+ 27
- 1
hid.cpp View File

#include "USBHost_t36.h" // Read this header first for key info #include "USBHost_t36.h" // Read this header first for key info




// This HID driver claims a USB interface and parses its incoming
// data (reports). It doesn't actually use the data, but it allows
// drivers which inherit the USBHIDInput base class to claim the
// top level collections within the reports. Those drivers get
// callbacks with the arriving data full decoded to data/usage
// pairs.

void USBHIDParser::init() void USBHIDParser::init()
{ {
contribute_Pipes(mypipes, sizeof(mypipes)/sizeof(Pipe_t)); contribute_Pipes(mypipes, sizeof(mypipes)/sizeof(Pipe_t));
} }
} }


// When the device goes away, we need to call disconnect_collection()
// for all drivers which claimed a top level collection
void USBHIDParser::disconnect() void USBHIDParser::disconnect()
{ {
for (uint32_t i=0; i < TOPUSAGE_LIST_LEN; i++) { for (uint32_t i=0; i < TOPUSAGE_LIST_LEN; i++) {
} }
} }


// Called when the HID device sends a report
void USBHIDParser::in_data(const Transfer_t *transfer) void USBHIDParser::in_data(const Transfer_t *transfer)
{ {
print("HID: "); print("HID: ");
{ {
} }


// This no-inputs parse is meant to be used when we first get the
// HID report descriptor. It finds all the top level collections
// and allows drivers to claim them. This is always where we
// learn whether the reports will or will not use a Report ID byte.
void USBHIDParser::parse() void USBHIDParser::parse()
{ {
const uint8_t *p = descriptor; const uint8_t *p = descriptor;
} }
} }


// This is a list of all the drivers inherited from the USBHIDInput class.
// Unlike the list of USBDriver (managed in enumeration.cpp), drivers stay
// on this list even when they have claimed a top level collection.
USBHIDInput * USBHIDInput::list = NULL; USBHIDInput * USBHIDInput::list = NULL;


USBHIDInput::USBHIDInput() USBHIDInput::USBHIDInput()
} }
} }


// When a new top level collection is found, this function asks drivers
// if they wish to claim it. The driver taking ownership of the
// collection is returned, or NULL if no driver wants it.
USBHIDInput * USBHIDParser::find_driver(uint32_t topusage) USBHIDInput * USBHIDParser::find_driver(uint32_t topusage)
{ {
USBHIDInput *driver = USBHIDInput::list; USBHIDInput *driver = USBHIDInput::list;
return NULL; return NULL;
} }


// Extract 1 to 32 bits from the data array, starting at bitindex.
static uint32_t bitfield(const uint8_t *data, uint32_t bitindex, uint32_t numbits) static uint32_t bitfield(const uint8_t *data, uint32_t bitindex, uint32_t numbits)
{ {
uint32_t output = 0; uint32_t output = 0;
return output; return output;
} }


// convert a number with the specified number of bits from unsigned to signed,
// so the result is a proper 32 bit signed integer.
static int32_t signext(uint32_t num, uint32_t bitcount) static int32_t signext(uint32_t num, uint32_t bitcount)
{ {
if (bitcount < 32 && bitcount > 0 && (num & (1 << (bitcount-1)))) { if (bitcount < 32 && bitcount > 0 && (num & (1 << (bitcount-1)))) {
return (int32_t)num; return (int32_t)num;
} }


// convert a tag's value to a signed integer.
static int32_t signedval(uint32_t num, uint8_t tag) static int32_t signedval(uint32_t num, uint8_t tag)
{ {
tag &= 3; tag &= 3;
return (int32_t)num; return (int32_t)num;
} }



// parse the report descriptor and use it to feed the fields of the report
// to the drivers which have claimed its top level collections
void USBHIDParser::parse(uint16_t type_and_report_id, const uint8_t *data, uint32_t len) void USBHIDParser::parse(uint16_t type_and_report_id, const uint8_t *data, uint32_t len)
{ {
const uint8_t *p = descriptor; const uint8_t *p = descriptor;
case 0xA8: // Delimiter (local) case 0xA8: // Delimiter (local)
default: default:
println("Ruh Roh, unsupported tag, not a good thing Scoob ", tag, HEX); println("Ruh Roh, unsupported tag, not a good thing Scoob ", tag, HEX);
break;
} }
if (reset_local) { if (reset_local) {
usage_count = 0; usage_count = 0;

Loading…
Cancel
Save