aboutsummaryrefslogtreecommitdiffstats
path: root/libmaple/usb/usb_callbacks.h
blob: ed57fa1195e155202423d901bdc481ad78ee4eda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/* insert license */

#ifndef __USB_CALLBACKS
#define __USB_CALLBACKS

#include "libmaple.h"
#include "usb_lib.h"
#include "usb_config.h"

#define SET_LINE_CODING        0x20
#define GET_LINE_CODING        0x21
#define SET_COMM_FEATURE       0x02
#define SET_CONTROL_LINE_STATE 0x22
#define CONTROL_LINE_DTR       (0x01)
#define CONTROL_LINE_RTS       (0x02)

#if defined(__cplusplus)
extern "C" {
#endif

typedef struct {
  uint32 bitrate;
  uint8  format;
  uint8  paritytype;
  uint8  datatype;
} USB_Line_Coding;

typedef enum {
  START,
  NDTR_NRTS,
  DTR_NRTS,
  RESET_NEXT,
  RESET_NOW
} RESET_STATE;

extern RESET_STATE reset_state;  /* tracks DTR/RTS */
extern volatile uint8 countTx;
extern uint8 vcomBufferRx[VCOM_RX_EPSIZE];  /* no reason this has to be VCOM_RX_EPSIZE, could be bigger */
extern volatile uint8 recvBufIn;   /* the FIFO in index to the recvbuffer */
extern volatile uint8 recvBufOut;  /* the FIFO out index to the recvbuffer */
extern volatile uint8 maxNewBytes;

void vcomDataTxCb(void);
void vcomDataRxCb(void);
void vcomManagementCb(void);

uint8* vcomGetSetLineCoding(uint16 length);
void vcomSetLineSate(void);

void usbInit(void);
/* internal functions (as per the usb_core pProperty structure) */
void usbInit(void);
void usbReset(void);
void usbStatusIn(void);
void usbStatusOut(void);

RESULT usbDataSetup(uint8 request);
RESULT usbNoDataSetup(uint8 request);
RESULT usbGetInterfaceSetting(uint8,uint8);

uint8* usbGetDeviceDescriptor(uint16 length);
uint8* usbGetConfigDescriptor(uint16 length);
uint8* usbGetStringDescriptor(uint16 length);

/* internal callbacks to respond to standard requests */
void usbSetConfiguration(void);
void usbSetDeviceAddress(void);

#if defined(__cplusplus)
}
#endif


#endif