diff options
Diffstat (limited to '_log')
| -rw-r--r-- | _log/fpm-door-lock-rf.md | 47 | ||||
| -rw-r--r-- | _log/neo4j-a-star-search.md | 4 |
2 files changed, 43 insertions, 8 deletions
diff --git a/_log/fpm-door-lock-rf.md b/_log/fpm-door-lock-rf.md index 8fe592a..d8822f9 100644 --- a/_log/fpm-door-lock-rf.md +++ b/_log/fpm-door-lock-rf.md @@ -16,21 +16,54 @@ Unreliable--constant packet loss. the letter, audited code many times, cross-checked with RadioHead and RFM69 open-source drivers. No luck. -Datasheet riddled with ambiguity. - ATmega328P runs at 5V; RFM69 3.3V. Suspect logic-level converter (LLC) issues. High resistance. Not enough swing. -2025-04: Ditched RFM69s. Switched to NRF24L01+ modules-- data pins 5V tolerant, -no LLC required. Spent six weekends writing driver from scratch--clean-room. -Works like a charm. +2025-04: Ditched RFM69s. Switched to NRF24L01+ modules--data pins 5V tolerant, +no LLC required. Spent six weekends writing a clean-room driver from scratch. +Works like a charm. + +Basic security via xor cipher–good enough for a door behind a guard post and +gate: + +``` +void xor(const char *k, const char *s, char *d, uint8_t n) +{ + int i; + for (i = 0; i < n; i++) + d[i] = s[i] ^ k[i]; +} +``` + +Resists replay attacks by cycling the key: + +``` +static inline void keygen(char *buf, uint8_t n) +{ + int i, imax; + uint8_t sreg; + uint16_t seed; + + sreg = SREG; + cli(); + seed = TCNT1; + SREG = sreg; + + for (i = 0, imax = n - 1; i < imax; i++, seed++) + buf[i] = tab[(seed % tablen)]; + buf[imax] = '\0'; +} +``` + +Protocol: FPM sends SYN. Servo responds with session key. Both xor-ed with +static key. Session key used thereafter. Private command set authenticates +endpoints. 2025-05: Wrote FPM drivers for R503 and FPM10A. UART RX sequence was tricky--adopted Adafruit C++ FOSS implementation to C. R503 has built-in LEDs and better form factor. Chose it for the lock. -2025-06: Two PCB boards for FPM (front) and servo (back) controllers. Encrypted -RF link between them. +2025-06: Two PCBs for FPM (front) and servo (back) controllers. <table style="border: none; width: 100%"> <tr style="border: none;"> diff --git a/_log/neo4j-a-star-search.md b/_log/neo4j-a-star-search.md index ca9a563..017a33e 100644 --- a/_log/neo4j-a-star-search.md +++ b/_log/neo4j-a-star-search.md @@ -28,7 +28,6 @@ private double computeHeuristic( * Math.sin(lonDistance / 2); final double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); - return earthRadius * c * kmToNM; } ``` @@ -50,6 +49,9 @@ private void updateCosts( 300x speedup. Scaled to 13,000 route points. +Despite impressive speedup, performance horizon visible. Unlikely to scale past +16,000 points. + Upstreamed changes: <a href="https://github.com/neo4j-contrib/neo4j-graph-algorithms/releases/tag/3.4.0.0" class="external" target="_blank" rel="noopener noreferrer">Neo4J v3.4.0</a> | |
