Virtual Serial Port loopback для Mac OS X

Не могу не порадоваться за себя и порадовать своих редких читателей. На сей раз целью разработки стал драйвер для Mac OS X.

Немного предистории. Не так давно из вполне определенных концептуальных соображений я заменил на своей станционарной радиостанции компьютерный интерфейс. В контексте данной предметной области компьютерный интерфейс - это такая коробочка, которая имеет в себе звуковую карту, несколько специфичных последовательных портов и еще кое-какую дребедень. Все для того, чтоб было удобно работать с радиостанцией разным компьютерным программам.
Был интерфейс RigExpert (вернее, он есть, но теперь предназначен для "походной" станции), в котором, как и в большенстве других разработчики просто сделали обвязку поверх стандарных чипов - не требуется никаких специальных программ и драйверов, все стандартно.
В свою очередь, заменил я его на интерфейс от microHAM. Прекрасный качественный интерфес. Причиной замены стало наличие функции "прозрачного" от компьютерных программ декодирования частоты.
В любительском радио есть стандарт на протокол управления радиостанцией через последовательный порт - CAT (Computer Assister Transceiver), который, помимо всего прочего, позволяет "снимать" текущую настроеную частоту. Эта часотота нужна много где еще: в моем случае это декодер диаппазонов, автоматически переключающий антенны, или усилитель, которого у меня нет. Все они должны получать данные одновременно с программами, а при наличие всего одного CAT-интерфейса на радиостанции это непозволительная роскошь.
Так вот, все обычные интерфейсы не умеют так "прозрачно" делиться информацией о частоте, а microHAM умеет. И вроде бы все великолепно, если бы не одно "но". У него нестандарный интерфейс для программ. Да, торчит обычный последовательный USB-порт FTDI, но на нем передаются не "голые" комманды трансивера, а свой протокол. Ко всему прочему, компания microHAM не поддерживает официально операционных систем, отличных от Windows (для которой в стандартном ПО реализуются виртуальные последовательные порты), но они взаимодействуют со разработчиками для поддержки других ОС. Так для Mac OS X есть решение - uH Router, о котором я уже писал. Решение хорошее и открытое, но требующее поддержки своего API со стороны третих программ. В свою очередь, эти самые разработчики радиолюбительского софта, весьма редкие для Mac OS, зачастую не стремяться поддержать этот API. Ну да не проблема - API просто позволяет обратиться к нужному физическому порту устройства на отдельных UNIX pipe. Есть скриптовые языки вроде PHP, которые позволяют реализовать обращение к этому API, и замечательная утилита socat, перенаправляющая какие угодно потоки куда угодно...
И тут выплывает проблема совершенно другого рода: на столько Mac OS X является *NIX системной, на столько же она ей не является. Вы не найдете привычных для себя /proc на файловой системе, а в /dev присутствуют только стандартные для BSD устройства вроде блочных, терминалов, последовательных портов и и.д. Доступ по всему остальному осуществляется через проприетарный IOKit Framework. Большенство программ для Cocoa использует его для перечисления устройств, в частности - последовательных портов. Так что ситуация выглядит так, что стандартное *NIX решение для реализации виртуальных петлевых устройств - PTY, хоть и имеется в OS X, но никак не работает с большинством программ. Я потратил уйму времени на поиски готового решения на различных форумах, но если PTY не прокатывало - дело не шло, только общие слова вроде "разработайте свой драйвер". Соответственно, пришлось заняться именно этим.
И вот, встречайте - драйвер готов. Сейчас провожу тестирование и рассматриваю вариант его распостранения через App Store. Никак не могу не направить луч поноса в сторону яблочной компании за крайне скудную и неактуальную документацию и даже ее отсутствие по большей части. Предположу, что большенство разработчиков, которые пытались сделать такой петлевой драйвер, бросали свои активности долбясь лбом об эту преграду. Домен IOSerialPortSync вообще не описан, 70% времени было посвещенно изучению исходных кодов уже имеющихся драйверов от Apple и исходных кодов самого kernel-овой части IOKit.

Собственно, дравер уже неделю как работает, а вчера я провел натурные испытания с трансивером. Чем спешу с вами поделиться.

Похожие статьи

  • UH Router
  • Real Life vs Virtual Living
  • I SEEK U :) VIRTUAL LIFE – спектакль про Интернет
  • Удаленное управление трансивером: часть 5
  • Апрель 6, 2011 | Категория: Без рубрики

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

    close window

    Service Times & Directions

    Weekend Masses in English

    Saturday Morning: 8:00 am

    Saturday Vigil: 4:30 pm

    Sunday: 7:30 am, 9:00 am, 10:45 am,
    12:30 pm, 5:30 pm

    Weekend Masses In Español

    Saturday Vigil: 6:15pm

    Sunday: 9:00am, 7:15pm

    Weekday Morning Masses

    Monday, Tuesday, Thursday & Friday: 8:30 am

    map
    6654 Main Street
    Wonderland, AK 45202
    (513) 555-7856