LINUX.ORG.RU

USB CDC, где почитать по-человечески?

 , ,


0

2

Товарищи, ну подскажите, пожалуйста, литературу по 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);
то получаю 6322==014262, т.е. B115200 там есть:
#define  B115200  0010002
однако, на тестовом терминале, подключенном к UART (туда откидываются диагностические сообщения), нет сообщения о вызове метода GET_LINE_CODING.

Вопросы:

  • что надо сделать, чтобы на USB CDC вызвать метод GET_LINE_CODING?
  • как определить именование устройства? Я хочу, чтобы оно было /dev/ttyUSBx, как у переходничков USB<->TTL, но оно определяется как /dev/ttyACMx — это делается на основе какой-то таблицы с VID/PID? Где взять эту таблицу?

P.S. Если кому интересно — это часть ircontroller (директория with_opencm3).

☆☆☆☆☆

Нашел здесь кое-что по поводу второго вопроса. Пишут, мол, ACM — более подходящая штука для USB. Однако, у меня тупо Rx/Tx — мне все эти flow control нафиг не нужны.

Хочу ttyUSBx!

Eddy_Em ☆☆☆☆☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.