[ad_1]
I am creating a struct of bit fields to organize a message I am converting into a uint8_t array to send over 900 MHz.
I have created the following class:
Message.h:
class message {
private:
static const int PAYLOAD_LENGTH; // Length of payload in bytes
struct Payload
{
uint8_t partA: 2;
uint8_t partB: 2;
uint8_t partC: 2;
uint8_t partD: 3;
uint8_t partE: 5;
uint8_t partF: 5;
uint8_t partG: 7;
uint8_t partH: 7;
uint8_t partI: 7;
uint8_t partJ: 8;
uint8_t partK: 8;
};
public:
Message();
uint8_t *buildTransmission();
boolean readMessage(uint8_t *message);
Payload *m_payload;
};
Message.cpp
#include "Message.h"
const int Message::PAYLOAD_LENGTH = 7;
Message::Message()
{
memset(m_payload, 0, PAYLOAD_LENGTH);
}
uint8_t *Message::buildTransmission()
{
uint8_t *transmission = (uint8_t *)m_payload;
return transmission;
}
boolean Message::readMessage(uint8_t *message)
{
m_payload = (Payload *)message;
return false;
}
payload.ino:
#include "Message.h"
Message message;
void setup()
{
Serial.begin(115200);
message.m_payload->partG = 127;
Serial.print("Set as: ");
Serial.println(message.m_payload->partG);
Serial.println("Converting to character array");
uint8_t *trans = message.buildTransmission();
message.readMessage(trans);
Serial.print("After conversions: ");
Serial.println(message.m_payload->angle);
}
void loop()
{
}
Result:
Set as: 30
Converting to character array
After conversions: 30
My issue is that I am setting message.m_payload->partG
to 127
and it is displaying as 30
. To my unknowledagble eyes it seems as if the struct is packed incorectly. I have tried re-ordering my struct fields to biggest size to smallest, adding the __attribute__((__packed__))
to my struct. I have also tried removing the bit field from the 8-bit bit fields, and switching the type to unsigned int
. Any help, or suggestions is appreciated.
[ad_2]