67 lines
2.4 KiB
Bash
Executable File
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,divider/values,unit,comment,field2,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
|