Revision 270
Added by markw almost 11 years ago
firmware/common/integer.h | ||
---|---|---|
typedef unsigned char u08;
|
||
typedef unsigned char uint8_t;
|
||
|
||
typedef signed char int8_t;
|
||
|
||
/* These types MUST be 16 bit */
|
||
typedef short SHORT;
|
||
typedef unsigned short WORD;
|
||
typedef unsigned short WCHAR;
|
||
typedef unsigned short u16;
|
||
typedef unsigned short uint16_t;
|
||
|
||
typedef signed short int16_t;
|
||
|
||
/* These types MUST be 16 bit or 32 bit */
|
||
typedef int INT;
|
||
typedef unsigned int UINT;
|
||
... | ... | |
typedef long LONG;
|
||
typedef unsigned int DWORD;
|
||
typedef unsigned int u32;
|
||
typedef unsigned int uint32_t;
|
||
|
||
typedef uint8_t bool;
|
||
#define false (0)
|
||
#define NULL (0)
|
||
#define true (1)
|
||
|
||
#endif
|
||
|
||
#endif
|
firmware/usb/LICENSE | ||
---|---|---|
This part is GPL - in fact this whole firmware should be - just need to check a few things...
|
||
This part is GPL - in fact this whole firmware should be - just need to check a few things from other contributors...
|
firmware/usb/events.h | ||
---|---|---|
#include "printf.h"
|
||
|
||
void event_keyboard(uint8_t i, uint8_t buf[])
|
||
{
|
||
int j;
|
firmware/usb/hid.c | ||
---|---|---|
#include <stdio.h>
|
||
//#include <stdio.h>
|
||
|
||
#include "usb.h"
|
||
#include "timer.h"
|
||
... | ... | |
hid_set_protocol(dev, info->iface[i].iface_idx, HID_BOOT_PROTOCOL);
|
||
}
|
||
|
||
puts("HID configured");
|
||
iprintf("HID configured\n");
|
||
|
||
// update leds
|
||
for(i=0;i<MAX_IFACES;i++)
|
||
... | ... | |
static uint8_t usb_hid_release(usb_device_t *dev) {
|
||
usb_hid_info_t *info = &(dev->hid_info);
|
||
|
||
puts(__FUNCTION__);
|
||
iprintf("%s\n",__FUNCTION__);
|
||
|
||
uint8_t i;
|
||
// check if a joystick is released
|
firmware/usb/hid.h | ||
---|---|---|
#ifndef HID_H
|
||
#define HID_H
|
||
|
||
#include <stdbool.h>
|
||
#include <inttypes.h>
|
||
//#include <stdbool.h>
|
||
//#include <inttypes.h>
|
||
#include <common/integer.h>
|
||
#include "hidparser.h"
|
||
|
||
#define HID_LED_NUM_LOCK 0x01
|
firmware/usb/hidparser.c | ||
---|---|---|
// http://www.frank-zhao.com/cache/hid_tutorial_1.php
|
||
|
||
#include <inttypes.h>
|
||
#include <stdbool.h>
|
||
#include <stdio.h>
|
||
//#include <inttypes.h>
|
||
//#include <stdbool.h>
|
||
//#include <stdio.h>
|
||
|
||
#include "hidparser.h"
|
||
#include "debug.h"
|
||
... | ... | |
uint8_t setup_complete = 0;
|
||
|
||
// joystick/mouse components
|
||
int8_t axis[2] = { -1, -1};
|
||
int8_t axis[2]; // MWW = { -1, -1}; (this instantiates memcpy!)
|
||
axis[0] = -1;
|
||
axis[1] = -1;
|
||
uint8_t btns = 0;
|
||
|
||
conf->type = CONFIG_TYPE_NONE;
|
firmware/usb/hidparser.h | ||
---|---|---|
#ifndef HIDPARSER_H
|
||
#define HIDPARSER_H
|
||
|
||
#include <common/integer.h>
|
||
|
||
#define CONFIG_TYPE_NONE 0
|
||
#define CONFIG_TYPE_MOUSE 1
|
||
#define CONFIG_TYPE_KEYBOARD 2
|
firmware/usb/hub.c | ||
---|---|---|
#include <stdio.h>
|
||
//#include <stdio.h>
|
||
|
||
#include "usb.h"
|
||
#include "timer.h"
|
||
... | ... | |
|
||
rcode = usb_get_dev_descr( dev, 8, &buf.dev_desc );
|
||
if( rcode ) {
|
||
puts("failed to get device descriptor 1");
|
||
iprintf("failed to get device descriptor 1\n");
|
||
return rcode;
|
||
}
|
||
|
||
// Extract device class from device descriptor
|
||
// If device class is not a hub return
|
||
if (buf.dev_desc.bDeviceClass != USB_CLASS_HUB) {
|
||
puts("not a hub!");
|
||
iprintf("not a hub!\n");
|
||
return USB_DEV_CONFIG_ERROR_DEVICE_NOT_SUPPORTED;
|
||
}
|
||
|
||
// try to re-read full device descriptor from newly assigned address
|
||
if(rcode = usb_get_dev_descr( dev, sizeof(usb_device_descriptor_t), &buf.dev_desc )) {
|
||
puts("failed to get device descriptor 2");
|
||
iprintf("failed to get device descriptor 2\n");
|
||
return rcode;
|
||
}
|
||
|
||
... | ... | |
rcode = usb_hub_get_hub_descriptor(dev, 0, 8, &buf.hub_desc);
|
||
|
||
if (rcode) {
|
||
puts("failed to get hub descriptor");
|
||
iprintf("failed to get hub descriptor\n");
|
||
return rcode;
|
||
}
|
||
|
||
... | ... | |
// Read configuration Descriptor in Order To Obtain Proper Configuration Value
|
||
rcode = usb_get_conf_descr(dev, sizeof(usb_configuration_descriptor_t), 0, &buf.conf_desc);
|
||
if (rcode) {
|
||
puts("failed to read configuration descriptor");
|
||
iprintf("failed to read configuration descriptor\n");
|
||
return rcode;
|
||
}
|
||
|
||
... | ... | |
}
|
||
|
||
static uint8_t usb_hub_release(usb_device_t *dev) {
|
||
puts(__FUNCTION__);
|
||
iprintf("%s\n",__FUNCTION__);
|
||
|
||
// root hub unplugged
|
||
if(!dev->parent)
|
||
... | ... | |
static void usb_hub_show_port_status(uint8_t port, uint16_t status, uint16_t changed) {
|
||
iprintf("Status of port %d:\n", port);
|
||
|
||
if(status & USB_HUB_PORT_STATUS_PORT_CONNECTION) puts(" connected");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_ENABLE) puts(" enabled");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_SUSPEND) puts(" suspended");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_OVER_CURRENT) puts(" over current");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_RESET) puts(" reset");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_POWER) puts(" powered");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_LOW_SPEED) puts(" low speed");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_HIGH_SPEED) puts(" high speed");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_TEST) puts(" test");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_INDICATOR) puts(" indicator");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_CONNECTION) iprintf(" connected\n");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_ENABLE) iprintf(" enabled\n");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_SUSPEND) iprintf(" suspended\n");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_OVER_CURRENT) iprintf(" over current\n");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_RESET) iprintf(" reset\n");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_POWER) iprintf(" powered\n");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_LOW_SPEED) iprintf(" low speed\n");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_HIGH_SPEED) iprintf(" high speed\n");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_TEST) iprintf(" test\n");
|
||
if(status & USB_HUB_PORT_STATUS_PORT_INDICATOR) iprintf(" indicator\n");
|
||
|
||
iprintf("Changes on port %d:\n", port);
|
||
if(changed & USB_HUB_PORT_STATUS_PORT_CONNECTION) puts(" connected");
|
||
if(changed & USB_HUB_PORT_STATUS_PORT_ENABLE) puts(" enabled");
|
||
if(changed & USB_HUB_PORT_STATUS_PORT_SUSPEND) puts(" suspended");
|
||
if(changed & USB_HUB_PORT_STATUS_PORT_OVER_CURRENT) puts(" over current");
|
||
if(changed & USB_HUB_PORT_STATUS_PORT_RESET) puts(" reset");
|
||
if(changed & USB_HUB_PORT_STATUS_PORT_CONNECTION) iprintf(" connected\n");
|
||
if(changed & USB_HUB_PORT_STATUS_PORT_ENABLE) iprintf(" enabled\n");
|
||
if(changed & USB_HUB_PORT_STATUS_PORT_SUSPEND) iprintf(" suspended\n");
|
||
if(changed & USB_HUB_PORT_STATUS_PORT_OVER_CURRENT) iprintf(" over current\n");
|
||
if(changed & USB_HUB_PORT_STATUS_PORT_RESET) iprintf(" reset\n");
|
||
}
|
||
|
||
static uint8_t usb_hub_port_status_change(usb_device_t *dev, uint8_t port, hub_event_t evt) {
|
firmware/usb/hub.h | ||
---|---|---|
#ifndef HUB_H
|
||
#define HUB_H
|
||
|
||
#include <stdbool.h>
|
||
#include <inttypes.h>
|
||
//#include <stdbool.h>
|
||
//#include <inttypes.h>
|
||
#include <common/integer.h>
|
||
|
||
typedef struct {
|
||
uint8_t bNbrPorts; // number of ports
|
firmware/usb/timer.h | ||
---|---|---|
#ifndef TIMER_H
|
||
#define TIMER_H
|
||
|
||
#include <inttypes.h>
|
||
//#include <inttypes.h>
|
||
#include <common/integer.h>
|
||
typedef uint32_t msec_t;
|
||
|
||
void timer_init();
|
firmware/usb/usb.c | ||
---|---|---|
#include <stdio.h>
|
||
//#include <stdio.h>
|
||
|
||
#include "timer.h"
|
||
#include "usb.h"
|
||
... | ... | |
static usb_device_t dev[USB_NUMDEVICES];
|
||
|
||
void usb_reset_state() {
|
||
puts(__FUNCTION__);
|
||
iprintf("%s\n",__FUNCTION__);
|
||
bmHubPre = 0;
|
||
}
|
||
|
||
... | ... | |
}
|
||
|
||
void usb_init() {
|
||
puts(__FUNCTION__);
|
||
iprintf("%s\n",__FUNCTION__);
|
||
|
||
// MWW max3421e_init(); // init underlaying hardware layer
|
||
usbhostslave[OHS900_HOSTSLAVECTLREG] = OHS900_HSCTLREG_RESET_CORE;
|
||
... | ... | |
iprintf("Setting addr %x\n", i+1);
|
||
rcode = usb_set_addr(d, i+1);
|
||
if(rcode) {
|
||
puts("failed to assign address");
|
||
iprintf("failed to assign address\n");
|
||
return rcode;
|
||
}
|
||
|
||
... | ... | |
if (!rcode) {
|
||
d->class = class_list[c];
|
||
|
||
puts(" -> accepted :-)");
|
||
iprintf(" -> accepted :-)\n");
|
||
// ok, device accepted by class
|
||
|
||
return 0;
|
||
}
|
||
|
||
puts(" -> not accepted :-(");
|
||
iprintf(" -> not accepted :-(\n");
|
||
}
|
||
} else
|
||
iprintf("no more free entries\n");
|
firmware/usb/usb.h | ||
---|---|---|
#ifndef USB_H
|
||
#define USB_H
|
||
|
||
#include <inttypes.h>
|
||
#include <stdbool.h>
|
||
//#include <inttypes.h>
|
||
//#include <stdbool.h>
|
||
|
||
#include "common/integer.h"
|
||
|
||
/* NAK powers. To save space in endpoint data structure, amount of retries */
|
||
/* before giving up and returning 0x4 is stored in bmNakPower as a power of 2.*/
|
||
/* The actual nak_limit is then calculated as nak_limit = ( 2^bmNakPower - 1) */
|
Also available in: Unified diff
Fixes to make this build into ZPU firmware