Switched row and col
[hackover2013-badge-firmware.git] / core / usbcdc / usbcore.h
1 /*----------------------------------------------------------------------------
2 * U S B - K e r n e l
3 *----------------------------------------------------------------------------
4 * Name: usbcore.h
5 * Purpose: USB Core Definitions
6 * Version: V1.20
7 *----------------------------------------------------------------------------
8 * This software is supplied "AS IS" without any warranties, express,
9 * implied or statutory, including but not limited to the implied
10 * warranties of fitness for purpose, satisfactory quality and
11 * noninfringement. Keil extends you a royalty-free right to reproduce
12 * and distribute executable files created using this software for use
13 * on NXP Semiconductors LPC microcontroller devices only. Nothing else
14 * gives you the right to use this software.
15 *
16 * Copyright (c) 2009 Keil - An ARM Company. All rights reserved.
17 *---------------------------------------------------------------------------*/
18
19 #ifndef __USBCORE_H__
20 #define __USBCORE_H__
21
22 #include "usbcfg.h"
23
24 /* USB Endpoint Data Structure */
25 typedef struct _USB_EP_DATA {
26 uint8_t *pData;
27 uint16_t Count;
28 } USB_EP_DATA;
29
30 /* USB Core Global Variables */
31 extern uint16_t USB_DeviceStatus;
32 extern uint8_t USB_DeviceAddress;
33 volatile extern uint8_t USB_Configuration;
34 extern uint32_t USB_EndPointMask;
35 extern uint32_t USB_EndPointHalt;
36 extern uint32_t USB_EndPointStall;
37 extern uint8_t USB_AltSetting[USB_IF_NUM];
38
39 /* USB Endpoint 0 Buffer */
40 extern uint8_t EP0Buf[USB_MAX_PACKET0];
41
42 /* USB Endpoint 0 Data Info */
43 extern USB_EP_DATA EP0Data;
44
45 /* USB Setup Packet */
46 extern USB_SETUP_PACKET SetupPacket;
47
48 /* USB Core Functions */
49 extern void USB_ResetCore (void);
50
51 /* Newer C compilers make it really difficult to add
52 * an integer to a pointer */
53 static inline void UsbAddPtr(void **vpptr, uint32_t n);
54
55 /*
56 * Add a number of bytes to a pointer's address
57 * Harder than you might think. Some compilers say:
58 * Expected an lvalue -- Assignment expects its first operand to be
59 * an lvalue. Please note that a cast removes the lvaluedness of an
60 * expression.
61 *
62 * vpptr = void pointer to pointer
63 * n = number of bytes to add to pointer
64 * Call looks like: AddPtr((void **)&myPointer, 8);
65 */
66 static inline void UsbAddPtr(void **vpptr, uint32_t n)
67 {
68 /* Declare a pointer to a pointer to a byte. Only a byte pointer
69 * can be incremented by a number of bytes. Other pointers will
70 * increment by a multiple of what they point to.
71 */
72 uint8_t **bpptr;
73
74 /* Convert our void pointer to a pointer to a byte pointer to a pointer */
75 bpptr = (uint8_t **)vpptr;
76
77 /* Add 'n' bytes to our pointer value */
78 (*bpptr) += n;
79 }
80
81
82 #endif /* __USBCORE_H__ */
This page took 0.059305 seconds and 5 git commands to generate.