/*
Struct Opções utilizando: define e struct com struct
Autor: Eng. Fabrício Ribeiro
19/05/2025
*/
//Mtype
#define Join_Request 0
#define Join_Accept 1
#define Unconfirmed_Data_Up 2
#define Unconfirmed_Data_Down 3
#define Confirmed_Data_Up 4
#define Confirmed_Data_Down 5
#define Rejoin_Request 6
#define Proprietary 7
//RFU
#define Teste0 0
#define Teste1 1
#define Teste2 2
#define Teste3 3
#define Teste4 4
#define Teste5 5
#define Teste6 6
#define Teste7 7
//Versão
#define Version_0 0
#define Version_1 1
#define Version_2 2
#define Version_3 3
//Mpayload
byte AppEUI[8] = {0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C};
byte DevEUI[8] = {0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6};
byte DevNonce[2] = {0xAB, 0xCD};
//MIC
byte MIC[4] = {0xAA, 0xBB, 0xCC, 0xDD};
//Protótipos
void print_array(uint8_t vetor[], uint8_t n);
//Struct MHDR
struct __attribute__ ((packed)) _MHDR{
byte Mtype:3; //3bit
byte RFU:3; //3bit
byte Version:2; //2bit
};
//Struct Mpayload
struct __attribute__ ((packed)) _Mpayload{
byte *AppEUI;
byte *DevEUI;
byte *DevNonce;
};
//Struct PHYPayload
typedef struct __attribute__ ((packed)) _PHYPayload{
_MHDR MHDR;
_Mpayload Mpayload;
byte *MIC;
};
void setup(){
Serial.begin(115200);
_PHYPayload PHYPayload;
//Mtype
PHYPayload.MHDR.Mtype = Join_Accept;
PHYPayload.MHDR.RFU = Teste1;
PHYPayload.MHDR.Version = Version_1;
//Mpayload
PHYPayload.Mpayload.AppEUI = AppEUI;
PHYPayload.Mpayload.DevEUI = DevEUI;
PHYPayload.Mpayload.DevNonce = DevNonce;
//MIC
PHYPayload.MIC = MIC;
//Impressões
Serial.print("MHDR: ");
print_binario(PHYPayload.MHDR.Mtype);
Serial.print("AppEUI: ");
print_array(PHYPayload.Mpayload.AppEUI, 8);
Serial.print("DevEUI: ");
print_array(PHYPayload.Mpayload.DevEUI, 8);
Serial.print("DevNonce: ");
print_array(PHYPayload.Mpayload.DevNonce, 2);
Serial.print("MIC: ");
print_array(PHYPayload.MIC, 4);
}
void loop(){
}
//Imprime binario
void print_binario(byte n){
for(int i=2; i>=0; i--){
Serial.print(bitRead(n, i));
}
for(int i=2; i>=0; i--){
Serial.print(bitRead(n, i));
}
for(int i=1; i>=0; i--){
Serial.print(bitRead(n, i));
}
Serial.println(" ");
}
//Imprime array
void print_array(uint8_t vetor[], uint8_t n){
for(byte i=0; i<n; i++){
Serial.print(vetor[i] < 16 ? "0" : "");
Serial.print(vetor[i], HEX);
Serial.print(" ");
}
Serial.println(" ");
}