Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как прилипить протокол?
Форум программистов > Системное программирование > Delphi и Pascal > Delphi - FAQ
zone84
Есть спутниковый инет, DVB-карта на PCI, мотоподвес, который вращает тарель.

Её вращением управляет плагин DISEqC, я просто хочу его прилипить к своей проге,
где будет поле для ввода углов и пимпочка "повернуть", далее ссылается
на этот уже готовый плагин diseqc.
ВОПРОС: Пойдет такая конструкция?

ВОПРОС: Как прикрепить этот чертов плагин к моей проге???
Silver Wind
Плагин в виде dll-библиотеки?

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

С параметрами к функциям будет сложнее. Придется, походу, дезасемблировать прогу и смотреть в каком порядке они передаются и какой тип имеют.
zone84
А как посмотреть какие функции она экспортирует?
Дисека нашел файлы dll, ini, dfm.
Silver Wind
Если установлена Visual Studio, то правый клик по DLL, и пункт "View Dependency" и смотрим секцию Export.

Если установлен Delphi, то в командной строке tdump <имя dll-ки> и также смотрим секцию Export.

А вобще, попробуй в поиске покопаться, может все гораздо проще. Например так: ]]>Яндекс +DISEqC +исходник]]>
Silver Wind
Да, еще идейка, если это действительно плагин, то зайди на сайт производителя проги (той, с которой этот плагин вызывается) и поищи Plugin SDK. Такие вещи обычно в свободном доступе.

Т.о. ты узнаешь какие функции плагин экспортирует и какие у них параметры.
zone84
tdump <Diseqc12.dll> в командной строке ничего не дает.
у меня делфи7 second edition.
На счет исходников я ж писал: файл Fiche1.dfm открывается в делфи.
Silver Wind
Цитата(zone84 @ 18:10:2007, 18:33 )
tdump <Diseqc12.dll> в командной строке ничего не дает
*


Я надеюсь ты вводил команду без угловых скобок "<>"? Проверь прописаны ли пути к директории Delphi. Tdump находится в папке bin каталога Delphi.

Или может у тебя консольное окно после выполнения команды закрывается. Тогда пиши так tdump Diseqc12.dll >Diseqc12.txt
И потом посмотришь результат в файле Diseqc12.txt

Цитата(zone84 @ 18:10:2007, 18:33 )
Fiche1.dfm открывается в делфи
*


Открывается корректно? Не пойму, если есть приложенный .dfm, то должен быть и .pas. А если некорректно, то, возможно просто расширение совпало с делфовым, а на деле это что-то другое.
zone84
только что установил прогу, там и sdk есть.
А хоть примерно, с помощью каких команд она может ссылаться на плагин, протокол?

pas тоже есть
zone84
pas тоже есть
Silver Wind
Цитата(zone84 @ 18:10:2007, 19:41 )
pas тоже есть
*

Плагин что с исходниками? В чем тогда проблема? А если нет, зачем приплетать какие-то левые файлы?

С SDK обычно примеры идут, смотри их.

А вообще дай ссылку на SDK, гляну завтра, отвечу точнее.
zone84
Ссылку не получится, я установил прогу вместе с sdk.
попробую вложить.
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Кстати, консольное окно и впрямь закрывается, а файл
Diseqc12.txt нигде не могу найти.
Silver Wind
Цитата(zone84 @ 19:10:2007, 09:52 )
Diseqc12.txt нигде не могу найти.
*

Поиск рулит! А вообще и искать ничего не надо, у тебя оказывается полные исходники плагина имеются.

Итак по шагам:
1. смотрим Fiche1.cpp
//---------------------------------------------------------------------------
void __fastcall TForm1::SecondWestClick(TObject *Sender)
{  strcpy(cmdDiseqc.Cmd,"\xE0\x31\x69\x00");
   cmdDiseqc.Cmd[3]=(char)Duree->Value;
   cmdDiseqc.dwCmdLength='\x04';
   PROG_Send_Diseqc();
   affich_niveau_reception();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SecondEastClick(TObject *Sender)
{  strcpy(cmdDiseqc.Cmd,"\xE0\x31\x68\x00");
   cmdDiseqc.Cmd[3]=(char)Duree->Value;
   cmdDiseqc.dwCmdLength='\x04';
   PROG_Send_Diseqc();
   affich_niveau_reception();

}
//---------------------------------------------------------------------------
void __fastcall TForm1::StepWestClick(TObject *Sender)
{   strcpy(cmdDiseqc.Cmd,"\xE0\x31\x69\x00");
   cmdDiseqc.Cmd[3]=(char)-Step->Value;  // 1 byte signщ moins
   cmdDiseqc.dwCmdLength='\x04';
   PROG_Send_Diseqc();
   affich_niveau_reception();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StepEastClick(TObject *Sender)
{    strcpy(cmdDiseqc.Cmd,"\xE0\x31\x68\x00");
   cmdDiseqc.Cmd[3]=(char)-Step->Value;   // 1 byte signщ moins
   cmdDiseqc.dwCmdLength='\x04';
  
   affich_niveau_reception();
}

Вот они - команды поворота движка "на все 4 стороны".
Как видим здесь сперва подготавливается код команды, а затем вызывается PROG_Send_Diseqc(); - отправка команды.

2. Находим описание PROG_Send_Diseqc(); в модуле Diseqc12.cpp
int PROG_Send_Diseqc( void)
{  cmdDiseqc.dwSize=sizeof(cmdDiseqc);
   return SendMessage(ProgDVDWindow,WM_USER,PROGAPI_SEND_DISEQC,DWORD(&cmdDiseqc));
}

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

Вывод. Хочешь управлять движком из своей проги, также как это делает данный плагин - сделай такойже плагин, но без визуального интерфейса. Пускай он ловит сообщения от твоей проги и передает их в основную прогу. Естественно она при этом должна быть запущена.
zone84
Цитата(Silver Wind @ 19:10:2007, 10:44 )
И видим, что сам плагин ничего по большому счету не делает, он лишь предоставляет пользовательский интерфейс для работы с движком, а сам передает команды на исполнение основной программе.
*


Какой еще основной проге?Стандартной от DVB-карты? Это плохо.
Я думал получится сделать свою - как бы упрощенный вариант стандартной, только маленькую.
А если моя прога будет в дальнейшем ссылаться на стандартную, то вообще зачем она нада?
Мне нужен такой вариант: моя прога>diseqc>DVB-карта>мотор,
а по твоему выводу: моя прога>diseqc>существующая прога>diseqc>DVB-карта>мотор.
Так я понял? А по-моеиу варианту ни как не получится?

Кстати Diseqc12.cpp - это файл с++? Но ведь мне надо все писать на делфи?
Делфи с ним корректно работает?
Silver Wind
Цитата(zone84 @ 19:10:2007, 11:57 )
Какой еще основной проге?Стандартной от DVB-карты?
*

К той проге от которой этот плагин (с картой она шла или нет я не вкурсе).
Цитата(zone84 @ 19:10:2007, 11:57 )
Я думал получится сделать свою
*

Впринципе можно - ищи информацию про протоколу обмена, как конектиться к карте и ваяй свою прогу. И, допускаю, что все это не так сложно, как может показаться на первый взгляд. Спутниковый инет существует давно, довольно распространен, кто-то уже должен был задаваться подобными вопросами - ищи тематические форумы.
Цитата(zone84 @ 19:10:2007, 11:57 )
а по твоему выводу: моя прога>diseqc>существующая прога>diseqc>DVB-карта>мотор.
*

Не совсем, я предложил как вариант: моя прога>мой плагин>стандартная прога>DVB-карта>мотор
Цитата(zone84 @ 19:10:2007, 11:57 )
Кстати Diseqc12.cpp - это файл с++? Но ведь мне надо все писать на делфи?
Делфи с ним корректно работает?
*

Этот плагин написан на C++ Builder (этакая жуткая помесь С++ и Delphi). А тебе и не надо работать с этими файлами - только посмотреть там коды команд и сам принцип работы плагина. Вроде там все довольно прозрачно.
zone84
А в SDK не видно с помощью каких команд прога обменивается данными с DVB- картой?
Тогда можно было бы эти команды использовать. Или я не прав и все сложнее?
Silver Wind
Посмотри wink.gif

Это SDK для разработки плагинов к программе, а не SDK к карте. А коды команд для управления движком в плагине есть - смотри выше строки вида "\xE0\x31\x69\x00".

К томуже одних команд мало, надо еще знать что с этими командами делать, с помощью каких интерфейсов с картой работать.
zone84
Кажется я по немножку начинаю вьезжать.
Подскажи мне плз, как чайнику, что мне почитать, чтоб разобраться с этими SDK, командами, протоколом обмена и т.д.

Т.е. я не смогу определить что это за команда например х31.
Цитата(Silver Wind @ 19:10:2007, 15:42 )
помощью каких интерфейсов с картой работать
*

Т.е. я не смогу определить что это за команда например х31?
zone84
Протоколов обмена с картой нигде нет
Silver Wind
Цитата(zone84 @ 19:10:2007, 17:21 )
Т.е. я не смогу определить что это за команда например х31.
*

Это не команда, а один байт из команды.
Сможешь, по поиску информации попадается достаточно, протокол свободный. Зайди на ]]>diseqc.org]]>, там будет ссылка на страницу с документацией в PDF формате. Конечно все на английском, но тут уж извини. Может если покопаешься в поиске и русский перевод найдешь (а надо ли?).

Даже просто набрав в поисковике "DISEqC" статьи попадаются с общими сведениями о протоколе, так что капай.

Другое дело, повторюсь, что мало знать протокол обмена, нужно еще как-то подключиться к карте, чтобы отправлять эти команды.
Silver Wind
По поводу работы с DVB-картой для подачи команд по DISEqC протоколу попалась ссылочка ]]>Программирование DVB-устройств]]>. Там есть даже программы, работающие с картой в исходниках. В своей работе они используют dvbcore.dll.
Посмотри, есть ли у тебя такая библиотека. Если есть, то и с твоей картой можно через нее работать.
Так что все реально ищи и найдешь.

Комбинация из двух слов "DVB программирование" в поисковике тоже творит чудеса.
zone84
На счет Diseqc12.txt - поиск не рулит.
dvbcore.dll - есть!
А pdf есть, со всеми командами дисека, Ну там влево\вправо, расчет от нулевого положения и т.д.
С dvbcore.dll я точно так же не смогу ни че сделать как и с библиотекой дисека blink.gif - HELP.
zone84
На счет Diseqc12.txt - поиск не рулит.
dvbcore.dll - есть!
А pdf есть, со всеми командами дисека, Ну там влево\вправо, расчет от нулевого положения и т.д.
С dvbcore.dll я точно так же не смогу ни че сделать как и с библиотекой дисека blink.gif - HELP.
Silver Wind
И всетаки еще раз посоветую обратить пристальное внимание на следующий сайт ]]>Программирование DVB-устройств]]>.
Особенно на самый низ страницы - программы с исходниками.
Скачай их, попробуй скомпилировать, разберись как они работают.

Для работы с dvbcore.dll можно найти в нете файлик dvbcore.pas, я прикрепляю тот, что нашел, но на всякий случай имей ввиду, версия файлика может и не подойти.

Ну и еще раз советую найти таки тематический форум, где на вопросы ответят те, кто непосредственно с такими вещами работал.
zone84
ладно, буду пробовать. Потом, когда-нить, отпишусь.
zone84
А как же мне определить с помощью киких интерфейсов работать с картой?
Silver Wind
Насколько я понял работать с картой надо через dvbcore.dll. Для этого в проект добавляешь файл dvbcore.pas (я его уже прилагал) - там есть описания экспортируемых функций, константы и т.п.
А вот в как с помощью этих функций работать с картой посмотри в примерах по ссылке в предыдущем посте, я настолько подробно их не рассматривал, да и карты у меня нет - не начем и не зачем экспериментировать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.