Возвращаясь к теме ...
Задумал сделать "правильное" переключение порта в 485 режим и обратно через IOCTL ...
Смотрю на atmel_serial.c и пока не пойму, как это лучше сделать ...
1) там кроме этого файла есть еще =) главное решить где именно ты будешь делать инициализацию.
2) указать в регистре US_MR, что ты хочешь именно 485 режим (0x01)
3) разрешить ногу RTS на выход
а вообще, при работе с 485 трансивером ИМХО глупо разрешать юзверю переключать режим УАРТа. даже когда у меня на одном УАРТе висит два трансивера (232 и 485), то RST жёстко задан и дрыгается всегда при передаче.
1) Делать это надо в atmel_set_termios.
Проще всего использовать какой-нибуть неподдерживаемый атмеловским драйвером режим(флаг) из структуры termios, чтобы не править ничего другого кроме атмеловского драйвера. Подобрать по man stty - может быть неподдерживаемое количество бит или другой экзотический режим и на него повесить переключение.
2,3) согласен, меняется mode |= ATMEL_US_USMODE_RS485 и плюс gpio rts - надо даташит посмотреть в каком состоянии должен быть pin для этого режима.
Думаю полезно будет иметь такую возможность для экспериментов, хотя навскидку применимость тоже не вижу :)
Собственно, спрашивал на предмет, может кто уже усвоил механизм создания аргументов IOCTL ...
В итоге, подменил через 5-ти битный режим передачи.
Особо не принципиально, но режим 4-мя битами выбирается (в всяком случае, я решил все биты очищать) ...
Тогда Павел ты издалека начал :) Для примера есть статьи http://rus-linux.net/MyLDP/BOOKS/lkmpg-1/node18.htm http://www.linuxcenter.ru/lib/books/lkmpg.phtml#AEN674
Потом нужная информация лежит в доках ядра
linux-x.y.z/Documentation/ioctl
Я давно писал драйвер для adc, хотел использовать механизм ioctl для изменения его режимов, почитал вроде все просто но я его тогда так и не дописал. А в данном случае с драйвером компорта не все так просто - он же не напрямую вызывается а через tty, поэтому шамаства будет больше чем пользы. Если хочется пошаманить - можно посмотреть как включается rs485 на архитектуре cris. Драйвер кома для нее crisv10.c и еще куча шаманокода в linux-x.y.z/arch/cris. Это при том что в ядре добавлена структурка специально для rs485.