Host driver/HAL to build a LoRa Picocell Gateway which communicates through USB with a concentrator board based on Semtech SX1308 multi-channel modem and SX1257/SX1255 RF transceivers.

Revision:
0:102b50f941d0
diff -r 000000000000 -r 102b50f941d0 libloragw/inc/loragw_com.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libloragw/inc/loragw_com.h	Wed Apr 11 14:38:42 2018 +0000
@@ -0,0 +1,182 @@
+/*
+ / _____)             _              | |
+( (____  _____ ____ _| |_ _____  ____| |__
+ \____ \| ___ |    (_   _) ___ |/ ___)  _ \
+ _____) ) ____| | | || |_| ____( (___| | | |
+(______/|_____)_|_|_| \__)_____)\____)_| |_|
+  (C)2017 Semtech-Cycleo
+
+Description:
+  A communication bridge layer to abstract linux/windows OS or others.
+  The current project support only linux os
+
+License: Revised BSD License, see LICENSE.TXT file include in the project
+
+*/
+
+#ifndef _LORAGW_COM_H
+#define _LORAGW_COM_H
+
+/* -------------------------------------------------------------------------- */
+/* --- DEPENDANCIES --------------------------------------------------------- */
+
+#include <stdint.h>     /* C99 types*/
+
+#include "config.h"     /* library configuration options (dynamically generated) */
+
+/* -------------------------------------------------------------------------- */
+/* --- PUBLIC CONSTANTS ----------------------------------------------------- */
+
+#define LGW_COM_SUCCESS     0
+#define LGW_COM_ERROR       -1
+#define LGW_BURST_CHUNK     1024
+#define LGW_COM_MUX_MODE0   0x0     /* No FPGA */
+#define LGW_COM_MUX_TARGET_SX1301   0x0
+
+#define ATOMICTX 600
+#define ATOMICRX 900
+
+#define CMD_HEADER_TX_SIZE 4 /* id + len_msb + len_lsb + address */
+#define CMD_HEADER_RX_SIZE 4 /* id + len_msb + len_lsb + status */
+
+#define CMD_DATA_TX_SIZE ATOMICTX
+#define CMD_DATA_RX_SIZE (1024 + 16 * 44) /* MAX_FIFO + 16 * METADATA_SIZE_ALIGNED */
+
+#define ACK_OK 1
+#define ACK_KO 0
+
+/* -------------------------------------------------------------------------- */
+/* --- PUBLIC TYPES --------------------------------------------------------- */
+
+/**
+@struct lgw_com_cmd_t
+@brief structure for host to mcu commands
+*/
+/********************************************************/
+/*   cmd name   |      description                      */
+/*------------------------------------------------------*/
+/*  r           |Read register                          */
+/*  s           |Read long burst First packet           */
+/*  t           |Read long burst Middle packet          */
+/*  u           |Read long burst End packet             */
+/*  p           |Read atomic burst packet               */
+/*  w           |Write register                         */
+/*  x           |Write long burst First packet          */
+/*  y           |Write long burst Middle packet         */
+/*  z           |Write long burst End packet            */
+/*  a           |Write atomic burst packet              */
+/*------------------------------------------------------*/
+/*  b           |lgw_receive cmd                        */
+/*  c           |lgw_rxrf_setconf cmd                   */
+/*  d           |int lgw_rxif_setconf_cmd               */
+/*  f           |int lgw_send cmd                       */
+/*  h           |lgw_txgain_setconf                     */
+/*  q           |lgw_trigger                            */
+/*  i           |lgw_board_setconf                      */
+/*  j           |lgw_calibration_snapshot               */
+/*  l           |lgw_check_fw_version                   */
+/*  m           |Reset STM32                            */
+/*  n           |Go to bootloader                       */
+/********************************************************/
+
+typedef struct {
+    char id;                            /*!> command ID */
+    uint8_t len_msb;                    /*!> command length MSB */
+    uint8_t len_lsb;                    /*!> command length LSB */
+    uint8_t address;                    /*!> register address for register read/write commands */
+    uint8_t cmd_data[CMD_DATA_TX_SIZE]; /*!> raw data to be transfered */
+} lgw_com_cmd_t;
+
+/**
+@struct lgw_com_ans_t
+@brief structure for mcu to host command answers
+*/
+typedef struct {
+    char id;                            /*!> command ID */
+    uint8_t len_msb;                    /*!> command length MSB */
+    uint8_t len_lsb;                    /*!> command length LSB */
+    uint8_t status;                     /*!> command acknoledge */
+    uint8_t ans_data[CMD_DATA_RX_SIZE]; /*!> raw answer data */
+} lgw_com_ans_t;
+
+/**
+@brief Generic file handle for communication bridge
+*/
+#ifdef _WIN32
+    typedef HANDLE lgw_handle_t;
+    #define LGW_GET_HANDLE(x) ((lgw_handle_t *)x)
+#elif __linux__
+    typedef int lgw_handle_t;
+    #define LGW_GET_HANDLE(x) (*(lgw_handle_t *)x)
+#endif
+
+
+/* -------------------------------------------------------------------------- */
+/* --- PUBLIC FUNCTIONS PROTOTYPES ------------------------------------------ */
+
+/**
+@brief LoRa concentrator USB setup
+@param com_target_ptr pointer on a generic pointer to USB target
+@return status of register operation (LGW_COM_SUCCESS/LGW_COM_ERROR)
+*/
+
+int lgw_com_open(void **com_target_ptr, const char *com_path);
+
+/**
+@brief LoRa concentrator USB close
+@param com_target generic pointer to USB target
+@return status of register operation (LGW_COM_SUCCESS/LGW_COM_ERROR)
+*/
+
+int lgw_com_close(void *com_target);
+
+/**
+@brief LoRa usb bridge to spi sx1308 concentrator single-byte write
+@param com_target generic pointer to USB target
+@param address 7-bit register address
+@param data data byte to write
+@return status of register operation (LGW_COM_SUCCESS/LGW_COM_ERROR)
+*/
+int lgw_com_w(void *com_target, uint8_t com_mux_mode, uint8_t com_mux_target, uint8_t address, uint8_t data);
+
+/**
+@brief  LoRa usb bridge to spi sx1308 concentrator single-byte read
+@param com_target generic pointer to USB target
+@param address 7-bit register address
+@param data data byte to write
+@return status of register operation (LGW_COM_SUCCESS/LGW_COM_ERROR)
+*/
+int lgw_com_r(void *com_target, uint8_t com_mux_mode, uint8_t com_mux_target, uint8_t address, uint8_t *data);
+
+/**
+@brief LoRa usb bridge to spi sx1308 concentrator  burst (multiple-byte) write
+@param com_target generic pointer to USB target
+@param address 7-bit register address
+@param data pointer to byte array that will be sent to the LoRa concentrator
+@param size size of the transfer, in byte(s)
+@return status of register operation (LGW_COM_SUCCESS/LGW_COM_ERROR)
+*/
+int lgw_com_wb(void *com_target, uint8_t com_mux_mode, uint8_t com_mux_target, uint8_t address, uint8_t *data, uint16_t size);
+
+/**
+@brief LoRa usb bridge to spi sx1308 concentrator burst (multiple-byte) read
+@param com_target generic pointer to USB target
+@param address 7-bit register address
+@param data pointer to byte array that will be written from the LoRa concentrator
+@param size size of the transfer, in byte(s)
+@return status of register operation (LGW_COM_SUCCESS/LGW_COM_ERROR)
+*/
+int lgw_com_rb(void *com_target, uint8_t com_mux_mode, uint8_t com_mux_target, uint8_t address, uint8_t *data, uint16_t size);
+
+/**
+@brief Send command to concentrator through MCU, and wait for answer
+@param com_target generic pointer to USB target
+@param cmd command to be sent to the concentrator
+@param ans answer received from the concentrator
+@return status of operation (LGW_COM_SUCCESS/LGW_COM_ERROR)
+*/
+int lgw_com_send_command(void *com_target, lgw_com_cmd_t cmd, lgw_com_ans_t *ans);
+
+#endif
+
+/* --- EOF ------------------------------------------------------------------ */