HomeSpan/tools/makeServiceList

97 lines
2.1 KiB
Awk
Executable File

#!/usr/bin/awk -f
BEGIN {
servicesFile = "../src/Span.h"
charsFile = "../src/Characteristics.h"
nServs=0
while(getline < servicesFile ){
gsub("^[ ]+","") # strip out any leading spaces
n=split($0,x,"[,();]+") # split line into separate words
print n,$0
if(x[1]=="CREATE_SERV"){
currentService=x[2]
services[nServs++]=currentService
uuid[currentService]=x[3]
nChars[currentService]=0
}
else if(x[1]=="REQ" || x[1]=="OPT"){
servChars[currentService,nChars[currentService]]=x[2]
servReq[currentService,nChars[currentService]]=(x[1]=="REQ")
nChars[currentService]++
}
else if(x[1]=="CREATE_CHAR"){
char=x[3]
default[char]=x[4]
min[char]=x[5]
max[char]=x[6]
nVals[char]=n-6 # number of pre-defined constants
for(i=0;i<nVals[char];i++)
vals[char,i]=x[i+7]
}
}
close(servicesFile)
while(getline < charsFile){
gsub("^[ ]+","") # strip out any leading spaces
n=split($0,x,"[,(); ]+") # split line into separate words
if(x[1]=="HAPCHAR"){
char=x[2]
uuid[char]=x[3]
perms[char]=x[4]
format[char]=x[5]
static[char]=x[6]
}
}
close(charsFile)
for(i=0;i<nServs;i++){
s=services[i]
printf("<details><summary>%s (%s)</summary><br><table>\n",s,uuid[s])
printf("<tr><td><i>Characteristic (UUID)</td><td><i>Format</td><td><i>Perms</td><td><i>Values</td></tr>\n")
for(j=0;j<nChars[s];j++){
char=servChars[s,j]
printf("<tr>")
printf("<td>%s%s (%s)%s</td>",servReq[s,j]?"<b>":"",char,uuid[char],servReq[s,j]?"</b>":"")
printf("<td>%s</td>",format[char])
printf("<td>%s</td>",perms[char])
printf("*** %s ***",nVals[char])
if(format[char]=="STRING"){
printf("<td>(max 64 characters)</td>")
}
else if(format[char]=="BOOL"){
printf("<td>false (0)<br>true (1)</td>")
}
else if(nVals[char]==0){
printf("HELLO<td>%g-%g</td>",min[char],max[char])
}
else {
printf("<td>")
for(k=0;k<nVals[char];k++){
printf("%s",vals[char,k])
if(k+1!=nVals[char])
printf("<br>")
}
}
printf("</tr>\n")
}
print "</table><br></details>"
}
}