مرحبًا بك في مشروع Open Steam Controller!
هذا مشروع حيث كنت أعمل على تفكيك البرامج الثابتة والأجهزة في وحدة التحكم في Steam.
أولاً ، من المهم التحدث قليلاً عن وحدة تحكم Steam (الجهاز الذي يركز عليه هذا المشروع).

وحدة التحكم في Steam هي وحدة تحكم ألعاب الفيديو التي أصدرتها شركة Valve Corporation في 10 نوفمبر 2015. كان هذا جزءًا من مبادرة Valve لمنح لاعبي الكمبيوتر خيار تجربة تشبه وحدة التحكم (أي لاعب الأريكة الذي يجلس أمام تلفزيون ويستخدم وحدة تحكم بدلاً من لوحة المفاتيح والماوس).

حاولت وحدة تحكم Steam الحفاظ على بعض الجوانب مألوفة لوحدات التحكم في ألعاب الفيديو الحديثة (أي عصا تمثيلية اليسرى ، وأربعة أزرار للوجه ، وأزرار كتف ومصد) مع تغيير بعض المعايير التي توقعناها (أي استبدال وسادة الاتجاه والعصا التناظرية اليمنى مع لوحات التتبع).

يمكن العثور على تفاصيل إضافية حول وحدة التحكم على صفحة المنتج الرسمي
قد تتساءل عن سبب وجود هذا المشروع ولماذا استثمرت مبلغًا غير مهم من وقتي وطاقتي فيه على مدار العامين الماضيين.
أولاً ، وجدت أن تصميم وحدة التحكم هذه مقنعة. إن وجود لوحة تتبع بدلاً من D-Pad والعصا التناظرية اليمنى هي فكرة مثيرة للاهتمام. يمكن تكوين لوحات التتبع للعمل بطرق متنوعة ولا تحاكي فقط ما تم استبداله ، ولكن أيضًا توفير نماذج تفاعل جديدة. وأيضًا ، فإن فكرة استخدام Haptics لتشغيل القليل من الركب عندما تبدأ وحدة التحكم أو تغلقها هي لمسة أنيقة التي جعلت وحدة التحكم تبرز بشكل أكبر. كانت القدرة على تخصيص هذه الأناشفة بشكل كامل رغبة فورية عندما بدأت في استخدام وحدة التحكم لأول مرة.
ثانياً ، تركت وحدة التحكم في الوصول إلى حد ما. جعلت قادرة على تحميل تحديثات البرامج الثابتة يدويًا جعل حاجز الدخول لتشغيل البرامج الثابتة المخصصة أقل بكثير. لا يزال هناك تحد كبير للحصول على "Hello World" (أي وميض زر Steam Button LED). ومع ذلك ، لم يكن هذا صعبًا تقريبًا كما أتخيل القيام بشيء مماثل على وحدة تحكم مصممة لتكون أكثر مقاومة للمزاج. إنني أقدر حقًا حقيقة أن Valve ترك هذا الجهاز يمكن الوصول إليه كما فعلوا ولا يثبط الناس عن محاولة اختراقه.
ثالثًا ، قام Ifixit بدمع لطيف حقًا من وحدة التحكم. لقد أعطاني هذا فكرة عما يحدث فيه وحدة التحكم داخليًا ، دون الحاجة إلى (في البداية) تفكيك أجهزتي. أشار هذا إلى الكثير من الأجهزة الطرفية والمعالجات الأنيقة التي اعتقدت أنها ستكون رائعة للعمل معها ، خاصة في سياق منتج تم تصميمه بالفعل لغرض معين.
الآن بعد أن تم شرح وحدة التحكم وبعض قدراتها (الافتراضية) ، يمكننا البدء في الحديث عن هذا المشروع. وهي أريد تغطية ما تم إنجازه ، وما آمل أن أنجزه للمضي قدمًا.
ملاحظة ، ما يلي هو مطول وسرد بعض الشيء. هناك الكثير من المحتوى في هذا المشروع ، وهذه محاولة لتحطيم التفاصيل بطريقة من شأنها أن تعطي سهلاً لمتابعة الأرض للأشخاص الجدد في هذا الجهد. إذا كنت من نوع TLDR ، تحقق من قسم الإشعار والتحذير أدناه ، ثم لا تتردد في القفز إلى قسم المشاريع الفرعية للوصول إلى لحم الجهد. يجب أن تكون متأكدًا أيضًا من الاطلاع على مقاطع الفيديو التجريبية التي تظهر بعض الإنجازات الرئيسية في العمل.
كما ذكرنا سابقًا ، فإن النية الأساسية لهذا المشروع هي استكشاف وتفكيك خيارات التكوين والاستخدامات لوحدة التحكم في Steam. ومع ذلك ، هذا غامض بعض الشيء. لذلك لنبدأ ببعض الأمثلة. أولاً ، كان الهدف الرئيسي لهذا المشروع هو أن تكون قادرًا على كتابة البرامج الثابتة المخصصة للمعالج الرئيسي على وحدة التحكم. هذا هو ما يفتح الباب لكثير من الاحتمالات الأخرى للمضي قدمًا.
ومع ذلك ، قبل أن أتمكن من بدء كتابة البرامج الثابتة ، كنت بحاجة إلى مزيد من المعلومات حول وحدة التحكم. كان Valve لطيفًا بما يكفي لترك الباب مفتوحًا للوصول إلى الإصدار الثنائي من البرامج الثابتة الخاصة بهم والقدرة على تحديث المعالج الرئيسي بسهولة. ومع ذلك ، فإنهم لم يقدموا مخططات أو قائمة بالمكونات أو أوراق البيانات التي كان لدى مهندس برمجيات مضمن عادةً ما إذا تم تكليفه بعملية كتابة البرامج الثابتة المخصصة. لذلك ، كنت بحاجة إلى اللجوء إلى الهندسة العكسية. هذا يتلخص بشكل أساسي في تفكيك الأجهزة والبرامج الثابتة الرسمية حتى أتمكن من فهم كيفية كتابة البرامج الثابتة الخاصة بي. في هذه المرحلة ، تدير الجهود الهندسية العكسية في الغالب مسارها ، حيث تم اكتشاف الكثير وتوثيقه واستخدامه لجهود أخرى. يمكن العثور على تفاصيل حول الجهود الهندسية العكسية في المشروع الفرعي للهندسة العكسية.
الآن وقد تم إنشاء جهد هندسي عكسي وبدأت في جمع المعلومات على الأجهزة ، تمكنت من بدء كتابة البرامج الثابتة المخصصة. تحقق من الجائزة الفرعية للبرامج الثابتة لرؤية الوضع الحالي للبرامج. في الغالب هذا هو برنامج الأداة المساعدة للسماح للمستخدم بالاستعلام عن الأجهزة الطرفية المختلفة أو أخذ قياسات في حالات مختلفة (حيث يجب التقاط بعض هذه المعلومات وإعادة تغذيتها إلى عملية الهندسة العكسية للحفاظ على المضي قدمًا). ومع ذلك ، أصبح من الواضح في النهاية أن هناك وظائف كافية تم التقاطها هنا بأنه لن يكون هناك الكثير من العمل الإضافي لجعل هذه الأجهزة تعمل كوحدة تحكم لأجهزة المفاتيح الأخرى (أي مفتاح Nintendo).
بعد ذلك وصلنا إلى ما كان في الأصل النية الوحيدة لهذا المشروع. وهذا يعني أن الهدف من القدرة على التحكم الكامل في الأغاني (Jingles) التي تلعبها وحدة التحكم في Steam (عبر لوحة التتبع) على السلطة وإغلاقها. نظرًا لبعض الاكتشافات عبر الجهود الهندسية العكسية ، يسمح هذا المشروع بتخصيص الأناشيد بالكامل ولإجراء هذه التخصيصات لتستمر مع تشغيل البرامج الثابتة الرسمية في Valve. للحصول على تفاصيل حول كيفية تخصيص Jingles على وحدة التحكم الخاصة بك ، أو لمزيد من التفاصيل (أي كيف يتم تنسيق بيانات Jingle وكيف يمكننا تخصيص الأناشيد دون تعديل البرامج الثابتة الرسمية) راجع مشروع Jingles الفرعي.
أخيرًا ، من المهم أن نذكر أن نية أخرى لهذا المشروع هي أن تكون مورد تعليمي و/أو تحفيزي. ربما أنت مهتم بوحدة تحكم البخار. أو ربما تكون مهتمًا بكتابة برنامج مضمن لجهاز تجاري. في كلتا الحالتين ، يكون الأمل أن يوفر هذا المشروع معلومات واضحة وموجزة لإلهام وتمكين الأشخاص من التعلم والقيام بالمزيد. أعلم أنني تعلمت الكثير من هذا الجهد ، وإذا كان يمكن مشاركة أي من ذلك ومساعدة الآخرين ، فسيكون ذلك رائعًا.
للحصول على نقطة انطلاق حول التفاصيل الإضافية والإنجازات والنوايا المستقبلية لهذا المشروع ، يرجى الاطلاع على قسم المشاريع الفرعية أدناه.
يرجى إدراك أنه من خلال الاستفادة من أي جزء من هذا المشروع ، تقوم بذلك على مسؤوليتك الخاصة. هذا جهد هندسي عكسي ولا أقدم أي مطالبات أن يكون لديه فهم كامل للأجهزة التي أقدمها لبرامج ثابتة مخصصة أو معدلة لها. نأمل أن يمنع الاختبار الذي أجريه قبل نشر النتائج التي توصلت إليها وتعديلاتاتي عن الأضرار التي لحقت وحدة تحكم Steam أو أي شيء قد تقوم بتوصيل وحدة التحكم Steam الخاصة بك (أي مفتاح Nintendo). ومع ذلك ، لا يمكنني ضمان ذلك.
يرجى أيضًا ملاحظة أن هذا يجري مشاركته في المقام الأول للأغراض التعليمية. على الرغم من أن هذا قد يسمح للمستخدم بالقيام بأشياء مثل استخدام وحدة التحكم في Steam على مفتاح Nintendo ، إلا أنه يرجى إدراك أن هذا سيأتي بالتأكيد مع المقايضات مقارنة بالأجهزة والبرامج الثابتة المدعومة رسميًا. إذا كنت تريد وحدة تحكم مفتاح رخيصة وكنت على ما يرام مع كونها سلكية ، تحقق من تلك التي تصنعها Powera أو Hori. إذا كنت تريد وحدة تحكم مميزة بالكامل ، ففكر في إنفاق الأموال الإضافية والحصول على وحدة تحكم محترفة (إنها تستحق ذلك حقًا).
لاحظ أخيرًا أنني أقول كل هذا على أمل عدم تثبيط أي شخص. يرجى الغوص في ويديك قذرة. فقط يرجى العلم أن هناك (نأمل) صغيرًا جدًا ، ولكن غير صفري ، فرصة أن يؤدي الخطأ إلى أجهزة من الطوب أو المكسورة.
يعطي هذا القسم الخطوط العريضة والمظاهرات المختصرة (إن وجدت) للجهود الرئيسية لهذا المشروع. يمكن العثور على مزيد من التفاصيل حول كل مشروع فرعي في أدلة كل منهما.
يتم توجيه العمل في هذا الدليل إلى إنشاء إنشاء برامج ثابتة مخصصة تمامًا لوحدة التحكم في Steam. يمكن تكوين هذا المشروع لجعل وحدة التحكم بمثابة نظام تطوير يسمح بالاستعلام عن الأجهزة الطرفية واستكشاف أو التحقق من سلوكيات النظام. بالإضافة إلى ذلك ، يمكن تكوين المشروع لأغراض أكثر عملية ، مثل التصرف مثل وحدة تحكم مفتاح Nintendo السلكية.
فيما يلي بعض مقاطع الفيديو التي توضح بنية البرامج الثابتة المختلفة:
افتح وحدة تحكم البخار: Nintendo Switch
Open Steam Controller: لوحة التطوير
يتم توجيه العمل في هذا الدليل إلى إنشاء طريقة سهلة الاستخدام لتخصيص ما يتم تشغيل الأرقام عندما تبدأ وحدة التحكم في Steam وتتوقف.
فيما يلي مقطع فيديو يوضح كيفية تخصيص المناطق على وحدة تحكم Steam:
افتح وحدة تحكم البخار: تخصيص Jingle
يركز العمل في هذا الدليل على تفكيك البرامج الثابتة والأجهزة الخاصة بوحدة تحكم Steam. الفهم المكتسب من هذا هو في كثير من الأحيان
جزء مهم من المشاريع الفرعية الأخرى.
يوفر Steam القدرة على تغيير خيارات تكوين معينة لوحدة تحكم Steam (أي تغيير سطوع LED ، التغيير الذي سيتم تشغيله من ذاكرة النظام). يحتوي هذا الدليل على عمل من أجل الفهم ، والاستنساخ ، وربما ، التوسع في هذه الوظيفة.
هذا مشروع مفتوح المصدر ، لذا يرجى الاستفادة من هذا كما تريد (طالما أنه لا ينتهك أي تراخيص مذكورة في الداخل).
إذا كنت ترغب في تقديم مساهمات مرة أخرى إلى هذا الريبو ، فسيكون ذلك رائعًا. يمكن أن يأتي ذلك في شكل مشكلات/مناقشات حول كيف يمكن أن يكون ذلك أكثر سهولة في الاستخدام أو عن طريق إضافة ميزات أو دعم لم يكن موجودًا بعد.
لاحظ أن هناك مستندات TODO لكل مشروع فرعي. الفكرة هي تحديد الأهداف التي أود تحقيقها. إذا كنت ترغب في المساعدة في أي من هذه ستكون رائعة. سيكون الأمر أكثر روعة إذا بدأت محادثة بشأن نواياك حتى تحد من فرص الجهد المكررة أو التصميمات غير المتنوعة.
سأبذل قصارى جهدي لتوفير برامج سهلة الاستخدام وقوية. ومع ذلك ، لا يزال هناك على الأرجح البق. إذا وجدت خطأ ، يرجى الإبلاغ عنه.
أفضل طريقة للإبلاغ عن خطأ هي استخدام علامة تبويب المشكلات على GitHub.
عند الإبلاغ عن خطأ/مشكلة ، يرجى التأكد من تقديم تفاصيل كافية. التفاصيل الرئيسية التي يجب تضمينها هي:
يسرد هذا القسم بعض المشاريع التي أثرت على هذا المشروع ، وكذلك روابط لبعض الموارد التي قد لا تزال مفيدة للبقاء على حدود.
على الرغم من أن الكثير قد تم إنجازه في هذا المشروع حتى الآن ، إلا أنه لا يزال هناك الكثير مما يمكن القيام به مع وحدة التحكم في Steam (خاصة بالنظر إلى الأساس الذي تم وضعه حتى هذه النقطة). من أجل التقاط وتتبع مستندات TODO التي تم إجراؤها لكل مشروع فرعي. مكان جيد للبدء هو وثيقة TODO ذات المستوى الأعلى. ويغطي هذا أعلى مستوى للمشروع مع توفير روابط إلى Todos الفرعية المحددة.