Skip to content

Commit

Permalink
feat(plc4go/spi): introduced WriteBufferPlcValueBased
Browse files Browse the repository at this point in the history
  • Loading branch information
sruehl committed Aug 18, 2022
1 parent 0f32971 commit 2a860ce
Show file tree
Hide file tree
Showing 9 changed files with 333 additions and 96 deletions.
16 changes: 8 additions & 8 deletions plc4go/internal/cbus/Reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ func (m *Reader) Read(ctx context.Context, readRequest apiModel.PlcReadRequest)
addPlcValue(fieldNameCopy, spiValues.NewPlcByteArray(identifyReplyCommand.GetCurrentSenseLevels()))
case readWriteModel.IdentifyReplyCommandDelaysExactly:
addPlcValue(fieldNameCopy, spiValues.NewPlcStruct(map[string]apiValues.PlcValue{
"ReStrikeDelay": spiValues.NewPlcUINT(uint16(identifyReplyCommand.GetReStrikeDelay())),
"ReStrikeDelay": spiValues.NewPlcUSINT(identifyReplyCommand.GetReStrikeDelay()),
"TerminalLevel": spiValues.NewPlcByteArray(identifyReplyCommand.GetTerminalLevels()),
}))
case readWriteModel.IdentifyReplyCommandDSIStatusExactly:
Expand All @@ -261,16 +261,16 @@ func (m *Reader) Read(ctx context.Context, readRequest apiModel.PlcReadRequest)
"ChannelStatus7": spiValues.NewPlcSTRING(identifyReplyCommand.GetChannelStatus7().String()),
"ChannelStatus8": spiValues.NewPlcSTRING(identifyReplyCommand.GetChannelStatus8().String()),
"UnitStatus": spiValues.NewPlcSTRING(identifyReplyCommand.GetUnitStatus().String()),
"DimmingUCRevisionNumber": spiValues.NewPlcUINT(uint16(identifyReplyCommand.GetDimmingUCRevisionNumber())),
"DimmingUCRevisionNumber": spiValues.NewPlcUSINT(identifyReplyCommand.GetDimmingUCRevisionNumber()),
}))
case readWriteModel.IdentifyReplyCommandExtendedDiagnosticSummaryExactly:
addPlcValue(fieldNameCopy, spiValues.NewPlcStruct(map[string]apiValues.PlcValue{
"LowApplication": spiValues.NewPlcSTRING(identifyReplyCommand.GetLowApplication().String()),
"HighApplication": spiValues.NewPlcSTRING(identifyReplyCommand.GetHighApplication().String()),
"Area": spiValues.NewPlcUINT(uint16(identifyReplyCommand.GetArea())),
"Area": spiValues.NewPlcUSINT(identifyReplyCommand.GetArea()),
"Crc": spiValues.NewPlcUINT(identifyReplyCommand.GetCrc()),
"SerialNumber": spiValues.NewPlcUDINT(identifyReplyCommand.GetSerialNumber()),
"NetworkVoltage": spiValues.NewPlcUINT(uint16(identifyReplyCommand.GetNetworkVoltage())),
"NetworkVoltage": spiValues.NewPlcUSINT(identifyReplyCommand.GetNetworkVoltage()),
"UnitInLearnMode": spiValues.NewPlcBOOL(identifyReplyCommand.GetUnitInLearnMode()),
"NetworkVoltageLow": spiValues.NewPlcBOOL(identifyReplyCommand.GetNetworkVoltageLow()),
"NetworkVoltageMarginal": spiValues.NewPlcBOOL(identifyReplyCommand.GetNetworkVoltageMarginal()),
Expand All @@ -288,7 +288,7 @@ func (m *Reader) Read(ctx context.Context, readRequest apiModel.PlcReadRequest)
case readWriteModel.IdentifyReplyCommandSummaryExactly:
addPlcValue(fieldNameCopy, spiValues.NewPlcStruct(map[string]apiValues.PlcValue{
"PartName": spiValues.NewPlcSTRING(identifyReplyCommand.GetPartName()),
"UnitServiceType": spiValues.NewPlcUINT(uint16(identifyReplyCommand.GetUnitServiceType())),
"UnitServiceType": spiValues.NewPlcUSINT(identifyReplyCommand.GetUnitServiceType()),
"Version": spiValues.NewPlcSTRING(identifyReplyCommand.GetVersion()),
}))
case readWriteModel.IdentifyReplyCommandFirmwareVersionExactly:
Expand Down Expand Up @@ -346,13 +346,13 @@ func (m *Reader) Read(ctx context.Context, readRequest apiModel.PlcReadRequest)
"ClockGenerationEnabled": spiValues.NewPlcBOOL(unitFlags.GetClockGenerationEnabled()),
"UnitGeneratingClock": spiValues.NewPlcBOOL(unitFlags.GetUnitGeneratingClock()),
}),
"TimeFromLastRecoverOfMainsInSeconds": spiValues.NewPlcUINT(uint16(identifyReplyCommand.GetTimeFromLastRecoverOfMainsInSeconds())),
"TimeFromLastRecoverOfMainsInSeconds": spiValues.NewPlcUSINT(identifyReplyCommand.GetTimeFromLastRecoverOfMainsInSeconds()),
}
if gavStoreEnabledByte1 := identifyReplyCommand.GetGavStoreEnabledByte1(); gavStoreEnabledByte1 != nil {
structContent["GavStoreEnabledByte1"] = spiValues.NewPlcUINT(uint16(*gavStoreEnabledByte1))
structContent["GavStoreEnabledByte1"] = spiValues.NewPlcUSINT(*gavStoreEnabledByte1)
}
if gavStoreEnabledByte2 := identifyReplyCommand.GetGavStoreEnabledByte2(); gavStoreEnabledByte2 != nil {
structContent["GavStoreEnabledByte2"] = spiValues.NewPlcUINT(uint16(*gavStoreEnabledByte2))
structContent["GavStoreEnabledByte2"] = spiValues.NewPlcUSINT(*gavStoreEnabledByte2)
}
addPlcValue(fieldNameCopy, spiValues.NewPlcStruct(structContent))
case readWriteModel.IdentifyReplyCommandTerminalLevelsExactly:
Expand Down
16 changes: 8 additions & 8 deletions plc4go/spi/utils/Buffer.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,24 +62,24 @@ type withRenderAsList struct {
renderAsList bool
}

func upcastReaderArgs(args ...WithReaderArgs) []WithReaderWriterArgs {
//
// Internal section
//
///////////////////////////////////////
///////////////////////////////////////

func UpcastReaderArgs(args ...WithReaderArgs) []WithReaderWriterArgs {
result := make([]WithReaderWriterArgs, len(args))
for i, arg := range args {
result[i] = arg.(WithReaderWriterArgs)
}
return result
}

func upcastWriterArgs(args ...WithWriterArgs) []WithReaderWriterArgs {
func UpcastWriterArgs(args ...WithWriterArgs) []WithReaderWriterArgs {
result := make([]WithReaderWriterArgs, len(args))
for i, arg := range args {
result[i] = arg.(WithReaderWriterArgs)
}
return result
}

//
// Internal section
//
///////////////////////////////////////
///////////////////////////////////////
46 changes: 23 additions & 23 deletions plc4go/spi/utils/ReadBufferJsonBased.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@ func NewStrictJsonReadBuffer(reader io.Reader, validateAttr bool) ReadBuffer {
//

type jsonReadBuffer struct {
bufferCommons
stack
BufferCommons
Stack
rootElement map[string]interface{}
pos uint
doValidateAttr bool
Expand Down Expand Up @@ -93,7 +93,7 @@ func (j *jsonReadBuffer) PullContext(logicalName string, readerArgs ...WithReade
if j.err != nil {
return j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
if j.Empty() {
if context, ok := j.rootElement[logicalName]; ok {
j.Push(context)
Expand Down Expand Up @@ -132,7 +132,7 @@ func (j *jsonReadBuffer) ReadBit(logicalName string, readerArgs ...WithReaderArg
if j.err != nil {
return false, j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
j.move(1)
peek, element := j.getElement(logicalName)
if err := j.validateAttr(logicalName, element, "bit", 1, readerArgs...); err != nil {
Expand All @@ -149,7 +149,7 @@ func (j *jsonReadBuffer) ReadByte(logicalName string, readerArgs ...WithReaderAr
if j.err != nil {
return 0, j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
j.move(8)
peek, element := j.getElement(logicalName)
if err := j.validateAttr(logicalName, element, "byte", 8, readerArgs...); err != nil {
Expand All @@ -175,7 +175,7 @@ func (j *jsonReadBuffer) ReadByteArray(logicalName string, numberOfBytes int, re
if j.err != nil {
return nil, j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
j.move(uint(numberOfBytes / 8))
peek, element := j.getElement(logicalName)
if err := j.validateAttr(logicalName, element, "byte", uint(numberOfBytes*8), readerArgs...); err != nil {
Expand All @@ -201,7 +201,7 @@ func (j *jsonReadBuffer) ReadUint8(logicalName string, bitLength uint8, readerAr
if j.err != nil {
return 0, j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
j.move(uint(bitLength))
peek, element := j.getElement(logicalName)
if err := j.validateAttr(logicalName, element, "uint", uint(bitLength), readerArgs...); err != nil {
Expand All @@ -218,7 +218,7 @@ func (j *jsonReadBuffer) ReadUint16(logicalName string, bitLength uint8, readerA
if j.err != nil {
return 0, j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
j.move(uint(bitLength))
peek, element := j.getElement(logicalName)
if err := j.validateAttr(logicalName, element, "uint", uint(bitLength), readerArgs...); err != nil {
Expand All @@ -235,7 +235,7 @@ func (j *jsonReadBuffer) ReadUint32(logicalName string, bitLength uint8, readerA
if j.err != nil {
return 0, j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
j.move(uint(bitLength))
peek, element := j.getElement(logicalName)
if err := j.validateAttr(logicalName, element, "uint", uint(bitLength), readerArgs...); err != nil {
Expand All @@ -252,7 +252,7 @@ func (j *jsonReadBuffer) ReadUint64(logicalName string, bitLength uint8, readerA
if j.err != nil {
return 0, j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
j.move(uint(bitLength))
peek, element := j.getElement(logicalName)
if err := j.validateAttr(logicalName, element, "uint", uint(bitLength), readerArgs...); err != nil {
Expand All @@ -269,7 +269,7 @@ func (j *jsonReadBuffer) ReadInt8(logicalName string, bitLength uint8, readerArg
if j.err != nil {
return 0, j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
j.move(uint(bitLength))
peek, element := j.getElement(logicalName)
if err := j.validateAttr(logicalName, element, "int", uint(bitLength), readerArgs...); err != nil {
Expand All @@ -286,7 +286,7 @@ func (j *jsonReadBuffer) ReadInt16(logicalName string, bitLength uint8, readerAr
if j.err != nil {
return 0, j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
j.move(uint(bitLength))
peek, element := j.getElement(logicalName)
if err := j.validateAttr(logicalName, element, "int", uint(bitLength), readerArgs...); err != nil {
Expand All @@ -303,7 +303,7 @@ func (j *jsonReadBuffer) ReadInt32(logicalName string, bitLength uint8, readerAr
if j.err != nil {
return 0, j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
j.move(uint(bitLength))
peek, element := j.getElement(logicalName)
if err := j.validateAttr(logicalName, element, "int", uint(bitLength), readerArgs...); err != nil {
Expand All @@ -320,7 +320,7 @@ func (j *jsonReadBuffer) ReadInt64(logicalName string, bitLength uint8, readerAr
if j.err != nil {
return 0, j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
j.move(uint(bitLength))
peek, element := j.getElement(logicalName)
if err := j.validateAttr(logicalName, element, "int", uint(bitLength), readerArgs...); err != nil {
Expand All @@ -337,8 +337,8 @@ func (j *jsonReadBuffer) ReadBigInt(logicalName string, bitLength uint64, reader
if j.err != nil {
return nil, j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
peek, element := j.getElement(logicalName)
// TODO: not enough bits
if err := j.validateAttr(logicalName, element, "int", uint(bitLength), readerArgs...); err != nil {
Expand All @@ -357,7 +357,7 @@ func (j *jsonReadBuffer) ReadFloat32(logicalName string, bitLength uint8, reader
if j.err != nil {
return 0, j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
j.move(uint(bitLength))
peek, element := j.getElement(logicalName)
if err := j.validateAttr(logicalName, element, "float", uint(bitLength), readerArgs...); err != nil {
Expand All @@ -374,7 +374,7 @@ func (j *jsonReadBuffer) ReadFloat64(logicalName string, bitLength uint8, reader
if j.err != nil {
return 0, j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
j.move(uint(bitLength))
peek, element := j.getElement(logicalName)
if err := j.validateAttr(logicalName, element, "float", uint(bitLength), readerArgs...); err != nil {
Expand All @@ -391,7 +391,7 @@ func (j *jsonReadBuffer) ReadBigFloat(logicalName string, bitLength uint8, reade
if j.err != nil {
return nil, j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
j.move(uint(bitLength))
peek, element := j.getElement(logicalName)
if err := j.validateAttr(logicalName, element, "float", uint(bitLength), readerArgs...); err != nil {
Expand All @@ -410,7 +410,7 @@ func (j *jsonReadBuffer) ReadString(logicalName string, bitLength uint32, reader
if j.err != nil {
return "", j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
j.move(uint(bitLength))
peek, element := j.getElement(logicalName)
if err := j.validateAttr(logicalName, element, "string", uint(bitLength), readerArgs...); err != nil {
Expand All @@ -427,11 +427,11 @@ func (j *jsonReadBuffer) CloseContext(logicalName string, readerArgs ...WithRead
if j.err != nil {
return j.err
}
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
if j.Empty() {
return errors.Errorf("Required context close %s not found in %v", logicalName, j.rootElement)
}
// Delete us from stack
// Delete us from Stack
_ = j.Pop()
if j.Empty() {
return nil
Expand All @@ -450,7 +450,7 @@ func (j *jsonReadBuffer) CloseContext(logicalName string, readerArgs ...WithRead
}

func (j *jsonReadBuffer) getElement(logicalName string) (interface{}, map[string]interface{}) {
logicalName = j.sanitizeLogicalName(logicalName)
logicalName = j.SanitizeLogicalName(logicalName)
peek := j.Peek()
var element map[string]interface{}
switch peek.(type) {
Expand Down
6 changes: 3 additions & 3 deletions plc4go/spi/utils/ReadBufferXmlBased.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func NewStrictXmlReadBuffer(reader io.Reader, validateAttr bool, validateList bo
//

type xmlReadBuffer struct {
bufferCommons
BufferCommons
*xml.Decoder
pos uint
doValidateAttr bool
Expand Down Expand Up @@ -344,7 +344,7 @@ func (x *xmlReadBuffer) validateIfList(readerArgs []WithReaderArgs, startElement
if !x.doValidateList {
return nil
}
if x.isToBeRenderedAsList(upcastReaderArgs(readerArgs...)...) {
if x.IsToBeRenderedAsList(UpcastReaderArgs(readerArgs...)...) {
for _, attr := range startElement.Attr {
switch attr.Name.Local {
case rwIsListKey:
Expand All @@ -358,7 +358,7 @@ func (x *xmlReadBuffer) validateIfList(readerArgs []WithReaderArgs, startElement
}

func (x *xmlReadBuffer) validateStartElement(startElement xml.StartElement, logicalName string, dataType string, bitLength uint, readerArgs ...WithReaderArgs) error {
logicalName = x.sanitizeLogicalName(logicalName)
logicalName = x.SanitizeLogicalName(logicalName)
if startElement.Name.Local != logicalName {
return errors.Errorf("unexpected start element '%s'. Expected '%s'", startElement.Name.Local, logicalName)
} else if err := x.validateAttr(startElement.Attr, dataType, bitLength, readerArgs...); err != nil {
Expand Down
Loading

0 comments on commit 2a860ce

Please sign in to comment.