Program Listing for File psyiagesdk.h¶
↰ Return to documentation for file (include/psyiage/psyiagesdk.h
)
#ifndef PSYIAGESDK_H_
#define PSYIAGESDK_H_
#include <stdint.h>
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif
#if defined _WIN32 || defined __CYGWIN__
#ifdef WIN_EXPORT
// Exporting...
#ifdef __GNUC__
#define PSYIAGE_API __attribute__ ((dllexport))
#else
#define PSYIAGE_API __declspec(dllexport) // Note: actually gcc seems to also supports this syntax.
#endif
#else
#ifdef __GNUC__
#define PSYIAGE_API __attribute__ ((dllimport))
#else
#define PSYIAGE_API __declspec(dllimport) // Note: actually gcc seems to also supports this syntax.
#endif
#endif
#define FUTURE_PSYIAGE_API
#else
#if __GNUC__ >= 4
#define PSYIAGE_API __attribute__ ((visibility ("default")))
#define FUTURE_PSYIAGE_API __attribute__ ((visibility ("hidden")))
#else
#define PSYIAGE_API
#define FUTURE_PSYIAGE_API
#endif
#endif
//---------------------------------------------------------------------
// PSYGIG Mobility IoT SDK API Declarations
//---------------------------------------------------------------------
typedef enum _psyiage_error_code
{
PSYIAGE_ERROR_SUCCESS = 0,
PSYIAGE_ERROR_INVALID_PARAMETER,
PSYIAGE_ERROR_UNEXPECTED,
PSYIAGE_ERROR_NOT_YET_IMPLEMENTED,
PSYIAGE_ERROR_METRIC_NOT_FOUND,
PSYIAGE_ERROR_FILE_NOT_FOUND,
PSYIAGE_ERROR_OPEN_FAILED,
PSYIAGE_ERROR_CLOSE_FAILED,
PSYIAGE_ERROR_SEEK_FAILED,
PSYIAGE_ERROR_READ_FAILED,
PSYIAGE_ERROR_WRITE_FAILED,
PSYIAGE_ERROR_FLUSH_FAILED,
PSYIAGE_ERROR_ACCESS_DENIED,
PSYIAGE_ERROR_INVALID_DATA,
PSYIAGE_ERROR_NO_DATA,
PSYIAGE_ERROR_SIGNATURE_MISMATCH,
PSYIAGE_ERROR_CHECKSUM_MISMATCH,
PSYIAGE_ERROR_INSUFFICIENT_MEMORY,
PSYIAGE_ERROR_INSUFFICIENT_SPACE,
PSYIAGE_ERROR_THREAD_CREATE,
PSYIAGE_ERROR_MUTEX_INIT,
PSYIAGE_ERROR_REST_INIT,
PSYIAGE_ERROR_MQTT_CONNECT,
PSYIAGE_ERROR_RESOURCE_CONTENTION,
PSYIAGE_ERROR_MISSING_PLUGINS,
PSYIAGE_ERROR_MAX_SESSIONS_REACHED,
} psyiage_error_code;
typedef void* psyiage_handle;
PSYIAGE_API const char* psyiage_get_version( void );
PSYIAGE_API int psyiage_init(psyiage_handle *handle);
PSYIAGE_API int psyiage_cleanup(psyiage_handle *handle);
typedef enum _psyiage_sink_data_format
{
PSYIAGE_DATA_FORMAT_TEXT,
PSYIAGE_DATA_FORMAT_CSV,
PSYIAGE_DATA_FORMAT_JSON,
PSYIAGE_DATA_FORMAT_YAML,
PSYIAGE_DATA_FORMAT_INFLUX,
} psyiage_sink_data_format;
typedef enum _psyiage_sink_type
{
PSYIAGE_SINK_FILE,
PSYIAGE_SINK_FSTREAM,
PSYIAGE_SINK_UDP,
PSYIAGE_SINK_TCP,
PSYIAGE_SINK_MQTT,
PSYIAGE_SINK_HTTP,
PSYIAGE_SINK_INFLUXDB,
PSYIAGE_SINK_PSYGIG
} psyiage_sink_type;
typedef enum _psyiage_endpoint_type
{
PSYIAGE_ENDPOINT_SESSION,
PSYIAGE_ENDPOINT_METRICS,
PSYIAGE_ENDPOINT_EVENTS,
PSYIAGE_ENDPOINT_LOGS,
PSYIAGE_ENDPOINT_PROFILE_CPU,
PSYIAGE_NUM_ENDPOINTS
} psyiage_endpoint_type;
typedef struct _psyiage_sink_file_cfg {
const char* dir;
const char* basename;
} psyiage_sink_file_cfg;
typedef struct _psyiage_sink_fstream_cfg {
FILE *fd;
} psyiage_sink_fstream_cfg;
typedef struct _psyiage_sink_udp_cfg {
const char* host;
int port;
} psyiage_sink_udp_cfg;
typedef struct _psyiage_sink_tcp_cfg {
const char* host;
int port;
} psyiage_sink_tcp_cfg;
typedef struct _psyiage_sink_mqtt_cfg {
const char* server;
const char* clientid;
const char* username;
const char* password;
int mqttversion;
int timeoutsecs;
int qos;
const char* topics[PSYIAGE_NUM_ENDPOINTS];
} psyiage_sink_mqtt_cfg;
typedef struct _psyiage_sink_http_cfg {
const char* server;
const char* username;
const char* password;
const char* api[PSYIAGE_NUM_ENDPOINTS];
} psyiage_sink_http_cfg;
typedef struct _psyiage_sink_influxdb_cfg {
const char* server;
} psyiage_sink_influxdb_cfg;
typedef struct _psyiage_sink_psygig_cfg {
int apiversion;
const char* server;
const char *app_id;
const char *app_secret;
} psyiage_sink_psygig_cfg;
#define PSYGIGAPI_DEFAULT 0
#define PSYGIGAPI_V1 1
typedef struct _psyiage_sink_cfg {
psyiage_sink_type type;
psyiage_sink_data_format format;
union {
psyiage_sink_file_cfg file;
psyiage_sink_fstream_cfg fstream;
psyiage_sink_udp_cfg udp;
psyiage_sink_tcp_cfg tcp;
psyiage_sink_mqtt_cfg mqtt;
psyiage_sink_http_cfg http;
psyiage_sink_influxdb_cfg influxdb;
psyiage_sink_psygig_cfg psygig;
};
} psyiage_sink_cfg;
PSYIAGE_API int psyiage_add_sink(psyiage_handle handle, psyiage_sink_cfg* cfg);
PSYIAGE_API int psyiage_remove_sink(psyiage_handle handle, int index);
PSYIAGE_API int psyiage_get_num_sinks(psyiage_handle handle, int *numsinks);
PSYIAGE_API int psyiage_get_sink_info(psyiage_handle handle, int index, psyiage_sink_cfg* sinkinfo);
PSYIAGE_API int psyiage_start_session(psyiage_handle handle, char *sessionname);
#define MAX_PSYIAGE_SESSION_NAME_LENGTH 64
#define MAX_DEVICE_ID_LENGTH 128
typedef struct _psyiage_session_info {
char name[MAX_PSYIAGE_SESSION_NAME_LENGTH + 1];
char deviceid[MAX_DEVICE_ID_LENGTH + 1];
double timestamp;
double duration;
uint64_t nummetrics;
uint64_t numevents;
} psyiage_session_info;
PSYIAGE_API int psyiage_get_current_session(psyiage_handle handle, psyiage_session_info *session);
PSYIAGE_API int psyiage_stop_session(psyiage_handle handle);
enum { PSYIAGE_DBGLVL_DISABLE, PSYIAGE_DBGLVL_FATAL, PSYIAGE_DBGLVL_ERROR, PSYIAGE_DBGLVL_WARN, PSYIAGE_DBGLVL_INFO, PSYIAGE_DBGLVL_DEBUG, PSYIAGE_DBGLVL_TRACE, PSYIAGE_DBGLVL_MIN = PSYIAGE_DBGLVL_DISABLE, PSYIAGE_DBGLVL_MAX = PSYIAGE_DBGLVL_TRACE };
PSYIAGE_API int psyiage_set_debug_level(psyiage_handle handle, int level);
// end of admin
PSYIAGE_API int psyiage_metric_enable_poll_system_resources(psyiage_handle handle, int periodms);
PSYIAGE_API int psyiage_metric_record_values_numeric(psyiage_handle handle, char *names[], float values[], int nummetrics);
FUTURE_PSYIAGE_API int psyiage_metric_record_values_string(psyiage_handle handle, char *names[], char *values[], int nummetrics);
FUTURE_PSYIAGE_API int psyiage_metric_record_values_blob(psyiage_handle handle, char *names[], void *values, int valuesize, int nummetrics);
typedef struct _psyiage_pointcloud_data
{
float x;
float y;
float z;
unsigned int rgb;
} psyiage_pointcloud_data;
FUTURE_PSYIAGE_API int psyiage_metric_record_pointcloud(psyiage_handle handle, char *name, psyiage_pointcloud_data *value, int numpoints);
PSYIAGE_API int psyiage_metric_get_values_numeric(psyiage_handle handle, char *name, unsigned long long timestamps[], float values[], int *numvalues);
FUTURE_PSYIAGE_API int psyiage_metric_get_values_string(psyiage_handle handle, char *name, unsigned long long timestamps[], char* values[], int *numvalues);
FUTURE_PSYIAGE_API int psyiage_metric_get_values_blob(psyiage_handle handle, char *name, unsigned long long timestamps[], void* values, int valuesize, int *numvalues);
typedef enum _psyiage_metric_file_type
{
PSYIAGE_METRIC_FILE_CSV,
PSYIAGE_METRIC_FILE_TEXT,
PSYIAGE_METRIC_FILE_JSON,
PSYIAGE_METRIC_FILE_YAML,
PSYIAGE_METRIC_FILE_PCD
} psyiage_metric_file_type;
FUTURE_PSYIAGE_API int psyiage_metric_import_file(psyiage_handle handle, psyiage_metric_file_type type, char* path );
// end of metric
typedef enum _psyiage_event_level
{
PSYIAGE_EVENT_LEVEL_INFO,
PSYIAGE_EVENT_LEVEL_WARNING,
PSYIAGE_EVENT_LEVEL_ERROR,
PSYIAGE_EVENT_LEVEL_CRITICAL,
PSYIAGE_EVENT_NUM_LEVELS
} psyiage_event_level;
PSYIAGE_API int psyiage_event_report(psyiage_handle handle, psyiage_event_level level, char *source, int eventid, const char* message);
FUTURE_PSYIAGE_API int psyiage_event_enable_auto_report_os_faults(psyiage_handle handle, int enable);
FUTURE_PSYIAGE_API int psyiage_event_import_file(psyiage_handle handle, char *path);
// end of event
typedef enum _psyiage_log_level
{
PSYIAGE_LOG_LEVEL_DEBUG,
PSYIAGE_LOG_LEVEL_INFO,
PSYIAGE_LOG_LEVEL_WARNING,
PSYIAGE_LOG_LEVEL_ERROR,
PSYIAGE_LOG_LEVEL_FATAL
} psyiage_log_level;
FUTURE_PSYIAGE_API int psyiage_logf(psyiage_handle handle, psyiage_log_level level, char *format, ...);
#ifdef __cplusplus
extern std::ostream psyiage_log;
#endif
enum {
PSYIAGE_LOG_FLAG_NONE = 0,
PSYIAGE_LOG_FLAG_SYSLOG = 1 << 0,
PSYIAGE_LOG_FLAG_OLD = 1 << 16,
PSYIAGE_LOG_FLAG_COMPRESSED = 1 << 17,
PSYIAGE_LOG_FLAG_ALL = 0xffffffff
};
PSYIAGE_API int psyiage_log_import_file(psyiage_handle handle, char *path, uint32_t flags);
PSYIAGE_API int psyiage_log_glob_free(char *filelist[], uint32_t *flagslist, int numfiles);
PSYIAGE_API int psyiage_log_glob_known_log_files(char **filelist[], uint32_t *flagslist[], int* numfiles );
PSYIAGE_API int psyiage_log_monitor_log_file(psyiage_handle handle, char *path, int enable);
// end of log
// Reference: sololink/flightcode/video/vid/vidlaunch.cpp
typedef struct _psyiage_video_cfg {
const char *viddev;
const char* server;
const char *roomid;
int variablemode;
int minframerate;
int maxframerate;
int minbitrate;
int maxbitrate;
} psyiage_video_cfg;
PSYIAGE_API int psyiage_video_stream_start(psyiage_handle handle, psyiage_video_cfg *cfg);
PSYIAGE_API int psyiage_video_get_num_streams(psyiage_handle handle, int *numstreams);
PSYIAGE_API int psyiage_video_stream_stop(psyiage_handle handle, int index);
FUTURE_PSYIAGE_API int psyiage_video_import(psyiage_handle handle, char *path);
// end of video
#define MAX_CACHES 5
typedef struct _psyiage_cpuinfo {
uint32_t threadspercore;
uint32_t coresperpkg;
uint32_t numpkgs;
char vendor[32];
char model[64];
char architecture[32];
char features[128];
enum {
ARCH_UNKNOWN = -1,
ARCH_X86,
ARCH_IA64,
ARCH_AARCH64,
ARCH_ARM,
ARCH_MIPS,
ARCH_PPC
} archtype;
enum {
ENDIAN_BIG,
ENDIAN_LITTLE
} endian;
float clockmhz;
union {
struct {
int family;
int model;
int stepping;
char vendor[13];
char brand[49];
char uarch[32];
} X86Info;
struct {
int implementer;
int variant;
int part;
int revision;
} Aarch64Info;
struct {
int implementer;
int architecture;
int variant;
int part;
int revision;
} ArmInfo;
struct {
} MipsInfo;
struct {
char platform[64];
char model[64];
char machine[64];
char cpu[64];
char isa[64];
char uarch[64];
} PPCInfo;
};
struct {
uint8_t level;
uint32_t size;
uint32_t linesize;
uint8_t associativity;
enum {
unified,
instruction,
data,
trace,
} type;
} cache[MAX_CACHES];
unsigned int numcaches;
} psyiage_cpuinfo;
typedef struct _psyiage_meminfo
{
uint64_t aveloads[3];
uint64_t totalram;
uint64_t freeram;
uint64_t sharedram;
uint64_t bufferram;
uint64_t totalswap;
uint64_t freeswap;
uint64_t totalhigh;
uint64_t freehigh;
uint32_t numprocs;
} psyiage_meminfo;
#define MAX_NUM_FS 16
typedef struct _psyiage_fsinfo
{
struct
{
char device[32];
char mountdir[256];
char filesystem[32];
char mountopts[32];
uint64_t blksize;
uint64_t fragsize;
uint64_t totalblks;
uint64_t freeblks;
uint64_t availblks;
uint64_t totalino;
uint64_t freeino;
uint64_t availino;
uint32_t fsid;
uint32_t fsflags;
uint32_t fnamemax;
uint64_t size;
} fs[MAX_NUM_FS];
unsigned int numfs;
} psyiage_fsinfo;
typedef struct _psyiage_osinfo {
char name[64];
char fullname[64];
char codename[64];
unsigned int major;
unsigned int minor;
unsigned int patch;
unsigned int build_number;
struct {
char name[64];
unsigned int major;
unsigned int minor;
unsigned int patch;
unsigned int build_number;
} kernel;
} psyiage_osinfo;
#define MAX_USB_DEVS 16
typedef struct _psyiage_usbinfo {
struct {
char product[64];
char manufacturer[64];
char deviceclass[64];
char version[64];
char serial[64];
char usbver[16];
uint16_t productid;
uint16_t vendorid;
} device[MAX_USB_DEVS];
unsigned int numdev;
} psyiage_usbinfo;
#define MAX_DISKS 16
#define MAX_PARTS 16
typedef struct _psyiage_diskinfo {
struct {
char devname[16];
char model[64];
char vendor[64];
char serial[64];
uint64_t size;
struct {
int partnum;
uint64_t start;
uint64_t size;
} partition[MAX_PARTS];
int numparts;
} disk[MAX_DISKS];
unsigned int numdisks;
} psyiage_diskinfo;
#define MAX_PCI_DEVS 16
typedef struct _psyiage_pciinfo {
struct {
uint16_t domain;
uint8_t bus;
uint8_t dev;
uint8_t fun;
char vendor[64];
char device[64];
uint16_t vendorid;
uint16_t deviceid;
struct {
uint8_t baseclass;
uint8_t subclass;
uint8_t progintf;
} classcode;
uint8_t revision;
} device[MAX_PCI_DEVS];
unsigned int numdev;
} psyiage_pciinfo;
#define MAX_NET_INTF 8
typedef struct _psyiage_netinfo {
struct {
char devname[16];
char macaddr[32];
char ipaddr[32];
char ip6addr[64];
} interface[MAX_NET_INTF];
unsigned int numintf;
} psyiage_netinfo;
typedef struct _psyiage_sysinfo {
long uptime;
psyiage_cpuinfo cpuinfo;
psyiage_meminfo meminfo;
psyiage_fsinfo fsinfo;
psyiage_osinfo osinfo;
psyiage_usbinfo usbinfo;
psyiage_diskinfo diskinfo;
psyiage_netinfo netinfo;
psyiage_pciinfo pciinfo;
} psyiage_sysinfo;
PSYIAGE_API int psyiage_sysinfo_get(psyiage_handle handle, psyiage_sysinfo *sysinfo);
PSYIAGE_API int psyiage_sysinfo_export_report(psyiage_handle handle, char* path);
// end of sysinfo
PSYIAGE_API int psyiage_crash_install_core_dump_handler(psyiage_handle handle);
PSYIAGE_API int psyiage_crash_enable_report_on_fatal_signal(psyiage_handle handle, int enable);
FUTURE_PSYIAGE_API int psyiage_crash_start_crash_monitor(psyiage_handle handle);
// end of crash
typedef enum _psyiage_benchmark_type
{
PSYIAGE_BENCH_CPU,
PSYIAGE_BENCH_RAM,
PSYIAGE_BENCH_GPU,
PSYIAGE_BENCH_HDD,
PSYIAGE_BENCH_NET,
} psyiage_benchmark_type;
FUTURE_PSYIAGE_API int psyiage_benchmark_run(psyiage_handle handle, psyiage_benchmark_type benchmark, float *score);
// end of benchmark
PSYIAGE_API int psyiage_profile_enable_profiling(psyiage_handle handle, int periodms);
FUTURE_PSYIAGE_API int psyiage_profile_code_begin(psyiage_handle handle, const char* funcname, const char* filename, unsigned int lineno);
FUTURE_PSYIAGE_API int psyiage_profile_code_end(psyiage_handle handle);
// end of profile
typedef enum _psyiage_diag_type
{
PSYIAGE_DIAG_CPU,
PSYIAGE_DIAG_RAM,
PSYIAGE_DIAG_GPU,
PSYIAGE_DIAG_HDD,
PSYIAGE_DIAG_NET,
} psyiage_diag_type;
typedef struct _psyiage_diag_result
{
int result;
int numerrs;
char *errstr;
} psyiage_diag_result;
FUTURE_PSYIAGE_API int psyiage_diag_run(psyiage_handle handle, psyiage_diag_type diagnostic, psyiage_diag_result *result);
FUTURE_PSYIAGE_API int psyiage_diag_export_report(psyiage_handle handle, char* path);
// end of diag
#ifdef __cplusplus
}
#endif
#endif /* PSYIAGESDK_H_ */