RC_KEYMAP(5) File Formats RC_KEYMAP(5)

rc_keymap - پرونده toml توصیف‌کننده نگاشت کلیدهای کنترل از راه دور

یک پرونده rc_keymap یک کنترل از راه دور را توصیف می‌کند. این پرونده پروتکل‌های مورد استفاده و نگاشت از مادون قرمز (IR) رمزگشایی‌شده به کدهای کلید ورودی لینوکس را فهرست می‌کند. این پرونده توسط ir-keytable(1) برای رمزگشایی IR، و توسط ir-ctl(1) برای ارسال IR استفاده می‌شود.

قالب پرونده toml است. از آنجا که یک کنترل از راه دور می‌تواند از چندین پروتکل استفاده کند، سطح بالا آرایه‌ای از پروتکل‌ها است. اکثریت قریب به اتفاق کنترل‌ها تنها از یک پروتکل استفاده می‌کنند.

برای هر پروتکلی که کنترل از راه دور استفاده می‌کند، باید یک ورودی در آرایه سطح بالای protocols وجود داشته باشد.

هر ورودی protocols دارای یک فیلد name است. نام توسط ir-keytable یا ir-ctl استفاده نمی‌شود، اما می‌توان از آن برای دادن نامی توصیفی‌تر از نام پرونده (مانند شماره مدل) به کنترل از راه دور استفاده کرد.

فیلد protocol پروتکل را مشخص می‌کند. این می‌تواند یکی از رمزگشاهای هسته لینوکس باشد، که در این صورت شامل nec، rc-5، rc-6، jvc، sony، sanyo، rc-5-sz، sharp، mce-kbd، xmp، imon، rc-mm، other یا unknown است. اگر با هیچ‌یک از این ورودی‌ها مطابقت نداشته باشد، فرض می‌شود که یک رمزگشای مبتنی بر BPF است. مقادیر unknown و other پروتکل‌هایی هستند که توسط دستگاه‌های خاص RC رمزگشایی می‌شوند که در آن‌ها پروتکل به ترتیب ناشناخته یا اختصاصی است.

برخی رمزگشاهای پروتکل BPF از پیش تعریف‌شده وجود دارند که در زیر فهرست شده‌اند. برای نحوه نوشتن رمزگشای خود به https://lwn.net/Articles/759188 مراجعه کنید.

فیلد variant مشخص می‌کند که یک پروتکل خاص از کدام گونه استفاده می‌کند. برای مثال پروتکل‌های sony، rc-5 و rc-6 گونه‌هایی با طول بیت متفاوت دارند. این فیلد توسط ir-ctl هنگام ارسال IR استفاده می‌شود.

گونه‌های زیر در حال حاضر تعریف شده‌اند:

پروتکل rc-5 دارای گونه‌های rc-5، rc-5x-20 و rc-5-sz است.

پروتکل nec دارای گونه‌های nec، nec-x و nec-32 است.

پروتکل sony دارای گونه‌های sony-12، sony-15 و sony-20 است.

پروتکل rc-6 دارای گونه‌های rc-6-0، rc-6-6a-20، rc-6-6a-24، rc-6-6a-32 و rc-6-mce است.

پروتکل rc-mm دارای گونه‌های rc-mm-12، rc-mm-24 و rc-mm-32 است.

جدول scancodes کدهای اسکن و نگاشت آن‌ها به کد کلید ورودی لینوکس را فهرست می‌کند. چندین کد اسکن می‌توانند به یک کد کلید نگاشت شوند. فیلد scancodes برای پروتکل‌های raw وجود ندارد.

اگر کد اسکن با 0x شروع شود، به عنوان یک عدد هگزادسیمال تفسیر می‌شود. اگر با 0 شروع شود، به عنوان یک عدد هشت‌هشتی تفسیر می‌شود.

کدهای کلید معتبر در پرونده هدر input-event-codes.h فهرست شده‌اند. به عنوان مثال می‌توان به KEY_ENTER، KEY_ESC یا BTN_LEFT برای دکمه چپ ماوس اشاره کرد. توجه داشته باشید که اگر نگاشت کلید تنها برای ارسال IR استفاده شود، کلید نیازی به یک کد کلید معتبر لینوکس ندارد؛ می‌تواند هر رشته‌ای بدون فاصله باشد.

اگر پروتکل raw باشد، فیلد raw آرایه‌ای از نگاشت کد کلید به داده‌های خام است. برای هر ورودی، یک فیلد keycode و یک فیلد raw وجود دارد. فیلد keycode یک کد کلید ورودی لینوکس است، همان‌طور که در فیلد scancodes در بالا توضیح داده شد.

فیلد raw یک رشته است که مقادیر پالس و فاصله را که با فاصله از هم جدا شده‌اند فهرست می‌کند. مقدار اول پالس برحسب میکروثانیه است، دومی فاصله، سومی پالس و غیره. مقادیر فاصله می‌توانند با علامت - و مقادیر پالس با علامت + همراه باشند. باید تعداد فردی از مقادیر وجود داشته باشد تا آخرین ورودی یک پالس باشد.

اگر پروتکل یک رمزگشای مبتنی بر BPF باشد، ممکن است هر تعداد پارامتر عددی داشته باشد. این پارامترها برای پشتیبانی از پروتکل‌هایی با طول سیگنال غیر استاندارد برای پروتکل‌های استاندارد IR استفاده می‌شوند. هر فیلد دیگری که در اینجا مشخص شده و توسط رمزگشای BPF انتخاب‌شده مورد نیاز باشد استفاده خواهد شد. تمام فیلدهای دیگر نادیده گرفته می‌شوند.

رمزگشاهای پروتکل غیر BPF مبتنی بر هسته هیچ پارامتری ندارند.

برخی از رمزگشاهای پروتکل BPF عمومی هستند و برای کار کردن به پارامتر نیاز دارند. سایر موارد برای کنترل‌های خاص هستند و باید بدون هیچ پارامتری کار کنند. پارامترهای زمان‌بندی همگی برحسب میکروثانیه (µs) هستند.

این رمزگشا باید زمانی استفاده شود که نگاشت کلید خام است؛ برای هر کلید، یک ورودی در آرایه raw با مقادیر پالس و فاصله برای آن کلید وجود دارد. هیچ رمزگشایی انجام نمی‌شود، IR ورودی صرفاً با مقادیر مختلف پالس و فاصله مطابقت داده می‌شود.

این رمزگشا به‌طور خاص برای کنترل iMON RSC است که همراه با iMON Station (از جمله دیگر موارد) بسته‌بندی شده بود. این رمزگشا برای اهرم جهت‌دار در وسط است؛ آن‌ها را به حرکات ماوس رمزگشایی می‌کند. دکمه‌ها همگی با استفاده از nec-x کدگذاری شده‌اند، بنابراین نگاشت کلید برای عملکرد صحیح به دو پروتکل نیاز دارد.

این به پروتکل imon ارتباطی ندارد.

تعیین میزان رواداری برای طول پیام. پیش‌فرض 200.

این رمزگشا به‌طور خاص برای کنترل‌های قدیمی grundig است.

طول پالس اول، پیش‌فرض 900.
طول فاصله پس از آن، پیش‌فرض 2900.
طول پالس دوم، پیش‌فرض 1300.

این رمزگشا به‌طور خاص برای XBox Remote DVD است که برای نسل اول XBox است.

تعیین میزان رواداری برای طول پیام. پیش‌فرض 200.

بیشتر کنترل‌های از راه دور کدگذاری‌شده با منچستر یا rc-5، rc-6، یا rc-mm هستند. برخی کنترل‌ها از گونه متفاوتی استفاده می‌کنند (مثلاً ممکن است پالس هدر داشته باشند) و این رمزگشا برای همین است. برخی پارامترها باید مشخص شوند، به‌طور پیش‌فرض برای rc-5 تنظیم شده است.

تعیین میزان رواداری برای طول پیام. پیش‌فرض 200.
تعیین طول پالس آغازین. همیشه وجود ندارد. پیش‌فرض 0.
تعیین طول فاصله پس از پالس آغازین. در صورت تنظیم header_pulse باید تنظیم شود.
طول سیگنال‌دهی برای بیت‌ها. برای نحوه تعریف این موارد به https://clearwater.com.au/code/rc5 مراجعه کنید.
تعداد بیت‌ها. پیش‌فرض 14.
بیت‌هایی که باید از کد اسکن حاصل ماسک شوند.
بیتی که ضامن (toggle) را مشخص می‌کند. اگر این مقدار بیشتر از تعداد بیت‌ها باشد، هیچ ضامنی تعریف نشده است.

این یک رمزگشای عمومی برای پروتکل‌هایی است که بیت‌ها را بر اساس فاصله بین پالس‌ها تعریف می‌کنند و پالس‌ها همیشه دارای طول یکسان هستند. شناخته‌شده‌ترین پروتکل از این نوع nec است. این رمزگشا برای مواردی است که از nec استفاده نمی‌شود. پارامترها باید تنظیم شوند.

تعیین میزان رواداری برای طول پیام. پیش‌فرض 200.
طول نخستین پالس آغازین. پیش‌فرض 2125.
طول فاصله پس از پالس آغازین. پیش‌فرض 1875.
طول پالس آغازین برای تکرار کلید. پیش‌فرض 0.
طول فاصله پس از پالس آغازین برای تکرار کلید. پیش‌فرض 0.
طول پالس برای هر بیت. پیش‌فرض 625.
طول فاصله برای بیت صفر. پیش‌فرض 375.
طول فاصله برای بیت یک. پیش‌فرض 1625.
طول پالس پس از آخرین بیت. برای تکمیل آخرین بیت لازم است. پیش‌فرض 625.
تعداد بیت‌ها. پیش‌فرض 4.
آیا بیت‌ها باید با کم‌ارزش‌ترین بیت در ابتدا خوانده شوند. برای فعال‌سازی روی غیر صفر تنظیم کنید. پیش‌فرض 0.
برخی کنترل‌ها پالس و فاصله هدر را برای تکرار کلید ارسال نمی‌کنند، بنابراین برای اختیاری کردن هدر این گزینه را روی غیر صفر قرار دهید. پیش‌فرض 0.

یک پیاده‌سازی جایگزین ممکن است فقط به پیام‌های تکراری اجازه حذف هدر را بدهد، اما در صورتی که نخستین پیام حاوی هدر به دلیل تداخل به درستی رمزگشایی نشود، رمزگشایی فشردن کلیدها با شکست مواجه خواهد شد.

این یک رمزگشای عمومی برای پروتکل‌هایی است که بیت‌ها را بر اساس طول پالس‌ها تعریف می‌کنند و فاصله‌ها همیشه یکسان هستند. پروتکل sony شناخته‌شده‌ترین پروتکل است، اما این رمزگشا برای پروتکل‌هایی است که sony نیستند.

تعیین میزان رواداری برای طول پیام. پیش‌فرض 200.
طول نخستین پالس آغازین. پیش‌فرض 2125.
طول فاصله پس از پالس آغازین. پیش‌فرض 1875.
طول پالس آغازین برای تکرار کلید. پیش‌فرض 0.
طول فاصله پس از پالس آغازین برای تکرار کلید. پیش‌فرض 0.
طول فاصله برای هر بیت. پیش‌فرض 625.
طول پالس برای بیت صفر. پیش‌فرض 375.
طول پالس برای بیت یک. پیش‌فرض 1625.
طول پالس پس از آخرین بیت. اختیاری. پیش‌فرض 0.
تعداد بیت‌ها. پیش‌فرض 4.
آیا بیت‌ها باید با کم‌ارزش‌ترین بیت در ابتدا خوانده شوند. برای فعال‌سازی روی غیر صفر تنظیم کنید. پیش‌فرض 0.
برخی کنترل‌ها پالس و فاصله هدر را برای تکرار کلید ارسال نمی‌کنند، بنابراین برای اختیاری کردن هدر این گزینه را روی غیر صفر قرار دهید. پیش‌فرض 0.

یک پیاده‌سازی جایگزین ممکن است فقط به پیام‌های تکراری اجازه حذف هدر را بدهد، اما در صورتی که تنها اولین پیام به دلیل تداخل به درستی رمزگشایی نشود، رمزگشایی فشردن کلیدها با شکست مواجه خواهد شد.

[[protocols]]
name = "iMON Station RSC"
protocol = "nec"
variant = "necx"
[protocols.scancodes]
0x801010 = "KEY_EXIT"
0x80102f = "KEY_POWER"
0x80104a = "KEY_SCREENSAVER"
0x801049 = "KEY_TIME"
0x801054 = "KEY_NUMERIC_1"
0x801055 = "KEY_NUMERIC_2"
0x801056 = "KEY_NUMERIC_3"
0x801057 = "KEY_NUMERIC_4"
0x801058 = "KEY_NUMERIC_5"
0x801059 = "KEY_NUMERIC_6"
0x80105a = "KEY_NUMERIC_7"
0x80105b = "KEY_NUMERIC_8"
0x80105c = "KEY_NUMERIC_9"
0x801081 = "KEY_SCREEN"
0x80105d = "KEY_NUMERIC_0"
0x801082 = "KEY_MAX"
0x801048 = "KEY_ESC"
0x80104b = "KEY_MEDIA"
0x801083 = "KEY_MENU"
0x801045 = "KEY_APPSELECT"
0x801084 = "KEY_STOP"
0x801046 = "KEY_CYCLEWINDOWS"
0x801085 = "KEY_BACKSPACE"
0x801086 = "KEY_KEYBOARD"
0x801087 = "KEY_SPACE"
0x80101e = "KEY_RESERVED"
0x801098 = "BTN_0"
0x80101f = "KEY_TAB"
0x80101b = "BTN_LEFT"
0x80101d = "BTN_RIGHT"
0x801016 = "BTN_MIDDLE"
0x801088 = "KEY_MUTE"
0x80105e = "KEY_VOLUMEDOWN"
0x80105f = "KEY_VOLUMEUP"
0x80104c = "KEY_PLAY"
0x80104d = "KEY_PAUSE"
0x80104f = "KEY_EJECTCD"
0x801050 = "KEY_PREVIOUS"
0x801051 = "KEY_NEXT"
0x80104e = "KEY_STOP"
0x801052 = "KEY_REWIND"
0x801053 = "KEY_FASTFORWARD"
0x801089 = "KEY_ZOOM"
[[protocols]]
protocol = "imon_rsc"

گزارش باگ‌ها به Linux Media Mailing List <linux-media@vger.kernel.org>

Copyright (C) 2019 by Sean Young <sean@mess.org>

License GPLv2: GNU GPL version 2 http://gnu.org/licenses/gpl.html.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

ir-keytable(1) and ir-ctl(1)

https://lwn.net/Articles/759188

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/input-event-codes.h#n64

Thu Mar 7 2019 v4l-utils 1.32.0