1 /*----------------------------------------------------------------------------
3 *----------------------------------------------------------------------------
5 * Purpose: USB Core Definitions
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.
16 * Copyright (c) 2009 Keil - An ARM Company. All rights reserved.
17 *---------------------------------------------------------------------------*/
24 /* USB Endpoint Data Structure */
25 typedef struct _USB_EP_DATA
{
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
];
39 /* USB Endpoint 0 Buffer */
40 extern uint8_t EP0Buf
[USB_MAX_PACKET0
];
42 /* USB Endpoint 0 Data Info */
43 extern USB_EP_DATA EP0Data
;
45 /* USB Setup Packet */
46 extern USB_SETUP_PACKET SetupPacket
;
48 /* USB Core Functions */
49 extern void USB_ResetCore (void);
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
);
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
62 * vpptr = void pointer to pointer
63 * n = number of bytes to add to pointer
64 * Call looks like: AddPtr((void **)&myPointer, 8);
66 static inline void UsbAddPtr(void **vpptr
, uint32_t n
)
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.
74 /* Convert our void pointer to a pointer to a byte pointer to a pointer */
75 bpptr
= (uint8_t **)vpptr
;
77 /* Add 'n' bytes to our pointer value */
82 #endif /* __USBCORE_H__ */