mirror of
https://github.com/UtilitechAS/amsreader-firmware.git
synced 2026-01-26 20:23:41 +00:00
Fixed GBT multiframe
This commit is contained in:
@@ -858,8 +858,7 @@ bool readHanPort() {
|
||||
if(ga == NULL) {
|
||||
ga = new GBTAssembler();
|
||||
}
|
||||
ga->init((uint8_t *) hanBuffer, &context);
|
||||
if(ga->append((uint8_t *) hanBuffer+context.apduStart, len, &Debug) < 0) {
|
||||
if(ga->append(&context, (uint8_t *) hanBuffer, len, &Debug) < 0) {
|
||||
debugE("GBT assembler failed");
|
||||
len = 0;
|
||||
return false;
|
||||
@@ -876,7 +875,7 @@ bool readHanPort() {
|
||||
debugD("Final block dump (%db):", len);
|
||||
debugPrint(hanBuffer, 0, len);
|
||||
}
|
||||
if(ga->append((uint8_t *) hanBuffer+context.apduStart, len, &Debug) >= 0) {
|
||||
if(ga->append(&context, (uint8_t *) hanBuffer, len, &Debug) >= 0) {
|
||||
len = ga->write((uint8_t *) hanBuffer);
|
||||
pos = HDLC_validate((uint8_t *) hanBuffer, len, hc, ×tamp, &context);
|
||||
} else {
|
||||
|
||||
@@ -17,15 +17,21 @@ void GBTAssembler::init(const uint8_t* d, HDLCContext* context) {
|
||||
lastSequenceNumber = 0;
|
||||
}
|
||||
|
||||
int GBTAssembler::append(const uint8_t* d, int length, Print* debugger) {
|
||||
GBTHeader* h = (GBTHeader*) d;
|
||||
int GBTAssembler::append(HDLCContext* context, const uint8_t* d, int length, Print* debugger) {
|
||||
GBTHeader* h = (GBTHeader*) (d+context->apduStart);
|
||||
h->sequence = ntohs(h->sequence);
|
||||
h->sequenceAck = ntohs(h->sequenceAck);
|
||||
uint8_t* ptr = (uint8_t*) &h[1];
|
||||
|
||||
//debugger->printf("F: %02X, C: %02X, S: %d, A: %d, L: %d, X: %d\n", h->flag, h->control, h->sequence, h->sequenceAck, h->size, lastSequenceNumber);
|
||||
if(h->flag != 0xE0) return -9;
|
||||
|
||||
if(lastSequenceNumber != h->sequence-1) return -1;
|
||||
if(h->sequence == 1) {
|
||||
init(d, context);
|
||||
} else if(lastSequenceNumber != h->sequence-1) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
uint8_t* ptr = (uint8_t*) &h[1];
|
||||
memcpy(buf + pos, ptr, h->size);
|
||||
pos += h->size;
|
||||
lastSequenceNumber = h->sequence;
|
||||
|
||||
@@ -16,7 +16,7 @@ class GBTAssembler {
|
||||
public:
|
||||
GBTAssembler();
|
||||
void init(const uint8_t* d, HDLCContext* context);
|
||||
int append(const uint8_t* d, int length, Print* debugger);
|
||||
int append(HDLCContext* context, const uint8_t* d, int length, Print* debugger);
|
||||
uint16_t write(const uint8_t* d);
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user