123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- cmd="""
- # ----------------
- # setup as root !!
- # ----------------
- /usr/bin/umount /ram-dir
- # create ramfs
- mkdir -p /ram-dir
- /usr/bin/mount ramfs -t ramfs /ram-dir
- ## or tmpfs
- ## /usr/bin/mount tmpfs -t tmpfs -o uid=bob -o gid=bob /ram-disk
- mkdir /ram-dir/user
- chown user:user /ram-dir/user
- dd if=/dev/zero of=/ram-dir/user/x bs=100M count=10 status=progress
- dd if=/dev/zero of=/ram-dir-x bs=100M count=10 status=progress
- mount | grep ram-dir
- # ----------------
- """
- #print(cmd)
- 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(len(data)):
- f.write(b'\x00')
- f.flash()
- #bytearray
- import struct
- import os
- 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:
- i = int(i)
- _extend(i,data_buffer)
- data_buffer[i] = v
- except Exception as 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 patch(i,v=None):
- try:
- 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("patch-err-binfs",e)
- raise e
- import random
- def server():
- x = 1
- while 1:
- try:
- for i in range(200,0,-1):
- i+=20
- if i >= len(data):
- continue
- v=data[i]
- v+=x+i
- if x > 255:
- x=0
- r=patch(i,v)
- data[i]=v
- time.sleep(0.02)
- time.sleep(10)
- except Exception as e:
- print("server-err-binfs",e)
- time.sleep(1)
- x += 1
- def client():
- while 1:
- try:
- i=0
- v = patch(i)
- while type(v) is int:
- _extend(i)
- if v != data[i]:
- v2=struct.pack('B',v)
- print(round(time.time(),3),[i,v,v2])
- data[i] = v
- i+=1
- v = patch(i)
-
- time.sleep(0.01)
- except Exception as e:
- print("client-err-binfs",e,i,len(data))
- time.sleep(1)
- import sys
- if __name__ == "__main__":
- print("ARGV", sys.argv)
- if "server" in sys.argv:
- server()
- elif "client" in sys.argv:
- client()
- elif "patch" in sys.argv:
- v = None
- try:
- v = int(sys.argv[3])
- except Exception as e:pass
- r=patch(int(sys.argv[2]),v)
- print(r)
|