EDID-DECODE(1) دستورهای کاربر EDID-DECODE(1)

edid-decode - رمزگشایی داده‌های EDID در قالبی خوانا برای انسان

edid-decode <options> [in [out]]

دستور edid-decode داده‌های توصیف نمایشگر EDID را در قالبی خوانا برای انسان رمزگشایی می‌کند. اگر [in] مشخص نشده باشد، یا [in] برابر با “-” باشد، EDID از ورودی استاندارد خوانده خواهد شد. اگر [out] مشخص شده باشد، داده‌های EDID که از [in] خوانده شده در [out] نوشته می‌شود، یا در صورتی که [out] برابر با “-” باشد در خروجی استاندارد نوشته می‌شود. به‌طور پیش‌فرض هنگام نوشتن در خروجی استاندارد، خروجی به‌صورت یک روگرفت هگز (hex dump) نوشته می‌شود یا اگر در یک فایل نوشته شود به‌صورت EDID خام خواهد بود.

اگر [out] داده شود، edid-decode تنها تبدیل را انجام می‌دهد و از مرحلهٔ رمزگشایی صرف‌نظر خواهد کرد.

فایل‌های ورودی ممکن است باینری خام یا متن ASCII باشند. ورودی ASCII برای یافتن روگرفت‌های هگز پویش می‌شود؛ روش‌های اکتشافی (heuristics) برای جستجوی روگرفت‌های هگز در خروجی edid-decode(1) (تا زمانی که روگرفت هگز اولیه وجود داشته باشد)، خروجی ویژگی‌های xrandr(1) و قالب‌های فایل گزارش Xorg(1) تعبیه شده است، در غیر این صورت با داده‌ها مانند یک روگرفت هگز خام رفتار می‌شود. بلوک‌های EDID برای نمایشگرهای متصل را می‌توان در سیستم‌های مدرن لینوکس با پشتیبانی از تنظیم حالت هسته (kernel modesetting) در /sys/class/drm/*/edid یافت.

تمامی زمان‌بندی‌ها در یک قالب کوتاه نمایش داده می‌شوند، برای مثال:


VIC 16: 1920x1080 60.000 Hz 16:9 67.500 kHz 148.500 MHz (native)
VIC 5: 1920x1080i 60.000 Hz 16:9 33.750 kHz 74.250 MHz
VIC 39: 1920x1080i 50.000 Hz 16:9 31.250 kHz 72.000 MHz

هر قالب با یک پیشوند نوع زمان‌بندی، تفکیک‌پذیری (resolution)، یک نشانگر اختیاری درهم‌بافته (“i”)، نرخ فریم (نرخ میدان برای قالب‌های درهم‌بافته)، نسبت تصویر، بسامد افقی، بسامد ساعت پیکسلی (pixelclock) و به‌صورت اختیاری پرچم‌های اضافی میان پرانتز شروع می‌شود.

توجه داشته باشید که برای قالب‌های درهم‌بافته (interlaced) ارتفاع فریم داده می‌شود، نه ارتفاع میدان. بنابراین هر میدان در قالب 1920x1080i دارای ۵۴۰ خط است.

زمان‌بندی‌های با جزئیات (detailed timings) دارای ۲ تا ۳ خط دادهٔ دیگر هستند:


VIC 16: 1920x1080 60.000 Hz 16:9 67.500 kHz 148.500 MHz (native)
Hfront 88 Hsync 44 Hback 148 Hpol P
Vfront 4 Vsync 5 Vback 36 Vpol P
VIC 5: 1920x1080i 60.000 Hz 16:9 33.750 kHz 74.250 MHz
Hfront 88 Hsync 44 Hback 148 Hpol P
Vfront 2 Vsync 5 Vback 15 Vpol P Vfront +0.5 Odd Field
Vfront 2 Vsync 5 Vback 15 Vpol P Vback +0.5 Even Field
VIC 39: 1920x1080i 50.000 Hz 16:9 31.250 kHz 72.000 MHz
Hfront 32 Hsync 168 Hback 184 Hpol P
Vfront 23 Vsync 5 Vback 57 Vpol N Both Fields

این مقادیر پیش‌ایوان (front porch)، همگام‌سازی (sync)، پس‌ایوان (back porch) و قطبیت همگام‌سازی افقی و عمودی را توصیف می‌کنند. برای قالب‌های درهم‌بافته دو خط برای اطلاعات عمودی وجود دارد: یکی برای میدان فرد (یا Field 1) و دیگری برای میدان زوج (یا Field 2). پیش‌ایوان عمودی میدان فرد در واقع ۲.۵ است (از این رو “Vfront +0.5” در انتهای خط آمده است)، و پس‌ایوان میدان زوج در واقع ۱۵.۵ است (از این رو “Vback +0.5” در انتهای خط آمده است).

یک قالب درهم‌بافتهٔ خاص “VIC 39” وجود دارد که هر دو میدان دارای زمان‌بندی‌های عمودی یکسانی هستند، در این حالت با “Both Fields” مشخص می‌شود.

انواع زمان‌بندی‌های زیر می‌توانند نمایش داده شوند:

به‌طور پیش‌فرض DTDها در قالب بلند نمایش داده می‌شوند در حالی که سایر موارد فقط در قالب کوتاه نمایش داده می‌شوند. با گزینهٔ --short-timings همهٔ زمان‌بندی‌ها تنها در قالب کوتاه نمایش داده می‌شوند. با گزینهٔ --long-timings همهٔ زمان‌بندی‌ها در قالب بلند نمایش داده می‌شوند.

قالب‌های جایگزین برای زمان‌بندی‌های بلند را می‌توان از طریق گزینه‌های --xmodeline یا --fbmode انتخاب کرد..SH "استانداردها (STANDARDS)"

استانداردهای EDID زیر توسط edid-decode پشتیبانی می‌شوند:
استانداردهای مرتبط زیر نیز توسط edid-decode استفاده می‌شوند:

پیام راهنما را نمایش می‌دهد.
در صورت مشخص شدن [out]، داده‌های EDID را با قالب <fmt> می‌نویسد.

قالب خروجی می‌تواند یکی از موارد زیر باشد:
hex: اعداد هگزادسیمال در متن ascii (پیش‌فرض برای stdout)
raw: داده‌های دودویی (پیش‌فرض مگر در صورت نوشتن در stdout)
carray: ساختار زبان برنامه‌نویسی C (c-program struct)
xml: داده‌های XML

بررسی می‌کند که آیا EDID با استانداردها مطابقت دارد یا خیر. هشدارها و خطاها در پایان گزارش می‌شوند.
بررسی می‌کند که آیا EDID با استانداردها مطابقت دارد یا خیر. هشدارها و خطاها به محض وقوع گزارش می‌شوند.
تفکیک‌پذیری اصلی (native resolution) را در پایان گزارش می‌دهد. بسته به اینکه مبدأ (Source) فقط Block 0 (مانند خروجی‌های DVI)، یا Block 0 و بلوک‌های افزونه CTA-861 (خروجی HDMI)، یا صرفاً بلوک‌های افزونه DisplayID (معمول در DisplayPort) را تجزیه کند، ممکن است چندین گزارش تفکیک‌پذیری اصلی وجود داشته باشد. اگر تمام بلوک‌ها حاوی تفکیک‌پذیری اصلی یکسانی باشند، تنها همان تفکیک‌پذیری گزارش می‌شود. برای نمایشگرهای قدیمی‌تر ممکن است دو تفکیک‌پذیری اصلی جداگانه وجود داشته باشد: progressive و interlaced.
زمان‌بندی‌های ترجیحی (preferred timings) را در پایان گزارش می‌دهد. بسته به اینکه مبدأ فقط Block 0 (مانند خروجی‌های DVI)، یا Block 0 و بلوک‌های افزونه CTA-861 (خروجی HDMI)، یا Block 0 و بلوک‌های افزونه DisplayID (معمول در DisplayPort) را تجزیه کند، ممکن است چندین گزارش زمان‌بندی ترجیحی ارائه شود.
فایل InfoFrame مشخص‌شده را تجزیه می‌کند. در صورتی که به عنوان نام فایل '-' وارد شود، داده‌ها از stdin خوانده می‌شوند. از این گزینه می‌توان چندین بار برای تجزیه چند InfoFrame استفاده کرد. در صورتی که EDID نمایشگری که این InfoFrameها به آن ارسال می‌شوند نیز مشخص شده باشد، بررسی‌های انطباق آن EDID را نیز لحاظ خواهند کرد.

اگر نخستین بایت در InfoFrame برابر با 0x80 یا بیشتر باشد، طبق مشخصات HDMI فرض می‌شود که یک InfoFrame است که با سرآیند HDMI آغاز شده و دارای چک‌سام (checksum) است. در غیر این صورت، یک InfoFrame عادی CTA-861 بدون چک‌سام در نظر گرفته می‌شود.

نکته: این قابلیت هنوز در حال توسعه است، به‌ویژه برای InfoFrameهای AVI و HDMI.

فایل حاوی داده‌های مشابه EDID (به اختصار ELD) مشخص‌شده را تجزیه می‌کند. از این گزینه می‌توان چندین بار برای تجزیه چند فایل ELD استفاده کرد. در صورتی که به عنوان نام فایل '-' وارد شود، داده‌ها از stdin خوانده می‌شوند. اگر EDID نمایشگری که این فایل‌های ELD برای آن ایجاد شده‌اند نیز ارائه شود، بررسی‌های انطباق آن EDID را نیز در نظر خواهند گرفت.

در سیستم‌های لینوکس، داده‌های ELD را می‌توان از طریق دستور amixer استخراج کرد (تمامی مقادیر هگز پس از '=values' را کپی کنید):
$ amixer -c 0 controls | grep ELD
numid=6,iface=PCM,name='ELD',device=3
numid=12,iface=PCM,name='ELD',device=7
numid=18,iface=PCM,name='ELD',device=8
numid=24,iface=PCM,name='ELD',device=9
$ amixer -c 0 cget iface=PCM,name=ELD,device=3
numid=6,iface=PCM,name='ELD',device=3
; type=BYTES,access=r--v----,values=95
: values=0x10,0x00,0x08,0x00,0x6d,0x10,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,
0x00,0x00,0x30,0xae,0xf1,0x61,0x4c,0x45,0x4e,0x20,0x54,0x33,0x32,0x68,0x2d,0x32,
0x30,0x0a,0x20,0x09,0x7f,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

قطر نمایشگر را بر حسب اینچ مشخص می‌کند. این گزینه بررسی‌های بیشتری را برای اندازه تصویر فعال می‌کند تا مطابقت آن با قطر مشخص‌شده ارزیابی شود. در این حالت پیکسل‌ها مربع فرض می‌شوند.
فقط Source Physical Address مربوط به HDMI را گزارش می‌دهد و نه چیز دیگری. اگر EDID قابل تجزیه نباشد یا هیچ CTA-861 Vendor-Specific Data Block با شناسه OUI 00-0C-03 وجود نداشته باشد، مقدار f.f.f.f را گزارش می‌کند. در غیر این صورت، Source Physical Address را همان‌طور که در آن Data Block آمده است گزارش می‌دهد. این مقدار می‌تواند به عنوان ورودی برای ابزارهای HDMI CEC مانند ابزار cec-ctl(1) در لینوکس استفاده شود.
تمام زمان‌بندی‌های ویدیو را در قالبی کوتاه گزارش می‌دهد.
تمام زمان‌بندی‌های ویدیو را در قالبی بلند گزارش می‌دهد.
زمان‌بندی‌های ویدیو را با مقادیر مناسب برای ویدیوهای مبتنی بر NTSC گزارش می‌دهد. برای نمونه، این گزینه نرخ نوسازی را به جای 30 هرتز به صورت 29.97 هرتز نمایش می‌دهد. این کار تنها برای زمان‌بندی‌هایی انجام می‌شود که نرخ نوسازی آن‌ها مضربی از 6 باشد.
تمام زمان‌بندی‌های بلند ویدیو را در قالب ModeLine مطابق با تعریف در xorg.conf(5) گزارش می‌دهد. این ModeLine می‌تواند در فایل xorg.conf استفاده شود یا با گزینه --newmode در xrandr به دستور xrandr(1) ارسال گردد.
تمام زمان‌بندی‌های بلند ویدیو را در قالب حالت ویدیو مطابق با تعریف در fb.modes(5) گزارش می‌دهد.
تمام زمان‌بندی‌های بلند ویدیو را در قالب حالت ویدیو مطابق با تعریف در سرآیند لینوکسی v4l2-dv-timings.h جهت استفاده با دستور ioctl مربوط به VIDIOC_S_DV_TIMINGS در V4L2 گزارش می‌دهد.
از نمایش تخلیه اولیه هگزادسیمال (hex dump) مربوط به EDID صرف‌نظر می‌کند.
تنها تخلیه هگزادسیمال مربوط به EDID را نمایش داده و سپس خارج می‌شود.
هش SHA را نمایش نمی‌دهد. به طور معمول edid-decode مقدار SHA، یعنی هش کامیت git که برای کامپایل edid-decode استفاده شده است را نمایش می‌دهد. این مقدار نگارش دقیق edid-decode را که برای تولید هشدارها و خطاها به کار رفته است مشخص می‌کند. اما این شناسه با هر کامیت جدید در مخزن git خروجی edid-decode را تغییر می‌دهد، حتی اگر هیچ تغییر دیگری در خروجی برنامه رخ نداده باشد. برای جلوگیری از قرار گرفتن SHA در خروجی edid-decode از این گزینه استفاده کنید..TP -u, --utf8 تبدیل رشته‌های درون‌سازی‌شدهٔ EDID به UTF-8، با استفاده از Code Page 437 برای بلوک پایه (base block) و ISO 8859-1 برای بلوک DisplayID.
پنهان کردن هرگونه شماره‌سریال در خروجی خوانا برای انسان با «...». توجه داشته باشید که آن‌ها همچنان به‌سادگی از دامپ هگزادسیمال EDID در ابتدا قابل استخراج هستند.
جایگزینی هرگونه شناسهٔ یکتا در EDID با مقادیر ثابت. شماره‌سریال‌ها با «123456»، شناسهٔ ظرف (Container ID) با تماماً صفر و تاریخ ساخت («Made in») با سال ۲۰۰۰ جایگزین می‌شوند. این کار همچنین هرگونه چکسام را در EDID به‌روزرسانی کرده و دامپ هگزادسیمال EDID را در ابتدای خروجی به‌روز می‌کند. توجه داشته باشید از آنجا که این کار چکسام‌ها را به‌روز می‌کند، هرگونه خطای چکسام موجود در EDID اصلی دیگر شناسایی نخواهد شد.

شماره‌سریال‌ها می‌توانند در Base Block، بلوک‌های افزونهٔ CTA-861، بلوک‌های افزونهٔ DisplayID و بلوک‌های افزونهٔ Localized String ظاهر شوند. شناسه‌های ظرف (Container ID) می‌توانند در بلوک‌های افزونهٔ DisplayID و CTA-861 ظاهر شوند.

تاریخ ساخت («Made in») در Base Block ظاهر می‌شود.

نمایش هش SHA و تاریخ آخرین کامیت.

گزینه‌های زیر در صورتی که گذرگاه DDC توسط لینوکس در /dev/i2c-X به عنوان یک دستگاه آداپتور i2c ارائه شده باشد، مستقیماً گذرگاه DDC را می‌خوانند.

از این قابلیت می‌توان برای خواندن مستقیم اطلاعات EDID و HDCP از مقصد (sink) و تجزیهٔ آن استفاده کرد.

استفاده از دستگاه <dev> برای دسترسی به خطوط DDC. اگر <dev> با یک رقم آغاز شود، از /dev/i2c-<dev> استفاده می‌شود.
خواندن و تجزیهٔ EDID از آداپتور i2c.
خواندن و تجزیهٔ داده‌های HDCP از آداپتور i2c.
خواندن و گزارش مقدار HDCP Ri از آداپتور i2c در هر <t> ثانیه.
خواندن مداوم EDID به مدت <secs> ثانیه (پیش‌فرض 0 است، به معنای نامحدود)، با یک وقفهٔ <msecs> میلی‌ثانیه‌ای (مقدار پیش‌فرض 50 میلی‌ثانیه است) در میان هر بار خواندن. در صورت وجود عدم تطابق میان EDIDها، یک مورد FAIL گزارش داده می‌شود. این گزینه ارتباط i2c به سمت نمایشگر را آزمایش می‌کند.

گزینه‌های زیر زمان‌بندی‌ها را برای کدهای DMT، VIC و HDMI VIC گزارش می‌دهند و زمان‌بندی‌ها را برای زمان‌بندی‌های CVT یا GTF بر پایهٔ پارامترهای داده‌شده محاسبه می‌کنند. اطلاعات EDID نمایش داده نخواهد شد، اگرچه می‌تواند همراه با گزینهٔ --gtf به منظور خواندن پارامترهای منحنی ثانویه استفاده شود.

نمایش زمان‌بندی استاندارد نشان‌داده‌شده توسط این دو بایت.
نمایش زمان‌بندی‌ها برای DMT با شناسهٔ DMT داده‌شده.
نمایش زمان‌بندی‌ها برای این VIC.
نمایش زمان‌بندی‌ها برای این HDMI VIC.
[,alt][,hblank=<hblank>][,vblank=<vblank>][,early-vsync]
محاسبهٔ زمان‌بندی‌های CVT برای قالب داده‌شده.

<width> عرض بر حسب پیکسل است، <height> ارتفاع فریم (نه فیلد!) بر حسب خط است.
<fps> برای زمان‌بندی‌های پیش‌رونده (progressive) بر حسب فریم در ثانیه و برای زمان‌بندی‌های درهم‌بافته (interlaced) بر حسب فیلد در ثانیه است.
<rb> می‌تواند 0 (بدون reduced blanking، پیش‌فرض)، یا 1-3 برای نسخهٔ reduced blanking باشد.
اگر interlaced داده شود، این یک قالب درهم‌بافته است.
اگر overscan داده شود، این یک قالب اوراسکن (overscanned) است؛ یعنی حاشیه‌ها مورد نیاز هستند.
اگر alt داده شود و <rb>=2 باشد، زمان‌بندی‌های بهینه‌شده برای ویدیو گزارش می‌شوند: 1000 / 1001 * <fps>.
اگر alt داده شود و <rb>=3 باشد، فاصله‌گذاری افقی (horizontal blanking) به جای 80 پیکسل، 160 پیکسل خواهد بود.
اگر hblank داده شود و <rb>=3 باشد، فاصله‌گذاری افقی <hblank> پیکسل خواهد بود (در بازهٔ 80-200 و بخش‌پذیر بر 8)، که alt را نادیده می‌گیرد.
اگر vblank داده شود و <rb>=3 باشد، زمان فاصله‌گذاری عمودی (vertical blanking time) برابر با <vblank> میکروثانیه خواهد بود (حداقل 460؛ مقادیر بیش از 705 ممکن است توسط همهٔ دستگاه‌های مبدأ سازگار با زمان‌بندی‌های RBv3 پشتیبانی نشود).
اگر early-vsync داده شود و <rb>=3 باشد، یک زمان‌بندی vsync زودهنگام انتخاب می‌شود.

[,interlaced][,overscan][,secondary][,C=<c>][,M=<m>][,K=<k>][,J=<j>]
محاسبهٔ زمان‌بندی‌های GTF برای قالب داده‌شده.

<width> عرض بر حسب پیکسل است، <height> ارتفاع فریم (نه فیلد!) بر حسب خط است.
<fps> برای زمان‌بندی‌های پیش‌رونده (progressive) بر حسب فریم در ثانیه و برای زمان‌بندی‌های درهم‌بافته (interlaced) بر حسب فیلد در ثانیه است.
<horfreq> بسامد افقی بر حسب کیلوهرتز (kHz) است.
<pixclk> بسامد کلاک پیکسل بر حسب مگاهرتز (MHz) است. تنها یکی از مقادیر fps، horfreq یا pixclk باید داده شود.
اگر interlaced داده شود، این یک قالب درهم‌بافته است.
اگر overscan داده شود، این یک قالب اوراسکن (overscanned) است؛ یعنی حاشیه‌ها مورد نیاز هستند.
اگر secondary داده شود، از GTF ثانویه برای reduced blanking استفاده می‌شود، که در آن <c>، <m>، <k> و <j> پارامترهای منحنی ثانویه هستند. اگر هیچ‌یک از پارامترهای منحنی ثانویه تنظیم نشده باشند، و یک فایل EDID به عنوان گزینهٔ خط فرمان داده شده باشد، پارامترهای منحنی ثانویه از آن EDID خوانده می‌شوند.
پارامترهای پیش‌فرض منحنی ثانویه عبارتند از: 40 برای <c>، 600 برای <m>، 128 برای <k> و 20 برای <j>. این مقادیر متناظر با منحنی عادی مورد استفاده توسط GTF هستند.

محاسبهٔ زمان‌بندی‌های OVT برای قالب داده‌شده. یک <rid> را مشخص کنید یا <width> و <height> را تعیین نمایید. <fps> فریم در ثانیه است.
فهرست کردن تمام Established Timings شناخته‌شده.
فهرست کردن تمام DMTهای شناخته‌شده.
فهرست کردن تمام VICهای شناخته‌شده.
فهرست کردن تمام HDMI VICهای شناخته‌شده.
فهرست کردن تمام CTA-861 RIDهای شناخته‌شده.
فهرست کردن تمام زمان‌بندی‌ها برای <rid> مشخص‌شده، یا تمام RIDهای شناخته‌شده در صورتی که <rid> برابر 0 باشد.

همهٔ فیلدها رمزگشایی نمی‌شوند، یا به‌طور کامل رمزگشایی نمی‌شوند. edid-decode تلاش می‌کند ورودی خود را در برابر استانداردهای مربوطه اعتبارسنجی کند، اما ارزیابی‌های آن توسط نهادهای استاندارد مربوطه بازبینی مجدد نشده‌اند، بنابراین ممکن است نادرست باشند. به قالب خروجی اتکا نکنید، زیرا با اضافه شدن فیلدها و افزونه‌های بیشتر در نسخه‌های آیندهٔ این ابزار، احتمالاً تغییر خواهد کرد.

Xorg(1), xrandr(1), cec-ctl(1), xorg.conf(5), fb.modes(5)

ابزار edid-decode توسط Adam Jackson نوشته شده است، با مشارکت‌هایی از جانب Eric Anholt، Damien Lespiau، Hans Verkuil و دیگران.

گزارش باگ‌ها یا پرسش‌ها دربارهٔ این ابزار باید به فهرست پستی linux-media@vger.kernel.org ارسال شود.

نوامبر ۲۰۲۴ v4l-utils 1.32.0