Beste allemaal,
Op dit moment probeer ik te communiceren met een device, communicatie verloopt serieel (RS-232, RX, TX, Ground). Het apparaat betreft een Garmin.
De Garmin communiceert door seriaal bytestreams weg te sturen, byte-georienteerde pakketten dus. Deze pakketten hebben onderstaande opbouw (rechtstreeks overgenomen uit de interface specificatie van Garmin);
Bytenumber, Bytedescription, Notes
0, Data Link Escape, ASCII DLE character (16 decimal)
1, Packet ID
2, Packet Data Size, aantal bytes packet data
3 tot n-4, Packet Data, 0 tot 255 bytes
n-3, Checksum
n-2, Data Link Escape
n-1, End Of Text, ASCII ETX character (3 decimal)
Het pakket is dus samenvattend als volgt opgebouwd;
3 byte header
0 tot 255 bytes aan data
3 byte trailer
Nu komt het probleem, ik wil natuurlijk graag de te versturen en ontvangen pakketten gestructureerd opslaan. Mij leek het idee van een struct wel gepast, als volgt bijvoorbeeld;
typedef struct
{
BYTE DLE_1;
BYTE packetID;
BYTE dataSize;
// nu komt het moeilijke
BYTE data[dataSize];
// bovenstaande kan natuurlijk nooit, even pseudo het idee
BYTE checksum;
BYTE DLE_2;
BYTE ETX;
} packet;
Note: 'BYTE' is in win32 slechts een ander woord voor een unsigned char, een positieve 8-bit int dus
Het idee is natuurlijk om de data ook in de struct op te slaan, probleem is echter dat we van tevoren niet weten hoeveel data dit zal zijn.. 0 tot 255 bytes. Het doel is natuurlijk de pakketten gestructureerd op te kunnen slaan om ze zo door te geven aan process functies en dergelijke. Aangezien pakketten telkens byte voor byte verwerkt worden. Had even gekeken naar een vector maar zag dat deze default al wat overhead heeft, zodat we in het geheugen meer bytes in beslag nemen dan dat er eigenlijk data is.
Heeft iemand enig idee hoe dit opgelost kan worden? Mocht ik niet duidelijk genoeg zijn dan hoor ik het graag, licht het probleem graag toe.
Alvast hartelijk bedankt!
Op dit moment probeer ik te communiceren met een device, communicatie verloopt serieel (RS-232, RX, TX, Ground). Het apparaat betreft een Garmin.
De Garmin communiceert door seriaal bytestreams weg te sturen, byte-georienteerde pakketten dus. Deze pakketten hebben onderstaande opbouw (rechtstreeks overgenomen uit de interface specificatie van Garmin);
Bytenumber, Bytedescription, Notes
0, Data Link Escape, ASCII DLE character (16 decimal)
1, Packet ID
2, Packet Data Size, aantal bytes packet data
3 tot n-4, Packet Data, 0 tot 255 bytes
n-3, Checksum
n-2, Data Link Escape
n-1, End Of Text, ASCII ETX character (3 decimal)
Het pakket is dus samenvattend als volgt opgebouwd;
3 byte header
0 tot 255 bytes aan data
3 byte trailer
Nu komt het probleem, ik wil natuurlijk graag de te versturen en ontvangen pakketten gestructureerd opslaan. Mij leek het idee van een struct wel gepast, als volgt bijvoorbeeld;
typedef struct
{
BYTE DLE_1;
BYTE packetID;
BYTE dataSize;
// nu komt het moeilijke
BYTE data[dataSize];
// bovenstaande kan natuurlijk nooit, even pseudo het idee
BYTE checksum;
BYTE DLE_2;
BYTE ETX;
} packet;
Note: 'BYTE' is in win32 slechts een ander woord voor een unsigned char, een positieve 8-bit int dus
Het idee is natuurlijk om de data ook in de struct op te slaan, probleem is echter dat we van tevoren niet weten hoeveel data dit zal zijn.. 0 tot 255 bytes. Het doel is natuurlijk de pakketten gestructureerd op te kunnen slaan om ze zo door te geven aan process functies en dergelijke. Aangezien pakketten telkens byte voor byte verwerkt worden. Had even gekeken naar een vector maar zag dat deze default al wat overhead heeft, zodat we in het geheugen meer bytes in beslag nemen dan dat er eigenlijk data is.
Heeft iemand enig idee hoe dit opgelost kan worden? Mocht ik niet duidelijk genoeg zijn dan hoor ik het graag, licht het probleem graag toe.
Alvast hartelijk bedankt!
Laatst bewerkt: