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?