179 lines
5.2 KiB
C
179 lines
5.2 KiB
C
/***************************************************************************//**
|
|
* @file iiod_private.h
|
|
* @brief Private header file of iiod
|
|
* @author Mihail Chindris (mihail.chindris@analog.com)
|
|
********************************************************************************
|
|
* Copyright 2022(c) Analog Devices, Inc.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
*
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
*
|
|
* 3. Neither the name of Analog Devices, Inc. nor the names of its
|
|
* contributors may be used to endorse or promote products derived from this
|
|
* software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. “AS IS” AND ANY EXPRESS OR
|
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
|
* EVENT SHALL ANALOG DEVICES, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
|
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*******************************************************************************/
|
|
|
|
#ifndef IIOD_PRIVATE_H
|
|
#define IIOD_PRIVATE_H
|
|
|
|
#include "iio.h"
|
|
|
|
#define IIOD_WR 0x1
|
|
#define IIOD_ENDL 0x2
|
|
#define IIOD_RD 0x4
|
|
#define IIOD_PARSER_MAX_BUF_SIZE 128
|
|
|
|
#define IIOD_STR(cmd) {(cmd), sizeof(cmd) - 1}
|
|
|
|
#define IIOD_CTX(desc, conn) {.instance = (desc)->app_instance,\
|
|
.conn = (conn)->conn}
|
|
|
|
|
|
/* Used to store a string and its size */
|
|
struct iiod_str {
|
|
char *str;
|
|
uint32_t len;
|
|
};
|
|
|
|
/*
|
|
* Commads are the ones documented int the link:
|
|
* https://wiki.analog.com/resources/tools-software/linux-software/libiio_internals#the_network_backend_and_iio_daemon
|
|
*/
|
|
enum iiod_cmd {
|
|
IIOD_CMD_HELP,
|
|
IIOD_CMD_EXIT,
|
|
IIOD_CMD_PRINT,
|
|
IIOD_CMD_VERSION,
|
|
IIOD_CMD_TIMEOUT,
|
|
IIOD_CMD_OPEN,
|
|
IIOD_CMD_CLOSE,
|
|
IIOD_CMD_READ,
|
|
IIOD_CMD_WRITE,
|
|
IIOD_CMD_READBUF,
|
|
IIOD_CMD_WRITEBUF,
|
|
IIOD_CMD_GETTRIG,
|
|
IIOD_CMD_SETTRIG,
|
|
IIOD_CMD_SET
|
|
};
|
|
|
|
/*
|
|
* Structure to be filled after a command is parsed.
|
|
* Depending of cmd some fields are set or not
|
|
*/
|
|
struct comand_desc {
|
|
enum iiod_cmd cmd;
|
|
uint32_t mask;
|
|
uint32_t timeout;
|
|
uint32_t sample_count;
|
|
uint32_t bytes_count;
|
|
uint32_t count;
|
|
bool cyclic;
|
|
char device[MAX_DEV_ID];
|
|
char channel[MAX_CHN_ID];
|
|
char attr[MAX_ATTR_NAME];
|
|
char trigger[MAX_TRIG_ID];
|
|
enum iio_attr_type type;
|
|
};
|
|
|
|
/* Used to store buffer indexes for non blocking transfers */
|
|
struct iiod_buff {
|
|
char *buf;
|
|
uint32_t idx;
|
|
uint32_t len;
|
|
};
|
|
|
|
/* Result after executing a command. */
|
|
struct iiod_run_cmd_result {
|
|
uint32_t val;
|
|
/* If set. Val needs to be sent */
|
|
bool write_val;
|
|
/* If buf.len != 0 buf has to be sent */
|
|
struct iiod_buff buf;
|
|
};
|
|
|
|
/* Internal structure to handle a connection state */
|
|
struct iiod_conn_priv {
|
|
/* User instance of the connection to be sent in iiod_ctx */
|
|
void *conn;
|
|
/* Unset when can be used from the connection pool */
|
|
bool used;
|
|
|
|
/* Command data after parsed */
|
|
struct comand_desc cmd_data;
|
|
/* Result of an executed cmd */
|
|
struct iiod_run_cmd_result res;
|
|
/* IIOD States */
|
|
enum {
|
|
/* Reading line until \n */
|
|
IIOD_READING_LINE,
|
|
/* Execut cmd without I/O operations */
|
|
IIOD_RUNNING_CMD,
|
|
/* Write result of executed cmd */
|
|
IIOD_WRITING_CMD_RESULT,
|
|
/* I/O operations for READBUF and WRITEBUF cmds */
|
|
IIOD_RW_BUF,
|
|
/* I/O operations for WRITE cmd */
|
|
IIOD_READING_WRITE_DATA,
|
|
/* Set when a operation is finalized */
|
|
IIOD_LINE_DONE,
|
|
/* Pushing cyclic buffer until IIO device is closed */
|
|
IIOD_PUSH_CYCLIC_BUFFER,
|
|
} state;
|
|
|
|
/* Buffer to store received line */
|
|
char parser_buf[IIOD_PARSER_MAX_BUF_SIZE];
|
|
/* Index in parser_buf. For nonblocking operation */
|
|
uint32_t parser_idx;
|
|
/* Buffer to store raw data (attributes or buffer data).*/
|
|
char *payload_buf;
|
|
/* Length of payload_buf_len */
|
|
uint32_t payload_buf_len;
|
|
/* Used in nonbloking transfers to save indexes */
|
|
struct iiod_buff nb_buf;
|
|
|
|
/* Mask of current opened buffer */
|
|
uint32_t mask;
|
|
/* Buffer to store mask as a string */
|
|
char buf_mask[10];
|
|
/* Context for strtok_r function */
|
|
char *strtok_ctx;
|
|
/* True if the device was open with cyclic buffer flag */
|
|
bool is_cyclic_buffer;
|
|
};
|
|
|
|
/* Private iiod information */
|
|
struct iiod_desc {
|
|
/* Pool of iiod connections */
|
|
struct iiod_conn_priv conns[IIOD_MAX_CONNECTIONS];
|
|
/* Application operations */
|
|
struct iiod_ops ops;
|
|
/* Application instance */
|
|
void *app_instance;
|
|
/* Address of xml */
|
|
char *xml;
|
|
/* XML length in bytes */
|
|
uint32_t xml_len;
|
|
/* Backend used by IIOD */
|
|
enum physical_link_type phy_type;
|
|
};
|
|
|
|
#endif //IIOD_PRIVATE_H
|