class DSIDisplay -- مشغّل عرض DSI¶
تقود الفئة DSIDisplay لوحات MIPI-DSI من خلال متحكم مضيف DSI في STM32. إن MIPI DSI هو بروتوكول عرض تسلسلي قائم على الحزم يستخدم مسار ساعة واحدًا بالإضافة إلى مسار بيانات واحد أو أكثر كأزواج تفاضلية، مما يتيح له حمل محتوى عالي الدقة (حتى 1080p) عبر أسلاك أقل بكثير من RGB المتوازي بعرض 24 بت. تتدفق البكسلات مباشرةً من مخزن إطارات مدعوم بـ SDRAM بمعدل التحديث المختار، فلا يتدخل المعالج في عملية التحديث.
تُختار دقة اللوحة عبر framesize باستخدام الثوابت الموجودة في الوحدة display (QVGA، VGA، HD، FHD، ...). تُدمج تسلسلات التهيئة الخاصة باللوحة عبر وسيط الكلمة المفتاحية controller -- وتغطي ST7701 لوحات DSI الشائعة بدقة 480x800 القائمة على ST7701. يمكن إصدار أوامر DCS خارج النطاق عبر bus_write() / bus_read(). تُقاد سطوع الإضاءة الخلفية كدبوس GPIO بسيط افتراضيًا، أو بواسطة DACBacklight / PWMBacklight إذا مُرّرت كـ backlight.
تُعرض الإطارات عبر استدعاء write() مع image.Image. يتولى المشغّل تحويل RGB والتحجيم وROI واللوحة اللونية وتحويلات الاتجاه داخليًا.
مثال -- عكس الكاميرا على لوحة DSI بدقة 480x800 قائمة على ST7701:
import csi
import display
import image
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
lcd = display.DSIDisplay(framesize=display.TFWVGA,
controller=display.ST7701())
while True:
lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)
البواني¶
- class display.DSIDisplay(framesize: int = FWVGA, *, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, channel: int = 0, controller: Any | None = None, backlight: Any | None = None)¶
framesizeواحدة من الدقات القياسية المدعومة (مثلdisplay.FWVGA).refreshيضبط معدل تحديث الشاشة بالهرتز. النطاق الصالح هو 30 إلى 120. وهذا يتحكم في ساعة LCD الخاصة بـ DSI.display_onيفعّل العرض.triple_bufferيخصص ثلاثة مخازن إطارات للسماح بتحديثات عرض خالية من التمزق. مطلوب للقلب الرأسي فيwrite().portraitيبدّل عرض وارتفاع الـ framesize.channelقناة MIPI DSI الافتراضية المستخدمة للتخاطب مع العرض.controllerمرّر فئة شريحة المتحكم هنا لتهيئتها مع العرض. مثلdisplay.ST7701()وهو متحكم عرض قياسي لشاشات MIPI DSI.backlightحدّد وحدة متحكم إضاءة خلفية لاستخدامها. افتراضيًا سيتم التحكم في الإضاءة الخلفية عبر دبوس GPIO.- deinit() None¶
تحرر دبابيس الإدخال/الإخراج وذاكرة RAM التي تستخدمها الفئة. يُستدعى هذا تلقائيًا عند الإتلاف.
- write(image: image.Image, x: int = 0, y: int = 0, x_scale: float = 1.0, y_scale: float = 1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None¶
تعرض
imageتبدأ زاويتها العلوية اليسرى عند الموقعxوy.قد يكون
imageسلسلة مسار بدلًا من كائن صورة لتحميل الصورة تلقائيًا من القرص. مثلwrite("test.jpg").يتحكم
x_scaleفي مقدار تحجيم الصورة المعروضة في اتجاه x (عدد عشري). إذا كانت هذه القيمة سالبة فستُقلب الصورة أفقيًا. وإذا لم يُحددy_scaleفسيطابقx_scaleللحفاظ على نسبة العرض إلى الارتفاع.يتحكم
y_scaleفي مقدار تحجيم الصورة المعروضة في اتجاه y (عدد عشري). إذا كانت هذه القيمة سالبة فستُقلب الصورة رأسيًا. ويتطلب القلب الرأسيtriple_buffer=True. وإذا لم يُحددx_scaleفسيطابقy_scale.roiهو صف مستطيل منطقة الاهتمام (x, y, w, h) من الصورة المراد عرضها.rgb_channelهي قناة RGB (0=R، 1=G، 2=B) المراد استخراجها من صورة RGB565 وعرضها على الشاشة بتدرج الرمادي. تعطّل القيمة-1الاستخراج. النطاق الصالح هو -1 إلى 2.يتحكم
alphaفي مدى عتامة الصورة. تعرض القيمة 255 صورة معتمة، والقيم الأقل تمزج نحو الأسود، وتنتج القيمة 0 صورة سوداء بالكامل. النطاق الصالح هو 0 إلى 255.قد يكون
color_paletteتعدادًا للوحة لونية أو صورة RGB565 من 256 بكسل لاستخدامها كجدول بحث لوني على قيمة تدرج الرمادي للصورة المدخلة. يُطبّق بعد استخراجrgb_channel.قد يكون
alpha_paletteصورة بتدرج الرمادي من 256 بكسل تُستخدم كجدول بحث ألفا يعدّلalphaلكل قيمة تدرج رمادي لبكسل الإدخال. يُطبّق بعد استخراجrgb_channel.hintهو عملية OR منطقية للأعلام:image.AREA: استخدم تحجيم المساحة عند التصغير بدلًا من الافتراضي وهو أقرب جار.image.BILINEAR: استخدم التحجيم ثنائي الخطية بدلًا من التحجيم الافتراضي بأقرب جار.image.BICUBIC: استخدم التحجيم ثلاثي التكعيب بدلًا من التحجيم الافتراضي بأقرب جار.image.CENTER: توسيط الصورة المرسومة على العرض. يُطبّق هذا بعد التحجيم.image.HMIRROR: عكس الصورة أفقيًا.image.VFLIP: قلب الصورة رأسيًا.image.TRANSPOSE: تبديل محاور الصورة (تبادل x/y).image.EXTRACT_RGB_CHANNEL_FIRST: إجراء استخراج rgb_channel قبل التحجيم.image.APPLY_COLOR_PALETTE_FIRST: تطبيق اللوحة اللونية قبل التحجيم.image.SCALE_ASPECT_KEEP: تحجيم الصورة المرسومة لتناسب داخل العرض.image.SCALE_ASPECT_EXPAND: تحجيم الصورة المرسومة لملء العرض (ينتج عنه قص).image.SCALE_ASPECT_IGNORE: تحجيم الصورة المرسومة لملء العرض (ينتج عنه تمدد).image.ROTATE_90: تدوير الصورة بمقدار 90 درجة (وهذا مجرد VFLIP | TRANSPOSE).image.ROTATE_180: تدوير الصورة بمقدار 180 درجة (وهذا مجرد HMIRROR | VFLIP).image.ROTATE_270: تدوير الصورة بمقدار 270 درجة (وهذا مجرد HMIRROR | TRANSPOSE).
- clear(display_off: bool = False) None¶
تمسح مخزن إطارات LCD إلى الأسود.
display_offإذا كان True يطفئ منطق العرض بدلًا من مسح مخزن الإطارات.
- backlight(value: int | None = None) int¶
تضبط قيمة تعتيم الإضاءة الخلفية لـ LCD، من 0 (إيقاف) إلى 100 (تشغيل). لا تمرّر أي وسائط للحصول على قيمة الإضاءة الخلفية الحالية.
ما لم يُمرّر متحكم
DACBacklightأوPWMBacklightإلى الباني، فإن الإضاءة الخلفية يتم التحكم فيها كدبوس GPIO ولن تتجاوز قيمتي 0 (إيقاف) إلى قيمة غير صفرية (تشغيل).
- bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None¶
ترسل أمر DSI
cmdإلى العرض.argsهو عدد صحيح أو مخزن مؤقت اختياري يحتوي على معاملات الأمر.dcsإذا كان True يرسل الأمر كحزمة DCS (مجموعة أوامر العرض).