lirc(4)

الاسم
lirc - أجهزة lirc

الوصف
توفر الأجهزة المحرفية /dev/lirc* واجهة ثنائية الاتجاه منخفضة المستوى لأجهزة التحكم عن بعد بالأشعة تحت الحمراء (IR). تستطيع معظم هذه الأجهزة الاستقبال، وبعضها يستطيع الإرسال. عند استقبال البيانات أو إرسالها، يعمل المشغل في وضعين مختلفين اعتمادًا على العتاد الأساسي.

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

يوفر عتاد آخر دفقًا من مدد النبض/الفراغ. تعمل هذه المشغلات في وضع LIRC_MODE_MODE2. يمكن استخدام هذا العتاد مع (تقريبًا) أي نوع من أجهزة التحكم عن بعد. يمكن أيضًا استخدام هذا النوع من العتاد في وضع LIRC_MODE_SCANCODE، وفي هذه الحالة ستتولى أدوات فك ترميز الأشعة تحت الحمراء في النواة فك ترميز الإشارة. يمكن كتابة أدوات فك الترميز هذه بلغة BPF الممتدة (انظر bpf(2)) وربطها بجهاز lirc. أحيانًا، يدعم هذا النوع من العتاد أيضًا إرسال بيانات الأشعة تحت الحمراء.

يسمح LIRC_GET_FEATURES ioctl (انظر أدناه) باستقصاء ما إذا كان الاستقبال والإرسال مدعومين، وفي أي أوضاع، من بين ميزات أخرى.

  قراءة الدخل باستخدام وضع LIRC_MODE_MODE2
في وضع LIRC_MODE_MODE2، توفر البيانات المعادة بواسطة read(2) قيمًا بحجم 32 بت تمثل مدة فراغ أو نبضة. تُرمّز مدة الوقت (ميكروثانية) في الـ 24 بتًا الدنيا. تشير النبضة (تُعرف أيضًا بالومضة) إلى مدة اكتشاف ضوء الأشعة تحت الحمراء، ويشير الفراغ (يُعرف أيضًا بالفجوة) إلى مدة عدم وجود أشعة تحت حمراء. إذا تجاوزت مدة الفراغ مهلة الخمول، تُسلّم حزمة مهلة خاصة، والتي تحدد نهاية الرسالة. تشير الـ 8 بتات العليا إلى نوع الحزمة:

LIRC_MODE2_SPACE
    تعكس القيمة مدة فراغ (ميكروثانية).

LIRC_MODE2_PULSE
    تعكس القيمة مدة نبضة (ميكروثانية).

LIRC_MODE2_FREQUENCY
    تعكس القيمة ترددًا (هرتز)؛ انظر LIRC_SET_MEASURE_CARRIER_MODE ioctl.

LIRC_MODE2_TIMEOUT
    تعكس القيمة مدة فراغ (ميكروثانية). تعكس الحزمة مهلة؛ انظر LIRC_SET_REC_TIMEOUT_REPORTS ioctl.

LIRC_MODE2_OVERFLOW
    واجه مستقبل الأشعة تحت الحمراء تجاوزًا للسعة، ونتيجة لذلك فُقدت البيانات (منذ لينكس 5.18).

  قراءة الدخل باستخدام وضع LIRC_MODE_SCANCODE
في وضع LIRC_MODE_SCANCODE، تعكس البيانات المعادة بواسطة read(2) ضغطات الأزرار المفككة، في البنية lirc_scancode. يُخزن رمز المسح في حقل scancode، ويُخزن بروتوكول الأشعة تحت الحمراء في rc_proto. يحتوي هذا الحقل على إحدى قيم enum rc_proto.

  كتابة الخرج باستخدام وضع LIRC_MODE_PULSE
البيانات المكتوبة إلى الجهاز المحرفي باستخدام write(2) هي تسلسل نبض/فراغ من قيم صحيحة. تُعلم النبضات والفراغات ضمنيًا فقط من خلال مواقعها. يجب أن تبدأ البيانات وتنتهي بنبضة، وبالتالي يجب أن تتضمن دائمًا عددًا فرديًا من العينات. تُعطل وظيفة write(2) حتى تُرسل البيانات بواسطة العتاد. إذا وُفرت بيانات أكثر مما يمكن للعتاد إرساله، يفشل استدعاء write(2) بالخطأ EINVAL.

  كتابة الخرج باستخدام وضع LIRC_MODE_SCANCODE
يجب أن تكون البيانات المكتوبة إلى الأجهزة المحرفية بنية واحدة من النوع lirc_scancode. يجب ملء حقلي scancode و rc_proto، ويجب أن تكون جميع الحقول الأخرى 0. ستحول أدوات ترميز الأشعة تحت الحمراء في النواة رمز المسح إلى نبضات وفراغات. البروتوكول أو رمز المسح غير صالح، أو أن جهاز lirc لا يمكنه الإرسال.

أوامر IOCTL
#include <linux/lirc.h>    /* انظر قسم العلل */

int ioctl(int fd, int cmd, int *val);

يوفر الجهاز المحرفي lirc عمليات ioctl(2) التالية لاستقصاء أو تغيير إعدادات عتاد lirc محددة.

  الأوامر المدعومة دائمًا
تدعم أجهزة /dev/lirc* الأوامر التالية دائمًا:

LIRC_GET_FEATURES (void)
    يعيد قناع بتات من بتات الميزات المجمعة؛ انظر FEATURES.

إذا أعاد جهاز رمز خطأ لـ LIRC_GET_FEATURES، فمن الآمن افتراض أنه ليس جهاز lirc.

  الأوامر الاختيارية
تدعم بعض أجهزة lirc الأوامر المدرجة أدناه. مالم يُذكر خلاف ذلك، تفشل هذه العمليات بالخطأ ENOTTY إذا كانت العملية غير مدعومة، أو بالخطأ EINVAL إذا فشلت العملية أو وُفرت وسائط غير صالحة. إذا لم يعلن المشغل عن دعم ميزات معينة، سيفشل استدعاء ioctls المقابل لها بالخطأ ENOTTY.

LIRC_GET_REC_MODE (void)
    إذا لم يكن لجهاز lirc مستقبل، تفشل هذه العملية بالخطأ ENOTTY. بخلاف ذلك، فإنها تعيد وضع الاستقبال، والذي سيكون واحدًا من:

    LIRC_MODE_MODE2
        يعيد المشغل تسلسلاً من مدد النبض/الفراغ.

    LIRC_MODE_SCANCODE
        يعيد المشغل قيم بنية lirc_scancode، كل منها يمثل ضغطة زر مفككة.

LIRC_SET_REC_MODE (int)
    اضبط وضع الاستقبال. val هو إما LIRC_MODE_SCANCODE أو LIRC_MODE_MODE2. إذا لم يكن لجهاز lirc مستقبل، تفشل هذه العملية بالخطأ ENOTTY.

LIRC_GET_SEND_MODE (void)
    يعيد وضع الإرسال. LIRC_MODE_PULSE أو LIRC_MODE_SCANCODE مدعومان. إذا كان جهاز lirc لا يستطيع الإرسال، تفشل هذه العملية بالخطأ ENOTTY.

LIRC_SET_SEND_MODE (int)
    اضبط وضع الإرسال. val هو إما LIRC_MODE_SCANCODE أو LIRC_MODE_PULSE. إذا كان جهاز lirc لا يستطيع الإرسال، تفشل هذه العملية بالخطأ ENOTTY.

LIRC_SET_SEND_CARRIER (int)
    اضبط تردد التعديل. الوسيط هو التردد (هرتز).

LIRC_SET_SEND_DUTY_CYCLE (int)
    اضبط دورة تشغيل الموجة الحاملة. val هو رقم في النطاق [0,100] يصف عرض النبضة كنسبة مئوية من الدورة الإجمالية. حاليًا، لا يوجد معنى خاص محدد للقيم 0 أو 100، ولكن القيم محجوزة للاستخدام المستقبلي.

LIRC_GET_MIN_TIMEOUT(void)
LIRC_GET_MAX_TIMEOUT(void)
    تحتوي بعض الأجهزة على مؤقتات داخلية يمكن استخدامها لاكتشاف عدم وجود نشاط للأشعة تحت الحمراء لفترة طويلة. يمكن أن يساعد ذلك lircd(8) في اكتشاف انتهاء إشارة الأشعة تحت الحمراء ويمكنه تسريع عملية فك الترميز. تعيد هذه العمليات قيمًا صحيحة بالحد الأدنى/الأقصى للمهلة التي يمكن ضبطها (ميكروثانية). تحتوي بعض الأجهزة على مهلة ثابتة. لمثل هذه المشغلات، سيفشل LIRC_GET_MIN_TIMEOUT و LIRC_GET_MAX_TIMEOUT بالخطأ ENOTTY.

LIRC_SET_REC_TIMEOUT (int)
    اضبط القيمة الصحيحة لمهلة خمول الأشعة تحت الحمراء (ميكروثانية). لكي تُقبل، يجب أن تكون القيمة ضمن الحدود المحددة بواسطة LIRC_GET_MIN_TIMEOUT و LIRC_GET_MAX_TIMEOUT. تعطل القيمة 0 (إذا كان العتاد يدعم ذلك) جميع مهلات العتاد ويجب الإبلاغ عن البيانات في أقرب وقت ممكن. إذا لم يمكن ضبط القيمة بالضبط، فيجب ضبط القيمة التالية الممكنة الأكبر من القيمة المعطاة.

LIRC_GET_REC_TIMEOUT (void)
    يعيد مهلة الخمول الحالية (ميكروثانية). متاح منذ لينكس 4.18.

LIRC_SET_REC_TIMEOUT_REPORTS (int)
    مكّن (val هو 1) أو عطّل (val هو 0) حزم المهلة في LIRC_MODE_MODE2. تنوع سلوك هذه العملية عبر إصدارات النواة:

    •   منذ لينكس 5.17: حزم المهلة مُمكّنة دائمًا وهذا الـ ioctl لا يقوم بأي عملية.

    •   منذ لينكس 4.16: حزم المهلة مُمكّنة مبدئيًا. في كل مرة يُفتح فيها جهاز lirc، يمكن استخدام عملية LIRC_SET_REC_TIMEOUT لتعطيل (وإعادة تمكين، إذا رُغب في ذلك لاحقًا) المهلة على واصف الملف.

    •   في لينكس 4.15 وما قبله: حزم المهلة مُعطلة مبدئيًا، وتمكينها (عبر LIRC_SET_REC_TIMEOUT) على أي واصف ملف مرتبط بجهاز lirc يؤدي إلى تمكين المهلات لجميع واصفات الملفات التي تشير إلى ذلك الجهاز (حتى تُعطل المهلات مرة أخرى).

LIRC_SET_REC_CARRIER (int)
    اضبط الحد الأعلى لتردد الموجة الحاملة للاستقبال (هرتز). انظر LIRC_SET_REC_CARRIER_RANGE.

LIRC_SET_REC_CARRIER_RANGE (int)
    يضبط الحد الأدنى لتردد الموجة الحاملة للاستقبال (هرتز). لكي يسري ذلك، اضبط أولاً الحد الأدنى باستخدام LIRC_SET_REC_CARRIER_RANGE ioctl، ثم الحد الأعلى باستخدام LIRC_SET_REC_CARRIER ioctl.

LIRC_SET_MEASURE_CARRIER_MODE (int)
    مكّن (val هو 1) أو عطّل (val هو 0) وضع القياس. إذا مُكّن، فمنذ ضغطة المفتاح التالية، سيرسل المشغل حزم LIRC_MODE2_FREQUENCY. مبدئيًا، يجب إيقاف تشغيل هذا.

LIRC_GET_REC_RESOLUTION (void)
    يعيد دقة المشغل (ميكروثانية).

LIRC_SET_TRANSMITTER_MASK (int)
    مكّن مجموعة أجهزة الإرسال المحددة في val، والتي تحتوي على قناع بتات حيث يكون كل جهاز إرسال مُمكّن هو 1. يُرمّز جهاز الإرسال الأول بواسطة البت الأقل أهمية، وهكذا. عند إعطاء قناع بتات غير صالح، مثلاً إذا ضُبط بت رغم أن الجهاز لا يحتوي على هذا العدد من أجهزة الإرسال، تعيد هذه العملية عدد أجهزة الإرسال المتاحة ولا تفعل شيئًا خلاف ذلك.

LIRC_SET_WIDEBAND_RECEIVER (int)
    تُجهّز بعض الأجهزة بمستقبل نطاق عريض خاص مخصص للاستخدام لتعلم خرج جهاز تحكم عن بعد موجود. يمكن استخدام هذا الـ ioctl لتمكين (val يساوي 1) أو تعطيل (val يساوي 0) هذه الوظيفة. قد يكون هذا مفيدًا للأجهزة التي تمتلك مستقبلات نطاق ضيق تمنع استخدامها مع أجهزة تحكم عن بعد معينة. قد تكون مستقبلات النطاق العريض أكثر دقة أيضًا. من ناحية أخرى، تكمن عيبها عادةً في تقليل مدى الاستقبال.

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

الميزات
يعيد LIRC_GET_FEATURES ioctl قناع بتات يصف ميزات المشغل. قد تُعاد البتات التالية في القناع:

LIRC_CAN_REC_MODE2
    المشغل قادر على الاستقبال باستخدام LIRC_MODE_MODE2.

LIRC_CAN_REC_SCANCODE
    المشغل قادر على الاستقبال باستخدام LIRC_MODE_SCANCODE.

LIRC_CAN_SET_SEND_CARRIER
    يدعم المشغل تغيير تردد التعديل باستخدام LIRC_SET_SEND_CARRIER.

LIRC_CAN_SET_SEND_DUTY_CYCLE
    يدعم المشغل تغيير دورة التشغيل باستخدام LIRC_SET_SEND_DUTY_CYCLE.

LIRC_CAN_SET_TRANSMITTER_MASK
    يدعم المشغل تغيير جهاز (أو أجهزة) الإرسال النشطة باستخدام LIRC_SET_TRANSMITTER_MASK.

LIRC_CAN_SET_REC_CARRIER
    يدعم المشغل ضبط تردد الموجة الحاملة للاستقبال باستخدام LIRC_SET_REC_CARRIER. يجب أن يكون لأي جهاز lirc منذ دمج المشغلات في لينكس 2.6.36 ميزة LIRC_CAN_SET_REC_CARRIER_RANGE مضبوطة إذا كانت ميزة LIRC_CAN_SET_REC_CARRIER مضبوطة.

LIRC_CAN_SET_REC_CARRIER_RANGE
    يدعم المشغل LIRC_SET_REC_CARRIER_RANGE. يجب ضبط الحد الأدنى للموجة الحاملة أولاً باستخدام LIRC_SET_REC_CARRIER_RANGE ioctl، قبل استخدام LIRC_SET_REC_CARRIER ioctl لضبط الحد الأعلى.

LIRC_CAN_GET_REC_RESOLUTION
    يدعم المشغل LIRC_GET_REC_RESOLUTION.

LIRC_CAN_SET_REC_TIMEOUT
    يدعم المشغل LIRC_SET_REC_TIMEOUT.

LIRC_CAN_MEASURE_CARRIER
    يدعم المشغل قياس تردد التعديل باستخدام LIRC_SET_MEASURE_CARRIER_MODE.

LIRC_CAN_USE_WIDEBAND_RECEIVER
    يدعم المشغل وضع التعلم باستخدام LIRC_SET_WIDEBAND_RECEIVER.

LIRC_CAN_SEND_PULSE
    يدعم المشغل الإرسال باستخدام LIRC_MODE_PULSE أو LIRC_MODE_SCANCODE

العلل
يتطلب استخدام هذه الأجهزة ملف الترويسة المصدري للنواة lirc.h. هذا الملف غير متاح قبل لينكس 4.6. يمكن لمستخدمي النوى الأقدم استخدام الملف المرفق في http://www.lirc.org.

انظر أيضًا
ir-ctl(1), lircd(8), bpf(2)

https://www.kernel.org/doc/html/latest/userspace-api/media/rc/lirc-dev.html

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.