easy way to tune SS2
Исследование работы streamreader.dll с API SkyStar2 (SkyDll.dll)

    В результате исследования внутренностей последней библиотеки streamreader.dll у меня
 возникла мысль  опубликовать данный материал, streamreader стабильно работает и похоже что
 его разработчик имеет правильное представление с чем работает, сейчас я смотрю на
 внутренности библиотеки и нахожу явное подтверждение тому что обсуждалось на различных
 форумах, более того, открываются некоторые другие подробности правильной работы с API
 карты SkyStar2.
   Надеюсь автор (авторы) не будут против, исходный код найти практически невозможно, и даже
 многие программы еще и пакуют, что трудно добраться до исходного кода и понять/найти
 информацию по правильной работе с функциями SkyDLL.dll.
   В представленном коде могут быть ошибки, но главная суть передана, поэтому небольшие
 коррекции кода за Вами.
  Итак, начнем по порядку...

  1. CheckForDVB
  2. StartDVB
  3. StopDVB
  4. nothing more
  5. nothing more
  6. nothing more
  7. nothing more

  P/S Может я зря проделываю эту работу и кого-нить есть исходники StreamReader'a ?

CheckForDVB()

// Checks if the TechnoTrend or other compatible drivers based on the reference drivers are installed
// Return value: true = supported driver found ; false = no driver found

int CheckForDVB(void);

внутренности:

res : DWORD;
AdaptersCount : DWORD = 1;
hSkyAdapter : DWORD; // handle адаптера, нужен для последующей работы
dwReg : Array[0..$19] of DWORD; // структура регистра(ов)
rReg : DWORD; // регистр для установки
dwR3Q_Ctrl : DWORD;
dwR3Q_Data : DWORD;
structOpenStream1 : Array[0..$159] of DWORD;
structOpenStream2 : Array[0..$159] of DWORD;

dwR3Q_Ctrl := 0;
dwR3Q_Data := 0;
FillMemory(@structOpenStream1, $160, 0);
FillMemory(@structOpenStream2, $160, 0);

res := SkyOpen(0); if res<>0 then exit;
res := SkyGetNumAvailAdapters(AdaptersCount); if AdaptersCount = 0 then exit;
res := SkyAdapterGetHandle(0, hSkyAdapter); if res = 0 then Result := 0;

FillMemory(@dsReg, sizeof(dwReg), 0);
dwReg[0] := $208;
dwReg[1] := 1;
res := SysDriverHwRegisterGet(hSkyAdapter, dwReg, $20);
rReg := dwReg[2];

FillMemory(@dsReg, sizeof(dwReg), 0);
dwReg[0] := $208;
dwReg[1] := 0;
dwReg[2] := rReg or $40;
res := SysDriverHwRegisterSet(hSkyAdapter, dwReg, $20);

примечание:

как видите, помимо получения handle'а девайса идет установка или сброс какого-то регистра драйвера

StartDVB()

// Loads the TT-server by loading additional dll's and drivers. Then it sets up the DVB card
// Return value: true = everything loaded & card is no ready to perform tasks
// false = card could not be successfully initalized


int StartDVB(void);

внутренности:

res : DWORD;

if AdaptersCount = 0 then exit;

SomeSystemFunction1(0, 0, 0, 0);
res := SomeSystemFunction2(somestack, 0, 0, somedwvalue, 0, 0);
SomeSystemFunction3(res, 1);

примечание:

чуть позже, нужно выяснить что за системные функции

StopDVB()

// Shuts down the TT-DVB-Server regardless of how many other applications use the server!!!
// If you call this function, the server is gone..(you can restart it by calling StartDVB again)
// Return value: true = the server was shut down ; false = the server could not be shut down


int StopDVB(void);

применение:


примечание:


nothing yet / получение идентификатора карты /

int SkyAdapterGetHandle(int AdapterNumber, DWORD* AdapterHandle);

применение:


примечание:


nothing yet / получение имени адаптера /

int SkyAdapterGetName(int AdapterNumber, char[38] AdapterName);

применение:


примечание:


nothing yet / получение информации о тюнере /

int SkyAdapterTunerGet(DWORD AdapterHandle, TTunerStatus* TunerStatus, int tsSize);

применение:


примечание:


nothing yet / настройка тюнера /

int SkyAdapterTunerSet(DWORD AdapterHandle, TTunerStatus* TunerStatus, int tsSize);

применение:


примечание:


If you have any questions or some ideas how to make these toolz better
you can send it by e-mail: murphy@yandex.ru .
Copyright © 2005 aLly. All Rights Reserved.