/** * @brief Resets a @p mailbox_t object. * @details All the waiting threads are resumed with status @p MSG_RESET and * the queued messages are lost. * @post The mailbox is in reset state, all operations will fail and * return @p MSG_RESET until the mailbox is enabled again using * @p chMBResumeX(). * * @param[in] mbp the pointer to an initialized @p mailbox_t object * * @api */ void chMBResetI(mailbox_t *mbp) { chDbgCheckClassI(); chDbgCheck(mbp != NULL); mbp->wrptr = mbp->buffer; mbp->rdptr = mbp->buffer; mbp->cnt = (size_t)0; mbp->reset = true; chThdDequeueAllI(&mbp->qw, MSG_RESET); chThdDequeueAllI(&mbp->qr, MSG_RESET); }
/** * @brief Resets an output queue. * @details All the data in the output queue is erased and lost, any waiting * thread is resumed with status @p Q_RESET. * @note A reset operation can be used by a low level driver in order to * obtain immediate attention from the high level layers. * * @param[in] oqp pointer to an @p output_queue_t structure * * @iclass */ void chOQResetI(output_queue_t *oqp) { chDbgCheckClassI(); oqp->q_rdptr = oqp->q_wrptr = oqp->q_buffer; oqp->q_counter = chQSizeI(oqp); chThdDequeueAllI(&oqp->q_waiting, Q_RESET); }
/** * @brief Resets an input queue. * @details All the data in the input queue is erased and lost, any waiting * thread is resumed with status @p Q_RESET. * @note A reset operation can be used by a low level driver in order to * obtain immediate attention from the high level layers. * * @param[in] iqp pointer to an @p input_queue_t structure * * @iclass */ void chIQResetI(input_queue_t *iqp) { chDbgCheckClassI(); iqp->q_rdptr = iqp->q_wrptr = iqp->q_buffer; iqp->q_counter = 0; chThdDequeueAllI(&iqp->q_waiting, Q_RESET); }