واجهة الخدمة التابعة (SPI)

تشمل هذه الوحدة المجرّد الأساسي لتواصل الرقيق SPI.

الملخّص

مواقد الخط

otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) مَعلمة typetype
bool(*
يشير إلى اكتمال معاملة SPI مع المدة المحددة.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) مَعلمة typetype
void(*
تم استدعاء الدالة بعد استدعاء المعاملة بالكامل ويعود إلى TRUE لتنفيذ أي معالجة أخرى مطلوبة.

الدوال

otPlatSpiSlaveDisable(void)
void
إيقاف واجهة واجهة SPI الفرعية
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
إعداد واجهة العبود SPI.
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
قم بإعداد البيانات لمعاملة SPI التالية.

مواقد الخط

otPlatSpiSlavetransactioncompleteCallback

bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)

يشير إلى اكتمال معاملة SPI مع المدة المحددة.

تمت كتابة البيانات المؤدية إلى العبد إلى المؤشر الذي أشارت إليه الوسيطة aInputBuf في الاستدعاء السابق إلى otPlatSpiSlavePrepareTransaction().

بعد استدعاء هذه الدالة، يصبح otPlatSpiSlavePrepareTransaction() غير صالح ويجب استدعاؤه مرة أخرى حتى تصبح المعاملة التالية صالحة.

تجدر الإشارة إلى أن هذه الدالة يتم استدعاءها دائمًا في نهاية المعاملة، حتى إذا لم يتم استدعاء otPlatSpiSlavePrepareTransaction() بعد. وفي مثل هذه الحالات، سيتم حساب aOutputBufLen وaInputBufLen بقيمة صفرية.

يمكن استدعاء هذا معاودة الاتصال من سياق ISR. تشير قيمة الإرجاع من هذه الدالة إلى ما إذا كانت هناك أي عمليات معالجة أخرى مطلوبة. إذا تم عرض TRUE، يجب أن ينفِّذ نظام تشغيل المحرك التابع لـ spi-s الأساسي عملية استدعاء عملية المعاملة (aProcessCallback التي تم ضبطها في otPlatSpiSlaveEnable()) والتي يجب أن يستدعيها هذا الاستدعاء من سياق نظام التشغيل نفسه الذي تستخدمه أي واجهة برمجة تطبيقات OpenThread أخرى/ .

التفاصيل
المعلَمات
[in] aContext
تم تمرير مؤشر السياق إلى otPlatSpiSlaveEnable().
[in] aOutputBuf
قيمة aOutputBuf من المكالمة الأخيرة إلى otPlatSpiSlavePrepareTransaction().
[in] aOutputBufLen
قيمة aOutputBufLen من المكالمة الأخيرة إلى otPlatSpiSlavePrepareTransaction().
[in] aInputBuf
قيمة InputBuf من المكالمة الأخيرة إلى otPlatSpiSlavePrepareTransaction().
[in] aInputBufLen
قيمة InputBufLen من المكالمة الأخيرة إلى otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
طول المعاملة المكتملة، بالبايت.
طلبات الإرجاع
True إذا كان بعد هذه الاستدعاء يعرض النظام الأساسي استدعاء العملية aProcessCallback، FALSE إذا لم يكن هناك أي شيء لمعالجته ولست بحاجة إلى استدعاء استدعاء العملية.

otPlatSpiSlavetransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

تم استدعاء الدالة بعد استدعاء المعاملة بالكامل ويعود إلى TRUE لتنفيذ أي معالجة أخرى مطلوبة.

وعلى عكس otPlatSpiSlaveTransactionCompleteCallback الذي يمكن استدعاءه من أي سياق لنظام التشغيل (مثل، (ISR)، يجب استدعاء هذه الاستدعاءات من سياق نظام التشغيل نفسه مثل أي واجهة برمجة تطبيقات أو استدعاء آخر لـ OpenThread.

التفاصيل
المعلَمات
[in] aContext
تم تمرير مؤشر السياق إلى otPlatSpiSlaveEnable().

الدوال

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

إيقاف واجهة واجهة SPI الفرعية

otPlatSpiSlaveEnable

otError otPlatSpiSlaveEnable(
  otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback,
  otPlatSpiSlaveTransactionProcessCallback aProcessCallback,
  void *aContext
)

إعداد واجهة العبود SPI.

يُرجى ملاحظة أن تابع تابع SPI ليس جاهزًا بشكل كامل حتى يتم إعداد معاملة باستخدام otPlatSPISlavePrepareTransaction().

إذا كانت وحدات البايت otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all0xFF` تتجاهل جميع وحدات البايت المستلمة.

التفاصيل
المعلَمات
[in] aCompleteCallback
أشِر إلى إكمال المعاملة لمعاودة الاتصال.
[in] aProcessCallback
مؤشر معالجة رد الاتصال.
[in] aContext
مؤشر السياق الذي سيتم تمريره إلى استدعاءات معاودة الاتصال.
قيم الإرجاع
OT_ERROR_NONE
تم بنجاح تفعيل واجهة SPI Slave.
OT_ERROR_ALREADY
تم تفعيل واجهة SPI Slave.
OT_ERROR_FAILED
تعذّر تفعيل واجهة SPI Slave.

otPlatSpiSlaveتحضيرالمعاملة

otError otPlatSpiSlavePrepareTransaction(
  uint8_t *aOutputBuf,
  uint16_t aOutputBufLen,
  uint8_t *aInputBuf,
  uint16_t aInputBufLen,
  bool aRequestTransactionFlag
)

قم بإعداد البيانات لمعاملة SPI التالية.

يجب أن تظل مؤشرات البيانات صالحة إلى أن يتم استدعاء المعاملة بالكامل من خلال برنامج تشغيل تابع SPI أو حتى بعد المكالمة التالية إلى otPlatSpiSlavePrepareTransaction().

وقد يتم استدعاء هذه الدالة أكثر من مرة قبل بدء مقدم خدمة SPI بالمعاملة. وسيؤدي كل استدعاء ناجح إلى هذه الدالة إلى تجاهل القيم السابقة من المكالمات السابقة.

عدم استدعاء هذه الدالة بعد إتمام معاملة هو نفسه كما لو تم استدعاء هذه الدالة في السابق مع ضبط طولي المخزن المؤقت على صفر وضبط aRequestTransactionFlag على false.

بعد انقضاء مهلة aOutputBufLen بايت من aOutputBuf، يتم تثبيت دبوس MISO مرتفعًا حتى ينتهي المشرف من معاملة SPI. تعادل هذه الدالة الوظيفة المتّبعة لنهاية aOutputBuf مع 0xFF بايت من طول المعاملة.

بعد تسجيل aInputBufLen بايت من InputBuf في ساعة من MOSI، يتم تجاهل جميع القيم اللاحقة من رقم تعريف MOSI إلى أن يُنهي مشرف SPI المعاملة.

تجدر الإشارة إلى أنه حتى في حال استنفاد aInputBufLen أو aOutputBufLen (أو كليهما) قبل أن ينتهي مشرف SPI من إحدى المعاملات، لا يزال من الممكن تتبع الحجم المستمر للمعاملة ليتم تمريره إلى معاودة الاتصال الكاملة للمعاملة. على سبيل المثال، إذا كانت aInputBufLen تساوي 10 وaOutputBufLen تساوي 20 وكانت قيمة SPI تخرج عن 30 بايت، يتم تمرير القيمة 30 إلى معاملة إكمال الاتصال.

في حال تمرير مؤشّر NULL في صورة aOutputBuf أو aInputBuf، يعني ذلك أنّ مؤشّر التخزين المؤقت يجب ألا يتغيّر من قيمته السابقة/الحالية. وفي هذه الحالة، يجب تجاهل وسيطة الطول المقابلة. على سبيل المثال، يغيّر otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) مؤشر المخزن المؤقت للإدخال ومدته مع الإبقاء على مؤشر ذاكرة التخزين المؤقت للإخراج كما في السابق.

أي استدعاء لهذه الدالة عندما تكون هناك معاملة قيد التقدم سيؤدي إلى تجاهل جميع الوسيطات وقيمة المعرّف تكون OT_ERROR_BUSY.

التفاصيل
المعلَمات
[in] aOutputBuf
ستتم كتابة البيانات إلى رقم تعريف MISO
[in] aOutputBufLen
حجم المخزن المؤقت للمخرجات، بالبايت
[in] aInputBuf
البيانات التي ستتم قراءتها من رقم تعريف MOSI
[in] aInputBufLen
حجم المخزن المؤقت للإدخال، بالبايت
[in] aRequestTransactionFlag
ضبط على true إذا كان يجب ضبط مقاطعة المضيف
قيم الإرجاع
OT_ERROR_NONE
تم إعداد المعاملة بنجاح.
OT_ERROR_BUSY
هناك معاملة قيد المعالجة حاليًا.
OT_ERROR_INVALID_STATE
لم يتم استدعاء otPlatSpiSlaveEnable().

المراجع

تنشأ مواضيع واجهة برمجة التطبيقات المرجعية لـ OpenThread من رمز المصدر، المتوفر على GitHub. للاطّلاع على مزيد من المعلومات أو للمساهمة في مستنداتنا، يُرجى الرجوع إلى المراجع.