السلام عليكم ورحمة الله ,,,
قد يعتقد الكثير أن البرمجة هي كتابة البرامج للمستخدم , وهي البرامج المرئية في الجهاز فقط
ولكن ماهو المجال الآخر في البرمجة والمسمى ( برمجة الأجهزة )
بإختصار هل سمعت عن تعاريف الأجهزة أو سواقات الأجهزة , وكيف تكتب ؟!
هل سألت نفسك كيف تبرمج الشبكات و بروتوكولات الشبكات و جدار النار والبروكسي و... وهل هي برامج exe أو dll
هل جربت يوم أن تبرمج كود يلتق صورة من كميرا الكمبيوتر , أو هل حاولت الوصول لمحتويات قرص DVD
هذا الموضوع سيفتح لك المجال في برمجة الأجهزة ,,,
لنفهم هذا النوع من البرمجة يجب أن نمر بمراحل ,, المرحلة الأولى
برمجة الأجهزة 16 بت : نظام التشغيل دوس
لو نرجع إلى أيام الشاشة السوداء للنظام الدوس , فإن الإجهزة كانت تبرمج عن طريق المقاطعات
وأتذكر أن أكثر دالة كانت تستخدم في ذلك الوقت الدالة int86 تجدها في ملف الهدر Dos.h أو BIOS.h
على حسب المترجم الذي تستخدم , المهم يمرر لهذة الدالة 3 بارمترات
الأول رقم المقاطعة , الثاني مسجلات المعالج المدخلة , الثالث مخرجات مسجلات المعالج
وتكون طريقة البرمجة بهذا الشكل :
// تعريف لمسجلات المعالج union REGS in_reg , out_reg; // القسم الأول للمسجلات العامة in_reg.h.al in_reg.h.ah in_reg.h.bl in_reg.h.bh in_reg.h.cl in_reg.h.ch in_reg.h.dl in_reg.h.dh // القسم الثاني للمسجلات العامة in_reg.x.ax in_reg.x.bx in_reg.x.cx in_reg.x.dx in_reg.x.si in_reg.x.di in_reg.x.flags in_reg.x.cflag // in_reg بعد ذلك تنفذ الدالة وتمثل مسجلات المعالج المدخلات int86(0x10, &in_reg, &out_reg); --- // out_reg بعد تنفيذ الدالة تعود مسجلات المعالج بالمخرجات
تذكر هذة الفكرة جيداً إلى الآن تعتبر صلب الموضوع ,, المهم بعد ذلك ظهرت المرحلة 2
برمجة الأجهزة 32 بت : نظام التشغيل وندوز :
ظهر النظام وندوز بأنواع جديدة من الحماية ومستويات البرمجة وخاصة برمجة الأجهزة
وتغيرت دالة برمجة الأجهزة وتحولت في وندوز إلى الدالة
DeviceIoControl
هذة الدالة لها 8 بارمترات :
1- البارمتر الأول مقبض الجهاز , البارمتر الثاني معرف العملية أو رقم العملية
2- البارمتر الثالث يمثل مؤشر إلى البيانات المدخلة , البارمتر الرابع حجم البيانات المدخلة
3- البارمتر الخامس يمثل مؤشر إلى مخرجات الدالة , السادس يمثل حجم المخرجات
أما البارمتر السابع يمثل القيمة العائدة , والبارمتر الثامن يمثل التزامن (آخر بارمترين غير مهمين )
---
والآن هل لاحظت شيء غريب ؟! وهو أن الفكرة واحدة منذ أيام نظام الدوس ولم تتغير
الدالة int86 في نظام الدوس( لها رقم مقاطعة - لها مدخلات - لها مخرجات)
الدالة DeviceIoControl في وندوز ( لها مقبض جهاز ومعرف عملية - لها مدخلات- لها مخرجات)
---
والآن أمثلة بسيطة لنتعرف على دالة برمجة الأجهزة وهي DeviceIoControl
كتبت أمثلة كثيرة في مواضيع سابقة وسؤعيد بعضها , ,, مثال على قرائة بيانات جهاز
كما تلاحظ فإننا نريد قرائة بيانات أي أننا سنقوم بإستخدام مخرجات الدالة فقط , لاحظ الكود
// تعاربف
HANDLE hDevs=(HANDLE)-1;
DISK_GEOMETRY pF={0};
DWORD cb;
// إنشاء مقبض للجهاز من خلال تمرير إسمة
hDevs = CreateFile("\\\\.\\C:", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
// قرائة بيانات من خلال الجهاز
DeviceIoControl (hDevs, IOCTL_DISK_GET_DRIVE_GEOMETRY,
NULL, 0, &pF, sizeof(pF), &cb, NULL);
// بعد تنفيذ الدالة ستحمل البنية بالمعلومات
pF.BytesPerSector = عدد البايتات في كل قطاع
pF.SectorsPerTrack= عدد القطاعات في كل تجمع
...
...بدئنا بإنشاء مقبض للجهاز وإسم الملف :C وهذا الإسم عبارة عن عن برنامج مقيم في الذاكرة
ويسمى برنامج للهاردوير وليس للمستخدم ( وهذا النوع من البرامج هو محور حديثنا )
هذا الإسم في الذاكرة يسمى رمز الجهاز ,, وهو يدل بدورة على معرف الجهاز ؟!
لاحظ هذا الجدول لرمز الأجهزة ومعرف الأجهزة :
// القرص الصلب C: = "\\Device\\HarddiskVolume1" D: = "\\Device\\HarddiskVolume2" // القرص المضغوط - السيدي F: = "\\Device\\CdRom0" //المنافذ COM1 = "\\Device\\Serial0" LPT1 = "\\Device\\Parallel0 // الأجهازة الطرفية DISPLAY1 = "\\Device\\Video0" sysaudio = "\\Device\\sysaudio" Scanner = "\\Device\\Scanner" HCD0 = "\\Device\\USB0-0" // الشبكات والبروتوكولات Tcp ="\\Device\\Tcp" Ip ="\\Device\\Ip"
بعد ذلك نستخدم الدالة DeviceIoControl ونمرر لها مقبض الجهاز ومعرف العملية
ويمثل معرف العملية IOCTL_DISK_GET_DRIVE_GEOMETRY وهو يساوي الرقم 70000
وتلاحظ أننا في قسم المدخلات كتبنا NULL و0 أي أننا لانريد إستخدام أي مدخلات
وكتبنا البنية في قسم المخرجات , وبعد تنفيذ الدالة سيتم كتابة المعلومات في محتويات البنية
--------------------
ماسبق عبارة عن توضيح لطرق التعامل مع برامج الهاردوير وكيفية الإستفادة منها
ولكن كيف يتم كتابة برامج الهاردوير وتعاريف الأجهزة وهي الملفات ذات الإمتداد vxd , drv ,sys
أولاً : تحتاج لبيئة تطوير الأجهزة وتسمى DDK ولها أكثر من إصدار أحدثها DDK 2003
المهم أنظمة وندوز مي و 2000 فما فوق تقبل DDK 2000 وهذة رابط التحميل
http://www.vckbase.com/tools/drv/win2kddk.exe
أما عن نظام وندوز 98
http://www.vckbase.com/tools/drv/98ddk.exe
بعد أن تقوم بتثبيت بيئة التطوير , فإن الترجمة وبناء ملفات المعلومات inf و تسجيل الأجهزة
سيكون بشكل يدوي من خلال نظام الدوس ويتطلب خبرة وفهم لطريقة عمل سواقات الأجهزة
ولكن الجديد في عالم البرمجة مثل حزمة DriverStudio لا تتطلب أي خبرة وتقوم ببناء
الهيكل الأساسي بكل بساطة وبطريقة أسرع ووقت أقل ( وستكون الأمثلة على هذة الحزمة )
تجد النسخة الأخيرة من DriverStudio وهي النسحة 3.0 هنا :
وإذا لم تلحق عليها ,, توجد هنا نسخ أقدم مثلا النسخة 2.5
http://www.vckbase.com/tools/drv/NuMega.Dr...io.v2.5.RC1.ZIP
----------------------------------------------
بعد أن تخزن الأدوات ,,, تابع المثال الأول >>>> تابع 2















