easy way to tune SS2
Описание SkyStar2 API (SkyDll.dll)

SkyOpen / инициализация карты /

int SkyOpen(char* Name);

применение:

int (WINAPIV* SkyOpen)(char*);

HMODULE skydll;
char SS2Name[1000];

skydll=LoadLibrary("SkyDll.dll");
(FARPROC&)SkyOpen=GetProcAddress(skydll,"SkyOpen");

if(SkyOpen(SS2Name)) return 0;

примечание:

результат выполнения = 0 если нет ошибок
Name (PChar) возвращает имя сервиса в winnt, т.е. у меня возвращает 'SKYNET'

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

SkyClose / деинициализация карты /

int SkyClose(void);

применение:

int (WINAPIV* SkyClose)(void);

HMODULE skydll;

skydll=LoadLibrary("SkyDll.dll");
(FARPROC&)SkyClose=GetProcAddress(skydll,"SkyClose");

if(SkyClose()) return 0;

примечание:

результат выполнения = 0 если нет ошибок

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

SkyGetNumAvailAdapters / получить количество установленных SS2 карт в системе /

int SkyGetNumAvailAdapters(void);

применение:

int (WINAPIV* SkyGetNumAvailAdapters)(DWORD*);

HMODULE skydll;
DWORD AdaptersCount;

skydll=LoadLibrary("SkyDll.dll");
(FARPROC&)SkyGetNumAvailAdapters=GetProcAddress(skydll,"SkyGetNumAvailAdapters"); 

if(SkyGetNumAvailAdapters(&AdaptersCount)) return 0;

примечание:

результат выполнения = 0 если нет ошибок
возвращает 1 если 1 карта в системе, и т.д.

должна вызываться после SkyOpen,

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

int SkyAdapterGetHandle(int AdapterNumber, DWORD* AdapterHandle);

применение:

int (WINAPIV* SkyAdapterGetHandle)(int, DWORD*);

HMODULE skydll;
DWORD AdapterHandle;

skydll=LoadLibrary("SkyDll.dll");
(FARPROC&)SkyAdapterGetHandle=GetProcAddress(skydll,"SkyAdapterGetHandle");

if(SkyAdapterGetHandle(0, &AdapterHandle)) return 0;

примечание:

результат выполнения = 0 если нет ошибок
AdapterNumber - порядковый номер адаптера, нумерация начинается с нуля.
AdapterHandle - handle устройства, используется в дальнейших функциях работы с картой

эта функцию нужно вызывать после SkyOpen

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

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

применение:

int (WINAPIV* SkyAdapterGetHandle)(int, char[38]);

HMODULE skydll;
DWORD AdapterHandle;

skydll=LoadLibrary("SkyDll.dll");
(FARPROC&)SkyAdapterGetHandle=GetProcAddress(skydll,"SkyAdapterGetHandle");

if(SkyAdapterGetName(0, AdapterName)) return 0;

примечание:

результат выполнения = 0 если нет ошибок
AdapterName - это CLSID идентификатор адаптера в реестре,
искать имя в адаптерах
\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}
Сетевой адаптер, имя параметра SZ_STR NetCfgInstanceId которого совпадает с AdapterName тот что нужен
и настоящее имя девайса берем из параметра SZ_STR DriverDesc

функция вызывается после SkyOpen

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

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

применение:

struct TTunerStatus
{  
   DWORD freq;   // hz
   DWORD lof;        // hz
   DWORD sr;         // ksym
   DWORD fec; // 0=auto 1=1/2 2=2/3 3=3/4 4=5/6 5=7/8 6=auto
   DWORD pol; // 0=horizontal 1=vertical;
   DWORD lnb_switch; // 0
   DWORD diseqc;     // 0=none $10002=SimpleA $10006=SimpleB
                          // $20002=Pos_A - Opt_A
                          // $20006=Pos_B - Opt_A
                          // $2000A=Pos_A - Opt_B
                          // $2000E=Pos_B - Opt_B
   DWORD u1;         // ?
   DWORD sigq;       // value 3 if tuner locked / значение 3 если тюнер залочен
   DWORD u2;         // ?
   DWORD u3;         // 1 - this value gets in time while switching tuner an another freq 
   DWORD u4;         // ?
   DWORD u5;         // ?
   DWORD sig_str;    // signal strength 0-100 (but realy there is something wrong (values like 0, 128, 255)) 
   DWORD u6;         // ?
   DWORD u7;         // ? 
   BYTE u161;   // ? u16[1] - 232 unknown  if driver < 4.3.0 / 1
   BYTE u162;   // ? u16[2] - 3 = tuner locked = sigq   / 1
   BYTE u163;   // ? u16[3] - unknown   / signal level
   BYTE u164;   // ? u16[4] - unknown   / unknown
   BYTE u165;   // ? u16[5] - 1   / unknown
   BYTE u166;   // ? u16[6] - 1   / unknown
   BYTE u167;   // ? u16[7] - signal level = u64[3]
   BYTE u168;   // ? u16[8] - value = sig_str
  DWORD u64[30];   // ? u64[3] - real tuner signal level 0-100 / реальный уровень сигнала
          // u64[1]/1000 = SNR (if drivers >= 4.3.0)
};

int (WINAPIV* SkyAdapterTunerGet)(int, DWORD*);

HMODULE skydll;
DWORD AdapterHandle;
TTunerStatus TunerStatus;

skydll=LoadLibrary("SkyDll.dll");
(FARPROC&)SkyAdapterTunerGet=GetProcAddress(skydll,"SkyAdapterTunerGet");

if(SkyAdapterTunerGet(AdapterHandle, &TunerStatus, sizeof(TunerStatus))) return 0;

примечание:

результат выполнения = 0 если нет ошибок

SkyAdapterTunerSet / настройка тюнера /

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

применение:

int (WINAPIV* SkyAdapterTunerSet)(int, DWORD*);

HMODULE skydll;
DWORD AdapterHandle;
TTunerStatus TunerStatus;

skydll=LoadLibrary("SkyDll.dll");
(FARPROC&)SkyAdapterTunerSet=GetProcAddress(skydll,"SkyAdapterTunerSet");

if(SkyAdapterTunerSet(AdapterHandle, &TunerStatus, sizeof(TunerStatus))) return 0;

примечание:

результат выполнения = 0 если нет ошибок

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.