Com порт - скорость, настройки
От: ms_odin  
Дата: 11.05.05 13:07
Оценка:
Доброго времени суток!
Подскажите, плиз, в каком направлении искать:
система: ASPLinux10, работа на ноутбуке-> com-порта в чистом виде нет, зато есть примочка USB->RS232 фирмы (?) ftdi.
Открытие происходит без ошибок:
int fd = open("/dev/ttyUSB0",O_RDWR);

При записи тоже все происходит нормально:
int wr_err = write(fd, buf, buf_size);

Проблема возникла в следующем- com-порт по умолчанию работает на скорости 9600. А вот как выставить другую, скажем 115200 Кбит/с? Интуитивно (может неправильно?) догадываюсь, что через
ioctl();

но вот какие параметры передавать — не очень ясно
Нашел исходник драйвера моего девайса: ftdi_sio.c и .h, соответственно. Однако там особо понятного не нашел, за исключением, пожалуй:
* The logic involved in setting the baudrate can be cleanly split in 3 steps.
* Obtaining the actual baud rate is a little tricky since unix traditionally
* somehow ignored the possibility to set non-standard baud rates.
* 1. Standard baud rates are set in tty->termios->c_cflag
* 2. If these are not enough, you can set any speed using alt_speed as follows:
* — set tty->termios->c_cflag speed to B38400
* — set your real speed in tty->alt_speed; it gets ignored when
* alt_speed==0, (or)
* — call TIOCSSERIAL ioctl with (struct serial_struct) set as follows:
* flags & ASYNC_SPD_MASK == ASYNC_SPD_[HI, VHI, SHI, WARP], this just
* sets alt_speed to (HI: 57600, VHI: 115200, SHI: 230400, WARP: 460800)
* ** Steps 1, 2 are done courtesy of tty_get_baud_rate
* 3. You can also set baud rate by setting custom divisor as follows
* — set tty->termios->c_cflag speed to B38400
* — call TIOCSSERIAL ioctl with (struct serial_struct) set as follows:
* o flags & ASYNC_SPD_MASK == ASYNC_SPD_CUST
* o custom_divisor set to baud_base / your_new_baudrate
Соответственно, прошу подсказать, как вот это все безобразие реализовать?
Заранее благодарен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.