سؤال

لدي حاليًا تمرير بطاقة USB متصلة بجهاز Linux مضمن ومن ما يمكنني قوله ومن ما قمت بالبحث عنه كوحة المفاتيح ، ويدخل جميع البيانات كما لو كنت أكتب. الآن لدي برنامج نصي Perl يأخذ كل هذه البيانات ويحفظه إلى ملف. المشكلة الوحيدة هي أنه من المعروف فقط أن تأخذ البيانات عند تشغيل البرنامج النصي Perl في المقدمة على خلاف ذلك ، حيث يتم إدخال "لوحة المفاتيح".

سؤالي هو كيف يمكنني جعل هذه البطاقة تمرير تشغيل البرنامج النصي في كل مرة تقرأ فيها الإدخال؟ أو هل يمكنني التقاط البيانات بطريقة أو بأخرى باستخدام تطبيق يعمل في الخلفية. IE في برنامج C ++ ، الذي يعمل في الخلفية ، هل يقرأ CIN أي مدخلات للجهاز؟

لم أتعامل مع قارئ انتقاد البطاقة ، لذا لست متأكدًا بنسبة 100 ٪ من كيفية عملهم.

أي اقتراحات حول هذا سيكون موضع تقدير!

هل كانت مفيدة؟

المحلول

لدي فكرة ، لكنها عامة للغاية.

هل يمكنك باستمرار مراقبة البيانات في برنامج آخر ، وتخزينها ، ثم قم بتنشيط النتائج في البرنامج النصي Perl عندما يصل المخزن المؤقت إلى حجم معين أو يذهب لفترة معينة من الزمن دون نشاط؟ إذا قمت بتنشيطه ، فلن تضطر إلى تعديل البرنامج النصي Perl الخاص بك ، لأنه سيظل على stdin.

لذلك ، سيكون هكذا:

برنامج المراقبة -> يجمع البيانات -> الأنابيب في برنامج Perl الخاص بك

آمل أن تكون هذه الفكرة مفيدة.

-بريان ج. ستينار-

نصائح أخرى

لقد فعلت هذا بالضبط تقريبًا (باستثناء قارئ الباركود USB الذي ظهر كوحة مفاتيح).

يحتوي نظامي على قاعدة Hotplug USB مخصصة تكتشف جهاز USB عندما يتم توصيله بناءً على البائع ومعرف المنتج. هذه القاعدة تخلق ارتباطا مع المقابل event الجهاز في /dev/input/.

ثم لديّ Caemon C يعمل في جميع الأوقات. إنه يشاهد /dev/input/ الدليل ، وعندما يرى ظهور Symlink ، يفتح event جهاز. ثم يستخدم EVIOCGRAB IOCTL للاستيلاء على جهاز الحدث للاستخدام الحصري (هذا يمنع البيانات التي تظهر كمدخلات لوحة المفاتيح في التطبيقات الأخرى) ، ويقرأ أحداث الإدخال المقابلة لـ Keypresses. يقوم الخفي بتحويل المفاتيح إلى أحرف ويخزنها في قاعدة بيانات.

سيقوم CIN بقراءة الإدخال من جهاز الإدخال الطرفي المرفق. دون معرفة المزيد عن تصميم البرنامج الخاص بك ، فإن أول حدس لي هو قراءة البيانات من برنامج نصي Perl ليس هو الخيار الأفضل للتصميم. يمكنني قراءة أجهزة التحكم عن بعد IR على أجهزة Linux المدمجة باستخدام برنامج نصي Perl كما تصف ، ولكن بشكل عام ، أقوم بالتواصل مباشرة مع الجهاز أو واجهة برمجة التطبيقات التي توفرها البائع من داخل تطبيقي الرئيسي. هل تم توفير واجهة برمجة تطبيقات مع قارئ البطاقة الخاص بك؟

ما هو اسم جهاز قارئ البطاقة عندما يتم توصيله بجهازك (/dev/*)؟ كنت أفتح ذلك وقراءته بهذه الطريقة.

لم أتعامل مع هذا في Linux. ومع ذلك ، يبدو هذا مشابهًا جدًا لما رأيته في Windows.

في تجربتي ، يتم اكتشاف الكثير من هذه الأنواع من الأجهزة تلقائيًا بواسطة نظام التشغيل كنوع من لوحة المفاتيح للجهاز. لذلك يتم تغذية أي مدخلات من القارئ في نفس دفق لوحة المفاتيح الذي تستخدمه لوحة المفاتيح الحقيقية. بحلول الوقت الذي يصل فيه هذا إلى أي برامج فعلية تعمل ، لا توجد طريقة لمعرفة الفرق بين بيانات إدخال قارئ البطاقة والمستخدم فقط يكتب بسرعة كبيرة.

نتيجة لذلك ، يمكنك الحصول على السلوك الموصوف في السؤال الأصلي: إن إدخال قارئ البطاقة لا يذهب إلا إلى حيث يذهب إدخال لوحة المفاتيح العادية - إلى البرنامج في التركيز.

يتمثل الخيار الأفضل لك في التحقيق في موقع الشركة المصنعة (أو الاتصال بهم بطريقة أخرى) ومعرفة ما إذا كان يوفر نوعًا من السائق الذي سيسمح للبرنامج بالقبض على هذا الإدخال بشكل منفصل تمامًا عن دفق لوحة المفاتيح.

إذا لم تقدم الشركة المصنعة شيئًا من هذا القبيل ، فربما تفعل بعض الطرف الثالث. لكن لسوء الحظ ، لم أحقق أبدًا في ذلك ، لذا لا أعرف من أين أخبرك أن تبدأ في البحث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top