Hi everyone ;)
I have a problem with timeslot ESB library with Bluetooth LE. In my application i need do somethingh like that:
Bluetooth and ESB PRX works excelent, but I need to send some brodcast data ( without ACK ) in period 30ms via ESB PTX.
Is this possibile?
I'l try something like that, but without success:
esbDisabled(); esbInitTxRx(ESB_PTX); txMasterPayload.data[0] = counterrr++; txMasterPayload.data[1] = 0x02; txMasterPayload.data[2] = 0x03; txMasterPayload.noack = true; txMasterPayload.pipe = 1; txMasterPayload.length = 3; nrf_esb_write_payload( &txMasterPayload ); nrf_esb_start_tx(); // after ~20 ms esbDisabled(); esbInitTxRx(ESB_PRX); void esbDisabled( void ) { uint32_t err_code; esbMode = false; ESB_TIMESLOT_DEBUG_PIN_SET(ESB_TIMESLOT_DBG_PIN_DISABLE); /* Timeslot is about to end: stop UESB. */ if (m_state == STATE_RX) { err_code= nrf_esb_stop_rx(); // PIN_RESET(LED); } err_code= nrf_esb_flush_tx(); APP_ERROR_CHECK(err_code); err_code= nrf_esb_flush_rx(); APP_ERROR_CHECK(err_code); err_code= nrf_esb_disable(); APP_ERROR_CHECK(err_code); m_total_timeslot_length = 0; m_state = STATE_IDLE; ESB_TIMESLOT_DEBUG_PIN_CLEAR(ESB_TIMESLOT_DBG_PIN_DISABLE); ESB_TIMESLOT_DEBUG_PIN_CLEAR(ESB_TIMESLOT_DBG_PIN_RADIO_TIMESLOT); } void esbInitTxRx( uint8_t mode ) { uint32_t err_code; if ( mode == ESB_PTX ) { nrf_esb_config.mode = NRF_ESB_MODE_PTX; } else { nrf_esb_config.mode = NRF_ESB_MODE_PRX; } err_code = nrf_esb_init(&nrf_esb_config); APP_ERROR_CHECK(err_code); err_code = nrf_esb_set_base_address_0(base_addr_0); APP_ERROR_CHECK(err_code); err_code = nrf_esb_set_base_address_1(base_addr_1); APP_ERROR_CHECK(err_code); err_code = nrf_esb_set_prefixes(addr_prefix, 8); APP_ERROR_CHECK(err_code); if ( mode == ESB_PTX ) { nrf_esb_set_rf_channel(8); } else { nrf_esb_set_rf_channel(radio_channel); } } // ESB CONFIG: nrf_esb_config.payload_length = 10; nrf_esb_config.protocol = NRF_ESB_PROTOCOL_ESB_DPL; nrf_esb_config.bitrate = NRF_ESB_BITRATE_250KBPS; nrf_esb_config.mode = NRF_ESB_MODE_PRX; nrf_esb_config.event_handler = nrf_esb_event_handler; //nrf_esb_config.radio_irq_priority = 0; nrf_esb_config.selective_auto_ack = false; // Bylo na true nie wiem czemu ? nrf_esb_config.crc = NRF_ESB_CRC_8BIT; nrf_esb_config.retransmit_count = 15; nrf_esb_config.retransmit_delay = 500; nrf_esb_config.tx_mode = NRF_ESB_TXMODE_MANUAL; nrf_esb_config.tx_output_power = NRF_ESB_TX_POWER_4DBM;
How to quickly switch from PRX mode to PTX mode, send some data, and return to PRX mode?