* Companion: CMD_ADD_UPDATE_CONTACT now with optional extra 'last_mod' timestamp
This commit is contained in:
@@ -152,7 +152,7 @@ void MyMesh::writeContactRespFrame(uint8_t code, const ContactInfo &contact) {
|
|||||||
_serial->writeFrame(out_frame, i);
|
_serial->writeFrame(out_frame, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyMesh::updateContactFromFrame(ContactInfo &contact, const uint8_t *frame, int len) {
|
void MyMesh::updateContactFromFrame(ContactInfo &contact, uint32_t& last_mod, const uint8_t *frame, int len) {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
uint8_t code = frame[i++]; // eg. CMD_ADD_UPDATE_CONTACT
|
uint8_t code = frame[i++]; // eg. CMD_ADD_UPDATE_CONTACT
|
||||||
memcpy(contact.id.pub_key, &frame[i], PUB_KEY_SIZE);
|
memcpy(contact.id.pub_key, &frame[i], PUB_KEY_SIZE);
|
||||||
@@ -171,6 +171,9 @@ void MyMesh::updateContactFromFrame(ContactInfo &contact, const uint8_t *frame,
|
|||||||
i += 4;
|
i += 4;
|
||||||
memcpy(&contact.gps_lon, &frame[i], 4);
|
memcpy(&contact.gps_lon, &frame[i], 4);
|
||||||
i += 4;
|
i += 4;
|
||||||
|
if (i + 4 >= len) {
|
||||||
|
memcpy(&last_mod, &frame[i], 4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -896,15 +899,16 @@ void MyMesh::handleCmdFrame(size_t len) {
|
|||||||
} else if (cmd_frame[0] == CMD_ADD_UPDATE_CONTACT && len >= 1 + 32 + 2 + 1) {
|
} else if (cmd_frame[0] == CMD_ADD_UPDATE_CONTACT && len >= 1 + 32 + 2 + 1) {
|
||||||
uint8_t *pub_key = &cmd_frame[1];
|
uint8_t *pub_key = &cmd_frame[1];
|
||||||
ContactInfo *recipient = lookupContactByPubKey(pub_key, PUB_KEY_SIZE);
|
ContactInfo *recipient = lookupContactByPubKey(pub_key, PUB_KEY_SIZE);
|
||||||
|
uint32_t last_mod = getRTCClock()->getCurrentTime(); // fallback value if not present in cmd_frame
|
||||||
if (recipient) {
|
if (recipient) {
|
||||||
updateContactFromFrame(*recipient, cmd_frame, len);
|
updateContactFromFrame(*recipient, last_mod, cmd_frame, len);
|
||||||
// recipient->lastmod = ?? shouldn't be needed, app already has this version of contact
|
recipient->lastmod = last_mod;
|
||||||
dirty_contacts_expiry = futureMillis(LAZY_CONTACTS_WRITE_DELAY);
|
dirty_contacts_expiry = futureMillis(LAZY_CONTACTS_WRITE_DELAY);
|
||||||
writeOKFrame();
|
writeOKFrame();
|
||||||
} else {
|
} else {
|
||||||
ContactInfo contact;
|
ContactInfo contact;
|
||||||
updateContactFromFrame(contact, cmd_frame, len);
|
updateContactFromFrame(contact, last_mod, cmd_frame, len);
|
||||||
contact.lastmod = getRTCClock()->getCurrentTime();
|
contact.lastmod = last_mod;
|
||||||
contact.sync_since = 0;
|
contact.sync_since = 0;
|
||||||
if (addContact(contact)) {
|
if (addContact(contact)) {
|
||||||
dirty_contacts_expiry = futureMillis(LAZY_CONTACTS_WRITE_DELAY);
|
dirty_contacts_expiry = futureMillis(LAZY_CONTACTS_WRITE_DELAY);
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ private:
|
|||||||
void writeErrFrame(uint8_t err_code);
|
void writeErrFrame(uint8_t err_code);
|
||||||
void writeDisabledFrame();
|
void writeDisabledFrame();
|
||||||
void writeContactRespFrame(uint8_t code, const ContactInfo &contact);
|
void writeContactRespFrame(uint8_t code, const ContactInfo &contact);
|
||||||
void updateContactFromFrame(ContactInfo &contact, const uint8_t *frame, int len);
|
void updateContactFromFrame(ContactInfo &contact, uint32_t& last_mod, const uint8_t *frame, int len);
|
||||||
void addToOfflineQueue(const uint8_t frame[], int len);
|
void addToOfflineQueue(const uint8_t frame[], int len);
|
||||||
int getFromOfflineQueue(uint8_t frame[]);
|
int getFromOfflineQueue(uint8_t frame[]);
|
||||||
int getBlobByKey(const uint8_t key[], int key_len, uint8_t dest_buf[]) override {
|
int getBlobByKey(const uint8_t key[], int key_len, uint8_t dest_buf[]) override {
|
||||||
|
|||||||
Reference in New Issue
Block a user