Add files via upload
This commit is contained in:
@@ -0,0 +1,178 @@
|
||||
/***************************************************************************//**
|
||||
* @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
|
||||
Reference in New Issue
Block a user