SPI subordinado
Este módulo inclui a abstração da plataforma para comunicação escravo do SPI.
Resumo
Typedefs |
|
|---|---|
otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
|
typedefbool(*
Indica que uma transação SPI foi concluída com o tamanho especificado. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
typedefvoid(*
Invocado após um callback de conclusão de transação sendo chamado e retorna TRUE para fazer qualquer processamento adicional necessário. |
remotas |
|
|---|---|
otPlatSpiSlaveDisable(void)
|
void
Encerre e desative a interface subordinada do SPI.
|
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
|
Inicializar a interface subordinada do SPI.
|
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
|
Preparar dados para a próxima transação do SPI.
|
Typedefs
otPlatSpiSlaveTransactionCompleteCallback
bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)
Indica que uma transação SPI foi concluída com o tamanho especificado.
Os dados gravados no escravo foram gravados no ponteiro indicado pelo argumento aInputBuf na chamada anterior para otPlatSpiSlavePrepareTransaction().
Depois que essa função é chamada, otPlatSpiSlavePrepareTransaction() é inválido e precisa ser chamado novamente para que a próxima transação seja válida.
Observe que essa função é sempre chamada no final de uma transação, mesmo que otPlatSpiSlavePrepareTransaction() ainda não tenha sido chamado. Nesses casos, aOutputBufLen e aInputBufLen serão zero.
É possível chamar esse callback no contexto de ISR. O valor de retorno dessa função indica se algum processamento adicional é necessário. Se TRUE for retornado, a implementação do driver escravo da plataforma precisará invocar o callback do processo de transação (aProcessCallback definido em otPlatSpiSlaveEnable()). Ao contrário desse callback, ele precisará ser chamado no mesmo contexto do SO que qualquer outra API/callback OpenThread é chamado.
| Detalhes | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Parâmetros |
|
||||||||||||
| Retorna |
TRUE se, depois da chamada, a plataforma retornar o callback do processo
aProcessCallback, e FALSE se não houver nada a ser processado e a necessidade de invocar o callback do processo. |
||||||||||||
otPlatSpiSlaveTransactionProcessCallback
void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
Invocado após um callback de conclusão de transação sendo chamado e retorna TRUE para fazer qualquer processamento adicional necessário.
Ao contrário de otPlatSpiSlaveTransactionCompleteCallback, que pode ser chamado em qualquer contexto do SO (por exemplo, ISR), esse callback PRECISA ser chamado no mesmo contexto do SO que qualquer outra API/callback OpenThread.
| Detalhes | |||
|---|---|---|---|
| Parâmetros |
|
||
remotas
otPlatSpiSlaveDisable
void otPlatSpiSlaveDisable( void )
Encerre e desative a interface subordinada do SPI.
otPlatSpiSlaveEnable
otError otPlatSpiSlaveEnable( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext )
Inicializar a interface subordinada do SPI.
O SPI subordinado não estará totalmente pronto até que uma transação seja preparada usando otPlatSPISlavePrepareTransaction().
Se otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all0xFF` bytes e descartar todos os bytes recebidos.
| Detalhes | |||||||
|---|---|---|---|---|---|---|---|
| Parâmetros |
|
||||||
| Valores de retorno |
|
||||||
otPlatSpiSlavePrepareTransaction
otError otPlatSpiSlavePrepareTransaction( uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag )
Preparar dados para a próxima transação do SPI.
Os ponteiros de dados PRECISAM permanecer válidos até que o callback de conclusão da transação seja chamado pelo driver escravo do SPI ou até a próxima chamada para otPlatSpiSlavePrepareTransaction().
Pode ser chamado mais de uma vez antes de o mestre do SPI iniciar a transação. Cada chamada bem-sucedida para essa função fará com que os valores anteriores das chamadas anteriores sejam descartados.
Não chamar essa função após a conclusão de uma transação é o mesmo que se ela tivesse sido chamada anteriormente com os comprimentos de buffer definidos como zero e aRequestTransactionFlag definido como false.
Depois que o tempo limite de aOutputBufLen bytes de aOutputBuf for atingido, o alfinete do MISO será definido como alto até que o mestre conclua a transação do SPI. Esse é o equivalente funcional ao preenchimento do final de aOutputBuf com 0xFF bytes até a duração da transação.
Depois que aInputBufLen bytes de aInputBuf tiverem sido processados usando o MOSI, todos os valores subsequentes do pino MOSI serão ignorados até que o SPI mestre conclua a transação.
Mesmo que aInputBufLen, aOutputBufLen (ou ambos) sejam esgotados antes que o mestre do SPI conclua uma transação, o tamanho em andamento da transação ainda precisa ser mantido para ser transmitido para o retorno de chamada de conclusão da transação. Por exemplo, se aInputBufLen for igual a 10 e aOutputBufLen for igual a 20 e o mestre do SPI atingir 30 bytes, o valor 30 será transmitido para o callback de conclusão da transação.
Se um ponteiro NULL for transmitido como aOutputBuf ou aInputBuf, isso significa que esse ponteiro de buffer não vai mudar do valor anterior/atual. Nesse caso, o argumento de comprimento correspondente deve ser ignorado. Por exemplo, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) muda o ponteiro do buffer de entrada e o comprimento dele, mas mantém o ponteiro do buffer de saída como antes.
Qualquer chamada para essa função enquanto uma transação estiver em andamento vai fazer com que todos os argumentos sejam ignorados e o valor de retorno seja OT_ERROR_BUSY.
| Detalhes | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Parâmetros |
|
||||||||||
| Valores de retorno |
|
||||||||||
Recursos
Os tópicos de Referência da API OpenThread são originados do código-fonte, disponível no GitHub. Para mais informações ou para contribuir com nossa documentação, consulte Recursos.