This commit is contained in:
Gregg 2024-01-20 16:43:17 -06:00
parent 97afdcd555
commit 348232a663
3 changed files with 46 additions and 68 deletions

View File

@ -40,7 +40,7 @@
namespace Service { namespace Service {
CREATE_SERV(AccessoryInformation,3E) CREATE_SERV(AccessoryInformation,3E) // Required Identification Information. For each Accessory in a HomeSpan device this <i>must be included as the first Service.</i>
REQ(Identify); REQ(Identify);
OPT(FirmwareRevision); OPT(FirmwareRevision);
OPT(Manufacturer); OPT(Manufacturer);
@ -51,11 +51,6 @@ namespace Service {
OPT(AccessoryFlags); OPT(AccessoryFlags);
END_SERV END_SERV
//! Here is some important text you need to read.
//! Spacing is not critical since this will be
//! formated in HTML where spaces are ignored.
//! You can use *standard* markdown elements as well.
CREATE_SERV(AirPurifier,BB) CREATE_SERV(AirPurifier,BB)
REQ(Active); REQ(Active);
REQ(CurrentAirPurifierState); REQ(CurrentAirPurifierState);

View File

@ -2,31 +2,23 @@
BEGIN { BEGIN {
servicesFile = "../src/Span.h"
charsFile = "../src/Characteristics.h"
ws="[ \t,();]+" # regexp of separators ws="[ \t,();]+" # regexp of separators
ltws="^" ws "|" ws "$" # regexp of leading and trailing separators ltws="^" ws "|" ws "$" # regexp of leading and trailing separators
nServs=0 nServs=0 # number of Services found
}
while(getline < servicesFile ){
split($0,line,"//")
{
split($0,line,"//") # separate line into program and (optional) comment
gsub(ltws,"",line[1]) # strip out leading or trailing separators gsub(ltws,"",line[1]) # strip out leading or trailing separators
if(index($0,"//!")==1){ n=split(line[1],x,ws) # split program portion according to separators
desc[currentService]=desc[currentService] " " substr($0,4)
continue
}
n=split(line[1],x,ws)
if(x[1]=="CREATE_SERV"){ if(x[1]=="CREATE_SERV"){
currentService=x[2] currentService=x[2]
services[nServs++]=currentService services[nServs++]=currentService
uuid[currentService]=x[3] uuid[currentService]=x[3]
desc[currentService]=line[2] # save optional comment as description of Service
nChars[currentService]=0 nChars[currentService]=0
} }
@ -41,38 +33,29 @@ BEGIN {
default[char]=x[4] default[char]=x[4]
min[char]=x[5] min[char]=x[5]
max[char]=x[6] max[char]=x[6]
nVals[char]=n-6 # number of pre-defined constants nVals[char]=n-6 # parse any pre-defined constants
for(i=0;i<nVals[char];i++) for(i=0;i<nVals[char];i++)
vals[char,i]=x[i+7] vals[char,i]=x[i+7]
notes[char]=line[2] notes[char]=line[2] # save optional comment as notes for Characteristic
} }
} else if(x[1]=="HAPCHAR"){
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] char=x[2]
uuid[char]=x[3] uuid[char]=x[3]
perms[char]=x[4] perms[char]=x[4]
format[char]=tolower(x[5]) format[char]=tolower(x[5])
static[char]=x[6] static[char]=x[6]
} }
}
} END {
close(charsFile)
for(i=0;i<nServs;i++){ for(i=0;i<nServs;i++){
s=services[i] s=services[i]
printf("## %s (%s)\n",s,uuid[s]) printf("## %s (%s)\n",s,uuid[s])
printf("<details><summary>%s</summary><br><table>\n",desc[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><th>Notes</th></tr>\n") printf("<tr><th>Characteristic</th><th>UUID</th><th>Format</th><th>Perms</th><th>Min</th><th>Max</th><th>Constants</th><th>Notes</th></tr>\n")
for(j=0;j<nChars[s];j++){ for(j=0;j<nChars[s];j++){
char=servChars[s,j] char=servChars[s,j]
printf("<tr>") printf("<tr>")
@ -93,9 +76,9 @@ BEGIN {
printf("</ul></td>") printf("</ul></td>")
printf("<td>%s</td></tr>",notes[char]) printf("<td>%s</td></tr>",notes[char])
} }
printf("</table></details>\n\n") printf("</table></details>\n\n")
} }
} }

View File

@ -1,5 +1,5 @@
## AccessoryInformation (3E) ## AccessoryInformation (3E)
<details><summary> Here is some important text you need to read. Spacing is not critical since this will be formated in HTML where spaces are ignored. You can use *standard* markdown elements as well.</summary><br><table> <details><summary> Required Identification Information. For each Accessory in a HomeSpan device this <i>must be included as the first Service.</i></summary><br><table>
<tr><th>Characteristic</th><th>UUID</th><th>Format</th><th>Perms</th><th>Min</th><th>Max</th><th>Constants</th><th>Notes</th></tr> <tr><th>Characteristic</th><th>UUID</th><th>Format</th><th>Perms</th><th>Min</th><th>Max</th><th>Constants</th><th>Notes</th></tr>
<tr><td><b>Identify</td><td align="center">14</td><td align="center">bool</td><td align="center">PW</td><td align="center">0</td><td align="center">1</td><td><ul></ul></td><td></td></tr><tr><td>FirmwareRevision</td><td align="center">52</td><td align="center">string</td><td align="center">PR+EV</td><td align="center">-</td><td align="center">-</td><td><ul></ul></td><td></td></tr><tr><td>Manufacturer</td><td align="center">20</td><td align="center">string</td><td align="center">PR</td><td align="center">-</td><td align="center">-</td><td><ul></ul></td><td></td></tr><tr><td>Model</td><td align="center">21</td><td align="center">string</td><td align="center">PR</td><td align="center">-</td><td align="center">-</td><td><ul></ul></td><td></td></tr><tr><td>Name</td><td align="center">23</td><td align="center">string</td><td align="center">PR</td><td align="center">-</td><td align="center">-</td><td><ul></ul></td><td></td></tr><tr><td>SerialNumber</td><td align="center">30</td><td align="center">string</td><td align="center">PR</td><td align="center">-</td><td align="center">-</td><td><ul></ul></td><td></td></tr><tr><td>HardwareRevision</td><td align="center">53</td><td align="center">string</td><td align="center">PR</td><td align="center">-</td><td align="center">-</td><td><ul></ul></td><td></td></tr><tr><td>AccessoryFlags</td><td align="center">A6</td><td align="center">uint32</td><td align="center">PR+EV</td><td align="center">1</td><td align="center">1</td><td><ul></ul></td><td> This is not really used anywhere 1/3</td></tr></table></details> <tr><td><b>Identify</td><td align="center">14</td><td align="center">bool</td><td align="center">PW</td><td align="center">0</td><td align="center">1</td><td><ul></ul></td><td></td></tr><tr><td>FirmwareRevision</td><td align="center">52</td><td align="center">string</td><td align="center">PR+EV</td><td align="center">-</td><td align="center">-</td><td><ul></ul></td><td></td></tr><tr><td>Manufacturer</td><td align="center">20</td><td align="center">string</td><td align="center">PR</td><td align="center">-</td><td align="center">-</td><td><ul></ul></td><td></td></tr><tr><td>Model</td><td align="center">21</td><td align="center">string</td><td align="center">PR</td><td align="center">-</td><td align="center">-</td><td><ul></ul></td><td></td></tr><tr><td>Name</td><td align="center">23</td><td align="center">string</td><td align="center">PR</td><td align="center">-</td><td align="center">-</td><td><ul></ul></td><td></td></tr><tr><td>SerialNumber</td><td align="center">30</td><td align="center">string</td><td align="center">PR</td><td align="center">-</td><td align="center">-</td><td><ul></ul></td><td></td></tr><tr><td>HardwareRevision</td><td align="center">53</td><td align="center">string</td><td align="center">PR</td><td align="center">-</td><td align="center">-</td><td><ul></ul></td><td></td></tr><tr><td>AccessoryFlags</td><td align="center">A6</td><td align="center">uint32</td><td align="center">PR+EV</td><td align="center">1</td><td align="center">1</td><td><ul></ul></td><td> This is not really used anywhere 1/3</td></tr></table></details>