Товарищи, ну подскажите, пожалуйста, литературу по USB CDC. Нет сил уже листать technical reference: никак не могу найти, как работать с вызовами SET_CONTROL_LINE_STATE
и GET_LINE_CODING
.
Насчет SET_CONTROL_LINE_STATE
понял лишь, что вызывается эта штука при обращении к устройству (handshake) и при отключении. Таким образом, я могу анализировать, работает ли в текущий момент какой-нибудь процесс с терминалом по USB, или нет.
SET_LINE_CODING
вызывается при подключении ioctl'ами — это понятно. Использую его для изменения скорости USART'а. Правда, какой-то косяк у меня: если сначала к USART'у подключиться, скорость получается совершенно не такой, как должна была бы быть (а вот когда подключаюсь по USB с заданными параметрами, то USART уже работает как надо).
GET_LINE_CODING
— как сделать этот вызов? Когда я из программы вызываю
if(ioctl(comfd,TCGETA,&oldtty) < 0) exit(-1); // Get settings
printf("old cflag: %d\n", oldtty.c_cflag);
#define B115200 0010002
GET_LINE_CODING
.Вопросы:
- что надо сделать, чтобы на USB CDC вызвать метод
GET_LINE_CODING
? - как определить именование устройства? Я хочу, чтобы оно было
/dev/ttyUSBx
, как у переходничков USB<->TTL, но оно определяется как/dev/ttyACMx
— это делается на основе какой-то таблицы с VID/PID? Где взять эту таблицу?
P.S. Если кому интересно — это часть ircontroller (директория with_opencm3).