/** * @brief Add flags to an event source object. * * @param[in] esp pointer to the event flags object * @param[in] flags flags to be ORed to the flags mask * * @iclass */ void osalEventBroadcastFlags(event_source_t *esp, eventflags_t flags) { osalDbgCheck(esp != NULL); osalSysLock(); osalEventBroadcastFlagsI(esp, flags); osalSysUnlock(); }
/** * @brief Enforces leaving the sleep mode. * @note The sleep mode is supposed to be usually exited automatically by * an hardware event. * * @param[in] canp pointer to the @p CANDriver object */ void canWakeup(CANDriver *canp) { osalDbgCheck(canp != NULL); osalSysLock(); osalDbgAssert((canp->state == CAN_READY) || (canp->state == CAN_SLEEP), "invalid state"); if (canp->state == CAN_SLEEP) { can_lld_wakeup(canp); canp->state = CAN_READY; osalEventBroadcastFlagsI(&canp->wakeup_event, (eventflags_t)0); osalOsRescheduleS(); } osalSysUnlock(); }
/** * @brief Enters the sleep mode. * @details This function puts the CAN driver in sleep mode and broadcasts * the @p sleep_event event source. * @pre In order to use this function the option @p CAN_USE_SLEEP_MODE must * be enabled and the @p CAN_SUPPORTS_SLEEP mode must be supported * by the low level driver. * * @param[in] canp pointer to the @p CANDriver object * * @api */ void canSleep(CANDriver *canp) { osalDbgCheck(canp != NULL); osalSysLock(); osalDbgAssert((canp->state == CAN_READY) || (canp->state == CAN_SLEEP), "invalid state"); if (canp->state == CAN_READY) { can_lld_sleep(canp); canp->state = CAN_SLEEP; #if CAN_ENFORCE_USE_CALLBACKS == FALSE osalEventBroadcastFlagsI(&canp->sleep_event, (eventflags_t)0); osalOsRescheduleS(); #endif } osalSysUnlock(); }