www.dvb2007.coo.ir

dvb2
 
الرئيسيةالرئيسية  اليوميةاليومية  مكتبة الصورمكتبة الصور  پرسشهاي متداولپرسشهاي متداول  ليست اعضاليست اعضا  گروههاي کاربرانگروههاي کاربران  جستجوجستجو  ثبت نامثبت نام  ورود  

شاطر | 
 

 برنامه نويسي پلاگين هاي ProgDVB ( مخصوص كارتهاي DVB-S )

مشاهده موضوع قبلي مشاهده موضوع بعدي اذهب الى الأسفل 
نويسندهپيام
Admin
Admin
avatar

ذكر
تعداد پستها : 2893
Age : 32
Location : dvb2
Job/hobbies : dvb2
Humor : dvb2
Registration date : 2007-08-04

Character sheet
dvb2:

پستعنوان: برنامه نويسي پلاگين هاي ProgDVB ( مخصوص كارتهاي DVB-S )   7/11/2007, 5:51 am

کلیه مطالب از وحید عزیز میباشد


قسمت اول:


براي سادگي كار ، زبان پيش ٿرض انتخابي در اينجا دلٿي مي باشد.

پلاگين هاي ProgDVB ٿايلهاي DLL خالص ويندوز هستند. بنابراين از هر كامپايلري كه بتواند

اينگونه ٿايلها را توليد نمايد مي توان استٿاده كرد.



اسكلت اصلي و استاندارد يك پلاگين ProgDVB :

براي اينكار يك پروژه ي ايجاد DLL را در دلٿي آغاز كنيد. سپس ثوابت و توابع زير را به آن

اضاٿه نماييد :

نقل قول:






library prjPlug;

uses
Windows,
Messages,
SysUtils,
Variants,
Classes;

**$R 'MDExtern.res' 'MDExtern.rc'}
const
MDAPI_GET_TRANSPONDER= $01020000;
MDAPI_SET_TRANSPONDER= $01020001;
MDAPI_GET_PROGRAMM= $01020010;
MDAPI_SET_PROGRAMM= $01020011;
MDAPI_RESCAN_PROGRAMM= $01020012;
MDAPI_SAVE_PROGRAMM= $01020013;
MDAPI_GET_PROGRAMM_NUMMER= $01020014;
MDAPI_SET_PROGRAMM_NUMMER= $01020015;
MDAPI_START_FILTER= $01020020;
MDAPI_STOP_FILTER= $01020021;
MDAPI_SCAN_CURRENT_TP= $01020030;
MDAPI_SCAN_CURRENT_CAT= $01020031;
MDAPI_START_OSD= $01020040;
MDAPI_OSD_DRAWBLOCK= $01020041;
MDAPI_OSD_SETFONT= $01020042;
MDAPI_OSD_TEXT= $01020043;
MDAPI_SEND_OSD_KEY= $01020044;
MDAPI_STOP_OSD= $01020049;
MDAPI_DVB_COMMAND= $01020060;
MDAPI_GET_SIGNAL_INFO = $01020061;
MDAPI_GET_VERSION= $01020100;

MAX_CA_SYSTEMS=32;
MAX_PID_IDS=32;

MAX_CA_SYSTEMS90=48;


var
MultiDecInstance : LongWord;
DLLInstance : LongWord;
MultiDecWindow: HWND;
MultiDecLog : BOOL ;
MultiDec_DLL_ID : integer;


type

TProgramNumberParam = record
RealNumber: Integer;
VirtNumber: Integer;
end;


TStartFilterParam = record
DLL_ID: Word;
Filter_ID: Word;
Pid: Word;
Name: Array[0..32-1] of Byte;
Irq_Call_Adresse: dword;
Running_ID: Integer;
end;


TTPCat = record
TAG: Byte;
DesLen: Byte;
CA_ID: Word;
EMM: Word;
BufferLen: Word;
Buffer: Array[0..64-1] of Byte;
end;

TTPCatio = record
TPCatAnzahl: Integer;
TPCat: Array[0..32-1] of TTPCAT;
end;


TPIDFilters = record
FilterName: Array[0..5-1] of Char;
FilterId: Byte;
PID: Word;
end;

TCA_System82 = record
CA_Typ:Word;
ECM:Word;
EMM:Word;
Provider_Id:DWord;
end;

TProgramm82 = record
Name: Array[00..29] of char;
Anbieter:Array[00..29] of char;
Land:Array[00..29] of char;
freq: DWord;
Typ: Byte;
volt: Byte;
afc: Byte;
diseqc: Byte;
srate:DWord;
qam: Byte;
fec: Byte;
norm: Byte;
tp_id: Word;
Video_pid: Word;
Audio_pid: Word;
TeleText_pid:Word;
PMT_pid:Word;
PCR_pid:Word;
ECM_PID:Word;
SID_pid:Word;
AC3_pid:Word;
TVType: Byte;
ServiceTyp: Byte;
CA_ID: Byte;
Temp_Audio:Word;
Filteranzahl:Word;
Filters: Array[00..(MAX_PID_IDS-1)] of TPIDFilters;
CA_Anzahl:Word;
CA_System82:array[0..(MAX_CA_SYSTEMS-1)] of TCA_System82;
CA_Land: Array[0..5-1] of char;
Merker:Byte;
Link_TP:Word;
Link_SID:Word;
Dynamisch:Byte;
Extern_Buffer:array[00..16-1] of char;
end;


TProgramm90 = record
Name: Array[00..29] of char;
Anbieter:Array[00..29] of char;
Land:Array[00..29] of char;
freq: DWord;
volt: Byte;
diseqc: Byte;
srate: dWord;
qam: byte;
fec: byte;
norm: Byte;
tp_id: Word;
Video_pid: Word;
Audio_pid: Word;
TeleText_pid:Word;
PMT_pid:Word;
PCR_pid:Word;
ECM_PID:Word;
SID_pid:Word;
AC3_pid:Word;
TVType: Byte;
ServiceTyp: Byte;
CA_ID: Byte;
Temp_Audio:Word;
Filteranzahl:Word;
Filters: Array[0..(MAX_PID_IDS-1)] of TPIDFilters;
CA_Anzahl:Word;
CA_System82:array[0..(MAX_CA_SYSTEMS90-1)] of TCA_System82;
CA_Land: Array[0..5-1] of char;
Merker:Byte;
Link_TP:Word;
Link_SID:Word;
Dynamisch:Byte;
Lists:array[0..12-1] of Word; // Contains 12 Favorite-Sortings
Current_i_id: Integer;
Current_o_id: Integer;
Next_i_id: Integer;
Next_o_id: Integer;
Extern_Buffer:array[00..15] of char;
end;


TDVB_COMMAND = record
Cmd_laenge: Word;
Cmd_Buffer: Array[0..64-1] of Byte;
end;

TTransponder = record
ttk: Integer;
power: Integer;
diseqc: Integer;
freq:dWord;
volt: Integer;
qam: Integer;
srate:dWord;
fec: Integer;
sync: Integer;
afc: Integer;
agc: Word;
nest: Word;
vber:dWord;
ts_id: Word;
sig:dWord;
err:dWord;
end;

function _WEP(fSystemExit:BOOL):BOOL;cdecl;
begin
_WEP:=TRUE;
end;

procedure On_Exit(MDInstance:LongWord;MDWnd:HWND;Log_Set:BOOL);cdec l;
begin

end;

procedure On_Send_Dll_ID_Name(var name:array of char);cdecl;
begin
end;

//DLLABOUT
procedure On_Menu_Select(MenuID:word);cdecl;
begin
end;

procedure On_Channel_Change(CurrentProgramm :TProgramm82 );cdecl;
begin

end;

procedure On_Hot_Key();cdecl;
begin
end;

procedure On_Rec_Play(Mode:integer);cdecl;
begin
end;

procedure On_Osd_Key( Key:char);cdecl;
begin
end;


procedure On_Start(MDInstance:Longword; MDWnd:HWND; Log_Set:BOOL ;
DLL_ID :integer; HotKey:PChar; Vers:PChar;
var ReturnValue:integer);cdecl;
begin

ReturnValue:=0;
MultiDecInstance:=MDInstance;
//SetWindowLong(form1.Handle, GWL_HWNDPARENT, MDWnd);
MultiDecWindow:=MDWnd;
MultiDecLog := Log_Set;
MultiDec_DLL_ID:=DLL_ID;
http://Filter.Filter_ID:=0;
//HotKey:='G';
بازگشت به بالاي صفحه اذهب الى الأسفل
خواندن مشخصات فردي http://dvb2.yourme.net
Admin
Admin
avatar

ذكر
تعداد پستها : 2893
Age : 32
Location : dvb2
Job/hobbies : dvb2
Humor : dvb2
Registration date : 2007-08-04

Character sheet
dvb2:

پستعنوان: رد: برنامه نويسي پلاگين هاي ProgDVB ( مخصوص كارتهاي DVB-S )   7/11/2007, 5:52 am

end;

procedure On_Filter_Close(FilterOffset : Word);cdecl;
begin
end;

exports On_Send_Dll_ID_Name name 'On_Send_Dll_ID_Name';
exports On_Start name 'On_Start';
exports On_Menu_Select name 'On_Menu_Select';
exports On_Channel_Change name 'On_Channel_Change';
exports On_Filter_Close name 'On_Filter_Close';
exports On_Exit name 'On_Exit';
exports On_Hot_Key name 'On_Hot_Key';
exports On_Osd_Key name 'On_Osd_Key';
exports On_Rec_Play name 'On_Rec_Play';

begin
end.




همانطور كه از اسكلت يك پلاگين ProgDVB كاملا مشهود است ، اين ٿايل از يك سري

callback function تشكيل شده است. براي

مثال تابع On_Channel_Change هنگامي ٿراخواني مي شود كه كاربر مشغول استٿاده از

ProgDVB كانالي را عوض كند و يا تابع

On_Menu_Select در زمانيكه كاربر روي يكي از منوهاي پلاگين هاي موجود ( نه ٿقط

پلاگين ما ) كليك نمايد ، ٿراخواني شده و

MenuID را بر مي گرداند . توسط اين ID و چك كردن آن مي توان متوجه شد كه آيا بر روي

منوهاي پلاگين ما كليك شده است يا خير.

نوشتن يك پلاگين بسيار ساده و ابتدايي :

مي خواهيم پلاگيني بنويسيم كه پس از اضاٿه شدن به منوهاي ProgDVB با كليك شدن بر

روي يكي از آيتم هاي آن يك سري از

مشخصات كانال مشغول مشاهده را توسط يك MessageBox ساده نمايش دهد.


براي ايجاد منو بايد از منوهايي شبيه به منوهاي VC استٿاده كرد به صورت زير :

ٿايل تكستي به نام MDExtern.rc ايجاد نماييد ( لازم به ذكر است كه آي دي منوها بايد در

يك رنج خاص قرار گيرند در غير اينصورت

نديد گرٿته خواهند شد ) :
نقل قول:













MDExtern.rc محتويات ٿايل







/////////////////////////////////////////////////////////////////////////////
//
// Menu
//

EXTERN MENU DISCARDABLE
BEGIN
MENUITEM "Show Main Window", 40311
END
















اكنون بايد اين ٿايل ريسورس را كامپايل نماييد (در خط ٿرمان دستور زير را تايپ كنيد):


rc.exe MDExtern.rc


اگر VC روي سيستم شما نصب باشد rc.exe به صورت پيش ٿرض موجود است. خروجي كار

ٿايل MDExtern.RES مي باشد.

اينها در حقيقت ساب منوهاي منوي اصلي پلاگين ها در ProgDVB *خواهند بود. براي اينكه

عنوان اصلي در منوها نمايش داده شود

به صورت زير عمل خواهد شد :
نقل قول:





procedure On_Send_Dll_ID_Name(var name:array of char);cdecl;
begin
name[0]:=char('V');
name[1]:=char(0); // null terminated string (C style menu!)
end;
اكنون قبل از اينكه كدي را به برنامه اضاٿه كنيم پلاگين را كامپايل نموده و سپس آنرا درون

دايركتوري progDVB* كپي نماييد. با اجرا كردن

ProgDVB ، منوي پلاگين ما به شكل زير مشاهده خواهد شد :










كد نويسي پلاگين :

يك متغير عمومي به پروژه اضاٿه نماييد :

نقل قول:




var recTProgramm82: TProgramm82;

اين متغير را در تابع زير مقدار دهي خواهيم كرد :


نقل قول:




procedure On_Channel_Change(CurrentProgramm :TProgramm82 );cdecl;
نقل قول:




begin
recTProgramm82 := CurrentProgramm;
end;
و سپس با كمك كدي ساده از آن استٿاده مي نماييم :
نقل قول:






procedure On_Menu_Select(MenuID:word);cdecl;
var
strTest : string;
begin

if MenuID<>40311 then exit;
strTest := recTProgramm82.Name + #13#10+
'ECM_PID='+inttostr(recTProgramm82.ECM_PID)+' (Decimal)';

MessageBox(0,pchar(strTest), 'From DLL', MB_OK);

end;









اكنون پروژه را دوباره كامپايل نموده و ٿايل dll را درون دايركتوري ProgDVB كپي نماييد .








نمايي از پلاگين در حال اجرا





ٿايل سورس كامل پروژه به همراه dll آن براي دانلود ضمیمه شد

بازگشت به بالاي صفحه اذهب الى الأسفل
خواندن مشخصات فردي http://dvb2.yourme.net
Admin
Admin
avatar

ذكر
تعداد پستها : 2893
Age : 32
Location : dvb2
Job/hobbies : dvb2
Humor : dvb2
Registration date : 2007-08-04

Character sheet
dvb2:

پستعنوان: رد: برنامه نويسي پلاگين هاي ProgDVB ( مخصوص كارتهاي DVB-S )   7/11/2007, 5:56 am

بازگشت به بالاي صفحه اذهب الى الأسفل
خواندن مشخصات فردي http://dvb2.yourme.net
محتوى إعلاني




پستعنوان: رد: برنامه نويسي پلاگين هاي ProgDVB ( مخصوص كارتهاي DVB-S )   

بازگشت به بالاي صفحه اذهب الى الأسفل
 
برنامه نويسي پلاگين هاي ProgDVB ( مخصوص كارتهاي DVB-S )
مشاهده موضوع قبلي مشاهده موضوع بعدي بازگشت به بالاي صفحه 
صفحه 1 از 1

صلاحيات هذا المنتدى:شما نمي توانيد در اين بخش به موضوعها پاسخ دهيد
www.dvb2007.coo.ir :: نام بخش: کارت های Dvb-
پرش به: