8 years, 3 months ago.

Problem connection heart rate monitor

Hi,

i have a problem connection my heart rate monitor to IDB05A1.

My source code : http://pastebin.com/gdQik7Km

I have two devices.

First is a Pan1026 usb stick that emulates a hear rate monitor. Second is a Mio Link device (http://www.mioglobal.com/de-de/Mio-LINK-Pulssportarmband/Product.aspx).

First I want to scan devices and connect them to discover services/characteristics. When i try to do this with the simulator it works. But if i do the same with the real device it stops while connecting. I dont get the connection callback.

I have enabled debug messages but there is no error message. After "DISCOVERY_COMPLETE" i get debug message "Connection started".

While using simulator i get a connection complete event from the module. And after that the callback is called.

Any ideas what is wrong with my code?

If i connect with smartphone to mio device i dont have any problems and i'm able to discover services/characteristics.

regards

Frank

Question relating to:

1 Answer

8 years, 3 months ago.

Are you trying to establish two connections in parallel?

No. If i use one device the second device is switched off.

posted by Frank Weissenborn 20 Jan 2016

Try to skip scan responses, and change the code as follows:

void connectToDevice(const Gap::Address_t peerAddr)
{
if(!params->isScanResponse) {
      ble_error_t  ret = ble.gap().connect(peerAddr, Gap::ADDR_TYPE_PUBLIC, NULL, NULL);
    }
...
posted by Andrea Palmieri 20 Jan 2016

I think skip scan responses is in advertising callback?

I change code

oid scanResultReceived(const Gap::AdvertisementCallbackParams_t *params)
{
    PRINTF("\r\nscanResultReceived\r\n");
    
    //print advertsing values
   PrintScanResult(params);
   
   if(!params->isScanResponse) {
   PRINTF("scan result ... try connect\r\n");
   connectToDevice(params->peerAddr);
   }
}

void connectToDevice(const Gap::Address_t peerAddr)
{
   ble_error_t  ret = ble.gap().connect(peerAddr, Gap::ADDR_TYPE_PUBLIC, NULL, NULL);
   
   if(ret == BLE_ERROR_NONE) { 
           PRINTF("SUCCESS: connect\r\n");
          } else {
                 PRINTF("ERROR : connect\r\n");
                 }
}

But result is the same...

EDIT:

I found problem connection mio link device.

If i change address type in connection function to RANDOM_ADDR it works. But now it doesn't connect to simulator device.

ble_error_t BlueNRGGap::createConnection ()
{
  tBleStatus ret;
  
  /*
    Scan_Interval, Scan_Window, Peer_Address_Type, Peer_Address, Own_Address_Type, Conn_Interval_Min, 
    Conn_Interval_Max, Conn_Latency, Supervision_Timeout, Conn_Len_Min, Conn_Len_Max    
  */

  ret = aci_gap_create_connection(SCAN_P,
				  SCAN_L,
				  RANDOM_ADDR,
				  (unsigned char*)_peerAddr,
				  PUBLIC_ADDR,
				  CONN_P1, CONN_P2, 0,
				  SUPERV_TIMEOUT, CONN_L1 , CONN_L2);

  _connecting = false;
  
  if (ret != BLE_STATUS_SUCCESS) {
    printf("Error while starting connection (ret=0x%02X).\n\r", ret);
    return BLE_ERROR_UNSPECIFIED;
  } else {
    PRINTF("Connection started.\n");
      for(int i=0; i<BDADDR_SIZE; i++) {
    PRINTF("0x%02X ",_peerAddr[i]);
  }

    return BLE_ERROR_NONE;
  }
}
posted by Frank Weissenborn 20 Jan 2016