MI32 legacy: add config operations (#22458)

This commit is contained in:
Christian Baars 2024-11-10 23:23:37 +01:00 committed by GitHub
parent 669c6e49ea
commit 448ca1c109
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 50 additions and 5 deletions

View File

@ -444,12 +444,13 @@ int NimBLEDevice::getPower() {
*/
/* STATIC*/
NimBLEAddress NimBLEDevice::getAddress() {
ble_addr_t addr = {BLE_ADDR_PUBLIC, 0};
ble_addr_t addr = {m_own_addr_type, 0};
if(BLE_HS_ENOADDR == ble_hs_id_copy_addr(BLE_ADDR_PUBLIC, addr.val, NULL)) {
NIMBLE_LOGD(LOG_TAG, "Public address not found, checking random");
addr.type = BLE_ADDR_RANDOM;
ble_hs_id_copy_addr(BLE_ADDR_RANDOM, addr.val, NULL);
if(BLE_HS_ENOADDR == ble_hs_id_copy_addr(m_own_addr_type, addr.val, NULL)) {
// NIMBLE_LOGD(LOG_TAG, "Public address not found, checking random");
// addr.type = BLE_ADDR_RANDOM;
// ble_hs_id_copy_addr(BLE_ADDR_RANDOM, addr.val, NULL);
return NimBLEAddress(); // return blank to report error
}
return NimBLEAddress(addr);

View File

@ -66,6 +66,7 @@
#include <t_bearssl.h>
#include "include/xsns_62_esp32_mi.h"
#include "services/gap/ble_svc_gap.h"
void MI32notifyCB(NimBLERemoteCharacteristic* pRemoteCharacteristic, uint8_t* pData, size_t length, bool isNotify);
void MI32AddKey(mi_bindKey_t keyMAC);
@ -732,7 +733,50 @@ extern "C" {
MI32BLELoop();
}
bool MI32runBerryConfig(uint16_t operation){
bool success = false;
#ifdef CONFIG_BT_NIMBLE_EXT_ADV
NimBLEExtAdvertising *pAdvertising = NimBLEDevice::getAdvertising();
#else
NimBLEAdvertising *pAdvertising = NimBLEDevice::getAdvertising();
#endif
if(pAdvertising == nullptr){
return success;
}
switch(operation){
case 231: // set address
pAdvertising->stop();
if(MI32.conCtx->addrType > 0){
ble_hs_id_set_rnd(MI32.conCtx->MAC);
AddLog(LOG_LEVEL_DEBUG,PSTR("BLE: set MAC to random"));
}
NimBLEDevice::setOwnAddrType(MI32.conCtx->addrType);
success = true;
break;
case 232: // set adv params via bytes() descriptor of size 5,
if(MI32.conCtx->buffer[0] == 5){
uint16_t itvl_min = MI32.conCtx->buffer[2] + (MI32.conCtx->buffer[3] << 8);
uint16_t itvl_max = MI32.conCtx->buffer[4] + (MI32.conCtx->buffer[5] << 8);
pAdvertising->setAdvertisementType(MI32.conCtx->buffer[1]);
pAdvertising->setMinInterval(itvl_min);
pAdvertising->setMaxInterval(itvl_max);
AddLog(LOG_LEVEL_DEBUG,PSTR("BLE: adv params: type: %u, min: %u, max: %u"),MI32.conCtx->buffer[1], (uint16_t)(itvl_min * 0.625), (uint16_t)(itvl_max * 0.625)) ;
success = true;
}
break;
case 233:
int ret = ble_svc_gap_device_name_set((const char*)MI32.conCtx->buffer + 1);
AddLog(LOG_LEVEL_DEBUG,PSTR("BLE: new gap device name - %s"),(const char*) MI32.conCtx->buffer + 1);
success = (ret == 0);
break;
}
return success;
}
bool MI32runBerryServer(uint16_t operation){
if(operation > 230){
return MI32runBerryConfig(operation);
}
MI32.conCtx->operation = operation;
AddLog(LOG_LEVEL_DEBUG,PSTR("BLE: Berry server op: %d, response: %u"),MI32.conCtx->operation, MI32.conCtx->response);
if(MI32.mode.readyForNextServerJob == 0){