#ifndef WS_CLIENT_H #define WS_CLIENT_H #include #include #ifdef __cplusplus extern "C" { #endif #define WS_MAX_SERVICES 20 #define WS_SERVICE_NAME_LEN 16 typedef enum { WS_STATE_DISCONNECTED = 0, WS_STATE_CONNECTING, WS_STATE_CONNECTED, WS_STATE_ERROR, } ws_state_t; typedef enum { SVC_STOPPED = 0, SVC_WARNING, SVC_RUNNING, } ws_svc_status_t; typedef struct { char name[WS_SERVICE_NAME_LEN]; ws_svc_status_t status; } ws_service_t; typedef struct { float cpu_pct; float mem_pct; uint32_t mem_used_mb; float disk_pct; float cpu_temp; float uptime_hrs; float net_rx_kbps; float net_tx_kbps; ws_service_t services[WS_MAX_SERVICES]; uint8_t service_count; uint32_t last_update; // timestamp from server bool valid; // set true after first successful parse /* Broken-down local time from Pi for RTC sync */ uint16_t time_year; uint8_t time_month; uint8_t time_day; uint8_t time_hour; uint8_t time_minute; uint8_t time_second; bool time_valid; // true when local_time object was parsed } pi_stats_t; typedef void (*ws_data_callback_t)(const pi_stats_t *stats); typedef void (*ws_state_callback_t)(ws_state_t state); void ws_client_init(const char *uri); void ws_client_start(void); void ws_client_stop(void); void ws_client_reconnect(void); ws_state_t ws_client_get_state(void); void ws_client_get_stats(pi_stats_t *out); void ws_client_set_data_callback(ws_data_callback_t cb); void ws_client_set_state_callback(ws_state_callback_t cb); #ifdef __cplusplus } #endif #endif