|
@@ -27,108 +27,152 @@ import time
|
|
|
#fname = "/ram-dir/user/data.bin"
|
|
|
#fname = "/media/user/FAT2G-BLACK/data.bin"
|
|
|
fname = "/tmp/data.bin"
|
|
|
+fname = "/tmp/vmaster.bin"
|
|
|
+data = [-1]*512
|
|
|
+debug=1
|
|
|
|
|
|
print(fname)
|
|
|
def init_bin(f):
|
|
|
f.seek(0)
|
|
|
- for i in range(512):
|
|
|
+ for i in range(len(data)):
|
|
|
f.write(b'\x00')
|
|
|
f.flash()
|
|
|
|
|
|
-data = [0]*512
|
|
|
|
|
|
#bytearray
|
|
|
import struct
|
|
|
import os
|
|
|
|
|
|
-def patch(i,v):
|
|
|
+def _read(i):
|
|
|
+ f=open(fname,"r+b", buffering=0)
|
|
|
+ r=f.seek(i)
|
|
|
+ v = f.read(1)
|
|
|
+ if v == b'':
|
|
|
+ return None
|
|
|
+ v=struct.unpack('B',v)
|
|
|
+ v=v[0]
|
|
|
+ return v
|
|
|
+
|
|
|
+def _init():
|
|
|
+ if not os.path.isfile(fname):
|
|
|
+ f=open(fname,"w+b", buffering=0)
|
|
|
+ init_bin(f)
|
|
|
+ f.close()
|
|
|
+ print("_init",fname)
|
|
|
+
|
|
|
+def _extend(i,xdata=None):
|
|
|
+ if type(xdata) is type(None):
|
|
|
+ ydata = data
|
|
|
+ else:
|
|
|
+ ydata = xdata
|
|
|
+
|
|
|
+ while i >= len(ydata):
|
|
|
+ ydata.append(-1)
|
|
|
+ if debug:print("binfs extend data",i,len(ydata))
|
|
|
+
|
|
|
+def _write(i,v):
|
|
|
+ f=open(fname,"r+b", buffering=0)
|
|
|
+ f.seek(i)
|
|
|
+ if v < 0:
|
|
|
+ v=0
|
|
|
+ if v > 255:
|
|
|
+ v=255
|
|
|
+ v=struct.pack('B',v)
|
|
|
+ f.write(v)
|
|
|
+ f.flush()
|
|
|
+
|
|
|
+data_buffer = []
|
|
|
+def buffer(i,v=None):
|
|
|
try:
|
|
|
- #f=open(fname,"a+b", buffering=0)
|
|
|
- f=open(fname,"r+b", buffering=0)
|
|
|
- r=f.seek(0) #,whence=os.SEEK_SET)
|
|
|
- #f.truncate()
|
|
|
- print(r)
|
|
|
- r=f.seek(i) #,whence=os.SEEK_SET)
|
|
|
- #f.truncate()
|
|
|
- print(r)
|
|
|
- if v > 255:
|
|
|
- v=255
|
|
|
- v=struct.pack('B',v)
|
|
|
- print("write",round(time.time(),3),":",i,v)
|
|
|
- f.write(v)
|
|
|
- f.flush()
|
|
|
+ i = int(i)
|
|
|
+ _extend(i,data_buffer)
|
|
|
+ data_buffer[i] = v
|
|
|
except Exception as e:
|
|
|
- print("server-err",e)
|
|
|
-
|
|
|
+ print(e)
|
|
|
+
|
|
|
+def update_loop():
|
|
|
+ while 1:
|
|
|
+ try:
|
|
|
+ for i,v in enumerate(data_buffer):
|
|
|
+ #print("-",i,v)
|
|
|
+ patch(i,v)
|
|
|
+ time.sleep(0.05)
|
|
|
+ except Exception as e:
|
|
|
+ print(e)
|
|
|
+import _thread as thread
|
|
|
+def loop():
|
|
|
+ thread.start_new_thread(update_loop,())
|
|
|
|
|
|
-def server():
|
|
|
+def patch(i,v=None):
|
|
|
try:
|
|
|
- f=open(fname,"wb", buffering=0)
|
|
|
- #f.seek(0)
|
|
|
- init_bin(f)
|
|
|
+ i = int(i)
|
|
|
+ _init()
|
|
|
+
|
|
|
+ if type(v) is type(None):
|
|
|
+ v = _read(i)
|
|
|
+ elif type(v) is int:
|
|
|
+ if v < 0:
|
|
|
+ v=0
|
|
|
+ if v > 255:
|
|
|
+ v=255
|
|
|
+ v2 = _read(i)
|
|
|
+ if v != v2:
|
|
|
+ #print("patch.write",round(time.time(),3),":",[i,v,v2],fname)
|
|
|
+ _write(i,v)
|
|
|
+ #else:
|
|
|
+ # #if "patch" in sys.argv:
|
|
|
+ # # print("x patch.write",round(time.time(),3),":",[i,v,v2],fname)
|
|
|
+
|
|
|
+ return v
|
|
|
|
|
|
except Exception as e:
|
|
|
- print("server-err",e)
|
|
|
- time.sleep(1)
|
|
|
- print(dir(f))
|
|
|
- print(data)
|
|
|
+ print("patch-err-binfs",e)
|
|
|
+ raise e
|
|
|
+
|
|
|
+import random
|
|
|
+def server():
|
|
|
+ x = 1
|
|
|
while 1:
|
|
|
try:
|
|
|
- f.seek(0)
|
|
|
for i in range(200,0,-1):
|
|
|
i+=20
|
|
|
if i >= len(data):
|
|
|
continue
|
|
|
-
|
|
|
- f.seek(i)
|
|
|
v=data[i]
|
|
|
- #print(data)
|
|
|
- v+=1+i
|
|
|
- if v > 255:
|
|
|
- v=1
|
|
|
- data[i]=v
|
|
|
+ v+=x+i
|
|
|
+ if x > 255:
|
|
|
+ x=0
|
|
|
|
|
|
- #v=bytes(v)
|
|
|
- v=struct.pack('B',v)
|
|
|
- print(round(time.time(),3),":",i,v)
|
|
|
- f.write(v)
|
|
|
- f.flush()
|
|
|
+ r=patch(i,v)
|
|
|
+ data[i]=v
|
|
|
time.sleep(0.02)
|
|
|
time.sleep(10)
|
|
|
except Exception as e:
|
|
|
- print("server-err",e)
|
|
|
+ print("server-err-binfs",e)
|
|
|
time.sleep(1)
|
|
|
+ x += 1
|
|
|
|
|
|
|
|
|
def client():
|
|
|
- try:
|
|
|
- f=open(fname,"rb", buffering=0)
|
|
|
-
|
|
|
- except Exception as e:
|
|
|
- print("client-err",e)
|
|
|
- time.sleep(1)
|
|
|
- v=''
|
|
|
- i=0
|
|
|
while 1:
|
|
|
try:
|
|
|
- start = time.time()
|
|
|
- f=open(fname,"rb", buffering=0)
|
|
|
i=0
|
|
|
- f.seek(0)
|
|
|
- v = f.read(1)
|
|
|
- while v:
|
|
|
- v2=b''
|
|
|
- if v:
|
|
|
- v2=struct.unpack('B',v)
|
|
|
+ v = patch(i)
|
|
|
+ while type(v) is int:
|
|
|
+ _extend(i)
|
|
|
+
|
|
|
+
|
|
|
if v != data[i]:
|
|
|
- print(round(time.time(),4),i,v,v2)
|
|
|
+ v2=struct.pack('B',v)
|
|
|
+ print(round(time.time(),3),[i,v,v2])
|
|
|
+
|
|
|
data[i] = v
|
|
|
- v = f.read(1)
|
|
|
i+=1
|
|
|
+ v = patch(i)
|
|
|
|
|
|
time.sleep(0.01)
|
|
|
except Exception as e:
|
|
|
- print("client-err",e)
|
|
|
+ print("client-err-binfs",e,i,len(data))
|
|
|
time.sleep(1)
|
|
|
|
|
|
import sys
|
|
@@ -143,4 +187,9 @@ if __name__ == "__main__":
|
|
|
client()
|
|
|
|
|
|
elif "patch" in sys.argv:
|
|
|
- patch(int(sys.argv[2]),int(sys.argv[3]))
|
|
|
+ v = None
|
|
|
+ try:
|
|
|
+ v = int(sys.argv[3])
|
|
|
+ except Exception as e:pass
|
|
|
+ r=patch(int(sys.argv[2]),v)
|
|
|
+ print(r)
|