Skip to content

Commit dd75bd0

Browse files
Add partial read support (#85)
- Client features can now send read requests with selectors and elements - First partly usage in LPC and LPP of energy guard actor - Add missing device configuration reads to LPC and LPP in energy guard actor
2 parents 8b67993 + d7cf975 commit dd75bd0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+782
-409
lines changed

api/featuresclient.go

Lines changed: 61 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,17 @@ type DeviceClassificationClientInterface interface {
1010
type DeviceConfigurationClientInterface interface {
1111
DeviceConfigurationCommonInterface
1212

13-
// request DeviceConfigurationDescriptionListData from a remote entity
14-
RequestDescriptions() (*model.MsgCounterType, error)
13+
// request DeviceConfigurationKeyValueDescriptionDataType from a remote entity
14+
RequestKeyValueDescriptions(
15+
selector *model.DeviceConfigurationKeyValueDescriptionListDataSelectorsType,
16+
elements *model.DeviceConfigurationKeyValueDescriptionDataElementsType,
17+
) (*model.MsgCounterType, error)
1518

1619
// request DeviceConfigurationKeyValueListData from a remote entity
17-
RequestKeyValues() (*model.MsgCounterType, error)
20+
RequestKeyValues(
21+
selector *model.DeviceConfigurationKeyValueListDataSelectorsType,
22+
elements *model.DeviceConfigurationKeyValueDataElementsType,
23+
) (*model.MsgCounterType, error)
1824

1925
// write key values
2026
// returns an error if this failed
@@ -31,16 +37,28 @@ type DeviceDiagnosisClientInterface interface {
3137

3238
type ElectricalConnectionClientInterface interface {
3339
// request ElectricalConnectionDescriptionListDataType from a remote entity
34-
RequestDescriptions() (*model.MsgCounterType, error)
40+
RequestDescriptions(
41+
selector *model.ElectricalConnectionDescriptionListDataSelectorsType,
42+
elements *model.ElectricalConnectionDescriptionDataElementsType,
43+
) (*model.MsgCounterType, error)
3544

3645
// request FunctionTypeElectricalConnectionParameterDescriptionListData from a remote entity
37-
RequestParameterDescriptions() (*model.MsgCounterType, error)
46+
RequestParameterDescriptions(
47+
selector *model.ElectricalConnectionParameterDescriptionListDataSelectorsType,
48+
elements *model.ElectricalConnectionParameterDescriptionDataElementsType,
49+
) (*model.MsgCounterType, error)
3850

3951
// request FunctionTypeElectricalConnectionPermittedValueSetListData from a remote entity
40-
RequestPermittedValueSets() (*model.MsgCounterType, error)
52+
RequestPermittedValueSets(
53+
selector *model.ElectricalConnectionPermittedValueSetListDataSelectorsType,
54+
elements *model.ElectricalConnectionPermittedValueSetDataElementsType,
55+
) (*model.MsgCounterType, error)
4156

4257
// request FunctionTypeElectricalConnectionCharacteristicListData from a remote entity
43-
RequestCharacteristics() (*model.MsgCounterType, error)
58+
RequestCharacteristics(
59+
selector *model.ElectricalConnectionCharacteristicListDataSelectorsType,
60+
elements *model.ElectricalConnectionCharacteristicDataElementsType,
61+
) (*model.MsgCounterType, error)
4462
}
4563

4664
type IdentificationClientInterface interface {
@@ -69,13 +87,22 @@ type IncentiveTableClientInterface interface {
6987

7088
type LoadControlClientInterface interface {
7189
// request FunctionTypeLoadControlLimitDescriptionListData from a remote device
72-
RequestLimitDescriptions() (*model.MsgCounterType, error)
90+
RequestLimitDescriptions(
91+
selector *model.LoadControlLimitDescriptionListDataSelectorsType,
92+
elements *model.LoadControlLimitDescriptionDataElementsType,
93+
) (*model.MsgCounterType, error)
7394

7495
// request FunctionTypeLoadControlLimitConstraintsListData from a remote device
75-
RequestLimitConstraints() (*model.MsgCounterType, error)
96+
RequestLimitConstraints(
97+
selector *model.LoadControlLimitConstraintsListDataSelectorsType,
98+
elements *model.LoadControlLimitConstraintsDataElementsType,
99+
) (*model.MsgCounterType, error)
76100

77101
// request FunctionTypeLoadControlLimitListData from a remote device
78-
RequestLimitData() (*model.MsgCounterType, error)
102+
RequestLimitData(
103+
selector *model.LoadControlLimitListDataSelectorsType,
104+
elements *model.LoadControlLimitDataElementsType,
105+
) (*model.MsgCounterType, error)
79106

80107
// write load control limits
81108
// returns an error if this failed
@@ -88,13 +115,22 @@ type LoadControlClientInterface interface {
88115

89116
type MeasurementClientInterface interface {
90117
// request FunctionTypeMeasurementDescriptionListData from a remote device
91-
RequestDescriptions() (*model.MsgCounterType, error)
118+
RequestDescriptions(
119+
selector *model.MeasurementDescriptionListDataSelectorsType,
120+
elements *model.MeasurementDescriptionDataElementsType,
121+
) (*model.MsgCounterType, error)
92122

93123
// request FunctionTypeMeasurementConstraintsListData from a remote entity
94-
RequestConstraints() (*model.MsgCounterType, error)
124+
RequestConstraints(
125+
selector *model.MeasurementConstraintsListDataSelectorsType,
126+
elements *model.MeasurementConstraintsDataElementsType,
127+
) (*model.MsgCounterType, error)
95128

96129
// request FunctionTypeMeasurementListData from a remote entity
97-
RequestData() (*model.MsgCounterType, error)
130+
RequestData(
131+
selector *model.MeasurementListDataSelectorsType,
132+
elements *model.MeasurementDataElementsType,
133+
) (*model.MsgCounterType, error)
98134
}
99135

100136
type SmartEnergyManagementPsClientInterface interface {
@@ -108,13 +144,22 @@ type SmartEnergyManagementPsClientInterface interface {
108144

109145
type TimeSeriesClientInterface interface {
110146
// request FunctionTypeTimeSeriesDescriptionListData from a remote entity
111-
RequestDescriptions() (*model.MsgCounterType, error)
147+
RequestDescriptions(
148+
selector *model.TimeSeriesDescriptionListDataSelectorsType,
149+
elements *model.TimeSeriesDescriptionDataElementsType,
150+
) (*model.MsgCounterType, error)
112151

113152
// request FunctionTypeTimeSeriesConstraintsListData from a remote entity
114-
RequestConstraints() (*model.MsgCounterType, error)
153+
RequestConstraints(
154+
selector *model.TimeSeriesConstraintsListDataSelectorsType,
155+
elements *model.TimeSeriesConstraintsDataElementsType,
156+
) (*model.MsgCounterType, error)
115157

116158
// request FunctionTypeTimeSeriesListData from a remote device
117-
RequestData() (*model.MsgCounterType, error)
159+
RequestData(
160+
selector *model.TimeSeriesListDataSelectorsType,
161+
elements *model.TimeSeriesDataElementsType,
162+
) (*model.MsgCounterType, error)
118163

119164
// write Time Series values
120165
// returns an error if this failed

features/client/deviceclassification_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
package client_test
1+
package client
22

33
import (
44
"testing"
55

6-
features "github.com/enbility/eebus-go/features/client"
76
shipapi "github.com/enbility/ship-go/api"
87
spineapi "github.com/enbility/spine-go/api"
98
"github.com/enbility/spine-go/model"
@@ -21,7 +20,7 @@ type DeviceClassificationSuite struct {
2120
localEntity spineapi.EntityLocalInterface
2221
remoteEntity spineapi.EntityRemoteInterface
2322

24-
deviceClassification *features.DeviceClassification
23+
deviceClassification *DeviceClassification
2524
sentMessage []byte
2625
}
2726

@@ -46,11 +45,11 @@ func (s *DeviceClassificationSuite) BeforeTest(suiteName, testName string) {
4645
)
4746

4847
var err error
49-
s.deviceClassification, err = features.NewDeviceClassification(s.localEntity, nil)
48+
s.deviceClassification, err = NewDeviceClassification(s.localEntity, nil)
5049
assert.NotNil(s.T(), err)
5150
assert.Nil(s.T(), s.deviceClassification)
5251

53-
s.deviceClassification, err = features.NewDeviceClassification(s.localEntity, s.remoteEntity)
52+
s.deviceClassification, err = NewDeviceClassification(s.localEntity, s.remoteEntity)
5453
assert.Nil(s.T(), err)
5554
assert.NotNil(s.T(), s.deviceClassification)
5655
}

features/client/deviceconfiguration.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,20 @@ func NewDeviceConfiguration(
3636

3737
var _ api.DeviceConfigurationClientInterface = (*DeviceConfiguration)(nil)
3838

39-
// request DeviceConfiguration data from a remote entity
40-
func (d *DeviceConfiguration) RequestDescriptions() (*model.MsgCounterType, error) {
41-
return d.requestData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, nil, nil)
39+
// request DeviceConfigurationKeyValueDescriptionDataType from a remote entity
40+
func (d *DeviceConfiguration) RequestKeyValueDescriptions(
41+
selector *model.DeviceConfigurationKeyValueDescriptionListDataSelectorsType,
42+
elements *model.DeviceConfigurationKeyValueDescriptionDataElementsType,
43+
) (*model.MsgCounterType, error) {
44+
return d.requestData(model.FunctionTypeDeviceConfigurationKeyValueDescriptionListData, selector, elements)
4245
}
4346

44-
// request DeviceConfigurationKeyValueListDataType from a remote entity
45-
func (d *DeviceConfiguration) RequestKeyValues() (*model.MsgCounterType, error) {
46-
return d.requestData(model.FunctionTypeDeviceConfigurationKeyValueListData, nil, nil)
47+
// request DeviceConfigurationKeyValueListData from a remote entity
48+
func (d *DeviceConfiguration) RequestKeyValues(
49+
selector *model.DeviceConfigurationKeyValueListDataSelectorsType,
50+
elements *model.DeviceConfigurationKeyValueDataElementsType,
51+
) (*model.MsgCounterType, error) {
52+
return d.requestData(model.FunctionTypeDeviceConfigurationKeyValueListData, selector, elements)
4753
}
4854

4955
// write key values

features/client/deviceconfiguration_test.go

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
package client_test
1+
package client
22

33
import (
44
"testing"
55

6-
features "github.com/enbility/eebus-go/features/client"
76
shipmocks "github.com/enbility/ship-go/mocks"
87
spineapi "github.com/enbility/spine-go/api"
98
"github.com/enbility/spine-go/mocks"
@@ -25,7 +24,7 @@ type DeviceConfigurationSuite struct {
2524
remoteEntity spineapi.EntityRemoteInterface
2625
mockRemoteEntity *mocks.EntityRemoteInterface
2726

28-
deviceConfiguration *features.DeviceConfiguration
27+
deviceConfiguration *DeviceConfiguration
2928
}
3029

3130
const remoteSki string = "testremoteski"
@@ -60,23 +59,37 @@ func (s *DeviceConfigurationSuite) BeforeTest(suiteName, testName string) {
6059
mockRemoteFeature.EXPECT().DataCopy(mock.Anything).Return(mock.Anything).Maybe()
6160

6261
var err error
63-
s.deviceConfiguration, err = features.NewDeviceConfiguration(s.localEntity, nil)
62+
s.deviceConfiguration, err = NewDeviceConfiguration(s.localEntity, nil)
6463
assert.NotNil(s.T(), err)
6564
assert.Nil(s.T(), s.deviceConfiguration)
6665

67-
s.deviceConfiguration, err = features.NewDeviceConfiguration(s.localEntity, s.remoteEntity)
66+
s.deviceConfiguration, err = NewDeviceConfiguration(s.localEntity, s.remoteEntity)
6867
assert.Nil(s.T(), err)
6968
assert.NotNil(s.T(), s.deviceConfiguration)
7069
}
7170

72-
func (s *DeviceConfigurationSuite) Test_RequestDescriptions() {
73-
counter, err := s.deviceConfiguration.RequestDescriptions()
71+
func (s *DeviceConfigurationSuite) Test_RequestKeyValueDescriptions() {
72+
counter, err := s.deviceConfiguration.RequestKeyValueDescriptions(nil, nil)
73+
assert.Nil(s.T(), err)
74+
assert.NotNil(s.T(), counter)
75+
76+
counter, err = s.deviceConfiguration.RequestKeyValueDescriptions(
77+
&model.DeviceConfigurationKeyValueDescriptionListDataSelectorsType{},
78+
&model.DeviceConfigurationKeyValueDescriptionDataElementsType{},
79+
)
7480
assert.Nil(s.T(), err)
7581
assert.NotNil(s.T(), counter)
7682
}
7783

7884
func (s *DeviceConfigurationSuite) Test_RequestKeyValueList() {
79-
counter, err := s.deviceConfiguration.RequestKeyValues()
85+
counter, err := s.deviceConfiguration.RequestKeyValues(nil, nil)
86+
assert.Nil(s.T(), err)
87+
assert.NotNil(s.T(), counter)
88+
89+
counter, err = s.deviceConfiguration.RequestKeyValues(
90+
&model.DeviceConfigurationKeyValueListDataSelectorsType{},
91+
&model.DeviceConfigurationKeyValueDataElementsType{},
92+
)
8093
assert.Nil(s.T(), err)
8194
assert.NotNil(s.T(), counter)
8295
}

features/client/devicediagnosis_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
package client_test
1+
package client
22

33
import (
44
"testing"
55

6-
features "github.com/enbility/eebus-go/features/client"
76
shipapi "github.com/enbility/ship-go/api"
87
spineapi "github.com/enbility/spine-go/api"
98
"github.com/enbility/spine-go/model"
@@ -21,7 +20,7 @@ type DeviceDiagnosisSuite struct {
2120
localEntity spineapi.EntityLocalInterface
2221
remoteEntity spineapi.EntityRemoteInterface
2322

24-
deviceDiagnosis *features.DeviceDiagnosis
23+
deviceDiagnosis *DeviceDiagnosis
2524
sentMessage []byte
2625
}
2726

@@ -47,11 +46,11 @@ func (s *DeviceDiagnosisSuite) BeforeTest(suiteName, testName string) {
4746
)
4847

4948
var err error
50-
s.deviceDiagnosis, err = features.NewDeviceDiagnosis(s.localEntity, nil)
49+
s.deviceDiagnosis, err = NewDeviceDiagnosis(s.localEntity, nil)
5150
assert.NotNil(s.T(), err)
5251
assert.Nil(s.T(), s.deviceDiagnosis)
5352

54-
s.deviceDiagnosis, err = features.NewDeviceDiagnosis(s.localEntity, s.remoteEntity)
53+
s.deviceDiagnosis, err = NewDeviceDiagnosis(s.localEntity, s.remoteEntity)
5554
assert.Nil(s.T(), err)
5655
assert.NotNil(s.T(), s.deviceDiagnosis)
5756
}

features/client/electricalconnection.go

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,33 @@ func NewElectricalConnection(
3636
var _ api.ElectricalConnectionClientInterface = (*ElectricalConnection)(nil)
3737

3838
// request ElectricalConnectionDescriptionListDataType from a remote entity
39-
func (e *ElectricalConnection) RequestDescriptions() (*model.MsgCounterType, error) {
40-
return e.requestData(model.FunctionTypeElectricalConnectionDescriptionListData, nil, nil)
39+
func (e *ElectricalConnection) RequestDescriptions(
40+
selector *model.ElectricalConnectionDescriptionListDataSelectorsType,
41+
elements *model.ElectricalConnectionDescriptionDataElementsType,
42+
) (*model.MsgCounterType, error) {
43+
return e.requestData(model.FunctionTypeElectricalConnectionDescriptionListData, selector, elements)
4144
}
4245

4346
// request FunctionTypeElectricalConnectionParameterDescriptionListData from a remote entity
44-
func (e *ElectricalConnection) RequestParameterDescriptions() (*model.MsgCounterType, error) {
45-
return e.requestData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, nil, nil)
47+
func (e *ElectricalConnection) RequestParameterDescriptions(
48+
selector *model.ElectricalConnectionParameterDescriptionListDataSelectorsType,
49+
elements *model.ElectricalConnectionParameterDescriptionDataElementsType,
50+
) (*model.MsgCounterType, error) {
51+
return e.requestData(model.FunctionTypeElectricalConnectionParameterDescriptionListData, selector, elements)
4652
}
4753

4854
// request FunctionTypeElectricalConnectionPermittedValueSetListData from a remote entity
49-
func (e *ElectricalConnection) RequestPermittedValueSets() (*model.MsgCounterType, error) {
50-
return e.requestData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, nil, nil)
55+
func (e *ElectricalConnection) RequestPermittedValueSets(
56+
selector *model.ElectricalConnectionPermittedValueSetListDataSelectorsType,
57+
elements *model.ElectricalConnectionPermittedValueSetDataElementsType,
58+
) (*model.MsgCounterType, error) {
59+
return e.requestData(model.FunctionTypeElectricalConnectionPermittedValueSetListData, selector, elements)
5160
}
5261

5362
// request FunctionTypeElectricalConnectionCharacteristicListData from a remote entity
54-
func (e *ElectricalConnection) RequestCharacteristics() (*model.MsgCounterType, error) {
55-
return e.requestData(model.FunctionTypeElectricalConnectionCharacteristicListData, nil, nil)
63+
func (e *ElectricalConnection) RequestCharacteristics(
64+
selector *model.ElectricalConnectionCharacteristicListDataSelectorsType,
65+
elements *model.ElectricalConnectionCharacteristicDataElementsType,
66+
) (*model.MsgCounterType, error) {
67+
return e.requestData(model.FunctionTypeElectricalConnectionCharacteristicListData, selector, elements)
5668
}

0 commit comments

Comments
 (0)