Mar. 14th, 2017

Пытаясь скрестить all-sky с болтвудом столкнулся с проблемой: у обоих RS-485 через FTDI идет, т.е. VID/PID одинаковый, и хитрый симлинк udev'ом не сделать (ну или просто через libusb+udev можно было бы в программке сразу нужный девайс искать). И вот оказалось, что если демон, работающий с all-sky, уже запущен, то в случае если кто-то что-то в порт напишет, то происходит зависон (т.к. нужно реинициализировать устройство, охреневшее от неожиданных данных).
Сразу подумал, что можно было бы открывать порт, блокируя его. Убрал из open() O_NONBLOCK, и — фигвам! Этот флаг не отвечает за блокировку устройства, а лишь блокирует процесс, пока устройство не будет готово.

Ну и как, интересно, мне открыть порт так, чтобы никто больше его не мог открыть?

UPD: надо было сразу гуглить "lock serial port", ioctl с флагом TIOCEXCL должен помочь (отсюда).

UPD-2: TIOCEXCL не защищает от повторного открытия порта рутом! Т.е. для обеспечения надежности таки демоны надо из-под рута запускать.
В попытке написать скрипт автозапуска демонов all-sky и cloud sensor, пока еще мне не подсказали о /dev/serial, я что-то эдакое записал в порт камеры, проверяя на нем, не является ли он болтвудовским датчиком.
В итоге коммуникация с камерой работает нормально, а вот картинку она не отдает. Точнее, отдает первую порцию данных с недостачей в несколько байт, а дальше молчит.
Пока я тут методом тыка пытаюсь разобраться, заодно послал запросы в техподдержку и на форум SBIG ­— вдруг таки дадут полноценный протокол? А вообще, это свинство — делать такие дорогие железки, и не сопровождать их уж если не SDK, так хотя бы полноценной документацией!

UPD: если запустить fits_capture.py отсюда, то изображение считывается, и дальше мой демон работает без проблем.
Ну вообще мистика какая-то — ведь в питоновом скрипте все точно также, разве что чтение блокирующее! Похоже, что-то я намудрил с ioctl'ами... Неужто TIOCEXCL в этом виноват? Потому как все остальное осталось таким же, каким и было.
Сегодня я отлутил и спаял плату для второго термодатчика. Коллега на работе дал мне кусок стекла для чистоты эксперимента (все-таки, датчики к стеклу будут клеиться, правда, не совсем такому). Я приклеил датчики к стеклу, и стал копить статистику.

Дальше )

July 2017

S M T W T F S
      1
23 4 5 6 78
9 101112 131415
16171819 202122
23242526272829
3031     

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 25th, 2017 04:46 am
Powered by Dreamwidth Studios