We need to go deeper

Приключения с прошивкой мотороллы достигают невиданного размаха.

— Перекомпилирован dosbox с поддержкой отладочного вывода последовательно порта. Увидел, какие байты пытается отослать программа. С тем, что я вижу на логическом анализаторе, не соотносится никак. Следовательно проблема в нестандартном битрейте.

— Изучены внутренности досбокса, на предмет того как он инициализирует порты. Стало понятно, что досбокс инициализирует порты используя только стандартные битрейты, используя классические функции tc*. В недрах интернета я нашел упоминание что нестандартный битрейт может быть применен классическими функциями лишь для FTDI чипов. Что конечно странно. Ибо нестандартная скорость не применяется даже для аппаратного RS-232. Плюс у людей шьется через аппаратный последовательный порт, а у меня нет. По итогу я принял решение переписать код досбокса, на использование расширенного интерфейса конфигурации порта, используя ioctl запросы TCGETS2 и TCSETS2 для termios2.

В процессе переписывания натолкнулся на дичь. Запрашиваю конфигурацию порта с помощью TCGETS2 в dosbox — получаю в ответ ошибку. Делаю то же запрос в своем приложении — все отлично читается. По итогу ковыряния с gdb, выяснилось что при запросах из досбокс и моего приложения, адреса регистра TCGETS2 разные! Что это за ересь я пока не понимаю.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *