mirror of
https://github.com/mainflux/mainflux.git
synced 2025-05-14 19:29:11 +08:00

* NOISSUE- Add OPC-UA adapter Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * NOISSUE - Add opc-adapter PoC, docker and vendor Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Convert OPC messages to SenML Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add gopcua package Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * lora-adapter typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add OPC Reader Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Typo fix Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Typo fix Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Update copyright headers Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix reviews Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix reviews Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add opc config Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add all opc envars in the config Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Config typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add route map Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Use opcua package instead of opc Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix OPCUA typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rm MQTT sub Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Move interefaces to root Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix revieews and typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Update Gopkg.toml Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add all envars into .env Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com>
54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
// Copyright 2018-2019 opcua authors. All rights reserved.
|
|
// Use of this source code is governed by a MIT-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
package ua
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"github.com/gopcua/opcua/debug"
|
|
)
|
|
|
|
// svcreg contains all known service request/response objects.
|
|
var svcreg = NewTypeRegistry()
|
|
|
|
// RegisterService registers a new service object type.
|
|
// It panics if the type or the id is already registered.
|
|
func RegisterService(typeID uint16, v interface{}) {
|
|
id := strconv.Itoa(int(typeID))
|
|
if err := svcreg.Register(id, v); err != nil {
|
|
panic("Service " + err.Error())
|
|
}
|
|
}
|
|
|
|
// ServiceTypeID returns the id of the service object type as
|
|
// registered with RegisterService. If the service object is not
|
|
// known the function returns 0.
|
|
func ServiceTypeID(v interface{}) uint16 {
|
|
n, _ := strconv.Atoi(svcreg.Lookup(v))
|
|
return uint16(n)
|
|
}
|
|
|
|
func DecodeService(b []byte) (*ExpandedNodeID, interface{}, error) {
|
|
typeID := new(ExpandedNodeID)
|
|
n, err := typeID.Decode(b)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
b = b[n:]
|
|
|
|
v := svcreg.New(strconv.Itoa(int(typeID.NodeID.IntID())))
|
|
if v == nil {
|
|
return nil, nil, StatusBadServiceUnsupported
|
|
}
|
|
|
|
if debug.FlagSet("packet") {
|
|
fmt.Printf("%T: %#v\n", v, b)
|
|
}
|
|
|
|
_, err = Decode(b, v)
|
|
return typeID, v, err
|
|
}
|