// ----------------------------------------------------------------------------- //! \brief This callback is invoked on Write completion //! //! \param[in] handle - handle to the UART port //! \param[in] ptr - pointer to data to be transmitted //! \param[in] size - size of the data //! //! \return void // ----------------------------------------------------------------------------- static void NPITLUART_writeCallBack(UART_Handle handle, void *ptr, size_t size) { ICall_CSState key; key = ICall_enterCriticalSection(); #ifdef POWER_SAVING if ( !RxActive ) { UART_readCancel(uartHandle); if ( npiTransmitCB ) { npiTransmitCB(TransportRxLen,TransportTxLen); } } TxActive = FALSE; #else if ( npiTransmitCB ) { npiTransmitCB(0,TransportTxLen); } #endif //POWER_SAVING ICall_leaveCriticalSection(key); }
// ----------------------------------------------------------------------------- //! \brief This callback is invoked on Write completion //! //! \param[in] handle - handle to the UART port //! \param[in] ptr - pointer to data to be transmitted //! \param[in] size - size of the data //! //! \return void // ----------------------------------------------------------------------------- static void SDITLUART_writeCallBack(UART_Handle handle, void *ptr, size_t size) { ICall_CSState key; key = ICall_enterCriticalSection(); uint8 errStatus = 0; if (errStatus = ((UARTCC26XX_Handle)handle->object)->status) { //report UART error status to application if(incomingRXErrorStatusAppCBFunc != NULL) incomingRXErrorStatusAppCBFunc(UART_ERROR_EVT, &errStatus, sizeof(errStatus)); } #ifdef POWER_SAVING if ( !RxActive ) { UART_readCancel(uartHandle); if ( sdiTransmitCB ) { sdiTransmitCB(TransportRxLen,TransportTxLen); } } TxActive = FALSE; #else if ( sdiTransmitCB ) { sdiTransmitCB(0,TransportTxLen); } #endif //POWER_SAVING ICall_leaveCriticalSection(key); }
void SDITLUART_closeUART(void) { ICall_CSState key; key = ICall_enterCriticalSection(); // Cancel any pending reads UART_readCancel(uartHandle); // Close / power off the UART. UART_close(uartHandle); ICall_leaveCriticalSection(key); }
// ----------------------------------------------------------------------------- //! \brief This callback is invoked on Write completion //! //! \param[in] handle - handle to the UART port //! \param[in] ptr - pointer to data to be transmitted //! \param[in] size - size of the data //! //! \return void // ----------------------------------------------------------------------------- void NPITLUART_writeCallBack(UART_Handle handle, void *ptr, size_t size) { _npiCSKey_t key; key = NPIUtil_EnterCS(); #if (NPI_FLOW_CTRL == 1) // This is a CC26xx/CC13xx Driverlib specific call (not optimal...) // This is necessary because the write call back needs to know if any bytes // have been received from the peer device. If no bytes have been received // the transaction can be ended. However, If a simultaneous read/write occurs // within the same transaction then simple checking if RxActive or even the // state variable of the read call back is not enough. In testing the UART // read call back was never invoked prior to the write call back so we must // bypass the driver and directly check if there are bytes in the RX FIFO if ( !UARTCharsAvail(((UARTCC26XX_HWAttrsV1 const *)(handle->hwAttrs))->baseAddr) ) { UART_readCancel(uartHandle); RxActive = FALSE; if (npiTransmitCB) { if (NPITLUART_validPacketFound() == NPI_SUCCESS) { // Decrement as to not include trailing FCS byte TransportRxLen--; } else { // Did not receive valid packet so denote RX length as zero in CB TransportRxLen = 0; } npiTransmitCB(TransportRxLen,TransportTxLen); } } TxActive = FALSE; #else if (npiTransmitCB) { npiTransmitCB(0,TransportTxLen); } #endif // NPI_FLOW_CTRL = 1 NPIUtil_ExitCS(key); }
// ----------------------------------------------------------------------------- //! \brief This routine stops any pending reads //! //! \return void // ----------------------------------------------------------------------------- void NPITLUART_stopTransfer(void) { _npiCSKey_t key; key = NPIUtil_EnterCS(); remRdy_flag = 1; // If we have no bytes in FIFO yet we must assume there was nothing to read // or that the FIFO has already been read for this UART_read() // In either case UART_readCancel will call the read CB function and it will // invoke npiTransmitCB with the appropriate number of bytes read if (!UARTCharsAvail(((UARTCC26XX_HWAttrs const *)(uartHandle->hwAttrs))->baseAddr)) { RxActive = FALSE; UART_readCancel(uartHandle); } NPIUtil_ExitCS(key); }
// ----------------------------------------------------------------------------- //! \brief This routine stops any pending reads //! //! \return void // ----------------------------------------------------------------------------- void NPITLUART_stopTransfer(void) { ICall_CSState key; key = ICall_enterCriticalSection(); mrdy_flag = 1; // If we have no bytes in FIFO yet we must assume there was nothing to read // or that the FIFO has already been read for this UART_read() // In either case UART_readCancel will call the read CB function and it will // invoke npiTransmitCB with the appropriate number of bytes read if (!UARTCharsAvail(((UARTCC26XX_HWAttrs const *)(uartHandle->hwAttrs))->baseAddr)) { RxActive = FALSE; UART_readCancel(uartHandle); } ICall_leaveCriticalSection(key); return; }
// ----------------------------------------------------------------------------- //! \brief This callback is invoked on Write completion //! //! \param[in] handle - handle to the UART port //! \param[in] ptr - pointer to data to be transmitted //! \param[in] size - size of the data //! //! \return void // ----------------------------------------------------------------------------- void NPITLUART_writeCallBack(UART_Handle handle, void *ptr, size_t size) { _npiCSKey_t key; key = NPIUtil_EnterCS(); #ifdef POWER_SAVING if (!RxActive) { UART_readCancel(uartHandle); if (npiTransmitCB) { if (NPITLUART_validPacketFound() == NPI_SUCCESS) { // Decrement as to not include trailing FCS byte TransportRxLen--; } else { // Did not receive valid packet so denote RX length as zero in CB TransportRxLen = 0; } npiTransmitCB(TransportRxLen,TransportTxLen); } } TxActive = FALSE; #else if (npiTransmitCB) { npiTransmitCB(0,TransportTxLen); } #endif //POWER_SAVING NPIUtil_ExitCS(key); }
// ----------------------------------------------------------------------------- //! \brief This routine closes Transport Layer port //! //! \return void // ----------------------------------------------------------------------------- void NPITLUART_closeTransport(void) { UART_readCancel(uartHandle); UART_close(uartHandle); }