00001
00015 #include "pic_utils.h"
00016
00017 typedef enum _usb_state_type
00018 {
00019 stPOWERED,
00020 stDEFAULT,
00021 stADDRESS,
00022 stCONFIGURED
00023 } usb_state_type;
00024
00025 extern usb_state_type usb_state;
00026 extern uns8 usb_address;
00027
00028 typedef struct _buffer_descriptor {
00029 uns8 stat,
00030 count;
00031 uns8 addr_l, addr_h;
00032 } buffer_descriptor;
00033
00034 typedef struct _setup_data_packet {
00035 uns8 bmRequestType,
00036 bRequest;
00037 uns16 wValue,
00038 wIndex,
00039 wLength;
00040 } setup_data_packet;
00041
00042
00043
00044
00045 #define DATA_STAGE_DIR 7 // 0= OUT or no data stage, 1= IN
00046
00047 #define REQUEST_TYPE1 6 // 00= USB standard request
00048 #define REQUEST_TYPE0 5 // 01= Request for a specific class
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061 #define UOWN 7 // 0 if uC owns buffer
00062 #define DTS 6 // 1 data 1 packet, 0 data 0 packet
00063 #define KEN 5 // 1 USB will keep buffer indefinately, 0 USB will hand back buffer
00064 #define INCDIS 4 // 1 Address increment disabled (for SPP), 0 address increment enabled
00065 #define DTSEN 3 // 1 data toggle sync on, 0 data toggle sync off
00066 #define BSTALL 2 // 1 buffer stall enabled, 0 buffer stall disabled
00067 #define BC9 1 // bit 9 of buffer count
00068 #define BC8 0 // bit 8 of buffer count
00069
00070
00071
00072
00073 #define PID3 5 // received token pid value of last transfer
00074 #define PID2 4
00075 #define PID1 3
00076 #define PID0 2
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095 #define pid_OUT 0b0001
00096 #define pid_IN 0b1001
00097 #define pid_SOF 0b0101
00098 #define pid_SETUP 0b1101
00099
00100
00101
00102 #define pid_DATA0 0b0011
00103 #define pid_DATA1 0b1011
00104 #define pid_DATA2 0b0111
00105 #define pid_MDATA 0b1111
00106
00107
00108
00109 #define pid_ACK 0b0010
00110 #define pid_NAK 0b1010
00111 #define pid_STALL 0b1110
00112 #define pid_NYET 0b0110
00113
00114
00115
00116
00117 #define req_Get_Status 0x00
00118 #define req_Clear_Feature 0x01
00119 #define req_Set_Feature 0x03
00120 #define req_Set_Address 0x05
00121 #define req_Get_Descriptor 0x06
00122 #define req_Set_Descriptor 0x07
00123 #define req_Get_Configuration 0x08
00124 #define req_Set_Configuration 0x09
00125 #define req_Get_Interface 0x0a
00126 #define req_Set_Interface 0x0b
00127 #define req_Synch_Frame 0x0c
00128
00129 typedef enum _delivery_mode_type {
00130 dm_IDLE,
00131 dm_SEND_DESCRIPTOR
00132 } delivery_mode_type;
00133
00134
00135 void usb_init();
00136 void usb_handle_isr();
00137 void usb_enable_module();
00138