Files
2024-05-18 23:53:26 +08:00

230 lines
8.4 KiB
C

/**
* @file GoDiscovery.h
* @brief Declares discovery-related types.
*
* @internal
* Copyright (C) 2016-2021 by LMI Technologies Inc.
* Licensed under the MIT License.
* Redistributed files must retain the above copyright notice.
*/
#ifndef GO_SDK_DISCOVERY_H
#define GO_SDK_DISCOVERY_H
#include <GoSdk/GoSdkDef.h>
#include <kApi/Data/kArrayList.h>
#include <GoSdk/Messages/GoDiscoveryExtInfo.h>
/**
* @struct GoDiscoveryInfo
* @extends kValue
* @ingroup GoSdk-Internal
* @brief Represents discovery information for a single device.
*/
typedef struct GoDiscoveryInfo
{
k32u id; ///< device identifier (serial number)
GoAddressInfo address; ///< network configuration
GoPortInfo ports;
// Gocator firmware version the sensor is running.
kVersion version;
// opMode: indicates if the main controller (host) is:
// a. a virtual sensor, or
// b. a standalone sensor, or
// c. an accelerator host that is accelerating a sensor.
GoDiscoveryOpMode opMode;
// If opMode indicates main controller is an accelerator host,
// then the IP address of the accelerated sensor
// is stored in the following field.
// Otherwise, this field is not meaningful.
kIpAddress accelSensorIpAddress;
// IP address of the discovery server that sent the discovery information
// about the sensor. This can be the physical sensor or a host controller
// (eg. virtual sensor, accelerated sensor).
kIpAddress discoveryServerAddress;
// Basic identifying sensor traits received via discovery information
// about the sensor.
kText32 partNumber;
kText32 modelNumber;
kText32 modelDisplayName;
kText32 family;
} GoDiscoveryInfo;
/**
* @class GoDiscovery
* @extends kObject
* @ingroup GoSdk-Internal
* @brief Represents a discovery client.
*/
typedef kObject GoDiscovery;
/** Defines the signature for a discovery enumeration handler. */
typedef kStatus (kCall* GoDiscoveryEnumFx)(kPointer context, GoDiscovery discovery, kArrayList info);
/**
* Constructs a GoDiscovery object.
*
* @public @memberof GoDiscovery
* @version Introduced in firmware 4.0.10.27
* @param discovery Receives constructed discovery object.
* @param enableAutoDiscovery whether or not to enable all interfaces to support running the Discovery Protocol.
* @param allocator Memory allocator (or kNULL for default)
* @return Operation status.
*/
GoFx(kStatus) GoDiscovery_Construct(GoDiscovery* discovery, kBool enableAutoDiscovery, kAlloc allocator);
/**
* Enumerates sensors present in the network.
*
* @public @memberof GoDiscovery
* @version Introduced in firmware 4.0.10.27
* @param discovery Discovery object.
* @param infoList List to be populated with sensor descriptors (kArrayList<GoDiscoveryInfo>).
* @return Operation status.
*/
GoFx(kStatus) GoDiscovery_Enumerate(GoDiscovery discovery, kArrayList infoList);
/**
* Configures a sensor's network address settings.
*
* This function uses UDP broadcasts; the sensor and can be on a different subnet than the client.
*
* The sensor will automatically reboot if the address is successfully changed.
*
* @public @memberof GoDiscovery
* @version Introduced in firmware 4.0.10.27
* @param discovery Discovery object.
* @param deviceId Sensor device identifier (serial number).
* @param address New address information.
* @return Operation status.
*/
GoFx(kStatus) GoDiscovery_SetAddress(GoDiscovery discovery, k32u deviceId, const GoAddressInfo* address);
/**
* Retrieves a sensor's network address settings.
*
* This function uses UDP broadcasts; the sensor and can be on a different subnet than the client.
*
* @public @memberof GoDiscovery
* @version Introduced in firmware 4.0.10.27
* @param discovery Discovery object.
* @param deviceId Sensor device identifier (serial number).
* @param address Receives address information.
* @return Operation status.
*/
GoFx(kStatus) GoDiscovery_GetAddress(GoDiscovery discovery, k32u deviceId, GoAddressInfo* address);
/**
* Retrieves a sensor's information.
*
* This function uses UDP broadcasts; the sensor and can be on a different subnet than the client.
*
* @public @memberof GoDiscovery
* @version Introduced in firmware 4.3.3.124
* @param discovery Discovery object.
* @param deviceId Sensor device identifier (serial number).
* @param info Receives sensor information.
* @param allocator Memory allocator. In order to prevent memory leaks,
* the received information object should be destroyed when no longer used.
* @return Operation status.
*/
GoFx(kStatus) GoDiscovery_GetExtendedInfo(GoDiscovery discovery, k32u deviceId, GoDiscoveryExtInfo* info, kAlloc allocator);
/**
* Sets the enumeration period that will be used when background updates are enabled via StartEnum.
*
* @public @memberof GoDiscovery
* @version Introduced in firmware 4.0.10.27
* @param discovery Discovery object.
* @param period Enumeration period, in microseconds.
* @return Operation status.
*/
GoFx(kStatus) GoDiscovery_SetEnumPeriod(GoDiscovery discovery, k64u period);
/**
* Sets the enumeration callback to be used when background updates are enabled via StartEnum.
*
* @public @memberof GoDiscovery
* @version Introduced in firmware 4.0.10.27
* @param discovery Discovery object.
* @param function Enumeration callback function (or kNULL to unregister).
* @param receiver Receiver argument for callback.
* @return Operation status.
*/
GoFx(kStatus) GoDiscovery_SetEnumHandler(GoDiscovery discovery, GoDiscoveryEnumFx function, kPointer receiver);
/**
* Starts periodic background discovery enumeration.
*
* @public @memberof GoDiscovery
* @version Introduced in firmware 4.0.10.27
* @param discovery Discovery object.
* @param waitFirst kTRUE to block until first enumeration cycle is completed; kFALSE otherwise.
* @return Operation status.
*/
GoFx(kStatus) GoDiscovery_StartEnum(GoDiscovery discovery, kBool waitFirst);
/**
* Stops periodic background discovery enumeration.
*
* @public @memberof GoDiscovery
* @version Introduced in firmware 4.0.10.27
* @param discovery Discovery object.
* @return Operation status.
*/
GoFx(kStatus) GoDiscovery_StopEnum(GoDiscovery discovery);
/**
* Enable or disable running the Gocator Discovery Protocol over the specified
* host interface which the given address.
*
* @public @memberof GoDiscovery
* @version Introduced in firmware 4.6.7.157
* @param discovery Discovery object.
* @param address IP address of interface over which the discovery protocol should run.
* @param enable Select whether to enable or disable the interface.
* @return Operation status.
*/
GoFx(kStatus) GoDiscovery_SetOneInterface(GoDiscovery discovery, kIpAddress* address, kBool enable);
/**
* Enable running the Gocator Discovery Protocol over all the host interfaces.
*
* @public @memberof GoDiscovery
* @version Introduced in firmware 4.6.7.157
* @param discovery Discovery object.
* @param enable Select whether to enable or disable the interface.
* @return Operation status.
*/
GoFx(kStatus) GoDiscovery_SetAllInterface(GoDiscovery discovery, kBool enable);
/**
* Enables or disables compatibility mode.
*
* Compatibility mode allows discovery of older firmware but increase
* broadcast traffic.
*
* @public @memberof GoDiscovery
* @version Introduced in firmware 5.2.18.3
* @param discovery Discovery object.
* @param enable Enable or disable compatibility mode.
* @return Operation status.
*/
GoFx(kStatus) GoDiscovery_EnableCompatMode(GoDiscovery discovery, kBool enable);
/**
* Gets the current state of compatibility mode.
*
* @public @memberof GoDiscovery
* @version Introduced in firmware 5.2.18.3
* @param discovery Discovery object.
* @return Compatibility enable flag.
*/
GoFx(kBool) GoDiscovery_CompatModeEnabled(GoDiscovery discovery);
#include <GoSdk/Internal/GoDiscovery.x.h>
#endif