void bletest_init_advertising(void) { int rc; uint8_t adv_len; struct hci_adv_params adv; /* Just zero out advertising */ memset(&adv, 0, sizeof(struct hci_adv_params)); /* Set advertising parameters */ adv.adv_type = BLETEST_CFG_ADV_TYPE; adv.adv_channel_map = 0x07; adv.adv_filter_policy = BLETEST_CFG_ADV_FILT_POLICY; adv.own_addr_type = BLE_HCI_ADV_OWN_ADDR_PUBLIC; adv.peer_addr_type = BLE_HCI_ADV_PEER_ADDR_PUBLIC; if ((adv.adv_type == BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_HD) || (adv.adv_type == BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_LD)) { memcpy(adv.peer_addr, g_bletest_cur_peer_addr, BLE_DEV_ADDR_LEN); adv_len = 0; } else { adv_len = bletest_set_adv_data(&g_host_adv_data[0]); } console_printf("Trying to connect to %x.%x.%x.%x.%x.%x\n", adv.peer_addr[0], adv.peer_addr[1], adv.peer_addr[2], adv.peer_addr[3], adv.peer_addr[4], adv.peer_addr[5]); if (adv.adv_type == BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_HD) { adv.adv_itvl_min = 0; adv.adv_itvl_max = 0; } else { adv.adv_itvl_min = BLETEST_CFG_ADV_ITVL; adv.adv_itvl_max = BLETEST_CFG_ADV_ITVL; /* Advertising interval */ } /* Set the advertising parameters */ rc = host_hci_cmd_le_set_adv_params(&adv); assert(rc == 0); host_hci_outstanding_opcode = 0; /* Set advertising data */ if (adv_len != 0) { rc = host_hci_cmd_le_set_adv_data(&g_host_adv_data[0], adv_len); assert(rc == 0); host_hci_outstanding_opcode = 0; /* Set scan response data */ rc = host_hci_cmd_le_set_scan_rsp_data(&g_host_adv_data[0], adv_len); assert(rc == 0); host_hci_outstanding_opcode = 0; } }
void bletest_init_advertising(uint8_t instance, int8_t txpwr) { int rc; int set_peer_addr; uint8_t adv_len; uint8_t *addr; uint8_t rand_addr[BLE_DEV_ADDR_LEN]; struct hci_multi_adv_params adv; /* Make sure it is a valid instance */ assert(instance < BLE_LL_ADV_INSTANCES); /* Just zero out advertising */ set_peer_addr = 0; memset(&adv, 0, sizeof(struct hci_multi_adv_params)); /* If we are using a random address, we need to set it */ adv.own_addr_type = BLETEST_CFG_ADV_OWN_ADDR_TYPE; if (adv.own_addr_type & 1) { memcpy(rand_addr, g_dev_addr, BLE_DEV_ADDR_LEN); rand_addr[5] |= 0xc0; if (BLETEST_CFG_MULTI_ADV_RANDOM_OWN == 1) { addr = rand_addr; memcpy(adv.own_addr, addr, BLE_DEV_ADDR_LEN); } else { rc = bletest_hci_le_set_multi_rand_addr(rand_addr, instance); assert(rc == 0); addr = rand_addr; } } else { addr = g_dev_addr; } /* Set advertising parameters */ adv.adv_type = BLETEST_CFG_ADV_TYPE; adv.adv_channel_map = 0x07; adv.adv_filter_policy = BLETEST_CFG_ADV_FILT_POLICY; if ((adv.adv_filter_policy & 1) || (BLETEST_CFG_ADV_ADDR_RES_EN == 1)) { set_peer_addr = 1; } adv.peer_addr_type = BLETEST_CFG_ADV_PEER_ADDR_TYPE; if ((adv.adv_type == BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_HD) || (adv.adv_type == BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_LD)) { set_peer_addr = 1; adv_len = 0; } else { adv_len = bletest_set_adv_data(&g_host_adv_data[0], addr); } /* Not allowed for multi-adv command */ if (adv.own_addr_type > BLE_HCI_ADV_OWN_ADDR_RANDOM) { assert(0); } if (set_peer_addr) { memcpy(adv.peer_addr, g_bletest_cur_peer_addr, BLE_DEV_ADDR_LEN); if (adv.peer_addr_type == BLE_HCI_ADV_PEER_ADDR_RANDOM) { adv.peer_addr[5] |= 0xc0; } } console_printf("Trying to connect to %x.%x.%x.%x.%x.%x\n", adv.peer_addr[0], adv.peer_addr[1], adv.peer_addr[2], adv.peer_addr[3], adv.peer_addr[4], adv.peer_addr[5]); if (adv.adv_type == BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_HD) { adv.adv_itvl_min = 0; adv.adv_itvl_max = 0; } else { adv.adv_itvl_min = BLETEST_CFG_ADV_ITVL; adv.adv_itvl_max = BLETEST_CFG_ADV_ITVL; /* Advertising interval */ } adv.adv_tx_pwr = txpwr; /* Set the advertising parameters */ rc = bletest_hci_le_set_multi_adv_params(&adv, instance); assert(rc == 0); /* Set advertising data */ if (adv_len != 0) { rc = bletest_hci_le_set_multi_adv_data(&g_host_adv_data[0], adv_len, instance); assert(rc == 0); /* Set scan response data */ rc = bletest_hci_le_set_multi_scan_rsp_data(&g_host_adv_data[0],adv_len, instance); assert(rc == 0); } }
void bletest_init_advertising(void) { int rc; int set_peer_addr; uint8_t adv_len; uint8_t *addr; uint8_t rand_addr[BLE_DEV_ADDR_LEN]; struct hci_adv_params adv; /* Just zero out advertising */ set_peer_addr = 0; memset(&adv, 0, sizeof(struct hci_adv_params)); /* If we are using a random address, we need to set it */ adv.own_addr_type = BLETEST_CFG_ADV_OWN_ADDR_TYPE; if (adv.own_addr_type & 1) { memcpy(rand_addr, g_dev_addr, BLE_DEV_ADDR_LEN); rand_addr[5] |= 0xc0; rc = bletest_hci_le_set_rand_addr(rand_addr); assert(rc == 0); addr = rand_addr; } else { addr = g_dev_addr; } /* Set advertising parameters */ adv.adv_type = BLETEST_CFG_ADV_TYPE; adv.adv_channel_map = 0x07; adv.adv_filter_policy = BLETEST_CFG_ADV_FILT_POLICY; if ((adv.adv_filter_policy & 1) || (BLETEST_CFG_ADV_ADDR_RES_EN == 1)) { set_peer_addr = 1; } adv.peer_addr_type = BLETEST_CFG_ADV_PEER_ADDR_TYPE; if ((adv.adv_type == BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_HD) || (adv.adv_type == BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_LD)) { set_peer_addr = 1; adv_len = 0; } else { adv_len = bletest_set_adv_data(&g_host_adv_data[0], addr); } if (adv.own_addr_type > BLE_HCI_ADV_OWN_ADDR_RANDOM) { set_peer_addr = 1; } if (set_peer_addr) { memcpy(adv.peer_addr, g_bletest_cur_peer_addr, BLE_DEV_ADDR_LEN); if (adv.peer_addr_type == BLE_HCI_ADV_PEER_ADDR_RANDOM) { adv.peer_addr[5] |= 0xc0; } } console_printf("Trying to connect to %x.%x.%x.%x.%x.%x\n", adv.peer_addr[0], adv.peer_addr[1], adv.peer_addr[2], adv.peer_addr[3], adv.peer_addr[4], adv.peer_addr[5]); if (adv.adv_type == BLE_HCI_ADV_TYPE_ADV_DIRECT_IND_HD) { adv.adv_itvl_min = 0; adv.adv_itvl_max = 0; } else { adv.adv_itvl_min = BLETEST_CFG_ADV_ITVL; adv.adv_itvl_max = BLETEST_CFG_ADV_ITVL; /* Advertising interval */ } /* Set the advertising parameters */ rc = bletest_hci_le_set_adv_params(&adv); assert(rc == 0); #if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PRIVACY) == 1) if ((adv.own_addr_type > BLE_HCI_ADV_OWN_ADDR_RANDOM) || (BLETEST_CFG_ADV_ADDR_RES_EN == 1)) { rc = bletest_hci_le_add_resolv_list(g_bletest_adv_irk, g_bletest_init_irk, adv.peer_addr, adv.peer_addr_type); assert(rc == 0); rc = bletest_hci_le_enable_resolv_list(1); assert(rc == 0); } #endif /* Set advertising data */ if (adv_len != 0) { rc = bletest_hci_le_set_adv_data(&g_host_adv_data[0], adv_len); assert(rc == 0); /* Set scan response data */ rc = bletest_hci_le_set_scan_rsp_data(&g_host_adv_data[0], adv_len); assert(rc == 0); } }
void bletest_init_adv_instances(void) { uint8_t i; int rc; uint8_t *addr; uint8_t adv_len; uint8_t inst_allowed; uint8_t rand_addr[BLE_DEV_ADDR_LEN]; struct hci_multi_adv_params adv; inst_allowed = MYNEWT_VAL(BLE_MULTI_ADV_INSTANCES); if (inst_allowed > BLETEST_CFG_ADV_TEST_INSTANCES) { inst_allowed = BLETEST_CFG_ADV_TEST_INSTANCES; } /* Start up all the instances */ for (i = 1; i <= inst_allowed; ++i) { memset(&adv, 0, sizeof(struct hci_multi_adv_params)); adv.own_addr_type = bletest_multi_adv_instances[i-1].adv_own_addr_type; if (adv.own_addr_type == BLE_HCI_ADV_OWN_ADDR_PUBLIC) { addr = g_dev_addr; } else { memcpy(rand_addr, g_dev_addr, BLE_DEV_ADDR_LEN); rand_addr[5] |= 0xc0; rand_addr[0] = i; /* * NOTE: we overload own address type with a special case * to denote if we use own address or call to set multi random * address. */ if (adv.own_addr_type == BLE_HCI_ADV_OWN_ADDR_RANDOM) { rc = bletest_hci_le_set_multi_rand_addr(rand_addr, i); assert(rc == 0); addr = rand_addr; } else { adv.own_addr_type = BLE_HCI_ADV_OWN_ADDR_RANDOM; addr = rand_addr; memcpy(adv.own_addr, addr, BLE_DEV_ADDR_LEN); } } adv.adv_type = bletest_multi_adv_instances[i - 1].adv_type; adv.adv_channel_map = 0x07; adv.adv_filter_policy = BLE_HCI_ADV_FILT_NONE; adv.peer_addr_type = BLE_HCI_ADV_PEER_ADDR_PUBLIC; adv_len = bletest_set_adv_data(&g_host_adv_data[0], addr); adv.adv_itvl_min = bletest_multi_adv_instances[i - 1].adv_itvl; adv.adv_itvl_max = bletest_multi_adv_instances[i - 1].adv_itvl; adv.adv_tx_pwr = -1 * i; /* Set the advertising parameters */ rc = bletest_hci_le_set_multi_adv_params(&adv, i); assert(rc == 0); /* Set advertising data */ if (adv_len != 0) { rc = bletest_hci_le_set_multi_adv_data(&g_host_adv_data[0], adv_len, i); assert(rc == 0); /* Set scan response data */ rc = bletest_hci_le_set_multi_scan_rsp_data(&g_host_adv_data[0], adv_len, i); assert(rc == 0); } /* Set the advertising parameters */ rc = bletest_hci_le_set_multi_adv_enable(1, i); assert(rc == 0); } }