MCU driver/HAL for the Picocell Gateway concentrator board. The firmware implements either a USB CDC protocol or a UART protocol to bridge commands coming from host to the SX1308 SPI interface.

Revision:
0:c76361bd82e8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/MAIN/cmdUSB.h	Wed Apr 11 14:42:47 2018 +0000
@@ -0,0 +1,110 @@
+/*
+ / _____)             _              | |
+( (____  _____ ____ _| |_ _____  ____| |__
+ \____ \| ___ |    (_   _) ___ |/ ___)  _ \
+ _____) ) ____| | | || |_| ____( (___| | | |
+(______/|_____)_|_|_| \__)_____)\____)_| |_|
+  (C)2017 Semtech
+*/
+
+#ifndef USBMANAGER_H
+#define USBMANAGER_H
+
+#include "mbed.h"
+#include "SX1308.h"
+
+#define ATOMICTX 900
+#define ATOMICRX 600
+
+#define CMD_HEADER_RX_SIZE 4 /* id + len_msb + len_lsb + address */
+#define CMD_HEADER_TX_SIZE 4 /* id + len_msb + len_lsb + status */
+
+#define CMD_DATA_RX_SIZE ATOMICRX
+#define CMD_DATA_TX_SIZE (1024 + 16 * 44) /* MAX_FIFO + 16 * METADATA_SIZE_ALIGNED */
+#define CMD_LENGTH_MSB     1
+#define CMD_LENGTH_LSB     2
+
+#define CMD_ERROR          0
+#define CMD_OK             1
+#define CMD_K0             0
+#define ACK_OK             1
+#define ACK_K0             0
+#define FWVERSION          0x010a0006
+#define ISUARTINTERFACE    1
+#define ISUSBINTERFACE     0
+
+#define BAUDRATE 115200
+
+typedef struct {
+    char id;
+    uint8_t len_msb;
+    uint8_t len_lsb;
+    uint8_t address;
+    uint8_t cmd_data[CMD_DATA_RX_SIZE];
+} CmdSettings_t;
+
+
+class INTERFACE {
+
+public:
+    INTERFACE();
+    virtual void Init() =0;
+    virtual void Receive(uint8_t* Buffer, uint32_t* size) = 0;
+    virtual void Transmit(uint8_t* Buffer, uint16_t size) = 0; 
+private:
+
+};
+
+class COMUSB : INTERFACE {
+public:
+    // public methods
+    COMUSB();
+    virtual void Init();
+    virtual void Receive(uint8_t* Buffer, uint32_t* size);
+    virtual void Transmit(uint8_t* Buffer, uint16_t size); 
+private:
+    // private methods
+};
+
+class COMUART : public Serial, public INTERFACE{
+
+public:
+    // public members
+    COMUART(PinName Tx, PinName Rx);
+    virtual void Init();
+    virtual void Receive(uint8_t* Buffer, uint32_t* size);
+    virtual void Transmit(uint8_t* Buffer, uint16_t size); 
+private:
+    // private methods
+};
+
+class CMDMANAGER {
+
+public:
+    // public members
+    uint8_t BufFromHost[CMD_DATA_RX_SIZE + CMD_HEADER_RX_SIZE];
+    uint8_t BufFromHostChunk[64];
+    uint8_t BufToHost[CMD_DATA_TX_SIZE + CMD_HEADER_TX_SIZE];
+    uint32_t receivelength[5];
+    volatile uint32_t count;
+    int ActiveCom;
+    bool kill;
+    INTERFACE * ActiveInterface;
+
+    // public methods
+    CMDMANAGER(PinName Tx, PinName Rx);
+    void Init();
+    void ReceiveCmd();
+    void TransmitCmd();
+    void InitBufFromHost();
+    void InitBufToHost();
+    int DecodeCmd();
+    bool CheckCmd(char id);
+
+private:
+    // private methods
+    int Convert2charsToByte(uint8_t a, uint8_t b);
+};
+
+extern CMDMANAGER CmdManager;
+#endif