Преглед изворни кода

Address PR review: subtract-1 encoding and clamp max_hops

- Change > to >= so stored value 1 means direct/0-hop only (liamcottle)
- Clamp max_hops to 63 on write since getPathHashCount() caps at 63 (robekl)
- Update comments to reflect encoding: 0=no limit, 1=direct only, N=up to N-1 hops

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wouter Bijen пре 5 месеци
родитељ
комит
c016db86d5

+ 1 - 1
examples/companion_radio/MyMesh.cpp

@@ -1790,7 +1790,7 @@ void MyMesh::handleCmdFrame(size_t len) {
   } else if (cmd_frame[0] == CMD_SET_AUTOADD_CONFIG) {
     _prefs.autoadd_config = cmd_frame[1];
     if (len >= 3) {
-      _prefs.autoadd_max_hops = cmd_frame[2];
+      _prefs.autoadd_max_hops = min(cmd_frame[2], (uint8_t)63);
     }
     savePrefs();
     writeOKFrame();

+ 1 - 1
examples/companion_radio/NodePrefs.h

@@ -30,5 +30,5 @@ struct NodePrefs {  // persisted to file
   uint8_t autoadd_config;    // bitmask for auto-add contacts config
   uint8_t client_repeat;
   uint8_t path_hash_mode;    // which path mode to use when sending
-  uint8_t autoadd_max_hops;  // 0 = no limit, 1-63 = max hops for auto-add
+  uint8_t autoadd_max_hops;  // 0 = no limit, 1 = direct only, N = up to N-1 hops (max 63)
 };

+ 2 - 2
src/helpers/BaseChatMesh.cpp

@@ -141,9 +141,9 @@ void BaseChatMesh::onAdvertRecv(mesh::Packet* packet, const mesh::Identity& id,
       return;
     }
 
-    // check hop limit for new contacts (0 = no limit)
+    // check hop limit for new contacts (0 = no limit, 1 = direct only, N = up to N-1 hops)
     uint8_t max_hops = getAutoAddMaxHops();
-    if (max_hops > 0 && packet->getPathHashCount() > max_hops) {
+    if (max_hops > 0 && packet->getPathHashCount() >= max_hops) {
       ContactInfo ci;
       populateContactFromAdvert(ci, id, parser, timestamp);
       onDiscoveredContact(ci, true, packet->path_len, packet->path);       // let UI know

+ 1 - 1
src/helpers/BaseChatMesh.h

@@ -98,7 +98,7 @@ protected:
   virtual bool shouldAutoAddContactType(uint8_t type) const { return true; }
   virtual void onContactsFull() {};
   virtual bool shouldOverwriteWhenFull() const { return false; }
-  virtual uint8_t getAutoAddMaxHops() const { return 0; }  // 0 = no limit, 1-63 = max hops for auto-add
+  virtual uint8_t getAutoAddMaxHops() const { return 0; }  // 0 = no limit, 1 = direct only, N = up to N-1 hops
   virtual void onContactOverwrite(const uint8_t* pub_key) {};
   virtual void onDiscoveredContact(ContactInfo& contact, bool is_new, uint8_t path_len, const uint8_t* path) = 0;
   virtual ContactInfo* processAck(const uint8_t *data) = 0;