SITT писал(а):Наша dll будет просто посредником между пультом и RRS
Так и есть - внутри длл будут решаться все вопросы, касающиеся взаимодействия с конкретным железом пульта, а наружу будет торчать интерфейс в виде универсальных control_signals и feedback_signals
SITT писал(а):Структуры control_signals и feedback_signals будут универсальные или разные под разный ПС?
Универсальные, но конфигурируемые для каждой конкретной серии ПС. Мне это видится так:
- В DLL локомотива сигналы определенных номеров будут связаны с конкретными органами управления и выходными сигналами. Перечень этих номеров выносится в спецификацию на данное дополнение
- DLL пульта должна быть конфигурируемой. В конфигурационном файле, в формате удобном разработчику этой DLL сигналы ПС, в соответствии со спецификацией, связываются с дискретными сигналами и аналоговыми осями конкретной платы, которую эта DLL обслуживает.
SITT писал(а):А нельзя ли попроще без наследования классов?
Нет, весь проект написан в стиле ООП в силу того что концепции в нем используемые хорошо ложатся в канву задачи.
SITT писал(а):WINAPI
Никаких винапи - код симулятора платформонезависимый, без привязки к конкретной ОС.
SITT писал(а):
WINAPI _export VOID GetLocomotiveType(char *LocomotiveType, DWORD LocomotiveNum); //если пульт не подходит для управление текущим ПС то выводим ошибку
WINAPI _export BYTE Get395Valve(void); //получили текущее положение 395 крана из RRS (может пригодится для ламп ЭПТ)
WINAPI _export VOID Set395Valve(BYTE position); //передали новое положение крана с пульта в RRS
WINAPI _export VOID GetPressure(float *TM, float *UR, float *TC, float *NM); //получили показания манометров
WINAPI _export VOID GetLamps(struct *Lamps); //получили состояние контрольных ламп
По поводу данного API есть замечание. Касается оно того, что архитектурно, симулятор совершенно не знает о том, какие серии и типы подвижного состава в данный момент времени им симулируются. Он не имеет ни малейшего представления о внутренних алгоритмах, реализованных внутри DLL дополнения. Если Вы почитаете
документацию разработчика на сайте, то там описано, что симулятор вызывает длл ПС с целью получить от неё ускорение, назад в длл ПС возвращая скорость кузова и колесных пар, а так же их положение. Вся остальная кухня варится внутри DLL.
Что я вижу в этих вызовах? Указание на тип локомотива, на его номер, на конкретное оборудование - КрМ 395. То есть этот апи подразумевает, что сим знает, какие серии подвижного состава и с каким оборудованием им реализуются. А сим этого не знает, и знать не будет. Для него все равно, моделирует он движение тепловоза, электровоза или вагона. Все эти вопросы решает разработчик дополнения.
Отсюда и вытекает требование к ООП-реализации блоков игры - именно этот подход позволяет создать слои абстракции, необходимые для изоляции ядра игры и дополнений, с возможностью их независимой (зависимой через API) разработкой