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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/util_boot/src/util_boot.c	Wed Apr 11 14:38:42 2018 +0000
@@ -0,0 +1,127 @@
+/*
+ / _____)             _              | |
+( (____  _____ ____ _| |_ _____  ____| |__
+ \____ \| ___ |    (_   _) ___ |/ ___)  _ \
+ _____) ) ____| | | || |_| ____( (___| | | |
+(______/|_____)_|_|_| \__)_____)\____)_| |_|
+  (C)2017 Semtech-Cycleo
+
+Description:
+ Utility to jump to the PicoCell MCU bootloader
+
+License: Revised BSD License, see LICENSE.TXT file include in the project
+*/
+
+
+/* -------------------------------------------------------------------------- */
+/* --- DEPENDANCIES --------------------------------------------------------- */
+
+/* fix an issue between POSIX and C99 */
+#if __STDC_VERSION__ >= 199901L
+#define _XOPEN_SOURCE 600
+#else
+#define _XOPEN_SOURCE 500
+#endif
+
+#include <stdint.h>     /* C99 types */
+#include <stdio.h>      /* printf fprintf sprintf fopen fputs */
+#include <unistd.h>     /* getopt access */
+#include <stdlib.h>     /* EXIT_FAILURE */
+
+#include "loragw_com.h"
+
+/* -------------------------------------------------------------------------- */
+/* --- PRIVATE MACROS ------------------------------------------------------- */
+
+#define ARRAY_SIZE(a)    (sizeof(a) / sizeof((a)[0]))
+#define MSG(args...)    fprintf(stderr, args) /* message that is destined to the user */
+
+/* -------------------------------------------------------------------------- */
+/* --- PRIVATE CONSTANTS ---------------------------------------------------- */
+
+#define COM_PATH_DEFAULT "/dev/ttyACM0"
+
+/* -------------------------------------------------------------------------- */
+/* --- PRIVATE VARIABLES (GLOBAL) ------------------------------------------- */
+
+void *lgw_com_target = NULL; /*! generic pointer to the COM device */
+
+/* -------------------------------------------------------------------------- */
+/* --- PRIVATE FUNCTIONS DECLARATION ---------------------------------------- */
+
+void usage (void);
+
+/* -------------------------------------------------------------------------- */
+/* --- PRIVATE FUNCTIONS DEFINITION ----------------------------------------- */
+
+/* describe command line options */
+void usage(void) {
+    MSG("Available options:\n");
+    MSG(" -h print this help\n");
+    MSG(" -d <path> COM device to be used to access the concentrator board\n");
+    MSG("            => default path: " COM_PATH_DEFAULT "\n");
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- MAIN FUNCTION -------------------------------------------------------- */
+
+int main(int argc, char **argv) {
+    int i, x;
+    lgw_com_cmd_t cmd;
+    lgw_com_ans_t ans;
+    /* COM interfaces */
+    const char com_path_default[] = COM_PATH_DEFAULT;
+    const char *com_path = com_path_default;
+
+    while ((i = getopt (argc, argv, "hd:")) != -1) {
+        switch (i) {
+            case 'h':
+                usage();
+                return EXIT_FAILURE;
+                break;
+
+            case 'd':
+                if (optarg != NULL) {
+                    com_path = optarg;
+                }
+                break;
+
+            default:
+                MSG("ERROR: argument parsing use -h option for help\n");
+                usage();
+                return EXIT_FAILURE;
+        }
+    }
+
+    /* Open communication bridge */
+    x = lgw_com_open(&lgw_com_target, com_path);
+    if (x == LGW_COM_ERROR) {
+        printf("ERROR: FAIL TO CONNECT BOARD ON %s\n", com_path);
+        return -1;
+    }
+
+    /* prepare command to jump to bootloader */
+    cmd.id = 'n';
+    cmd.len_msb = 0;
+    cmd.len_lsb = 0;
+    cmd.address = 0;
+    /* send command to MCU */
+    x = lgw_com_send_command(lgw_com_target, cmd, &ans);
+    if (x == LGW_COM_ERROR) {
+        printf("ERROR: FAIL TO SEND COMMAND\n");
+        return -1;
+    }
+
+    /* Close communication bridge */
+    x = lgw_com_close(lgw_com_target);
+    if (x == LGW_COM_ERROR) {
+        printf("ERROR: FAIL TO DISCONNECT BOARD\n");
+        return -1;
+    }
+
+    return EXIT_SUCCESS;
+}
+
+/* --- EOF ------------------------------------------------------------------ */
+
+