mirror of
https://github.com/Lurkars/esp-ena.git
synced 2024-11-22 10:06:11 +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
|
### 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:
|
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:
|
case ESP_GAP_BLE_SCAN_RESULT_EVT:
|
||||||
if (p->scan_rst.search_evt == ESP_GAP_SEARCH_INQ_RES_EVT)
|
if (p->scan_rst.search_evt == ESP_GAP_SEARCH_INQ_RES_EVT)
|
||||||
{
|
{
|
||||||
// check for ENA Service UUID:
|
if (p->scan_rst.adv_data_len < 28)
|
||||||
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)
|
{
|
||||||
|
// 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};
|
uint8_t rpi[ENA_KEY_LENGTH] = {0};
|
||||||
for (int i = 0; i < ENA_KEY_LENGTH; i++)
|
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};
|
uint8_t aem[ENA_AEM_METADATA_LENGTH] = {0};
|
||||||
for (int i = 0; i < ENA_AEM_METADATA_LENGTH; i++)
|
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);
|
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_erase());
|
||||||
ESP_ERROR_CHECK(nvs_flash_init());
|
ESP_ERROR_CHECK(nvs_flash_init());
|
||||||
}
|
}
|
||||||
|
|
||||||
// init BLE
|
// init BLE
|
||||||
esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
|
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_init(&bt_cfg));
|
||||||
ESP_ERROR_CHECK(esp_bt_controller_enable(ESP_BT_MODE_BLE));
|
ESP_ERROR_CHECK(esp_bt_controller_enable(ESP_BT_MODE_BLE));
|
||||||
|
|
||||||
ESP_ERROR_CHECK(esp_bluedroid_init());
|
ESP_ERROR_CHECK(esp_bluedroid_init());
|
||||||
ESP_ERROR_CHECK(esp_bluedroid_enable());
|
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_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_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_tx_power_set(ESP_BLE_PWR_TYPE_SCAN, ESP_PWR_LVL_P9));
|
||||||
ESP_ERROR_CHECK(esp_ble_gap_config_local_privacy(true));
|
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
|
// init ENA
|
||||||
ena_crypto_init();
|
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
|
* provide bluetooth part of Exposure Notification API v1.2 as defined by Apple/Google
|
||||||
*
|
*
|
||||||
* Source documents:
|
* Source documents:
|
||||||
*
|
*
|
||||||
* https://blog.google/documents/70/Exposure_Notification_-_Bluetooth_Specification_v1.2.2.pdf
|
* 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
|
* https://covid19-static.cdn-apple.com/applications/covid19/current/static/detection-tracing/pdf/ExposureNotification-BluetoothSpecificationv1.2.pdf
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -31,7 +31,7 @@ void app_main(void)
|
|||||||
settimeofday(&tv, NULL);
|
settimeofday(&tv, NULL);
|
||||||
|
|
||||||
esp_log_level_set(ENA_STORAGE_LOG, ESP_LOG_INFO);
|
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();
|
ena_init();
|
||||||
|
|
||||||
@ -42,3 +42,4 @@ void app_main(void)
|
|||||||
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,4 +3,4 @@
|
|||||||
nvs, data, nvs, 0x9000, 0x6000,
|
nvs, data, nvs, 0x9000, 0x6000,
|
||||||
phy_init, data, phy, 0xf000, 0x1000,
|
phy_init, data, phy, 0xf000, 0x1000,
|
||||||
factory, app, factory, 0x10000, 1M,
|
factory, app, factory, 0x10000, 1M,
|
||||||
ena, data, nvs, 0x110000,0x2C0000,
|
ena, data, 0xFF, 0x110000,0x2C0000,
|
|
Loading…
Reference in New Issue
Block a user