Как прилипить протокол?

  • Автор темы zone84
  • Дата начала
Z

zone84

Гость
#1
Есть спутниковый инет, DVB-карта на PCI, мотоподвес, который вращает тарель.

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

ВОПРОС: Как прикрепить этот чертов плагин к моей проге???
 
S

Silver Wind

Гость
#2
Плагин в виде dll-библиотеки?

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

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

zone84

Гость
#3
А как посмотреть какие функции она экспортирует?
Дисека нашел файлы dll, ini, dfm.
 
S

Silver Wind

Гость
#4
Если установлена Visual Studio, то правый клик по DLL, и пункт "View Dependency" и смотрим секцию Export.

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

А вобще, попробуй в поиске покопаться, может все гораздо проще. Например так: Яндекс +DISEqC +исходник
 
S

Silver Wind

Гость
#5
Да, еще идейка, если это действительно плагин, то зайди на сайт производителя проги (той, с которой этот плагин вызывается) и поищи Plugin SDK. Такие вещи обычно в свободном доступе.

Т.о. ты узнаешь какие функции плагин экспортирует и какие у них параметры.
 
Z

zone84

Гость
#6
tdump <Diseqc12.dll> в командной строке ничего не дает.
у меня делфи7 second edition.
На счет исходников я ж писал: файл Fiche1.dfm открывается в делфи.
 
S

Silver Wind

Гость
#7
<!--QuoteBegin-zone84+18:10:2007, 18:33 -->
<span class="vbquote">(zone84 @ 18:10:2007, 18:33 )</span><!--QuoteEBegin-->tdump <Diseqc12.dll> в командной строке ничего не дает
[snapback]82284" rel="nofollow" target="_blank[/snapback]​
[/quote]

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

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

<!--QuoteBegin-zone84+18:10:2007, 18:33 -->
<span class="vbquote">(zone84 @ 18:10:2007, 18:33 )</span><!--QuoteEBegin-->Fiche1.dfm открывается в делфи
[snapback]82284" rel="nofollow" target="_blank[/snapback]​
[/quote]

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

zone84

Гость
#8
только что установил прогу, там и sdk есть.
А хоть примерно, с помощью каких команд она может ссылаться на плагин, протокол?

pas тоже есть
 
S

Silver Wind

Гость
#10
<!--QuoteBegin-zone84+18:10:2007, 19:41 -->
<span class="vbquote">(zone84 @ 18:10:2007, 19:41 )</span><!--QuoteEBegin-->pas тоже есть
[snapback]82292" rel="nofollow" target="_blank[/snapback]​
[/quote]
Плагин что с исходниками? В чем тогда проблема? А если нет, зачем приплетать какие-то левые файлы?

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

А вообще дай ссылку на SDK, гляну завтра, отвечу точнее.
 
S

Silver Wind

Гость
#12
<!--QuoteBegin-zone84+19:10:2007, 09:52 -->
<span class="vbquote">(zone84 @ 19:10:2007, 09:52 )</span><!--QuoteEBegin-->Diseqc12.txt нигде не могу найти.
[snapback]82328" rel="nofollow" target="_blank[/snapback]​
[/quote]
Поиск рулит! А вообще и искать ничего не надо, у тебя оказывается полные исходники плагина имеются.

Итак по шагам:
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));
}
И видим, что сам плагин ничего по большому счету не делает, он лишь предоставляет пользовательский интерфейс для работы с движком, а сам передает команды на исполнение основной программе.

Вывод. Хочешь управлять движком из своей проги, также как это делает данный плагин - сделай такойже плагин, но без визуального интерфейса. Пускай он ловит сообщения от твоей проги и передает их в основную прогу. Естественно она при этом должна быть запущена.
 
Z

zone84

Гость
#13
<!--QuoteBegin-Silver Wind+19:10:2007, 10:44 -->
<span class="vbquote">(Silver Wind @ 19:10:2007, 10:44 )</span><!--QuoteEBegin-->И видим, что сам плагин ничего по большому счету не делает, он лишь предоставляет пользовательский интерфейс для работы с движком, а сам передает команды на исполнение основной программе.
[snapback]82337" rel="nofollow" target="_blank[/snapback]​
[/quote]

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

Кстати Diseqc12.cpp - это файл с++? Но ведь мне надо все писать на делфи?
Делфи с ним корректно работает?
 
S

Silver Wind

Гость
#14
<!--QuoteBegin-zone84+19:10:2007, 11:57 -->
<span class="vbquote">(zone84 @ 19:10:2007, 11:57 )</span><!--QuoteEBegin-->Какой еще основной проге?Стандартной от DVB-карты?
[snapback]82343" rel="nofollow" target="_blank[/snapback]​
[/quote]
К той проге от которой этот плагин (с картой она шла или нет я не вкурсе).
<!--QuoteBegin-zone84+19:10:2007, 11:57 -->
<span class="vbquote">(zone84 @ 19:10:2007, 11:57 )</span><!--QuoteEBegin-->Я думал получится сделать свою
[snapback]82343" rel="nofollow" target="_blank[/snapback]​
[/quote]
Впринципе можно - ищи информацию про протоколу обмена, как конектиться к карте и ваяй свою прогу. И, допускаю, что все это не так сложно, как может показаться на первый взгляд. Спутниковый инет существует давно, довольно распространен, кто-то уже должен был задаваться подобными вопросами - ищи тематические форумы.
<!--QuoteBegin-zone84+19:10:2007, 11:57 -->
<span class="vbquote">(zone84 @ 19:10:2007, 11:57 )</span><!--QuoteEBegin-->а по твоему выводу: моя прога>diseqc>существующая прога>diseqc>DVB-карта>мотор.
[snapback]82343" rel="nofollow" target="_blank[/snapback]​
[/quote]
Не совсем, я предложил как вариант: моя прога>мой плагин>стандартная прога>DVB-карта>мотор
<!--QuoteBegin-zone84+19:10:2007, 11:57 -->
<span class="vbquote">(zone84 @ 19:10:2007, 11:57 )</span><!--QuoteEBegin-->Кстати Diseqc12.cpp - это файл с++? Но ведь мне надо все писать на делфи?
Делфи с ним корректно работает?
[snapback]82343" rel="nofollow" target="_blank[/snapback]​
[/quote]
Этот плагин написан на C++ Builder (этакая жуткая помесь С++ и Delphi). А тебе и не надо работать с этими файлами - только посмотреть там коды команд и сам принцип работы плагина. Вроде там все довольно прозрачно.
 
Z

zone84

Гость
#15
А в SDK не видно с помощью каких команд прога обменивается данными с DVB- картой?
Тогда можно было бы эти команды использовать. Или я не прав и все сложнее?
 
S

Silver Wind

Гость
#16
Посмотри :D

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

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

zone84

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

Т.е. я не смогу определить что это за команда например х31.<!--QuoteBegin-Silver Wind+19:10:2007, 15:42 -->
<span class="vbquote">(Silver Wind @ 19:10:2007, 15:42 )</span><!--QuoteEBegin-->помощью каких интерфейсов с картой работать
[snapback]82385" rel="nofollow" target="_blank[/snapback]​
[/quote]
Т.е. я не смогу определить что это за команда например х31?
 
S

Silver Wind

Гость
#19
<!--QuoteBegin-zone84+19:10:2007, 17:21 -->
<span class="vbquote">(zone84 @ 19:10:2007, 17:21 )</span><!--QuoteEBegin-->Т.е. я не смогу определить что это за команда например х31.
[snapback]82402" rel="nofollow" target="_blank[/snapback]​
[/quote]
Это не команда, а один байт из команды.
Сможешь, по поиску информации попадается достаточно, протокол свободный. Зайди на diseqc.org, там будет ссылка на страницу с документацией в PDF формате. Конечно все на английском, но тут уж извини. Может если покопаешься в поиске и русский перевод найдешь (а надо ли?).

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

Другое дело, повторюсь, что мало знать протокол обмена, нужно еще как-то подключиться к карте, чтобы отправлять эти команды.
 
S

Silver Wind

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

Комбинация из двух слов "DVB программирование" в поисковике тоже творит чудеса.