spaces removal - USBDevice

pull/339/head
0xc0170 2014-05-29 15:32:05 +02:00
parent 081230ee9c
commit 07dff2db5e
24 changed files with 285 additions and 285 deletions

View File

@ -50,7 +50,7 @@
*
* int main() {
* int16_t buf[AUDIO_LENGTH_PACKET/2];
*
*
* while (1) {
* // read an audio packet
* audio.read((uint8_t *)buf);
@ -88,7 +88,7 @@ public:
* @returns volume
*/
float getVolume();
/**
* Read an audio packet. During a frame, only a single reading (you can't write and read an audio packet during the same frame)can be done using this method. Warning: Blocking
*
@ -97,7 +97,7 @@ public:
* @returns true if successfull
*/
bool read(uint8_t * buf);
/**
* Try to read an audio packet. During a frame, only a single reading (you can't write and read an audio packet during the same frame)can be done using this method. Warning: Non Blocking
*
@ -106,7 +106,7 @@ public:
* @returns true if successfull
*/
bool readNB(uint8_t * buf);
/**
* Write an audio packet. During a frame, only a single writing (you can't write and read an audio packet during the same frame)can be done using this method.
*
@ -114,7 +114,7 @@ public:
* @returns true if successful
*/
bool write(uint8_t * buf);
/**
* Write and read an audio packet at the same time (on the same frame)
*
@ -123,7 +123,7 @@ public:
* @returns true if successful
*/
bool readWrite(uint8_t * buf_read, uint8_t * buf_write);
/** attach a handler to update the volume
*
@ -212,12 +212,12 @@ protected:
* Callback called on each Start of Frame event
*/
virtual void SOF(int frameNumber);
/*
* Callback called when a packet is received
*/
virtual bool EP3_OUT_callback();
/*
* Callback called when a packet has been sent
*/
@ -227,13 +227,13 @@ private:
// stream available ?
volatile bool available;
// interrupt OUT has been received
volatile bool interruptOUT;
// interrupt IN has been received
volatile bool interruptIN;
// audio packet has been written
volatile bool writeIN;
@ -248,7 +248,7 @@ private:
// mono, stereo,...
uint8_t channel_nb_in;
uint8_t channel_nb_out;
// channel config: master, left, right
uint8_t channel_config_in;
uint8_t channel_config_out;
@ -270,16 +270,16 @@ private:
// Buffer containing one audio packet (to be read)
volatile uint8_t * buf_stream_in;
// Buffer containing one audio packet (to be written)
volatile uint8_t * buf_stream_out;
// callback to update volume
FunctionPointer updateVol;
// boolean showing that the SOF handler has been called. Useful for readNB.
volatile bool SOF_handler;
volatile float volume;
};

View File

@ -32,7 +32,7 @@
/*string offset*/
#define STRING_OFFSET_LANGID (0)
#define STRING_OFFSET_LANGID (0)
#define STRING_OFFSET_IMANUFACTURER (1)
#define STRING_OFFSET_IPRODUCT (2)
#define STRING_OFFSET_ISERIAL (3)

View File

@ -106,7 +106,7 @@ bool USBDevice::requestGetDescriptor(void)
transfer.ptr = stringImanufacturerDesc();
transfer.direction = DEVICE_TO_HOST;
success = true;
break;
break;
case STRING_OFFSET_IPRODUCT:
#ifdef DEBUG
printf("3\r\n");
@ -115,7 +115,7 @@ bool USBDevice::requestGetDescriptor(void)
transfer.ptr = stringIproductDesc();
transfer.direction = DEVICE_TO_HOST;
success = true;
break;
break;
case STRING_OFFSET_ISERIAL:
#ifdef DEBUG
printf("4\r\n");
@ -124,7 +124,7 @@ bool USBDevice::requestGetDescriptor(void)
transfer.ptr = stringIserialDesc();
transfer.direction = DEVICE_TO_HOST;
success = true;
break;
break;
case STRING_OFFSET_ICONFIGURATION:
#ifdef DEBUG
printf("5\r\n");
@ -133,7 +133,7 @@ bool USBDevice::requestGetDescriptor(void)
transfer.ptr = stringIConfigurationDesc();
transfer.direction = DEVICE_TO_HOST;
success = true;
break;
break;
case STRING_OFFSET_IINTERFACE:
#ifdef DEBUG
printf("6\r\n");
@ -142,7 +142,7 @@ bool USBDevice::requestGetDescriptor(void)
transfer.ptr = stringIinterfaceDesc();
transfer.direction = DEVICE_TO_HOST;
success = true;
break;
break;
}
break;
case INTERFACE_DESCRIPTOR:
@ -357,7 +357,7 @@ bool USBDevice::requestSetInterface(void)
{
success = true;
currentInterface = transfer.setup.wIndex;
currentAlternate = transfer.setup.wValue;
currentAlternate = transfer.setup.wValue;
}
return success;
}
@ -473,12 +473,12 @@ bool USBDevice::requestGetStatus(void)
if (success)
{
/* Send the status */
/* Send the status */
transfer.ptr = (uint8_t *)&status; /* Assumes little endian */
transfer.remaining = sizeof(status);
transfer.direction = DEVICE_TO_HOST;
}
return success;
}
@ -546,7 +546,7 @@ bool USBDevice::controlSetup(void)
transfer.direction = 0;
transfer.zlp = false;
transfer.notify = false;
#ifdef DEBUG
printf("dataTransferDirection: %d\r\nType: %d\r\nRecipient: %d\r\nbRequest: %d\r\nwValue: %d\r\nwIndex: %d\r\nwLength: %d\r\n",transfer.setup.bmRequestType.dataTransferDirection,
transfer.setup.bmRequestType.Type,
@ -593,7 +593,7 @@ bool USBDevice::controlSetup(void)
}
else
{
/* OUT data stage is required */
if (transfer.direction != HOST_TO_DEVICE)
{
@ -707,7 +707,7 @@ void USBDevice::connect(bool blocking)
{
/* Connect device */
USBHAL::connect();
if (blocking) {
/* Block if not configured */
while (!configured());
@ -793,8 +793,8 @@ void USBDevice::suspendStateChanged(unsigned int suspended)
USBDevice::USBDevice(uint16_t vendor_id, uint16_t product_id, uint16_t product_release){
VENDOR_ID = vendor_id;
PRODUCT_ID = product_id;
VENDOR_ID = vendor_id;
PRODUCT_ID = product_id;
PRODUCT_RELEASE = product_release;
/* Set initial device state */
@ -818,12 +818,12 @@ bool USBDevice::write(uint8_t endpoint, uint8_t * buffer, uint32_t size, uint32_
{
return false;
}
if(!configured()) {
return false;
}
/* Send report */
result = endpointWrite(endpoint, buffer, size);
@ -849,7 +849,7 @@ bool USBDevice::writeNB(uint8_t endpoint, uint8_t * buffer, uint32_t size, uint3
{
return false;
}
if(!configured()) {
return false;
}
@ -872,7 +872,7 @@ bool USBDevice::writeNB(uint8_t endpoint, uint8_t * buffer, uint32_t size, uint3
bool USBDevice::readEP(uint8_t endpoint, uint8_t * buffer, uint32_t * size, uint32_t maxSize)
{
EP_STATUS result;
if(!configured()) {
return false;
}
@ -889,13 +889,13 @@ bool USBDevice::readEP(uint8_t endpoint, uint8_t * buffer, uint32_t * size, uint
bool USBDevice::readEP_NB(uint8_t endpoint, uint8_t * buffer, uint32_t * size, uint32_t maxSize)
{
EP_STATUS result;
if(!configured()) {
return false;
}
result = endpointReadResult(endpoint, buffer, size);
return (result == EP_COMPLETED);
}

View File

@ -27,26 +27,26 @@ class USBDevice: public USBHAL
{
public:
USBDevice(uint16_t vendor_id, uint16_t product_id, uint16_t product_release);
/*
* Check if the device is configured
*
* @returns true if configured, false otherwise
*/
bool configured(void);
/*
* Connect a device
*
*
* @param blocking: block if not configured
*/
void connect(bool blocking = true);
/*
* Disconnect a device
*/
void disconnect(void);
/*
* Add an endpoint
*
@ -65,7 +65,7 @@ public:
* @return true if successful
*/
bool readStart(uint8_t endpoint, uint32_t maxSize);
/*
* Read a certain endpoint. Before calling this function, USBUSBDevice_readStart
* must be called.
@ -79,20 +79,20 @@ public:
* @returns true if successful
*/
bool readEP(uint8_t endpoint, uint8_t * buffer, uint32_t * size, uint32_t maxSize);
/*
* Read a certain endpoint.
*
* Warning: non blocking
*
* @param endpoint endpoint which will be read
* @param buffer buffer will be filled with the data received (if data are available)
* @param buffer buffer will be filled with the data received (if data are available)
* @param size the number of bytes read will be stored in *size
* @param maxSize the maximum length that can be read
* @returns true if successful
*/
bool readEP_NB(uint8_t endpoint, uint8_t * buffer, uint32_t * size, uint32_t maxSize);
/*
* Write a certain endpoint.
*
@ -104,8 +104,8 @@ public:
* @param maxSize the maximum length that can be written on this endpoint
*/
bool write(uint8_t endpoint, uint8_t * buffer, uint32_t size, uint32_t maxSize);
/*
* Write a certain endpoint.
*
@ -118,14 +118,14 @@ public:
*/
bool writeNB(uint8_t endpoint, uint8_t * buffer, uint32_t size, uint32_t maxSize);
/*
* Called by USBDevice layer on bus reset. Warning: Called in ISR context
*
* May be used to reset state
*/
virtual void USBCallback_busReset(void) {};
/*
* Called by USBDevice on Endpoint0 request. Warning: Called in ISR context
* This is used to handle extensions to standard requests
@ -133,8 +133,8 @@ public:
*
* @returns true if class handles this request
*/
virtual bool USBCallback_request() { return false; };
virtual bool USBCallback_request() { return false; };
/*
* Called by USBDevice on Endpoint0 request completion
* if the 'notify' flag has been set to true. Warning: Called in ISR context
@ -146,7 +146,7 @@ public:
* @param length length of this buffer
*/
virtual void USBCallback_requestCompleted(uint8_t * buf, uint32_t length) {};
/*
* Called by USBDevice layer. Set configuration of the device.
* For instance, you can add all endpoints that you need on this function.
@ -154,7 +154,7 @@ public:
* @param configuration Number of the configuration
*/
virtual bool USBCallback_setConfiguration(uint8_t configuration) { return false; };
/*
* Called by USBDevice layer. Set interface/alternate of the device.
*
@ -170,63 +170,63 @@ public:
* @returns pointer to the device descriptor
*/
virtual uint8_t * deviceDesc();
/*
* Get configuration descriptor
*
* @returns pointer to the configuration descriptor
*/
virtual uint8_t * configurationDesc(){return NULL;};
/*
* Get string lang id descriptor
*
* @return pointer to the string lang id descriptor
*/
virtual uint8_t * stringLangidDesc();
/*
* Get string manufacturer descriptor
*
* @returns pointer to the string manufacturer descriptor
*/
virtual uint8_t * stringImanufacturerDesc();
/*
* Get string product descriptor
*
* @returns pointer to the string product descriptor
*/
virtual uint8_t * stringIproductDesc();
/*
* Get string serial descriptor
*
* @returns pointer to the string serial descriptor
*/
virtual uint8_t * stringIserialDesc();
/*
* Get string configuration descriptor
*
* @returns pointer to the string configuration descriptor
*/
virtual uint8_t * stringIConfigurationDesc();
/*
* Get string interface descriptor
*
* @returns pointer to the string interface descriptor
*/
virtual uint8_t * stringIinterfaceDesc();
/*
* Get the length of the report descriptor
*
* @returns length of the report descriptor
*/
virtual uint16_t reportDescLength() { return 0; };
protected:
@ -238,7 +238,7 @@ protected:
virtual void suspendStateChanged(unsigned int suspended);
uint8_t * findDescriptor(uint8_t descriptorType);
CONTROL_TRANSFER * getTransferPtr(void);
uint16_t VENDOR_ID;
uint16_t PRODUCT_ID;
uint16_t PRODUCT_RELEASE;
@ -262,7 +262,7 @@ private:
CONTROL_TRANSFER transfer;
USB_DEVICE device;
uint16_t currentInterface;
uint8_t currentAlternate;
};

View File

@ -23,38 +23,38 @@
/* Endpoint No. */
/* ---------------- */
#define EP0OUT (0)
#define EP0IN (1)
#define EP1OUT (2)
#define EP1IN (3)
#define EP2OUT (4)
#define EP2IN (5)
#define EP3OUT (6)
#define EP3IN (7)
#define EP4OUT (8)
#define EP4IN (9)
#define EP5OUT (10)
#define EP5IN (11)
#define EP6OUT (12)
#define EP6IN (13)
#define EP7OUT (14)
#define EP7IN (15)
#define EP8OUT (16)
#define EP8IN (17)
#define EP9OUT (18)
#define EP9IN (19)
#define EP10OUT (20)
#define EP10IN (21)
#define EP11OUT (22)
#define EP11IN (23)
#define EP12OUT (24)
#define EP12IN (25)
#define EP13OUT (26)
#define EP13IN (27)
#define EP14OUT (28)
#define EP14IN (29)
#define EP15OUT (30)
#define EP15IN (31)
#define EP0OUT (0)
#define EP0IN (1)
#define EP1OUT (2)
#define EP1IN (3)
#define EP2OUT (4)
#define EP2IN (5)
#define EP3OUT (6)
#define EP3IN (7)
#define EP4OUT (8)
#define EP4IN (9)
#define EP5OUT (10)
#define EP5IN (11)
#define EP6OUT (12)
#define EP6IN (13)
#define EP7OUT (14)
#define EP7IN (15)
#define EP8OUT (16)
#define EP8IN (17)
#define EP9OUT (18)
#define EP9IN (19)
#define EP10OUT (20)
#define EP10IN (21)
#define EP11OUT (22)
#define EP11IN (23)
#define EP12OUT (24)
#define EP12IN (25)
#define EP13OUT (26)
#define EP13IN (27)
#define EP14OUT (28)
#define EP14IN (29)
#define EP15OUT (30)
#define EP15IN (31)
/* Maximum Packet sizes */

View File

@ -58,7 +58,7 @@ public:
bool realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t options);
bool getEndpointStallState(unsigned char endpoint);
uint32_t endpointReadcore(uint8_t endpoint, uint8_t *buffer);
protected:
virtual void busReset(void){};
virtual void EP0setupCallback(void){};
@ -67,7 +67,7 @@ protected:
virtual void connectStateChanged(unsigned int connected){};
virtual void suspendStateChanged(unsigned int suspended){};
virtual void SOF(int frameNumber){};
virtual bool EP1_OUT_callback(){return false;};
virtual bool EP1_IN_callback(){return false;};
virtual bool EP2_OUT_callback(){return false;};
@ -102,7 +102,7 @@ protected:
virtual bool EP15_IN_callback(){return false;};
#endif
#endif
private:
void usbisr(void);
static void _usbisr(void);
@ -116,6 +116,6 @@ private:
bool (USBHAL::*epCallback[32 - 2])(void);
#endif
};
#endif

View File

@ -134,7 +134,7 @@ void USBMemCopy(uint8_t *dst, uint8_t *src, uint32_t size) {
USBHAL::USBHAL(void) {
NVIC_DisableIRQ(USB_IRQ);
// fill in callback array
epCallback[0] = &USBHAL::EP1_OUT_callback;
epCallback[1] = &USBHAL::EP1_IN_callback;
@ -149,7 +149,7 @@ USBHAL::USBHAL(void) {
// USB_VBUS input with pull-down
LPC_IOCON->PIO0_3 = 0x00000009;
#endif
// nUSB_CONNECT output
LPC_IOCON->PIO0_6 = 0x00000001;
@ -287,13 +287,13 @@ EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
bf = 0;
}
}
// if isochronous endpoint, T = 1
if(endpointState[endpoint].options & ISOCHRONOUS)
{
flags |= CMDSTS_T;
}
//Active the endpoint for reading
ep[PHY_TO_LOG(endpoint)].out[bf] = CMDSTS_A | CMDSTS_NBYTES(maximumSize) \
| CMDSTS_ADDRESS_OFFSET((uint32_t)ct->out) | flags;
@ -408,7 +408,7 @@ EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size)
EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
uint32_t bf;
// Validate parameters
if (endpoint > LAST_PHYSICAL_ENDPOINT) {
return EP_INVALID;
@ -680,7 +680,7 @@ void USBHAL::usbisr(void) {
// EP0IN ACK event (IN data sent)
EP0in();
}
for (uint8_t num = 2; num < 5*2; num++) {
if (LPC_USB->INTSTAT & EP(num)) {
LPC_USB->INTSTAT = EP(num);

View File

@ -279,7 +279,7 @@ uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
SIEselectEndpoint(endpoint);
SIEclearBuffer();
}
return size;
}
@ -327,7 +327,7 @@ static void endpointWritecore(uint8_t endpoint, uint8_t *buffer, uint32_t size)
USBHAL::USBHAL(void) {
// Disable IRQ
NVIC_DisableIRQ(USB_IRQn);
// fill in callback array
epCallback[0] = &USBHAL::EP1_OUT_callback;
epCallback[1] = &USBHAL::EP1_IN_callback;
@ -466,7 +466,7 @@ EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_
if (!(epComplete & EP(endpoint)))
return EP_PENDING;
}
*bytesRead = endpointReadcore(endpoint, buffer);
epComplete &= ~EP(endpoint);
return EP_COMPLETED;
@ -606,7 +606,7 @@ void USBHAL::usbisr(void) {
LPC_USB->USBDevIntClr = EP_SLOW;
EP0in();
}
for (uint8_t num = 2; num < 16*2; num++) {
if (LPC_USB->USBEpIntSt & EP(num)) {
selectEndpointClearInterrupt(num);

View File

@ -280,7 +280,7 @@ uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
SIEselectEndpoint(endpoint);
SIEclearBuffer();
}
return size;
}
@ -328,7 +328,7 @@ static void endpointWritecore(uint8_t endpoint, uint8_t *buffer, uint32_t size)
USBHAL::USBHAL(void) {
// Disable IRQ
NVIC_DisableIRQ(USB_IRQn);
// fill in callback array
epCallback[0] = &USBHAL::EP1_OUT_callback;
epCallback[1] = &USBHAL::EP1_IN_callback;
@ -367,7 +367,7 @@ USBHAL::USBHAL(void) {
// Enable USB clocks
LPC_USB->USBClkCtrl |= DEV_CLK_EN | AHB_CLK_EN | PORT_CLK_EN;
while ((LPC_USB->USBClkSt & (DEV_CLK_EN | AHB_CLK_EN | PORT_CLK_EN)) != (DEV_CLK_ON | AHB_CLK_ON | PORT_CLK_EN));
// Select port USB2
LPC_USB->StCtrl |= 3;
@ -375,13 +375,13 @@ USBHAL::USBHAL(void) {
// Configure pin P0.31 to be USB2
LPC_IOCON->P0_31 &= ~0x07;
LPC_IOCON->P0_31 |= 0x01;
// Disconnect USB device
SIEdisconnect();
// Configure pin P0.14 to be Connect
LPC_IOCON->P0_14 &= ~0x07;
LPC_IOCON->P0_14 |= 0x03;
LPC_IOCON->P0_14 |= 0x03;
// Connect must be low for at least 2.5uS
wait(0.3);
@ -471,7 +471,7 @@ EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_
if (!(epComplete & EP(endpoint)))
return EP_PENDING;
}
*bytesRead = endpointReadcore(endpoint, buffer);
epComplete &= ~EP(endpoint);
return EP_COMPLETED;
@ -611,7 +611,7 @@ void USBHAL::usbisr(void) {
LPC_USB->DevIntClr = EP_SLOW;
EP0in();
}
for (uint8_t num = 2; num < 16*2; num++) {
if (LPC_USB->EpIntSt & EP(num)) {
selectEndpointClearInterrupt(num);

View File

@ -36,7 +36,7 @@ uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
return 0;
}
USBHAL::USBHAL(void) {
USBHAL::USBHAL(void) {
NVIC_DisableIRQ(OTG_FS_IRQn);
epCallback[0] = &USBHAL::EP1_OUT_callback;
epCallback[1] = &USBHAL::EP1_IN_callback;
@ -63,7 +63,7 @@ USBHAL::USBHAL(void) {
pin_mode(PA_9, OpenDrain);
RCC->AHB2ENR |= RCC_AHB2ENR_OTGFSEN;
// Enable interrupts
OTG_FS->GREGS.GAHBCFG |= (1 << 0);
@ -116,21 +116,21 @@ bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket,
uint32_t type;
switch (endpoint) {
case EP0IN:
case EP0IN:
case EP0OUT:
type = 0;
break;
break;
case EPISO_IN:
case EPISO_OUT:
type = 1;
type = 1;
case EPBULK_IN:
case EPBULK_OUT:
type = 2;
break;
type = 2;
break;
case EPINT_IN:
case EPINT_OUT:
type = 3;
break;
type = 3;
break;
}
// Generic in or out EP controls
@ -154,7 +154,7 @@ bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket,
if (endpoint != EP0IN) {
control |= (1 << 28); // SD0PID
}
control |= (epIndex << 22) | // TxFIFO index
(1 << 27); // SNAK
OTG_FS->INEP_REGS[epIndex].DIEPCTL = control;
@ -166,7 +166,7 @@ bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket,
// Set the out EP specific control settings
control |= (1 << 26); // CNAK
OTG_FS->OUTEP_REGS[epIndex].DOEPCTL = control;
// Unmask the interrupt
OTG_FS->DREGS.DAINTMSK |= (1 << (epIndex + 16));
}
@ -190,7 +190,7 @@ uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
for (uint32_t i = 0; i < length; i += 4) {
buffer32[i >> 2] = OTG_FS->FIFO[0][0];
}
rxFifoCount = 0;
return length;
}
@ -266,7 +266,7 @@ EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
return EP_COMPLETED;
}
return EP_PENDING;
return EP_PENDING;
}
void USBHAL::stallEndpoint(uint8_t endpoint) {
@ -282,7 +282,7 @@ void USBHAL::stallEndpoint(uint8_t endpoint) {
}
void USBHAL::unstallEndpoint(uint8_t endpoint) {
}
bool USBHAL::getEndpointStallState(uint8_t endpoint) {

View File

@ -16,8 +16,8 @@
*
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
@ -70,7 +70,7 @@ typedef struct // 800h
}
USB_OTG_DREGS;
typedef struct
typedef struct
{
__IO uint32_t DIEPCTL; /* dev IN Endpoint Control Reg 900h + (ep_num * 20h) + 00h*/
uint32_t Reserved04; /* Reserved 900h + (ep_num * 20h) + 04h*/
@ -83,7 +83,7 @@ typedef struct
}
USB_OTG_INEPREGS;
typedef struct
typedef struct
{
__IO uint32_t DOEPCTL; /* dev OUT Endpoint Control Reg B00h + (ep_num * 20h) + 00h*/
uint32_t Reserved04; /* Reserved B00h + (ep_num * 20h) + 04h*/
@ -117,7 +117,7 @@ typedef struct
}
USB_OTG_HC_REGS;
typedef struct
typedef struct
{
USB_OTG_GREGS GREGS;
uint32_t RESERVED0[188];

View File

@ -121,7 +121,7 @@ bool USBHID::USBCallback_request() {
success = true;
}
break;
default:
break;
}

View File

@ -70,8 +70,8 @@ public:
* @returns true if successful
*/
bool send(HID_REPORT *report);
/**
* Send a Report. warning: non blocking
*
@ -79,7 +79,7 @@ public:
* @returns true if successful
*/
bool sendNB(HID_REPORT *report);
/**
* Read a report: blocking
*
@ -87,7 +87,7 @@ public:
* @returns true if successful
*/
bool read(HID_REPORT * report);
/**
* Read a report: non blocking
*
@ -98,7 +98,7 @@ public:
protected:
uint16_t reportLength;
/*
* Get the Report descriptor
*
@ -119,14 +119,14 @@ protected:
* @returns pointer to the string product descriptor
*/
virtual uint8_t * stringIproductDesc();
/*
* Get string interface descriptor
*
* @returns pointer to the string interface descriptor
*/
virtual uint8_t * stringIinterfaceDesc();
/*
* Get configuration descriptor
*

View File

@ -183,7 +183,7 @@ const KEYMAP keymap[KEYMAP_SIZE] = {
{0x4a, 0}, /* HOME */
{0x4b, 0}, /* PAGE_UP */
{0x4e, 0}, /* PAGE_DOWN */
{0x4f, 0}, /* RIGHT_ARROW */
{0x50, 0}, /* LEFT_ARROW */
{0x51, 0}, /* DOWN_ARROW */
@ -344,7 +344,7 @@ const KEYMAP keymap[KEYMAP_SIZE] = {
{0x4a, 0}, /* HOME */
{0x4b, 0}, /* PAGE_UP */
{0x4e, 0}, /* PAGE_DOWN */
{0x4f, 0}, /* RIGHT_ARROW */
{0x50, 0}, /* LEFT_ARROW */
{0x51, 0}, /* DOWN_ARROW */
@ -424,10 +424,10 @@ bool USBKeyboard::EP1_OUT_callback() {
uint32_t bytesRead = 0;
uint8_t led[65];
USBDevice::readEP(EPINT_OUT, led, &bytesRead, MAX_HID_REPORT_SIZE);
// we take led[1] because led[0] is the report ID
lock_status = led[1] & 0x07;
// We activate the endpoint to be able to recceive data
if (!readStart(EPINT_OUT, MAX_HID_REPORT_SIZE))
return false;

View File

@ -53,7 +53,7 @@ enum FUNCTION_KEY {
KEY_F10, /* F10 key */
KEY_F11, /* F11 key */
KEY_F12, /* F12 key */
KEY_PRINT_SCREEN, /* Print Screen key */
KEY_SCROLL_LOCK, /* Scroll lock */
KEY_CAPS_LOCK, /* caps lock */
@ -62,7 +62,7 @@ enum FUNCTION_KEY {
KEY_HOME, /* Home key */
KEY_PAGE_UP, /* Page Up key */
KEY_PAGE_DOWN, /* Page Down key */
RIGHT_ARROW, /* Right arrow */
LEFT_ARROW, /* Left arrow */
DOWN_ARROW, /* Down arrow */

View File

@ -35,7 +35,7 @@ enum MOUSE_BUTTON
/* X and Y limits */
/* These values do not directly map to screen pixels */
/* Zero may be interpreted as meaning 'no movement' */
#define X_MIN_ABS (1) /*!< Minimum value on x-axis */
#define X_MIN_ABS (1) /*!< Minimum value on x-axis */
#define Y_MIN_ABS (1) /*!< Minimum value on y-axis */
#define X_MAX_ABS (0x7fff) /*!< Maximum value on x-axis */
#define Y_MAX_ABS (0x7fff) /*!< Maximum value on y-axis */
@ -85,7 +85,7 @@ enum MOUSE_TYPE
* uint16_t y_center = (Y_MAX_ABS - Y_MIN_ABS)/2;
* uint16_t x_screen = 0;
* uint16_t y_screen = 0;
*
*
* uint32_t x_origin = x_center;
* uint32_t y_origin = y_center;
* uint32_t radius = 5000;
@ -95,7 +95,7 @@ enum MOUSE_TYPE
* {
* x_screen = x_origin + cos((double)angle*3.14/180.0)*radius;
* y_screen = y_origin + sin((double)angle*3.14/180.0)*radius;
*
*
* mouse.move(x_screen, y_screen);
* angle += 3;
* wait(0.01);
@ -107,7 +107,7 @@ enum MOUSE_TYPE
class USBMouse: public USBHID
{
public:
/**
* Constructor
*
@ -117,14 +117,14 @@ class USBMouse: public USBHID
* @param product_release Your preoduct_release (default: 0x0001)
*
*/
USBMouse(MOUSE_TYPE mouse_type = REL_MOUSE, uint16_t vendor_id = 0x1234, uint16_t product_id = 0x0001, uint16_t product_release = 0x0001):
USBMouse(MOUSE_TYPE mouse_type = REL_MOUSE, uint16_t vendor_id = 0x1234, uint16_t product_id = 0x0001, uint16_t product_release = 0x0001):
USBHID(0, 0, vendor_id, product_id, product_release, false)
{
{
button = 0;
this->mouse_type = mouse_type;
connect();
};
/**
* Write a state of the mouse
*
@ -135,8 +135,8 @@ class USBMouse: public USBHID
* @returns true if there is no error, false otherwise
*/
bool update(int16_t x, int16_t y, uint8_t buttons, int8_t z);
/**
* Move the cursor to (x, y)
*
@ -145,7 +145,7 @@ class USBMouse: public USBHID
* @returns true if there is no error, false otherwise
*/
bool move(int16_t x, int16_t y);
/**
* Press one or several buttons
*
@ -153,7 +153,7 @@ class USBMouse: public USBHID
* @returns true if there is no error, false otherwise
*/
bool press(uint8_t button);
/**
* Release one or several buttons
*
@ -161,22 +161,22 @@ class USBMouse: public USBHID
* @returns true if there is no error, false otherwise
*/
bool release(uint8_t button);
/**
* Double click (MOUSE_LEFT)
*
* @returns true if there is no error, false otherwise
*/
bool doubleClick();
/**
* Click
*
* @param button state of the buttons ( ex: clic(MOUSE_LEFT))
* @returns true if there is no error, false otherwise
*/
bool click(uint8_t button);
bool click(uint8_t button);
/**
* Scrolling
*
@ -184,7 +184,7 @@ class USBMouse: public USBHID
* @returns true if there is no error, false otherwise
*/
bool scroll(int8_t z);
/*
* To define the report descriptor. Warning: this method has to store the length of the report descriptor in reportLength.
*
@ -199,7 +199,7 @@ class USBMouse: public USBHID
* @returns pointer to the configuration descriptor
*/
virtual uint8_t * configurationDesc();
private:
MOUSE_TYPE mouse_type;
uint8_t button;

View File

@ -178,7 +178,7 @@ const KEYMAP keymap[KEYMAP_SIZE] = {
{0x4a, 0}, /* HOME */
{0x4b, 0}, /* PAGE_UP */
{0x4e, 0}, /* PAGE_DOWN */
{0x4f, 0}, /* RIGHT_ARROW */
{0x50, 0}, /* LEFT_ARROW */
{0x51, 0}, /* DOWN_ARROW */
@ -339,7 +339,7 @@ const KEYMAP keymap[KEYMAP_SIZE] = {
{0x4a, 0}, /* HOME */
{0x4b, 0}, /* PAGE_UP */
{0x4e, 0}, /* PAGE_DOWN */
{0x4f, 0}, /* RIGHT_ARROW */
{0x50, 0}, /* LEFT_ARROW */
{0x51, 0}, /* DOWN_ARROW */
@ -552,10 +552,10 @@ bool USBMouseKeyboard::EP1_OUT_callback() {
uint32_t bytesRead = 0;
uint8_t led[65];
USBDevice::readEP(EPINT_OUT, led, &bytesRead, MAX_HID_REPORT_SIZE);
// we take led[1] because led[0] is the report ID
lock_status = led[1] & 0x07;
// We activate the endpoint to be able to recceive data
if (!readStart(EPINT_OUT, MAX_HID_REPORT_SIZE))
return false;
@ -696,7 +696,7 @@ bool USBMouseKeyboard::mediaControl(MEDIA_KEY key) {
report.length = 2;
send(&report);
report.data[0] = REPORT_ID_VOLUME;
report.data[1] = 0;

View File

@ -28,7 +28,7 @@
#include "Stream.h"
#include "USBHID.h"
/**
/**
* USBMouseKeyboard example
* @code
*
@ -70,7 +70,7 @@
class USBMouseKeyboard: public USBHID, public Stream
{
public:
/**
* Constructor
*
@ -81,7 +81,7 @@ class USBMouseKeyboard: public USBHID, public Stream
* @param product_release Your preoduct_release (default: 0x0001)
*
*/
USBMouseKeyboard(MOUSE_TYPE mouse_type = REL_MOUSE, uint16_t vendor_id = 0x0021, uint16_t product_id = 0x0011, uint16_t product_release = 0x0001):
USBMouseKeyboard(MOUSE_TYPE mouse_type = REL_MOUSE, uint16_t vendor_id = 0x0021, uint16_t product_id = 0x0011, uint16_t product_release = 0x0001):
USBHID(0, 0, vendor_id, product_id, product_release, false)
{
lock_status = 0;
@ -89,7 +89,7 @@ class USBMouseKeyboard: public USBHID, public Stream
this->mouse_type = mouse_type;
connect();
};
/**
* Write a state of the mouse
*
@ -100,8 +100,8 @@ class USBMouseKeyboard: public USBHID, public Stream
* @returns true if there is no error, false otherwise
*/
bool update(int16_t x, int16_t y, uint8_t buttons, int8_t z);
/**
* Move the cursor to (x, y)
*
@ -110,7 +110,7 @@ class USBMouseKeyboard: public USBHID, public Stream
* @returns true if there is no error, false otherwise
*/
bool move(int16_t x, int16_t y);
/**
* Press one or several buttons
*
@ -118,7 +118,7 @@ class USBMouseKeyboard: public USBHID, public Stream
* @returns true if there is no error, false otherwise
*/
bool press(uint8_t button);
/**
* Release one or several buttons
*
@ -126,22 +126,22 @@ class USBMouseKeyboard: public USBHID, public Stream
* @returns true if there is no error, false otherwise
*/
bool release(uint8_t button);
/**
* Double click (MOUSE_LEFT)
*
* @returns true if there is no error, false otherwise
*/
bool doubleClick();
/**
* Click
*
* @param button state of the buttons ( ex: clic(MOUSE_LEFT))
* @returns true if there is no error, false otherwise
*/
bool click(uint8_t button);
bool click(uint8_t button);
/**
* Scrolling
*
@ -151,7 +151,7 @@ class USBMouseKeyboard: public USBHID, public Stream
bool scroll(int8_t z);
/**
* To send a character defined by a modifier(CTRL, SHIFT, ALT) and the key
* To send a character defined by a modifier(CTRL, SHIFT, ALT) and the key
*
* @code
* //To send CTRL + s (save)
@ -163,7 +163,7 @@ class USBMouseKeyboard: public USBHID, public Stream
* @returns true if there is no error, false otherwise
*/
bool keyCode(uint8_t key, uint8_t modifier = 0);
/**
* Send a character
*
@ -171,7 +171,7 @@ class USBMouseKeyboard: public USBHID, public Stream
* @returns true if there is no error, false otherwise
*/
virtual int _putc(int c);
/**
* Control media keys
*
@ -179,7 +179,7 @@ class USBMouseKeyboard: public USBHID, public Stream
* @returns true if there is no error, false otherwise
*/
bool mediaControl(MEDIA_KEY key);
/**
* Read status of lock keys. Useful to switch-on/off leds according to key pressed. Only the first three bits of the result is important:
* - First bit: NUM_LOCK
@ -189,30 +189,30 @@ class USBMouseKeyboard: public USBHID, public Stream
* @returns status of lock keys
*/
uint8_t lockStatus();
/*
* To define the report descriptor. Warning: this method has to store the length of the report descriptor in reportLength.
*
* @returns pointer to the report descriptor
*/
virtual uint8_t * reportDesc();
/*
* Called when a data is received on the OUT endpoint. Useful to switch on LED of LOCK keys
*
* @returns if handle by subclass, return true
*/
virtual bool EP1_OUT_callback();
private:
bool mouseWrite(int8_t x, int8_t y, uint8_t buttons, int8_t z);
MOUSE_TYPE mouse_type;
uint8_t button;
bool mouseSend(int8_t x, int8_t y, uint8_t buttons, int8_t z);
uint8_t lock_status;
//dummy otherwise it doesn't compile (we must define all methods of an abstract class)
virtual int _getc() { return -1;}
};

View File

@ -22,7 +22,7 @@
#include "mbed.h"
// MIDI Message Format
//
//
// [ msg(4) | channel(4) ] [ 0 | n(7) ] [ 0 | m(7) ]
//
// MIDI Data Messages (Channel Specific)
@ -43,15 +43,15 @@
class MIDIMessage {
public:
MIDIMessage() {}
MIDIMessage(uint8_t *buf) {
for (int i = 0; i < 4; i++)
data[i] = buf[i];
}
// create messages
/** Create a NoteOff message
/** Create a NoteOff message
* @param key Key ID
* @param velocity Key velocity (0-127, default = 127)
* @param channel Key channel (0-15, default 0)
@ -62,11 +62,11 @@ public:
msg.data[0] = CABLE_NUM | 0x08;
msg.data[1] = 0x80 | (channel & 0x0F);
msg.data[2] = key & 0x7F;
msg.data[3] = velocity & 0x7F;
msg.data[3] = velocity & 0x7F;
return msg;
}
/** Create a NoteOn message
/** Create a NoteOn message
* @param key Key ID
* @param velocity Key velocity (0-127, default = 127)
* @param channel Key channel (0-15, default 0)
@ -77,26 +77,26 @@ public:
msg.data[0] = CABLE_NUM | 0x09;
msg.data[1] = 0x90 | (channel & 0x0F);
msg.data[2] = key & 0x7F;
msg.data[3] = velocity & 0x7F;
msg.data[3] = velocity & 0x7F;
return msg;
}
/** Create a PolyPhonic Aftertouch message
/** Create a PolyPhonic Aftertouch message
* @param key Key ID
* @param pressure Aftertouch pressure (0-127)
* @param channel Key channel (0-15, default 0)
* @returns A MIDIMessage
*/
*/
static MIDIMessage PolyphonicAftertouch(int key, int pressure, int channel = 0) {
MIDIMessage msg;
msg.data[0] = CABLE_NUM | 0x0A;
msg.data[1] = 0xA0 | (channel & 0x0F);
msg.data[2] = key & 0x7F;
msg.data[3] = pressure & 0x7F;
msg.data[3] = pressure & 0x7F;
return msg;
}
/** Create a Control Change message
/** Create a Control Change message
* @param control Controller ID
* @param value Controller value (0-127)
* @param channel Controller channel (0-15, default 0)
@ -107,63 +107,63 @@ public:
msg.data[0] = CABLE_NUM | 0x0B;
msg.data[1] = 0xB0 | (channel & 0x0F);
msg.data[2] = control & 0x7F;
msg.data[3] = value & 0x7F;
msg.data[3] = value & 0x7F;
return msg;
}
/** Create a Program Change message
/** Create a Program Change message
* @param program Program ID
* @param channel Channel (0-15, default 0)
* @returns A MIDIMessage
*/
*/
static MIDIMessage ProgramChange(int program, int channel = 0) {
MIDIMessage msg;
msg.data[0] = CABLE_NUM | 0x0C;
msg.data[1] = 0xC0 | (channel & 0x0F);
msg.data[2] = program & 0x7F;
msg.data[3] = 0x00;
msg.data[3] = 0x00;
return msg;
}
/** Create a Channel Aftertouch message
* @param pressure Pressure
/** Create a Channel Aftertouch message
* @param pressure Pressure
* @param channel Key channel (0-15, default 0)
* @returns A MIDIMessage
*/
*/
static MIDIMessage ChannelAftertouch(int pressure, int channel = 0) {
MIDIMessage msg;
msg.data[0] = CABLE_NUM | 0x0D;
msg.data[1] = 0xD0 | (channel & 0x0F);
msg.data[2] = pressure & 0x7F;
msg.data[3] = 0x00;
msg.data[3] = 0x00;
return msg;
}
/** Create a Pitch Wheel message
/** Create a Pitch Wheel message
* @param pitch Pitch (-8192 - 8191, default = 0)
* @param channel Channel (0-15, default 0)
* @returns A MIDIMessage
*/
*/
static MIDIMessage PitchWheel(int pitch = 0, int channel = 0) {
MIDIMessage msg;
int p = pitch + 8192; // 0 - 16383, 8192 is center
msg.data[0] = CABLE_NUM | 0x0E;
msg.data[1] = 0xE0 | (channel & 0x0F);
msg.data[2] = p & 0x7F;
msg.data[3] = (p >> 7) & 0x7F;
msg.data[3] = (p >> 7) & 0x7F;
return msg;
}
/** Create an All Notes Off message
/** Create an All Notes Off message
* @param channel Channel (0-15, default 0)
* @returns A MIDIMessage
*/
*/
static MIDIMessage AllNotesOff(int channel = 0) {
return ControlChange(123, 0, channel);
}
// decode messages
/** MIDI Message Types */
enum MIDIMessageType {
ErrorType,
@ -176,16 +176,16 @@ public:
PitchWheelType,
AllNotesOffType
};
/** Read the message type
* @returns MIDIMessageType
*/
*/
MIDIMessageType type() {
switch((data[1] >> 4) & 0xF) {
case 0x8: return NoteOffType;
case 0x9: return NoteOnType;
case 0xA: return PolyphonicAftertouchType;
case 0xB:
case 0xB:
if(controller() < 120) { // standard controllers
return ControlChangeType;
} else if(controller() == 123) {
@ -200,51 +200,51 @@ public:
}
}
/** Read the channel number */
/** Read the channel number */
int channel() {
return (data[1] & 0x0F);
}
/** Read the key ID */
/** Read the key ID */
int key() {
return (data[2] & 0x7F);
}
/** Read the velocity */
int velocity() {
return (data[3] & 0x7F);
return (data[2] & 0x7F);
}
/** Read the controller value */
int value() {
return (data[3] & 0x7F);
/** Read the velocity */
int velocity() {
return (data[3] & 0x7F);
}
/** Read the aftertouch pressure */
/** Read the controller value */
int value() {
return (data[3] & 0x7F);
}
/** Read the aftertouch pressure */
int pressure() {
if(type() == PolyphonicAftertouchType) {
return (data[3] & 0x7F);
return (data[3] & 0x7F);
} else {
return (data[2] & 0x7F);
return (data[2] & 0x7F);
}
}
/** Read the controller number */
/** Read the controller number */
int controller() {
return (data[2] & 0x7F);
return (data[2] & 0x7F);
}
/** Read the program number */
/** Read the program number */
int program() {
return (data[2] & 0x7F);
return (data[2] & 0x7F);
}
/** Read the pitch value */
/** Read the pitch value */
int pitch() {
int p = ((data[3] & 0x7F) << 7) | (data[2] & 0x7F);
return p - 8192; // 0 - 16383, 8192 is center
}
uint8_t data[4];
};

View File

@ -29,7 +29,7 @@
#define DEFAULT_CONFIGURATION (1)
/**
/**
* USBMIDI example
*
* @code
@ -38,8 +38,8 @@
*
* USBMIDI midi;
*
* int main() {
* while (1) {
* int main() {
* while (1) {
* for(int i=48; i<83; i++) { // send some messages!
* midi.write(MIDIMessage::NoteOn(i));
* wait(0.25);
@ -61,12 +61,12 @@ public:
* @param product_release Your preoduct_release
*/
USBMIDI(uint16_t vendor_id = 0x0700, uint16_t product_id = 0x0101, uint16_t product_release = 0x0001);
/**
* Send a MIDIMessage
*
* @param m The MIDIMessage to send
*/
*/
void write(MIDIMessage m);
/**
@ -75,8 +75,8 @@ public:
* @param fptr function pointer
*/
void attach(void (*fptr)(MIDIMessage));
protected:
virtual bool EP2_OUT_callback();
virtual bool USBCallback_setConfiguration(uint8_t configuration);
@ -86,14 +86,14 @@ protected:
* @returns pointer to the string product descriptor
*/
virtual uint8_t * stringIproductDesc();
/*
* Get string interface descriptor
*
* @returns pointer to the string interface descriptor
*/
virtual uint8_t * stringIinterfaceDesc();
/*
* Get configuration descriptor
*

View File

@ -79,7 +79,7 @@ public:
* Disconnect the USB MSD device.
*/
void disconnect();
/**
* Destructor
*/

View File

@ -73,15 +73,15 @@ void USBCDC::USBCallback_requestCompleted(uint8_t *buf, uint32_t length) {
if (length != 7) {
return;
}
CONTROL_TRANSFER * transfer = getTransferPtr();
/* Process class-specific requests */
if (transfer->setup.bmRequestType.Type == CLASS_TYPE) {
if (transfer->setup.bRequest == CDC_SET_LINE_CODING) {
if (memcmp(cdc_line_coding, buf, 7)) {
memcpy(cdc_line_coding, buf, 7);
memcpy(cdc_line_coding, buf, 7);
int baud = buf[0] + (buf[1] << 8)
+ (buf[2] << 16) + (buf[3] << 24);
int stop = buf[4];
@ -186,7 +186,7 @@ uint8_t * USBCDC::configurationDesc() {
0, // iConfiguration
0x80, // bmAttributes
50, // bMaxPower
// IAD to associate the two CDC interfaces
0x08, // bLength
0x0b, // bDescriptorType

View File

@ -40,35 +40,35 @@ public:
USBCDC(uint16_t vendor_id, uint16_t product_id, uint16_t product_release, bool connect_blocking);
protected:
/*
* Get device descriptor. Warning: this method has to store the length of the report descriptor in reportLength.
*
* @returns pointer to the device descriptor
*/
virtual uint8_t * deviceDesc();
/*
* Get string product descriptor
*
* @returns pointer to the string product descriptor
*/
virtual uint8_t * stringIproductDesc();
/*
* Get string interface descriptor
*
* @returns pointer to the string interface descriptor
*/
virtual uint8_t * stringIinterfaceDesc();
/*
* Get configuration descriptor
*
* @returns pointer to the configuration descriptor
*/
virtual uint8_t * configurationDesc();
/*
* Send a buffer
*
@ -78,7 +78,7 @@ protected:
* @returns true if successful
*/
bool send(uint8_t * buffer, uint32_t size);
/*
* Read a buffer from a certain endpoint. Warning: blocking
*
@ -89,7 +89,7 @@ protected:
* @returns true if successful
*/
bool readEP(uint8_t * buffer, uint32_t * size);
/*
* Read a buffer from a certain endpoint. Warning: non blocking
*
@ -111,7 +111,7 @@ protected:
* @param stop The number of stop bits (1 or 2)
*/
virtual void lineCodingChanged(int baud, int bits, int parity, int stop) {};
protected:
virtual bool USBCallback_request();
virtual void USBCallback_requestCompleted(uint8_t *buf, uint32_t length);

View File

@ -68,20 +68,20 @@ public:
* @returns true if there is no error, false otherwise
*/
virtual int _putc(int c);
/**
* Read a character: blocking
*
* @returns character read
*/
virtual int _getc();
/**
* Check the number of bytes available.
*
* @returns the number of bytes available
*/
uint8_t available();
uint8_t available();
/** Determine if there is a character available to read
*
@ -90,7 +90,7 @@ public:
* 0 otherwise
*/
int readable() { return available() ? 1 : 0; }
/** Determine if there is space available to write a character
*
* @returns
@ -98,9 +98,9 @@ public:
* 0 otherwise
*/
int writeable() { return 1; } // always return 1, for write operation is blocking
/**
* Write a block of data.
* Write a block of data.
*
* For more efficiency, a block of size 64 (maximum size of a bulk endpoint) has to be written.
*
@ -112,7 +112,7 @@ public:
bool writeBlock(uint8_t * buf, uint16_t size);
/**
* Attach a member function to call when a packet is received.
* Attach a member function to call when a packet is received.
*
* @param tptr pointer to the object to call the member function on
* @param mptr pointer to the member function to be called