diff --git a/pypcc/yamlreader.py b/pypcc/yamlreader.py index 8124e057f7676b0145dae5a07296fe70072fd6d6..0b731d30015947c8e98b55c95fd8bdc123ebd182 100644 --- a/pypcc/yamlreader.py +++ b/pypcc/yamlreader.py @@ -98,7 +98,7 @@ class yamlreader(): print("M2:",mask) dtype=v.get('dtype','integer'); width=(v.get('width',8)-1)//8+1 - if (dtype=="float"): + if (dtype=="double"): scale=v.get('scale',1.) data=[int(d/scale) for d in data] if (dtype=="boolean"): @@ -171,7 +171,7 @@ class yamlreader(): else: print("OPCset unsupported type"); return; - if dtype=="float": + if dtype=="double": scale=float(v.get('scale',1.)) data2=[(d*scale) for d in data2] data3=v['OPCR'].get_value(); diff --git a/src/apsctl/RCU.yaml b/src/apsctl/RCU.yaml index 86877bbf0fb2aea6ff6114594bc1c1d1349d6b66..683776ba4003ebf33a064791924ce6f8dec72dcd 100644 --- a/src/apsctl/RCU.yaml +++ b/src/apsctl/RCU.yaml @@ -210,6 +210,24 @@ variables: dim: 96 mask: Ant_mask + - name: RCU_GPIO1 + driver: I2C_RFCHAIN + devreg: [IO1.GPIO1,IO2.GPIO1,IO3.GPIO1] + width: 8 + rw: ro + dtype: uint8 + dim: 96 + mask: Ant_mask + + - name: RCU_GPIO2 + driver: I2C_RFCHAIN + devreg: [IO1.GPIO2,IO2.GPIO2,IO3.GPIO2] + width: 8 + rw: ro + dtype: uint8 + dim: 96 + mask: Ant_mask + - name: RCU_band description: Band select switch 1=10MHz,2=30MHz driver: I2C_RFCHAIN diff --git a/src/drivers/drvbase.cpp b/src/drivers/drvbase.cpp index 365a1ed704fe02336755ab6fd147557963f14343..d4edba444c2f1a39ebf2df12b6467f52a419273e 100644 --- a/src/drivers/drvbase.cpp +++ b/src/drivers/drvbase.cpp @@ -3,7 +3,7 @@ drvbase::drvbase(const t_driver config1) : config (config1){}; bool drvbase::I2Csend(int addr,int reg,int len,t_buffer* data,int direction){ - std::cout << "I2Csend "<<config.name <<" not implemented!\n"; +// std::cout << "I2Csend "<<config.name <<" not implemented!\n"; return false; }; diff --git a/src/drivers/i2c_array.cpp b/src/drivers/i2c_array.cpp index afa4b25b7b871ff8ddbb5b84553f67d9cc525442..47adb9567dda424dd4c7774b6b30e817c8923e97 100644 --- a/src/drivers/i2c_array.cpp +++ b/src/drivers/i2c_array.cpp @@ -94,6 +94,9 @@ void c_i2c_array::geti2c(const t_devreg devreg,int width,int bitoffset,t_buffer* // buffer[0]=storedRegs[devreg.store-1][rcui]; storedRegs[devreg.store-1][selectedRCU]=buffer[0]; buffer[0]=UnMask(buffer[0],width,bitoffset); + } else + if ((bitoffset==0) && (len2*8-width>0)) {//Just mask on last byte + buffer[0]=UnMask(buffer[0],width-(len2-1)*8,0); } } diff --git a/src/drivers/i2c_array2.cpp b/src/drivers/i2c_array2.cpp index 5977d56291427e436e81b88e879f34e90625310c..d879e45f44ddba689e618a00d5fbb751dae051d2 100644 --- a/src/drivers/i2c_array2.cpp +++ b/src/drivers/i2c_array2.cpp @@ -33,7 +33,7 @@ int c_i2c_array2::getvar(int x,t_buffer* buffer,int lenmask,bool* mask){ N=parent->getvar2(variables[x],y,stride*N2,&(buffer[y*stride]),1,mask); else for (int y=0;y<N2;y++) - N=parent->getvar2(variables[x],y,stride*N2,&(buffer[y*stride]),stepmask,&(mask[y])); + N=parent->getvar2(variables[x],y,stride*N2,&(buffer[y*stride]),lenmask,&(mask[y])); return stride*N*N2; }; diff --git a/src/drivers/spibitbang1.cpp b/src/drivers/spibitbang1.cpp index 2edb3c2cf695dbdaff3e1ceabbc8fefc93e06ae4..2cf5ea3a5c76e7c9da38d0fd40074ff5ad016954 100644 --- a/src/drivers/spibitbang1.cpp +++ b/src/drivers/spibitbang1.cpp @@ -8,9 +8,10 @@ c_spibitbang1::c_spibitbang1(const t_driver config1) : drvbase (config1){ SDIO=config1.devreg[1]; SDIOdir=config1.devreg[2]; CS=config1.devreg[3]; + CLKpin=config1.parameters[0]; SDIOpin=config1.parameters[1]; - CSpin=config1.parameters[2]; + CSpin=config1.parameters[3]; }; bool c_spibitbang1::I2Csend(int addr,int reg,int len,t_buffer* data,int direction){ @@ -44,7 +45,7 @@ bool c_spibitbang1::I2Csend(int addr,int reg,int len,t_buffer* data,int directio data2=0; for (int x=0;x<8;x++){ parent->geti2c(SDIO,1,SDIOpin,bit); - data2<<=2; + data2<<=1; data2+=bit[0]; bit[0]=1;parent->seti2c(CLK,1,CLKpin,bit); bit[0]=0;parent->seti2c(CLK,1,CLKpin,bit); @@ -53,7 +54,8 @@ bool c_spibitbang1::I2Csend(int addr,int reg,int len,t_buffer* data,int directio bit[0]=1;parent->seti2c(CS,1,CSpin,bit);//disable bit[0]=1;parent->seti2c(SDIO,1,SDIOpin,bit); bit[0]=0;parent->seti2c(SDIOdir,1,SDIOpin,bit); - + std::cout << "spibitbang reg="<<reg<<" data="<<data2<<"\n"; + data[0]=data2; } return true; }