एसपीआई स्लेव
इस मॉड्यूल में, एसपीआई स्लेव कम्यूनिकेशन के लिए प्लैटफ़ॉर्म ऐब्स्ट्रैक्शन शामिल है.
खास जानकारी
टाइपडीफ़ |
|
---|---|
otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
|
typedefbool(*
इससे पता चलता है कि एसपीआई की मदद से, तय समयसीमा में लेन-देन पूरा हुआ है. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
typedefvoid(*
लेन-देन पूरा होने के बाद कॉलबैक कॉल शुरू होता है और आगे की प्रोसेसिंग के लिए, 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/कॉलबैक को कॉल किया जाता है.
जानकारी | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||||||||
लौटाए गए सामान |
'सही', अगर इस कॉल के बाद प्लैटफ़ॉर्म को प्रोसेस कॉलबैक को शुरू करना चाहिए,
aProcessCallback . अगर प्रोसेस करने के लिए कुछ भी नहीं है और प्रोसेस कॉलबैक को शुरू करने की ज़रूरत नहीं है, तो 'सही'. |
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
लेन-देन पूरा होने के बाद कॉलबैक कॉल शुरू होता है और आगे की प्रोसेसिंग के लिए, TRUE
को लौटाया जाता है.
otPlatSpiSlaveTransactionCompleteCallback
के उलट, जिसे किसी भी ओएस कॉन्टेक्स्ट से कॉल किया जा सकता है (उदाहरण के लिए, ISR), तो इस कॉलबैक को उसी ओएस कॉन्टेक्स्ट से कॉल किया जाना चाहिए जिससे कोई भी अन्य OpenThread API/कॉलबैक कॉल किया जा सकता है.
जानकारी | |||
---|---|---|---|
पैरामीटर |
|
फ़ंक्शन
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 all
0xFF` बाइट हैं और मिले हुए सभी बाइट खारिज करें हैं, तो.
जानकारी | |||||||
---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||
रिटर्न वैल्यू |
|
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
हो जाएगी.
जानकारी | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||||||
रिटर्न वैल्यू |
|
संसाधन
OpenThread API के रेफ़रंस के विषय, सोर्स कोड से मिलते हैं. यह सोर्स GitHub पर उपलब्ध है. ज़्यादा जानकारी या हमारे दस्तावेज़ में योगदान देने के लिए, संसाधन देखें.