Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs

ANT+ Proximity search, change device

Hello everyone,

I am trying to use the S340 softdevice in order to connect to an ANT+ HR. I would like to use proximity search.

It works fine for the first device in range but afterwards I am not able to change to another hr sensor. I can only reconnect to the same device...

here is the relevant code:

void ANT_Init() {
  uint32_t err_code = nrf_sdh_ant_enable();
  APP_ERROR_CHECK(err_code);

  err_code = ant_plus_key_set(ANTPLUS_NETWORK_NUMBER);
  APP_ERROR_CHECK(err_code);

  /* Set library config to report RSSI and Device ID */
  err_code = sd_ant_lib_config_set(ANT_LIB_CONFIG_MESG_OUT_INC_RSSI | ANT_LIB_CONFIG_MESG_OUT_INC_DEVICE_ID);
  APP_ERROR_CHECK(err_code);

  // Register a handler for ANT events.
  NRF_SDH_ANT_OBSERVER(m_ant_observer, APP_ANT_OBSERVER_PRIO, ant_evt_handler, NULL);

  // Initialize ANT+ HRM receive channel.
  err_code = ant_hrm_disp_init(&m_ant_hrm,
      HRM_DISP_CHANNEL_CONFIG(m_ant_hrm),
      ant_hrm_evt_handler);

  APP_ERROR_CHECK(err_code);
}

void ant_hrm_rx_start(uint8_t treshold) {
  uint32_t err_code = sd_ant_prox_search_set(m_ant_hrm.channel_number, treshold,0);
  APP_ERROR_CHECK(err_code);
  err_code = ant_hrm_disp_open(&m_ant_hrm);
  APP_ERROR_CHECK(err_code);
  }
  
void ant_hrm_rx_stop() {
  uint32_t err_code;
  sd_ant_channel_close(m_ant_hrm.channel_number);
  // reset device number?
  err_code =sd_ant_channel_unassign(m_ant_hrm_channel_hrm_disp_config.channel_number);
  APP_ERROR_CHECK(err_code);

  err_code = ant_hrm_disp_init(&m_ant_hrm,
      HRM_DISP_CHANNEL_CONFIG(m_ant_hrm),
      ant_hrm_evt_handler);
  APP_ERROR_CHECK(err_code); // error 0x4015 (wrong state)?
}

My guess is that the softdevice stores the device number once it gets connected and after closing connection and starting proximity search again it only allows this device number?

So I tried to close the channel and reintit but I get error 0x4015 (wrong state) even after unassigning it.

Thanks for any help!

Andreas

How can I reset this?

Related