parent
be93f1ae52
commit
79cffa030f
2 changed files with 43 additions and 48 deletions
|
@ -44,8 +44,10 @@ set_line_encoding(uint8_t *data, unsigned int length)
|
||||||
(const struct usb_cdc_line_coding *)usb_ctrl_data_buffer;
|
(const struct usb_cdc_line_coding *)usb_ctrl_data_buffer;
|
||||||
char parity = ((coding->bParityType > 4)
|
char parity = ((coding->bParityType > 4)
|
||||||
? '?' : parity_char[coding->bParityType]);
|
? '?' : parity_char[coding->bParityType]);
|
||||||
|
|
||||||
const char *stop_bits = ((coding->bCharFormat > 2)
|
const char *stop_bits = ((coding->bCharFormat > 2)
|
||||||
? "?" : stop_bits_str[coding->bCharFormat]);
|
? "?" : stop_bits_str[coding->bCharFormat]);
|
||||||
|
|
||||||
PRINTF("Got CDC line coding: %ld/%d/%c/%s\n",
|
PRINTF("Got CDC line coding: %ld/%d/%c/%s\n",
|
||||||
coding->dwDTERate, coding->bDataBits, parity, stop_bits);
|
coding->dwDTERate, coding->bDataBits, parity, stop_bits);
|
||||||
#endif
|
#endif
|
||||||
|
@ -60,11 +62,13 @@ set_line_encoding(uint8_t *data, unsigned int length)
|
||||||
static unsigned int
|
static unsigned int
|
||||||
handle_cdc_acm_requests()
|
handle_cdc_acm_requests()
|
||||||
{
|
{
|
||||||
PRINTF("CDC request %02x %02x\n", usb_setup_buffer.bmRequestType, usb_setup_buffer.bRequest);
|
PRINTF("CDC request %02x %02x\n", usb_setup_buffer.bmRequestType,
|
||||||
|
usb_setup_buffer.bRequest);
|
||||||
switch (usb_setup_buffer.bmRequestType) {
|
switch (usb_setup_buffer.bmRequestType) {
|
||||||
case 0x21: /* CDC interface OUT requests */
|
case 0x21: /* CDC interface OUT requests */
|
||||||
/* Check if it's the right interface */
|
/* Check if it's the right interface */
|
||||||
if (usb_setup_buffer.wIndex != 0) return 0;
|
if(usb_setup_buffer.wIndex != 0)
|
||||||
|
return 0;
|
||||||
switch (usb_setup_buffer.bRequest) {
|
switch (usb_setup_buffer.bRequest) {
|
||||||
case SET_CONTROL_LINE_STATE:
|
case SET_CONTROL_LINE_STATE:
|
||||||
line_state = usb_setup_buffer.wValue;
|
line_state = usb_setup_buffer.wValue;
|
||||||
|
@ -77,8 +81,7 @@ handle_cdc_acm_requests()
|
||||||
unsigned int len = usb_setup_buffer.wLength;
|
unsigned int len = usb_setup_buffer.wLength;
|
||||||
if(len > sizeof(usb_ctrl_data_buffer))
|
if(len > sizeof(usb_ctrl_data_buffer))
|
||||||
len = sizeof(usb_ctrl_data_buffer);
|
len = sizeof(usb_ctrl_data_buffer);
|
||||||
usb_get_ctrl_data(usb_ctrl_data_buffer, len,
|
usb_get_ctrl_data(usb_ctrl_data_buffer, len, encapsulated_command);
|
||||||
encapsulated_command);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -89,14 +92,14 @@ handle_cdc_acm_requests()
|
||||||
unsigned int len = usb_setup_buffer.wLength;
|
unsigned int len = usb_setup_buffer.wLength;
|
||||||
if(len > sizeof(usb_ctrl_data_buffer))
|
if(len > sizeof(usb_ctrl_data_buffer))
|
||||||
len = sizeof(usb_ctrl_data_buffer);
|
len = sizeof(usb_ctrl_data_buffer);
|
||||||
usb_get_ctrl_data(usb_ctrl_data_buffer, len,
|
usb_get_ctrl_data(usb_ctrl_data_buffer, len, set_line_encoding);
|
||||||
set_line_encoding);
|
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0xa1: /* CDC interface IN requests */
|
case 0xa1: /* CDC interface IN requests */
|
||||||
if (usb_setup_buffer.wIndex != 0) return 0;
|
if(usb_setup_buffer.wIndex != 0)
|
||||||
|
return 0;
|
||||||
switch (usb_setup_buffer.bRequest) {
|
switch (usb_setup_buffer.bRequest) {
|
||||||
case GET_ENCAPSULATED_RESPONSE:
|
case GET_ENCAPSULATED_RESPONSE:
|
||||||
PRINTF("CDC response");
|
PRINTF("CDC response");
|
||||||
|
@ -110,15 +113,13 @@ handle_cdc_acm_requests()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct USBRequestHandler cdc_acm_request_handler =
|
static const struct USBRequestHandler cdc_acm_request_handler = {
|
||||||
{
|
|
||||||
0x21, 0x7f,
|
0x21, 0x7f,
|
||||||
0x00, 0x00,
|
0x00, 0x00,
|
||||||
handle_cdc_acm_requests
|
handle_cdc_acm_requests
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct USBRequestHandlerHook cdc_acm_request_hook =
|
static struct USBRequestHandlerHook cdc_acm_request_hook = {
|
||||||
{
|
|
||||||
NULL,
|
NULL,
|
||||||
&cdc_acm_request_handler
|
&cdc_acm_request_handler
|
||||||
};
|
};
|
||||||
|
@ -154,4 +155,3 @@ usb_cdc_acm_set_event_process(struct process *p)
|
||||||
{
|
{
|
||||||
cdc_event_process = p;
|
cdc_event_process = p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,26 +4,21 @@
|
||||||
#include "cdc.h"
|
#include "cdc.h"
|
||||||
#include "contiki.h"
|
#include "contiki.h"
|
||||||
|
|
||||||
void
|
void usb_cdc_acm_setup();
|
||||||
usb_cdc_acm_setup();
|
|
||||||
|
|
||||||
|
|
||||||
#define USB_CDC_ACM_LINE_CODING 0x1
|
#define USB_CDC_ACM_LINE_CODING 0x1
|
||||||
#define USB_CDC_ACM_LINE_STATE 0x2
|
#define USB_CDC_ACM_LINE_STATE 0x2
|
||||||
uint8_t
|
uint8_t usb_cdc_acm_get_events(void);
|
||||||
usb_cdc_acm_get_events(void);
|
|
||||||
|
|
||||||
|
|
||||||
#define USB_CDC_ACM_DTE 0x1
|
#define USB_CDC_ACM_DTE 0x1
|
||||||
#define USB_CDC_ACM_RTS 0x2
|
#define USB_CDC_ACM_RTS 0x2
|
||||||
uint8_t
|
uint8_t usb_cdc_acm_get_line_state(void);
|
||||||
usb_cdc_acm_get_line_state(void);
|
|
||||||
|
|
||||||
|
|
||||||
const struct usb_cdc_line_coding *
|
const struct usb_cdc_line_coding *usb_cdc_acm_get_line_coding(void);
|
||||||
usb_cdc_acm_get_line_coding(void);
|
|
||||||
|
|
||||||
void
|
void usb_cdc_acm_set_event_process(struct process *p);
|
||||||
usb_cdc_acm_set_event_process(struct process *p);
|
|
||||||
|
|
||||||
#endif /* __CDC_ACM_H__UFV6K50827__ */
|
#endif /* __CDC_ACM_H__UFV6K50827__ */
|
||||||
|
|
Loading…
Add table
Reference in a new issue