github.com/enbility/spine-go@v0.7.0/spine/nodemanagement_usecase.go (about) 1 package spine 2 3 import ( 4 "errors" 5 "fmt" 6 7 "github.com/enbility/spine-go/api" 8 "github.com/enbility/spine-go/model" 9 "github.com/enbility/spine-go/util" 10 ) 11 12 func (r *NodeManagement) RequestUseCaseData(remoteDeviceSki string, remoteDeviceAddress *model.AddressDeviceType, sender api.SenderInterface) (*model.MsgCounterType, *model.ErrorType) { 13 rfAddress := featureAddressType(NodeManagementFeatureId, EntityAddressType(remoteDeviceAddress, DeviceInformationAddressEntity)) 14 cmd := model.CmdType{ 15 NodeManagementUseCaseData: &model.NodeManagementUseCaseDataType{}, 16 } 17 return r.RequestRemoteDataBySenderAddress(cmd, sender, remoteDeviceSki, rfAddress, defaultMaxResponseDelay) 18 } 19 20 func (r *NodeManagement) processReadUseCaseData(featureRemote api.FeatureRemoteInterface, requestHeader *model.HeaderType) error { 21 fd := r.functionData(model.FunctionTypeNodeManagementUseCaseData) 22 if fd == nil { 23 return errors.New("function data not found") 24 } 25 cmd := fd.ReplyCmdType(false) 26 27 return featureRemote.Device().Sender().Reply(requestHeader, r.Address(), cmd) 28 } 29 30 func (r *NodeManagement) processReplyUseCaseData(message *api.Message, data *model.NodeManagementUseCaseDataType) error { 31 _, _ = message.FeatureRemote.UpdateData(true, model.FunctionTypeNodeManagementUseCaseData, data, nil, nil) 32 33 // the data was updated, so send an event, other event handlers may watch out for this as well 34 payload := api.EventPayload{ 35 Ski: message.FeatureRemote.Device().Ski(), 36 EventType: api.EventTypeDataChange, 37 ChangeType: api.ElementChangeUpdate, 38 Feature: message.FeatureRemote, 39 Device: message.FeatureRemote.Device(), 40 Entity: message.FeatureRemote.Entity(), 41 CmdClassifier: util.Ptr(message.CmdClassifier), 42 Data: data, 43 } 44 Events.Publish(payload) 45 46 return nil 47 } 48 49 func (r *NodeManagement) handleMsgUseCaseData(message *api.Message, data *model.NodeManagementUseCaseDataType) error { 50 switch message.CmdClassifier { 51 case model.CmdClassifierTypeRead: 52 return r.processReadUseCaseData(message.FeatureRemote, message.RequestHeader) 53 54 case model.CmdClassifierTypeReply: 55 return r.processReplyUseCaseData(message, data) 56 57 case model.CmdClassifierTypeNotify: 58 return r.processReplyUseCaseData(message, data) 59 60 default: 61 return fmt.Errorf("nodemanagement.handleUseCaseData: NodeManagementUseCaseData CmdClassifierType not implemented: %s", message.CmdClassifier) 62 } 63 }