Files
PLFM_RADAR/14_RADAR_Old_version/Firmware/Microcontroller/iiod_private.h
T
2026-03-19 01:21:46 +00:00

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