From 35124740f60cafa3d9b5841417fc66934ea99254 Mon Sep 17 00:00:00 2001
From: Jake Read <jakerobertread@gmail.com>
Date: Thu, 22 Aug 2024 13:26:45 -0400
Subject: [PATCH] she done

---
 .../sketchy_machine_motion.cpython-312.pyc    | Bin 9443 -> 9264 bytes
 .../python/modules/sketchy_machine_motion.py  |   4 +-
 .../__pycache__/netrunner.cpython-312.pyc     | Bin 9536 -> 11982 bytes
 .../netrunner_atomics.cpython-312.pyc         | Bin 11947 -> 11947 bytes
 new_shit/python/osap/discovery/netrunner.py   |  52 +++++++++++++++++-
 new_shit/python/sketchy.py                    |   5 ++
 .../svg/__pycache__/svg_tools.cpython-312.pyc | Bin 5610 -> 5610 bytes
 7 files changed, 58 insertions(+), 3 deletions(-)

diff --git a/new_shit/python/modules/__pycache__/sketchy_machine_motion.cpython-312.pyc b/new_shit/python/modules/__pycache__/sketchy_machine_motion.cpython-312.pyc
index c050e9984643295899d81ccd19222b753ca0f7d3..7b0ec9a15f2607c2387b0ee53f37bbd5438c34a2 100644
GIT binary patch
delta 266
zcmaFtxxs_?G%qg~0|Ns?N6GQDgpIrhxS7^5Z9dP<$23`&Pn=P4@<LwW$?Jq9l}hA6
zsz5k}b2TG~W?*1sC{c#67#OltCJV9%GjpwGoV;F0iqD*(N7tO8hkY$`Iin``<g0wM
zCeP)cqtBX@nx2_=i#@TpGA}tZ{}yX;PHJkwO2#5{1_p*=kg*CymJAFGMZpXV3{_H-
z8`woB*9vekvQ6#~IKm>qz{xi`ThPLgm4Q?3#{&+<U&Sg63=B;!imsxJN0b>|1zC=$
zsJn_X9_40q6=pfg!v<mtGrEdyekHh`l`&-UEb%<X(9N6@f4LZgC$lS0VGP+kN7<bb
E0M-veuK)l5

delta 395
zcmdns@z|61G%qg~0|Ns?eA4l>n2o##xS5!kH=pO`W8x`M1c`%imeOQF7GY-2)r^xT
zN=opQ$b$qyIE8ESWnM)_)yWHag(v?OlvF~J;$F=NQo_K%$bexI55%O&{}ovIqs$q4
z^vxN1IM*_lGivfqZseP#tL~eaoROKAs-Umnl$xHIXQdFHm|2pUm#&bOU!>rilb@Vj
ztf!}^P$bU4z%W^gf36mLVsT|&a%TQ5*5aJh)Ph^ANg#bI8H>yr7#NB{E>S45WME(@
z3Z49rUxiV1GMm5=c@YLqz6*TjS2!&0@QL>4cIM7-yv!$eokQ*dhuj?w-pS_#EZjL6
zIOTsl;86YXfJ5<Du^9scLz9b)t3BfpIYw7YmLu{yuJ(*axfxxpS&s6kgV@H5uC^>k
wP1rzeYeo=h%jjyq*<5fvD`W8F=VEz`A)CX*|8g;gP7YC;!Wg{yrII@%0DG8cod5s;

diff --git a/new_shit/python/modules/sketchy_machine_motion.py b/new_shit/python/modules/sketchy_machine_motion.py
index 979c149..f2d4ab2 100644
--- a/new_shit/python/modules/sketchy_machine_motion.py
+++ b/new_shit/python/modules/sketchy_machine_motion.py
@@ -106,8 +106,8 @@ class SketchyMachineMotion:
             print_point_transmits = False  
         ), self.queue_planner)
 
-        print("Machine / Begin: Waiting for Clocks... ")
-        await asyncio.sleep(3)
+        # print("Machine / Begin: Waiting for Clocks... ")
+        # await asyncio.sleep(3)
         print("Machine / Begin: Startup MAXL... ")
         await self._maxl_core.begin()
         print("Machine / Begin: ... done ")
diff --git a/new_shit/python/osap/discovery/__pycache__/netrunner.cpython-312.pyc b/new_shit/python/osap/discovery/__pycache__/netrunner.cpython-312.pyc
index 88bfedf68eb77387609d05b1c05334d640bc93d0..2b06e7c3319397c53337764e82055f0607a4b799 100644
GIT binary patch
delta 3985
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

delta 1686
zcmX>Xd%%nDG%qg~0|NttOV|E128D@y67@`s3=Gp5QW#Pga~N_NqZk=MY^EHhT;?d|
zT$U&nFrPVxHJ2@lEtfrtosl7hC51JIBbPIZ6U=7I;mYNX;s&$Xb9i!jqj+=qqWBmY
zQaDmLbNF)wq6BgUqXct>qJ(mVql6h5Qdx@FQdm;Bazt`Pqv}N&8B!UU7~C0BxLX)f
zcvdrkoX5bh8bUEdi9uy~TNqOKFl5D{vivO!DFPU>5@2%$TNqM=U~*BCU@_qqh7=Ky
z7(d9KD5*+OO|h3C=41y(KSsvM{fyF^k1}3kWD{UuU?}37ypTD8O9aFO5qy)mS=`u^
z!Q9EdtR|DYS(43VL0mZyArB(hK!gGV1H&!m%)F8!B@h>^Lj}ZAgAr1bRauoFMyXBq
zW!-FqW{fsSA;=hX6LdimAVO)f5t}j>*k}+pd7_}`<PtU?Mw!V6*=)5n8T~YwicCO?
zWf&M3G?{O)6sP8-Aw-Iq85kH86cmb7CTp@QGHOruW|w4C-ki$r#S{e6c8j&32;>1t
zkP%`aLL5X$fqcf9npc{eT9jClS_Cru7H3IiL27(nVs7d!_RQk={DRcHB59C97Lb@G
zdy&~>MlOA6a0pm2Ffdf{2UixCq~`i27U+R((Vy(i_1*{M7r&K^ZkilLXraLZvKkZv
zMIf&hnS;0>gU|!V7$gBAv?jN4>p6l9ECO+pK`{)&(1gbD8RYiq45<uJj42FJOeriW
zj4dot%qgrXOf8I2ES1cfY?J?TuVUn%yn@G68Dz{Y=G?>rO{O9<kTsqR3=G8}vp``8
z5-^{{E6!*=S%TMwQF(JH?`|#@Q3eKv$@~(^lg%Zr=&FO%Xn+V!5TON%6@?-%P%!bQ
zr<TO$=BJeAq{e6FrR5iiPPUMA%m91X2Bg>yq>8;PwWv5VKd%TJCE$o)ODrfz%}Xh=
z1}Or0r^pt>Vh0gUAU(_=Sx`vb;sV)GR01;o7EefKZfbsMiEB|&eo+z6<cE^}W}uX*
zDOBVS(#4JJ7H5!Qpx7*O1hGK2++r&#iO)?eC~}&dCgsfrN-jlalebHmuz{mEXYxlW
zZN|XOveGOp0(u}#`XIspL>Nvsl#j3X1~F4W1jubgppvPG8^jd^5uh+BiUYC09*G69
zz&-?pXAw9Y!9f@Uk^m<NaIk_x^cHJTera9`IMR!JLGnHz4@u-E7R0Ay7ANPIr507j
zPv%$PWdlcI_GBdmWpl8fI7?D<3*vJ!^RkP;ZZ-gEWXvpb0GW~rB62_k*t5AHR^H?q
z1qnu#$x{_n8J#xoRyfI256W|(bWtP(Qs4@TVpjCD3{JciAbGU1!5t(9B0ynM%*(*Q
z(8BPUiIr9L3ttf<t5Fd+HG|~+G^KBGrzDmnCg&s;7pE2%fwJ-~wvx)pk-DLiH|q-5
zgTs;s<N?9F)RLmoyu8$+_{5U@+|1<SB0i8kpyICxT*iTe9N}niq5~xcNLB+S`y!B~
zXj$zShYci=*cCM}FfcHJGD8~!1H%VqMn*>dy9|o=8Px7G7~N%1zRO@SIb1J;zlxF3
L=o15o1p5R4we(Ke

diff --git a/new_shit/python/osap/discovery/__pycache__/netrunner_atomics.cpython-312.pyc b/new_shit/python/osap/discovery/__pycache__/netrunner_atomics.cpython-312.pyc
index 34b271659caa5f2882355794d712590f0b51359e..f1cd9586d00161a3f627c4c706ae274c90d31e1d 100644
GIT binary patch
delta 20
bcmZ1-yE>NpG%qg~0|Ns?Zp!hE+za#oLVpG=

delta 20
bcmZ1-yE>NpG%qg~0|NttOV|F5+za#oLL3Gn

diff --git a/new_shit/python/osap/discovery/netrunner.py b/new_shit/python/osap/discovery/netrunner.py
index 00f4f12..9c23b01 100644
--- a/new_shit/python/osap/discovery/netrunner.py
+++ b/new_shit/python/osap/discovery/netrunner.py
@@ -1,8 +1,9 @@
+import asyncio 
 from dataclasses import dataclass
 from typing import List, TYPE_CHECKING
 from osap.packets.routes import Route, route_build
 from ..utils.keys import PacketKeys
-from ..utils.time_utils import get_millisecond_timestamp
+from ..utils.time_utils import get_millisecond_timestamp, get_microsecond_timestamp
 from ..utils.random_gen import random_four_byte_write_new, random_four_byte_check_match
 from .netrunner_atomics import LinkGatewayInfoResponse, NetRunnerAtomics, PortInfoResponse, RTInfoResponse
 
@@ -178,3 +179,52 @@ class NetRunner:
 
         finally:
             self.map_discovery_is_running = False
+    
+        # end update_map
+
+    # properly, this would add a metric for clock stability as well... 
+    async def await_time_settle(self, print_updates = False, await_spread_epsilon_us = 1000):
+        skew_alpha = 0.95   # fw default is 0.95 
+        p_gain = 0.000001   # fw default is 0.000001, minimum gain is 0.0000003
+
+        if self.map_completion_time == 0 or len(self.map.runtimes) == 1:
+            return 
+
+        # initialize settings for each device... 
+        for d, device in enumerate(self.map.runtimes):
+            if device.protocol_build == 'Python':
+                continue 
+            
+            # basically get everyone on-time and with 1.0 skew to start even keeled, 
+            now = get_microsecond_timestamp()
+            await self.atomics.set_time_config(device.route, now, 1.0, skew_alpha, p_gain, True)
+
+        ok_cycle_count = 0 
+        ok_cycle_pass = 3 
+
+        # now run a loop where we poll each, get a grouping... and post it ? 
+        while True:
+            clock_errors = []
+            rtts = []
+            for d, device in enumerate(self.map.runtimes):
+                if device.protocol_build == 'Python':
+                    continue 
+
+                our_time = get_microsecond_timestamp()
+                time_stats = await self.atomics.get_time_config(device.route)
+                device_time = time_stats.system_time - time_stats.rtt / 2 
+                clock_errors.append(our_time - device_time)
+                rtts.append(time_stats.rtt)
+
+            print(F"ERRS: {[int(err) for err in clock_errors]}, \tRTT: {[int(rtt) for rtt in rtts]}")
+
+            if all(abs(err) < await_spread_epsilon_us for err in clock_errors):
+                ok_cycle_count += 1 
+            else:
+                ok_cycle_count = 0 
+
+            if ok_cycle_count >= ok_cycle_pass:
+                print("CLOCKS OK...")
+                return 
+            else:
+                await asyncio.sleep(0.25) 
\ No newline at end of file
diff --git a/new_shit/python/sketchy.py b/new_shit/python/sketchy.py
index 0166911..ed810e4 100644
--- a/new_shit/python/sketchy.py
+++ b/new_shit/python/sketchy.py
@@ -47,9 +47,14 @@ async def main():
         # ... clip 21500, seems like where the fuckups start... 
         # parser = GCodeParser("test_files/3DBenchy_Top.gcode")
 
+        print("---------------------------------- collect system ...")
+
         system_map = await osap.netrunner.update_map()
         system_map.print()
 
+        print("---------------------------------- wait for clocks to settle ...")
+        await osap.netrunner.await_time_settle(print_updates=True)
+
         print("---------------------------------- machine setup ...")
         machine = SketchyMachineMotion(osap, system_interpolation_interval, system_twin_to_real_ms, extents = machine_extents)
         await machine.begin()
diff --git a/new_shit/python/svg/__pycache__/svg_tools.cpython-312.pyc b/new_shit/python/svg/__pycache__/svg_tools.cpython-312.pyc
index e3602598f511f236206844cba7ef9fe04ed31b45..d046940946d8c5a0a97924032433152b4569930f 100644
GIT binary patch
delta 39
vcmaE*{YsnnG%qg~0|NttY4Y(j@r}F@!i;R2(}cB{SmhWcJ~&ODDjEs^*mw$y

delta 39
vcmaE*{YsnnG%qg~0|Ns?bmH+e%Z<Dd!i-#-(}cB{SQQv0KDbSuDjEs^-*gJw

-- 
GitLab