72 lines
3.5 KiB
Go
72 lines
3.5 KiB
Go
|
// -*- Mode: Go; indent-tabs-mode: t -*-
|
||
|
//
|
||
|
// Copyright (C) 2018 Canonical Ltd
|
||
|
// Copyright (C) 2018-2023 IOTech Ltd
|
||
|
//
|
||
|
// SPDX-License-Identifier: Apache-2.0
|
||
|
|
||
|
// Package interfaces defines interfaces and structs used to build an EdgeX Foundry Device
|
||
|
// Service. The interfaces provide an abstraction layer for the device
|
||
|
// or protocol specific logic of a Device Service, and the structs represents request
|
||
|
// and response data format used by the protocol driver.
|
||
|
package interfaces
|
||
|
|
||
|
import (
|
||
|
"github.com/edgexfoundry/go-mod-core-contracts/v4/models"
|
||
|
|
||
|
sdkModels "github.com/edgexfoundry/device-sdk-go/v4/pkg/models"
|
||
|
)
|
||
|
|
||
|
// ProtocolDriver is a low-level device-specific interface used by
|
||
|
// other components of an EdgeX Device Service to interact with
|
||
|
// a specific class of devices.
|
||
|
type ProtocolDriver interface {
|
||
|
// Initialize performs protocol-specific initialization for the device service.
|
||
|
// The given *AsyncValues channel can be used to push asynchronous events and
|
||
|
// readings to Core Data. The given []DiscoveredDevice channel is used to send
|
||
|
// discovered devices that will be filtered and added to Core Metadata asynchronously.
|
||
|
Initialize(sdk DeviceServiceSDK) error
|
||
|
|
||
|
// HandleReadCommands passes a slice of CommandRequest struct each representing
|
||
|
// a ResourceOperation for a specific device resource.
|
||
|
HandleReadCommands(deviceName string, protocols map[string]models.ProtocolProperties, reqs []sdkModels.CommandRequest) ([]*sdkModels.CommandValue, error)
|
||
|
|
||
|
// HandleWriteCommands passes a slice of CommandRequest struct each representing
|
||
|
// a ResourceOperation for a specific device resource.
|
||
|
// Since the commands are actuation commands, params provide parameters for the individual
|
||
|
// command.
|
||
|
HandleWriteCommands(deviceName string, protocols map[string]models.ProtocolProperties, reqs []sdkModels.CommandRequest, params []*sdkModels.CommandValue) error
|
||
|
|
||
|
// Stop instructs the protocol-specific DS code to shutdown gracefully, or
|
||
|
// if the force parameter is 'true', immediately. The driver is responsible
|
||
|
// for closing any in-use channels, including the channel used to send async
|
||
|
// readings (if supported).
|
||
|
Stop(force bool) error
|
||
|
|
||
|
// Start runs Device Service startup tasks after the SDK has been completely initialized.
|
||
|
// This allows Device Service to safely use DeviceServiceSDK interface features in this function call.
|
||
|
Start() error
|
||
|
|
||
|
// AddDevice is a callback function that is invoked
|
||
|
// when a new Device associated with this Device Service is added
|
||
|
AddDevice(deviceName string, protocols map[string]models.ProtocolProperties, adminState models.AdminState) error
|
||
|
|
||
|
// UpdateDevice is a callback function that is invoked
|
||
|
// when a Device associated with this Device Service is updated
|
||
|
UpdateDevice(deviceName string, protocols map[string]models.ProtocolProperties, adminState models.AdminState) error
|
||
|
|
||
|
// RemoveDevice is a callback function that is invoked
|
||
|
// when a Device associated with this Device Service is removed
|
||
|
RemoveDevice(deviceName string, protocols map[string]models.ProtocolProperties) error
|
||
|
|
||
|
// Discover triggers protocol specific device discovery, asynchronously
|
||
|
// writes the results to the channel which is passed to the implementation
|
||
|
// via ProtocolDriver.Initialize(). The results may be added to the device service
|
||
|
// based on a set of acceptance criteria (i.e. Provision Watchers).
|
||
|
Discover() error
|
||
|
|
||
|
// ValidateDevice triggers device's protocol properties validation, returns error
|
||
|
// if validation failed and the incoming device will not be added into EdgeX.
|
||
|
ValidateDevice(device models.Device) error
|
||
|
}
|