Files
ebusd/contrib/scripts/makegrabcsv.sh
T
Sven Giermann 01922f86db fixed script to work with standard awk
For some reason, I don't have GNU awk installed - so I removed the usage of array length and strtonum().
Further I'd prefer ebusctl which seems to come with every ebusd installation to avoid the dependency for 'nc'.
2015-11-18 08:58:59 +01:00

67 lines
2.4 KiB
Bash
Executable File

#!/bin/sh
ebusctl grab result|awk '
BEGIN{
len[""]=0
delete len[""]
found=0
}
/grab disabled/ {
print "enable grab first!"
exit
}
/.+/ {
len[substr($1,3)]=length($3)/2;
found=1
}
END {
if (found>0)
print "# type (r[1-9];w;u),circuit,name,[comment],[QQ],ZZ,PBSB,[ID],field1,part (m/s),datatypes/templates"
for (i in len) {
zz=substr(i,1,2)
pbsb=substr(i,3,4)
id=substr(i,9)
idlen=length(id)/2
if (pbsb=="b509" && substr(id,1,2)=="0d") {
# register read
reg=index("123456789abcdef",tolower(substr(id,4,1)))
reg+=index("123456789abcdef",tolower(substr(id,3,1)))*16
reg+=index("123456789abcdef",tolower(substr(id,6,1)))*256
reg+=index("123456789abcdef",tolower(substr(id,5,1)))*4096
print "r,unknown" zz ",reg" reg ",,," zz "," pbsb "," substr(id,3,4) ",data,,HEX:" (len[i]-1)
} else if (pbsb=="b509" && substr(id,1,2)=="0e") {
# register write
reg=index("123456789abcdef",tolower(substr(id,4,1)))
reg+=index("123456789abcdef",tolower(substr(id,3,1)))*16
reg+=index("123456789abcdef",tolower(substr(id,6,1)))*256
reg+=index("123456789abcdef",tolower(substr(id,5,1)))*4096
print "w,unknown" zz ",reg" reg ",,," zz "," pbsb "," substr(id,3,4) ",data,,HEX:" (idlen-3)
} else if (pbsb=="b509" && substr(id,1,2)=="29") {
# register update
reg=index("123456789abcdef",tolower(substr(id,4,1)))
reg+=index("123456789abcdef",tolower(substr(id,3,1)))*16
reg+=index("123456789abcdef",tolower(substr(id,6,1)))*256
reg+=index("123456789abcdef",tolower(substr(id,5,1)))*4096
print "u,unknown" zz ",reg" reg ",,," zz "," pbsb "," substr(id,3,4) ",,,IGN:2,,,,data,,HEX:" (len[i]-3)
} else if (len[i]<=1 || idlen>3) {
# seems to be a write
if (idlen>3) idlen=3
else if (len[i]<=1) idlen--;
printf "w,unknown" zz ","
if (substr(pbsb,1,2)=="b5") printf "block" substr(pbsb,3,2)
else printf pbsb
printf substr(id,1,idlen*2) ",,," zz "," pbsb "," substr(id,1,idlen*2)
if (length(id)/2>idlen)
printf ",data,,HEX:" (length(id)/2-idlen)
if (len[i]>1)
printf ",result,s,HEX:" (len[i]-1)
print ""
} else {
printf "r,unknown" zz ","
if (substr(pbsb,1,2)=="b5") printf "block" substr(pbsb,3,2)
else printf pbsb
print id ",,," zz "," pbsb "," id ",data,,HEX:" (len[i]-1)
}
}
}
'|uniq