// ----------------------------------------------------------------------------- //! \brief This routine closes the transport layer //! //! \return void // ----------------------------------------------------------------------------- void NPITL_closeTL(void) { _npiCSKey_t key; key = NPIUtil_EnterCS(); // Clear NPI Task Call backs memset(&taskCBs, 0, sizeof(taskCBs)); // Free Transport Layer RX/TX buffers npiBufSize = 0; NPIUTIL_FREE(npiRxBuf); NPIUTIL_FREE(npiTxBuf); // Close Transport Layer transportClose(); #ifdef POWER_SAVING // Close PIN Handle PIN_close(hNpiHandshakePins); #ifdef NPI_SW_HANDSHAKING_DEBUG PIN_close(hNpiProfilingDebugPin); #endif //NPI_SW_HANDSHAKING // Release Power Management NPITL_relPM(); #endif //POWER_SAVING NPIUtil_ExitCS(key); }
// ----------------------------------------------------------------------------- //! \brief This routine closes the transport layer //! //! \return void // ----------------------------------------------------------------------------- void NPITL_closeTL(void) { _npiCSKey_t key; key = NPIUtil_EnterCS(); // Clear NPI Task Call backs memset(&taskCBs, 0, sizeof(taskCBs)); // Free Transport Layer RX/TX buffers npiBufSize = 0; NPIUTIL_FREE(npiRxBuf); NPIUTIL_FREE(npiTxBuf); // Close Transport Layer transportClose(); #if (NPI_FLOW_CTRL == 1) // Clear mrdy and srdy PIN IDs remRdyPIN = (IOID_UNUSED & IOC_IOID_MASK); // Set to 0x000000FF locRdyPIN = (IOID_UNUSED & IOC_IOID_MASK); // Set to 0x000000FF // Clear PIN IDs from PIN Configuration npiHandshakePinsCfg[REM_RDY_PIN_IDX] &= ~remRdyPIN; npiHandshakePinsCfg[LOC_RDY_PIN_IDX] &= ~locRdyPIN; // Close PIN Handle PIN_close(hNpiHandshakePins); // Release Power Management NPITL_relPM(); #endif // NPI_FLOW_CTRL = 1 NPIUtil_ExitCS(key); }
// ----------------------------------------------------------------------------- //! \brief Creates a queue node and puts the node in RTOS queue. //! //! \param msgQueue - queue handle. //! \param sem - thread's event processing semaphore that queue is //! associated with. //! \param pMsg - pointer to message to be queued //! //! \return TRUE if message was queued, FALSE otherwise. // ----------------------------------------------------------------------------- uint8_t NPIUtil_enqueueMsg(Queue_Handle msgQueue, Semaphore_Handle sem, uint8_t *pMsg) { queueRec_t *pRec; // Allocated space for queue node. if (pRec = NPIUTIL_MALLOC(sizeof(queueRec_t))) { pRec->pData = pMsg; Queue_enqueue(msgQueue, &pRec->_elem); // Wake up the application thread event handler. if (sem) { Semaphore_post(sem); } return TRUE; } // Free the message. NPIUTIL_FREE(pMsg); return FALSE; }
// ----------------------------------------------------------------------------- //! \brief This routine closes the transport layer //! //! \return void // ----------------------------------------------------------------------------- void NPITL_closeTL(void) { _npiCSKey_t key; key = NPIUtil_EnterCS(); // Clear NPI Task Call backs memset(&taskCBs, 0, sizeof(taskCBs)); // Free Transport Layer RX/TX buffers npiBufSize = 0; NPIUTIL_FREE(npiRxBuf); NPIUTIL_FREE(npiTxBuf); // Close the RxPin PIN_close(hNpiUartRxPin); // Close UART transport Layer transportClose(); trasnportLayerState = TL_closed; NPITL_relPM(); NPIUtil_ExitCS(key); }
// ----------------------------------------------------------------------------- //! \brief Dequeues the message from the RTOS queue. //! //! \param msgQueue - queue handle. //! //! \return pointer to dequeued message, NULL otherwise. // ----------------------------------------------------------------------------- uint8_t *NPIUtil_dequeueMsg(Queue_Handle msgQueue) { if (!Queue_empty(msgQueue)) { queueRec_t *pRec = Queue_dequeue(msgQueue); uint8_t *pData = pRec->pData; // Free the queue node // Note: this does not free space allocated by data within the node. NPIUTIL_FREE(pRec); return pData; } return NULL; }
// ----------------------------------------------------------------------------- //! \brief Creates a queue node and puts the node in RTOS queue. //! //! \param msgQueue - queue handle. //! \param event - thread's event processing synchronization object that //! queue is associated with. //! \param eventFlag - events to signal with synchronization object associated //! with this pMsg. //! \param sem - thread's event processing semaphore that queue is //! associated with. //! \param pMsg - pointer to message to be queued //! //! \return TRUE if message was queued, FALSE otherwise. // ----------------------------------------------------------------------------- uint8_t NPIUtil_enqueueMsg(Queue_Handle msgQueue, #ifdef ICALL_EVENTS Event_Handle event, uint32_t eventFlags, #else //!ICALL_EVENTS Semaphore_Handle sem, #endif //ICALL_EVENTS uint8_t *pMsg) { queueRec_t *pRec; // Allocated space for queue node. if (pRec = NPIUTIL_MALLOC(sizeof(queueRec_t))) { pRec->pData = pMsg; Queue_enqueue(msgQueue, &pRec->_elem); // Wake up the application thread event handler. #ifdef ICALL_EVENTS if (event) { Event_post(event, eventFlags); } #else //!ICALL_EVENTS if (sem) { Semaphore_post(sem); } #endif //ICALL_EVENTS return TRUE; } // Free the message. NPIUTIL_FREE(pMsg); return FALSE; }