os_InRegs osEvent osSignalWait (int32_t signals, uint32_t millisec) { osEvent event; uint32_t flags; if (signals != 0) { flags = osThreadFlagsWait((uint32_t)signals, osFlagsWaitAll, millisec); } else { flags = osThreadFlagsWait(SignalMask, osFlagsWaitAny, millisec); } if ((flags > 0U) && (flags < 0x80000000U)) { event.status = osEventSignal; event.value.signals = (int32_t)flags; } else { switch ((int32_t)flags) { case osErrorResource: event.status = osOK; break; case osErrorTimeout: event.status = osEventTimeout; break; case osErrorParameter: event.status = osErrorValue; break; default: event.status = (osStatus)flags; break; } } return event; }
// DAP Thread. __NO_RETURN void DAP_Thread (void *argument) { uint32_t flags; uint32_t n; (void) argument; for (;;) { osThreadFlagsWait(0x81U, osFlagsWaitAny, osWaitForever); // Process pending requests while (USB_RequestCountI != USB_RequestCountO) { // Handle Queue Commands n = USB_RequestIndexO; while (USB_Request[n][0] == ID_DAP_QueueCommands) { USB_Request[n][0] = ID_DAP_ExecuteCommands; n++; if (n == DAP_PACKET_COUNT) { n = 0U; } if (n == USB_RequestIndexI) { flags = osThreadFlagsWait(0x81U, osFlagsWaitAny, osWaitForever); if (flags & 0x80U) { break; } } } // Execute DAP Command (process request and prepare response) DAP_ExecuteCommand(USB_Request[USB_RequestIndexO], USB_Response[USB_ResponseIndexI]); // Update Request Index and Count USB_RequestIndexO++; if (USB_RequestIndexO == DAP_PACKET_COUNT) { USB_RequestIndexO = 0U; } USB_RequestCountO++; // Update Response Index and Count USB_ResponseIndexI++; if (USB_ResponseIndexI == DAP_PACKET_COUNT) { USB_ResponseIndexI = 0U; } USB_ResponseCountI++; if (USB_ResponseIdle) { if (USB_ResponseCountI != USB_ResponseCountO) { // Load data from response buffer to be sent back n = USB_ResponseIndexO++; if (USB_ResponseIndexO == DAP_PACKET_COUNT) { USB_ResponseIndexO = 0U; } USB_ResponseCountO++; USB_ResponseIdle = 0U; USBD_HID_GetReportTrigger(0U, 0U, USB_Response[n], DAP_PACKET_SIZE); } } } } }
void eventOS_scheduler_idle(void) { //tr_debug("idle"); eventOS_scheduler_mutex_release(); osThreadFlagsWait(1, 0, osWaitForever); eventOS_scheduler_mutex_wait(); }
static int callbackB (int val) { uint32_t flags; flags = osThreadFlagsWait (1U, osFlagsWaitAny, osWaitForever); if (flags == 1U) { return (val+1); } else { return (0); } }
void eventOS_scheduler_idle(void) { //tr_debug("idle"); eventOS_scheduler_mutex_release(); #if MBED_CONF_NANOSTACK_HAL_EVENT_LOOP_DISPATCH_FROM_APPLICATION osEventFlagsWait(event_flag_id, 1, osFlagsWaitAny, osWaitForever); #else osThreadFlagsWait(1, 0, osWaitForever); #endif eventOS_scheduler_mutex_wait(); }