RTS2

Nov. 13th, 2018 10:03 am
eddy_em: (Default)
Вчера наконец-таки в базовой сборке RTS2 правки закончились: она собралась! Сделал коммит в свою ветку и отправил пулл-риквест Кубанеку. Хотя, конечно, сомневаюсь, что он возьмет, да примет пулл-риквест на несколько сотен файлов "за присест"...
Самым популярным было не использовать аргументы функций. И если в крестах это можно попытаться объяснить наследованием (в дочернем классе эти аргументы могут использовать), то в сишных файлах это вообще никак не объяснимо!
Несколько пропусков break внутри case наводили на мысль, что это реально пропуски, а не "так и надо" (хотя, надеюсь, я не прав). Была еще парочка UB и парочка грубых ошибок.
А еще очень много всякой deprecated штуковины: зачем-то в С++ используется glib (!!!), да еще и старая его версия. За каким-то чертом используются libsoup и многие подобные ненужные вещи. Похоже на то, как из жирафа и носорога решили сделать слона: там отрежем, здесь подошьем, ну а на всякие торчащие посторонние вещи внимания обращать не будем!
Очень "весело" собирать на современной системе то, что, похоже, кроме как на компьютерах десятилетней давности никогда не собиралось.
Я уж молчу об идиотских автотулзах вместо cmake!
Но писать с нуля все это — просто нереально! Получается как бы: хочешь построить небоскреб, но понимаешь, что не осилишь; зато рядом стоит "вавилонская башня" из говна и палок. И ты начинаешь потихоньку перестраивать эту "башню" под себя, надеясь, что она не развалится в самый неподходящий момент!

RTS2...

Oct. 9th, 2018 08:45 pm
eddy_em: (Default)
Советую всем писать код так, чтобы он компилировался с -Wall -Wextra -Werror безо всяких проблем. Пусть даже придется, как я недавно ругался, вставлять __attribute__ ((fallthrough)); там, где не нужен break в case (ну и что-то с "трамплинами" сделать, чтобы gcc на вложенные функции не ругался)...
Но реально бесит править чужой код, чтобы он скомпилировался хотя бы в минимальной комплектации!!!
P.S. Забавно: у меня сейчас опять не работает google, пытался выполнить поиск яндексом, но эта собака выдает три страницы мусора — далеко этому тугодуму до гугола!
traceroute www.google.com )
P.P.S. Блин, ну зачем писать const в типе функции вроде
const float getSwiftMinHorizon () { return swift_min_horizon; }

??? И коню же понятно, что здесь const нафиг не сдался!!!1111
(и таких косяков полным-полно, а еще больше косяков с "забыванием" использования аргументов функции, встречаются также забавные опечатки, которые могут легко привести к UB)
eddy_em: (Default)
Позавчера добавил в конфигурации RTS2 флаги "-Werror -Wextra" к CFLAGS и начал править
Два с половиной дня у меня заняло исправление всех (кроме одной) вещей, на которые ругался gcc. Лишь одну пришлось оставить: автор использует старую версию libjsoncpp, и gcc ругается, что кое-что уже "deprecated". Но с этим мне разбираться совсем никакого желания нет, если уж прижмет, заменю на свой JSON-парсер.
tl;dr )
eddy_em: (Default)
В пятницу разработчики прислали мне обновленную версию протокола работы с контроллером телескопа. Сегодня проверил — все работает, кроме сетевого соединения (но оно нам и не нужно).

Выложу краткую инструкцию по базовой установке RTS2, да буду помаленьку писать модуль управления совокупностью "телескоп+монтировка". В самой RTS2 нет поддержки 10micron, да и даже LX200 только на самом базовом уровне — надо будет переделывать и расширять.

Установка RTS2 )
eddy_em: (Default)

socat отлично эмулирует порт. RTS2 "увидел" телескоп, и даже получилось погонять его (правда, я с ходу не нашел команды экстренной остановки, а документации с гулькин нос; надо досконально перекопать исходники). Правда, пришлось из режима "extended LX200 emulation" переключиться в обычную (в RTS2 довольно странный способ проверки, в каком режиме точности находится монтировка, и "очень повышенную" точность она считает ошибкой).
Теперь нужно еще разобраться с телескопом, и можно писать модуль управления этими товарищами. Для монтировки за основу возьму готовый код lx200 (но его надо будет сначала привести в нормальный вид) с дополнениями из 10micron'овской библиотечки INDI.

Плохо, что RTS2 такой сырой, и его еще пилить и пилить… Но ничего лучше (и желательно на С, чтобы не ломать голову над ООПщиной) мне, к сожалению, не встречалось.
eddy_em: (Default)
Продолжаю мучения с телескопом ASTROSIB RC500 вкупе с монтировкой 10micron GM4000HPS.
Как-то пока безрезультатно.
RTS2 на временном компьютере установил (пришли 2 компьютера для этих телескопов, но там еще надо снести мастдайку и поставить генту, а затем повторить мучения с разворачиванием RTS2), коннекта с lx200 нет.
Решил попробовать напрямую — через терминал. Тоже безрезультатно: монтировка время от времени дает о себе знать, но где-то так на каждый 10-й запрос (а то и реже), остальные без ответа остаются. С телескопом вообще глухо: при нажатии на кнопки в терминале появляются правильные сообщения, но вот на команды он не реагирует. Зато реагирует на переполнение входного буфера: показывает состояние фокусера и открывает или закрывает крышки (причем, закрывает их неправильно).

Решил для начала хотя бы с монтировкой разобраться, по поводу телескопа разработчики обещали ответить на днях. Поставил indilib и kstars (чтобы дважды не компилять, сразу указывайте USE-флаг indi в /etc/portage/package.use/). Запустил kstars и стал пытаться запустить indi-драйвер монтировки (благо, его уже написали). И те же проблемы: команды монтировка принимает (на команду двигаться она почти сразу приходит в движение), а вот сообщения от нее поступают с большими трудностями. Изредка проскакивает ответ, но по бóльшему счету — сообщения об ошибке связи вроде "монтировка отключена".

Завтра попробую повторить эксперимент сразу после включения питания на монтировку. Хотя, маловероятно, что это поможет. Надо копать глубже.

UPD )
eddy_em: (Default)
Что-то не хочет у меня RTS2 собираться: во-первых, ./configure "не видит" установленную libwebsockets (хотя вроде бы в скрипте все правильно указано, хоть вручную допиливай); во-вторых, в коде полным-полно проблем (кучами сыплются предупреждения о битовых сдвигах больше размера переменной и т.п.) вплоть до отказа собираться:

fli.cpp: В функции-члене <<virtual int rts2focusd::Fli::initHardware()>>:
fli.cpp:186:42: ошибка: некорректное преобразование из <<const char*>> в <<char*>> [-fpermissive]
   ret = FLIOpen (&dev, name, deviceDomain);
                                          ^
In file included from fli.cpp:21:0:
/usr/include/libfli.h:252:11: замечание: initializing argument 2 of <<long int FLIOpen(flidev_t*, char*, flidomain_t)>>
 LIBFLIAPI FLIOpen(flidev_t *dev, char *name, flidomain_t domain);

Придется таки в С++ ковыряться, а я надеялся, что обойдусь сишными модулями с оберткой (от ООПщины мне плохо становится!).
Да еще и флишный модуль ядра опять не хочет собираться после обновления ядра на рабочем компьютере (ядро 4.12.12) — вот же делать нечего Линусу сотоварищи — уже и между минорными релизами API ломают!

June 2025

S M T W T F S
123 4567
891011121314
15161718192021
22232425262728
2930     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 7th, 2025 06:51 pm
Powered by Dreamwidth Studios