42 lines
1001 B
Go
42 lines
1001 B
Go
package bacnet
|
|
|
|
import "bytes"
|
|
|
|
type ReadPropertyRequest struct {
|
|
NPDU NPDU `json:"npdu"`
|
|
APDU APDU `json:"apdu"`
|
|
Selection ReadProperty `json:"read_property"`
|
|
}
|
|
|
|
func (rp *ReadPropertyRequest) Marshal() (out []byte, err error) {
|
|
buf := new(bytes.Buffer)
|
|
var b []byte
|
|
if b, err = rp.NPDU.Marshal(); err != nil {
|
|
return
|
|
}
|
|
buf.Write(b)
|
|
if b, err = rp.APDU.Marshal(); err != nil {
|
|
return
|
|
}
|
|
buf.Write(b)
|
|
if b, err = rp.Selection.Marshal(); err != nil {
|
|
return
|
|
}
|
|
buf.Write(b)
|
|
return buf.Bytes(), nil
|
|
}
|
|
|
|
func NewReadPropertyRequest(oid ObjectID, pid PropertyID) *ReadPropertyRequest {
|
|
req := new(ReadPropertyRequest)
|
|
req.NPDU.Version = NPDU_VERSION_ASHRAE_135_1995
|
|
req.NPDU.Control |= NPDU_FLAG_EXPECTING_RESPONSE
|
|
req.APDU.TypeAndFlags = 0
|
|
req.APDU.SegmentSizes.set = true
|
|
req.APDU.SegmentSizes.raw = 0x05
|
|
req.APDU.InvokeID = 1
|
|
req.APDU.ServerChoice = SERVER_CHOICE_READ_PROPERTY
|
|
req.Selection.Object = oid
|
|
req.Selection.Property = pid
|
|
return req
|
|
}
|