mirror of
https://github.com/Lurkars/esp-ena.git
synced 2024-12-22 21:25:19 +01:00
fixed scanning (forgot flag, dueto google not sending it)
This commit is contained in:
parent
aa9d39fd46
commit
7bdbe82914
@ -69,6 +69,12 @@ recommended
|
||||
|
||||
### Build and Flash
|
||||
|
||||
May flash partition table:
|
||||
|
||||
```
|
||||
idf.py partition_table-flash
|
||||
```
|
||||
|
||||
Build the project and flash it to the board, then run monitor tool to view serial output:
|
||||
|
||||
```
|
||||
|
@ -34,19 +34,33 @@ void ena_bluetooth_scan_event_callback(esp_gap_ble_cb_event_t event, esp_ble_gap
|
||||
case ESP_GAP_BLE_SCAN_RESULT_EVT:
|
||||
if (p->scan_rst.search_evt == ESP_GAP_SEARCH_INQ_RES_EVT)
|
||||
{
|
||||
// check for ENA Service UUID:
|
||||
if (p->scan_rst.ble_adv[0] == 0x3 && p->scan_rst.ble_adv[1] == 0x3 && p->scan_rst.ble_adv[2] == 0x6f && p->scan_rst.ble_adv[3] == 0xfd)
|
||||
if (p->scan_rst.adv_data_len < 28)
|
||||
{
|
||||
// adv_data too short for exposure notification
|
||||
break;
|
||||
}
|
||||
|
||||
int flag_offset = 0;
|
||||
// received payload from Google does not contain flag specified in Bluetooth Specification!? So check for length and then add offset
|
||||
if (p->scan_rst.adv_data_len == 31)
|
||||
{
|
||||
// data contains flag
|
||||
flag_offset = 3;
|
||||
}
|
||||
|
||||
// check for ENA Service UUID: (after flag 0x03 0x03 0x6f 0xfd for ENA service)
|
||||
if (p->scan_rst.ble_adv[0 + flag_offset] == 0x3 && p->scan_rst.ble_adv[1 + flag_offset] == 0x3 && p->scan_rst.ble_adv[2 + flag_offset] == 0x6f && p->scan_rst.ble_adv[3 + flag_offset] == 0xfd)
|
||||
{
|
||||
uint8_t rpi[ENA_KEY_LENGTH] = {0};
|
||||
for (int i = 0; i < ENA_KEY_LENGTH; i++)
|
||||
{
|
||||
rpi[i] = p->scan_rst.ble_adv[8 + i];
|
||||
rpi[i] = p->scan_rst.ble_adv[i + 8 + flag_offset];
|
||||
}
|
||||
|
||||
uint8_t aem[ENA_AEM_METADATA_LENGTH] = {0};
|
||||
for (int i = 0; i < ENA_AEM_METADATA_LENGTH; i++)
|
||||
{
|
||||
aem[i] = p->scan_rst.ble_adv[8 + ENA_KEY_LENGTH + i];
|
||||
aem[i] = p->scan_rst.ble_adv[i + ENA_KEY_LENGTH + 8 + flag_offset];
|
||||
}
|
||||
|
||||
ena_detection((uint32_t)time(NULL), rpi, aem, p->scan_rst.rssi);
|
||||
|
17
main/ena.c
17
main/ena.c
@ -30,27 +30,26 @@ void ena_init(void)
|
||||
ESP_ERROR_CHECK(nvs_flash_erase());
|
||||
ESP_ERROR_CHECK(nvs_flash_init());
|
||||
}
|
||||
|
||||
// init BLE
|
||||
esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
|
||||
ESP_ERROR_CHECK(esp_bt_controller_init(&bt_cfg));
|
||||
ESP_ERROR_CHECK(esp_bt_controller_enable(ESP_BT_MODE_BLE));
|
||||
|
||||
ESP_ERROR_CHECK(esp_bluedroid_init());
|
||||
ESP_ERROR_CHECK(esp_bluedroid_enable());
|
||||
|
||||
// new bluetooth address nesseccary?
|
||||
uint8_t bt_address[ESP_BD_ADDR_LEN];
|
||||
esp_fill_random(bt_address, ESP_BD_ADDR_LEN);
|
||||
bt_address[0] |= 0xC0;
|
||||
|
||||
ESP_ERROR_CHECK(esp_ble_gap_set_rand_addr(bt_address));
|
||||
|
||||
ESP_ERROR_CHECK(esp_ble_tx_power_set(ESP_BLE_PWR_TYPE_DEFAULT, ESP_PWR_LVL_P9));
|
||||
ESP_ERROR_CHECK(esp_ble_tx_power_set(ESP_BLE_PWR_TYPE_ADV, ESP_PWR_LVL_P9));
|
||||
ESP_ERROR_CHECK(esp_ble_tx_power_set(ESP_BLE_PWR_TYPE_SCAN, ESP_PWR_LVL_P9));
|
||||
ESP_ERROR_CHECK(esp_ble_gap_config_local_privacy(true));
|
||||
|
||||
/* nesseccary?
|
||||
// new bluetooth address
|
||||
uint8_t bt_address[ESP_BD_ADDR_LEN];
|
||||
esp_fill_random(bt_address, ESP_BD_ADDR_LEN);
|
||||
bt_address[0] |= 0xC0;
|
||||
|
||||
ESP_ERROR_CHECK(esp_ble_gap_set_rand_addr(bt_address));
|
||||
*/
|
||||
// init ENA
|
||||
ena_crypto_init();
|
||||
|
||||
|
15
main/main.c
15
main/main.c
@ -1,14 +1,14 @@
|
||||
/**
|
||||
* provide bluetooth part of Exposure Notification API v1.2 as defined by Apple/Google
|
||||
*
|
||||
*
|
||||
* Source documents:
|
||||
*
|
||||
*
|
||||
* https://blog.google/documents/70/Exposure_Notification_-_Bluetooth_Specification_v1.2.2.pdf
|
||||
*
|
||||
*
|
||||
* https://covid19-static.cdn-apple.com/applications/covid19/current/static/detection-tracing/pdf/ExposureNotification-BluetoothSpecificationv1.2.pdf
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
@ -31,7 +31,7 @@ void app_main(void)
|
||||
settimeofday(&tv, NULL);
|
||||
|
||||
esp_log_level_set(ENA_STORAGE_LOG, ESP_LOG_INFO);
|
||||
// ena_storage_erase();
|
||||
ena_storage_erase(); // only needed on first start! TODO automatically check
|
||||
|
||||
ena_init();
|
||||
|
||||
@ -42,3 +42,4 @@ void app_main(void)
|
||||
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,4 +3,4 @@
|
||||
nvs, data, nvs, 0x9000, 0x6000,
|
||||
phy_init, data, phy, 0xf000, 0x1000,
|
||||
factory, app, factory, 0x10000, 1M,
|
||||
ena, data, nvs, 0x110000,0x2C0000,
|
||||
ena, data, 0xFF, 0x110000,0x2C0000,
|
|
Loading…
Reference in New Issue
Block a user