Simconnect как альтернатива Fsuipc (fsuipc4)

Тема для тех у кого собран MJoy-16 и нет зарегистрированного модуля FSUIPC4. Самая большая проблема в том, что есть события в симе, на которые нет возможности назначить комбинацию кнопок. Меня в частности прильщала возможность задействовать четыре энкодера в симе в блоке автопилота. В симе не выведены в настройки такие функции как увеличение-уменьшение высоты (автопилот), увеличение-уменьшение скорости…. список необходимых и вместе с тем недоступных функций достаточно большой… Слышал о том что такое заложено в SimConnect. Информации о его использовании для решения данной проблемы не нашел.
Используя примеры из SDK вобщем то за один неполный день разобрался как это работает. На С++ програмить не умею, но тем не мение на текущий момент есть набросок програмки, которая позволяет назначить на определенные действия фиксированную комбинацию кнопок.

это удобно повесить на один тумблер:

Ctrl+F5 — AP On
Shift+F5 — AP Off

…………………………………………
а это на энкодеры:

Shift+F2 Ias/Mach —
Ctrl+F2 Ias/Mach +
Shift+F3 Heading —
Ctrl+F3 Heading +
Shift+F4 Altitude —
Ctrl+F4 Altitude +

Все бы ничего, но есть много вопросов. В частности не могу найти переменные сима, которые отвечают за Course. Кроме того намного удобнее иметь не фиксированную комбинацию кнопок, а иметь возможность назначать их как в той же FSUIPC…

Вобщем кому интересно — вышлю для пробы готовую програмку, или исходники для продолжения работы.

p.s. разработано под 10-й сим с сервиспаком, с установленным симконнектом…

Сообщение отредактировал imitator: 29 June 2007 — 23:35

Ответов: 19

Если можно, то на art-azatov@yandex.ru

Получил. Спасибо.

Flyrus (30.06.2007 10:09) писал:

Там в симконеекте можно почти все. Особенно посмотрте список евентов и переменных.. Правда есть одно НО .. Если нет нужной переменной в списке — придется искать её в памяти процесса …. со всеми вытика.щими от сюда напрягами для программиста..
С другой стороны , чтобы оживить Mjoy энкодер из под собственной программы , по мойму необходимо писать обработчик этог энкодра и уже потом давить на батоны и дергать рычаги из симконнекта :)
Хотя и то и то прекрасно осуществимо в любой среде разработки. Удачи..

Ну энкодеры то уже заработали, тут вот проблемы возникают такого плана: Есть события, имеющие две команды, например Вкл/Выкл Автопилот… То тут все просто, на первую команду (Вкл. Автопилот) — одну комбинацию клавиш, на вторую (Выкл. Автопилот) команду — другую комбинацию, вешаем все на один тумблер и все прекрасно. Есть события имеющие одну команду, например Автотяга, но с параметрами, как я понимаю — Вкл. или Выкл. Вот тут пока не понятно: как дать команду с параметрами, но это уже сложности языка, причем ковырять приходится одновременно и С++ и SDK (мало мне 1С:) Тут даже не понятно пока чем события от переменных отличаются в симе :bad:

Там в симконеекте можно почти все. Особенно посмотрте список евентов и переменных.. Правда есть одно НО .. Если нет нужной переменной в списке — придется искать её в памяти процесса …. со всеми вытика.щими от сюда напрягами для программиста..
С другой стороны , чтобы оживить Mjoy энкодер из под собственной программы , по мойму необходимо писать обработчик этог энкодра и уже потом давить на батоны и дергать рычаги из симконнекта :)
Хотя и то и то прекрасно осуществимо в любой среде разработки. Удачи..

NAV OBS:index OBS setting. Index of 1 or 2.

Вот те курс.

Для Вкл/Выкл автопилота и heading клавиши и в симе назначаются.

Да и вместо C++ можно C# пользовать, все попроще.

_ak (30.06.2007 12:32) писал:

NAV OBS:index OBS setting. Index of 1 or 2.

Вот те курс.

Для Вкл/Выкл автопилота и heading клавиши и в симе назначаются.

Да и вместо C++ можно C# пользовать, все попроще.

Спасибо, слово «OBS» — было ключевое. Нашлись события!
KEY_VOR1_OBI_DEC — VOR1_OBI_DEC (Decrements VOR 1’s OBS setting)
и…
KEY_VOR1_OBI_INC — VOR1_OBI_INC (Increments VOR 1’s OBS setting)

… так что все четрые энкодера задействованы!

Сообщение отредактировал imitator: 30 June 2007 — 17:48

Flyrus (30.06.2007 13:25) писал:

Хорошо, с этим в целом понятно, а как быть с такой ситуацией:
Нужно включать Автотягу одной комбинацией клавиш, а /выключать другой.

Есть переменная AUTOPILOT THROTTLE ARM
есть событие AUTO_THROTTLE_ARM
…..

для автопилота сделал так:
hr = SimConnect_MapInputEventToClientEvent(hSimConnect, INPUT0, «ctrl+f5», AUTOPILOT_ON);
hr = SimConnect_MapInputEventToClientEvent(hSimConnect, INPUT0, «shift+f5», AUTOPILOT_OFF);

но у автопилота две переменные, а у автотяги одна :)

Там в симконнекте достаточно сложно , но если вникнуть — программировать просто уждовольствие.

Переменные от евентов отличаются тем что евент — это событие , типа шасси вверх или вниз. Или событие — прибавить на 1 газку , или убавить на 1 газку.. Бывают эвенты , в параметрах которых ты указываеш на сколько единиц прибавить throttle или убавить.. Но это все комманды — тоесть events.

С переменными ты работаеш в «живом виде» и переменные имеют свой диапазон . Скажем переменная Throttle имеет диапазон от 0 до 100% .. Мало того , в каком виде предсталять переменную ( в процентах или скажем в метрах или в градусах) ты заказываеш сам , когда подготавливаеш эту переменную к общению.

Так вот , чтобы изменить throttlle от 0 до максимума , с евентами тебе надо пошагово каждый раз давать евент — Throttle set+1
столько раз сколько требует модель самолета. ( тут ты никогда не узнаеш реально сколько раз надо подать в симконнект этот евент и тем более никогда не узнаеш в каком положении находится в данный момент throttle)

А вот с переменными делаеш просто —
подаеш переменную Throttle engine 1 в процентах — скажем 100 . И всё. Ручка throttle не максимум.. Тоесть евенты — это прямое общение с переменными с их фактическими значениями…

В своих утилитах я пользую и переменные и евенты. Например выпуск шасси — переменная есть такая , только она указывает физический угол выпуска шассии у самолета (анимация) .. Чтобы выпустить шасси через переменную из собственой программы , я должен в програмном цикле «проиграть» переменную от 0 до 100 …. И таким образом анимировать выпуск шасси собственными силами. Однако используя евенты я не заморачиваюсь этим и просто посылаю событие — выпустить шасси , а движок сима сам все за меня делает.. Очень удобно…

Переменные можно читать , и моджифицировать.. А вот евенты прочитать никак нельзя , однако есть какието евенты которые позволяют прочитать свои данные..
Кстати , многие переменные и евенты не работают . Имейте ввиду. Например скорость изменения симуляции сима SimRate — не пашет… Или нет переменной ZOOM .. Есть только евент — ZOOM IN или ZOOM OUT …

назначь 2 сочетания на один евент :)
Он ругается на то что 2 команды забиндены на одну клавиишу ?

В этом случае ваша утилита должна «слушать клавиши» и по нажатию на оной выдавать в сим коннект нужные события в обход конфигуратора. Тогда на одну клавишу можно повесить хоть 200 событий ..А то что вы делает — это даете просто коману для сима переназначить событие ctrl+5 на AUTOPILOT_ON без какой либо логики вэтом случае симконнект ругается. По мойму было так

А можно получить в sahob@mail.ru?

_ak (30.06.2007 17:55) писал:

назначь 2 сочетания на один евент :)

Ну это можно конечно. Но тогда возникает необходимость согласовывать положение тумблера на физической панели с тумблером в симе. Иначе может быть веселая картина: у меня тумблер в положении вверх, а в симе — вниз. Вот с автопилотом такой проблемы нет, так как там два евента, один на включение, а другой на выключение. Мне вот интересно, а может те евенты, которые имеют одну команду могут выполняться с параметрами? Ну например: включить автотягу (1)… включить автотягу (0)…
И еще… если никаких параметров нет, тогда можно прописать логику, основываясь на положение тумблера в симе. Но тут мне нужно знать значение переменных. А я пока не представляю как это сделать…

Если евент на _SET заканичвается, до да, параметр идет.
Только не везде так есть, местами только _TOGGLE

Исползуйте переменные !
Они более гибки ! И читаются параметры !

sahob (30.06.2007 19:47) писал:

А можно получить в sahob@mail.ru?

Почта дошла? Получилось запустить?

Flyrus (1.07.2007 09:56) писал:

Исползуйте переменные !
Они более гибки ! И читаются параметры !

Не все переменные позволяют запись

imitator (1.07.2007 23:03) писал:

sahob (30.06.2007 19:47) писал:

А можно получить в sahob@mail.ru?

Почта дошла? Получилось запустить?

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

Уважаемый imitator, держите народ в курсе событий — тема актуальная! Недавно приобрел МДжой от Константина (kitsok), все енкодеры планирую на панель АП — проблемы, соотв. те же. Собирался достать енкодеры с кнопками и задействовать на кнопки доступные функции FSX (уже писал в личку), но — нигде нет, даже в интернет-магазине. Довольствуюсь оными без кнопок серии ECW. Поэтому — либо ваш вариант, либо аппаратный обработчик «поворот ручки — имитация нажатия доп.кнопки (третьей)». Но, кажись, второй вариант не жизнеспособен, т.к. будут активными сразу две кнопки — штатная мджоевская и доп.кнопка. Можно конечно задержку на один импульс ввести, чтобы доп.кнопка первой была видна, вобщем — сложно это все как-то. Как дела с вашим вариантом? При удачном исходе, имхо, хорошо было бы некий мануал для народа выложить…

Консольный вариант приложения давно готов и работает. Принцип использования:
1) Запускаем сим.
2) Запускаем MJoy Mapper.
3) Запускаем мою програмку.

MJoy Mapper эмулирует нажатие определенных комбинаций кнопок, програмка перехватывает эти нажатия и посылает команды в сим…
Все!

Плюсы:
1) Работают энкодеры.
2) Назначенные утилитой комбинации кнопок имеют приоритет перед настройками сима, следовательно в самом симе эти комбинации если и назначены на что-то другое — игнорируются.
Минусы:
1) Консольное… выглядит некрасиво :)
2) Нельзя никак переназначить комбинацию кнопок. (только переписание и перекомпиляция программы)
3) Нельзя добавить функционал (см. пункт 2…)

з.ы. может кому интересно: через некоторое время планируется виндовое приложение, с настройками. Но это как сложится :D