![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
this is testing
Diff: app/src/iio_transport.c
- Revision:
- 0:3afcd581558d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/src/iio_transport.c Thu Jan 14 18:54:16 2021 +0530 @@ -0,0 +1,184 @@ +/***************************************************************************//** + * @file iio_transport.c + * @brief Implementation of iio transport layer interface for AD7606 +******************************************************************************** + * Copyright (c) 2020 Analog Devices, Inc. + * + * This software is proprietary to Analog Devices, Inc. and its licensors. + * By using this software you agree to the terms of the associated + * Analog Devices Software License Agreement. +*******************************************************************************/ + +/******************************************************************************/ +/***************************** Include Files **********************************/ +/******************************************************************************/ + +#include "iio_transport.h" + +/******************************************************************************/ +/********************** Macros and Constants Definition ***********************/ +/******************************************************************************/ + +/* Max buffer length to hold IIO client data/command */ +#define IIO_CMD_DATA_BUFF_SIZE (100) + +/******************************************************************************/ +/*************************** Types Declarations *******************************/ +/******************************************************************************/ + +/* UART descriptor to read/write UART peripheral data */ +static struct uart_desc *uart_desc = NULL; + +/* IIO command buffer */ +static volatile char iio_cmd_buffer[IIO_CMD_DATA_BUFF_SIZE]; + +/* IIO data buffer */ +static volatile char iio_data_buffer[IIO_CMD_DATA_BUFF_SIZE]; + +/* New IIO command detect flag */ +static volatile bool new_iio_cmd_detected = false; + +/* Data buffer index */ +volatile static uint8_t data_buff_indx = 0; + +/* Command buffer index */ +volatile static uint8_t cmd_buff_indx = 0; + +/******************************************************************************/ +/************************ Functions Declarations ******************************/ +/******************************************************************************/ + +/******************************************************************************/ +/************************ Functions Definitions *******************************/ +/******************************************************************************/ + +/** + * @brief IIO Wrapper to initialize the UART peripheral + * @param desc- Pointer UART descriptor structure + * @param param- Pointer to UART init param structure + * @return uart init status (SUCCESS/FAILURE) + */ +int32_t iio_uart_init(struct uart_desc **desc, struct uart_init_param *param) +{ + if (uart_init(desc, param) == SUCCESS) { + /* Save the descriptor for data read/write operation */ + uart_desc = *desc; + + return SUCCESS; + } else { + return FAILURE; + } +} + + +/** + * @brief IIO Wrapper to wrire data to UART peripheral + * @param buf- Pointer to buffer containing data + * @param len- Number of bytes to write + * @return bytes len in case of success, 0 otherwise + */ +ssize_t iio_uart_write(const char *buf, size_t len) +{ + if (uart_write(uart_desc, (uint8_t *)buf, len) == SUCCESS) { + return len; + } else { + return 0; + } +} + + +/** + * @brief IIO Wrapper to read iio data/command from UART peripheral + * @param buf- Pointer to buffer containing data + * @param len- Number of bytes to read + * @return bytes len in case of success, 0 otherwise + */ +ssize_t iio_uart_read(char *buf, size_t len) +{ + size_t i = 0; + + if (len > 1) { + do { + /* Wait until new data of expected length is received + * from UART Rx interrupt event */ + } while (data_buff_indx < len); + + /* Get the data into local buffer (entire data) */ + while (i < len) { + buf[i] = iio_data_buffer[i]; + i++; + } + data_buff_indx = 0; + } else { + /* Get the iio command into local buffer (1 character at a time) */ + buf[i] = iio_cmd_buffer[cmd_buff_indx]; + + /* Reset buffer index after reading whole command */ + if (iio_cmd_buffer[cmd_buff_indx] == '\n') { + cmd_buff_indx = 0; + } else { + cmd_buff_indx++; + } + } + + return len; +} + + +/*! + * @brief Callback function to receive IIO command + * @return None + * @details This function is an UART Rx ISR registered by IIO application + * to invoke upon receipt og new character over UART link. + */ +void iio_uart_rx_callback(void) +{ + uint8_t rx_char; + + if (uart_read(uart_desc, &rx_char, 1) == SUCCESS) { + + iio_data_buffer[data_buff_indx++] = rx_char; + + if (rx_char == '\n') { + /* The iio command is identified with new line character */ + memcpy(iio_cmd_buffer, iio_data_buffer, data_buff_indx); + data_buff_indx = 0; + new_iio_cmd_detected = true; + } + } +} + + +/*! + * @brief Function to check for newer IIO command + * @return IIO command status (true/false) + */ +bool is_new_iio_command_detected(void) +{ + if (new_iio_cmd_detected) { + new_iio_cmd_detected = false; + return true; + } else { + return false; + } +} + + +/*! + * @brief Function to check for expected IIO command + * @param cmd_str[in] - Expected IIO command string + * @param len[in] - Length of IIO command + * @return IIO command status (true/false) + */ +bool check_iio_cmd(const char *cmd_str, uint8_t len) +{ + int ret; + + ret = strncmp(cmd_str, iio_cmd_buffer, len); + if (ret == 0) { + /* String matches, return true */ + return true; + } + + return false; +}