Прибор сохранения L-переменных

Единственное, что задерживает релиз Ту-144Д с новой панелью это отсутствие прибора, позволяющего сохранить в текстовый файл настройки сервисного прибора (пришлось склепать такой по образу и подобию ПТ-шного). Сам прибор написан на xml, использует специальный прибор чтения переменных джойстика, но не может сохранять настройки осей и кнопок до следующего полета, поэтому пока приходится зашивать их в xml-код вручную, под свой конкретный джой. Не хочется заставлять пользователей самостоятельно определять номера осей и кнопок, подгонять центровку и чувствительность и прописывать в xml-файле около 40 переменных…
Всвязи с этим появилась острая необходимость в невидимом приборе, делающем примерно следующее: по команде L-переменной (к примеру (L:SP_save,bool)) читающем все переменные настроек СП и пишушего их в текстовый файл куда-нибудь в папку gauges таким образом, чтобы по команде другой L-переменной (к примеру (L:SP_read,bool)) он же мог прочитать содержание этого файла и записать его содержание в переменные настроек СП. На мою предыдущую просьбу о приборе перекачки топлива отклинулся ровно один человек icebear (и перекачка топлива успешно реализована), но сейчас он сильно занят и не может мне помочь. Поэтому я вторично обращаюсь к местным гуру Си-программирования с просьбой о написании такого прибора.

Вот список всех переменных:

(L:RV_joy_j,number)
(L:RV_joy_ch,number)
(L:RV_joy_m,number)
(L:RV_joy_c,number)

(L:RN_joy_j,number)
(L:RN_joy_ch,number)
(L:RN_joy_m,number)
(L:RN_joy_c,number)
 
(L:El_joy_j,number)
(L:El_joy_ch,number)
(L:El_joy_m,number)
(L:El_joy_c,number)

(L:Th_joy_j,number)
(L:Th_joy_ch,number)
(L:Th_joy_m,number)
(L:Th_joy_c,number)

(L:TL_joy_j,number)
(L:TL_joy_ch,number)
(L:TL_joy_m,number)
(L:TL_joy_c,number)

(L:TR_joy_j,number)
(L:TR_joy_ch,number)
(L:TR_joy_m,number)
(L:TR_joy_c,number)

(L:Ta_joy_j,number)
(L:Ta_joy_ch,number)
(L:Ta_joy_m,number)
(L:Ta_joy_c,number)

(L:Otkl_AP_button_j,number)
(L:Otkl_AP_button_n,number)

(L:Otkl_AT_button_j,number)
(L:Otkl_AT_button_n,number)

(L:ONF_down_button_j,number)
(L:ONF_down_button_n,number)

(L:ONF_up_button_j,number)
(L:ONF_up_button_n,number)

(L:Torm_left_button_j,number)
(L:Torm_left_button_n,number)

(L:Torm_right_button_j,number)
(L:Torm_right_button_n,number)

(L:Trim_up_button_j,number)
(L:Trim_up_button_n,number)

(L:Trim_down_button_j,number)
(L:Trim_down_button_n,number)

(L:St_torm_button_j,number)
(L:St_torm_button_n,number)

(L:Pov_golovy_j,number)
(L:Pov_golovy_n,number)

Сообщение отредактировано konsni: 08 Сентябрь 2009 — 19:07

Ответов: 19

Я попробую сделать.
Думаю, за сегодня сделаю.
(Отпуск 🙂 . Да и немного отвлекусь от серьезных задач в ПТ)

Но есть вопросик.
Где будем размешать файл и как его назовем?
Вот пример того как сделано в ПТ.
X:СимуляторGaugesTu154m_cfgJOYjoy.cfg

Для Вас пока пропишу
X:СимуляторGaugesTu144_cfgJOYjoy.cfg

Поправите — переделаю.

Сообщение отредактировано serg_p: 09 Сентябрь 2009 — 01:20

Заранее огромное спасибо!
Да, такой путь вполне устраивает. Хотя, пожалуй, чтобы не плодить лишних папок лучше сохранять в Gauges/Tu-144_nk (там у меня часть приборов и сам СП).

Кажется получилось.
Файл, куда будут сохраняться настройки СП назвал и разместил вот так:
GaugesTu-144_nkSP.cfg

Прибор выкладываю в исходниках, что бы можно было поправить потом то, что надо.
Естественно в архиве лежит и скомпиленный gau, в папке Release
В папке panel лежит кусок Panel.cfg с этим прибором.
Прибор протестировал в отладчике, но чтение переменных (L:SP_save,bool) и (L:SP_read,bool) не проверял.

Возвращаюсь к задачам ПТ, но если, что-нибудь нужно поправить в приборе — обращайтесь, думаю это не долго.

Все измененные, исправленные версии буду вкладывать в это сообщение, удаляя предыдущее вложение.

Прикрепленные файлы

Сообщение отредактировано serg_p: 09 Сентябрь 2009 — 16:18

Если кому этот проектик потребуется, то слово ту144 логично исправить на что-нибудь другое.
Это я так, на всякий случай.

Ну и если, кто из Гуру ткнет в ошибки и недочеты, буду очень благодарен.
Хотя, тут особо и ошибаться негде.

Сообщение отредактировано serg_p: 09 Сентябрь 2009 — 18:05

Спасибо Вам большое, я даже не ожидал, что проблема так быстро разрешится. Вечером протестирую, о результатах доложу 🙂
Отдельное спасибо за исходники — когда-нибудь, может быть, доросту и до создания gau-приборов, да и другим начинающим приборостроителям пригодится.

Работает! Все сохраняет, читает и записывает обратно. Вы спасли релиз.

serg_p (09 September 2009 — 00:02):

Вот пример того как сделано в ПТ.
X:СимуляторGaugesTu154m_cfgJOYjoy.cfg

SHGetFolderPath/SHGetKnownFolderPath для этого существует, вообще-то…

Ага.
Вот спасибочки то за подсказку.
Ведь все рядом, а что-то мысль до этого не дошла.
Учту на будущее.

В прибор добавлены еще шесть переменных.

P.S.
Вложение удалено 25.10.2009 за ненадобностью.

Сообщение отредактировано serg_p: 25 Октябрь 2009 — 16:41

Спасибо, работает.

konsni (25 Октябрь 2009 — 16:15):


Раз уж прибор стал универсальным и может пригодиться другим панелестроителям, то Вы не возражаете, если я его отошлю в раздел «Файлы»?

Есть одна проблемка.
Только сейчас подумал.
Ведь получается, что конфиг прибора будет общим для всех самолетов, которые будут его использовать.

Т.е. для оной модели нужно сохранять одни L:переменные, для другой другие.
Все переменные для всех самолетов, при использовании этого прибора, придется регистрировать в одном конфиге. И естественно, при этом стараться не задеть чужие.
Так же нужно будет вводить префиксы в названиях переменных для каждого самолета.
Это не есть хорошо.
Стоит ли выкладывать в файлы в таком виде — не знаю.

Как-нибудь подумаю над решением этой проблемы, когда опять позволю себе отвлечься.

Если, кто подскажет решение — буду премного благодарен.

Если надумаете все же выложить, то об этой особенности нужно рассказать. В ReadMe или в сопроводительном тексте к файлу.

Фактически получается, что этот прибор я сделал сейчас только для Вас Никита.

А выложил в исходниках, что бы тот, кто знает, мог указать на ошибки, если конечно пожелает, ну и для примера.
Т.е. поделился с местным сообществом программистов своими наработками, ну и, как бы открыл для обсуждения тему о том, как стоит работать с крнфигами.

Если, кто-нибудь поправит приборчик (или я сам найду решение и время), что бы он стал пригодным для использования в нескольких моделях, вот тогда уже можно смело его выкладывать в файлы.

Сообщение отредактировано serg_p: 25 Октябрь 2009 — 19:01

Сделал унифицированный прибор для сохранения/восстановления значений L:переменных.
L:переменные задаются через конфиг.

Конфиг необходимо разместить по пути:
[X:]Documents and SettingsИмя пользователяApplication Datafs_gauge_save_vars
(Путь действителен для Windows XP, в висте не помню где находится Application Data пользователя.)
Сам конфиг обозвать, как: fs_gauge_save_vars.cfg
В конфиге может быть определена секция [General] с двумя опциями path_to_file и name_file.
В path_to_file можно задать путь к файлу относительно пути к симу, куда будут сохраняться переменные. В name_file соответственно имя файла. Если path_to_file не задан, то используется путь по умолчанию, описанный выше, то же самое с именем файла. По умолчанию имя файла: fs_gauge_save_vars.dat.

В конфиге обязательно должна присутствовать секция [saved_variables] и хотя бы одна строка вида:
var1=имя L:переменной

Номера в имени опции должны быть последовательными и начинаться с единицы.
Пример:
[saved_variables]
var1=RV_joy_j
var2=RV_joy_ch
var3=RV_joy_m
var4=RV_joy_c

Команда на запись/чтение файла подаются через L:переменные SP_read и SP_save, присвоением значения = 1.

Прибор выкладываю в исходных текстах.
В папке архива ps_save_varsRelease лежит скомпиленная ps_save_vars.gau
В папке архива ps_save_varspanel лежит Panel_cfg.txt, содержит пример регистрации gau в Panel.cfg
В папке архива ps_save_varscfg лежит пример конфига fs_gauge_save_vars.cfg

Конфиг сделан для Никиты (konsni)

————————————————-
Вложение удалено мной за ненадобностью 28.10.2009

Сообщение отредактировано serg_p: 28 Октябрь 2009 — 02:27

Работает! 🙂 Огромное Вам спасибо, теперь можно спокойно добавлять новые переменные в сервисный прибор, не беспокоя Вас каждый раз. Думаю, найдутся и другие применения сохранению переменный, скажем, учет налета и ресурса систем…

Раз уж прибор стал универсальным и может пригодиться другим панелестроителям, то Вы не возражаете, если я его отошлю в раздел «Файлы»?

Да, действительно, об этом-то я и не подумал… Ну что ж, тогда подождем с выкладкой.

serg_p (25 October 2009 — 14:38):

Есть одна проблемка.
Только сейчас подумал.
Ведь получается, что конфиг прибора будет общим для всех самолетов, которые будут его использовать.

дык это, добавлять к головному пути из секции [General] значение ATC TYPE ID выбраного самолёта и всё. будет конечно куча подкатолгов если во многих самолётах использовать. либо сохранять сами конфигурационные файлы прибора в файлах с названием [ATC TYPE ID]+заданый name_file и все они будут лежать скопом в одном path_to_file. мне кажется у Грицевского так сделано в его сервисном приборе. или я не так понял проблему?

Ага, отлично.
Как-нибудь сделаю.

P.S.
Андрей, я про свое обещание помню. Если тебя уже подперло по времени — напиши в личку, я постараюсь обязательно заняться. А то все откладываю 🙂

Сообщение отредактировано serg_p: 26 Октябрь 2009 — 21:41

Новая версия прибора.
Теперь, надеюсь, его можно использовать для разных самолетов.
Имена папки и файла конфига состоит из трех частей.
Первая часть — atc_type из секции [General] aircraft.cfg
Далее, в качестве разделителя идет знак подчеркивания.
Вторая часть — atc_model из секции [General] aircraft.cfg
Далее знак подчеркивания.
И завершает имя папки и файла конфига литеральная константа «saved_lvars»

Файл данных по умолчанию (если не переопределен в конфиге) для всех самолетов будет назваться одинаково saved_lvars.dat, но поскольку он по умолчанию размещается в той же папке, что и конфиг, то конфликта с имеющимися файлами данных других самолетов быть не может.

Да. Я забыл сказать. Все папки, имеющиеся в пути, при их отсутствии будут создаваться автоматически.

Никита (konsni), если все будет работать нормально, то можно уже выложить в файлы.
Только протестируйте пожалуйста все случаю.
(С путями и именами по умолчанию и с переопределенными.)

Прикрепленные файлы

Забыл привести пример.
У меня полное имя файла конфига для Cessna_C172 получилось таким:
c:Documents and SettingspvApplication DataCessna_C172_saved_lvarsCessna_C172_saved_lvars.cfg

Мой профиль на компе — pv.

Ну вроде сохраняет, в обоих вариантах, и в папку по умолчанию, и в указанную в конфиге (если указать). Так что отправляю в файлы (добавлю только ридми с Вашими инструкциями).