static int host_recv_pkt_cb(uint8_t *data, uint16_t len){ if (xPortInIsrContext()){ report_recv_called_from_isr(); return 0; } xSemaphoreTake(ring_buffer_mutex, portMAX_DELAY); // check space uint16_t space = btstack_ring_buffer_bytes_free(&hci_ringbuffer); if (space < len){ xSemaphoreGive(ring_buffer_mutex); log_error("transport_recv_pkt_cb packet %u, space %u -> dropping packet", len, space); return 0; } // store size in ringbuffer uint8_t len_tag[2]; little_endian_store_16(len_tag, 0, len); btstack_ring_buffer_write(&hci_ringbuffer, len_tag, sizeof(len_tag)); // store in ringbuffer btstack_ring_buffer_write(&hci_ringbuffer, data, len); xSemaphoreGive(ring_buffer_mutex); // set flag and trigger delivery of packets on main thread transport_packets_to_deliver = 1; btstack_run_loop_freertos_trigger(); return 0; }
static void IRAM_ATTR wifi_int_restore_wrapper(void *wifi_int_mux, uint32_t tmp) { if (xPortInIsrContext()) { portEXIT_CRITICAL_ISR(wifi_int_mux); } else { portEXIT_CRITICAL(wifi_int_mux); } }
static uint32_t IRAM_ATTR wifi_int_disable_wrapper(void *wifi_int_mux) { if (xPortInIsrContext()) { portENTER_CRITICAL_ISR(wifi_int_mux); } else { portENTER_CRITICAL(wifi_int_mux); } return 0; }
static void host_send_pkt_available_cb(void){ if (xPortInIsrContext()){ report_sent_called_from_isr(); return; } // set flag and trigger polling of transport data source on main thread transport_signal_sent = 1; btstack_run_loop_freertos_trigger(); }
static void testthread(void *arg) { intr_handle_t handle; in_int_context=0; int_handled=0; TEST_ASSERT(!xPortInIsrContext()); xthal_set_ccompare(1, xthal_get_ccount()+8000000); esp_err_t err = esp_intr_alloc(ETS_INTERNAL_TIMER1_INTR_SOURCE, 0, &testint, NULL, &handle); TEST_ASSERT_EQUAL_HEX32(ESP_OK, err); vTaskDelay(100 / portTICK_PERIOD_MS); TEST_ASSERT(int_handled); TEST_ASSERT(in_int_context); TEST_ASSERT_EQUAL_HEX32( ESP_OK, esp_intr_free(handle) ); vTaskDelete(NULL); }
void vPortAssertIfInISR() { configASSERT(xPortInIsrContext()); }
static void testint(void *arg) { xthal_set_ccompare(1, xthal_get_ccount()+8000000000); ets_printf("INT!\n"); if (xPortInIsrContext()) in_int_context++; int_handled++; }