Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

SPIve esclavo

Este módulo incluye la abstracción de la plataforma para la comunicación esclava de SPI.

Resumen

Typedefs

otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) typedef
bool(*
Indica que se completó una transacción de SPI con la longitud determinada.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) typedef
void(*
Se invoca después de llamar a una devolución de llamada completa de la transacción y se muestra TRUE para realizar el procesamiento necesario.

Functions

otPlatSpiSlaveDisable(void)
void
Apaga y luego inhabilita la interfaz esclava de SPI.
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
Inicializa la interfaz esclava de SPI.
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
Preparar datos para la próxima transacción de SPI

Typedefs

otPlatSpiSlaveTransactionCompleteCallback

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

Indica que se completó una transacción de SPI con la longitud determinada.

Los datos escritos en el secundario son escritos en el puntero indicado por el argumento aInputBuf en la llamada anterior a otPlatSpiSlavePrepareTransaction().

Una vez que se llama a esta función, otPlatSpiSlavePrepareTransaction() no es válida y se debe volver a llamar para que la siguiente transacción sea válida.

Ten en cuenta que siempre se llama a esta función al final de una transacción, incluso si aún no se llamó a otPlatSpiSlavePrepareTransaction(). En esos casos, aOutputBufLen y aInputBufLen serán cero.

Se puede llamar a esta devolución de llamada desde el contexto de ISR. El valor que se muestra de esta función indica si se requiere más procesamiento. Si se muestra TRUE, la implementación del controlador de esclavos de plataforma debe invocar la devolución de llamada de proceso de transacción (aProcessCallback establecida en otPlatSpiSlaveEnable()), que, a diferencia de esta devolución de llamada, debe llamarse desde el mismo contexto de SO en el que se llama a cualquier otra API o devolución de llamada de OpenThread.

Detalles
Parámetros
[in] aContext
Se pasó el puntero de contexto a otPlatSpiSlaveEnable().
[in] aOutputBuf
Valor de aOutputBuf desde la última llamada a otPlatSpiSlavePrepareTransaction().
[in] aOutputBufLen
Valor de aOutputBufLen desde la última llamada a otPlatSpiSlavePrepareTransaction().
[in] aInputBuf
Valor de aInputBuf de la última llamada a otPlatSpiSlavePrepareTransaction().
[in] aInputBufLen
Valor de aInputBufLen desde la última llamada a otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
Longitud de la transacción completada, en bytes.
Qué muestra
VERDADERO si después de esta llamada se muestra que la plataforma debe invocar la devolución de llamada de proceso aProcessCallback, FALSO si no hay nada para procesar y no es necesario invocar la devolución de llamada de proceso.

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

Se invoca después de llamar a una devolución de llamada completa de la transacción y se muestra TRUE para realizar el procesamiento necesario.

A diferencia de otPlatSpiSlaveTransactionCompleteCallback, que se puede llamar desde cualquier contexto de SO (p.ej., ISR), esta devolución de llamada DEBE llamarse desde el mismo contexto de SO que cualquier otra API o devolución de llamada de OpenThread.

Detalles
Parámetros
[in] aContext
Se pasó el puntero de contexto a otPlatSpiSlaveEnable().

Functions

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

Apaga y luego inhabilita la interfaz esclava de SPI.

otPlatSpiSlaveEnable

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

Inicializa la interfaz esclava de SPI.

Ten en cuenta que el secundario de SPI no estará completamente listo hasta que una transacción se prepare con otPlatSPISlavePrepareTransaction().

Si es otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all0xFF` bytes y descarta todos los bytes recibidos

Detalles
Parámetros
[in] aCompleteCallback
Es el puntero a la devolución de llamada completa de la transacción.
[in] aProcessCallback
Puntero para procesar la devolución de llamada
[in] aContext
Puntero de contexto que se pasará a las devoluciones de llamada.
Valores que se muestran
OT_ERROR_NONE
Se habilitó correctamente la interfaz de esclavo SPI.
OT_ERROR_ALREADY
La interfaz SPI Slave ya está habilitada.
OT_ERROR_FAILED
No se pudo habilitar la interfaz SPI Slave.

OtPlatSpiSlavePrepareTransaction

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

Preparar datos para la próxima transacción de SPI

Los punteros de datos DEBEN seguir siendo válidos hasta que el controlador secundario de SPI llame a la devolución de llamada completa de la transacción o hasta la siguiente llamada a otPlatSpiSlavePrepareTransaction().

Se puede llamar a esta función más de una vez antes de que la instancia principal de SPI inicie la transacción. Cada llamada correcta a esta función hará que se descarten los valores anteriores de las llamadas anteriores.

No llamar a esta función después de una transacción completada es lo mismo que si esta función se hubiera llamado antes con dos duraciones de búfer establecidas en cero y aRequestTransactionFlag establecido en false.

Una vez que se hayan agotado los aOutputBufLen bytes de aOutputBuf, el PIN de la MISO se establecerá en alto hasta que la instancia principal finalice la transacción SPI. Este es el equivalente funcional de rellenar el final de aOutputBuf con 0xFF bytes hasta la longitud de la transacción.

Una vez que se hayan registrado aInputBufLen bytes de aInputBuf desde MOSI, se ignorarán todos los valores posteriores del pin MOSI hasta que la instancia principal de SPI termine la transacción.

Ten en cuenta que, incluso si se agotan aInputBufLen o aOutputBufLen (o ambos) antes de que la instancia principal de SPI finalice una transacción, se debe hacer un seguimiento del tamaño continuo de la transacción para pasarla a la devolución de llamada completa de la transacción. Por ejemplo, si aInputBufLen es igual a 10 y aOutputBufLen igual a 20, y la instancia principal de SPI se extiende por 30 bytes, el valor 30 se pasa a la devolución de llamada completa de la transacción.

Si se pasa un puntero NULL como aOutputBuf o aInputBuf, ese puntero de búfer no debería cambiar de su valor anterior o actual. En este caso, se debe ignorar el argumento de longitud correspondiente. Por ejemplo, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) cambia el puntero del búfer de entrada y su longitud, pero mantiene el puntero del búfer de salida igual que antes.

Si se llama a esta función mientras una transacción está en curso, se ignorarán todos los argumentos y se mostrará el valor OT_ERROR_BUSY.

Detalles
Parámetros
[in] aOutputBuf
Datos que se escribirán en el PIN de MISO
[in] aOutputBufLen
Tamaño del búfer de salida, en bytes
[in] aInputBuf
Datos que se leerán del PIN MOSI
[in] aInputBufLen
Tamaño del búfer de entrada, en bytes
[in] aRequestTransactionFlag
Se establece como verdadero si se debe configurar la interrupción del host
Valores que se muestran
OT_ERROR_NONE
La transacción se preparó correctamente.
OT_ERROR_BUSY
Hay una transacción en curso.
OT_ERROR_INVALID_STATE
No se llamó a otPlatSpiSlaveEnable().

Recursos

Los temas de referencia de la API de OpenThread se originan en el código fuente, disponible en GitHub. Para obtener más información o colaborar con nuestra documentación, consulta Recursos.