Select Git revision
TileButton.cpp
protocol.h 1.73 KiB
#pragma once
#include <stdint.h>
#include <sys/ipc.h>
#define MAX_DAEMON_PACKET_DATA_SIZE 4096
#define MSG_QUEUE_KEY "/var/run/sibyl"
#define MSG_QUEUE_PROJ_ID 69
/**
* typedef daemon_measurement_datatype_t - Enum of possible datatypes for `daemon_measurement_t`.
*/
typedef enum {
CHAR,
INT64,
UINT64,
FLOAT64
} __attribute__ ((__packed__)) daemon_measurement_datatype_t;
/**
* typedef daemon_measurement_t - Structure to hold a userspace measurement.
* @measurement_id: The id of the measurement. Every sender should have a unique id.
* @daemon_measurement_datatype: Datatype of the data. All values in `data` must be of this type.
* @length: How many types of `datatype` are in `data`. Must not exceed (`length` * daemon_measurement_datatype_size(`datatype`)) > MAX_DAEMON_PACKET_DATA_SIZE.
* @data: The measurement data.
*/
typedef struct {
uint8_t measurement_id;
daemon_measurement_datatype_t datatype;
uint16_t length;
uint8_t data[MAX_DAEMON_PACKET_DATA_SIZE];
} daemon_measurement_t;
/**
* daemon_measurement_datatype_size() - Get the size of a `daemon_measurement_datatype_t`.
* @arg1: The datatype to get the size of.
*
* Returns the size.
*/
int daemon_measurement_datatype_size(daemon_measurement_datatype_t datatype);
/**
* daemon_measurement_check() - Check if a `daemon_measurement_t` is correct.
* @arg1: Measurement to check.
*
* Checks if the datatype size * length not exceeds MAX_DAEMON_PACKET_DATA_SIZE.
*
* Returns 0 on success, -1 on error.
*/
int daemon_measurement_check(daemon_measurement_t* daemon_measurement);
/**
* msg_queue_key() - Return the message queue key for the userspace communication.
*
* Returns the key of the message queue or -1 on error.
*/
key_t msg_queue_key();