Jump to content

FreeJoy. OpenSource контроллер на STM32


Recommended Posts

Конфигуратор ВЕБ, безусловно, упрощает обновление, но при этом появляется головная боль с постоянной поддержкой ресурса. Когда в конце-концов это все надоест и сайт умрет, сообщество останется без конфигуратора.

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

 

То есть во всем всегда есть и плюсы, и минусы.

Link to post
Share on other sites
2 часа назад, l3VGV сказал:

@WG_Magners Поизучал тут такой интересный вопрос как Position independent Code

 

Смысл в том, что можно собрать бинарник, который будет исполняться куда его не положи в памяти, хоть в ОЗУ, хоть во флеш. Главное перед тем как передават ему управление, настроить GOT, на нужные смещения для RAM и FLASH. Фактически, при некотором хакерстве, можно реализовать аналог динамической линковки. Тока самостоятельно, сначала получить от модуля список функций и их адреса, при каждом их вызове из основного кода настраивать индивидуальный GOT(который ясное дело должен жить в ОЗУ). Основной код компиляется и лункуется как обычно. Код основной программы который нужно вызывать из модулей, можно наверное прилинковать по абсолютным адресам, врятли нам актуально иметь бинарные модули переносимые между разными версиями основной программы.

 

Переписывать опятьже "всё", но зато вопрос нехватки места решится на корню. Ну и заодно можно встроить WebUSB и WebHID, чтобы перенести конфигуратор в веб.

Честно скажу, что скорее всего мне на это не хватит запала энтузиазма) 

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

Если переходить на другую концепцию - то наверное это должен быть уже другой проект. А два одинаковых проекта от одних и тех же разрабов - ну фиг знает)

Короче вдохновения пока что на такие кардинальные изменения нет, по крайней мере у меня

  • Like 3
Link to post
Share on other sites
49 минут назад, WG_Magners сказал:

Короче вдохновения пока что на такие кардинальные изменения нет, по крайней мере у меня

 

Хорошо, WebHID и WebUSB - вычеркиваем!

 

По подгрузке, сделаю екзампл потом(как основное приложение + подгружаемый модуль). Как только вдохновение появится, между нас здесь - тоже сильная нехватка.

 

 

50 минут назад, WG_Magners сказал:

допиливающийся до какого-то стабильного состояния и наполненности, которое устроит большинство

 

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

Link to post
Share on other sites

И этих хотелок навалится столько, что впору будет на модульную архитектуру перейти 😂

@WG_Magnersрасскажи, как у вас происходит взаимодействие с @Reksotiv? Пока был жив конфигуратор на C#, у меня была тайная мысль попытать свои силы. Но вот С++ и Qt я вообще не шарю и не хочу разбираться. В кодировании STM на С я бы, наверное, чего-то смог... Мешает только обилие проектов как на работе, так в хобби :(

9 часов назад, l3VGV сказал:

Нет смысла себя ограничивать 8ю осями

Как-то я не вкурил сразу. А разве по стандарту hid только 8 осей? Это на контроллере 8 аналоговых портов, но есть же ещё шины расширения.

Link to post
Share on other sites
37 минут назад, 3BAG_Orion33 сказал:

И этих хотелок навалится столько, что впору будет на модульную архитектуру перейти 😂

@WG_Magnersрасскажи, как у вас происходит взаимодействие с @Reksotiv? Пока был жив конфигуратор на C#, у меня была тайная мысль попытать свои силы. Но вот С++ и Qt я вообще не шарю и не хочу разбираться. В кодировании STM на С я бы, наверное, чего-то смог... Мешает только обилие проектов как на работе, так в хобби :(

Как-то я не вкурил сразу. А разве по стандарту hid только 8 осей? Это на контроллере 8 аналоговых портов, но есть же ещё шины расширения.

Мы с Reksotiv в дискорде обсуждаем какие баги выяснились и чего с ними делать. В целом сейчас с переходом на Qt появилось четкое разделение на конфигуратор и прошивку и понятная и простая система их соответствия друг другу.

 

У STM-ки аналоговых входов поболе, чем 8 :) 8 - это ограничение DirectInput

Link to post
Share on other sites
53 минуты назад, 3BAG_Orion33 сказал:

Как-то я не вкурил сразу. А разве по стандарту hid только 8 осей? Это на контроллере 8 аналоговых портов, но есть же ещё шины расширения.

 

Стандарт HID делали упоротые наркоманы. (говорить голосом Маэстро)

 

Когда я объявляю кнопки то достаточно сказать что "Кнопок будет 20", или 100, или 256(максимум).

 

А вот оси, оси это целый мир(с).

 

Каждая ось имеет своё личное имя, и свой адрес приписки, вот если у нас не джойстик а тротл, то ось будет "Газ". А если всёже джойстик, то Х, У, и т.п.

 

0x09, 0x04,        // Usage (Joystick)

        0x09, 0x33,        //     Usage (Rx)
        0x09, 0x34,        //     Usage (Ry)
        0x09, 0x35,        //     Usage (Rz)

        0x09, 0x30,        //     Usage (X)
        0x09, 0x31,        //     Usage (Y)
        0x09, 0x32,        //     Usage (Z)


        0x09, 0x36,        //     Usage (Slider)
        0x09, 0x37,        //     Usage (Dial)

 

 

Чтобы было смешнее. Вот этот Dial, можно объявить сколько хочеш раз, пока память не кончится(максимум 64байта на пересылку). И винда и линупс это пропустят(я пробовал). 

 

 

Чад кутежа усугубляют - игры. Там никто не делает свой парсер HID сообщений, и я их понимаю. Обычно используется то что дает ДиректИнпут. А там... м... Там могет быть вообще что угодно, при некотором стечении обстоятельств, эта поделка контуженых энтузистов может вообще данными одного джойстика перетирать ввод другого или при нажатии кнопки дергать всеми осями. Писали всё это в тяжелые времена виндовс95-98, и  мозгов у пограмистов было на всю задачу(килобайты).

 

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

joystick->SetDataFormat(&c_dfDIJoystick)

c_dfDIJoystick - предопределенная структура, заполненная микрософтом

можно посмотреть тут https://doxygen.reactos.org/d1/d6e/data__formats_8c_source.html#l00028 с некоторых пор люблю смотреть именно там, повторение кишков винды там прямо подозрительно как хорошее. 

Глядя внутрь можно увидеть и имена осей, на что конечно тоже никто не обращает внимания. Ну могу я сделать дейвайс тротл, и даже ось газ.  И даже смесь и шаг винта. Но чо толку? Хорошо если крен тангаж на первом в списке устройства подхватится...

 

Осей можно и больше сунуть, и это не ограничение динпута.

 

Это

а) никому небыло до сих пор надо, потому что обычные девайсы и столько не имели

б) в игры копипастили куски кода которые микрософт давал в примерх, внутрь никто не смотрел, работает и ладно! тамже рядом описано как эту структуру набить на любое разумное количество осей

 

в) сейчас этим глупо заниматься - легаси огромного размера. Сделай джой у которого больше осей - старые игры его не увидят(в лучшем случае). А новых игр в которых джойстик главное действующее лицо, ну не так уж и много, и там кроме количества осей навалом задач.

 

 

 

 

Извините, набалело!

Edited by l3VGV
  • Like 2
  • Thanks 1
Link to post
Share on other sites

Так в итоге, сколько поддерживает fjoy?)

Из всего вышесказанного я понял, что если надо больше 8ми осей, то для обратной совместимости лучше разбить на два. Правильно?

Link to post
Share on other sites
16 часов назад, 3BAG_Orion33 сказал:

Так в итоге, сколько поддерживает fjoy?)

Из всего вышесказанного я понял, что если надо больше 8ми осей, то для обратной совместимости лучше разбить на два. Правильно?

 

фриджой 8. 

Разбивать на устройства надо.

Раз зашли вопросы про оси, помню @WG_Magners спрашивал а как сделать несколько устройств. А вот просто вот так. Сюдаже можно и мышу с клавой добавить.

 

Но я так делал когда надо было с одного физического устройства более 8ми осей. 

Скрытый текст

 

__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_JOYSTICK_REPORT_DESC_SIZE]  __ALIGN_END =
{

        //phisical axis
        0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)
        0x09, 0x04,        // Usage (Joystick)
        0xA1, 0x01,        // Collection (Application)

        0x85, 0x01,        //     Report ID (1)

        //buttons
        0x05, 0x09,        //     Usage Page (Button)
        0x19, 0x01,        //     Usage Minimum (0x01)
        0x29, 0x08,        //     Usage Maximum (0x08)
        0x15, 0x00,        //     Logical Minimum (0)
        0x25, 0x01,        //     Logical Maximum (1)
        0x95, 0x08,        //     Report Count (8)
        0x75, 0x01,        //     Report Size (1)
        0x55, 0x00,
        0x65, 0x00,
        0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)

        0x05, 0x01,        //     Usage Page (Generic Desktop Ctrls)
        0x09, 0x01,
        0xA1, 0x00,        //   Collection (Physical)

 

        //axis

        0x09, 0x33,        //     Usage (Rx)
        0x09, 0x34,        //     Usage (Ry)
        0x09, 0x35,        //     Usage (Rz)

        0x09, 0x30,        //     Usage (X)
        0x09, 0x31,        //     Usage (Y)
        0x09, 0x32,        //     Usage (Z)


        0x09, 0x36,        //     Usage (Slider)
        0x09, 0x37,        //     Usage (Dial)

 

        0x16, 0x01, 0x80,  //     Logical Minimum (-32767)
        0x26, 0xFF, 0x7F,  //     Logical Maximum (32767)

        0x95, 0x08,        //     Report Count (8)
        0x75, 0x10,        //     Report Size (16)//0x10
        0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)

 

        //led & lcd
        0x85, 0x02,        //   Report ID (2)
        0x09, 0x01,        //   Usage (0x01)
        0x15, 0x00,        //              LOGICAL_MINIMUM (0)
        0x25, 0xFF,        //            LOGICAL_MAXIMUM (127)
        0x75, 0x08,        //   Report Size (8)
        0x95, 0x18,        //   Report Count (24)
        0x91, 0x02,        //   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)


        0xC0,              // End Collection
        0xC0,              // End Collection


//
//
//
//        //second device
//                0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)
//                0x09, 0x04,        // Usage (Joystick)
//                0xA1, 0x01,        // Collection (Application)
//
//                0x85, 0x03,        //     Report ID (3)
//                0x05, 0x09,        //     Usage Page (Button)
//                0x19, 0x01,        //     Usage Minimum (0x01)
//                0x29, 0x08,        //     Usage Maximum (0x08)
//                0x15, 0x00,        //     Logical Minimum (0)
//                0x25, 0x01,        //     Logical Maximum (1)
//                0x95, 0x08,        //     Report Count (8)
//                0x75, 0x01,        //     Report Size (1)
//                0x55, 0x00,
//                0x65, 0x00,
//                0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
//
//                0x05, 0x01,        //     Usage Page (Generic Desktop Ctrls)
//                0x09, 0x01,
//                0xA1, 0x00,        //   Collection (Physical)
//                0x09, 0x33,        //     Usage (Rx)
//                0x09, 0x34,        //     Usage (Ry)
//                0x09, 0x35,        //     Usage (Rz)
//
//                0x09, 0x30,        //     Usage (X)
//                0x09, 0x31,        //     Usage (Y)
//                0x09, 0x32,        //     Usage (Z)
//
//                0x09, 0x36,        //     Usage (Slider)
//                0x09, 0x37,        //     Usage (Dial)
//
//
//                0x16, 0x01, 0x80,  //     Logical Minimum (-32767)
//                0x26, 0xFF, 0x7F,  //     Logical Maximum (32767)
//
//                0x95, 0x08,        //     Report Count (3)
//                0x75, 0x10,        //     Report Size (16)
//                0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
//
//
//
//
//
//                0xC0,              //   End Collection
//                0xC0,              // End Collection
//
//

}; 

 

 

Link to post
Share on other sites
32 минуты назад, l3VGV сказал:

А вот просто вот так

Хоть бы под спойлер спрятал)
Да, можно бить двумя способами: либо вот так, через top level collection или же раскидать по разным конечным точкам, как сделано в текущей прошивке

Link to post
Share on other sites
10.03.2021 в 22:53, 3BAG_Orion33 сказал:

Поэтому попросил небольшую доработку в виде разделения на два логических Шима по половинке оси

А у тебя все оси задействованы или есть свободные?

Если есть, то можешь их задействовать как источники для ШИМа. Назначаешь для них те же источники сигнала, калибруешь с половины оси и снимаешь галку Output, чтоб комп эту ось не видел

Link to post
Share on other sites
9 часов назад, WG_Magners сказал:

А у тебя все оси задействованы или есть свободные?

Хороший вопрос) я пока на стадии идейного проектирования, и теперь выяснилось, что мне надо два девайса - хорошо плату про запас заказал. Значит, лишние оси точно будут. Но, скорее всего, 4 лишних, чтобы по 2 половинки, не будет. На РУС, министик надо 4, еще есть рычажок тяги, который можно куда-то придумать, тормоз, например. И тогда останется только 3 оси...

Ограничение 8 осей физических или логических?

ШИМ генерируется с raw показаний или после сканирования/масштабирования? Можно ли кривыми осей настраивать кривую отклика ШИМ? Это было бы идеально для задания кривой загрузки.

13 часов назад, l3VGV сказал:

Сюдаже можно и мышу с клавой добавить.

Эмуляция клавиатуры средствами самого джойстика было бы очень здорово.

Edited by 3BAG_Orion33
Link to post
Share on other sites
18 часов назад, l3VGV сказал:

c_dfDIJoystick - предопределенная структура, заполненная микрософтом

А как с этим обстоят дела в  Линуксе, есть информация?,  или там тоже своя библиотека зашита?

Link to post
Share on other sites
1 час назад, Alator сказал:

А как с этим обстоят дела в  Линуксе, есть информация?,  или там тоже своя библиотека зашита?

 

В линуксе дела с динпутом как обстоят? Через WINE и протон. Там зашито ровно тожесамое как и в винде, обратно - для ради совместимости.

Link to post
Share on other sites
10 часов назад, 3BAG_Orion33 сказал:

Ограничение 8 осей физических или логических?

Сейчас - никаких больше 8 низя. Но принципиально ограничение только на оси которые в систему транслируется. То есть в теории можно логических осей больше, просто не все засовывать в USB

 

Link to post
Share on other sites
23 минуты назад, WG_Magners сказал:

Сейчас - никаких больше 8 низя

А какой смысл тогда в возможности подключения АЦП по i2c и spi?

 

Не хорошо, конечно, но не критично. Жаль, что кривую ШИМ нельзя настроить непосредственно, но идея через виртуальную ось кажется жизнеспособной. А если одну располовинить логикой, то тогда даже должно всего хватить :)

Link to post
Share on other sites
12 минут назад, 3BAG_Orion33 сказал:

А какой смысл тогда в возможности подключения АЦП по i2c и spi?

 

Внешние АЦП гораздо лучше по шумам и разрешению. Внешнее АЦП можно вынести от контроллера на разумные десятки сантиметров - метр. Крайне полезная фича.

Link to post
Share on other sites
3 часа назад, Narval сказал:

Отличное видео

Вопрос как с обратной связью у авиасимов. У гонок часто даже аркады поддерживают логитечевский протокол ффб. А так конструкция очень простая повторить не проблема.

Edited by ZERgyt
Link to post
Share on other sites
13 минут назад, ZERgyt сказал:

Вопрос как с обратной связью у авиасимов.

Дык и там говорят, что у авиасимов по-разному.

+- ФФБ есть. :)

Link to post
Share on other sites

FreeJoy.rar

Вот мой конфиг. Подключил 3 резистора. Так вот работает только тот, что на оси Y, остальные нет. Z просто дергается, хотя вроде всё тоже самое. Как настроить?

Link to post
Share on other sites
1 минуту назад, Alex3232 сказал:

FreeJoy.rar 1 \u041a\u0431 · 0 скачиваний

Вот мой конфиг. Подключил 3 резистора. Так вот работает только тот, что на оси Y, остальные нет. Z просто дергается, хотя вроде всё тоже самое. Как настроить?

скрин скинь из конфигуратора

Link to post
Share on other sites
6 минут назад, =VCC=Ghash34 сказал:

скрин скинь из конфигуратора

Может у меня просто контакт плохой в пайке. z ось вообще дергается и ничего не происходит

 

Screenshot_7.thumb.png.327bb7a75a58a9588d44e6f4768bc723.pngScreenshot_6.thumb.png.2f9fba27158942168c6dde9a90d062a2.png

Link to post
Share on other sites
2 минуты назад, Alex3232 сказал:

Может у меня просто контакт плохой в пайке. z ось вообще дергается и ничего не происходит

 

Screenshot_7.thumb.png.327bb7a75a58a9588d44e6f4768bc723.pngScreenshot_6.thumb.png.2f9fba27158942168c6dde9a90d062a2.png

в конфигураторе выставлены 7 пинов аналогового сигнала ,все кроме а4. к каким пинам подключены выходы резисторов? Может просто в дискорде показать по быстрому  как что сделать что бы тут не вести переписку? 

Link to post
Share on other sites
13 минут назад, =VCC=Ghash34 сказал:

в конфигураторе выставлены 7 пинов аналогового сигнала ,все кроме а4. к каким пинам подключены выходы резисторов? Может просто в дискорде показать по быстрому  как что сделать что бы тут не вести переписку? 

Dangerous#3475

Link to post
Share on other sites

А я вот подумал...
А может, все эти хорошести надо было реализовывать программно? Сделать виртуальный джойстик, на который подавать данные после обработки софта. А софтом по ЮСБ получать сырые данные с контроллера.

Тогда, по идее, никакого ограничения в объеме для паршивки не будет.
Или еще вариант: сделать совсем базовый режим стандартного джойстика без конфигуратора, если не нужен навороченный функционал, а второй режим - через виртуальный джойстик.

 

Кстати, а оптимизация при компиляции прошивки используется? Я, конечно, такой функционал не наворачивал, но в моих поделках обычно 8к хватало. На 900 байт сделал простейший таск-менеджер с планировкой задач...

Edited by 3BAG_Orion33
Link to post
Share on other sites
10 минут назад, Alex3232 сказал:

Dangerous#3475

дал ссылку в личку на форуме

Edited by =VCC=Ghash34
Link to post
Share on other sites

Нашел ссылку в русле обсуждения двух джойстиков на одном девайсе и генерации кнопок клавиатуры
https://github.com/pellepl/arcadehid

А тут конфигуратор подозрительно похож на FJoy :)
https://opensimhardware.wordpress.com/pedal-button-controller/

Edited by 3BAG_Orion33
Link to post
Share on other sites
28 минут назад, 3BAG_Orion33 сказал:

А тут конфигуратор подозрительно похож на FJoy :)
https://opensimhardware.wordpress.com/pedal-button-controller/

Мне очень конфигуратор понравился понятной структурой. Я пол года упрашивал довести до ума прошивку ту (года 1.5 назад), вышел на него, по почте переписывались, потом просил довести до ума ее одного товарища с этого форума(если хочет сам скажет кто), в общем ни у кого времени не хватало, некоторые деньги не смогли мотивировать)), прошивка на тот момент была очень, очень сырой....и уже было нашел человека на стороне (вряд ли на стороне от полетов кто то сделал бы все что нужно), а ту бац, и Магнерсу оказывается тоже конфигуратор понравился, Магнерс конечно сделал хорошую, жирную  бомбу, спасибо помощникам за вики и новый конфигуратор.

 

 

Edited by =M=PiloT
  • Like 2
Link to post
Share on other sites
1 час назад, 3BAG_Orion33 сказал:

Mjoy уже китайцы делают)) https://aliexpress.ru/item/4001252476466.html

Чего медлим ? :)

Вперёд. :biggrin:

Скрытый текст

Данный проект позволяет подключить только ДВА датчика TLE5010/11.

Желающие могут обеспечить себе танцы с бубном.

Остаюсь приверженцем разработки проекта плат capitanblood.

Огромное ему спасибо за  это.

 

Link to post
Share on other sites
8 часов назад, 3BAG_Orion33 сказал:

тут конфигуратор подозрительно похож на FJoy :)

Никогда не скрывал, что за основу взял интерфейс отсюда, уж больно понравилось. И ссылочку на гитхабе в описании проекта оставил)

Под капотом вряд ли найдёте что-то общее)

  • Like 2
Link to post
Share on other sites

Парни, проверьте пожалуйста схему!

Трехпозиционный тумблер ON-OFF-ON должен использоваться для переключения закрылков (ПК-МК-ВПК) все три положения должны подсвечиваться светодиодами. Положение OFF должно быть активным (в том смысле, что на него можно повесить кнопку).

Накидал схемку:

Key.jpg.54ebd0cb5d45a20c851263bc83baf070.jpg

Здесь

SW1 показан таким, какой нашел в библиотеке :) на самом деле у него есть промежуточное положение между 1 и 3 (земля висит в воздухе)

U7-D это ПК

U7-H это МК

U7-C это ВПК

 

Собрал на макетке, вроде все хорошо, работает, но синий светодиод на платке контроллера светится подозрительно тускло... :( меня терзают смутные сомнения...

гляньте пожалуйста, не накосячил ли я где?

Спасибо!

Edited by Milit
Link to post
Share on other sites

Проверь номиналы резисторов R52, R53, R54 и померь напряжение питания при крайних положениях тумблера. В схеме я не вижу беды.

Edited by Zurabik
Link to post
Share on other sites
1 час назад, Milit сказал:

Парни, проверьте пожалуйста схему!

Да как бы можно двумя диодами решить эту задачу.

Link to post
Share on other sites

Там же инверсия нужна. если на регистр подавать не землю а плюс, то можно и диодами.

Link to post
Share on other sites

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

Только что, Zurabik сказал:

Там же инверсия нужна. если на регистр подавать не землю а плюс, то можно и диодами.

инверсия делается программно в конфигураторе.

Link to post
Share on other sites
15.03.2021 в 22:13, 3BAG_Orion33 сказал:

А я вот подумал...
А может, все эти хорошести надо было реализовывать программно? Сделать виртуальный джойстик, на который подавать данные после обработки софта. А софтом по ЮСБ получать сырые данные с контроллера.

Тогда, по идее, никакого ограничения в объеме для паршивки не будет.
...

6 лет назад предлагал мега_мозгу тоже самое для ммджоя... Назвал меня извращенцем)) :crazy:

Link to post
Share on other sites
33 минуты назад, Zurabik сказал:

Проверь номиналы резисторов R52, R53, R54 и померь напряжение питания при крайних положениях тумблера. В схеме я не вижу беды.

R52 = 15K, R53=R54=10K проверил еще раз.

3,3

На резюках 3,2 вольта.

Проверил ток между коллектором и U7-H в крайних положениях - 0,21 мА. Не многовато?

29 минут назад, Johnet сказал:

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

инверсия делается программно в конфигураторе.

Не догоню :dash: Если не трудно, можно рисуночек? 

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...