#include "config.h"
Go to the source code of this file.
Definition in file usb_specific_request.h.
This function checks the specific request and if known then processes it
type | corresponding at bmRequestType (see USB specification) | |
request | corresponding at bRequest (see USB specification) |
FALSE, if the request is'nt know (STALL handshake is managed by the main standard request function).
Definition at line 90 of file usb_specific_request.c.
References cdc_get_line_coding(), cdc_send_break(), cdc_set_control_line_state(), cdc_set_line_coding(), FALSE, LSB, MSB, SETUP_CDC_GET_LINE_CODING, SETUP_CDC_SEND_BREAK, SETUP_CDC_SET_CONTROL_LINE_STATE, SETUP_CDC_SET_LINE_CODING, TRUE, Usb_read_byte, USB_SETUP_GET_CLASS_INTER, and USB_SETUP_SET_CLASS_INTER.
00091 { 00092 U16 wValue; 00093 00094 LSB(wValue) = Usb_read_byte(); 00095 MSB(wValue) = Usb_read_byte(); 00096 00097 //** Specific request from Class CDC 00098 if( USB_SETUP_SET_CLASS_INTER == type ) 00099 { 00100 switch( request ) 00101 { 00102 case SETUP_CDC_SET_LINE_CODING: 00103 cdc_set_line_coding(); 00104 return TRUE; 00105 break; 00106 00107 case SETUP_CDC_SET_CONTROL_LINE_STATE: 00108 cdc_set_control_line_state(wValue); // according cdc spec 1.1 chapter 6.2.14 00109 return TRUE; 00110 break; 00111 00112 case SETUP_CDC_SEND_BREAK: 00113 cdc_send_break(wValue); // wValue contains break lenght 00114 return TRUE; 00115 break; 00116 } 00117 } 00118 if( USB_SETUP_GET_CLASS_INTER == type ) 00119 { 00120 switch( request ) 00121 { 00122 case SETUP_CDC_GET_LINE_CODING: 00123 cdc_get_line_coding(); 00124 return TRUE; 00125 break; 00126 } 00127 } 00128 return FALSE; // No supported request 00129 }
void usb_user_endpoint_init | ( | U8 | conf_nb | ) |
This function configures the endpoints
conf_nb | configuration number choosed by USB host |
Definition at line 136 of file usb_specific_request.c.
References DIRECTION_IN, DIRECTION_OUT, INT_EP, NYET_ENABLED, ONE_BANK, RX_EP, SIZE_32, SIZE_64, TWO_BANKS, TX_EP, TYPE_BULK, TYPE_INTERRUPT, usb_configure_endpoint, and Usb_reset_endpoint.
00137 { 00138 usb_configure_endpoint(INT_EP, \ 00139 TYPE_INTERRUPT,\ 00140 DIRECTION_IN, \ 00141 SIZE_32, \ 00142 ONE_BANK, \ 00143 NYET_ENABLED); 00144 00145 usb_configure_endpoint(TX_EP, \ 00146 TYPE_BULK, \ 00147 DIRECTION_IN, \ 00148 SIZE_64, \ 00149 TWO_BANKS, \ 00150 NYET_ENABLED); 00151 00152 usb_configure_endpoint(RX_EP, \ 00153 TYPE_BULK, \ 00154 DIRECTION_OUT, \ 00155 SIZE_64, \ 00156 TWO_BANKS, \ 00157 NYET_ENABLED); 00158 00159 Usb_reset_endpoint(INT_EP); 00160 Usb_reset_endpoint(TX_EP); 00161 Usb_reset_endpoint(RX_EP); 00162 }
This function returns the interface alternate setting
wInterface | Interface selected |
Definition at line 171 of file usb_specific_request.c.
This function selects (and resets) the interface alternate setting
wInterface | Interface selected | |
alternate_setting | alternate setting selected |
Definition at line 182 of file usb_specific_request.c.
References INT_EP, INTERFACE0_NB, INTERFACE1_NB, RX_EP, TX_EP, Usb_disable_stall_handshake, Usb_reset_data_toggle, Usb_reset_endpoint, and Usb_select_endpoint.
00183 { 00184 // default setting selected = reset data toggle 00185 if( INTERFACE0_NB == wInterface ) 00186 { 00187 // Interface CDC ACM Com 00188 Usb_select_endpoint(INT_EP); 00189 Usb_disable_stall_handshake(); 00190 Usb_reset_endpoint(INT_EP); 00191 Usb_reset_data_toggle(); 00192 } 00193 if( INTERFACE1_NB == wInterface ) 00194 { 00195 // Interface CDC ACM Data 00196 Usb_select_endpoint(TX_EP); 00197 Usb_disable_stall_handshake(); 00198 Usb_reset_endpoint(TX_EP); 00199 Usb_reset_data_toggle(); 00200 Usb_select_endpoint(RX_EP); 00201 Usb_disable_stall_handshake(); 00202 Usb_reset_endpoint(RX_EP); 00203 Usb_reset_data_toggle(); 00204 } 00205 }
This function fills the global descriptor.
type | corresponding at MSB of wValue (see USB specification) | |
string | corresponding at LSB of wValue (see USB specification) |
Definition at line 215 of file usb_specific_request.c.
References S_usb_serial_number::bLength, S_usb_language_id::bLength, data_to_transfer, DESCRIPTOR_STRING, f_get_serial_string, FALSE, LANG_ID, pbuffer, SN_INDEX, SN_LENGTH, TRUE, usb_user_language_id, and usb_user_serial_number.
00216 { 00217 switch(type) 00218 { 00219 case DESCRIPTOR_STRING: 00220 switch (string) 00221 { 00222 case LANG_ID: 00223 data_to_transfer = sizeof (usb_user_language_id); 00224 pbuffer = &(usb_user_language_id.bLength); 00225 return TRUE; 00226 break; 00227 00228 #if (USB_DEVICE_SN_USE==ENABLE) 00229 case SN_INDEX: 00230 data_to_transfer = sizeof (usb_user_serial_number); 00231 pbuffer = &(usb_user_serial_number.bLength); 00232 #if (USE_DEVICE_SN_UNIQUE==ENABLE) 00233 f_get_serial_string=TRUE; 00234 data_to_transfer += (SN_LENGTH*4); 00235 #endif 00236 return TRUE; 00237 break; 00238 #endif 00239 } 00240 break; 00241 } 00242 return FALSE; 00243 }
void cdc_get_line_coding | ( | void | ) |
cdc_get_line_coding.
This function manages reception of line coding parameters (baudrate...).
none |
Definition at line 253 of file usb_specific_request.c.
References S_line_coding::bCharFormat, S_line_coding::bDataBits, S_line_coding::bParityType, S_line_coding::dwDTERate, Is_usb_read_control_enabled, Is_usb_receive_out, LSB0, LSB1, LSB2, LSB3, Usb_ack_receive_out, Usb_ack_receive_setup, Usb_send_control_in, and Usb_write_byte.
00254 { 00255 Usb_ack_receive_setup(); 00256 Usb_write_byte(LSB0(line_coding.dwDTERate)); 00257 Usb_write_byte(LSB1(line_coding.dwDTERate)); 00258 Usb_write_byte(LSB2(line_coding.dwDTERate)); 00259 Usb_write_byte(LSB3(line_coding.dwDTERate)); 00260 Usb_write_byte(line_coding.bCharFormat); 00261 Usb_write_byte(line_coding.bParityType); 00262 Usb_write_byte(line_coding.bDataBits); 00263 00264 Usb_send_control_in(); 00265 while(!(Is_usb_read_control_enabled())); 00266 //Usb_clear_tx_complete(); 00267 00268 while(!Is_usb_receive_out()); 00269 Usb_ack_receive_out(); 00270 }
void cdc_set_line_coding | ( | void | ) |
cdc_set_line_coding.
This function manages reception of line coding parameters (baudrate...).
none |
Definition at line 281 of file usb_specific_request.c.
References S_line_coding::bCharFormat, S_line_coding::bDataBits, S_line_coding::bParityType, S_line_coding::dwDTERate, Is_usb_read_control_enabled, Is_usb_receive_out, LSB0, LSB1, LSB2, LSB3, Uart_set_baudrate, Usb_ack_receive_out, Usb_ack_receive_setup, Usb_read_byte, and Usb_send_control_in.
00282 { 00283 Usb_ack_receive_setup(); 00284 while (!(Is_usb_receive_out())); 00285 LSB0(line_coding.dwDTERate) = Usb_read_byte(); 00286 LSB1(line_coding.dwDTERate) = Usb_read_byte(); 00287 LSB2(line_coding.dwDTERate) = Usb_read_byte(); 00288 LSB3(line_coding.dwDTERate) = Usb_read_byte(); 00289 line_coding.bCharFormat = Usb_read_byte(); 00290 line_coding.bParityType = Usb_read_byte(); 00291 line_coding.bDataBits = Usb_read_byte(); 00292 Usb_ack_receive_out(); 00293 00294 Usb_send_control_in(); // send a ZLP for STATUS phase 00295 while(!(Is_usb_read_control_enabled())); 00296 #ifdef UART_U2 00297 Uart_set_baudrate((line_coding.dwDTERate)/2); 00298 #else 00299 Uart_set_baudrate(line_coding.dwDTERate); 00300 #endif 00301 }
void cdc_set_control_line_state | ( | U16 | state | ) |
cdc_set_control_line_state.
This function manages the SET_CONTROL_LINE_LINE_STATE CDC request.
none |
Definition at line 314 of file usb_specific_request.c.
References S_line_status::all, Is_usb_read_control_enabled, Usb_ack_receive_setup, and Usb_send_control_in.
00315 { 00316 Usb_ack_receive_setup(); 00317 Usb_send_control_in(); 00318 line_status.all = state; 00319 00320 while(!(Is_usb_read_control_enabled())); 00321 00322 }
void cdc_send_break | ( | U16 | break_duration | ) |
This function manages the SEND_BREAK CDC request.
break | lenght |
Definition at line 372 of file usb_specific_request.c.
References Is_usb_read_control_enabled, TRUE, Usb_ack_receive_setup, usb_request_break_generation, and Usb_send_control_in.
00373 { 00374 Usb_ack_receive_setup(); 00375 Usb_send_control_in(); 00376 usb_request_break_generation=TRUE; 00377 while(!(Is_usb_read_control_enabled())); 00378 }
Bool cdc_update_serial_state | ( | ) |
cdc_update_serial_state.
This function checks if serial state has changed and updates host with that information.
none |
Definition at line 336 of file usb_specific_request.c.
References S_serial_state::all, FALSE, INT_EP, Is_usb_write_enabled, LSB, MSB, SETUP_CDC_BN_SERIAL_STATE, TRUE, Usb_ack_in_ready, Usb_select_endpoint, USB_SETUP_GET_CLASS_INTER, and Usb_write_byte.
00337 { 00338 if( serial_state_saved.all != serial_state.all) 00339 { 00340 serial_state_saved.all = serial_state.all; 00341 00342 Usb_select_endpoint(INT_EP); 00343 if (Is_usb_write_enabled()) 00344 { 00345 Usb_write_byte(USB_SETUP_GET_CLASS_INTER); // bmRequestType 00346 Usb_write_byte(SETUP_CDC_BN_SERIAL_STATE); // bNotification 00347 00348 Usb_write_byte(0x00); // wValue (zero) 00349 Usb_write_byte(0x00); 00350 00351 Usb_write_byte(0x00); // wIndex (Interface) 00352 Usb_write_byte(0x00); 00353 00354 Usb_write_byte(0x02); // wLength (data count = 2) 00355 Usb_write_byte(0x00); 00356 00357 Usb_write_byte(LSB(serial_state.all)); // data 0: LSB first of serial state 00358 Usb_write_byte(MSB(serial_state.all)); // data 1: MSB follows 00359 Usb_ack_in_ready(); 00360 } 00361 return TRUE; 00362 } 00363 return FALSE; 00364 }
Definition at line 69 of file usb_descriptors.c.
Definition at line 88 of file usb_descriptors.c.
Definition at line 154 of file usb_descriptors.c.
Definition at line 163 of file usb_descriptors.c.
Definition at line 172 of file usb_descriptors.c.
Definition at line 186 of file usb_descriptors.c.