एसपीआई स्लेव

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

खास जानकारी

टाइपडेफ़

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 एपीआई/कॉलबैक को कॉल किया जाए.

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

otPlatSpiSlavetransactionProcessकॉलबैक

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

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

otPlatSpiSlaveTransactionCompleteCallback के उलट जिसे किसी भी ओएस कॉन्टेक्स्ट से कॉल किया जा सकता है (उदाहरण, आईएसआर), इस कॉलबैक को किसी दूसरे ओपन थ्रेड एपीआई/कॉलबैक की तरह ही ओएस कॉन्टेक्स्ट से कॉल करना चाहिए.

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

फ़ंक्शन

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 all0xFF` बाइट हैं और मिले हुए सभी बाइट खारिज करते हैं.

ब्यौरा
पैरामीटर
[in] aCompleteCallback
लेन-देन की जानकारी देने वाला कॉलबैक.
[in] aProcessCallback
कॉलबैक को प्रोसेस करने के लिए पॉइंटर.
[in] aContext
कॉलबैक पर भेजा जाने वाला संदर्भ पॉइंटर.
सामान लौटाने की वैल्यू
OT_ERROR_NONE
SPI स्लेव इंटरफ़ेस चालू किया गया.
OT_ERROR_ALREADY
SPI स्लेव इंटरफ़ेस पहले से चालू है.
OT_ERROR_FAILED
SPI स्लेव इंटरफ़ेस को चालू नहीं किया जा सका.

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 से aInputBufLenInput के aInputBufLen बाइट में घड़ी आने के बाद, MOSI पिन के बाद के सभी मानों को तब तक अनदेखा किया जाता है, जब तक SPI मास्टर लेन-देन पूरा नहीं कर लेता.

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