Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions dm/bitmap.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ func renderBit(en *etree.Element, v matter.Bit, size int, parentEntity types.Ent
i.CreateAttr("to", fmt.Sprintf("0x%0*X", size, to))
}
i.CreateAttr("summary", scrubDescription(v.Summary()))
if id := v.InstructionDependency(); id != "" {
i.CreateAttr("instructionDependency", id)
}
err = renderConformanceElement(v.Conformance(), i, parentEntity)
return
}
52 changes: 52 additions & 0 deletions dm/discovery.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package dm

import (
"bytes"
"path/filepath"
"strings"

"github.com/beevik/etree"
"github.com/project-chip/alchemy/asciidoc"
"github.com/project-chip/alchemy/internal/pipeline"
"github.com/project-chip/alchemy/matter"
)

func renderDiscoveryBitmap(bm *matter.Bitmap, dmRoot string, globalFiles pipeline.StringSet) (err error) {
x := etree.NewDocument()
x.CreateProcInst("xml", `version="1.0"`)
x.CreateComment(getLicense())

root := x.CreateElement("discovery")
bmEl := root.CreateElement("bitmap")
bmEl.CreateAttr("name", bm.Name)
size := bm.Size() / 4
for _, v := range bm.Bits {
err = renderBit(bmEl, v, size, bm)
if err != nil {
return
}
}

x.Indent(2)
var b bytes.Buffer
_, err = x.WriteTo(&b)
if err != nil {
return
}

outPath := getDiscoveryBitmapPath(dmRoot, bm)
globalFiles.Store(outPath, pipeline.NewData(outPath, b.String()))
return
}

func getDiscoveryBitmapPath(dmRoot string, bm *matter.Bitmap) string {
name := bm.Name
if strings.HasSuffix(name, "Bitmap") {
name = name[:len(name)-len("Bitmap")]
}
return filepath.Join(dmRoot, "discovery", name+".xml")
}

func isDiscoveryDoc(doc *asciidoc.Document) bool {
return strings.HasSuffix(doc.Path.Relative, "secure_channel/Discovery.adoc")
}
Comment thread
raul-marquez-csa marked this conversation as resolved.
Outdated
11 changes: 9 additions & 2 deletions dm/global.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,17 @@ func (p *Renderer) GenerateGlobalObjects() (globalFiles pipeline.StringSet, err
var commands []*matter.Command
var events []*matter.Event

for e := range p.spec.GlobalObjects {
for e, doc := range p.spec.GlobalObjects {
switch e := e.(type) {
case *matter.Bitmap:
bitmaps = append(bitmaps, e)
if isDiscoveryDoc(doc) {
err = renderDiscoveryBitmap(e, p.dmRoot, globalFiles)
if err != nil {
return
}
} else {
bitmaps = append(bitmaps, e)
Comment thread
raul-marquez-csa marked this conversation as resolved.
Outdated
}
case *matter.Enum:
enums = append(enums, e)
case *matter.Struct:
Expand Down
38 changes: 25 additions & 13 deletions matter/bitmap.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ type Bit interface {
Name() string
SetName(name string)
Summary() string
InstructionDependency() string
Conformance() conformance.Set
SetConformance(conformance conformance.Set)
SetParent(parent types.Entity)
Expand All @@ -191,10 +192,11 @@ type Bit interface {

type BitmapBit struct {
entity
bit string
name string
summary string
conformance conformance.Set
bit string
name string
summary string
instructionDependency string
conformance conformance.Set
}

func NewBitmapBit(source asciidoc.Element, parent types.Entity, bit string, name string, summary string, conformance conformance.Set) *BitmapBit {
Expand Down Expand Up @@ -237,6 +239,14 @@ func (bmb *BitmapBit) Summary() string {
return bmb.summary
}

func (bmb *BitmapBit) InstructionDependency() string {
return bmb.instructionDependency
}

func (bmb *BitmapBit) SetInstructionDependency(v string) {
bmb.instructionDependency = v
}

func (bmb *BitmapBit) Conformance() conformance.Set {
return bmb.conformance
}
Expand All @@ -250,7 +260,7 @@ func (bmb *BitmapBit) Clone() Bit {
}

func (bmb *BitmapBit) CloneTo(parent types.Entity) Bit {
nb := &BitmapBit{entity: entity{source: bmb.source, parent: parent}, bit: bmb.bit, name: bmb.name, summary: bmb.summary}
nb := &BitmapBit{entity: entity{source: bmb.source, parent: parent}, bit: bmb.bit, name: bmb.name, summary: bmb.summary, instructionDependency: bmb.instructionDependency}
if len(bmb.conformance) > 0 {
nb.conformance = bmb.conformance.CloneSet()
}
Expand All @@ -269,15 +279,17 @@ func (bmb *BitmapBit) Inherit(parent Bit) error {

func (bmb *BitmapBit) MarshalJSON() ([]byte, error) {
return json.Marshal(&struct {
Bit string `json:"bit,omitempty"`
Name string `json:"name,omitempty"`
Summary string `json:"summary,omitempty"`
Conformance conformance.Set `json:"conformance,omitempty"`
Bit string `json:"bit,omitempty"`
Name string `json:"name,omitempty"`
Summary string `json:"summary,omitempty"`
InstructionDependency string `json:"instructionDependency,omitempty"`
Conformance conformance.Set `json:"conformance,omitempty"`
}{
Bit: bmb.bit,
Name: bmb.name,
Summary: bmb.summary,
Conformance: bmb.conformance,
Bit: bmb.bit,
Name: bmb.name,
Summary: bmb.summary,
InstructionDependency: bmb.instructionDependency,
Conformance: bmb.conformance,
})
}

Expand Down
7 changes: 6 additions & 1 deletion matter/spec/bitmap.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func (library *Library) toBitmap(reader asciidoc.Reader, d *asciidoc.Document, s
}
} else {
for row := range ti.ContentRows() {
var bit, name, summary string
var bit, name, summary, instructionDependency string
var conf conformance.Set
name, err = ti.ReadValue(reader, row, matter.TableColumnName)
if err != nil {
Expand All @@ -55,6 +55,10 @@ func (library *Library) toBitmap(reader asciidoc.Reader, d *asciidoc.Document, s
if err != nil {
return
}
instructionDependency, err = ti.ReadString(reader, row, matter.TableColumnInstructionDependency)
if err != nil {
return
}
conf = ti.ReadConformance(reader, row, matter.TableColumnConformance)
if conf == nil {
conf = conformance.Set{&conformance.Mandatory{}}
Expand All @@ -73,6 +77,7 @@ func (library *Library) toBitmap(reader asciidoc.Reader, d *asciidoc.Document, s
name = matter.Case(summary)
}
bv := matter.NewBitmapBit(section, bm, bit, CanonicalName(name), summary, conf)
bv.SetInstructionDependency(instructionDependency)
bm.AddBit(bv)
}
}
Expand Down
2 changes: 2 additions & 0 deletions matter/spec/table.go
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,8 @@ func getTableColumn(val string) matter.TableColumn {
return matter.TableColumnModeTagValue
case "status code", "status code value":
return matter.TableColumnStatusCode
case "instruction dependency":
return matter.TableColumnInstructionDependency
}
return matter.TableColumnUnknown
}
Expand Down
2 changes: 1 addition & 1 deletion matter/spec/table_info.go
Original file line number Diff line number Diff line change
Expand Up @@ -436,7 +436,7 @@ func readRowCellValueElements(reader asciidoc.Reader, row *asciidoc.TableRow, pa
continue
}
value.WriteString(qt)
case *asciidoc.SpecialCharacter:
case asciidoc.SpecialCharacter:
Comment thread
raul-marquez-csa marked this conversation as resolved.
value.WriteString(el.Character)
case *asciidoc.InlinePassthrough:
value.WriteString("+")
Expand Down
98 changes: 50 additions & 48 deletions matter/tables.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,57 +58,59 @@ const (
TableColumnTagID
TableColumnLocation
TableColumnField
TableColumnInstructionDependency
)

var TableColumnNames = map[TableColumn]string{
TableColumnUnknown: "Unknown",
TableColumnID: "ID",
TableColumnName: "Name",
TableColumnType: "Type",
TableColumnConstraint: "Constraint",
TableColumnQuality: "Quality",
TableColumnFallback: "Fallback",
TableColumnAccess: "Access",
TableColumnConformance: "Conformance",
TableColumnPriority: "Priority",
TableColumnHierarchy: "Hierarchy",
TableColumnRole: "Role",
TableColumnContext: "Context",
TableColumnScope: "Scope",
TableColumnPICS: "PICS",
TableColumnPICSCode: "PICS Code",
TableColumnValue: "Value",
TableColumnBit: "Bit",
TableColumnCode: "Code",
TableColumnStatusCode: "Status Code",
TableColumnFeature: "Feature",
TableColumnClusterID: "Cluster ID",
TableColumnEventID: "Event ID",
TableColumnCommandID: "Command ID",
TableColumnDevice: "Device",
TableColumnDeviceID: "Device Type ID",
TableColumnDeviceName: "Device Type Name",
TableColumnSupersetOf: "Superset Of",
TableColumnClass: "Class",
TableColumnDirection: "Direction",
TableColumnDescription: "Description",
TableColumnRevision: "Revision",
TableColumnResponse: "Response",
TableColumnSummary: "Summary",
TableColumnCluster: "Cluster",
TableColumnClusterName: "Cluster Name",
TableColumnElement: "Element",
TableColumnClientServer: "Client/Server",
TableColumnCondition: "Condition",
TableColumnConditionID: "Condition ID",
TableColumnModeTagValue: "Mode Tag Value",
TableColumnNamespace: "Namespace",
TableColumnNamespaceID: "Namespace ID",
TableColumnTag: "Tag",
TableColumnTagID: "Tag ID",
TableColumnLocation: "Location",
TableColumnField: "Field",
TableColumnFieldID: "Field ID",
TableColumnUnknown: "Unknown",
TableColumnID: "ID",
TableColumnName: "Name",
TableColumnType: "Type",
TableColumnConstraint: "Constraint",
TableColumnQuality: "Quality",
TableColumnFallback: "Fallback",
TableColumnAccess: "Access",
TableColumnConformance: "Conformance",
TableColumnPriority: "Priority",
TableColumnHierarchy: "Hierarchy",
TableColumnRole: "Role",
TableColumnContext: "Context",
TableColumnScope: "Scope",
TableColumnPICS: "PICS",
TableColumnPICSCode: "PICS Code",
TableColumnValue: "Value",
TableColumnBit: "Bit",
TableColumnCode: "Code",
TableColumnStatusCode: "Status Code",
TableColumnFeature: "Feature",
TableColumnClusterID: "Cluster ID",
TableColumnEventID: "Event ID",
TableColumnCommandID: "Command ID",
TableColumnDevice: "Device",
TableColumnDeviceID: "Device Type ID",
TableColumnDeviceName: "Device Type Name",
TableColumnSupersetOf: "Superset Of",
TableColumnClass: "Class",
TableColumnDirection: "Direction",
TableColumnDescription: "Description",
TableColumnRevision: "Revision",
TableColumnResponse: "Response",
TableColumnSummary: "Summary",
TableColumnCluster: "Cluster",
TableColumnClusterName: "Cluster Name",
TableColumnElement: "Element",
TableColumnClientServer: "Client/Server",
TableColumnCondition: "Condition",
TableColumnConditionID: "Condition ID",
TableColumnModeTagValue: "Mode Tag Value",
TableColumnNamespace: "Namespace",
TableColumnNamespaceID: "Namespace ID",
TableColumnTag: "Tag",
TableColumnTagID: "Tag ID",
TableColumnLocation: "Location",
TableColumnField: "Field",
TableColumnFieldID: "Field ID",
TableColumnInstructionDependency: "Instruction Dependency",
}

func (tc TableColumn) String() string {
Expand Down
Loading