> ## Documentation Index
> Fetch the complete documentation index at: https://docs.plato.ae/llms.txt
> Use this file to discover all available pages before exploring further.

# تكامل وحدة التحكم

> كيف تتحدث وحدة التحكم Plato مع برنامج تشغيل الطابعة بجهاز الكمبيوتر.

# تكامل وحدة التحكم

تستخدم وحدة التحكم Plato محول الطابعة `WIN_DRIVER` لبرنامج تشغيل الطابعة بالكمبيوتر.

## سجل الطابعة

تقوم وحدة التحكم بتخزين الطابعات في قاعدة بيانات IndexedDB تسمى `printer-database`.

تتضمن سجلات الطابعة ما يلي:

* نوع الطابعة
* حالة
* الخطأ الأخير
* التكوين
* عرض الورق
* فئات
* أنواع الطلب
* شعار

النوع ذو الصلة:

```ts theme={null}
type PrinterType =
  | "EPSON"
  | "WIN_DRIVER"
  | "USB"
  | "BUILT_IN"
  | "ANDROID_DRIVER"
  | "SUNMI";
```

## سائق URL

يبني محول `WIN_DRIVER` قاعدة URL من تكوين الطابعة:

```txt theme={null}
http://<driverIpAddress>:<driverPort>
https://<driverIpAddress>:<driverPort>
```

إذا كان `driverPort` فارغًا، فسيقوم المحول بحذف المنفذ. وهذا مفيد لـ HTTPS على المنفذ `443`.

## هدف الطابعة

يرسل المحول هدف الطابعة الفعلية بشكل منفصل عن برنامج التشغيل URL.

| حقل التكوين       | حقل الطلب    | ملحوظات                               |
| ----------------- | ------------ | ------------------------------------- |
| `driverIpAddress` | المضيف URL   | الآلة تعمل بنظام `plato-printer.exe`. |
| `driverPort`      | منفذ URL     | منفذ السائق HTTP/HTTPS.               |
| `driverUseHttps`  | بروتوكول URL | يستخدم `https` عندما يكون صحيحًا.     |
| `ipAddress`       | `ip_address` | IP الطابعة المادية.                   |
| `port`            | `port`       | منفذ TCP للطابعة الفعلية.             |
| `vendor`          | `vendor_id`  | معرف البائع المعين.                   |
| `productId`       | `product_id` | أرسلت للتوافق.                        |
| `beep`            | `beep`       | تمكين تسلسل الصفير بعد الطباعة.       |

إذا كان عنوان IP الخاص بالطابعة مفقودًا أو يساوي `192.168.0.0`، يرسل المحول `ip_address: null` و`port: null`، وهو ما يرفضه برنامج التشغيل الحالي باستخدام `Missing printer address`.

## معرفات البائعين

يقوم المحول بتعيين البائعين:

| بائع      | معرف البائع |
| --------- | ----------- |
| `EPSON`   | `0x04b8`    |
| `BIRCH`   | `0x1fc9`    |
| `PHILIPS` | `0x0471`    |
| `SUNMI`   | `0x04b8`    |
| `OSCAR`   | `0x04b8`    |

## تحضير الطباعة

تدفق طباعة وحدة التحكم:

1. تقديم DOM إلى PNG blob.
2. تحميل النقطة في القماش.
3. تحويل وحدات البكسل القماشية إلى صفوف نقطية سوداء/بيضاء.
4. قم بتقسيم الصفوف النقطية إلى أجزاء مكونة من 128 صفًا.
5. قم بتشفير كل قطعة على هيئة بايتات نقطية ESC/POS.
6. يقوم Base64 بتشفير كل قطعة بايت.
7. أرسل `POST /print`.

لا يتلقى برنامج التشغيل HTML مطلقًا. يتلقى قطع ESC/POS القابلة للطباعة.

## قائمة انتظار المتصفح

تحتوي وحدة التحكم على قائمة انتظار متصفح محلية قبل أن تصل الطلبات إلى برنامج تشغيل الكمبيوتر.

* يتم تخزين الوظائف في IndexedDB.
* تنتقل الوظائف من `pending` إلى `printing`.
* يتم وضع علامة `failed` على المهام الفاشلة.
* يتم استرداد مهمة `printing` التي لا معنى لها بعد 60 ثانية.
* يتم فحص المهام المجدولة كل 30 ثانية.
* تتم إعادة محاولة المهام الفاشلة كل 60 ثانية.

لدى برنامج تشغيل الطابعة PC قائمة انتظار Redis الخاصة به بعد قبول طلب HTTP. يعني هناك صفين:

| طابور                | موقع                       | غاية                                                        |
| -------------------- | -------------------------- | ----------------------------------------------------------- |
| قائمة انتظار المتصفح | Plato وحدة التحكم مفهرسةDB | يحتفظ بمهام الطباعة على جانب POS حتى يقبلها برنامج التشغيل. |
| قائمة انتظار السائق  | Redis/BullMQ               | يحتفظ بالمهام المقبولة حتى تستقبلها الطابعة الفعلية.        |

## رسم خرائط الحالة

تستدعي وحدة التحكم `POST /status`.

* يؤدي فشل HTTP إلى إرجاع `OFFLINE`.
* الاستجابة مع `ok: true` و`status` وليس `offline` ترجع `ONLINE`.
* يتم تخزين استجابات برنامج التشغيل الأخرى كـ `lastError`.

## درج النقود

تستدعي وحدة التحكم `POST /cash-drawer` لكل طابعة عبر الإنترنت تم تكوينها باستخدام درج النقود.
