एसपीआई स्लेव
इस मॉड्यूल में एसपीआई स्लेव कम्यूनिकेशन के लिए प्लैटफ़ॉर्म ऐब्स्ट्रैक्ट है.
खास जानकारी
टाइपडेफ़ |
|
---|---|
otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
|
टाइपडेफ़bool(*
यह बताता है कि SPI लेन-देन दी गई अवधि में पूरा हो गया है. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
टाइपडेफ़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)
|
अगले SPI लेन-देन के लिए डेटा तैयार करें.
|
टाइपडेफ़
otPlatSpiSlaveलेन-देन पूरा होने पर कॉलबैक
bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
यह बताता है कि SPI लेन-देन दी गई अवधि में पूरा हो गया है.
स्लेव को लिखा गया डेटा, otPlatSpiSlavePrepareTransaction()
पर पिछले कॉल के लिए aInputBuf
तर्क से पॉइंटर में लिखा गया है.
इस फ़ंक्शन को कॉल करने के बाद, otPlatSpiSlavePrepareTransaction()
अमान्य हो जाता है. साथ ही, अगले लेन-देन के मान्य होने के लिए इसे फिर से कॉल किया जाना चाहिए.
ध्यान दें कि लेन-देन के आखिर में, इस फ़ंक्शन को हमेशा कॉल किया जाता है. भले ही, otPlatSpiSlavePrepareTransaction()
को अब तक कॉल न किया गया हो. ऐसे मामलों में, aOutputBufLen
और aInputBufLen
शून्य होंगे.
इस कॉलबैक को आईएसआर कॉन्टेक्स्ट से कॉल किया जा सकता है. इस फ़ंक्शन से रिटर्न वैल्यू यह बताती है कि प्रोसेस करने की ज़रूरत है या नहीं. अगर TRUE
को प्लैटफ़ॉर्म स्पिल-स्लेव ड्राइवर लागू करने की सुविधा मिलती है, तो लेन-देन प्रोसेस के कॉलबैक (otPlatSpiSlaveEnable()
में aProcessCallback
सेट) को लागू करना चाहिए. इस कॉलबैक को उसी ओएस कॉन्टेक्स्ट से कॉल किया जाना चाहिए जिस पर किसी अन्य OpenThread एपीआई/कॉलबैक को कॉल किया जाए.
ब्यौरा | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||||||||
लौटाए गए सामान |
सही है, अगर इस कॉल के बाद प्लैटफ़ॉर्म, प्रोसेस कॉलबैक
aProcessCallback को शुरू कर देता है, तो प्रोसेस करने के लिए कुछ भी न हो और कॉलबैक की प्रोसेस शुरू करने की ज़रूरत न हो. |
otPlatSpiSlavetransactionProcessकॉलबैक
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
लेन-देन पूरा होने के बाद, शुरू किया जाता है और कॉलबैक होता है. साथ ही, आगे की प्रक्रिया के लिए, TRUE
रिटर्न करता है.
otPlatSpiSlaveTransactionCompleteCallback
के उलट जिसे किसी भी ओएस कॉन्टेक्स्ट से कॉल किया जा सकता है (उदाहरण, आईएसआर), इस कॉलबैक को किसी दूसरे ओपन थ्रेड एपीआई/कॉलबैक की तरह ही ओएस कॉन्टेक्स्ट से कॉल करना चाहिए.
ब्यौरा | |||
---|---|---|---|
पैरामीटर |
|
फ़ंक्शन
otPlatSpiSlaveबंद करें
void otPlatSpiSlaveDisable( void )
एसपीआई स्लेव इंटरफ़ेस को बंद करें और बंद करें.
otPlatSpiSlaveचालू करें
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
SPI स्लेव इंटरफ़ेस शुरू करें.
ध्यान दें कि otPlatSPISlavePrepareTransaction()
का इस्तेमाल करके लेन-देन तैयार होने तक, SPI स्लेव पूरी तरह से तैयार नहीं होता.
अगर otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all
0xFF` बाइट हैं और मिले हुए सभी बाइट खारिज करते हैं.
ब्यौरा | |||||||
---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||
सामान लौटाने की वैल्यू |
|
otPlatSpiSlaveतैयार ट्रांज़ैक्शन
otError otPlatSpiSlavePrepareTransaction( uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag )
अगले SPI लेन-देन के लिए डेटा तैयार करें.
डेटा पॉइंटर को तब तक मान्य रहना चाहिए, जब तक लेन-देन के कॉलबैक को एसपीआई स्लेव ड्राइवर कॉल नहीं कर देता या otPlatSpiSlavePrepareTransaction()
को अगले कॉल के बाद नहीं भेजता.
एसपीआई मास्टर की ओर से लेन-देन शुरू करने से पहले इस फ़ंक्शन को एक से ज़्यादा बार कॉल किया जा सकता है. इस फ़ंक्शन के लिए हर सफल कॉल की वजह से, पहले किए गए कॉल के पिछले मान खारिज कर दिए जाएंगे.
इस फ़ंक्शन को पूरा न करने के बाद भी वैसा ही रहता है, जैसा कि किसी लेन-देन के पूरा होने के बाद होता है. ऐसा तब होता है, जब पहले इस फ़ंक्शन को कॉल किया गया था, दोनों बफ़र की लंबाई शून्य पर सेट थी और aRequestTransactionFlag
को false
पर सेट किया गया था.
aOutputBuf
में से aOutputBufLen
बाइट में समय खत्म हो जाने के बाद, MISO पिन तब तक ज़्यादा पर सेट रहेगा, जब तक मास्टर एसपीआई लेन-देन पूरा नहीं कर लेता. यह, aOutputBuf
के आखिर में 0xFF
बाइट की लेन-देन की अवधि तक पैडिंग की तरह काम करता है.
MOSI से aInputBufLen
Input के aInputBufLen
बाइट में घड़ी आने के बाद, MOSI पिन के बाद के सभी मानों को तब तक अनदेखा किया जाता है, जब तक SPI मास्टर लेन-देन पूरा नहीं कर लेता.
ध्यान दें कि अगर एसपीआई मास्टर किसी लेन-देन को पूरा कर लेता है, तब भी aInputBufLen
या aOutputBufLen
(या दोनों) खत्म हो जाएं. इसके बावजूद, लेन-देन के मौजूदा कॉलबैक को लेन-देन पूरा करने के लिए ट्रैक किया जाना चाहिए. उदाहरण के लिए, अगर aInputBufLen
10 के बराबर है और aOutputBufLen
20 के बराबर है और एसपीआई मास्टर 30 बाइट का टाइम आउट देता है, तो लेन-देन पूरा करने के कॉलबैक में 30 वैल्यू पास की जाती है.
अगर NULL
पॉइंटर को aOutputBuf
या aInputBuf
के तौर पर पास किया जाता है, तो इसका मतलब है कि बफ़र पॉइंटर को उसकी पिछली/मौजूदा वैल्यू से नहीं बदलना चाहिए. इस मामले में, संबंधित लंबाई वाले तर्क को अनदेखा कर दिया जाना चाहिए. उदाहरण के लिए, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false)
इनपुट बफ़र पॉइंटर और उसकी लंबाई में बदलाव करता है, लेकिन आउटपुट बफ़र पॉइंटर को पहले की तरह ही बनाए रखता है.
लेन-देन के दौरान इस फ़ंक्शन को किया जाने वाला कोई भी कॉल, सभी तर्कों को अनदेखा कर देगा और रिटर्न वैल्यू OT_ERROR_BUSY
होगी.
ब्यौरा | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||||||
सामान लौटाने की वैल्यू |
|
संसाधन
OpenThread API रेफ़रंस के विषय, सोर्स कोड से जनरेट होते हैं. यह कोड GitHub पर उपलब्ध है. ज़्यादा जानकारी के लिए या हमारे दस्तावेज़ में योगदान देने के लिए, संसाधन देखें.