123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- /*
- / _____) _ | |
- ( (____ _____ ____ _| |_ _____ ____| |__
- \____ \| ___ | (_ _) ___ |/ ___) _ \
- _____) ) ____| | | || |_| ____( (___| | | |
- (______/|_____)_|_|_| \__)_____)\____)_| |_|
- (C)2020 Semtech
- Description:
- Host specific functions to address the LoRa concentrator MCU for USB
- interface.
- Single-byte read/write and burst read/write.
- License: Revised BSD License, see LICENSE.TXT file include in the project
- */
- #ifndef _LORAGW_MCU_H
- #define _LORAGW_MCU_H
- /* -------------------------------------------------------------------------- */
- /* --- DEPENDANCIES --------------------------------------------------------- */
- #include <stdint.h> /* C99 types*/
- #include "config.h" /* library configuration options (dynamically generated) */
- /* -------------------------------------------------------------------------- */
- /* --- PUBLIC CONSTANTS ----------------------------------------------------- */
- static const char mcu_version_string[] = "01.00.00";
- #define MAX_SIZE_COMMAND ( 4200 )
- #define MAX_SPI_COMMAND ( MAX_SIZE_COMMAND - CMD_OFFSET__DATA - 1 )
- #define LGW_USB_BURST_CHUNK ( 4096 )
- /* -------------------------------------------------------------------------- */
- /* --- PUBLIC TYPES --------------------------------------------------------- */
- typedef enum order_id_e
- {
- ORDER_ID__REQ_PING = 0x00,
- ORDER_ID__REQ_GET_STATUS = 0x01,
- ORDER_ID__REQ_BOOTLOADER_MODE = 0x02,
- ORDER_ID__REQ_RESET = 0x03,
- ORDER_ID__REQ_WRITE_GPIO = 0x04,
- ORDER_ID__REQ_MULTIPLE_SPI = 0x05,
- ORDER_ID__ACK_PING = 0x40,
- ORDER_ID__ACK_GET_STATUS = 0x41,
- ORDER_ID__ACK_BOOTLOADER_MODE = 0x42,
- ORDER_ID__ACK_RESET = 0x43,
- ORDER_ID__ACK_WRITE_GPIO = 0x44,
- ORDER_ID__ACK_MULTIPLE_SPI = 0x45,
- ORDER_ID__CMD_ERROR = 0xFF
- } order_id_t;
- typedef enum
- {
- CMD_OFFSET__ID,
- CMD_OFFSET__SIZE_MSB,
- CMD_OFFSET__SIZE_LSB,
- CMD_OFFSET__CMD,
- CMD_OFFSET__DATA
- } e_cmd_order_offset;
- typedef enum
- {
- REQ_RESET__TYPE,
- REQ_RESET_SIZE
- } e_cmd_offset_req_reset;
- typedef enum
- {
- REQ_WRITE_GPIO__PORT,
- REQ_WRITE_GPIO__PIN,
- REQ_WRITE_GPIO__STATE,
- REQ_WRITE_GPIO_SIZE
- } e_cmd_offset_req_write_gpio;
- typedef enum
- {
- ACK_PING__UNIQUE_ID_0, ACK_PING__UNIQUE_ID_1, ACK_PING__UNIQUE_ID_2, ACK_PING__UNIQUE_ID_3,
- ACK_PING__UNIQUE_ID_4, ACK_PING__UNIQUE_ID_5, ACK_PING__UNIQUE_ID_6, ACK_PING__UNIQUE_ID_7,
- ACK_PING__UNIQUE_ID_8, ACK_PING__UNIQUE_ID_9, ACK_PING__UNIQUE_ID_10, ACK_PING__UNIQUE_ID_11,
- ACK_PING__VERSION_0, ACK_PING__VERSION_1, ACK_PING__VERSION_2, ACK_PING__VERSION_3, ACK_PING__VERSION_4,
- ACK_PING__VERSION_5, ACK_PING__VERSION_6, ACK_PING__VERSION_7, ACK_PING__VERSION_8,
- ACK_PING_SIZE,
- } e_cmd_offset_ack_ping;
- typedef enum
- {
- ACK_GET_STATUS__SYSTEM_TIME_31_24, ACK_GET_STATUS__SYSTEM_TIME_23_16, ACK_GET_STATUS__SYSTEM_TIME_15_8, ACK_GET_STATUS__SYSTEM_TIME_7_0,
- ACK_GET_STATUS__TEMPERATURE_15_8, ACK_GET_STATUS__TEMPERATURE_7_0,
- ACK_GET_STATUS_SIZE
- } e_cmd_offset_ack_get_status;
- typedef enum
- {
- ACK_GPIO_WRITE__STATUS,
- ACK_GPIO_WRITE_SIZE
- } e_cmd_offset_ack_gpio_write;
- typedef enum
- {
- ACK_RESET__STATUS,
- ACK_RESET_SIZE
- } e_cmd_offset_ack_reset;
- typedef enum
- {
- MCU_SPI_TARGET_SX1302, /* SX1302 + SX1250 */
- MCU_SPI_TARGET_SX1261 /* LBT/Spectral Scan additional radio */
- } e_cmd_spi_target;
- typedef enum
- {
- MCU_SPI_REQ_TYPE_READ_WRITE = 0x01, /* Read/Write SPI request */
- MCU_SPI_REQ_TYPE_READ_MODIFY_WRITE = 0x02 /* Read-Modify-Write SPI request */
- } e_cmd_spi_req_type;
- typedef enum
- {
- RESET_TYPE__GTW
- } e_reset_type;
- typedef enum
- {
- SPI_STATUS_OK,
- SPI_STATUS_FAIL,
- SPI_STATUS_WRONG_PARAM,
- SPI_STATUS_TIMEOUT
- } e_spi_status;
- typedef struct {
- uint32_t unique_id_high;
- uint32_t unique_id_mid;
- uint32_t unique_id_low;
- char version[10]; /* format is V00.00.00\0 */
- } s_ping_info;
- typedef struct {
- uint32_t system_time_ms;
- float temperature;
- } s_status;
- /* -------------------------------------------------------------------------- */
- /* --- PUBLIC FUNCTIONS PROTOTYPES ------------------------------------------ */
- /**
- *
- */
- int mcu_ping(int fd, s_ping_info * info);
- /**
- *
- */
- int mcu_boot(int fd);
- /**
- *
- */
- int mcu_get_status(int fd, s_status * status);
- /**
- *
- */
- int mcu_gpio_write(int fd, uint8_t gpio_port, uint8_t gpio_id, uint8_t gpio_value);
- /**
- @brief Send a SX1302 read/write SPI request to the MCU
- @param fd File descriptor of the device used to access the MCU
- @param in_out_buf The buffer containing the multiple requests to be sent to the
- SX1302 with the SPI header (r/w, target mux). This buffer will also contain the
- SPI answer when the function exits.
- @param buf_size The size of the given input/output buffer
- @return 0 for SUCCESS, -1 for failure
- */
- int mcu_spi_write(int fd, uint8_t * in_out_buf, size_t buf_size);
- /**
- *
- */
- int mcu_spi_store(uint8_t * in_out_buf, size_t buf_size);
- /**
- *
- */
- int mcu_spi_flush(int fd);
- #endif
- /* --- EOF ------------------------------------------------------------------ */
|