learn

C# डॉट नेट मधून विंडोज युजर इंटरफेस असणारे फॉर्म बेस्ड अँप्लिकेशन तयार करणे.


C# डॉट नेट मधून विंडोज युजर इंटरफेस असणारे अप्लिकेशन तयार करणे.

आपण या भागात C# डॉट नेट या प्रोग्रामिंग भाषेतून डॉट नेट फ्रेमवर्कवर आधारित उपयुक्त असे फॉर्म बेस्ड अँप्लिकेशन कसे करावे ते पाहणार आहोत.

यासाठी आपण प्रथम डॉट नेट फ्रेमवर्क व सी शार्प ची महिती घेऊन एक एक स्टेप्स पाहून.

प्रथम युजर इंटरफेस डिझाईन करून प्रोग्रामिंग कसे करावे ते पाहणार आहोत.तसेच या भागात आपण तयार झालेला प्रोग्रम रन व डीबग कसा करावा हे ही शिकणार आहोत.

.. मग चला करुया सुरवात….

डॉट नेट फ्रेमवर्क :

डॉटनेट हा मायक्रोसॉफ्टने तयार  केलेला प्लँटफॉर्म आहे जो एक सोफ्टवेअर पार्ट आहे ज्यामध्ये नेहमीच्या कोडिंग प्रोब्लेम्स वर सोल्युशन म्हणून प्री कोडेड लायब्ररीचा संच दिलेला आहे.

डॉट नेट फ्रेमवर्क मध्ये कॉमन लँन्ग्वेज रन टाईम ,सिक्युरिटी,मेमरी मँनेजमेंट ,एक्सेप्शन हँण्दलींग अशा सुविधा लायब्ररी च्या माध्यमातून देण्यात आलेल्या आहेत.

प्रोग्रामिंग हे एक प्रमाणबद्ध व रचनात्मक रीतीने साकारण्यासाठी डॉट नेट मोलाची भूमिका निभावते.

यात C#.J#,VB यांसारख्या प्रोग्रामिंग भाषांचा समावेश होतो.

विंडोज अँप्लिकेशन तयार करण्यासाठी डॉट नेट फ्रेमवर्क मध्ये आपणस प्रोग्रम लिहावा लागतो.तसेच आपल्या सिस्टीम वर डॉट नेट फ्रेमवर्क इन्स्टॉल असणे गरजेचे बनते.

C # :[c -sharp]

सी शार्प ही डॉट नेट फ्रेमवर्क वर आधारित टाईप सेफ,ऑब्जेक्ट ओरियेंटेड शिकण्यास सोपी व प्रगत अशी प्रोग्रामिंग भाषा आहे.

ही C++ च्या नंतर ची प्रगत अशी प्रोग्रामिंग भाषा मानली जाते त्यामुळे त्याचे चिन्ह # हे चार + चिन्हांनी जोडलेले गेलेले असे दाखवण्यात आले आहे.

ही डॉट नेट फ्रेमवर्क वर आधरित प्रोग्रामिंग ची भाषा आहे ज्याचा वापर करून आपण फॉर्म बेस्ड विन्डो तयार करणर आहोत.

तसेच त्या विन्डो द्वारे इन्स्टॉलेशन टूल  कसे करावे हे अप्लिकेशन पाहणार आहोत.

रिक्वायरमेंट :

आपण या भागात एक विंडोज फॉर्म बेस्ड टूल कसे बनवावे ते शिकणार आहोत .आपणस असे टूल बनवायचे आहे ज्याचा वापर इन्स्टॉलेशनसाठी केला जाईल.

कसे असेल टूल : या टूल मध्ये आपली जी सेटअप फाईल असेल त्याचे फोल्डर लोकेशन मोकळ्या टेक्स्ट बॉक्स मध्ये देवू  व सायलेंट इन्स्टॉल किंवा अन इंस्टॉल करताना देण्यात येणारी पँरामिटर ड्रॉप डाऊन बॉक्स मधून सिलेक्ट करू.

आपण जो पर्याय निवडू याबरोबर त्या प्रकारच्या इन्स्टॉलेशन ची महितीही  खाली दर्शविली गेली पाहिजे अशी सुविधा देण्यात यावी.

आपण रन हे बटन दाबल्यावर प्रोसेस स्टार्ट व्हावी. जर प्रोसेस स्टार्ट झाली नसेल तर एरर मेसेज दाखवावा.

युजर इंटर फेस डिझाईन :

आता आपण टूल चे ग्राहकाला अनुसरून डिझाईन कसे तयार करावे याचा विचार करुया.

आपल्या टूल साठी आपण एक विन्डो फॉर्म तयार करावा लागेल.

त्या विन्डो मध्ये आपणस सर्वात आधी देण्यात येणारी महिती म्हणजे फोल्डर पाथ यासाठी टेक्स्ट बॉक्स द्यावा.

त्या नंतर ड्रॉप डाऊन बॉक्स व त्याच्या खाली प्रोग्रम रन करण्यासाठी बटन द्यावे.

शेवटी महिती दर्शक लेबल कोठे कोठे द्याचे ते  ठरवून कागदावर एक ले आउट तयार करणे.

त्यानुसार आपणस हवे ते कोम्पोनंट टूल बार मधून घेणे व आपले युजर इंटरफेस डिझाईन तयार करावे.

या पुढे आपण आता मायक्रोसॉफ्ट व्हिज्युअल स्टुडिओ मार्फेत  प्रोग्रम व युजर इंटरफेस कसा लिहावा ते पाहणार आहोत.

प्रोग्रामिंग प्रोसेस :

प्रथम आपण आपल्या कॉम्प्युटर वर मायक्रोसॉफ्ट व्हिज्युअल स्टुडिओ इन्स्टॉल करावे.

मायक्रोसॉफ्ट व्हिज्युअल स्टुडिओ इन्स्टॉल   व डाऊनलोड करण्यासाठी पुढील लिंक वर टिचकी मारा.->मायक्रोसॉफ्ट व्हिज्युअल स्टुडिओ इन्स्टॉल

आता आपण आपला प्रोग्रम व्हिज्युअल स्टुडिओ C # एन्व्हायर्नमेंट मध्ये लिहिणार आहोत असे अँप्लिकेशन लौंच झाल्यावर  सेट करावे.

आता आपण अँप्लिकेशन कन्सोल बेस्ड किंवा फॉर्म  बेस्ड करू शकतो .कन्सोल बेस्ड  म्हणजे यात युजर इंटरफेस विन्डो दिसत नाही कमांड प्रोम्न्ट च्या माध्यमातून प्रोग्रम रन होतो. आणि फॉर्म बेस्ड अप्लिकेशन मध्ये आपणस युजर इंटरफेस विन्डो दिसते व त्या माध्यमातून युजर अप्लिकेशन वापरू शकतो.

आता आपल्या प्रोग्रम साठी आपण प्रथम न्यू या पर्यायामध्ये जाऊन विंडोज फॉर्म अप्लिकेश हा पर्याय निवडूया.तसेच आपल्या प्रोजेक्ट ला आपण नाव ही देवू शकता.

C# new windows form

युजर इंटरफेस सेटिंग्ज :

आता आपणस हवी असेलेले एक बटन डाव्या बाजूच्या टूल बॉक्स मधून घेणे जर टूल बॉक्स दिसत नसेल तर व्ह्यू मध्ये जावून टूल बॉक्स सिलेक्ट करणे.

आता बटणावर राईट क्लिक करून प्रोपर्ती सिलेक्ट करणे त्या मध्ये बटणावर पारदर्शित करणारे टेक्स्ट हे काय असावे याची महिती टेक्स्ट या टेब समोर भरावी.

तसेच आपण फोन्ट ,रंग,व इतर सेटिंग या मधून करू शकतो. तसेच name मध्ये जाऊन आपल्या बटणाचे प्रोग्रम मधील नाव काय असेल याची महिती घेवू  शकतो. उदा: button 1.

बटणाची सेटिंग पुर्ण झाल्यावर ओक म्हणून प्रोपर्ती मधून बाहेर पडणे आता आपण विन्डोवर जेथे बटन ठेवले आहे तेथे जावून बटणावर डबल क्लिक करणे यामुळे डिझाईन विन्डो मधून आपण प्रोग्रम विंडोत जातो [frm1.cs]

व बटन प्रेस झाल्यावर काय होणे अपेषित आहेत याचा प्रोग्रम लिहिणे.

युजर इंटरफेस ऑप्शन

युजर इंटरफेस ऑप्शन

तो भाग झाल्यावर परत डिझाईन विन्डो वर येवून कोम्बो बॉक्स [ड्रॉप डाऊन बॉक्स] टेक्स्ट बॉक्स ही टूल बर मधून उचलून फॉर्म वर ठेवणे.

तसेच आपणस जेथे काही नावे हवी आहेत तेथे लेबल लावणे व लेबलच्या प्रोपर्ती मध्ये जावून तेथे काय दाखवायचे आहे ते डिस्प्ले करणे.

आता आपणस ड्रॉप डाऊन बॉक्स मध्ये काय काय दिसायला पाहिजे ते पहायचे असल्यास पुढील छायाचित्रात दाखवल्याप्रमाणे एडीट आयटम  वर क्लिक करून येणाऱ्या बॉक्स मध्ये प्रत्येक ओळीला नवीन आयटम पँरामिटर म्हणून अँड करणे.

ज्याचा वापर ई एक्स सी ला कोणते पँरामिटर पाठवायचे ते ठरवण्यास होईल.

ड्रॉप डाऊन बॉक्स मध्ये डाटा टाकणे

ड्रॉप डाऊन बॉक्स मध्ये डाटा टाकणे

नोंद : आपण दिलेल्या टेक्स्ट बॉक्स , कॉम्बो बॉक्स व विन्डो यांचा साई झ आपल्या आवश्यकतेनुसार कमी जास्त करू शकतो त्यासाठी त्यावर क्लिक करून कोपर्यात येणाऱ्या डॉट टेब चा वापर करून रीसाईझ करणे.

आता आपल्या फायनल अप्लीकेशन विन्डोला नाव व आयकॉन देण्यासाठी फॉर्म च्या विन्डो वर राईट क्लिक करून प्रोपर्ती मध्ये जाणे व टेक्स्ट मद्य एजून विन्डो ला नाव देणे.

आपण आयकॉन बदलणार असो तर आयकॉन टेब मध्ये जाऊन आपण डाऊनलोड केलेला आयकॉन ब्राऊज करून ते चित्र सिलेक्ट करून सेट करावे.

आता प्रोग्रम मध्ये जाऊन आपणस हवा तास प्रोग्रम लिहिणे यासाठी

अशा रीतीने आपले विंडोज फॉर्म बेस्ड अप्लिकेशन तयार झालेले आहे.

C # विंडोज फॉर्म बेस्ड अप्लिकेशन प्रोग्रम.

पुढील प्रोग्रम मध्ये आपण ओळीने जाऊन प्रत्येक ओळ काय काम करते ते कमेंट च्या माध्यमातून पाहणार आहोत आपणही आपल्या प्रोग्रम मध्ये आपणास हव्या त्या ओळी त्याचा उपयोग समजावून वापरू शकतो..चला प्रोग्रम मध्ये काय काय दडलेले आहे ते पाहूया….

आपण जसे युजर इंटरफेस वर बटन व इतर ऑब्जेक्ट टाकून तयार करतो  तेंव्हाच यातील बराच बेसिक कोड आपोआप मागील बाजूने तयार होत असतो.त्यात सुधारणा करून व काही बाबी नवीन टाकून आपण आपणास हावे ते काम करून घेऊ शकतो.

————————————————————-

// सुरवातीपासून उपलब्द हेडर फाईल्स

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

—-

//नंतर इन्क्लुड केलेल्या हेडर फाईल्स

using System.Diagnostics; //प्रोसेस साठी जसे की स्टार्ट प्रोसेस 

using System.Threading; // थ्रेड स्लीप फंक्शन साठी

//using System.Windows.Forms; // optional कीबोर्ड मधून डा टा पाठवण्यासाठी 

using System.IO;

using Microsoft.Win32; // रजिस्ट्री शी निगडीत महिती गोळा करण्यासाठी

—–

// Note :पुढीलपैकी काही प्रोग्रम चा भाग आपण फॉर्म तयार केल्यावर आपोआप तयार होतो.

//तसेच आपण बटन किंवा ड्रॉप डाऊन बॉक्स यावर क्लिक करून त्या संबधी तयार झालेल्या कोड सेक्शन मध्ये जाऊन हावे ते बदल करू शकतो. 

namespace WindowsFormsApplication1

{

public partial class Form1 : Form

{

        public Form1()   // प्रथम फॉर्म दर्शविला जाईल.

{

InitializeComponent();

}

// बटन दाबल्यावर होणारी प्रोसेस

        private void button1_Click(object sender, EventArgs e)

{

if (textBox1.Text.Length == 0)   // जर टेक्स्ट बॉक्स रिकामा असेल तर मेसेज द्यावा .

{

MessageBox.Show(“Please enter Driver setup path.”, “Message”); // सेटअप ईएक्ससी फाईल नसल्यास एरर मेसेज पॉप अप देणे.

  }

else

{

  // जर कोणताच पर्याय ड्रॉप डाऊन बॉक्स मधून सिलेक्ट केला नसेल तर एरर मेसेज देणे.

if (comboBox1.Text.Length == 0) // यामध्ये कॉम्बो बॉक्स मध्ये ० ही संख्या आहे म्हणजे कोणताच पर्याय निवडला गेला नाही.

{

MessageBox.Show(“Please select parameters from dropdown.”, “Message”); // मेसेज बॉक्स दाखवा व त्यात कोट मध्ये लिहिलेला मेसेज दर्शवा.

}

else

{

         //जर सर्व महिती भरलेली असेल तर पुढील प्रोसेस चालू करावी.

Directory.CreateDirectory(textBox1.Text);

StreamWriter sw = new StreamWriter(“c:\\tempmj.txt”);  //टेक्स्ट फाईलमध्ये टेक्स्ट बॉक्स मध्ये दिलेला फाईल पाथ सेव्ह करणे

sw.Write(textBox1.Text);

sw.Close(); // स्ट्रीम तयार करून त्यात डाटा भरणे व स्ट्रीम कोल्ज करणे.

// स्पेशल केस

if (comboBox1.SelectedIndex == 17)  // जर अन-इन्स्टॉलेशन करायचे असेल तर पुढील स्पेशल केस सेलेक्ट करून रजिस्ट्री मधून पाथ घेणे.

{

string regadd=”HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{Registry name any }_installer”;

string Parameter =comboBox1.Text;

textBox1.Clear();

textBox1.Text=(string)Registry.GetValue(regadd,”InstallLocation”,null); //रजिस्ट्री मधून इन्स्टॉलेशनचे लोकेशन मिळवणे.

Process p = Process.Start(textBox1.Text + “\\setup.exe”, Parameter); //सेटअप ला पेरामिटर पास करून कमांड देणे. 

}

else

{

string Parameter =comboBox1.Text; // ड्रॉप डाऊन बॉक्स मधील पँरामिटर घेणे.

Process p = Process.Start(textBox1.Text + “\\setup.exe”, Parameter); //पँरामिटर पासकरून प्रोसेस रन करणे

Thread.Sleep(10000); //प्रोसेस चालू होण्यासाठी थोडा वेळ थांबणे.

if (p.HasExited == true) // जर प्रोसेस चालू आहे का चेक करणे.

{

MessageBox.Show(“Setup.exe is not running!!”, “Error”); // जर प्रोसेस बंद पडली तर एरर मेसेज देणे.

}

}

                //युजरला प्रोसेसचे स्टेटस पाहण्यासाठी टास्क मेनेजर विन्डो ओपन करणे.

Process p2 = Process.Start(“taskmgr.exe”); //टास्क मेनेजर ओपन करणे जेणेकरून चालू प्रोसेस पाहता येईल.

}

}

}

—–

// ड्रँग आणि ड्रॉप फिचर सेट करणे.

// खालील Drop व enter  ही दोन फंक्शन्स ड्राग आणि ड्रॉप फिचर सेट करतात.

private void Drop(object sender, DragEventArgs e)

{

string[] s = (string[])e.Data.GetData(DataFormats.FileDrop, false);

int i;

for (i = 0; i < s.Length; i++)

textBox1.Text=textBox1.Text+(s[i]); // फोल्डर ड्रॉप केल्यावर त्याचा पाथ टेक्स्ट बॉक्स मध्ये दाखवणे.

}

private void Enter(object sender, DragEventArgs e)

{

if (e.Data.GetDataPresent(DataFormats.FileDrop))

e.Effect = DragDropEffects.All;

else

e.Effect = DragDropEffects.None;

}

// फॉर्म लोड होताना काय प्री सेट करावे.

private void Form1_Load(object sender, EventArgs e)

{

if (File.Exists(“C:\\tempmj.txt”)) //जर टेक्स्ट फाईल मध्ये पाथ सेट असेल तर तो आधीच टेक्स्ट बॉक्स मध्ये दाखवणे.

{

StreamReader sr =new StreamReader(“C:\\tempmj.txt”);

textBox1.Text=sr.ReadLine();  //टेक्स्ट बॉक्स मध्ये फाईलमधील डाटा भरणे

sr.Close();

}

label5.Text = ” Verification info”; //डिफॉल्ट जनरल व्हेरीफिकेशन असा मेसेज सेट करणे.

}

//ड्रॉप डाऊन बॉक्स मधील व्हेल्यू बदलल्यावर विन्डोवरील महिती आपोआप अपडेट करावी .

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

switch (comboBox1.SelectedIndex) // बॉक्स मधून किती नंबर चा पर्याय निवडला आहे ते पाहणे.

{

case 0:

label5.Text = “1]Force Install. .\n Command given is F.”; // कोणती केस आहे ते पाहून लेबल वरील टेक्स्ट बदलणे.

break;

case 1:

label5.Text = “२]Unattended and Silent Installation.\n command given is for silent installtion.”;

break;

case 17: // जर केस १७ वि निवडली तर रजिस्ट्रीमध्ये जाऊन पाथ घेणे व अन इन्स्टॉलेशन ची निगडीत कमांड रन करणे.

label5.Text = “१७]Uninstall the driver silently.\n unnstalled path from reg”;

break;

default: // अन्यथा प्री सेट मेसेज दर्शविणे.

label5.Text = ” Verification info”;

break;

}

   }

}

}

——-

आपणास संपूर्ण चालू प्रोग्रम डाऊनलोड करून घेण्यासाठी प्रोग्रम असणाऱ्या  पुढील टेक्स्ट फाईलला क्लिक करावी.

—> Instller cmd tool code.doc

प्रोग्रम बिल्ड करणे:

आपण आपला प्रोग्रम लिहून झाला की तो कंपाईल करावा लागतो.

त्यासाठी बिल्ड या मेनू ऑप्शन मध्ये जाऊन बिल्ड सोल्यूशन F6 ला किल्क करणे म्हणजे आपला प्रोग्रम कंपाईल होईल.

त्यानंतर आपणस जर कोणत्या एरर्स आल्या असतील तर आपण त्या सोडवून घ्याव्यात.

प्रोग्रम डीबग करणे :

आपणस जर एखादी चूक कोठे झाली आहे ते पहायचे असेल तर डीबग प्रोग्रम ऑप्शन मध्ये जाऊन स्टार्ट डीबगिंग[F5] या ऑप्शन ला क्लिक करणे.

व आपण एक एक स्टेप पुढे जाऊन कोणत्या स्टेप ला काय झाले ते पाहू शकतो यास सिंगल स्टेपिंग असे म्हणतात [F10,F11]

प्रोग्रम रन करणे:

आपण हिरव्या ऐरोला किल्क केल्यावर किंवा डीब गिंग संपल्यावर आपला प्रोग्रम जेथे आहे त्या जागेवर डीबग फोल्डर मध्ये बिन मध्ये आपल्या प्रोजेक्ट च्या नावाची ई एक्स सी फाईल तयार झालेली दिसेल.

  • C:\Users\Documents\Visual Studio 2008\Projects\WindowsFormsApplication1\WindowsFormsApplication1\obj\Debug\ Appplication.exe

ती ई एक्स सी आपण कोणत्याही दुसऱ्या कॉम्प्युटर मध्ये टाकून तेथे ई एक्स सी ला डबल किल्क करून आपला प्रोग्रम रन करू शकतो.

तयार केलेले टूल कसे वापरावे:

आता आपण आपल्या अप्लिकेशन मध्ये डायरेक्ट सेटअप असणारा फोल्डर माउस ने ड्रॉप  करून त्याचा पाथ पुरवावा.

नंतर ड्रॉप डाऊन बॉक्स मधून आपला पर्याय निवडावा व स्टार्ट प्रोसेस या बटणाला किल्क करावे.

या नंतर आपणास टास्क मेनेजर ओपन झालेला दिसेल व आपली इन्स्टॉलेशनची प्रोसेस चालू होईल.

याच धर्तीवर आधरित आपण आपले स्वतःचे एक अप्लिकेशन तयार करू शकतो ज्याचा वापर आपल्या काही इतर कामासाठी केला जाऊ शकेल.

आपण आता बेसिक फॉर्म बेस्ड अप्लिकेशन सी शार्प मधून कसे करावे ते पहिले आहे आपण हे नक्की करून पहा व नवीन प्रोग्रामिंग भाषा शिकण्यास सुरवात करा.

—धन्यवाद -MJ 🙂

Advertisements

लिनक्स डिव्हाईस ड्रायव्हर मराठीतून :भाग १०:डिस्प्ले डिव्हाईस ड्रायव्हर बेसिक.


आपल्या कॉम्प्युटर मधील ग्राफिक्स कार्ड किंवा प्रोसेसर मधील ग्राफिक्स संबंधीत चिपसेट यास व्हिडिओ डिव्हाईस असे म्हणतात.यांचा वापर करून आपल्या कॉम्प्युटरच्या स्क्रीनवर प्रोसेसर मार्फत चित्र पाठवले जाते.

व्हिडिओ डिव्हाईस हे डिस्प्लेवर दाखवण्यासाठी व्हिज्युअल आउटपुट डाटा तयार करतात.

लिनक्स व्हिडिओ सिस्टीम हि फ्रेम बफर लेयर्स तयार करून देऊन हार्डवेअर चेंजेस वर डिपेंडेबल नसणारी सिस्टीम सुविधा तयार करून देते.

व्हिडीओ ग्राफिक्स कार्ड चे हार्डवेअर हे वेगवेगळ्या प्रकारचे असते.त्या मेले आपणस वेगवेगळे कोडिंग करावे लागू शकते हा प्रोब्लेम टाळण्यासाठी लिनक्स मध्ये फ्रेम बफर चा लेयर तयार केला जातो.

त्याचा वापर करून अँप्लिकेशनमध्ये कोणताही बदल न करता अँप्लिकेशन्स वेगवेगळ्या हार्डवेअरवर चालू शकते.

आपण वापरात असलेले काही वेब ब्राऊजर ,व्हिडीओ प्लेयर्स अशी अँप्लिकेशन्स डायरेक्ट फ्रेमबफर वापरून ग्राफिक्स हार्डवेअरशी डाटा ट्रान्सफर ऑपरेशन करतात.

फ्रेम बफर कन्सेप्ट:

खालील चित्रात दाखवल्या प्रमाणे मुव्ही प्लेयर कॉमन फ्रेम बफर ए. पी. आय. चा वापर करून वेगवेळ्या व्हिडीओ कार्ड बरोबर डाटा ट्रान्सफर करतात.यावरून आपणास फ्रेम बफर चा फायदा काय आहे ते समजले असेलच.

x-windows सारखी काही अँप्लिकेशन्स APIचा वापर न करता डायरेक्ट हार्डवेअर शी संभाषण साधू शकतात.

फ्रेम बफर कन्सेप्ट

फ्रेम बफर कन्सेप्ट

आपल्या टर्मिनस विंडोमध्ये आपण fbset हि कमांड दिली असतात आपल्या फ्रेमबफर ड्रायव्हर मार्फत डिस्प्ले ची सेटिंग्ज आपणास पहावयास मिळतील.

यात रिझोल्यूशन ,फ्रिक्वेंसी,टायमिंग ,व्हर्टिकल सिंक ,हॉरीझोन्टल सिंक यांची सविस्तर माहिती मिळेल.

फ्रेम बफर API:

फ्रेम बफर API चा वापर करताना काही मुख्य डाटा स्ट्रक्चर माहित असणे गरजेचे आहे ती पुढीलप्रमाणे:

1)   struct fb_var_screeninfo.:या स्ट्रक्चर मध्ये डिस्प्ले स्क्रीन ची काही बदलता येणाऱ्या गोष्टी ठेवलेल्या असतात उदा:रिझोल्यूशन,मार्जिन हि सेटिंग्ज प्रोग्रामर बदलू शकतो.

2)   struct fb_fix_screeninfo :या डाटा स्ट्रक्चर मध्ये व्हिडीओ हार्डवेअर ची फिक्स माहिती ठेवलेली असते जसे कि फ्रेमबफर मेमरीचा साईझ,स्टार्टींग चा अँड्रेस.

3)   fb_cmap :हे स्ट्रक्चर फ्रेम बफरचा कलर मँप ठरवते.युजर यामार्फत रेड,ब्लु,ग्रीन [RGB]या कलर्स च्या संख्या ठरवू शकतो.

तसेच यात ट्रान्सपरन्सी सेट करण्याची हि सुविधा आहे.

फ्रेमबफर ड्रायव्हर:

आपण आपल्या डिस्प्ले बरोबर फ्रेमबफर ड्रायव्हर ने संभाषण करणार आहोत.

यात आपण फ्रेम बफर मेमरी लोकेशन बरोबर इंटरअँक्ट करणे म्हणजे डिस्प्ले वर दिसणाऱ्या कंटेंट मध्ये बदल घडवणे कारण याच फ्रेमबफर मेमेरीतील डाटा हा आपणास स्क्रीनवर दिसत असतो.

 डाटा स्ट्रक्चर्स:

struct fb_info :हे फ्रेमबफर डिव्हाईस ड्रायव्हर मधील प्रमुख डाटा स्ट्रक्चर आहे.हे स्ट्रक्चर include/linux/fb.h येथे डिफाईन केलेले असते.

struct fb_info {

/* … */

struct fb_var_screeninfo var; /* Variable screen information.

struct fb_fix_screeninfo fix; /* Fixed screen information.

/* … */

struct fb_cmap cmap; /* Color map.

/* … */

struct fb_ops *fbops; /* Driver operations.

/* … */

char __iomem *screen_base; /* Frame buffer’s virtual address */

unsigned long screen_size; /* Frame buffer’s size */

/* … */

/* From here on everything is device dependent */

void *par; /* Private area */

};

वरील स्ट्रक्चर मध्ये आपण शिकलेली स्क्रीन फिक्स इन्फो,स्क्रीन व्हेरिएबल इन्फो ,कलर मँप हे डाटा स्ट्रक्चर डिफाईन केले आहेत तसेच फाईल ऑपरेशन साठी वापरण्यात येणार fb_ops हे स्ट्रक्चर सुद्दा आहे.

स्कीन बफर चा साईझ आणि बेस अँड्रेस डिफाईन केले आहेत.

यात आपल्या डिव्हाईसशी निगडीत असलेला डाटा हा par या पोईंटरमध्ये ठेवलेला असतो.

framebuffer_alloc() हि मेथड वापरून fb_info साठी मेमरी अलोकेट केली जाते. 

fb_ops हे स्ट्रक्चर:

struct fb_ops

{

struct module *owner;

/* ड्रायव्हर ओपन करणे */

int (*fb_open)(struct fb_info *info, int user);

/* ड्रायव्हर कोल्ज करणे */

int (*fb_release)(struct fb_info *info, int user);

/* व्हेरिएबल स्क्रीन इन्फो वापरून डिव्हाईसचे पेरामीटर व्यवस्थीत आहेत का नाहीत ते चेक करणे.*/

int (*fb_check_var)(struct fb_var_screeninfo *var,

struct fb_info *info);

/* व्हिडीओ कंट्रोलर चे रेजिस्टंर सेट करणे*/

int (*fb_set_par)(struct fb_info *info);

/* कलर रेजिस्टर पँरामीटर सेट करणे. */

int (*fb_setcolreg)(unsigned regno, unsigned red,

unsigned green, unsigned blue,

unsigned transp, struct fb_info *info);

/* डिस्प्ले ब्लाँक करणे */

int (*fb_blank)(int blank, struct fb_info *info);

/* पुढील मेथड या ग्राफिक्स कार्ड चा वापर करतात. */

/* रेक्टअँगल चौकोनी एरिया हा पिक्सेलने भरून घेतो. */

void (*fb_fillrect)(struct fb_info *info,const struct fb_fillrect *rect);

/* चोकोनाचा काही भाग एका भागाकडून दुसरीकडे कॉपी करण्यासाठी */

void (*fb_copyarea)(struct fb_info *info,const struct fb_copyarea *region);

/* डिस्प्ले वर चित्र काढण्यासाठी */

void (*fb_imageblit)(struct fb_info *info,const struct fb_image *image);

/* डिस्प्ले रोटेट करण्यासाठी */

void (*fb_rotate)(struct fb_info *info, int angle);

/* डिव्हाईसशी संबंधित आय ओ सिलेक्ट इंटरफेस कमांड */

int (*fb_ioctl)(struct fb_info *info, unsigned int cmd,

unsigned long arg);

/* … */

};

fb_ops हे स्ट्रक्चर हे फ्रेम बरफ ड्रायव्हरसाठी एन्ट्री पोईंट देतात.पहिले काही फंक्शन हे ड्रायव्हर फंक्शन रन होण्यास जरुरी असतात तर काही ऑप्शनल असतात हे फंक्शन ग्राफिक्सशी संबधित असतात.

fb_ops याचे स्ट्रक्चर पुढीलप्रमाणे आहे. 

पँरामीटर चेक आणि सेट करणे:

fb_check_var() :हि मेथड डिव्हाईस वर बेसिक चेक ऑपरेशन करते ते रिझोल्यूशन बीट पर पिक्सेल ह्या व्हेल्यू चेक करते RGB फोर्मेट सेट करते.

fb_set_par():हि मेथड एल सी डी कंट्रोलरच्या  रेजिस्टरच्या सेटिंग सेट करते.यात मार्जिन सेटिंग येते.तसेच size_reg मध्ये रेझोल्यूशन सेटिंग,आणि DMA_REGमध्ये डी.एम.ए. सेट केला जातो, ज्याचा वापर डायरेक्ट मेमरी एक्सेस् साठी होतो.

कलर मोड:

सुडो [psudo] कलर आणि ट्रु [true]कलर हे दोन प्रकराचे कलर मोड आहेत.पिक्सेल व्हेल्यू पेक्षा कलर व्हेल्युला इंडेक्स केले असता आपण आपल्या फ्रेम बफर मेमरीची जागा वाचवू शकतो.

त्यासाठी आपणस आपले हार्डवेअर कलर सेट [palette]ला सपोर्ट देणारे हवे.

एल सी डी मध्ये १६ बीट /पिक्सेल आणि RGB565 फोर्मेट वापरतात याचा अर्थ fb_check_var() फंक्शन बीट ऑफसेट व्हेल्यू रेड, ग्रीन ,ब्ल्यू साठी अनुक्रमे ११,५,० असे घेतात .

[०-५ (५): ब्ल्यू,५-११(६): ग्रीन,११-१६[५]:रेड]

fb_set_par() फंक्शन्स अल्फा ब्लेंडिंग चा वापर करून पिक्सेल व्हेल्यू आणि बँकग्राउंड हे मिक्स करते.

RGB नी एनकोडिंगसाठी वापरलेली बीट लेन्थ [५+६+५=१६] यास कलर डेप्थ म्हणतात.याचा वापर करून फ्रेमबफर ड्रायव्हर आपल्या कॉम्प्युटर मधील बुट लोगो इमेज डिस्प्लेवर दाखवतात.

स्क्रीन ब्लेन्किंग:

fb_blank() हे फंक्शन डिस्प्ले ब्लेन्किंग आणि अन –ब्लेन्किंगला सपोर्ट करते.हि सुविधा पॉवर मेनेजमेंट साठी वापरली जाते.

आपला डिस्प्ले १० मिनिटासाठी ब्लेंक ठेवण्यासाठी setterm -blank 10 हि कमांड वापरावी.

हि कमांड CTRL_REG मध्ये ब्लेन्किंग साठीची व्हेल्यू सेट करून fb_blank() हे फंक्शन कॉल करते.आणि डिस्प्ले ब्लेंक करते.

एक्सेलीरेटेड मेथड:

एक्सेलीरेटेड मेथड या मेथड व्हिडीओ आणि ग्राफिक्स ची मोठी मोठी ऑपरेशन्स करण्यासाठी वापरतात.

सिस्टिम मध्ये डिस्प्ले वर ब्लेंडिंग ,स्ट्रेचिंग ,बीट मेप मुव्ह करणे या सारख्या गोष्टी करण्यासाठी ग्राफिक्स हार्डवेअर असणे गरजेचे आहे.

fb_ops या स्ट्रक्चर मध्ये आपण एक्सेलीरेटेड मेथड ची लिस्ट पहिली आहेच.

यामध्ये ग्राफिक्स कार्ड चे स्पेशल सुविधा आणि सुधारणांचा वापर करून अधिक चांगले चित्र स्क्रीनवर पाहता येते.

fb_imageblit() मेथड डिस्प्लेवर इमेज तयार करते जर आपल्या सिस्टीम मध्ये ग्राफिक्स कार्ड नसेल तर फेम बफर ड्रायव्हर cfb_imageblit() हे त्याच मेथड साधे फंक्शन रन करतो.

हे फंक्शन पण तेच काम करते पण हे ग्राफिक्स हार्डवेअर ची पॉवर वापरात नाही.आपल्या स्क्रीनवर बुट इमेज आणताना हे फंक्शन वापरले जाते.

fb_copyarea() हे फंक्शन स्क्रीनचा काही भाग एका भागाकडून दुसरीकडे कॉपी करण्यास वापरले जाते. fb_fillrect()हे फंक्शन स्कीनचा काही भाग पिक्सेल रेषांनी भारावला जातो.

फ्रेमबफर कडून डायरेक्ट मेमरी एक्सेस :

DMA इंजिन सिस्टीम मेमरीवरून फ्रेमचा डाटा घेवून प्रोसेसर मार्फत प्रोसेस करून तो ग्राफिक्स डाटा स्क्रीनवर दाखवला जातो.

डिस्प्ले च्या रिफ्रेश रेट वर DMA चा रेट अवलंबून असतो.

फ्रेमबफर कोहरंट DMA अक्सेस राखून ठेवल्यासाठी myfb_probe()फंक्शन मध्ये dma_alloc_coherent()मेथड वापरली जाते.

myfb_set_par() मेथडने DMA चा अड्रेस कंट्रोलरच्या DMA_REG या रेजिस्टंर मध्ये लिहिला जातो .

जेंव्हा ड्रायव्हर myfb_enable_controller() फंक्शन वापरून DMA चालू करतो तेंव्हा कंट्रोलर डायरेक्ट मेमरी अक्सेस चा वापर करून पिक्सेल डाटा फ्रेमबफर कडून घेऊन डिस्प्लेवर दाखवतो.

कॉन्ट्रास्ट आणि ब्राईटनेस :

एल सी डी कंट्रोलर CONTRAST_REG रेजिस्टर चा वापर करून  कॉन्ट्रास्ट कंट्रोल करतो.

प्रोसेसर जनरल पर्पज इन्पुट आउटपुट लाईन चा वापर करून ब्राईटनेस कंट्रोल करतो.

backlight_device_register() या रेजिस्टर चा वापर करून बेक लाईट कंट्रोल करता येते.

डिस्प्ले ड्रायव्हरवर पुढे अभ्यास करण्यासाठी पुढील लिंकला भेट द्या.:

  • लिनक्स फ्रेमबफर प्रोजेक्ट ची लिंक:
    •  www.linux-fbdev.org
    • आपल्या लिनक्स सिस्टिम मधील फ्रेमबफर ड्रायव्हर चे लोकेशन:
      •  drivers/video/*fb.c
      • फ्रेमबफर स्केलेटन ड्रायव्हर:
      • linux/drivers/video/skeletonfb.c

डिस्प्ले ड्रायव्हर सारांश:

कर्नेल इंटरफेस साठी लागणारी डिस्प्ले डिव्हाईस ड्रायव्हर ची फंक्शन्स पुढीलप्रमाणे:

register_framebuffer() फ्रेमबफर डिव्हाईस रजिस्टर करणे.
unregister_framebuffer() फ्रेमबफर डिव्हाईस मोकळे करणे.
framebuffer_alloc() fb_info स्ट्रक्चर साठी मेमरी अलोकेट करणे.
framebuffer_release() अलोकेट केलेली मेमरी मोकळी करणे.
fb_alloc_cmap() कलर मँप अलोकेट करणे.
fb_dealloc_cmap() कलर मँप मोकळा करणे
dma_alloc_coherent() DMA चे मँपिंग करून मेमरी अलोकेट करणे.
dma_free_coherent() DMA बफर ची मेमरी मोकळी करणे.

 

अशा तऱ्हेने आपण डिस्प्ले डिव्हाईस ड्रायव्हर बेसिक कन्सेप्ट शिकला आहात आता आपण सर्व बेसिक डिव्हाईस ड्रायव्हर शिकला आहत आता आपणस प्रोग्रमिंग चा उत्साह नक्कीच आला असेल…

अशा तऱ्हेने आपण लिनक्स डिव्हाईस ड्रायव्हर चे १० भाग पूर्ण केले आहेत आता तुम्हाला सर्व डिव्हाईस ड्रायव्हर नक्कीच समजले असतील यात शंका नाही.

या भागाने मी बेसिक लिनक्स डिव्हाईस ड्रायव्हर मराठीतून या प्रकल्पाची सांगता करत आहे.यापुढे सखोल लिनक्स बद्दल लिहणार आहे. आपला असाच उत्स्फूर्त प्रतिसाद राहो ही इच्छा.

आपणास हा भाग कसा वाटला ते नक्की कळवा.

“लिनक्स मराठीतून “ च्या पुढील भागाला भेट देण्यासाठी येथे टिचकी मारा:

भाग १]लिनक्सची ओळख आणि उबुंटू इन्स्टॉलेशन.

भाग २]लिनक्सची जान आणि शान टर्मिनलची ओळख आणि vi एडीटर.

भाग 3]लिनक्स कर्नेल आणि डिव्हाईस ड्रायव्हर ची ओळख.

भाग ४]डिव्हाईस ड्रायव्हरचा हँलो वल्ड प्रोग्रम.

भाग ५]डिव्हाईस ड्रायव्हरचा पँरामिटर पासिंग व प्रोसेस संबन्धित प्रोग्रम.

भाग ६ ]कँरेक्टर डिव्हाईस ड्रायव्हर बेसिक

भाग ७] कँरेक्टर डिव्हाईस ड्रायव्हर फाईल ऑपरेशन्स.

भाग ८ ]पी. सी. आय. डिव्हाईस ड्रायव्हर बेसिक

भाग ९ ]यु. एस. बी. डिव्हाईस ड्रायव्हर बेसिक कन्सेप्ट.

भाग १०]डिस्प्ले डिव्हाईस ड्रायव्हर बेसिक.

धन्यवाद -MJ 🙂

लिनक्स डिव्हाईस ड्रायव्हर मराठीतून :भाग ९:यु. एस. बी. डिव्हाईस ड्रायव्हर बेसिक कन्सेप्ट.


आपण पेन ड्राईव्ह, माउस ,कि बोर्ड ,हेड फोन इत्यादी अनेक डिव्हाईस आपल्या संगणकास जोडण्यासाठी यु.एस बी पोर्ट वापरतो.

या पोर्ट द्वारे आपण आपल्या प्रोसेसर शी संभाषण करीत असतो.हे अनेक डिव्हाईस यु.एस.बी.[युनिव्हर्सल सिरियल बस] या बसचा वापर करून सिरीयल पद्धतीने डाटा ट्रान्सफर करतात.

[यु.एस.बी. २.० आणि ३.० बद्दल जाणून घेण्यासाठी येथे टिचकी मारा]

मागील भागात आपण करेक्टर आणि पी सी आय साठीचे डिव्हाईस ड्रायव्हर पाहिलेत या भागात आपण काहीतरी मस्त शिकणार आहोत एकदम लाईव्ह डिव्हाईस ड्रायव्हर…

यु.एस.बी डिव्हाईस ड्रायव्हरची रचना:

यु.एस.बी होस्ट कंट्रोलर हा प्रमुख असतो आणि तो प्रत्येक यु.एस.बी डिव्हाईसला काही डाटा सेंड करण्यास आहे का ते विचारतो.

कोणताही यु.एस.बी डिव्हाईस हा होस्ट कंट्रोलरला विचारल्याशिवाय डाटा ट्रान्सफर करू शकत नाही.

सिस्टीम मध्ये यु एस बी होस्ट साठी यु एस बी होस्ट कंट्रोलर ड्रायव्हर तर यु एस बी डिव्हाईस साठी यु एस बी क्लाइन्ट ड्रायव्हर असतो.

यु एस बी कोअर हा या दोघांनाही लागणारे रूटीनस् आणि स्ट्रक्चर पुरवतो. यु एस बी कोअर हा ड्रायव्हर सिस्टीमचा कोअर विभाग आहे.

कर्नेलचा हेल्पर थ्रेड khubd हा सर्व पोर्ट वर लक्ष ठेऊन कोणत्या पोर्ट वर काय बदल झालेले आहेत याची माहिती घेत असतो.

युजरस्पेस मधून यु एस बी डिव्हाईस ला अक्सेस करण्यासाठी यु एस बी फाईल सिस्टीम usbfs हि वापरतात.

युजर /dev ,/sys मधून हि यु एस बी डिव्हाईस बद्दल काही माहिती घेवू शकतो.

या संबधी संपूर्ण माहिती दर्शवणारी खालील आकृती पहावी.

यु.एस.बी डिव्हाईस ड्रायव्हरची रचना

यु.एस.बी डिव्हाईस ड्रायव्हरची रचना

यु.एस.बी बस चे काही फीचर्स: व्हिडीओ आणि ऑडीओ डाटा पाठवण्यासाठी डिव्हाईस काही फिक्स बँन्डविड्थ मागवू शकतो.

तसेच यु एस बी प्रोटोकॉल मध्ये जे कॉमन जनरल डिव्हाईस असतात त्यांसाठी काही खास ड्रायव्हर लिहायची गरज नसते.

उदा:कि बोर्ड,माउस,नेटवर्क डिव्हाईस काही खास डिव्हाईस साठी आपणस खास ड्रायव्हर लिहावा लागतो.

लिनक्स सिस्टीम हि दोन प्रकारच्या यु एस बी ड्रायव्हर ला सपोर्ट करते.

  • एक जो सिस्टम मध्ये असतो [यु एस बु डिव्हाईस ड्रायव्हर]
  • दुसरा जो डिव्हाईस मध्ये असतो [यु एस बी गँजेटस् ड्रायव्हर]

आता आपल्या प्रयोगासाठी एक पेन ड्राईव्ह घ्या आणि तो आपल्या संगणकाला जोडा.

आपल्या सिस्टीमला जोडलेले यु एस बी डिव्हाईस ऑपरेटिंग सिस्टिमला कळला का नाही ते  पाहण्यासाठी lsusb कमांड टर्मिनस मध्ये वापरावी.आता तुम्हाला पेन ड्राईव्हची एन्ट्री झालेली दिसेल.

पेन ड्राईव्हची एन्ट्री

पेन ड्राईव्हची एन्ट्री

आपल्या पेन ड्राईव्ह संबधित सर्व माहिती पाहण्यासाठी lsusb –v  हि कमांड वापरावी.

पेन ड्राईव्ह संबधित सर्व माहिती

पेन ड्राईव्ह संबधित सर्व माहिती

यात आपल्या पेन ड्राईव्हचा उत्पादक, त्याचे नाव ,त्याचा आय डी प्रोडक्टचे नाव आणि त्याचा आय डी अशी माहिती मिळेल.

माझ्या पेन ड्राईव्ह चा व्हेंडर आय डी आणि प्रोडक्ट आय डी  0x0781,0x5567 असा मिळाला.याचा वापर आपण ड्रायव्हर लिहण्यास करणार आहोत.

[नोंद :या माहितीत D=डिव्हाईस  ,C=कॉन्फिगरेशन  ,I=इंटरफेस  E =एन्डपोईंट यांचा संदर्भ पुढे येणारच आहे.]

आता आपण आपला पहिला बेसिक यु एस बी ड्रायव्हर लिहूया:

#include <linux/module.h>

#include <linux/kernel.h>

#include <linux/usb.h>

static int pen_probe(struct usb_interface *interface, const struct usb_device_id *id)

{

printk (KERN_INFO “Pen drive(%04X:%04X) plugged\n”, id->idVendor, id->idProduct);

return 0;

}

static void pen_disconnect(struct usb_interface *interface)

{

printk(KERN_INFO “PEN drive removed \n”);

}

static struct usb_device_id pen_table[]=

{

{ USB_DEVICE(0x0781,0x5567)},

{}

};

MODULE_DEVICE_TABLE (usb, pen_table);

static struct usb_driver pen_driver =

{

.name = “pen_driver”,

.id_table = pen_table,

.probe = pen_probe,

.disconnect = pen_disconnect,

};

static int __init pen_init(void)

{

return usb_register(&pen_driver);

}

static void __exit pen_exit(void)

{

usb_deregister(&pen_driver);

}

module_init(pen_init);

module_exit(pen_exit);

MODULE_LICENSE(“GPL”);

MODULE_AUTHOR (“MJ”);

MODULE_DESCRIPTION(“USB PEN REGISTRATION DRIVER”);

याचे स्ट्रक्चर करेक्टर डिव्हाईस ड्रायव्हर सारखेच आहे यात डिव्हाईस फाईल मधून रजिस्टर किंवा अन रजिस्टर न् करता आपण हार्डवेअर वापरणार आहोत.त्यासाठी usb_register आणि usb_deregister हे यु एस बी चे API वापरलेल आहेत.

यात प्रोब आणि डीसकनेक्ट सोबत सस्पेन्ड आणि रिझ्युम हि फंक्शन्स पण गरज पडल्यास वापरू शकतो त्यामुळे जेंव्हा नको असेल तेंव्हा आपला डिव्हाईस सस्पेन्ड मोड मध्ये जाईल आणि परत हवा असेल तेंव्हा रिझ्युम होईल.

डिव्हाईस ऑटोमॅटिक डिटेक्ट होण्यासाठी डिव्हाईस टेबल तयार करून त्यात आपल्या डिव्हाईसचे आय डी पास केले आहेत त्यामुळे आपला डिव्हाईस जोडला कि हा ड्रायव्हर आपोआप चालू होईल.

यु एस बी डिव्हाईस साठी या टेबल मध्ये पहिले पँरामीटर हे usb हे पास करावे लागते.त्यानंतर आपण आपल्या डिव्हाईस आय डी टेबलचे नाव पास करू शकतो.

पेन ड्राईव्ह प्लग केल्यावर प्रोब फंक्शन चालू होइल आणि पेन ड्राईव्ह काढून टाकल्यावर डिस्कनेक्ट फंक्शन रन होईल.

हा प्रोग्राम रन करण्यासाठी प्रथम या प्रोग्रामसाठी मेक फाईल तयार करावी.

नंतर make कमांड वापरून कंपाईल करून .ko फाईल तयार करणे.

lsmod वापरून आपले नवीन मोड्युल लोड करणे.

पण याआधी आपल्या सिस्टीम मध्ये आधीपासूनच असलेले यु एस बी चे मोड्युल [usb-storage] कडून टाकावे लागेल त्यासाठी rmmod usb-storage हि कमांड वापरून ते मोड्युल सिस्टीम मधून काढून टाकावे.

आता आपला पेन ड्राईव्ह कनेक्ट करावा.

आणि dmesg कमांड रन करावी.

नंतर पेन ड्राईव्ह काढून टाकावा आणि परत dmesg कमांड रन करावी.

प्रोब आणि डीसकनेक्ट हे दोन्ही फंक्शन्स रन होऊन आलेले आउटपुट

प्रोब आणि डीसकनेक्ट हे दोन्ही फंक्शन्स रन होऊन आलेले आउटपुट

आपणस आपले प्रोब आणि डीसकनेक्ट हे दोन्ही फंक्शन्स रन होऊन आउटपुट आलेले दिसेल.आता आपणस खरा मस्त काम करणार ड्रायव्हर तयार केल्याची मजा नक्कीच आली असेल…

आता आपण पुढे  यु.एस.बी डिव्हाईस ड्रायव्हरची आणखीन मस्त महिती मिळवून  त्याचा प्रोग्राम लिहण्यासाठी वापर करुया.

त्यासाठी आपण  यु.एस.बी डिव्हाईस च्या अंतर्गत बाबींचा विचार करुया.

 यु.एस.बी डिव्हाईस ड्रायव्हरची रचना:

यु.एस.बी डिव्हाईस ड्रायव्हरची रचना

यु.एस.बी डिव्हाईस ड्रायव्हरची रचना

वरील चित्रात यु एस बी ड्रायव्हर हा कर्नेल ची सिस्टम आणि हार्डवेअर मध्ये असतो.

यु एस बी कोअर हा यु एस बी ड्रायव्हरला हार्डवेअर वापरण्यासाठी एक्सेस देतो.

यु एस बी स्ट्रक्चर बद्दल आपणस माहिती पुढील लिंक वर मिळेल: www.usb.org

आता एक महत्वाची गोष्ट : यु एस बी ड्रायव्हर हे संपूर्ण यु एस बी डिव्हाईसला जोडले न् जाता फक्त यु एस बी इंटरफेसला जोडले जातात.

यु एस बी ऐन्डपोईंट आत[IN endpoint] किंवा बाहेर [out endpoint] डाटा ट्रान्सफर करण्यसाठी वापरतात. हे डाटा ट्रान्सफर एकाच दिशेने पाईप मार्फेत होते.

 

यु एस बी स्ट्रक्चर

यु एस बी स्ट्रक्चर

यु एस बी ऐन्डपोईंटचे चार प्रकार पडतात:

कंट्रोल:डिव्हाईस कॉन्फिगर कारणासाठी व डिव्हाईसची माहिती मिळवण्यासाठी तसेच कमांड पाठवून डिव्हाईसचे स्टेट्स पाहण्यासाठी.शक्यतो डिव्हाईसमध्ये endpoint 0 हा हे काम पार पडतो.हा एकमेव एन्डपोईंट आहे जो दोन्ही दिशांना डाटा पाठवतो.

इंट्रप्ट:हा ऐन्डपोईंट थोडाच डाटा काही ठराविक अंतराने पाठवण्यास होतो हा प्रामुख्याने डाटा पाठवून माउस किबोर्ड सारखे डिव्हाईस कंट्रोल करण्यास्तव वापरतात.

बल्क:हा ऐन्डपोईंट फारच जास्त डाटा ट्रान्सफर करण्यासाठी वापरतात.

जास्त डाटा कोणत्याही डाटाचा लॉस्ट न होता व गरज पडल्यास जास्त वेळ घेऊन डाटा पाठवण्यासाठी हा ऐन्डपोईंट वापरतात.प्रिंटर ,नेटवर्क कार्ड यासाठी हा ऐन्डपोईंट वापरतात .

आयसोक्रोनस:हा ऐन्डपोईंट ऑडीओ व्हिडीओ डिव्हाईस मध्ये जास्त डाटा पाठवण्यासाठी होतो यात डाटा लॉस्ट ची पर्वा न करता सतत डाटा चा प्रवाह चालू ठेवला जातो. इंट्रप्ट व आयसोक्रोनस ऐन्डपोईंट हे काही ठराविक वेळेला डा टा पाठवण्यासाठी सतत सेट केले जातात

यु एस बी ऐन्डपोईंट हे struct usb_host_endpoint या स्ट्रक्चर मध्ये ठेवले जातात व या ऐन्डपोईंट ची माहिती struct usb_endpoint_descriptor मध्ये साठवली जाते.

त्यातील काही महत्त्वाचे फीचर्स:

bEndpointAddress :हा डाटा इनपुट असणार का आउटपुट हे सांगते यावरून डाटा सिस्टिम ला जाणार का डिव्हाईस ला जाणार ते समजते.

bmAttributes :या द्वारे ऐन्डपोईंट हा कंट्रोल ,बल्क ,इंट्रप्ट, आयसोक्रोनस या पैकी कोणता आहे ते समजते.

wMaxPacketSize :या मुळे ऐन्डपोईंट द्वारे जास्तीत जास्त किती साईझ हाताळली जाऊ शकते ते समजते.

bInterval :यामुळे इंट्रप्ट रिक्वेस्ट चा वेळ समजतो.

ऐन्डपोईंटहे एकत्रितपणे इंटरफेसमध्ये गुंडाळलेले असतात.

डिव्हाईस एकाच वेळी अनेक इंटरफेस वापरू शकतात यु एस बी इंटरफेसला आपल्या नेहमीच्या सेटिंग सह आणखी हि काही सेटिंग्ज असू शकतात .

प्रथम इंटरफेस हे प्राथमिक सेटींग्स वापरतात काही वेळा दुसऱ्या पद्धतीने कंट्रोल करण्यासाठी अल्टरनेटिव्ह सिटींग वापरता.

त्याची माहिती usb_interface या स्ट्रक्चरमध्ये ठेवली जाते. हे इंटरफेस कॉन्फिगरेशन च्या रुपात गुंडाळलेले असतात.

रचनात्मक सारांश

रचनात्मक सारांश

सारांशाने कॉन्फिगरेशन म्हणजे डिव्हाईसचे प्रोफाईल ,इंटरफेस हे डिव्हाईसची फंक्शन्स ,एन्ड पोईंट म्हणजे डाटा ट्रान्सफर करणारी पाईप.

  • डिव्हाईसला एक किंवा अनेक कॉन्फिगरेशन असतात.
  • कॉन्फिगरेशनमध्ये एक किंवा अनेक इंटरफेस असतात.
  • इंटरफेसमध्ये एक किंवा अनेक सेटिंग्ज असतात.
  • इंटरफेसमध्ये एक किंवा अनेक एन्डपोईंट असतात. 

यु एस बी डिव्हाईस नंबर:

पहिला यु एस बी डिव्हाईस हा रूटहब असतो त्यास यु एस बी कोअर ने एक नंबर दिलेला आहे.

त्यानंतर येतो तो पोर्ट नंबर ज्या पोर्ट ला डिव्हाईस जोडला आहे तो पोर्ट.

त्यानंतर कॉन्फिगरेशन नंबर आणि नंतर इंटरफेस नंबर

उदा तो पुढीलप्रमाणे दर्शवतात : 2-1:1.0

यु एस बी अर्ब्स :[USB Urbs]

कर्नेल हा यु एस बी डिव्हाईस सोबत यु एस बी रिक्वेस्ट ब्लॉक च्या द्वारे संभाषण करतो.

यु एस बी अर्ब्स हा एन्ड पोईंट सोबत डाटा पाठवण्यासाठी आणि घेण्यासाठी वापरतात.

यु आर बी पुढीलप्रमाणे काम करतात:

  • यु एस बी डिव्हाईस ड्रायव्हर यु आर बी तयार करतात.
  • यु एस बी डिव्हाईसला एन्डपोईंट नेमला जातो.
  • यु आर बी हा डिव्हाईस ड्रायव्हरचा वापर करून यु एस बी कोअर मध्ये नोंद केला जातो.
  • त्यानंतर यु एस बी कोअर  त्याची नोंद यु एस बी होस्ट कंट्रोलर ड्रायव्हर मध्ये करतो
  • यु एस बी होस्ट कंट्रोलर हा प्रोसेस करून यु एस बी डाटा ट्रान्सफर करतो.
  • जेंव्हा यु आर बी पूर्ण होते यु एस बी होस्ट कंट्रोलर हा यु एस बी डिव्हाईस ड्रायव्हरला त्याची नोंद पाठवतो.

#include <linux/module.h>

#include <linux/kernel.h>

#include <linux/usb.h>

static struct usb_device *device;

static int pen_probe(struct usb_interface *interface, const struct usb_device_id *id)

{

struct usb_host_interface *iface_desc;

struct usb_endpoint_descriptor *endpoint;

int i;

iface_desc = interface->cur_altsetting;

printk (KERN_INFO “Pen i/f %d now probed:(%04X:%04X)\n”,iface_desc->desc.bInterfaceNumber, id->idVendor, id->idProduct);

printk(KERN_INFO “ID->bNumEndpoints: %02X\n”,iface_desc->desc.bNumEndpoints);

printk(KERN_INFO “ID->bInterfaceclass: %02X\n”, iface_desc->desc.bInterfaceClass);

for(i=0; i < iface_desc->desc.bNumEndpoints; i++)

{

endpoint = &iface_desc->endpoint[i].desc;

printk(KERN_INFO “ED[%d]->bEndpointAddress: 0x%02X\n”,i, endpoint->bEndpointAddress);

printk(KERN_INFO “ED[%d]->bmAttributes: 0x%02X\n”, i, endpoint->bmAttributes);

printk(KERN_INFO “ED[%d]->wMaxPacketSize: 0x%04X (%d)\n”,i, endpoint->wMaxPacketSize, endpoint-> wMaxPacketSize);

}

device = interface_to_usbdev(interface);

return 0;

}

static void pen_disconnect(struct usb_interface *interface)

{

printk(KERN_INFO “Pen i/f %d now disconnected \n”,interface->cur_altsetting->desc.bInterfaceNumber);

}

static struct usb_device_id pen_table[]=

{

{ USB_DEVICE(0x0781,0x5567)},

{}

};

MODULE_DEVICE_TABLE (usb, pen_table);

यु एस बी इन्फोर्मेशन ड्रायव्हर :

static struct usb_driver pen_driver =

{

.name = “pen_driver”,

.id_table = pen_table,

.probe = pen_probe,

.disconnect = pen_disconnect,

};

static int __init pen_init(void)

{

return usb_register(&pen_driver);

}

static void __exit pen_exit(void)

{

usb_deregister(&pen_driver);

}

module_init(pen_init);

module_exit(pen_exit);

MODULE_LICENSE(“GPL”);

MODULE_AUTHOR (“MJ”);

MODULE_DESCRIPTION(“USB PEN Info DRIVER”);

वरील प्रोग्रॅम मध्ये struct usb_interface हा हेन्डेल वरून आपणास हवी ती माहिती घेतली आहे प्रोब आणि डीस कनेक्ट हे सुद्धा प्रती इंटरफेससाठी रन होतात आणि तेच त्यांचे पहिले पँरामीटर असतात.

आणि कंटेनर डिव्हाईस हेंडेल म्हणून  interface_to_usbdev हे फंक्शन वापरतात.

हा प्रोग्राम रन केल्यावर आपणस आपल्या डिव्हाईस संबंधित सर्व डिटेल माहिती उपलब्द होईल.

अशा तऱ्हेने आपण यु. एस. बी. डिव्हाईस ड्रायव्हर बेसिक कन्सेप्ट शिकला आहात आता मस्त प्रोग्रामिंग चालू करा जोमात…

आपणास हा भाग कसा वाटला ते नक्की कळवा.

“लिनक्स मराठीतून “ च्या पुढील भागाला भेट देण्यासाठी येथे टिचकी मारा:

भाग १]लिनक्सची ओळख आणि उबुंटू इन्स्टॉलेशन.

भाग २]लिनक्सची जान आणि शान टर्मिनलची ओळख आणि vi एडीटर.

भाग 3]लिनक्स कर्नेल आणि डिव्हाईस ड्रायव्हर ची ओळख.

भाग ४]डिव्हाईस ड्रायव्हरचा हँलो वल्ड प्रोग्रम.

भाग ५]डिव्हाईस ड्रायव्हरचा पँरामिटर पासिंग व प्रोसेस संबन्धित प्रोग्रम.

भाग ६ ]कँरेक्टर डिव्हाईस ड्रायव्हर बेसिक

भाग ७] कँरेक्टर डिव्हाईस ड्रायव्हर फाईल ऑपरेशन्स.

भाग ८ ]पी. सी. आय. डिव्हाईस ड्रायव्हर बेसिक

धन्यवाद -MJ 🙂