ubxconfig¶
ubxconfig تطبيق Android طُوّر لضبط جهاز الاستقبال MS2 بسهولة من الهاتف أو الجهاز اللوحي مباشرةً، دون حاجة إلى حاسوب أو إلى u-center.
وهو يتيح:
- تطبيق ملف التعريف Rover
- تطبيق ملف التعريف Base (Survey-In أو Fixed)
- تطبيق ملف التعريف Base Caster (Survey-In أو Fixed)
- تفعيل إخراج البيانات الخام (RAW: RXM-RAWX / RXM-SFRBX)
- مراقبة التدفق التسلسلي في الزمن الحقيقي، والأهم من ذلك استعادة إعداد جهاز الاستقبال تلقائيًا عند فساده بسبب إعادة ضبط عرَضية إلى إعدادات المصنع (وهو أمر معتاد بعد استعمال u-center).
والتطبيق مصمَّم أداةً ميدانية: فكل ما يلزم هو الهاتف، وعند حدوث مشكلات جدّية كابل USB-C OTG.
الشاشة الرئيسية¶
شاشة التطبيق الرئيسية منظَّمة في بطاقة واحدة تضم جميع خطوات الاتصال والضبط.
Status: مؤشر في أعلى اليمين بنقطة ملوّنة ونص:
- Connected (أخضر) — الاتصال قائم ويعمل
- Connecting... (برتقالي، مع عدّاد ثوانٍ من 1 إلى 5) — محاولة جارية. وإن لم يُنشأ الاتصال حتى نهاية الثانية الخامسة يتوقف التطبيق ويعرض Not found
- Not found (أحمر) — المحاولة الأخيرة لم تنجح
- Not Connected (رمادي) — حالة محايدة في وضع السكون
Mode: قائمة منسدلة لاختيار قناة الاتصال
- Bluetooth (Bluetooth Classic SPP) — القناة المعتادة للاستعمال اليومي. وتعتمد على الأجهزة المقترنة سلفًا في إعدادات Android. ولا تعرض القائمة إلا أجهزة الاستقبال التي يبدأ اسمها بـ
MS2-XXXX - BLE Nordic (البلوتوث منخفض الطاقة بملف تعريف Nordic UART Service) — بديل منخفض الاستهلاك، يمسح في كل مرة أجهزة MS2 الظاهرة. ولا يُحفظ الاختيار: فالمسح جديد دائمًا
ووضع USB غير معروض كخيار مستقل في Mode: فهو قناة خدمة لا تُفعَّل إلا عند الحاجة إلى الاستعادة (انظر USB Recovery أدناه).
- Bluetooth (Bluetooth Classic SPP) — القناة المعتادة للاستعمال اليومي. وتعتمد على الأجهزة المقترنة سلفًا في إعدادات Android. ولا تعرض القائمة إلا أجهزة الاستقبال التي يبدأ اسمها بـ
- Device: قائمة الأجهزة المنسدلة، وتتوقف على Mode المختار
- في وضع Bluetooth لا تُدرج إلا أجهزة الاستقبال المقترنة سلفًا باسم
MS2-… - وفي وضع BLE Nordic يبدأ المسح عند النقر (مدته 5 ثوانٍ)؛ وإن لم يُعثر على شيء يعرض غير موجود. ويعرض كل عنصر الاسم وعنوان MAC وقوة الإشارة RSSI بالديسيبل مللي واط
- في وضع Bluetooth لا تُدرج إلا أجهزة الاستقبال المقترنة سلفًا باسم
- Receiver Configuration (لا تظهر إلا أثناء الاتصال): بطاقة قابلة للنقر تنقلك إلى شاشة الضبط (Rover، Base Survey-In، Base Fixed، رفع ملف مخصص)
- Serial Monitor (لا يظهر إلا أثناء الاتصال): زر أخضر يفتح شاشة الطرفية لفحص تدفق NMEA/UBX الوارد من جهاز الاستقبال
- GNSS Status (لا تظهر إلا أثناء الاتصال وبعد قراءة ناجحة): بطاقة تُملأ تلقائيًا بقراءة المعاملات الرئيسية من جهاز الاستقبال عبر UBX-CFG-VALGET:
- Mode: ROVER أو SURVEY-IN أو FIXED BASE أو UNKNOWN
- Rate: تردد التحديث بالهرتز
- UART1 / UART2: بروتوكولات الخرج المفعَّلة مع سرعة البود بين قوسين
- Elev. Cutoff: أدنى زاوية ارتفاع للأقمار الصناعية بالدرجات
- Communication Error (بطاقة صفراء، لا تظهر إلا أثناء الاتصال مع وجود مشكلات): تظهر عندما يعجز التطبيق عن قراءة إعداد جهاز الاستقبال أو عندما يكتشف أن UART1 على سرعة غير 115200. ويدعو النص إلى توصيل كابل USB OTG. وبعد توصيله تختفي البطاقة ويحل محلها الزر البرتقالي USB RECOVERY
في هذه الحالة يكون التطبيق متصلًا عبر البلوتوث لكنه يكتشف مشكلة في الاتصال بجهاز الاستقبال، وهي عادةً عدم تطابق سرعة البود بعد إعادة ضبط إلى إعدادات المصنع من u-center. وللاستعادة يكفي توصيل كابل USB-C OTG بين الهاتف وجهاز MS2: فتختفي البطاقة الصفراء ويحل محلها الزر البرتقالي USB RECOVERY الموصوف في القسم المخصص أدناه.
- Connect / Disconnect: زر أخضر أو أحمر في الأسفل يفتح اتصال الوضع المختار أو يغلقه
الاتصال وسرعة البود¶
وحدة البلوتوث المدمجة في MS2 مضبوطة من جهة المنفذ التسلسلي على 115200 بود، ويتطلب الاتصال السليم بجهاز استقبال u-blox الداخلي أن يكون UART1 فيه على 115200 أيضًا. وملف التعريف Rover الذي يطبّقه التطبيق يضبط هذه السرعة تحديدًا، ويفعّل كذلك UART1OUTPROT_UBX = 1 (وهو لازم لتصل ردود UBX-CFG-VALGET — ومن ثمّ بطاقة GNSS Status — إلى الهاتف عبر البلوتوث).
وإذا أُجريت إعادة ضبط إلى إعدادات المصنع للجهاز من u-center تتغيّر سرعة البود (الافتراضية لدى u-blox 38400، أو 9600 في بعض الحالات) فينقطع الاتصال عبر البلوتوث: إذ تقرأ وحدة البلوتوث العاملة على 115200 بايتات مأخوذة بسرعة خاطئة، فلا ينتج إلا خليط غير مفهوم، بلا NMEA أو UBX قابلين للقراءة. ولهذا السيناريو وُجدت USB Recovery.
USB Recovery¶
عملية تُنفَّذ مرة واحدة لاستعادة الاتصال عندما يخرج جهاز الاستقبال عن التزامن. والمستخدم:
- يتصل عبر البلوتوث كالمعتاد
- فيرى البطاقة الصفراء Communication Error (دليلًا على أن سرعة الجهاز خاطئة)
- فيوصل كابل USB OTG بين الهاتف وجهاز MS2
- فتُستبدل البطاقة الصفراء بالزر البرتقالي USB RECOVERY
- فينقر الزر
عندئذٍ ينفّذ التطبيق تلقائيًا، دون تدخل المستخدم:
- قطع اتصال البلوتوث القائم
- فتح منفذ USB-C OTG (ويتطلب إذن النظام عند أول توصيل)
- مسح سرعة البود الفعلية لجهاز الاستقبال بتجربة 9600 / 38400 / 115200 / 230400 / 460800 بود تباعًا، مع إرسال استعلام UBX-MON-VER لكل منها
- وبعد تحديدها يرسل الأمر UBX-CFG-VALSET لإعادة
UART1_BAUDRATE = 115200في RAM وFlash، ثم يوائم منفذه التسلسلي مع السرعة الجديدة وينتظر إشعار ACK - التحقق بعد التغيير بإرسال MON-VER ثانٍ على 115200 للتأكد من أن الجهاز يستجيب
- تطبيق إعداد Rover كاملًا (9 إطارات UBX-CFG-VALSET، الطبقات RAM+BBR+Flash) إطارًا إطارًا، مع انتظار UBX-ACK-ACK بين كل إطارين
- إغلاق منفذ USB
وطوال العملية تعرض نافذة في وسط الشاشة الحالة في الزمن الحقيقي («أجرّب سرعة X بود...»، «عُثر على الجهاز على سرعة X بود»، «تطبيق Rover N/9...»). وفي النهاية تظهر نافذة ثانية للتأكيد تبيّن النتيجة.
ينقر المستخدم OK، ويفصل كابل USB، ويعيد الاتصال عبر البلوتوث، فيعود الاتصال إلى العمل.
ملاحظة مهمة: أثناء الاستعادة لا يبقى التطبيق «متصلًا عبر USB» بصورة دائمة. فهي عملية غير قابلة للتجزئة: فتح، إصلاح، إغلاق. بل إن وضع USB لا يظهر أصلًا في قائمة Mode المنسدلة — فهو إجراء تلقائي خلف زر Recovery.
Receiver Configuration¶
شاشة يمكن الوصول إليها من البطاقة التي تحمل الاسم نفسه في الشاشة الرئيسية (وتظهر أثناء الاتصال). وهي تتيح تطبيق أحد ملفات التعريف الثلاثة الرئيسية — Rover أو Base Survey-In أو Base Fixed — أو رفع ملف إعداد UBX مخصص. ويتكيّف تخطيط الصفحة تلقائيًا مع الوضع المختار من القائمة المنسدلة Receiver Mode في الأعلى: فلا تظهر إلا الحقول المتعلقة بملف التعريف المختار.
في وضع Rover يكون التخطيط بسيطًا: قائمة Receiver Mode = Rover، وقائمة Frequency لاختيار تردد التحديث (1 أو 2 أو 5 أو 10 هرتز)، ثم الزر القابل للطي Advanced. وبتوسيعه (أيقونة الترس الخضراء والسهم إلى الأعلى) تصل إلى المعاملات الأقل استعمالًا — Cutoff (أدنى زاوية ارتفاع للأقمار الصناعية، من 0 إلى 40°، وتُعدَّل بالزرين −/+ أو بكتابة الرقم مباشرةً)، ومفتاح RAW data (يفعّل RXM-RAWX وRXM-SFRBX على UART1)، و*Save to Flash* (كتابة نهائية في الذاكرة الوامضة إضافةً إلى RAM). وفي الأسفل يرسل الزر الأخضر Send Configuration الإعداد إلى الجهاز.
وباختيار Base من القائمة Receiver Mode تتغيّر الشاشة: فتظهر قائمة فرعية Base Mode ببندين، Survey-In و*Fixed Position*. ووضع Survey-In هو الأسرع: إذ يحدّد الجهاز موضعه تدريجيًا بتجميع القياسات حتى يتحقق شرطان في آن واحد — Minimum duration بالثواني (60 ثانية افتراضيًا) و*Minimum accuracy* بالأمتار (5,0 م افتراضيًا). وفي التركيبات الدقيقة المعتادة لخوادم NTRIP الثابتة يُستحسن رفع هاتين القيمتين كثيرًا (مثلًا 600 ثانية فأكثر و1,0 م) لضمان موضع أساس بعدم يقين دون المتر.
أما وضع Fixed Position فمخصص للتركيبات التي تكون فيها إحداثيات نقطة الأساس معلومة سلفًا — عادةً من نقطة جيوديسية أو من عملية Survey-In محفوظة سابقًا أو من مسح تقليدي. وتتيح القائمة Coordinates اختيار نظام الإسناد: LLH (خط العرض وخط الطول بالدرجات العشرية والارتفاع بالأمتار) كما في لقطة الشاشة، أو ECEF (X/Y/Z بالأمتار، نظام ديكارتي مركزي أرضي). وبعد إدخال الإحداثيات الثلاثة يرسلها زر Send Configuration إلى الجهاز، فيدخل فورًا في TMODE = 2 (fixed) ويبدأ بتوليد تصحيحات RTCM3 على القنوات المضبوطة (UART2 افتراضيًا، أو UART1 في وضع Caster).
وفي جميع الأوضاع تُطوى لوحة Advanced تلقائيًا عند تغيير Receiver Mode: فذلك يمنع الصفحة من أن تطول أكثر مما ينبغي عند الانتقال من Rover المدمج إلى Base Fixed الذي فيه أربعة حقول ظاهرة أصلًا. ويعيد المستخدم فتح Advanced يدويًا عند الحاجة.
Rover
ملف تعريف للاستعمال كجهاز استقبال متحرك بتردد قابل للضبط (1، 2، 5، 10 هرتز):
- إخراج NMEA على UART1 (تفعيل GGA وGSA وGSV وRMC وGST وGNS؛ وتعطيل GLL وVTG)
- تعطيل UBX (ما لم يُفعَّل RAW — انظر أدناه)
- تعطيل جميع رسائل RTCM على منفذَي UART
- تعطيل TMODE
- زاوية القطع 10°
- UART1_BAUDRATE = 115200، UART2_BAUDRATE = 57600
- خيار RAW data: يفعّل RXM-RAWX وRXM-SFRBX على UART1 ويضبط
UART1OUTPROT_UBX = 1(وهو لازم لتدفق UBX الخام)
Base Survey-In
ملف تعريف لمحطة أساس تحدّد موضعها تدريجيًا:
- أدنى مدة بالثواني (قابلة للضبط)
- الدقة المستهدفة بالمليمتر (قابلة للضبط)
- إخراج RTCM3 (1005، 1077، 1087، 1097، 1127، 1230) على UART2 نحو جهاز راديو أو بثّاث NTRIP
- إمكان اختيار وضع Caster: فينتقل خرج RTCM إلى UART1 بدلًا من UART2 (وهو مفيد عند التكامل مع جسر يعيد النشر على خادم NTRIP)
- خيار RAW data كما في ملف تعريف Rover
Base Fixed
ملف تعريف لمحطة أساس معلومة الإحداثيات (LLH أو ECEF):
- تُدخل الإحداثيات يدويًا أو تؤخذ من آخر Survey-In
- مخطط RTCM3 نفسه المستعمل في Survey-In
Upload File
يرفع ملف إعداد UBX نصيًا (
.txtبأزواج مفتاح-قيمة ست عشرية) ويطبّق الأوامر على جهاز الاستقبال. وهو مفيد للإعدادات المخصصة أو التي يوفّرها دعم SoluTOP.
ولكل ملف تعريف يختار المستخدم الطبقة الهدف التي يُكتب فيها الإعداد:
- RAM — مؤقت، يُفقد عند إعادة التشغيل
- BBR — ذاكرة مدعومة بالبطارية، تصمد أمام إعادة التشغيل لا أمام قطع التغذية
- Flash — دائم
- الكل — RAM + BBR + Flash (يُنصح به للتعديلات النهائية)
ويجري الإرسال على دفعات من 64 مفتاحًا مع انتظار ACK لكل منها. ويبيّن شريط تقدّم سير العملية.
Serial Monitor¶
شاشة طرفية تعرض التدفق التسلسلي من جهاز الاستقبال في الزمن الحقيقي. ولها ثلاثة أوضاع عرض:
- ASCII: النص القابل للطباعة فقط، وتُستبدل المحارف غير القابلة للطباعة بـ
. - HEX: بايتًا بايتًا بالنظام الست عشري
- Auto (افتراضي): يتعرّف على NMEA وUBX، فيعرض NMEA نصًا وUBX بالنظام الست عشري مع ترويسة مفكوكة (
[UBX cls id])
شريط الأدوات في الأعلى:
- رجوع (← يغلق الشاشة ويوقف القراءة)
- Pause / Play (يوقف التدفق أو يستأنفه)
- Clear (يفرغ المخزن المؤقت)
والأسطر ملوّنة بحسب النوع: أخضر لرسائل ACK من UBX، وأحمر لـ NAK، وأزرق لبقية رسائل UBX، ورمادي فاتح لـ NMEA.
التحديثات التلقائية¶
يتحقق التطبيق تلقائيًا — مرة واحدة كل 24 ساعة على الأكثر — مما إذا كان هناك إصدار جديد في مستودع الإصدارات العام عبر واجهة GitHub API. ويُحفظ الطابع الزمني لآخر تحقق في SharedPreferences؛ وخلال 24 ساعة التالية لا يستعلم التطبيق من GitHub، فيبقى بدء التشغيل سريعًا حتى على شبكة بطيئة ويُحترم حد المعدل في واجهة GitHub (60 طلبًا في الساعة لعنوان IP غير موثّق).
وإذا وُجد وسم أحدث من BuildConfig.VERSION_NAME يعرض التطبيق نافذة برقم الإصدار المتاح وملاحظات الإصدار (أول 300 محرف) وخيارين: تنزيل (يفتح تنزيل ملف APK من الإصدار) أو لاحقًا.
ويمكن تشغيل التحقق نفسه يدويًا في أي وقت من نافذة About (أيقونة ℹ︎ في أعلى اليمين) بزر التحقق من التحديثات. والتحقق اليدوي يتجاوز حد المعدل ويعطي دائمًا نتيجة ظاهرة (بما في ذلك «التطبيق محدَّث» أو أي خطأ في الشبكة).
المرونة أمام انقطاع الاتصال¶
كشف الانقطاع المادي غير المقصود (إطفاء وحدة البلوتوث، فصل كابل USB، الخروج من نطاق التغطية) معروف بصعوبته في نظام Android: فالنواة لا تحدّث BluetoothSocket.isConnected عند سقوط الوصلة اللاسلكية، وقد يُخزَّن outputStream.write في المخزن المؤقت بصمت. ولذلك يجمع التطبيق بين عدة آليات متوازية لضمان أن تطابق حالة الواجهة الواقع دائمًا:
Bluetooth SPP — ثلاث آليات مستقلة:
BroadcastReceiverللحدثACTION_ACL_DISCONNECTEDمسجَّل فيconnect(): يلتقط حدث النظام فور سقوط الوصلة اللاسلكية (بزمن استجابة نحو ثانية)- كتابة نبض بحجم 256 بايت (32 رسالة UBX-MON-VER متتالية) كل 2,5 ثانية في خيط الاستقصاء: فتشبع مخزن نواة BlueZ وتفرض ظهور
Broken pipeإن كانت الوحدة قد اختفت - كاشف تجمّد التدفق: إن بقي
inputStream.available()عند 0 ثلاث دورات متتالية (نحو 7,5 ثانية) — مع أن جهازًا في حالة Connected ينبغي أن يُخرج NMEA باستمرار — يُعدّ المقبس ميتًا
ويلزم فشلان متتاليان للنبض قبل أن يغيّر التطبيق الحالة (تفاديًا للإنذارات الكاذبة عند الاضطرابات العابرة). ويعمل الاستقصاء على
Dispatchers.IOفيستمر حتى والتطبيق في الخلفية.BLE — يتلقى
BluetoothGattCallbackالحدثSTATE_DISCONNECTEDفور فقدان الوصلة ويحدّث الواجهةUSB — استقصاء كل 1,5 ثانية عبر
UsbManager.findDevice(). وإن فُصل الكابل ماديًا يعيد التطبيق ضبط حالة USB فقط؛ وتبقى بطاقة GNSS Status الخاصة بالبلوتوث ظاهرة إن كان اتصال BT قائمًاالحماية من الانهيار — يمتص
Thread.UncaughtExceptionHandlerالعام استثناءاتIOExceptionالخاصة بوسائط النقل التي قد تفلت من كتل try/catch في المدراء المنفردة، فيمنع الاستثناء من إنهاء التطبيق. كما أن حلقات الاستقصاء لها كتل try/catch داخلية حتى لا تتوقف بصمت عند خطأ غير متوقعقراءة GNSS بعد الاتصال بتراجع أُسّي — عند أول اتصال يقرأ التطبيق إعداد الجهاز عبر ثلاث محاولات
UBX-CFG-VALGETبمهل 2 ثانية / 3 ثوانٍ / 4,5 ثانية وفواصل 0 مللي ثانية / 300 مللي ثانية / 800 مللي ثانية بينها. وهذا يخفي اضطرابات البلوتوث العابرة (الارتجاف، وتدفق NMEA الذي يملأ المخزن قبل رد UBX) — فتُملأ بطاقة GNSS Status حتى مع ضياع إطار واحد، ولا تظهر البطاقة الصفراء Communication Error إلا إذا فشلت المحاولات الثلاث كلها
الأذونات المطلوبة¶
عند التشغيل الأول يطلب التطبيق:
BLUETOOTH_CONNECT— لازم للاتصال بالأجهزة المقترنة (Android 12 فما فوق)BLUETOOTH_SCAN— لازم لمسح أجهزة BLEINTERNET— لازم للتحقق من التحديثات عبر واجهة GitHub API- الوصول إلى جهاز USB OTG — ويطلبه النظام فقط عند محاولة USB Recovery
التثبيت
ملف APK متاح هنا. وفي نظام Android يجب السماح بالتثبيت من مصادر غير معروفة للمتصفح أو مدير الملفات المستعمل.
فيديو
دليل كامل متاح هنا.









