HomeSpan/tools/makeServiceList

93 lines
2.2 KiB
Awk
Executable File

#!/usr/bin/awk -f
BEGIN {
servicesFile = "../src/Span.h"
charsFile = "../src/Characteristics.h"
ws="[ \t,();]+" # regexp of separators
ltws="^" ws "|" ws "$" # regexp of leading and training separators
nServs=0
while(getline < servicesFile ){
gsub(ltws,"") # strip out leading or trailing separators
n=split($0,x,ws) # split line by separators
if(x[1]=="CREATE_SERV"){
currentService=x[2]
services[nServs++]=currentService
uuid[currentService]=x[3]
nChars[currentService]=0
desc[currentService]="Placeholder for description of Service"
}
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(ltws,"") # strip out leading or trailing separators
n=split($0,x,ws) # split line by separators
if(x[1]=="HAPCHAR"){
char=x[2]
uuid[char]=x[3]
perms[char]=x[4]
format[char]=tolower(x[5])
static[char]=x[6]
}
}
close(charsFile)
for(i=0;i<nServs;i++){
s=services[i]
printf("## %s (%s)\n",s,uuid[s])
printf("<details><summary>%s</summary><br><table>\n",desc[s])
printf("<tr><th>Characteristic</th><th>UUID</th><th>Format</th><th>Perms</th><th>Min</th><th>Max</th><th>Constants</th></tr>\n")
for(j=0;j<nChars[s];j++){
char=servChars[s,j]
printf("<tr>")
printf("<td>%s%s</td>",servReq[s,j]?"<b>":"",char)
printf("<td align=\"center\">%s</td>",uuid[char])
printf("<td align=\"center\">%s</td>",format[char])
printf("<td align=\"center\">%s</td>",perms[char])
if(format[char]!="string")
printf("<td align=\"center\">%s</td><td align=\"center\">%s</td>",min[char],max[char])
else
printf("<td align=\"center\">-</td><td align=\"center\">-</td>")
printf("<td><ul>")
for(k=0;k<nVals[char];k++)
printf("<li>%s (%d)</li>",vals[char,k],k)
printf("</ul></td></tr>\n")
}
printf("</table>></details>\n\n")
}
}