diff --git a/compile.sh b/compile.sh index 256c591e106a03f05b35f8c588a3553650920dd3..be8c7d30285474a37d3e27ff6481708fab176154 100644 --- a/compile.sh +++ b/compile.sh @@ -1,3 +1,5 @@ +cd src/apsctl +python3 yaml2head.py rm pypcc/pypcc.capnp cd src/interface capnp compile -oc++ pypcc.capnp diff --git a/pypcc/pypcc3.py b/pypcc/pypcc3.py index 906e5e7be22a4af3eb2c4fdfb756301780e7b9cd..c94b92ac119bf13b3d1d1eca693e5f31763fccb0 100644 --- a/pypcc/pypcc3.py +++ b/pypcc/pypcc3.py @@ -75,8 +75,8 @@ def TimerThread(RCU_I2C,RCU_conf): logging.info("End Timer thread") -Timerthread1 = threading.Thread(target=TimerThread, args=(RCU_I2C,RCU_conf)) -Timerthread1.start() +#Timerthread1 = threading.Thread(target=TimerThread, args=(RCU_I2C,RCU_conf)) +#Timerthread1.start() # on SIGINT: stop thread(s) by adding None to instruction queue(s) def signal_handler(sig, frame): @@ -102,4 +102,4 @@ finally: opcuaserv.server.stop() # RCUthread1.join() # CLKthread1.join() - Timerthread1.join() +# Timerthread1.join() diff --git a/pypcc/yamlreader.py b/pypcc/yamlreader.py index 815e5d53e935eb9bff9b20f8dc540eb903fef937..8124e057f7676b0145dae5a07296fe70072fd6d6 100644 --- a/pypcc/yamlreader.py +++ b/pypcc/yamlreader.py @@ -1,5 +1,6 @@ import yaml import struct +import time def Find(L,name,value): for x in L: if x[name]==value: @@ -51,6 +52,7 @@ class yamlreader(): v['OPCR']=var1 print("Var added:"+name+"_R") self.server.readvar(v['id']) + time.sleep(0.1); # Inst=Vars.Instr(Vars.DevType.VarUpdate,v,dim2,varvalue2) # Q1.put(Inst) @@ -152,19 +154,20 @@ class yamlreader(): if width<=1: data2=[d for d in data] elif width==2: - data2 = struct.unpack('>%sH' % len(data), data) + data2 = struct.unpack('>%sH' % (len(data)//2), data) elif width==3: data2 = [struct.unpack('>L' ,bytearray([0])+data[x*3:x*3+3])[0] for x in range(len(data)//3)] elif width==4: - data2 = struct.unpack('>%sL' % len(data), data) + data2 = struct.unpack('>%sL' % (len(data)//4), data) elif width==8: - data2 = struct.unpack('>%sQ' % len(data), data) + data2 = struct.unpack('>%sQ' % (len(data)//8), data) else: print("OPCset",v['name']," unsupported width!",width) return; elif dtype=="string": cnt=int(len(data)/width) - data2=[(bytearray(data[i*width:(i+1)*width]).decode("utf-8")) for i in range(cnt)] +# data2=[(bytearray(data[i*width:(i+1)*width]).decode("utf-8")) for i in range(cnt)] + data2=[bytearray(data)[i*width:(i+1)*width].decode("utf-8") for i in range(cnt)] else: print("OPCset unsupported type"); return; diff --git a/scripts/Band.py b/scripts/Band.py new file mode 100644 index 0000000000000000000000000000000000000000..3a70bfe6238d37c3b24fd3d548e304c4621f0dec --- /dev/null +++ b/scripts/Band.py @@ -0,0 +1,19 @@ +from test_common import * + +name="RCU_band" +RCU=1; +Att=[2,2,2] + +setAntmask([RCU]) + +att=get_value(name+"_R") +print("Att old:",att[3*RCU:3*RCU+3]) + +att[3*RCU:3*RCU+3]=Att +set_value(name+"_RW",att) + +time.sleep(0.5) +att=get_value(name+"_R") +print("Att new:",att[3*RCU:3*RCU+3]) + +disconnect() \ No newline at end of file diff --git a/src/drivers/i2c.cpp b/src/drivers/i2c.cpp index 23c2ff1461a46faa49d2bded1116226e2d9a68d4..76b2a3099fbb85a15a1657d77a1d0f74fe38c0b1 100644 --- a/src/drivers/i2c.cpp +++ b/src/drivers/i2c.cpp @@ -1,5 +1,7 @@ #include "i2c.h" #include <iostream> +//#include <cstdio> +//#include <cstdlib> #include <linux/i2c-dev.h> #include <linux/i2c.h> #include "smbus.h" @@ -7,7 +9,9 @@ #include <fcntl.h> #include <sys/ioctl.h> #include <linux/types.h> - +#include <unistd.h> +//#include <sys/stat.h> +using namespace std; c_i2c::c_i2c(const t_driver config1) : drvbase (config1){ std::cout << config.name <<": i2c server, connecting to device " << config.parameters[0] << "\n"; char filename[20]; @@ -23,18 +27,24 @@ bool c_i2c::I2Csend_reg(int addr,int reg,int len,t_buffer* data){ std::cout << config.name <<": i2c send to addr="<<addr<<" reg="<<reg<<" len="<<len<<" value="<<int(data[0]) <<"\n"; if (ioctl(file, I2C_SLAVE, addr)<0) return false; // return true; - return (i2c_smbus_write_block_data(file,reg,len,data)>=0); +// return (i2c_smbus_write_block_data(file,reg,len,data)>=0); + return (i2c_smbus_write_i2c_block_data(file,reg,len,data)>=0); } bool c_i2c::I2Cget_reg(int addr,int reg,int len,t_buffer* data){ - std::cout << config.name <<": i2c get from addr="<<addr<<" reg="<<reg<<" len="<<len<<" value="<<int(data[0]) <<"\n"; if (ioctl(file, I2C_SLAVE, addr)<0) return false; // return true; - return (i2c_smbus_read_i2c_block_data(file,reg,len,data)==len); + int result=i2c_smbus_read_i2c_block_data(file,reg,len,data); + std::cout << config.name <<": i2c get from addr="<<addr<<" reg="<<reg<<" len="<<len<<" value="<<int(data[0]) <<" result" << result<<"\n"; + return (result==len); } bool c_i2c::I2Csend(int addr,int len,t_buffer* data){ - std::cout << config.name <<": i2c send to addr="<<addr<<" len="<<len<<" value="<<int(data[0])<<"\n"; +// std::cout << config.name <<": i2c send to addr="<<addr<<" len="<<len<<" value="<<int(data[0])<<"\n"; + if (ioctl(file, I2C_SLAVE, addr)<0) return false; + int result=write(file,data,len); + std::cout << config.name <<": i2c send to addr="<<addr<<" len="<<len<<" value="<<int(data[0])<<" result" << result<<"\n"; + return (result>=0); } diff --git a/src/drivers/i2c_array.cpp b/src/drivers/i2c_array.cpp index 5a00d7ccdda7c6dc8fb82cd447fc76e95d7a53bf..9883c307a29c3a0d9ab136460636b678cd8d4b18 100644 --- a/src/drivers/i2c_array.cpp +++ b/src/drivers/i2c_array.cpp @@ -81,11 +81,11 @@ void c_i2c_array::seti2c(int rcui,const t_devreg devreg,int width,int bitoffset, void c_i2c_array::geti2c(int rcui,const t_devreg devreg,int width,int bitoffset,t_buffer* buffer){ int len2=((width+bitoffset-1)>>3)+1; //1..8 bits = 1 byte, 9..16 bits=2bytes etc. - parent->I2Cget_reg(devreg.address,devreg.register_W,len2,buffer); + parent->I2Cget_reg(devreg.address,devreg.register_R,len2,buffer); if (devreg.store>0) { - std::cout << "DEBUG: USED stored value="<< int(buffer[0]) <<"\n"; - buffer[0]=storedRegs[devreg.store-1][rcui]; -// storedRegs[devreg.store-1][rcui]=buffer[0]; +// std::cout << "DEBUG: USED stored value="<< int(buffer[0]) <<"\n"; +// buffer[0]=storedRegs[devreg.store-1][rcui]; + storedRegs[devreg.store-1][rcui]=buffer[0]; buffer[0]=UnMask(buffer[0],width,bitoffset); }