Aiuto con libreria custom

Ciao a tutti, ho finalmente iniziato a scrivere il mio codice per l’antifurto con sensori bluetooth LE.
Ho una libreria esterna che mi fa la scansione continua dei dispositivi BLE rilevati.

int SMSGateway::buttonsPressed(int num)
{
  LGATTDeviceInfo info = {0};
   typeBLEInfo mInfo;
   int numberAlert = 0;
   for (int i = 0; i < num; i++)
   {
      c.getScanResult(i, info);

      #ifdef _DEBUG_INFO
      Serial.printf("[LGATTC ino]dev address : [%x:%x:%x:%x:%x:%x] rssi [%d]", 
      info.bd_addr.addr[5], info.bd_addr.addr[4], info.bd_addr.addr[3], info.bd_addr.addr[2], info.bd_addr.addr[1], info.bd_addr.addr[0],
      info.rssi);
      Serial.println();
      #endif

      int lenAdvertData = info.eir[8];
      memcpy(&mInfo, &info.eir[9], lenAdvertData - 1);
      memcpy(&mInfo.nameBLE, &info.eir[9 + lenAdvertData + 2], 12); 

      Serial.printf(mInfo.uuid);
      if(memcmp(myUuid, mInfo.uuid, 16 ) == 0){

          if(mInfo.minor[1] == 0x12 || mInfo.minor[1] == 0x11){
             memcpy(&BLEInfo[numberAlert], &mInfo, 32);
             numberAlert++;

             #ifdef _DEBUG_INFO
             Serial.println("\n<<<<<< Alert >>>>>>\n");
             #endif

          }else if(mInfo.minor[1] == 0x02){

             #ifdef _DEBUG_INFO
             Serial.println("\n<<<<<< Normal >>>>>>\n");
             #endif

          }
      }
   }
  return numberAlert;
}

In pratica ogni dispositivo ha un codice identificativo, e io devo loggare in console quel codice. Al momento la libreria gestisce un dispositivo diverso da quello che serve a me, quindi devo adattare quell’IF che scatena l’alert.

typedef struct {
  byte uuid[16];
  byte major[2];
  byte minor[2];
  byte nameBLE[12];
}typeBLEInfo;

La classe typeBLEInfo che è uno struct ha all’interno sia il name sia l’uuid, che sono i due parametri che servono a me, ma non riesco in alcun modo ad avere un print in console di questi due parametri durante la scansione.

Scusate ma sviluppo in Rails, devo prendere confidenza con il linguaggio!!!

Essendo un rubysta avevo pensato che uuid[16] fosse il valore all'index 16 dell'array uuid.

Invece UUID è un array di 16 elementi di tipo byte, quindi devo fare un loop per avere il print :D

code]typedef struct {
  byte uuid[16];
  byte major[2];
  byte minor[2];
  byte nameBLE[12];
}typeBLEInfo;

Ma al primo post il primo codice è Arduino o Ruby ? Se è codice Arduino, hai modificato qualcosa ? Di serie la Serial non ha la printf

Per un elemento di una struct basta stampare usando il nome del membro Serial.println( mInfo.nameBLE ); L'importante però è che nella stringa ci sia il carattere di fine stringa '\0'

E’ tutto codice Arduino…
Funziona tutto, il codice lo compila e lo esegue.

Solo che io provavo a stampare a console

mInfo.uuid

ma in realtà ho capito dopo che uuid è un array di 16 byte quindi per printarlo devo fare…

for(int i = 0; i < 16; i++)
{
  Serial.println(mInfo.uuid[i]);
}