UmberHubManager/api/lib/BrainStem2_CCA/Link_CCA.h

148 lines
7.5 KiB
C

/////////////////////////////////////////////////////////////////////
// //
// file: Link_CCA.h
// //
/////////////////////////////////////////////////////////////////////
// //
// Copyright (c) 2024 Acroname Inc. - All Rights Reserved //
// //
// This file is part of the BrainStem release. See the license.txt //
// file included with this package or go to //
// https://acroname.com/software/brainstem-development-kit //
// for full license details. //
/////////////////////////////////////////////////////////////////////
#ifndef __Link_CCA_H__
#define __Link_CCA_H__
#include "CCA_Core.h"
#include "aPacket.h"
#ifdef CCA_PACK
#pragma pack(push, CCA_PACK)
#endif
/** CCA linkSpec structure - It contains the necessary information for connecting to a BrainStem
* module. */
struct linkSpec_CCA {
unsigned int type;/**< The transport type of this spec. */
unsigned int serial_num;/**< The serial number of the module */
unsigned int module;/**< The module address */
unsigned int router;/**< The BrainStem network router address */
unsigned int router_serial_num;/**< The BrainStem network router serial number */
unsigned int model;/**< The model type */
unsigned int usb_id;/**< The usb_id of the BrainStem module. */
unsigned int ip_address;/**< The IP4 address of the module. */
unsigned int ip_port;/**< The TCP port for socket connection on the module. */
unsigned int baudrate;/**< The serial port baudrate */
char port[100];/**< The serial port path or name */
};
/** StreamStatusEntry structure - It contains members of streaming entries
* in the form of key value pairs. Keys are comprised of the devices module address,
* command, option, index, and subindex API values. */
struct StreamStatusEntry_CCA {
unsigned long long key; /**< The stream key (64bit).*/
unsigned int value; /**< The value associated with the key (32bit). */
};
#ifdef CCA_PACK
#pragma pack(pop)
#endif
/// \defgroup LinkEntity Link Entity
/// The Link class provides link level access to streaming information.
#ifdef __cplusplus
extern "C" {
#endif
//Function signature for streaming callbacks.
/// \param p reference to streaming packet
/// \param pRef User provided reference
/// \return non zero error code on failure.
/// Return value is not currently used.
typedef unsigned char(*cStreamCallback_t)(const struct aPacket* p, void* pRef);
/// Enables streaming for the supplied criteria.
/// \param id Unique identifier for the internally created stem.
/// \param result object, containing NO_ERROR or a non zero Error code.
/// \param moduleAddress Address to filter on.
/// \param cmd cmd to filter by (supports Wildcards)
/// \param option option to filter by (supports Wildcards)
/// \param index index to filter by (supports Wildcards)
/// \param enable True - Enables streaming; False - disables streaming
aLIBEXPORT void __stdcall link_enableStream(unsigned int* id,
struct Result* result,
const unsigned char moduleAddress,
const unsigned char cmd,
const unsigned char option,
const unsigned char index,
const bool enable);
/// Get linkSpecifier
/// \param id Unique identifier for the internally created stem.
/// \param result object, containing NO_ERROR or a non zero Error code.
/// \param spec - allocated linkspec struct will be filled with spec.
aLIBEXPORT void __stdcall link_getLinkSpecifier(unsigned int* id, struct Result* result, struct linkSpec_CCA* spec);
/// Registers a callback function based on a specific module, cmd, option, and index.
/// \param id Unique identifier for the internally created stem.
/// \param result object, containing NO_ERROR or a non zero Error code.
/// \param cmd cmd to filter by (supports Wildcards)
/// \param option option to filter by (supports Wildcards)
/// \param index index to filter by (supports Wildcards)
/// \param enable True - installs/updates callback and ref; False - uninstalls callback
/// \param cb Callback to be executed when a new packet matching the criteria is received.
/// \param pRef Pointer to user reference for use inside the callback function.
/// \details ::aErrNotFound - Item not found (uninstalling only)
/// \details ::aErrNone - success
aLIBEXPORT void __stdcall link_registerStreamCallback(
unsigned int* id,
struct Result* result,
const unsigned char moduleAddress,
const unsigned char cmd,
const unsigned char option,
const unsigned char index,
const bool enable,
cStreamCallback_t cb,
void* pRef);
/// Gets all available stream values based on the search criteria.
/// \param id Unique identifier for the internally created stem.
/// \param result object, containing NO_ERROR or a non zero Error code.
/// \param moduleAddress Address to filter on (supports Wildcards)
/// \param cmd cmd to filter by (supports Wildcards)
/// \param option option to filter by (supports Wildcards)
/// \param index index to filter by (supports Wildcards)
/// \param subindex subindex to filter by (supports Wildcards)
/// \param buffer Buffer of user allocated memory to be filled with stream data
/// Note: Link::getStreamKeyElement should be used to decode the keys
/// \param bufferLength Number of elements the buffer can hold.
/// \details ::aErrParam if status or unloadedSize is null
/// \details ::aErrNone - success
aLIBEXPORT void __stdcall link_getStreamStatus(unsigned int* id,
struct Result* result,
const unsigned char moduleAddress,
const unsigned char cmd,
const unsigned char option,
const unsigned char index,
const unsigned char subindex,
struct StreamStatusEntry_CCA* buffer,
const unsigned int bufferLength);
/// Convenience function to unpack a stream key.
/// \param key The key to be unpacked
/// \param element The element to unpack from the key.
aLIBEXPORT void __stdcall link_getStreamKeyElement(struct Result* result,
const unsigned long long key,
const unsigned char element);
#ifdef __cplusplus
}
#endif
#endif