एसपीआई स्लेव

इस मॉड्यूल में, एसपीआई स्लेव कम्यूनिकेशन के लिए प्लैटफ़ॉर्म ऐब्स्ट्रैक्शन शामिल है.

खास जानकारी

टाइपडीफ़

otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) typedef
bool(*
इससे पता चलता है कि एसपीआई की मदद से, तय समयसीमा में लेन-देन पूरा हुआ है.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) typedef
void(*
लेन-देन पूरा होने के बाद कॉलबैक कॉल शुरू होता है और आगे की प्रोसेसिंग के लिए, TRUE को लौटाया जाता है.

फ़ंक्शन

otPlatSpiSlaveDisable(void)
void
एसपीआई स्लेव इंटरफ़ेस को बंद करें और उसे बंद करें.
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
SPI स्लेव इंटरफ़ेस को शुरू करें.
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
अगले एसपीआई लेन-देन के लिए, डेटा तैयार करें.

टाइपडीफ़

otPlatSpiSlaveTransactionCompleteCallback

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

इससे पता चलता है कि एसपीआई की मदद से, तय समयसीमा में लेन-देन पूरा हुआ है.

स्लेव को किया गया डेटा, otPlatSpiSlavePrepareTransaction() को किए गए पिछले कॉल के aInputBuf तर्क से दिखाए गए पॉइंटर में लिखा गया है.

इस फ़ंक्शन को कॉल करने के बाद, otPlatSpiSlavePrepareTransaction() अमान्य हो जाता है. अगले लेन-देन के मान्य होने के लिए, इसे फिर से कॉल करना होगा.

ध्यान दें कि इस फ़ंक्शन को हमेशा किसी लेन-देन के अंत में कॉल किया जाता है, भले ही otPlatSpiSlavePrepareTransaction() को अभी तक कॉल न किया गया हो. ऐसे मामलों में, aOutputBufLen और aInputBufLen शून्य होंगे.

इस कॉलबैक को आईएसआर कॉन्टेक्स्ट से कॉल किया जा सकता है. इस फ़ंक्शन से मिलने वाली रिटर्न वैल्यू से पता चलता है कि आगे की प्रोसेसिंग की ज़रूरत है या नहीं. अगर TRUE दिखाया जाता है, तो प्लैटफ़ॉर्म spi-slave ड्राइवर को लागू करने के लिए ट्रांज़ैक्शन प्रोसेस कॉलबैक (otPlatSpiSlaveEnable() में सेट किया गया aProcessCallback) को शुरू करना ज़रूरी है. इस कॉलबैक को उसी ओएस कॉन्टेक्स्ट से कॉल किया जाना चाहिए जिस पर किसी अन्य OpenThread API/कॉलबैक को कॉल किया जाता है.

जानकारी
पैरामीटर
[in] aContext
कॉन्टेक्स्ट पॉइंटर otPlatSpiSlaveEnable() में पास किया गया.
[in] aOutputBuf
otPlatSpiSlavePrepareTransaction() को किए गए आखिरी कॉल से aOutputBuf की वैल्यू.
[in] aOutputBufLen
otPlatSpiSlavePrepareTransaction() को किए गए आखिरी कॉल से aOutputBufLen की वैल्यू.
[in] aInputBuf
otPlatSpiSlavePrepareTransaction() को किए गए पिछले कॉल के दौरानInputBuf की वैल्यू.
[in] aInputBufLen
otPlatSpiSlavePrepareTransaction() को किए गए पिछले कॉल के दौरान एकInputBufLen की वैल्यू
[in] aTransactionLength
पूरे किए गए लेन-देन की अवधि, बाइट में.
लौटाए गए सामान
'सही', अगर इस कॉल के बाद प्लैटफ़ॉर्म को प्रोसेस कॉलबैक को शुरू करना चाहिए, aProcessCallback. अगर प्रोसेस करने के लिए कुछ भी नहीं है और प्रोसेस कॉलबैक को शुरू करने की ज़रूरत नहीं है, तो 'सही'.

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

लेन-देन पूरा होने के बाद कॉलबैक कॉल शुरू होता है और आगे की प्रोसेसिंग के लिए, TRUE को लौटाया जाता है.

otPlatSpiSlaveTransactionCompleteCallback के उलट, जिसे किसी भी ओएस कॉन्टेक्स्ट से कॉल किया जा सकता है (उदाहरण के लिए, ISR), तो इस कॉलबैक को उसी ओएस कॉन्टेक्स्ट से कॉल किया जाना चाहिए जिससे कोई भी अन्य OpenThread API/कॉलबैक कॉल किया जा सकता है.

जानकारी
पैरामीटर
[in] aContext
कॉन्टेक्स्ट पॉइंटर otPlatSpiSlaveEnable() में पास किया गया.

फ़ंक्शन

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

एसपीआई स्लेव इंटरफ़ेस को बंद करें और उसे बंद करें.

otPlatSpiSlaveEnable

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

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 स्लेव इंटरफ़ेस को सफलतापूर्वक सक्षम किया गया.
OT_ERROR_ALREADY
SPI स्लाव इंटरफ़ेस पहले से चालू है.
OT_ERROR_FAILED
SPI स्लेव इंटरफ़ेस को चालू नहीं किया जा सका.

otPlatSpiSlavePrepareTransaction

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

अगले एसपीआई लेन-देन के लिए, डेटा तैयार करें.

डेटा पॉइंटर तब तक मान्य रहने चाहिए, जब तक लेन-देन पूरा होने पर एसपीआई स्लेव ड्राइवर कॉल नहीं करता या otPlatSpiSlavePrepareTransaction() पर अगला कॉल आने तक.

इसे SPI मास्टर के लेन-देन शुरू करने से पहले एक से ज़्यादा बार कॉल किया जा सकता है. इस फ़ंक्शन में किए गए हर पूरे कॉल की वजह से, पिछले कॉल की पिछली वैल्यू खारिज कर दी जाएंगी.

लेन-देन पूरा होने के बाद, इस फ़ंक्शन को कॉल न करने का मतलब यह है कि अगर इस फ़ंक्शन को पहले कॉल किया गया था, तो दोनों बफ़र लंबाई शून्य और aRequestTransactionFlag को false पर सेट की गई थीं.

aOutputBuf की aOutputBufLen बाइट निकालने के बाद, MISO पिन तब तक उच्च सेट रहेगा, जब तक मास्टर SPI लेन-देन पूरा नहीं कर लेता. यह aOutputBuf के आखिरी हिस्से को लेन-देन की कुल अवधि तक 0xFF बाइट तक पैडिंग करने के बराबर है.

MOSI से aInputBuf की aInputBufLen बाइट को क्लॉक इन करने के बाद, SPI मास्टर के लेन-देन पूरा करने तक MOSI पिन से बाद की सभी वैल्यू को अनदेखा किया जाता है.

ध्यान दें कि भले ही, एसपीआई मास्टर के लेन-देन पूरा करने से पहले aInputBufLen या aOutputBufLen (या दोनों) खत्म हो जाते हैं, लेन-देन के मौजूदा साइज़ को ट्रैक किया जाना चाहिए, ताकि लेन-देन पूरा होने के बाद कॉलबैक को भेजा जा सके. उदाहरण के लिए, अगर 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
अगर होस्ट रुकावट को सेट करना है, तो इसे 'सही' पर सेट करें
रिटर्न वैल्यू
OT_ERROR_NONE
लेन-देन की जानकारी सेव हो गई है.
OT_ERROR_BUSY
फ़िलहाल, कोई लेन-देन जारी है.
OT_ERROR_INVALID_STATE
otPlatSpiSlaveEnable() को कॉल नहीं किया गया है.

संसाधन

OpenThread API के रेफ़रंस के विषय, सोर्स कोड से मिलते हैं. यह सोर्स GitHub पर उपलब्ध है. ज़्यादा जानकारी या हमारे दस्तावेज़ में योगदान देने के लिए, संसाधन देखें.