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

Тема в разделе "Delphi - FAQ", создана пользователем zone84, 18 окт 2007.

  1. zone84

    zone84 Гость

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

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

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

    Silver Wind Гость

    Плагин в виде dll-библиотеки?

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

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

    zone84 Гость

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

    Silver Wind Гость

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

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

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

    Silver Wind Гость

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

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

    zone84 Гость

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

    Silver Wind Гость

    <!--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. А если некорректно, то, возможно просто расширение совпало с делфовым, а на деле это что-то другое.
     
  8. zone84

    zone84 Гость

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

    pas тоже есть
     
  9. zone84

    zone84 Гость

    pas тоже есть
     
  10. Silver Wind

    Silver Wind Гость

    <!--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, гляну завтра, отвечу точнее.
     
  11. zone84

    zone84 Гость

  12. Silver Wind

    Silver Wind Гость

    <!--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
    Код (Text):
    //---------------------------------------------------------------------------
    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
    Код (Text):
    int PROG_Send_Diseqc( void)
    { cmdDiseqc.dwSize=sizeof(cmdDiseqc);
    return SendMessage(ProgDVDWindow,WM_USER,PROGAPI_SEND_DISEQC,DWORD(&cmdDiseqc));
    }
    И видим, что сам плагин ничего по большому счету не делает, он лишь предоставляет пользовательский интерфейс для работы с движком, а сам передает команды на исполнение основной программе.

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

    zone84 Гость

    <!--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 - это файл с++? Но ведь мне надо все писать на делфи?
    Делфи с ним корректно работает?
     
  14. Silver Wind

    Silver Wind Гость

    <!--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). А тебе и не надо работать с этими файлами - только посмотреть там коды команд и сам принцип работы плагина. Вроде там все довольно прозрачно.
     
  15. zone84

    zone84 Гость

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

    Silver Wind Гость

    Посмотри :D

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

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

    zone84 Гость

    Кажется я по немножку начинаю вьезжать.
    Подскажи мне плз, как чайнику, что мне почитать, чтоб разобраться с этими 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?
     
  18. zone84

    zone84 Гость

    Протоколов обмена с картой нигде нет
     
  19. Silver Wind

    Silver Wind Гость

    <!--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" статьи попадаются с общими сведениями о протоколе, так что капай.

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

    Silver Wind Гость

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

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

Поделиться этой страницей