瀏覽代碼

add lora protocol

haitao 1 年之前
父節點
當前提交
0e2c2e31f9
共有 100 個文件被更改,包括 18850 次插入6985 次删除
  1. 5 0
      .vscode/settings.json
  2. 4 5
      app/CORE/startup_stm32f2xx.s
  3. 7 0
      app/HARDWARE/includes/log.h
  4. 2 2
      app/HARDWARE/includes/malloc.h
  5. 1 1
      app/HARDWARE/includes/nandflash.h
  6. 7 0
      app/HARDWARE/includes/spi.h
  7. 1 1
      app/HARDWARE/includes/sram.h
  8. 1 1
      app/HARDWARE/includes/usart.h
  9. 5 5
      app/HARDWARE/sources/cJSON.c
  10. 1 0
      app/HARDWARE/sources/log.c
  11. 2 2
      app/HARDWARE/sources/malloc.c
  12. 10 5
      app/HARDWARE/sources/nandflash.c
  13. 69 0
      app/HARDWARE/sources/spi.c
  14. 6 6
      app/HARDWARE/sources/sram.c
  15. 34 12
      app/HARDWARE/sources/usart.c
  16. 9 0
      app/MDKProject/.vscode/c_cpp_properties.json
  17. 43 0
      app/MDKProject/.vscode/keil-assistant.log
  18. 5 0
      app/MDKProject/.vscode/settings.json
  19. 8506 31
      app/MDKProject/JLinkLog.txt
  20. 2176 1166
      app/MDKProject/Listings/lora_gateway.map
  21. 694 691
      app/MDKProject/Listings/startup_stm32f2xx.lst
  22. 94 121
      app/MDKProject/lora_gateway.uvguix.16936
  23. 255 127
      app/MDKProject/lora_gateway.uvoptx
  24. 63 8
      app/MDKProject/lora_gateway.uvprojx
  25. 二進制
      app/OBJ/cjson.crf
  26. 二進制
      app/OBJ/demo_nand_fatfs.crf
  27. 二進制
      app/OBJ/diskio.crf
  28. 二進制
      app/OBJ/gateway_message.crf
  29. 38 0
      app/OBJ/gateway_message.d
  30. 二進制
      app/OBJ/log.crf
  31. 二進制
      app/OBJ/lora_gateway.axf
  32. 1 1
      app/OBJ/lora_gateway.build_log.htm
  33. 2855 936
      app/OBJ/lora_gateway.htm
  34. 11 1
      app/OBJ/lora_gateway.lnp
  35. 4 1
      app/OBJ/lora_gateway.sct
  36. 448 92
      app/OBJ/lora_gateway_Target 1.dep
  37. 0 3
      app/OBJ/lora_gateway_sct.Bak
  38. 二進制
      app/OBJ/main.crf
  39. 10 2
      app/OBJ/main.d
  40. 二進制
      app/OBJ/malloc.crf
  41. 二進制
      app/OBJ/myfile.crf
  42. 46 0
      app/OBJ/myfile.d
  43. 二進制
      app/OBJ/nandflash.crf
  44. 二進制
      app/OBJ/protocol.crf
  45. 39 0
      app/OBJ/protocol.d
  46. 二進制
      app/OBJ/radio.crf
  47. 7 0
      app/OBJ/radio.d
  48. 二進制
      app/OBJ/spi.crf
  49. 37 0
      app/OBJ/spi.d
  50. 二進制
      app/OBJ/sram.crf
  51. 二進制
      app/OBJ/stm32f2xx_it.crf
  52. 二進制
      app/OBJ/sx1276-board.crf
  53. 0 43
      app/OBJ/sx1276-board.d
  54. 二進制
      app/OBJ/sx1276-fsk.crf
  55. 15 0
      app/OBJ/sx1276-fsk.d
  56. 二進制
      app/OBJ/sx1276-fskmisc.crf
  57. 12 0
      app/OBJ/sx1276-fskmisc.d
  58. 二進制
      app/OBJ/sx1276-hal.crf
  59. 44 0
      app/OBJ/sx1276-hal.d
  60. 二進制
      app/OBJ/sx1276-lora.crf
  61. 48 0
      app/OBJ/sx1276-lora.d
  62. 二進制
      app/OBJ/sx1276-loramisc.crf
  63. 12 0
      app/OBJ/sx1276-loramisc.d
  64. 二進制
      app/OBJ/sx1276.crf
  65. 47 9
      app/OBJ/sx1276.d
  66. 二進制
      app/OBJ/sx127x_driver.crf
  67. 45 0
      app/OBJ/sx127x_driver.d
  68. 二進制
      app/OBJ/sx127x_hal.crf
  69. 42 0
      app/OBJ/sx127x_hal.d
  70. 二進制
      app/OBJ/system_stm32f2xx.crf
  71. 2 0
      app/OBJ/system_stm32f2xx.d
  72. 二進制
      app/OBJ/task.crf
  73. 62 0
      app/OBJ/task.d
  74. 二進制
      app/OBJ/ucos_ii.crf
  75. 0 1
      app/OBJ/ucos_ii.d
  76. 二進制
      app/OBJ/usart.crf
  77. 0 321
      app/SX1278/radio.h
  78. 0 396
      app/SX1278/sx1276-board.c
  79. 0 122
      app/SX1278/sx1276-board.h
  80. 0 1868
      app/SX1278/sx1276.c
  81. 0 396
      app/SX1278/sx1276.h
  82. 0 565
      app/SX1278/sx1276Regs-LoRa.h
  83. 111 0
      app/SYSTEM/includes/gateway_message.h
  84. 13 0
      app/SYSTEM/includes/myFile.h
  85. 0 0
      app/SYSTEM/includes/protocol.h
  86. 13 0
      app/SYSTEM/includes/task.h
  87. 66 0
      app/SYSTEM/source/gateway_message.c
  88. 192 0
      app/SYSTEM/source/myFile.c
  89. 199 0
      app/SYSTEM/source/protocol.c
  90. 244 0
      app/SYSTEM/source/task.c
  91. 87 0
      app/Sx1278/platform/platform.h
  92. 130 0
      app/Sx1278/platform/sx12xxEiger.c
  93. 94 0
      app/Sx1278/platform/sx12xxEiger.h
  94. 65 0
      app/Sx1278/radio/radio.c
  95. 67 0
      app/Sx1278/radio/radio.h
  96. 606 0
      app/Sx1278/radio/sx1276-Fsk.c
  97. 376 44
      app/SX1278/sx1276Regs-Fsk.h
  98. 521 0
      app/Sx1278/radio/sx1276-FskMisc.c
  99. 241 0
      app/Sx1278/radio/sx1276-FskMisc.h
  100. 0 0
      app/Sx1278/radio/sx1276-Hal.c

+ 5 - 0
.vscode/settings.json

@@ -0,0 +1,5 @@
+{
+    "files.associations": {
+        "gateway_message.h": "c"
+    }
+}

+ 4 - 5
app/CORE/startup_stm32f2xx.s

@@ -27,24 +27,23 @@
 ;
 ;*******************************************************************************
 
-; Amount of memory (in bytes) allocated for Stack
+; Amount of memory (in bytes) allocated for Stack           //EQU     0x20000000 + Stack_Size
 ; Tailor this value to your application needs
 ; <h> Stack Configuration
 ;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
 ; </h>
 
-Stack_Size      EQU     0x00001000
+Stack_Size      EQU     0x00004000
 
                 AREA    STACK, NOINIT, READWRITE, ALIGN=3
 Stack_Mem       SPACE   Stack_Size
-__initial_sp
-
+__initial_sp    EQU     0x20000000 + Stack_Size
 
 ; <h> Heap Configuration
 ;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
 ; </h>
 
-Heap_Size       EQU     0x00001000
+Heap_Size       EQU     0x00020000
 
                 AREA    HEAP, NOINIT, READWRITE, ALIGN=3
 __heap_base

+ 7 - 0
app/HARDWARE/includes/log.h

@@ -10,6 +10,13 @@
 
 #include <stdarg.h>
 
+
+#define _LOG_DEBUG
+#define _LOG_WARN
+#define _LOG_INFO
+
+
+
 #define LOG_LEN_MAX 256
 
 typedef enum LOG_LEVEL_U

+ 2 - 2
app/HARDWARE/includes/malloc.h

@@ -20,13 +20,13 @@
 
 //mem1内存参数设定.mem1完全处于内部SRAM里面.
 #define MEM1_BLOCK_SIZE			32  	  						              //内存块大小为32字节
-#define MEM1_MAX_SIZE			  40*1024  						              //最大管理内存 40K
+#define MEM1_MAX_SIZE			  20*1024  						              //最大管理内存 40K
 #define MEM1_ALLOC_TABLE_SIZE	MEM1_MAX_SIZE/MEM1_BLOCK_SIZE 	//内存表大小
 
 
 //mem2内存参数设定.mem2的内存池处于外部SRAM里面
 #define MEM2_BLOCK_SIZE			32  	  						              //内存块大小为32字节
-#define MEM2_MAX_SIZE			  960 *1024  					              //最大管理内存960K
+#define MEM2_MAX_SIZE			  512 *1024  					              //最大管理内存512K
 #define MEM2_ALLOC_TABLE_SIZE	MEM2_MAX_SIZE/MEM2_BLOCK_SIZE 	//内存表大小 
 		 
  

+ 1 - 1
app/HARDWARE/includes/nandflash.h

@@ -88,7 +88,7 @@ typedef struct
 	#define NAND_ZONE_SIZE             ((uint16_t)0x0400) /* 1024 Block per zone */
 	#define NAND_SPARE_AREA_SIZE       ((uint16_t)0x0040) /* last 64 bytes as spare area */
 	#define NAND_MAX_ZONE              ((uint16_t)0x0002) /* 2 zones of 1024 block */
-	#define NAND_ADDR_5					1			/* 0表示只用发送4个字节的地址,1表示5个 */
+	#define NAND_ADDR_5					1		/* 0表示只用发送4个字节的地址,1表示5个 */
 	
 		/* 命令代码定义 */
 	#define NAND_CMD_COPYBACK_A			((uint8_t)0x00)		/* PAGE COPY-BACK 命令序列 */

+ 7 - 0
app/HARDWARE/includes/spi.h

@@ -0,0 +1,7 @@
+#ifndef __SPI_H
+#define __SPI_H
+#include "stm32f2xx_spi.h"
+void spi_config(void);
+uint8_t SPI2_ReadWriteByte(uint8_t txd);
+void SpiNSSEnable( uint8_t status );
+#endif

+ 1 - 1
app/HARDWARE/includes/sram.h

@@ -11,7 +11,7 @@
 //对IS61LV51216/IS62WV51216,地址线范围为A0~A18
 #define Bank1_SRAM3_ADDR    ((uint32_t)(0x68000000))		
 
-#define IS62WV51216_SIZE 0x100000  //512*16/2bits = 0x100000  ,1M字节
+#define IS62WV25616_SIZE     0x80000  //256*16/2bits = 0x80000  ,1M字节
 
 
 #define FSMC_GPIO_AF             GPIO_AF_FSMC

+ 1 - 1
app/HARDWARE/includes/usart.h

@@ -85,7 +85,7 @@ void Usart_SendString( USART_TypeDef * pUSARTx, char *str);
 void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch);
 void USART_DMA_Config(void);
 void DEBUG_USART_Config(void);
-
+void USART_232_config();
 
 extern uint8_t UART6_RX_BUF[BUFF_SIZE];
 extern uint8_t UART6_RX_STAT;

+ 5 - 5
app/HARDWARE/sources/cJSON.c

@@ -59,21 +59,21 @@
 
 #include "cJSON.h"
 #include "malloc.h"
-//ÓÃÓÚ²âÊÔÄÚÍⲿmalloc
-#if 1
+
+#if 0
 void *my_malloc(uint32_t size)
 {
-	return (void*)mymalloc(SRAMIN, size);
+	return (void*)mymalloc(SRAMEX, size);
 }
 
 void my_free(void *ptr)
 {
-	myfree(SRAMIN, ptr);
+	myfree(SRAMEX, ptr);
 }
 
 void *my_realloc(void *ptr,u32 size)
 {
-	return (void*)myrealloc(SRAMIN, ptr, size);
+	return (void*)myrealloc(SRAMEX, ptr, size);
 }
 #else
 void *my_malloc(uint32_t size)

+ 1 - 0
app/HARDWARE/sources/log.c

@@ -60,3 +60,4 @@ void LogPrint(logLevel_t logLevel, const char *func, const int line, char * fmt,
 			break;
 	}
 }
+

+ 2 - 2
app/HARDWARE/sources/malloc.c

@@ -1,7 +1,7 @@
 #include "malloc.h"	    
 
 
-
+#if 0
 //内存池(32字节对齐)
 __align(32) uint8_t mem1base[MEM1_MAX_SIZE];													//内部SRAM内存池
 __align(32) uint8_t mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000)));					//外部SRAM内存池
@@ -214,7 +214,7 @@ void *myrealloc(uint8_t memx,void *ptr,uint32_t size)
 	
 }
 
-
+#endif
 
 
 

+ 10 - 5
app/HARDWARE/sources/nandflash.c

@@ -207,12 +207,12 @@ static void FSMC_NAND_Init(void)
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
 	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
 	GPIO_Init(GPIOD, &GPIO_InitStructure); 
-
+	//0、1、1、1
     // 配置FSMC NAND Flash的时序参数
-    FSMC_NANDTimingInitStructure.FSMC_SetupTime = 0x0;
-    FSMC_NANDTimingInitStructure.FSMC_WaitSetupTime = 0x1;
-    FSMC_NANDTimingInitStructure.FSMC_HoldSetupTime = 0x1;
-    FSMC_NANDTimingInitStructure.FSMC_HiZSetupTime = 0x1;
+    FSMC_NANDTimingInitStructure.FSMC_SetupTime = 0x1;
+    FSMC_NANDTimingInitStructure.FSMC_WaitSetupTime = 0x2;
+    FSMC_NANDTimingInitStructure.FSMC_HoldSetupTime = 0x2;
+    FSMC_NANDTimingInitStructure.FSMC_HiZSetupTime = 0x2;
 
     // 配置FSMC NAND Flash的控制参数
     FSMC_NANDInitStructure.FSMC_Bank = FSMC_Bank2_NAND;
@@ -921,6 +921,11 @@ uint8_t NAND_Init(void)
 
 	FSMC_NAND_Reset();			/* 通过复位命令复位NAND Flash到读状态 */
 	Status = NAND_BuildLUT();	/* 建立块管理表 LUT = Look up table */
+	if(Status==NAND_FAIL)     //其可能导致的原因是nandflash没有初始化进行格式化
+	{
+   	//NAND_Format();
+		NAND_ReadID();
+	}
 	return Status;
 }
 

+ 69 - 0
app/HARDWARE/sources/spi.c

@@ -0,0 +1,69 @@
+#include "spi.h"
+
+
+void SPI2_GPIO_Config(void)
+{
+    GPIO_InitTypeDef GPIO_InitStructure;
+
+    /* Enable SPI2 and GPIO clock */
+    RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
+    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
+		
+		 /* Configure SPI2 CS pin */
+    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
+    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
+    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
+    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
+    GPIO_Init(GPIOB, &GPIO_InitStructure);
+    /* Configure SPI2 pins: SCK, MISO and MOSI */
+    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
+    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
+    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
+    GPIO_Init(GPIOB, &GPIO_InitStructure);
+
+    /* Connect GPIO pins to SPI2 alternate function */
+    GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2); // SCK
+    GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2); // MISO
+    GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2); // MOSI
+}
+
+void spi_config(void)
+{
+		SPI2_GPIO_Config();
+    SPI_InitTypeDef SPI_InitStructure;
+
+    /* SPI2 configuration */
+    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
+    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
+    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
+    SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
+    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
+    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
+    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
+    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
+    SPI_InitStructure.SPI_CRCPolynomial = 7;
+    SPI_Init(SPI2, &SPI_InitStructure);
+
+    /* Enable SPI2 */
+    SPI_Cmd(SPI2, ENABLE);
+}
+/*-------------------------------------------------*/
+/*函数名:SPI收发一个字节                          */
+/*参  数:txd:要发送的数据                        */
+/*返回值:接收到的数据                             */
+/*-------------------------------------------------*/
+uint8_t SPI2_ReadWriteByte(uint8_t txd)
+{
+	while(SPI_GetFlagStatus(SPI2,SPI_FLAG_TXE)!=1);  
+	SPI_SendData(SPI2,txd);                                   
+	while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)!=1); 
+	return SPI_ReceiveData(SPI2);              
+}
+
+void SpiNSSEnable( uint8_t status )
+{
+    GPIO_WriteBit( GPIOB, GPIO_Pin_12, (BitAction) status );
+}

+ 6 - 6
app/HARDWARE/sources/sram.c

@@ -386,19 +386,19 @@ uint8_t SRAM_Test(void)
   /*按8位格式读写数据,并校验*/
   
   /* 把SRAM数据全部重置为0 ,IS62WV51216_SIZE是以8位为单位的 */
-  for (counter = 0x00; counter < IS62WV51216_SIZE; counter++)
+  for (counter = 0x00; counter < IS62WV25616_SIZE; counter++)
   {
     *(__IO uint8_t*) (Bank1_SRAM3_ADDR + counter) = (uint8_t)0x0;
   }
   
   /* 向整个SRAM写入数据  8位 */
-  for (counter = 0; counter < IS62WV51216_SIZE; counter++)
+  for (counter = 0; counter < IS62WV25616_SIZE; counter++)
   {
     *(__IO uint8_t*) (Bank1_SRAM3_ADDR + counter) = (uint8_t)(ubWritedata_8b + counter);
   }
   
   /* 读取 SRAM 数据并检测*/
-  for(counter = 0; counter<IS62WV51216_SIZE;counter++ )
+  for(counter = 0; counter<IS62WV25616_SIZE;counter++ )
   {
     ubReaddata_8b = *(__IO uint8_t*)(Bank1_SRAM3_ADDR + counter);  //从该地址读出数据
     
@@ -413,19 +413,19 @@ uint8_t SRAM_Test(void)
   /*按16位格式读写数据,并检测*/
   
   /* 把SRAM数据全部重置为0 */
-  for (counter = 0x00; counter < IS62WV51216_SIZE/2; counter++)
+  for (counter = 0x00; counter < IS62WV25616_SIZE/2; counter++)
   {
     *(__IO uint16_t*) (Bank1_SRAM3_ADDR + 2*counter) = (uint16_t)0x00;
   }
   
   /* 向整个SRAM写入数据  16位 */
-  for (counter = 0; counter < IS62WV51216_SIZE/2; counter++)
+  for (counter = 0; counter < IS62WV25616_SIZE/2; counter++)
   {
     *(__IO uint16_t*) (Bank1_SRAM3_ADDR + 2*counter) = (uint16_t)(uhWritedata_16b + counter);
   }
   
     /* 读取 SRAM 数据并检测*/
-  for(counter = 0; counter<IS62WV51216_SIZE/2;counter++ )
+  for(counter = 0; counter<IS62WV25616_SIZE/2;counter++ )
   {
     uhReaddata_16b = *(__IO uint16_t*)(Bank1_SRAM3_ADDR + 2*counter);  //从该地址读出数据
     

+ 34 - 12
app/HARDWARE/sources/usart.c

@@ -77,7 +77,6 @@ void DEBUG_USART_IRQHandler(void)
 		UART6_RX_STAT=1;
 		
 	}
-	
 }
 
 /**
@@ -85,6 +84,7 @@ void DEBUG_USART_IRQHandler(void)
   * @param  无
   * @retval 无
   */
+
 void USART_DMA_Config(void)
 {
 	// 使能串口和DMA时钟
@@ -144,6 +144,7 @@ void DMA2_Stream5_IRQHandler() {
 /*
 	485串口在未配置情况下,初始化的参数
 */
+
 void USART_485_config()
 {
 	USART_InitTypeDef USART_InitStruct;
@@ -182,6 +183,7 @@ void USART_485_config()
  *  返回值:无
  *  函数作用:根据输入参数进行配置485串口参数
  */
+
 void Config_485_Port(uint32_t baudrate, uint8_t databits, uint8_t stopbits, uint8_t parity, uint8_t flowcontrol)
 {
 	uint8_t wordLength;
@@ -220,25 +222,31 @@ void Config_485_Port(uint32_t baudrate, uint8_t databits, uint8_t stopbits, uint
 	USART_ITConfig(USART_485,USART_IT_RXNE,ENABLE);
 	USART_ITConfig(USART_485,USART_IT_IDLE,ENABLE);
 }
-//232串口配置
+/*
+	232串口配置
+*/
+
 void USART_232_config()
 {
 	USART_InitTypeDef USART_InitStruct;
   GPIO_InitTypeDef GPIO_InitStruct;
-
-  RCC_AHB1PeriphClockCmd(USART_232_CLK, ENABLE);
-
-  RCC_AHB1PeriphClockCmd(USART_232_RX_GPIO_CLK, ENABLE);
-
-   GPIO_InitStruct.GPIO_Pin = USART_232_RX_PIN | USART_232_TX_PIN; 
+	
+  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
+	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
+	
+	GPIO_PinAFConfig(USART_232_RX_GPIO_PORT, USART_232_RX_SOURCE, USART_232_RX_AF);
+  GPIO_PinAFConfig(USART_232_TX_GPIO_PORT, USART_232_TX_SOURCE, USART_232_TX_AF);
+	
+	
+  GPIO_InitStruct.GPIO_Pin = USART_232_RX_PIN | USART_232_TX_PIN; 
   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
   GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
   GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
-  GPIO_Init(GPIOC, &GPIO_InitStruct);
+  GPIO_Init(GPIOA, &GPIO_InitStruct);
+	
+
 
-  GPIO_PinAFConfig(USART_232_RX_GPIO_PORT, USART_232_RX_SOURCE, USART_232_RX_AF);
-  GPIO_PinAFConfig(USART_232_TX_GPIO_PORT, USART_232_TX_SOURCE, USART_232_TX_AF);
 
   USART_InitStruct.USART_BaudRate = USART_232_BAUDRATE;
   USART_InitStruct.USART_WordLength = USART_WordLength_8b;
@@ -247,11 +255,25 @@ void USART_232_config()
   USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
   USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
   USART_Init(USART_232, &USART_InitStruct);
-
+	
   USART_Cmd(USART_232, ENABLE);
+	
+	USART_ClearFlag(USART1, USART_FLAG_TC);
+	
 	USART_ITConfig(USART_232,USART_IT_RXNE,ENABLE);
 	USART_ITConfig(USART_232,USART_IT_IDLE,ENABLE);
+	
+ // 配置USART1接收中断优先级
+	NVIC_InitTypeDef NVIC_InitStruct;
+	NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;
+	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
+	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
+	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
+	NVIC_Init(&NVIC_InitStruct);
+	
+	
 }
+
 /*****************  发送一个字符 **********************/
 void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
 {

+ 9 - 0
app/MDKProject/.vscode/c_cpp_properties.json

@@ -8,14 +8,23 @@
                 "d:\\Project\\Lora_gateway_sx1278\\app\\USER",
                 "d:\\Project\\Lora_gateway_sx1278\\app\\HARDWARE\\includes",
                 "d:\\Project\\Lora_gateway_sx1278\\app\\USER\\FatFS\\src",
+                "d:\\Project\\Lora_gateway_sx1278\\app\\UCOS-II\\CONFIG",
+                "d:\\Project\\Lora_gateway_sx1278\\app\\UCOS-II\\Ports",
+                "d:\\Project\\Lora_gateway_sx1278\\app\\UCOS-II\\Source",
+                "d:\\Project\\Lora_gateway_sx1278\\app\\SYSTEM\\includes",
+                "d:\\Project\\Lora_gateway_sx1278\\app\\Sx1278\\radio",
+                "d:\\Project\\Lora_gateway_sx1278\\app\\Sx1278\\platform",
                 "D:\\workSoftware\\stm32Software\\mdk\\mdkcore\\ARM\\ARMCC\\include",
                 "D:\\workSoftware\\stm32Software\\mdk\\mdkcore\\ARM\\ARMCC\\include\\rw",
+                "d:\\Project\\Lora_gateway_sx1278\\app\\SYSTEM\\source",
                 "d:\\Project\\Lora_gateway_sx1278\\app\\Libraries\\src",
                 "d:\\Project\\Lora_gateway_sx1278\\app\\HARDWARE\\sources",
                 "d:\\Project\\Lora_gateway_sx1278\\app\\USER\\FatFS\\src\\option"
             ],
             "defines": [
                 "USE_STDPERIPH_DRIVER",
+                "DATA_IN_ExtSRAM",
+                "MASTER",
                 "__CC_ARM",
                 "__arm__",
                 "__align(x)=",

+ 43 - 0
app/MDKProject/.vscode/keil-assistant.log

@@ -12,3 +12,46 @@
 
 [info] Log at : 2023/6/14|16:43:13|GMT+0800
 
+[info] Log at : 2023/7/3|17:16:29|GMT+0800
+
+[info] Log at : 2023/7/3|17:16:32|GMT+0800
+
+[info] Log at : 2023/7/3|17:17:26|GMT+0800
+
+[info] Log at : 2023/7/6|11:36:19|GMT+0800
+
+[info] Log at : 2023/7/7|15:51:52|GMT+0800
+
+[info] Log at : 2023/7/11|16:11:13|GMT+0800
+
+[info] Log at : 2023/7/11|16:11:38|GMT+0800
+
+[info] Log at : 2023/7/12|08:43:53|GMT+0800
+
+[info] Log at : 2023/7/21|09:14:07|GMT+0800
+
+[info] Log at : 2023/7/27|10:39:58|GMT+0800
+
+[info] Log at : 2023/7/27|14:27:08|GMT+0800
+
+[info] Log at : 2023/7/27|14:27:20|GMT+0800
+
+[info] Log at : 2023/7/27|14:27:39|GMT+0800
+
+[info] Log at : 2023/7/27|14:29:26|GMT+0800
+
+[info] project closed: lora_gateway
+[info] Log at : 2023/7/27|14:30:05|GMT+0800
+
+[info] Log at : 2023/7/28|08:54:52|GMT+0800
+
+[info] Log at : 2023/7/29|10:56:45|GMT+0800
+
+[info] Log at : 2023/7/29|10:57:06|GMT+0800
+
+[info] Log at : 2023/8/2|17:20:29|GMT+0800
+
+[info] Log at : 2023/8/2|17:20:36|GMT+0800
+
+[info] Log at : 2023/8/7|08:34:28|GMT+0800
+

+ 5 - 0
app/MDKProject/.vscode/settings.json

@@ -0,0 +1,5 @@
+{
+    "files.associations": {
+        "bsp.h": "c"
+    }
+}

文件差異過大導致無法顯示
+ 8506 - 31
app/MDKProject/JLinkLog.txt


文件差異過大導致無法顯示
+ 2176 - 1166
app/MDKProject/Listings/lora_gateway.map


文件差異過大導致無法顯示
+ 694 - 691
app/MDKProject/Listings/startup_stm32f2xx.lst


文件差異過大導致無法顯示
+ 94 - 121
app/MDKProject/lora_gateway.uvguix.16936


+ 255 - 127
app/MDKProject/lora_gateway.uvoptx

@@ -120,7 +120,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>JL2CM3</Key>
-          <Name>-U69407005 -O78 -S6 -ZTIFSpeedSel500 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F2xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F207ZGTx$CMSIS\Flash\STM32F2xx_1024.FLM)</Name>
+          <Name>-U69406807 -O78 -S6 -ZTIFSpeedSel500 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F2xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F207ZGTx$CMSIS\Flash\STM32F2xx_1024.FLM)</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
@@ -158,7 +158,7 @@
         <Mm>
           <WinNumber>1</WinNumber>
           <SubType>8</SubType>
-          <ItemText>UART6_RX_BUF</ItemText>
+          <ItemText>&amp;LoRaSettings</ItemText>
           <AccSizeX>0</AccSizeX>
         </Mm>
       </MemoryWindow1>
@@ -168,7 +168,7 @@
       <DebugFlag>
         <trace>0</trace>
         <periodic>1</periodic>
-        <aLwin>0</aLwin>
+        <aLwin>1</aLwin>
         <aCover>0</aCover>
         <aSer1>0</aSer1>
         <aSer2>0</aSer2>
@@ -216,7 +216,7 @@
 
   <Group>
     <GroupName>USER</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -271,8 +271,8 @@
   </Group>
 
   <Group>
-    <GroupName>Libraries</GroupName>
-    <tvExp>0</tvExp>
+    <GroupName>SYSTEM</GroupName>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
@@ -283,8 +283,8 @@
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>..\Libraries\src\misc.c</PathWithFileName>
-      <FilenameWithoutPath>misc.c</FilenameWithoutPath>
+      <PathWithFileName>..\SYSTEM\source\task.c</PathWithFileName>
+      <FilenameWithoutPath>task.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
@@ -295,8 +295,8 @@
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>..\Libraries\src\stm32f2xx_adc.c</PathWithFileName>
-      <FilenameWithoutPath>stm32f2xx_adc.c</FilenameWithoutPath>
+      <PathWithFileName>..\SYSTEM\source\gateway_message.c</PathWithFileName>
+      <FilenameWithoutPath>gateway_message.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
@@ -307,8 +307,8 @@
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>..\Libraries\src\stm32f2xx_can.c</PathWithFileName>
-      <FilenameWithoutPath>stm32f2xx_can.c</FilenameWithoutPath>
+      <PathWithFileName>..\SYSTEM\source\myFile.c</PathWithFileName>
+      <FilenameWithoutPath>myFile.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
@@ -316,6 +316,62 @@
       <GroupNumber>2</GroupNumber>
       <FileNumber>8</FileNumber>
       <FileType>1</FileType>
+      <tvExp>1</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\SYSTEM\source\protocol.c</PathWithFileName>
+      <FilenameWithoutPath>protocol.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+  </Group>
+
+  <Group>
+    <GroupName>Libraries</GroupName>
+    <tvExp>0</tvExp>
+    <tvExpOptDlg>0</tvExpOptDlg>
+    <cbSel>0</cbSel>
+    <RteFlg>0</RteFlg>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>9</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Libraries\src\misc.c</PathWithFileName>
+      <FilenameWithoutPath>misc.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>10</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Libraries\src\stm32f2xx_adc.c</PathWithFileName>
+      <FilenameWithoutPath>stm32f2xx_adc.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>11</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Libraries\src\stm32f2xx_can.c</PathWithFileName>
+      <FilenameWithoutPath>stm32f2xx_can.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>12</FileNumber>
+      <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
@@ -325,8 +381,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>9</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>13</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -337,8 +393,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>10</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>14</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -349,8 +405,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>11</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>15</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -361,8 +417,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>12</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>16</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -373,8 +429,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>13</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>17</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -385,8 +441,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>14</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>18</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -397,8 +453,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>15</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>19</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -409,8 +465,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>16</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>20</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -421,8 +477,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>17</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>21</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -433,8 +489,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>18</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -445,8 +501,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>19</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -457,8 +513,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>20</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -469,8 +525,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -481,8 +537,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -493,8 +549,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -505,8 +561,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -517,8 +573,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -529,8 +585,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -541,8 +597,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -553,8 +609,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -565,8 +621,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -577,8 +633,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -589,8 +645,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -601,8 +657,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -613,8 +669,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -625,8 +681,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -637,8 +693,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>2</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -657,8 +713,8 @@
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <File>
-      <GroupNumber>3</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <GroupNumber>4</GroupNumber>
+      <FileNumber>40</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -677,8 +733,8 @@
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <File>
-      <GroupNumber>4</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <GroupNumber>5</GroupNumber>
+      <FileNumber>41</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -689,8 +745,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>4</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <GroupNumber>5</GroupNumber>
+      <FileNumber>42</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -701,8 +757,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>4</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <GroupNumber>5</GroupNumber>
+      <FileNumber>43</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -713,8 +769,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>4</GroupNumber>
-      <FileNumber>40</FileNumber>
+      <GroupNumber>5</GroupNumber>
+      <FileNumber>44</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -725,8 +781,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>4</GroupNumber>
-      <FileNumber>41</FileNumber>
+      <GroupNumber>5</GroupNumber>
+      <FileNumber>45</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -737,8 +793,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>4</GroupNumber>
-      <FileNumber>42</FileNumber>
+      <GroupNumber>5</GroupNumber>
+      <FileNumber>46</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -749,8 +805,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>4</GroupNumber>
-      <FileNumber>43</FileNumber>
+      <GroupNumber>5</GroupNumber>
+      <FileNumber>47</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -761,8 +817,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>4</GroupNumber>
-      <FileNumber>44</FileNumber>
+      <GroupNumber>5</GroupNumber>
+      <FileNumber>48</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -772,6 +828,18 @@
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>5</GroupNumber>
+      <FileNumber>49</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\HARDWARE\sources\spi.c</PathWithFileName>
+      <FilenameWithoutPath>spi.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
@@ -781,8 +849,8 @@
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <File>
-      <GroupNumber>5</GroupNumber>
-      <FileNumber>45</FileNumber>
+      <GroupNumber>6</GroupNumber>
+      <FileNumber>50</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -793,8 +861,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>5</GroupNumber>
-      <FileNumber>46</FileNumber>
+      <GroupNumber>6</GroupNumber>
+      <FileNumber>51</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -805,8 +873,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>5</GroupNumber>
-      <FileNumber>47</FileNumber>
+      <GroupNumber>6</GroupNumber>
+      <FileNumber>52</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -825,26 +893,86 @@
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <File>
-      <GroupNumber>6</GroupNumber>
-      <FileNumber>48</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>53</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>..\SX1278\sx1276.c</PathWithFileName>
+      <PathWithFileName>..\Sx1278\radio\radio.c</PathWithFileName>
+      <FilenameWithoutPath>radio.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>54</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Sx1278\radio\sx1276.c</PathWithFileName>
       <FilenameWithoutPath>sx1276.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>6</GroupNumber>
-      <FileNumber>49</FileNumber>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>55</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Sx1278\radio\sx1276-Fsk.c</PathWithFileName>
+      <FilenameWithoutPath>sx1276-Fsk.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>56</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Sx1278\radio\sx1276-FskMisc.c</PathWithFileName>
+      <FilenameWithoutPath>sx1276-FskMisc.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>57</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Sx1278\radio\sx1276-LoRa.c</PathWithFileName>
+      <FilenameWithoutPath>sx1276-LoRa.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>58</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>..\SX1278\sx1276-board.c</PathWithFileName>
-      <FilenameWithoutPath>sx1276-board.c</FilenameWithoutPath>
+      <PathWithFileName>..\Sx1278\radio\sx1276-LoRaMisc.c</PathWithFileName>
+      <FilenameWithoutPath>sx1276-LoRaMisc.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>7</GroupNumber>
+      <FileNumber>59</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\Sx1278\radio\sx1276-Hal.c</PathWithFileName>
+      <FilenameWithoutPath>sx1276-Hal.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
@@ -857,8 +985,8 @@
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <File>
-      <GroupNumber>7</GroupNumber>
-      <FileNumber>50</FileNumber>
+      <GroupNumber>8</GroupNumber>
+      <FileNumber>60</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -869,8 +997,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>7</GroupNumber>
-      <FileNumber>51</FileNumber>
+      <GroupNumber>8</GroupNumber>
+      <FileNumber>61</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -881,8 +1009,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>7</GroupNumber>
-      <FileNumber>52</FileNumber>
+      <GroupNumber>8</GroupNumber>
+      <FileNumber>62</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -893,8 +1021,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>7</GroupNumber>
-      <FileNumber>53</FileNumber>
+      <GroupNumber>8</GroupNumber>
+      <FileNumber>63</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -905,8 +1033,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>7</GroupNumber>
-      <FileNumber>54</FileNumber>
+      <GroupNumber>8</GroupNumber>
+      <FileNumber>64</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -917,8 +1045,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>7</GroupNumber>
-      <FileNumber>55</FileNumber>
+      <GroupNumber>8</GroupNumber>
+      <FileNumber>65</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -929,8 +1057,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>7</GroupNumber>
-      <FileNumber>56</FileNumber>
+      <GroupNumber>8</GroupNumber>
+      <FileNumber>66</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -941,8 +1069,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>7</GroupNumber>
-      <FileNumber>57</FileNumber>
+      <GroupNumber>8</GroupNumber>
+      <FileNumber>67</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -953,8 +1081,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>7</GroupNumber>
-      <FileNumber>58</FileNumber>
+      <GroupNumber>8</GroupNumber>
+      <FileNumber>68</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -965,8 +1093,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>7</GroupNumber>
-      <FileNumber>59</FileNumber>
+      <GroupNumber>8</GroupNumber>
+      <FileNumber>69</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -985,8 +1113,8 @@
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <File>
-      <GroupNumber>8</GroupNumber>
-      <FileNumber>60</FileNumber>
+      <GroupNumber>9</GroupNumber>
+      <FileNumber>70</FileNumber>
       <FileType>5</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -997,8 +1125,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>8</GroupNumber>
-      <FileNumber>61</FileNumber>
+      <GroupNumber>9</GroupNumber>
+      <FileNumber>71</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1009,8 +1137,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>8</GroupNumber>
-      <FileNumber>62</FileNumber>
+      <GroupNumber>9</GroupNumber>
+      <FileNumber>72</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1029,8 +1157,8 @@
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <File>
-      <GroupNumber>9</GroupNumber>
-      <FileNumber>63</FileNumber>
+      <GroupNumber>10</GroupNumber>
+      <FileNumber>73</FileNumber>
       <FileType>5</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
@@ -1041,8 +1169,8 @@
       <bShared>0</bShared>
     </File>
     <File>
-      <GroupNumber>9</GroupNumber>
-      <FileNumber>64</FileNumber>
+      <GroupNumber>10</GroupNumber>
+      <FileNumber>74</FileNumber>
       <FileType>5</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>

+ 63 - 8
app/MDKProject/lora_gateway.uvprojx

@@ -206,7 +206,7 @@
             <Ro3Chk>0</Ro3Chk>
             <Ir1Chk>1</Ir1Chk>
             <Ir2Chk>0</Ir2Chk>
-            <Ra1Chk>0</Ra1Chk>
+            <Ra1Chk>1</Ra1Chk>
             <Ra2Chk>0</Ra2Chk>
             <Ra3Chk>0</Ra3Chk>
             <Im1Chk>1</Im1Chk>
@@ -285,7 +285,7 @@
               <OCR_RVCT6>
                 <Type>0</Type>
                 <StartAddress>0x68000000</StartAddress>
-                <Size>0x100000</Size>
+                <Size>0x80000</Size>
               </OCR_RVCT6>
               <OCR_RVCT7>
                 <Type>0</Type>
@@ -336,9 +336,9 @@
             <v6Rtti>0</v6Rtti>
             <VariousControls>
               <MiscControls></MiscControls>
-              <Define>USE_STDPERIPH_DRIVER</Define>
+              <Define>USE_STDPERIPH_DRIVER,DATA_IN_ExtSRAM,MASTER</Define>
               <Undefine></Undefine>
-              <IncludePath>..\CORE;..\Libraries\inc;..\USER;..\HARDWARE\includes;..\USER\FatFS\src;..\SX1278;..\UCOS-II\CONFIG;..\UCOS-II\Ports;..\UCOS-II\Source</IncludePath>
+              <IncludePath>..\CORE;..\Libraries\inc;..\USER;..\HARDWARE\includes;..\USER\FatFS\src;..\UCOS-II\CONFIG;..\UCOS-II\Ports;..\UCOS-II\Source;..\SYSTEM\includes;..\Sx1278\radio;..\Sx1278\platform</IncludePath>
             </VariousControls>
           </Cads>
           <Aads>
@@ -369,7 +369,7 @@
             <TextAddressRange>0x08000000</TextAddressRange>
             <DataAddressRange>0x20000000</DataAddressRange>
             <pXoBase></pXoBase>
-            <ScatterFile></ScatterFile>
+            <ScatterFile>..\OBJ\lora_gateway.sct</ScatterFile>
             <IncludeLibs></IncludeLibs>
             <IncludeLibsPath></IncludeLibsPath>
             <Misc></Misc>
@@ -404,6 +404,31 @@
             </File>
           </Files>
         </Group>
+        <Group>
+          <GroupName>SYSTEM</GroupName>
+          <Files>
+            <File>
+              <FileName>task.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\SYSTEM\source\task.c</FilePath>
+            </File>
+            <File>
+              <FileName>gateway_message.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\SYSTEM\source\gateway_message.c</FilePath>
+            </File>
+            <File>
+              <FileName>myFile.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\SYSTEM\source\myFile.c</FilePath>
+            </File>
+            <File>
+              <FileName>protocol.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\SYSTEM\source\protocol.c</FilePath>
+            </File>
+          </Files>
+        </Group>
         <Group>
           <GroupName>Libraries</GroupName>
           <Files>
@@ -617,6 +642,11 @@
               <FileType>1</FileType>
               <FilePath>..\HARDWARE\sources\led.c</FilePath>
             </File>
+            <File>
+              <FileName>spi.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\HARDWARE\sources\spi.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>
@@ -642,15 +672,40 @@
         <Group>
           <GroupName>Sx1278</GroupName>
           <Files>
+            <File>
+              <FileName>radio.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Sx1278\radio\radio.c</FilePath>
+            </File>
             <File>
               <FileName>sx1276.c</FileName>
               <FileType>1</FileType>
-              <FilePath>..\SX1278\sx1276.c</FilePath>
+              <FilePath>..\Sx1278\radio\sx1276.c</FilePath>
+            </File>
+            <File>
+              <FileName>sx1276-Fsk.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Sx1278\radio\sx1276-Fsk.c</FilePath>
+            </File>
+            <File>
+              <FileName>sx1276-FskMisc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Sx1278\radio\sx1276-FskMisc.c</FilePath>
+            </File>
+            <File>
+              <FileName>sx1276-LoRa.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Sx1278\radio\sx1276-LoRa.c</FilePath>
+            </File>
+            <File>
+              <FileName>sx1276-LoRaMisc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\Sx1278\radio\sx1276-LoRaMisc.c</FilePath>
             </File>
             <File>
-              <FileName>sx1276-board.c</FileName>
+              <FileName>sx1276-Hal.c</FileName>
               <FileType>1</FileType>
-              <FilePath>..\SX1278\sx1276-board.c</FilePath>
+              <FilePath>..\Sx1278\radio\sx1276-Hal.c</FilePath>
             </File>
           </Files>
         </Group>

二進制
app/OBJ/cjson.crf


二進制
app/OBJ/demo_nand_fatfs.crf


二進制
app/OBJ/diskio.crf


二進制
app/OBJ/gateway_message.crf


+ 38 - 0
app/OBJ/gateway_message.d

@@ -0,0 +1,38 @@
+..\obj\gateway_message.o: ..\SYSTEM\source\gateway_message.c
+..\obj\gateway_message.o: ..\SYSTEM\includes\gateway_message.h
+..\obj\gateway_message.o: ..\USER\stm32f2xx.h
+..\obj\gateway_message.o: ..\CORE\core_cm3.h
+..\obj\gateway_message.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\gateway_message.o: ..\CORE\core_cmInstr.h
+..\obj\gateway_message.o: ..\CORE\core_cmFunc.h
+..\obj\gateway_message.o: ..\USER\system_stm32f2xx.h
+..\obj\gateway_message.o: ..\USER\stm32f2xx_conf.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_adc.h
+..\obj\gateway_message.o: ..\USER\stm32f2xx.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_can.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_crc.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_cryp.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_dac.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_dbgmcu.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_dcmi.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_dma.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_exti.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_flash.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_fsmc.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_hash.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_gpio.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_i2c.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_iwdg.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_pwr.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_rcc.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_rng.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_rtc.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_sdio.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_spi.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_syscfg.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_tim.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_usart.h
+..\obj\gateway_message.o: ..\Libraries\inc\stm32f2xx_wwdg.h
+..\obj\gateway_message.o: ..\Libraries\inc\misc.h
+..\obj\gateway_message.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\string.h
+..\obj\gateway_message.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdlib.h

二進制
app/OBJ/log.crf


二進制
app/OBJ/lora_gateway.axf


+ 1 - 1
app/OBJ/lora_gateway.build_log.htm

@@ -22,7 +22,7 @@ Dialog DLL:      TCM.DLL V1.36.5.0
  
 <h2>Project:</h2>
 D:\Project\Lora_gateway_sx1278\app\MDKProject\lora_gateway.uvprojx
-Project File Date:  07/03/2023
+Project File Date:  08/02/2023
 
 <h2>Output:</h2>
 *** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin'

文件差異過大導致無法顯示
+ 2855 - 936
app/OBJ/lora_gateway.htm


+ 11 - 1
app/OBJ/lora_gateway.lnp

@@ -3,6 +3,10 @@
 "..\obj\stm32f2xx_it.o"
 "..\obj\system_stm32f2xx.o"
 "..\obj\demo_nand_fatfs.o"
+"..\obj\task.o"
+"..\obj\gateway_message.o"
+"..\obj\myfile.o"
+"..\obj\protocol.o"
 "..\obj\misc.o"
 "..\obj\stm32f2xx_adc.o"
 "..\obj\stm32f2xx_can.o"
@@ -43,11 +47,17 @@
 "..\obj\cjson.o"
 "..\obj\log.o"
 "..\obj\led.o"
+"..\obj\spi.o"
 "..\obj\cc936.o"
 "..\obj\diskio.o"
 "..\obj\ff.o"
+"..\obj\radio.o"
 "..\obj\sx1276.o"
-"..\obj\sx1276-board.o"
+"..\obj\sx1276-fsk.o"
+"..\obj\sx1276-fskmisc.o"
+"..\obj\sx1276-lora.o"
+"..\obj\sx1276-loramisc.o"
+"..\obj\sx1276-hal.o"
 "..\obj\os_core.o"
 "..\obj\os_flag.o"
 "..\obj\os_mbox.o"

+ 4 - 1
app/OBJ/lora_gateway.sct

@@ -9,7 +9,10 @@ LR_IROM1 0x08000000 0x00100000  {    ; load region size_region
    .ANY (+RO)
    .ANY (+XO)
   }
-  RW_IRAM1 0x20000000 0x00020000  {  ; RW data
+  RW_RAM1 0x68000000 0x00080000  {  ; RW data
+   .ANY (+RW +ZI)
+  }
+  RW_IRAM1 0x20000000 0x00020000  {
    .ANY (+RW +ZI)
   }
 }

文件差異過大導致無法顯示
+ 448 - 92
app/OBJ/lora_gateway_Target 1.dep


+ 0 - 3
app/OBJ/lora_gateway_sct.Bak

@@ -12,8 +12,5 @@ LR_IROM1 0x08000000 0x00100000  {    ; load region size_region
   RW_IRAM1 0x20000000 0x00020000  {  ; RW data
    .ANY (+RW +ZI)
   }
-  RW_RAM1 0x68000000 0x00100000  {
-    main.o (+RO)
-  }
 }
 

二進制
app/OBJ/main.crf


+ 10 - 2
app/OBJ/main.d

@@ -44,11 +44,19 @@
 ..\obj\main.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stddef.h
 ..\obj\main.o: ..\HARDWARE\includes\delay.h
 ..\obj\main.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\string.h
-..\obj\main.o: ..\UCOS-II\CONFIG\includes.h
+..\obj\main.o: ..\HARDWARE\includes\led.h
+..\obj\main.o: ..\HARDWARE\includes\log.h
 ..\obj\main.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdarg.h
+..\obj\main.o: ..\SYSTEM\includes\task.h
+..\obj\main.o: ..\UCOS-II\CONFIG\includes.h
 ..\obj\main.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdlib.h
 ..\obj\main.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\math.h
 ..\obj\main.o: ..\UCOS-II\Source\ucos_ii.h
 ..\obj\main.o: ..\UCOS-II\CONFIG\os_cfg.h
 ..\obj\main.o: ..\UCOS-II\Ports\os_cpu.h
-..\obj\main.o: ..\HARDWARE\includes\led.h
+..\obj\main.o: ..\SYSTEM\includes\myfile.h
+..\obj\main.o: ..\USER\bsp.h
+..\obj\main.o: ..\USER\FatFS\src\ff.h
+..\obj\main.o: ..\USER\FatFS\src\integer.h
+..\obj\main.o: ..\USER\FatFS\src\ffconf.h
+..\obj\main.o: ..\USER\FatFS\src\diskio.h

二進制
app/OBJ/malloc.crf


二進制
app/OBJ/myfile.crf


+ 46 - 0
app/OBJ/myfile.d

@@ -0,0 +1,46 @@
+..\obj\myfile.o: ..\SYSTEM\source\myFile.c
+..\obj\myfile.o: ..\SYSTEM\includes\myFile.h
+..\obj\myfile.o: ..\USER\bsp.h
+..\obj\myfile.o: ..\USER\stm32f2xx.h
+..\obj\myfile.o: ..\CORE\core_cm3.h
+..\obj\myfile.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\myfile.o: ..\CORE\core_cmInstr.h
+..\obj\myfile.o: ..\CORE\core_cmFunc.h
+..\obj\myfile.o: ..\USER\system_stm32f2xx.h
+..\obj\myfile.o: ..\USER\stm32f2xx_conf.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_adc.h
+..\obj\myfile.o: ..\USER\stm32f2xx.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_can.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_crc.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_cryp.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_dac.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_dbgmcu.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_dcmi.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_dma.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_exti.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_flash.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_fsmc.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_hash.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_gpio.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_i2c.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_iwdg.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_pwr.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_rcc.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_rng.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_rtc.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_sdio.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_spi.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_syscfg.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_tim.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_usart.h
+..\obj\myfile.o: ..\Libraries\inc\stm32f2xx_wwdg.h
+..\obj\myfile.o: ..\Libraries\inc\misc.h
+..\obj\myfile.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdio.h
+..\obj\myfile.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\string.h
+..\obj\myfile.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\myfile.o: ..\HARDWARE\includes\nandflash.h
+..\obj\myfile.o: ..\USER\FatFS\src\ff.h
+..\obj\myfile.o: ..\USER\FatFS\src\integer.h
+..\obj\myfile.o: ..\USER\FatFS\src\ffconf.h
+..\obj\myfile.o: ..\USER\FatFS\src\diskio.h
+..\obj\myfile.o: ..\USER\demo_nand_fatfs.h

二進制
app/OBJ/nandflash.crf


二進制
app/OBJ/protocol.crf


+ 39 - 0
app/OBJ/protocol.d

@@ -0,0 +1,39 @@
+..\obj\protocol.o: ..\SYSTEM\source\protocol.c
+..\obj\protocol.o: ..\SYSTEM\includes\protocol.h
+..\obj\protocol.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\protocol.o: ..\SYSTEM\includes\gateway_message.h
+..\obj\protocol.o: ..\USER\stm32f2xx.h
+..\obj\protocol.o: ..\CORE\core_cm3.h
+..\obj\protocol.o: ..\CORE\core_cmInstr.h
+..\obj\protocol.o: ..\CORE\core_cmFunc.h
+..\obj\protocol.o: ..\USER\system_stm32f2xx.h
+..\obj\protocol.o: ..\USER\stm32f2xx_conf.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_adc.h
+..\obj\protocol.o: ..\USER\stm32f2xx.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_can.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_crc.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_cryp.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_dac.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_dbgmcu.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_dcmi.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_dma.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_exti.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_flash.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_fsmc.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_hash.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_gpio.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_i2c.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_iwdg.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_pwr.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_rcc.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_rng.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_rtc.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_sdio.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_spi.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_syscfg.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_tim.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_usart.h
+..\obj\protocol.o: ..\Libraries\inc\stm32f2xx_wwdg.h
+..\obj\protocol.o: ..\Libraries\inc\misc.h
+..\obj\protocol.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\protocol.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\string.h

二進制
app/OBJ/radio.crf


+ 7 - 0
app/OBJ/radio.d

@@ -0,0 +1,7 @@
+..\obj\radio.o: ..\Sx1278\radio\radio.c
+..\obj\radio.o: ..\Sx1278\platform\platform.h
+..\obj\radio.o: ..\Sx1278\platform\sx12xxEiger.h
+..\obj\radio.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\radio.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdbool.h
+..\obj\radio.o: ..\Sx1278\radio\radio.h
+..\obj\radio.o: ..\Sx1278\radio\sx1276.h

二進制
app/OBJ/spi.crf


+ 37 - 0
app/OBJ/spi.d

@@ -0,0 +1,37 @@
+..\obj\spi.o: ..\HARDWARE\sources\spi.c
+..\obj\spi.o: ..\HARDWARE\includes\spi.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_spi.h
+..\obj\spi.o: ..\USER\stm32f2xx.h
+..\obj\spi.o: ..\CORE\core_cm3.h
+..\obj\spi.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\spi.o: ..\CORE\core_cmInstr.h
+..\obj\spi.o: ..\CORE\core_cmFunc.h
+..\obj\spi.o: ..\USER\system_stm32f2xx.h
+..\obj\spi.o: ..\USER\stm32f2xx_conf.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_adc.h
+..\obj\spi.o: ..\USER\stm32f2xx.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_can.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_crc.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_cryp.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_dac.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_dbgmcu.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_dcmi.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_dma.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_exti.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_flash.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_fsmc.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_hash.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_gpio.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_i2c.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_iwdg.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_pwr.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_rcc.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_rng.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_rtc.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_sdio.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_spi.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_syscfg.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_tim.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_usart.h
+..\obj\spi.o: ..\Libraries\inc\stm32f2xx_wwdg.h
+..\obj\spi.o: ..\Libraries\inc\misc.h

二進制
app/OBJ/sram.crf


二進制
app/OBJ/stm32f2xx_it.crf


二進制
app/OBJ/sx1276-board.crf


+ 0 - 43
app/OBJ/sx1276-board.d

@@ -1,43 +0,0 @@
-..\obj\sx1276-board.o: ..\SX1278\sx1276-board.c
-..\obj\sx1276-board.o: ..\SX1278\radio.h
-..\obj\sx1276-board.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdbool.h
-..\obj\sx1276-board.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
-..\obj\sx1276-board.o: ..\SX1278\sx1276.h
-..\obj\sx1276-board.o: ..\SX1278\sx1276Regs-Fsk.h
-..\obj\sx1276-board.o: ..\SX1278\sx1276Regs-LoRa.h
-..\obj\sx1276-board.o: ..\SX1278\sx1276-board.h
-..\obj\sx1276-board.o: ..\HARDWARE\includes\delay.h
-..\obj\sx1276-board.o: ..\USER\stm32f2xx.h
-..\obj\sx1276-board.o: ..\CORE\core_cm3.h
-..\obj\sx1276-board.o: ..\CORE\core_cmInstr.h
-..\obj\sx1276-board.o: ..\CORE\core_cmFunc.h
-..\obj\sx1276-board.o: ..\USER\system_stm32f2xx.h
-..\obj\sx1276-board.o: ..\USER\stm32f2xx_conf.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_adc.h
-..\obj\sx1276-board.o: ..\USER\stm32f2xx.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_can.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_crc.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_cryp.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_dac.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_dbgmcu.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_dcmi.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_dma.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_exti.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_flash.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_fsmc.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_hash.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_gpio.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_i2c.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_iwdg.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_pwr.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_rcc.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_rng.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_rtc.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_sdio.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_spi.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_syscfg.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_tim.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_usart.h
-..\obj\sx1276-board.o: ..\Libraries\inc\stm32f2xx_wwdg.h
-..\obj\sx1276-board.o: ..\Libraries\inc\misc.h
-..\obj\sx1276-board.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdio.h

二進制
app/OBJ/sx1276-fsk.crf


+ 15 - 0
app/OBJ/sx1276-fsk.d

@@ -0,0 +1,15 @@
+..\obj\sx1276-fsk.o: ..\Sx1278\radio\sx1276-Fsk.c
+..\obj\sx1276-fsk.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\string.h
+..\obj\sx1276-fsk.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\math.h
+..\obj\sx1276-fsk.o: ..\Sx1278\platform\platform.h
+..\obj\sx1276-fsk.o: ..\Sx1278\platform\sx12xxEiger.h
+..\obj\sx1276-fsk.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\sx1276-fsk.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdbool.h
+..\obj\sx1276-fsk.o: ..\Sx1278\radio\radio.h
+..\obj\sx1276-fsk.o: ..\Sx1278\radio\sx1276-Hal.h
+..\obj\sx1276-fsk.o: ..\UCOS-II\Source\ucos_ii.h
+..\obj\sx1276-fsk.o: ..\UCOS-II\CONFIG\os_cfg.h
+..\obj\sx1276-fsk.o: ..\UCOS-II\Ports\os_cpu.h
+..\obj\sx1276-fsk.o: ..\Sx1278\radio\sx1276.h
+..\obj\sx1276-fsk.o: ..\Sx1278\radio\sx1276-FskMisc.h
+..\obj\sx1276-fsk.o: ..\Sx1278\radio\sx1276-Fsk.h

二進制
app/OBJ/sx1276-fskmisc.crf


+ 12 - 0
app/OBJ/sx1276-fskmisc.d

@@ -0,0 +1,12 @@
+..\obj\sx1276-fskmisc.o: ..\Sx1278\radio\sx1276-FskMisc.c
+..\obj\sx1276-fskmisc.o: ..\Sx1278\platform\platform.h
+..\obj\sx1276-fskmisc.o: ..\Sx1278\platform\sx12xxEiger.h
+..\obj\sx1276-fskmisc.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\sx1276-fskmisc.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdbool.h
+..\obj\sx1276-fskmisc.o: ..\Sx1278\radio\sx1276-Hal.h
+..\obj\sx1276-fskmisc.o: ..\UCOS-II\Source\ucos_ii.h
+..\obj\sx1276-fskmisc.o: ..\UCOS-II\CONFIG\os_cfg.h
+..\obj\sx1276-fskmisc.o: ..\UCOS-II\Ports\os_cpu.h
+..\obj\sx1276-fskmisc.o: ..\Sx1278\radio\sx1276.h
+..\obj\sx1276-fskmisc.o: ..\Sx1278\radio\sx1276-Fsk.h
+..\obj\sx1276-fskmisc.o: ..\Sx1278\radio\sx1276-FskMisc.h

二進制
app/OBJ/sx1276-hal.crf


+ 44 - 0
app/OBJ/sx1276-hal.d

@@ -0,0 +1,44 @@
+..\obj\sx1276-hal.o: ..\Sx1278\radio\sx1276-Hal.c
+..\obj\sx1276-hal.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\sx1276-hal.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdbool.h
+..\obj\sx1276-hal.o: ..\Sx1278\platform\platform.h
+..\obj\sx1276-hal.o: ..\Sx1278\platform\sx12xxEiger.h
+..\obj\sx1276-hal.o: ..\HARDWARE\includes\spi.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_spi.h
+..\obj\sx1276-hal.o: ..\USER\stm32f2xx.h
+..\obj\sx1276-hal.o: ..\CORE\core_cm3.h
+..\obj\sx1276-hal.o: ..\CORE\core_cmInstr.h
+..\obj\sx1276-hal.o: ..\CORE\core_cmFunc.h
+..\obj\sx1276-hal.o: ..\USER\system_stm32f2xx.h
+..\obj\sx1276-hal.o: ..\USER\stm32f2xx_conf.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_adc.h
+..\obj\sx1276-hal.o: ..\USER\stm32f2xx.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_can.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_crc.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_cryp.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_dac.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_dbgmcu.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_dcmi.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_dma.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_exti.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_flash.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_fsmc.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_hash.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_gpio.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_i2c.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_iwdg.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_pwr.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_rcc.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_rng.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_rtc.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_sdio.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_spi.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_syscfg.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_tim.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_usart.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\stm32f2xx_wwdg.h
+..\obj\sx1276-hal.o: ..\Libraries\inc\misc.h
+..\obj\sx1276-hal.o: ..\Sx1278\radio\sx1276-Hal.h
+..\obj\sx1276-hal.o: ..\UCOS-II\Source\ucos_ii.h
+..\obj\sx1276-hal.o: ..\UCOS-II\CONFIG\os_cfg.h
+..\obj\sx1276-hal.o: ..\UCOS-II\Ports\os_cpu.h

二進制
app/OBJ/sx1276-lora.crf


+ 48 - 0
app/OBJ/sx1276-lora.d

@@ -0,0 +1,48 @@
+..\obj\sx1276-lora.o: ..\Sx1278\radio\sx1276-LoRa.c
+..\obj\sx1276-lora.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\string.h
+..\obj\sx1276-lora.o: ..\Sx1278\platform\platform.h
+..\obj\sx1276-lora.o: ..\Sx1278\platform\sx12xxEiger.h
+..\obj\sx1276-lora.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\sx1276-lora.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdbool.h
+..\obj\sx1276-lora.o: ..\Sx1278\radio\radio.h
+..\obj\sx1276-lora.o: ..\Sx1278\radio\sx1276-Hal.h
+..\obj\sx1276-lora.o: ..\UCOS-II\Source\ucos_ii.h
+..\obj\sx1276-lora.o: ..\UCOS-II\CONFIG\os_cfg.h
+..\obj\sx1276-lora.o: ..\UCOS-II\Ports\os_cpu.h
+..\obj\sx1276-lora.o: ..\Sx1278\radio\sx1276.h
+..\obj\sx1276-lora.o: ..\Sx1278\radio\sx1276-LoRaMisc.h
+..\obj\sx1276-lora.o: ..\Sx1278\radio\sx1276-LoRa.h
+..\obj\sx1276-lora.o: ..\HARDWARE\includes\delay.h
+..\obj\sx1276-lora.o: ..\USER\stm32f2xx.h
+..\obj\sx1276-lora.o: ..\CORE\core_cm3.h
+..\obj\sx1276-lora.o: ..\CORE\core_cmInstr.h
+..\obj\sx1276-lora.o: ..\CORE\core_cmFunc.h
+..\obj\sx1276-lora.o: ..\USER\system_stm32f2xx.h
+..\obj\sx1276-lora.o: ..\USER\stm32f2xx_conf.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_adc.h
+..\obj\sx1276-lora.o: ..\USER\stm32f2xx.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_can.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_crc.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_cryp.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_dac.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_dbgmcu.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_dcmi.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_dma.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_exti.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_flash.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_fsmc.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_hash.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_gpio.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_i2c.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_iwdg.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_pwr.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_rcc.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_rng.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_rtc.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_sdio.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_spi.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_syscfg.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_tim.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_usart.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\stm32f2xx_wwdg.h
+..\obj\sx1276-lora.o: ..\Libraries\inc\misc.h

二進制
app/OBJ/sx1276-loramisc.crf


+ 12 - 0
app/OBJ/sx1276-loramisc.d

@@ -0,0 +1,12 @@
+..\obj\sx1276-loramisc.o: ..\Sx1278\radio\sx1276-LoRaMisc.c
+..\obj\sx1276-loramisc.o: ..\Sx1278\platform\platform.h
+..\obj\sx1276-loramisc.o: ..\Sx1278\platform\sx12xxEiger.h
+..\obj\sx1276-loramisc.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\sx1276-loramisc.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdbool.h
+..\obj\sx1276-loramisc.o: ..\Sx1278\radio\sx1276-Hal.h
+..\obj\sx1276-loramisc.o: ..\UCOS-II\Source\ucos_ii.h
+..\obj\sx1276-loramisc.o: ..\UCOS-II\CONFIG\os_cfg.h
+..\obj\sx1276-loramisc.o: ..\UCOS-II\Ports\os_cpu.h
+..\obj\sx1276-loramisc.o: ..\Sx1278\radio\sx1276.h
+..\obj\sx1276-loramisc.o: ..\Sx1278\radio\sx1276-LoRa.h
+..\obj\sx1276-loramisc.o: ..\Sx1278\radio\sx1276-LoRaMisc.h

二進制
app/OBJ/sx1276.crf


+ 47 - 9
app/OBJ/sx1276.d

@@ -1,10 +1,48 @@
-..\obj\sx1276.o: ..\SX1278\sx1276.c
-..\obj\sx1276.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\math.h
-..\obj\sx1276.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\string.h
-..\obj\sx1276.o: ..\SX1278\radio.h
-..\obj\sx1276.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdbool.h
+..\obj\sx1276.o: ..\Sx1278\radio\sx1276.c
+..\obj\sx1276.o: ..\Sx1278\platform\platform.h
+..\obj\sx1276.o: ..\Sx1278\platform\sx12xxEiger.h
 ..\obj\sx1276.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
-..\obj\sx1276.o: ..\SX1278\sx1276.h
-..\obj\sx1276.o: ..\SX1278\sx1276Regs-Fsk.h
-..\obj\sx1276.o: ..\SX1278\sx1276Regs-LoRa.h
-..\obj\sx1276.o: ..\SX1278\sx1276-board.h
+..\obj\sx1276.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdbool.h
+..\obj\sx1276.o: ..\Sx1278\radio\radio.h
+..\obj\sx1276.o: ..\Sx1278\radio\sx1276.h
+..\obj\sx1276.o: ..\Sx1278\radio\sx1276-Hal.h
+..\obj\sx1276.o: ..\UCOS-II\Source\ucos_ii.h
+..\obj\sx1276.o: ..\UCOS-II\CONFIG\os_cfg.h
+..\obj\sx1276.o: ..\UCOS-II\Ports\os_cpu.h
+..\obj\sx1276.o: ..\Sx1278\radio\sx1276-Fsk.h
+..\obj\sx1276.o: ..\Sx1278\radio\sx1276-LoRa.h
+..\obj\sx1276.o: ..\HARDWARE\includes\delay.h
+..\obj\sx1276.o: ..\USER\stm32f2xx.h
+..\obj\sx1276.o: ..\CORE\core_cm3.h
+..\obj\sx1276.o: ..\CORE\core_cmInstr.h
+..\obj\sx1276.o: ..\CORE\core_cmFunc.h
+..\obj\sx1276.o: ..\USER\system_stm32f2xx.h
+..\obj\sx1276.o: ..\USER\stm32f2xx_conf.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_adc.h
+..\obj\sx1276.o: ..\USER\stm32f2xx.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_can.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_crc.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_cryp.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_dac.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_dbgmcu.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_dcmi.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_dma.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_exti.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_flash.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_fsmc.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_hash.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_gpio.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_i2c.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_iwdg.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_pwr.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_rcc.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_rng.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_rtc.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_sdio.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_spi.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_syscfg.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_tim.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_usart.h
+..\obj\sx1276.o: ..\Libraries\inc\stm32f2xx_wwdg.h
+..\obj\sx1276.o: ..\Libraries\inc\misc.h
+..\obj\sx1276.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdio.h

二進制
app/OBJ/sx127x_driver.crf


+ 45 - 0
app/OBJ/sx127x_driver.d

@@ -0,0 +1,45 @@
+..\obj\sx127x_driver.o: ..\Sx1278\sx127x_driver.c
+..\obj\sx127x_driver.o: ..\Sx1278\sx127x_driver.h
+..\obj\sx127x_driver.o: ..\USER\stm32f2xx.h
+..\obj\sx127x_driver.o: ..\CORE\core_cm3.h
+..\obj\sx127x_driver.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\sx127x_driver.o: ..\CORE\core_cmInstr.h
+..\obj\sx127x_driver.o: ..\CORE\core_cmFunc.h
+..\obj\sx127x_driver.o: ..\USER\system_stm32f2xx.h
+..\obj\sx127x_driver.o: ..\USER\stm32f2xx_conf.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_adc.h
+..\obj\sx127x_driver.o: ..\USER\stm32f2xx.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_can.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_crc.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_cryp.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_dac.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_dbgmcu.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_dcmi.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_dma.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_exti.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_flash.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_fsmc.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_hash.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_gpio.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_i2c.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_iwdg.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_pwr.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_rcc.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_rng.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_rtc.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_sdio.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_spi.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_syscfg.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_tim.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_usart.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\stm32f2xx_wwdg.h
+..\obj\sx127x_driver.o: ..\Libraries\inc\misc.h
+..\obj\sx127x_driver.o: ..\Sx1278\sx1276-LoRa.h
+..\obj\sx127x_driver.o: ..\Sx1278\sx127x_hal.h
+..\obj\sx127x_driver.o: ..\HARDWARE\includes\delay.h
+..\obj\sx127x_driver.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdio.h
+..\obj\sx127x_driver.o: ..\UCOS-II\Source\ucos_ii.h
+..\obj\sx127x_driver.o: ..\UCOS-II\CONFIG\os_cfg.h
+..\obj\sx127x_driver.o: ..\UCOS-II\Ports\os_cpu.h
+..\obj\sx127x_driver.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\string.h
+..\obj\sx127x_driver.o: ..\HARDWARE\includes\spi.h

二進制
app/OBJ/sx127x_hal.crf


+ 42 - 0
app/OBJ/sx127x_hal.d

@@ -0,0 +1,42 @@
+..\obj\sx127x_hal.o: ..\Sx1278\SX127x_hal.c
+..\obj\sx127x_hal.o: ..\Sx1278\sx127x_hal.h
+..\obj\sx127x_hal.o: ..\USER\stm32f2xx.h
+..\obj\sx127x_hal.o: ..\CORE\core_cm3.h
+..\obj\sx127x_hal.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\sx127x_hal.o: ..\CORE\core_cmInstr.h
+..\obj\sx127x_hal.o: ..\CORE\core_cmFunc.h
+..\obj\sx127x_hal.o: ..\USER\system_stm32f2xx.h
+..\obj\sx127x_hal.o: ..\USER\stm32f2xx_conf.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_adc.h
+..\obj\sx127x_hal.o: ..\USER\stm32f2xx.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_can.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_crc.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_cryp.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_dac.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_dbgmcu.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_dcmi.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_dma.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_exti.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_flash.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_fsmc.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_hash.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_gpio.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_i2c.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_iwdg.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_pwr.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_rcc.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_rng.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_rtc.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_sdio.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_spi.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_syscfg.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_tim.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_usart.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\stm32f2xx_wwdg.h
+..\obj\sx127x_hal.o: ..\Libraries\inc\misc.h
+..\obj\sx127x_hal.o: ..\HARDWARE\includes\delay.h
+..\obj\sx127x_hal.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdio.h
+..\obj\sx127x_hal.o: ..\UCOS-II\Source\ucos_ii.h
+..\obj\sx127x_hal.o: ..\UCOS-II\CONFIG\os_cfg.h
+..\obj\sx127x_hal.o: ..\UCOS-II\Ports\os_cpu.h
+..\obj\sx127x_hal.o: ..\HARDWARE\includes\spi.h

二進制
app/OBJ/system_stm32f2xx.crf


+ 2 - 0
app/OBJ/system_stm32f2xx.d

@@ -33,3 +33,5 @@
 ..\obj\system_stm32f2xx.o: ..\Libraries\inc\stm32f2xx_usart.h
 ..\obj\system_stm32f2xx.o: ..\Libraries\inc\stm32f2xx_wwdg.h
 ..\obj\system_stm32f2xx.o: ..\Libraries\inc\misc.h
+..\obj\system_stm32f2xx.o: ..\HARDWARE\includes\sram.h
+..\obj\system_stm32f2xx.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdio.h

二進制
app/OBJ/task.crf


+ 62 - 0
app/OBJ/task.d

@@ -0,0 +1,62 @@
+..\obj\task.o: ..\SYSTEM\source\task.c
+..\obj\task.o: ..\SYSTEM\includes\task.h
+..\obj\task.o: ..\UCOS-II\CONFIG\includes.h
+..\obj\task.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdarg.h
+..\obj\task.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdio.h
+..\obj\task.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdlib.h
+..\obj\task.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\math.h
+..\obj\task.o: ..\HARDWARE\includes\delay.h
+..\obj\task.o: ..\USER\stm32f2xx.h
+..\obj\task.o: ..\CORE\core_cm3.h
+..\obj\task.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdint.h
+..\obj\task.o: ..\CORE\core_cmInstr.h
+..\obj\task.o: ..\CORE\core_cmFunc.h
+..\obj\task.o: ..\USER\system_stm32f2xx.h
+..\obj\task.o: ..\USER\stm32f2xx_conf.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_adc.h
+..\obj\task.o: ..\USER\stm32f2xx.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_can.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_crc.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_cryp.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_dac.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_dbgmcu.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_dcmi.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_dma.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_exti.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_flash.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_fsmc.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_hash.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_gpio.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_i2c.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_iwdg.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_pwr.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_rcc.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_rng.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_rtc.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_sdio.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_spi.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_syscfg.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_tim.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_usart.h
+..\obj\task.o: ..\Libraries\inc\stm32f2xx_wwdg.h
+..\obj\task.o: ..\Libraries\inc\misc.h
+..\obj\task.o: ..\UCOS-II\Source\ucos_ii.h
+..\obj\task.o: ..\UCOS-II\CONFIG\os_cfg.h
+..\obj\task.o: ..\UCOS-II\Ports\os_cpu.h
+..\obj\task.o: ..\HARDWARE\includes\malloc.h
+..\obj\task.o: ..\HARDWARE\includes\cjson.h
+..\obj\task.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stddef.h
+..\obj\task.o: ..\SYSTEM\includes\myFile.h
+..\obj\task.o: ..\USER\bsp.h
+..\obj\task.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\string.h
+..\obj\task.o: ..\HARDWARE\includes\nandflash.h
+..\obj\task.o: ..\USER\FatFS\src\ff.h
+..\obj\task.o: ..\USER\FatFS\src\integer.h
+..\obj\task.o: ..\USER\FatFS\src\ffconf.h
+..\obj\task.o: ..\USER\FatFS\src\diskio.h
+..\obj\task.o: ..\USER\demo_nand_fatfs.h
+..\obj\task.o: ..\SYSTEM\includes\gateway_message.h
+..\obj\task.o: ..\HARDWARE\includes\log.h
+..\obj\task.o: ..\Sx1278\radio\sx1276.h
+..\obj\task.o: D:\workSoftware\stm32Software\mdk\mdkcore\ARM\ARMCC\Bin\..\include\stdbool.h
+..\obj\task.o: ..\Sx1278\radio\radio.h

二進制
app/OBJ/ucos_ii.crf


+ 0 - 1
app/OBJ/ucos_ii.d

@@ -1,6 +1,5 @@
 ..\obj\ucos_ii.o: ..\UCOS-II\Source\ucos_ii.c
 ..\obj\ucos_ii.o: ..\UCOS-II\Source\ucos_ii.h
-..\obj\ucos_ii.o: ..\UCOS-II\CONFIG\app_cfg.h
 ..\obj\ucos_ii.o: ..\UCOS-II\CONFIG\os_cfg.h
 ..\obj\ucos_ii.o: ..\UCOS-II\Ports\os_cpu.h
 ..\obj\ucos_ii.o: ..\UCOS-II\Source\os_core.c

二進制
app/OBJ/usart.crf


+ 0 - 321
app/SX1278/radio.h

@@ -1,321 +0,0 @@
-/*
- / _____)             _              | |
-( (____  _____ ____ _| |_ _____  ____| |__
- \____ \| ___ |    (_   _) ___ |/ ___)  _ \
- _____) ) ____| | | || |_| ____( (___| | | |
-(______/|_____)_|_|_| \__)_____)\____)_| |_|
-    (C)2013 Semtech
-
-Description: Generic radio driver definition
-
-License: Revised BSD License, see LICENSE.TXT file include in the project
-
-Maintainer: Miguel Luis and Gregory Cristian
-*/
-#ifndef __RADIO_H__
-#define __RADIO_H__
-#include "stdbool.h"	//bool¶¨Òå
-#include "stdint.h"	//uint8_tµÈÊý¾ÝÀàÐͶ¨Òå
-
-/*!
- * Radio driver supported modems
- */
-typedef enum
-{
-    MODEM_FSK = 0,
-    MODEM_LORA,
-}RadioModems_t;
-
-/*!
- * Radio driver internal state machine states definition
- */
-typedef enum
-{
-    RF_IDLE = 0,
-    RF_RX_RUNNING,
-    RF_TX_RUNNING,
-    RF_CAD,
-}RadioState_t;
-
-/*!
- * \brief Radio driver callback functions
- */
-typedef struct
-{
-    /*!
-     * \brief  Tx Done callback prototype.
-     */
-    void    ( *TxDone )( void );
-    /*!
-     * \brief  Tx Timeout callback prototype.
-     */
-    void    ( *TxTimeout )( void );
-    /*!
-     * \brief Rx Done callback prototype.
-     *
-     * \param [IN] payload Received buffer pointer
-     * \param [IN] size    Received buffer size
-     * \param [IN] rssi    RSSI value computed while receiving the frame [dBm]
-     * \param [IN] snr     Raw SNR value given by the radio hardware
-     *                     FSK : N/A ( set to 0 )
-     *                     LoRa: SNR value in dB
-     */
-    void    ( *RxDone )( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr );
-    /*!
-     * \brief  Rx Timeout callback prototype.
-     */
-    void    ( *RxTimeout )( void );
-    /*!
-     * \brief Rx Error callback prototype.
-     */
-    void    ( *RxError )( void );
-    /*!
-     * \brief  FHSS Change Channel callback prototype.
-     *
-     * \param [IN] currentChannel   Index number of the current channel
-     */
-    void ( *FhssChangeChannel )( uint8_t currentChannel );
-
-    /*!
-     * \brief CAD Done callback prototype.
-     *
-     * \param [IN] channelDetected    Channel Activity detected during the CAD
-     */
-    void ( *CadDone ) ( bool channelActivityDetected );
-}RadioEvents_t;
-
-/*!
- * \brief Radio driver definition
- */
-struct Radio_s
-{
-    /*!
-     * \brief Initializes the radio
-     *
-     * \param [IN] events Structure containing the driver callback functions
-     */
-    void    ( *Init )( RadioEvents_t *events );
-    /*!
-     * Return current radio status
-     *
-     * \param status Radio status.[RF_IDLE, RF_RX_RUNNING, RF_TX_RUNNING]
-     */
-    RadioState_t ( *GetStatus )( void );
-    /*!
-     * \brief Configures the radio with the given modem
-     *
-     * \param [IN] modem Modem to be used [0: FSK, 1: LoRa] 
-     */
-    void    ( *SetModem )( RadioModems_t modem );
-    /*!
-     * \brief Sets the channel frequency
-     *
-     * \param [IN] freq         Channel RF frequency
-     */
-    void    ( *SetChannel )( uint32_t freq );
-    /*!
-     * \brief Sets the channels configuration
-     *
-     * \param [IN] modem      Radio modem to be used [0: FSK, 1: LoRa]
-     * \param [IN] freq       Channel RF frequency
-     * \param [IN] rssiThresh RSSI threshold
-     *
-     * \retval isFree         [true: Channel is free, false: Channel is not free]
-     */
-    bool    ( *IsChannelFree )( RadioModems_t modem, uint32_t freq, int16_t rssiThresh );
-    /*!
-     * \brief Generates a 32 bits random value based on the RSSI readings
-     *
-     * \remark This function sets the radio in LoRa modem mode and disables 
-     *         all interrupts.
-     *         After calling this function either Radio.SetRxConfig or
-     *         Radio.SetTxConfig functions must be called.
-     *
-     * \retval randomValue    32 bits random value
-     */
-    uint32_t ( *Random )( void );
-    /*!
-     * \brief Sets the reception parameters
-     *
-     * \param [IN] modem        Radio modem to be used [0: FSK, 1: LoRa]
-     * \param [IN] bandwidth    Sets the bandwidth
-     *                          FSK : >= 2600 and <= 250000 Hz
-     *                          LoRa: [0: 125 kHz, 1: 250 kHz,
-     *                                 2: 500 kHz, 3: Reserved] 
-     * \param [IN] datarate     Sets the Datarate
-     *                          FSK : 600..300000 bits/s
-     *                          LoRa: [6: 64, 7: 128, 8: 256, 9: 512,
-     *                                10: 1024, 11: 2048, 12: 4096  chips]
-     * \param [IN] coderate     Sets the coding rate (LoRa only)
-     *                          FSK : N/A ( set to 0 )
-     *                          LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8] 
-     * \param [IN] bandwidthAfc Sets the AFC Bandwidth (FSK only) 
-     *                          FSK : >= 2600 and <= 250000 Hz
-     *                          LoRa: N/A ( set to 0 ) 
-     * \param [IN] preambleLen  Sets the Preamble length
-     *                          FSK : Number of bytes 
-     *                          LoRa: Length in symbols (the hardware adds 4 more symbols)
-     * \param [IN] symbTimeout  Sets the RxSingle timeout value (LoRa only) 
-     *                          FSK : N/A ( set to 0 ) 
-     *                          LoRa: timeout in symbols
-     * \param [IN] fixLen       Fixed length packets [0: variable, 1: fixed]
-     * \param [IN] payloadLen   Sets payload length when fixed lenght is used
-     * \param [IN] crcOn        Enables/Disables the CRC [0: OFF, 1: ON]
-     * \param [IN] FreqHopOn    Enables disables the intra-packet frequency hopping
-     *                          FSK : N/A ( set to 0 )
-     *                          LoRa: [0: OFF, 1: ON]
-     * \param [IN] HopPeriod    Number of symbols bewteen each hop
-     *                          FSK : N/A ( set to 0 )
-     *                          LoRa: Number of symbols
-     * \param [IN] iqInverted   Inverts IQ signals (LoRa only)
-     *                          FSK : N/A ( set to 0 )
-     *                          LoRa: [0: not inverted, 1: inverted]
-     * \param [IN] rxContinuous Sets the reception in continuous mode
-     *                          [false: single mode, true: continuous mode]
-     */
-    void    ( *SetRxConfig )( RadioModems_t modem, uint32_t bandwidth,
-                              uint32_t datarate, uint8_t coderate,
-                              uint32_t bandwidthAfc, uint16_t preambleLen,
-                              uint16_t symbTimeout, bool fixLen,
-                              uint8_t payloadLen,
-                              bool crcOn, bool FreqHopOn, uint8_t HopPeriod,
-                              bool iqInverted, bool rxContinuous );
-    /*!
-     * \brief Sets the transmission parameters
-     *
-     * \param [IN] modem        Radio modem to be used [0: FSK, 1: LoRa] 
-     * \param [IN] power        Sets the output power [dBm]
-     * \param [IN] fdev         Sets the frequency deviation (FSK only)
-     *                          FSK : [Hz]
-     *                          LoRa: 0
-     * \param [IN] bandwidth    Sets the bandwidth (LoRa only)
-     *                          FSK : 0
-     *                          LoRa: [0: 125 kHz, 1: 250 kHz,
-     *                                 2: 500 kHz, 3: Reserved] 
-     * \param [IN] datarate     Sets the Datarate
-     *                          FSK : 600..300000 bits/s
-     *                          LoRa: [6: 64, 7: 128, 8: 256, 9: 512,
-     *                                10: 1024, 11: 2048, 12: 4096  chips]
-     * \param [IN] coderate     Sets the coding rate (LoRa only)
-     *                          FSK : N/A ( set to 0 )
-     *                          LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8] 
-     * \param [IN] preambleLen  Sets the preamble length
-     *                          FSK : Number of bytes 
-     *                          LoRa: Length in symbols (the hardware adds 4 more symbols)
-     * \param [IN] fixLen       Fixed length packets [0: variable, 1: fixed]
-     * \param [IN] crcOn        Enables disables the CRC [0: OFF, 1: ON]
-     * \param [IN] FreqHopOn    Enables disables the intra-packet frequency hopping
-     *                          FSK : N/A ( set to 0 )
-     *                          LoRa: [0: OFF, 1: ON]
-     * \param [IN] HopPeriod    Number of symbols bewteen each hop
-     *                          FSK : N/A ( set to 0 )
-     *                          LoRa: Number of symbols
-     * \param [IN] iqInverted   Inverts IQ signals (LoRa only)
-     *                          FSK : N/A ( set to 0 )
-     *                          LoRa: [0: not inverted, 1: inverted]
-     * \param [IN] timeout      Transmission timeout [ms]
-     */
-    void    ( *SetTxConfig )( RadioModems_t modem, int8_t power, uint32_t fdev, 
-                              uint32_t bandwidth, uint32_t datarate,
-                              uint8_t coderate, uint16_t preambleLen,
-                              bool fixLen, bool crcOn, bool FreqHopOn,
-                              uint8_t HopPeriod, bool iqInverted, uint32_t timeout );
-    /*!
-     * \brief Checks if the given RF frequency is supported by the hardware
-     *
-     * \param [IN] frequency RF frequency to be checked
-     * \retval isSupported [true: supported, false: unsupported]
-     */
-    bool    ( *CheckRfFrequency )( uint32_t frequency );
-    /*!
-     * \brief Computes the packet time on air in us for the given payload
-     *
-     * \Remark Can only be called once SetRxConfig or SetTxConfig have been called
-     *
-     * \param [IN] modem      Radio modem to be used [0: FSK, 1: LoRa]
-     * \param [IN] pktLen     Packet payload length
-     *
-     * \retval airTime        Computed airTime (us) for the given packet payload length
-     */
-    uint32_t  ( *TimeOnAir )( RadioModems_t modem, uint8_t pktLen );
-    /*!
-     * \brief Sends the buffer of size. Prepares the packet to be sent and sets
-     *        the radio in transmission
-     *
-     * \param [IN]: buffer     Buffer pointer
-     * \param [IN]: size       Buffer size
-     */
-    void    ( *Send )( uint8_t *buffer, uint8_t size );
-    /*!
-     * \brief Sets the radio in sleep mode
-     */
-    void    ( *Sleep )( void );
-    /*!
-     * \brief Sets the radio in standby mode
-     */
-    void    ( *Standby )( void );
-    /*!
-     * \brief Sets the radio in reception mode for the given time
-     * \param [IN] timeout Reception timeout [ms]
-     *                     [0: continuous, others timeout]
-     */
-    void    ( *Rx )( uint32_t timeout );
-    /*!
-     * \brief Start a Channel Activity Detection
-     */
-    void    ( *StartCad )( void );
-    /*!
-     * \brief Reads the current RSSI value
-     *
-     * \retval rssiValue Current RSSI value in [dBm]
-     */
-    int16_t ( *Rssi )( RadioModems_t modem );
-    /*!
-     * \brief Writes the radio register at the specified address
-     *
-     * \param [IN]: addr Register address
-     * \param [IN]: data New register value
-     */
-    void    ( *Write )( uint8_t addr, uint8_t data );
-    /*!
-     * \brief Reads the radio register at the specified address
-     *
-     * \param [IN]: addr Register address
-     * \retval data Register value
-     */
-    uint8_t ( *Read )( uint8_t addr );
-    /*!
-     * \brief Writes multiple radio registers starting at address
-     *
-     * \param [IN] addr   First Radio register address
-     * \param [IN] buffer Buffer containing the new register's values
-     * \param [IN] size   Number of registers to be written
-     */
-    void    ( *WriteBuffer )( uint8_t addr, uint8_t *buffer, uint8_t size );
-    /*!
-     * \brief Reads multiple radio registers starting at address
-     *
-     * \param [IN] addr First Radio register address
-     * \param [OUT] buffer Buffer where to copy the registers data
-     * \param [IN] size Number of registers to be read
-     */
-    void    ( *ReadBuffer )( uint8_t addr, uint8_t *buffer, uint8_t size );
-    /*!
-     * \brief Sets the maximum payload length.
-     *
-     * \param [IN] modem      Radio modem to be used [0: FSK, 1: LoRa]
-     * \param [IN] max        Maximum payload length in bytes
-     */
-    void ( *SetMaxPayloadLength )( RadioModems_t modem, uint8_t max );
-
-};
-
-/*!
- * \brief Radio driver
- *
- * \remark This variable is defined and initialized in the specific radio
- *         board implementation
- */
-extern const struct Radio_s Radio;
-
-#endif // __RADIO_H__

+ 0 - 396
app/SX1278/sx1276-board.c

@@ -1,396 +0,0 @@
-/*
- / _____)             _              | |
-( (____  _____ ____ _| |_ _____  ____| |__
- \____ \| ___ |    (_   _) ___ |/ ___)  _ \
- _____) ) ____| | | || |_| ____( (___| | | |
-(______/|_____)_|_|_| \__)_____)\____)_| |_|
-    (C)2013 Semtech
-
-Description: SX1276 driver specific target board functions implementation
-
-License: Revised BSD License, see LICENSE.TXT file include in the project
-
-Maintainer: Miguel Luis and Gregory Cristian
-*/
-#include "radio.h"
-#include "sx1276.h"
-#include "sx1276-board.h"
-#include "delay.h"
-#include "stdio.h"
-
-//复位脚
-#define SX1278_RST_PIN_INDEX	GPIO_Pin_11
-#define SX1278_RST_PIN_GROUP	GPIOB
-//SPI引脚
-#define SX1278_CS_PIN_INDEX	GPIO_Pin_12
-#define SX1278_CS_PIN_GROUP	GPIOB
-#define SX1278_SCK_PIN_INDEX	GPIO_Pin_13
-#define SX1278_SCK_PIN_GROUP	GPIOB
-#define SX1278_MISO_PIN_INDEX	GPIO_Pin_14
-#define SX1278_MISO_PIN_GROUP	GPIOB
-#define SX1278_MOSI_PIN_INDEX	GPIO_Pin_15
-#define SX1278_MOSI_PIN_GROUP	GPIOB
-//DIO0引脚(这里修改了需要手动修改中断初始化和中断函数)
-#define SX1278_DIO0_PIN_INDEX	GPIO_Pin_6
-#define SX1278_DIO0_PIN_GROUP	GPIOG
-//DIO1引脚(这里修改了需要手动修改中断初始化和中断函数)
-//#define SX1278_DIO1_PIN_INDEX	GPIO_Pin_1
-//#define SX1278_DIO1_PIN_GROUP	GPIOB
-
-/*!
- * Radio driver structure initialization
- */
-const struct Radio_s Radio =
-{
-    SX1276Init,
-    SX1276GetStatus,
-    SX1276SetModem,
-    SX1276SetChannel,
-    SX1276IsChannelFree,
-    SX1276Random,
-    SX1276SetRxConfig,
-    SX1276SetTxConfig,
-    SX1276CheckRfFrequency,
-    SX1276GetTimeOnAir,
-    SX1276Send,
-    SX1276SetSleep,
-    SX1276SetStby, 
-    SX1276SetRx,
-    SX1276StartCad,
-    SX1276ReadRssi,
-    SX1276Write,
-    SX1276Read,
-    SX1276WriteBuffer,
-    SX1276ReadBuffer,
-    SX1276SetMaxPayloadLength
-};
-
-/*!
- * Antenna switch GPIO pins objects
- */
-/* 我们的RA-01/02模组的天线切换开关由硬件自动控制,不需要软件控制
-Gpio_t AntSwitchLf;
-Gpio_t AntSwitchHf;*/
-
-/*!
- * Tx and Rx timers
- */
-/*TimerEvent_t TxTimeoutTimer;
-TimerEvent_t RxTimeoutTimer;
-TimerEvent_t RxTimeoutSyncWord;*/
-
-//实现ms级延时
-//delayMs:延时的ms数
-void SX1276DelayMs(uint32_t delayMs){
-	delay_ms(delayMs);
-}
-
-//定时器初始化(RX,TX,SyncWord定时完成后都需要调用 SX1276OnTimeoutIrq() 函数)
-void SX1276TimerInit(void){
-}
-void TIM2_Int_Init(u16 arr,u16 psc)
-{
-	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
-	NVIC_InitTypeDef NVIC_InitStructure;
-
-	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //时钟使能
-
-	TIM2->CR1 |= TIM_CR1_URS;	//如果不设置这个会导致定时器启动的时候立即进入中断
-	
-	//定时器TIM3初始化
-	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	
-	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
-	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
-	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
-	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
- 
-	TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
-	
-	//中断优先级NVIC设置
-	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //TIM3中断
-	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
-	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  //从优先级3级
-	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
-	NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
-	
-	TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
-
-	TIM_Cmd(TIM2, ENABLE);  //启动TIM		
-}
-
-void TIM3_Int_Init(u16 arr,u16 psc)
-{
-  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
-	NVIC_InitTypeDef NVIC_InitStructure;
-
-	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
-
-	TIM3->CR1 |= TIM_CR1_URS;	//如果不设置这个会导致定时器启动的时候立即进入中断
-	
-	//定时器TIM3初始化
-	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	
-	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
-	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
-	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
-	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
- 
-	TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
-	
-	//中断优先级NVIC设置
-	NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断
-	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
-	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
-	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
-	NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
-	
-	TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
-
-	TIM_Cmd(TIM3, ENABLE);  //启动TIM					 
-}
-
-void TIM4_Int_Init(u16 arr,u16 psc)
-{
-  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
-	NVIC_InitTypeDef NVIC_InitStructure;
-
-	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //时钟使能
-
-	TIM4->CR1 |= TIM_CR1_URS;	//如果不设置这个会导致定时器启动的时候立即进入中断
-	
-	//定时器TIM3初始化
-	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	
-	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
-	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
-	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
-	TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
- 
-	TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
-	
-	//中断优先级NVIC设置
-	NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;  //TIM3中断
-	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
-	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;  //从优先级3级
-	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
-	NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
-	
-	TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
-
-	TIM_Cmd(TIM4, ENABLE);  //启动TIM					 
-}
-
-//定时器3中断服务程序
-void TIM3_IRQHandler(void)   //TIM3中断
-{
-	if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
-	{
-		TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中断标志
-		TIM_Cmd(TIM3, DISABLE);  //失能TIMx
-		SX1276OnTimeoutIrq();	//发生中断后需要调用 SX1276OnTimeoutIrq 函数
-		//printf("\r\ntimer irq\r\n");
-	}
-}
-
-//开启 tx 超时定时器,定时timeoutMs 毫秒
-void SX1276TxTimeoutTimerStart( uint32_t timeoutMs ){
-	//这里简化使用了一个定时器,实际工程中最好使用独立的3个定时器,或者使用软件定时器
-	TIM3_Int_Init((timeoutMs * 10) -1,(12000-1));//10Khz的计数频率,计数到10次为1ms 
-}
-
-//关闭 tx 超时定时器
-void SX1276TxTimeoutTimerStop(void){
-	///这里简化使用了一个定时器,实际工程中最好使用独立的3个定时器,或者使用软件定时器
-	TIM_Cmd(TIM3, DISABLE);  //失能TIMx
-}
-
-//开启 RX 超时定时器,定时timeoutMs 毫秒
-void SX1276RxTimeoutTimerStart( uint32_t timeoutMs ){
-	//这里简化使用了一个定时器,实际工程中最好使用独立的3个定时器,或者使用软件定时器
-	TIM3_Int_Init((timeoutMs * 10) -1,7199);//10Khz的计数频率,计数到10次为1ms 
-}
-
-//关闭 RX 超时定时器
-void SX1276RxTimeoutTimerStop(void){
-	///这里简化使用了一个定时器,实际工程中最好使用独立的3个定时器,或者使用软件定时器
-	TIM_Cmd(TIM3, DISABLE);  //失能TIMx	
-}
-
-//开启 SyncWord 超时定时器,定时timeoutMs 毫秒
-void SX1276SyncWordTimeoutTimerStart( uint32_t timeoutMs ){
-	//这里简化使用了一个定时器,实际工程中最好使用独立的3个定时器,或者使用软件定时器
-	TIM3_Int_Init((timeoutMs * 10) -1,7199);//10Khz的计数频率,计数到10次为1ms 
-}
-
-//关闭 SyncWord 超时定时器
-void SX1276SyncWordTimeoutTimerStop(void){
-	///这里简化使用了一个定时器,实际工程中最好使用独立的3个定时器,或者使用软件定时器
-	TIM_Cmd(TIM3, DISABLE);  //失能TIMx	
-}
-
-//初始化SPI(cs低使能,极性SPI_CPOL_High,相位SPI_CPHA_2Edge,SPI_FirstBit_MSB)和Rst脚
-void SX1276IoInit( void )
-{
-	GPIO_InitTypeDef  GPIO_InitStructure;
-	SPI_InitTypeDef  SPI_InitStructure;
-	
-	//初始化一个gpio用来控制spi1的cs
-	RCC_APB2PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);	    
-	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //IO口速度为50MHz,这里不用传参,直接写死用最大速度50MHZ
-	GPIO_InitStructure.GPIO_Pin = SX1278_CS_PIN_INDEX;
-	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;	//设置为推挽输出
-	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
-	GPIO_Init(SX1278_CS_PIN_GROUP, &GPIO_InitStructure);	//初始化GPIO
-
-	//SPI的初始化
-	RCC_APB2PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);//SPI时钟使能
-	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;	//设置为推挽输出
-	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
-	GPIO_InitStructure.GPIO_Pin = SX1278_SCK_PIN_INDEX|SX1278_MISO_PIN_INDEX|SX1278_MOSI_PIN_INDEX;
-	GPIO_Init(SX1278_SCK_PIN_GROUP, &GPIO_InitStructure);	//初始化GPIO
-
-	//配置SPI
-	SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
-	SPI_InitStructure.SPI_Mode = SPI_Mode_Master;		//设置SPI工作模式:设置为主SPI
-	SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;		//设置SPI的数据大小:SPI发送接收8位帧结构
-	SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;		//设置时钟极性(串行同步时钟的空闲状态为高电平还是低电平)
-	SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;	//设置相位(串行同步时钟的第几个跳变沿(上升或下降)数据被采样)
-	SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;		//NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:设置为软件控制(SSI控制)
-	SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;		//定义波特率预分频的值:波特率预分频值为256(256是最低,可以设置完成之后调整速度,如果速度过快导致通信失败再调小)
-	SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;	//指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
-	SPI_InitStructure.SPI_CRCPolynomial = 7;	//CRC值计算的多项式(CRC校验相关)
-	SPI_Init(SPI1,&SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
-	
-	SPI_Cmd(SPI1,ENABLE); //使能SPI外设
-}
-
-DioIrqHandler **g_irqHandlers;
-
-//初始化DIO(上升沿)中断,将 DIO0~5 的GPIO中断函数调用 irqHandlers[0]~irqHandlers[5]
-void SX1276IoIrqInit( DioIrqHandler **irqHandlers )
-{
-	EXTI_InitTypeDef EXTI_InitStructure;
- 	NVIC_InitTypeDef NVIC_InitStructure;
-	GPIO_InitTypeDef  GPIO_InitStructure;
-	
-	g_irqHandlers=irqHandlers;
-	//初始化DIO0
-	 // 使能外部IO时钟
-  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
-  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
-	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //IO口速度为50MHz,这里不用传参,直接写死用最大速度50MHZ
-	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
-	GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_DOWN;
-	GPIO_InitStructure.GPIO_Pin = SX1278_DIO0_PIN_INDEX;
-	GPIO_Init(SX1278_DIO0_PIN_GROUP, &GPIO_InitStructure);	//初始化GPIO
-	
-	//配置中断
-	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOG,EXTI_PinSource6);//设置映射线关系(这里的 GPIO_PortSourceGPIOX 刚好是0-5,所以直接用pinName/16表示,GPIO_PinSourceXX刚好是0-15,所以用pinName%16表示了)
-	EXTI_InitStructure.EXTI_Line=EXTI_Line6;	//中断线u8_pinNum
-	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//外部中断
-	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//上升降沿触发
-	EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能中断
-	EXTI_Init(&EXTI_InitStructure);//配置中断
-
-	//配置中断优先级
-	NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;	//外部中断XX
-	//stm32f103c8例子中这个优先级对应抢占优先级2子优先级3
-	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;	//抢占优先级
-	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;   //子优先级
-	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;	//使能中断
-	NVIC_Init(&NVIC_InitStructure);   //配置优先级
-	
-	EXTI_ClearITPendingBit(EXTI_Line6);//清除中断标志位
-}
-#if 0
-//外部中断线0中断处理函数,这里需要回调对应的函数
-void EXTI0_IRQHandler(void){
-	g_irqHandlers[0]();
-	EXTI_ClearITPendingBit(EXTI_Line0);//清除中断标志位
-}
-
-//外部中断线1中断处理函数,这里需要回调对应的函数
-void EXTI1_IRQHandler(void){
-	g_irqHandlers[1]();
-	EXTI_ClearITPendingBit(EXTI_Line1);//清除中断标志位
-}
-#endif
-//处理DIO tx中断或者Rx中断数据
-void EXTI6_IRQHandler(void)
-{
-	g_irqHandlers[0]();
-	EXTI_ClearITPendingBit(EXTI_Line6);//清除中断标志位
-}
-//将SPI、DIO0~5和Rst脚的中断去初始化
-void SX1276IoDeInit( void )
-{
-	//这里省略去初始化的功能了
-}
-
-//判断频率是否合法
-//如果不限制频率可以直接return true
-bool SX1276CheckRfFrequency( uint32_t frequency )
-{
-    // Implement check. Currently all frequencies are supported
-    return true;
-}
-
-/**
-  * 硬复位
-  * 将rst引脚拉低1ms,然后将复位脚设置为无上下拉的输入模式
-  */
-void SX1276Reset( void )
-{
-	GPIO_InitTypeDef  GPIO_InitStructure;
-	
-	RCC_APB2PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);	    //使能指定端口时钟(这里是为了方便ABC全开了)
-	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 //IO口速度为50MHz,这里不用传参,直接写死用最大速度50MHZ
-	GPIO_InitStructure.GPIO_Pin = SX1278_RST_PIN_INDEX;
-	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;	//设置为推挽输出
-	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
-	GPIO_Init(SX1278_RST_PIN_GROUP, &GPIO_InitStructure);	//初始化GPIO
-
-	GPIO_ResetBits(SX1278_RST_PIN_GROUP,SX1278_RST_PIN_INDEX);	//输出低电平
-	delay_ms(1);
-	
-	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;//浮空输入
-	GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
-	GPIO_Init(SX1278_RST_PIN_GROUP, &GPIO_InitStructure);	//初始化GPIO
-	delay_ms(6);
-}
-
-/**
-  * 设置SPI的片选脚的电平(低电平使能,高电平取消)
-  * lev:true的时候高电平,false的时候低电平
-  */
-void Sx1276SetNSS(bool lev )
-{
-	if(lev){
-		GPIO_SetBits(SX1278_CS_PIN_GROUP,SX1278_CS_PIN_INDEX);	//输出高电平
-	}else{
-		GPIO_ResetBits(SX1278_CS_PIN_GROUP,SX1278_CS_PIN_INDEX);	//输出低电平
-	}
-}
-
-/**
-  * SPI读写函数,data是发送的数据,返回值是接收到的数据
-  */
-uint8_t Sx1276SpiInOut(uint16_t data )
-{
-	//完成SPI的读写功能
-	uint16_t retry=0;				 	
-	while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){//检查指定的SPI标志位设置与否:发送缓存空标志位(缓冲区空了就可以拷贝数据了)
-		if((retry++)>2000){
-			//超时了
-			return 0xff;
-		}
-	}
-	SPI_I2S_SendData(SPI1, data); //通过外设SPIx发送一个数据
-	retry=0;
-
-	while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){ //检查指定的SPI标志位设置与否:接受缓存非空标志位(非空了就表示接收数据完成了)
-		if((retry++)>2000){
-			//超时了
-			return 0xff;
-		}
-	}
-	return SPI_I2S_ReceiveData(SPI1); //返回通过SPIx最近接收的数据
-}

+ 0 - 122
app/SX1278/sx1276-board.h

@@ -1,122 +0,0 @@
-/*
- / _____)             _              | |
-( (____  _____ ____ _| |_ _____  ____| |__
- \____ \| ___ |    (_   _) ___ |/ ___)  _ \
- _____) ) ____| | | || |_| ____( (___| | | |
-(______/|_____)_|_|_| \__)_____)\____)_| |_|
-    (C)2013 Semtech
-
-Description: SX1276 driver specific target board functions implementation
-
-License: Revised BSD License, see LICENSE.TXT file include in the project
-
-Maintainer: Miguel Luis and Gregory Cristian
-*/
-#ifndef __SX1276_ARCH_H__
-#define __SX1276_ARCH_H__
-#include "stdbool.h"
-#include "stdint.h"
-#include "sx1276.h"
-
-/*!
- * \brief Radio hardware registers initialization definition
- *
- * \remark Can be automatically generated by the SX1276 GUI (not yet implemented)
- */
-#define RADIO_INIT_REGISTERS_VALUE                \
-{                                                 \
-    { MODEM_FSK , REG_LNA                , 0x23 },\
-    { MODEM_FSK , REG_RXCONFIG           , 0x1E },\
-    { MODEM_FSK , REG_RSSICONFIG         , 0xD2 },\
-    { MODEM_FSK , REG_AFCFEI             , 0x01 },\
-    { MODEM_FSK , REG_PREAMBLEDETECT     , 0xAA },\
-    { MODEM_FSK , REG_OSC                , 0x07 },\
-    { MODEM_FSK , REG_SYNCCONFIG         , 0x12 },\
-    { MODEM_FSK , REG_SYNCVALUE1         , 0xC1 },\
-    { MODEM_FSK , REG_SYNCVALUE2         , 0x94 },\
-    { MODEM_FSK , REG_SYNCVALUE3         , 0xC1 },\
-    { MODEM_FSK , REG_PACKETCONFIG1      , 0xD8 },\
-    { MODEM_FSK , REG_FIFOTHRESH         , 0x8F },\
-    { MODEM_FSK , REG_IMAGECAL           , 0x02 },\
-    { MODEM_FSK , REG_DIOMAPPING1        , 0x00 },\
-    { MODEM_FSK , REG_DIOMAPPING2        , 0x30 },\
-    { MODEM_LORA, REG_LR_PAYLOADMAXLENGTH, 0x40 },\
-}                                                 \
-
-#define RF_MID_BAND_THRESH                          525000000
-
-/*!
- * \brief Initializes the radio I/Os pins interface
- */
-void SX1276IoInit( void );
-
-/*!
- * \brief Initializes DIO IRQ handlers
- *
- * \param [IN] irqHandlers Array containing the IRQ callback functions
- */
-void SX1276IoIrqInit( DioIrqHandler **irqHandlers );
-
-/*!
- * \brief De-initializes the radio I/Os pins interface. 
- *
- * \remark Useful when going in MCU lowpower modes
- */
-void SX1276IoDeInit( void );
-
-/*!
- * \brief Gets the board PA selection configuration
- *
- * \param [IN] channel Channel frequency in Hz
- * \retval PaSelect RegPaConfig PaSelect value
- */
-uint8_t SX1276GetPaSelect( uint32_t channel );
-
-/*!
- * \brief Initializes the RF Switch I/Os pins interface
- */
-void SX1276AntSwInit( void );
-
-/*!
- * \brief De-initializes the RF Switch I/Os pins interface 
- *
- * \remark Needed to decrease the power consumption in MCU lowpower modes
- */
-void SX1276AntSwDeInit( void );
-
-/*!
- * \brief Controls the antena switch if necessary.
- *
- * \remark see errata note
- *
- * \param [IN] rxTx [1: Tx, 0: Rx]
- */
-void SX1276SetAntSw( uint8_t rxTx );
-
-/*!
- * \brief Checks if the given RF frequency is supported by the hardware
- *
- * \param [IN] frequency RF frequency to be checked
- * \retval isSupported [true: supported, false: unsupported]
- */
-bool SX1276CheckRfFrequency( uint32_t frequency );
-
-
-void Sx1276SetNSS(bool enable );
-uint8_t Sx1276SpiInOut(uint16_t data );
-void SX1276TimerInit(void);
-void SX1276TxTimeoutTimerStart( uint32_t timeoutMs );
-void SX1276TxTimeoutTimerStop(void);
-void SX1276RxTimeoutTimerStart( uint32_t timeoutMs );
-void SX1276RxTimeoutTimerStop(void);
-void SX1276SyncWordTimeoutTimerStart( uint32_t timeoutMs );
-void SX1276SyncWordTimeoutTimerStop(void);
-void SX1276Reset( void );
-void SX1276DelayMs(uint32_t delayMs);
-
-/*!
- * Radio hardware and global parameters
- */
-extern SX1276_t SX1276;
-
-#endif // __SX1276_ARCH_H__

文件差異過大導致無法顯示
+ 0 - 1868
app/SX1278/sx1276.c


+ 0 - 396
app/SX1278/sx1276.h

@@ -1,396 +0,0 @@
-/*
- / _____)             _              | |
-( (____  _____ ____ _| |_ _____  ____| |__
- \____ \| ___ |    (_   _) ___ |/ ___)  _ \
- _____) ) ____| | | || |_| ____( (___| | | |
-(______/|_____)_|_|_| \__)_____)\____)_| |_|
-    (C)2013 Semtech
-
-Description: Generic SX1276 driver implementation
-
-License: Revised BSD License, see LICENSE.TXT file include in the project
-
-Maintainer: Miguel Luis and Gregory Cristian
-*/
-#ifndef __SX1276_H__
-#define __SX1276_H__
-
-#include "sx1276Regs-Fsk.h"
-#include "sx1276Regs-LoRa.h"
-#include "radio.h"
-
-/*!
- * Radio wakeup time from SLEEP mode
- */
-#define RADIO_OSC_STARTUP                           1 // [ms]
-
-/*!
- * Radio PLL lock and Mode Ready delay which can vary with the temperature
- */
-#define RADIO_SLEEP_TO_RX                           2 // [ms]
-
-/*!
- * Radio complete Wake-up Time with margin for temperature compensation
- */
-#define RADIO_WAKEUP_TIME                           ( RADIO_OSC_STARTUP + RADIO_SLEEP_TO_RX )
-
-/*!
- * Radio FSK modem parameters
- */
-typedef struct
-{
-    int8_t   Power;
-    uint32_t Fdev;
-    uint32_t Bandwidth;
-    uint32_t BandwidthAfc;
-    uint32_t Datarate;
-    uint16_t PreambleLen;
-    bool     FixLen;
-    uint8_t  PayloadLen;
-    bool     CrcOn;
-    bool     IqInverted;
-    bool     RxContinuous;
-    uint32_t TxTimeout;
-}RadioFskSettings_t;
-
-/*!
- * Radio FSK packet handler state
- */
-typedef struct
-{
-    uint8_t  PreambleDetected;
-    uint8_t  SyncWordDetected;
-    int8_t   RssiValue;
-    int32_t  AfcValue;
-    uint8_t  RxGain;
-    uint16_t Size;
-    uint16_t NbBytes;
-    uint8_t  FifoThresh;
-    uint8_t  ChunkSize;
-}RadioFskPacketHandler_t;
-
-/*!
- * Radio LoRa modem parameters
- */
-typedef struct
-{
-    int8_t   Power;
-    uint32_t Bandwidth;
-    uint32_t Datarate;
-    bool     LowDatarateOptimize;
-    uint8_t  Coderate;
-    uint16_t PreambleLen;
-    bool     FixLen;
-    uint8_t  PayloadLen;
-    bool     CrcOn;
-    bool     FreqHopOn;
-    uint8_t  HopPeriod;
-    bool     IqInverted;
-    bool     RxContinuous;
-    uint32_t TxTimeout;
-}RadioLoRaSettings_t;
-
-/*!
- * Radio LoRa packet handler state
- */
-typedef struct
-{
-    int8_t SnrValue;
-    int16_t RssiValue;
-    uint8_t Size;
-}RadioLoRaPacketHandler_t;
-
-/*!
- * Radio Settings
- */
-typedef struct
-{
-    RadioState_t             State;
-    RadioModems_t            Modem;
-    uint32_t                 Channel;
-    RadioFskSettings_t       Fsk;
-    RadioFskPacketHandler_t  FskPacketHandler;
-    RadioLoRaSettings_t      LoRa;
-    RadioLoRaPacketHandler_t LoRaPacketHandler;
-}RadioSettings_t;
-
-/*!
- * Radio hardware and global parameters
- */
-typedef struct SX1276_s
-{
-    /* GPIO和硬件相关,移植到 sx1276-board.c 中了
-		Gpio_t        Reset;
-    Gpio_t        DIO0;
-    Gpio_t        DIO1;
-    Gpio_t        DIO2;
-    Gpio_t        DIO3;
-    Gpio_t        DIO4;
-    Gpio_t        DIO5;
-    Spi_t         Spi;*/
-    RadioSettings_t Settings;
-}SX1276_t;
-
-/*!
- * Hardware IO IRQ callback function definition
- */
-typedef void ( DioIrqHandler )( void );
-
-/*!
- * SX1276 definitions
- */
-#define XTAL_FREQ                                   32000000
-#define FREQ_STEP                                   61.03515625
-
-#define RX_BUFFER_SIZE                              256
-
-/*!
- * ============================================================================
- * Public functions prototypes
- * ============================================================================
- */
-
-/*!
- * \brief Initializes the radio
- *
- * \param [IN] events Structure containing the driver callback functions
- */
-void SX1276Init( RadioEvents_t *events );
-
-/*!
- * Return current radio status
- *
- * \param status Radio status.[RF_IDLE, RF_RX_RUNNING, RF_TX_RUNNING]
- */
-RadioState_t SX1276GetStatus( void );
-
-/*!
- * \brief Configures the radio with the given modem
- *
- * \param [IN] modem Modem to be used [0: FSK, 1: LoRa] 
- */
-void SX1276SetModem( RadioModems_t modem );
-
-/*!
- * \brief Sets the channels configuration
- *
- * \param [IN] freq         Channel RF frequency
- */
-void SX1276SetChannel( uint32_t freq );
-
-/*!
- * \brief Sets the channels configuration
- *
- * \param [IN] modem      Radio modem to be used [0: FSK, 1: LoRa]
- * \param [IN] freq       Channel RF frequency
- * \param [IN] rssiThresh RSSI threshold
- *
- * \retval isFree         [true: Channel is free, false: Channel is not free]
- */
-bool SX1276IsChannelFree( RadioModems_t modem, uint32_t freq, int16_t rssiThresh );
-
-/*!
- * \brief Generates a 32 bits random value based on the RSSI readings
- *
- * \remark This function sets the radio in LoRa modem mode and disables 
- *         all interrupts.
- *         After calling this function either SX1276SetRxConfig or
- *         SX1276SetTxConfig functions must be called.
- *
- * \retval randomValue    32 bits random value
- */
-uint32_t SX1276Random( void );
-
-/*!
- * \brief Sets the reception parameters
- *
- * \remark When using LoRa modem only bandwidths 125, 250 and 500 kHz are supported
- *
- * \param [IN] modem        Radio modem to be used [0: FSK, 1: LoRa]
- * \param [IN] bandwidth    Sets the bandwidth
- *                          FSK : >= 2600 and <= 250000 Hz
- *                          LoRa: [0: 125 kHz, 1: 250 kHz,
- *                                 2: 500 kHz, 3: Reserved] 
- * \param [IN] datarate     Sets the Datarate
- *                          FSK : 600..300000 bits/s
- *                          LoRa: [6: 64, 7: 128, 8: 256, 9: 512,
- *                                10: 1024, 11: 2048, 12: 4096  chips]
- * \param [IN] coderate     Sets the coding rate (LoRa only)
- *                          FSK : N/A ( set to 0 )
- *                          LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8] 
- * \param [IN] bandwidthAfc Sets the AFC Bandwidth (FSK only) 
- *                          FSK : >= 2600 and <= 250000 Hz
- *                          LoRa: N/A ( set to 0 ) 
- * \param [IN] preambleLen  Sets the Preamble length
- *                          FSK : Number of bytes 
- *                          LoRa: Length in symbols (the hardware adds 4 more symbols)
- * \param [IN] symbTimeout  Sets the RxSingle timeout value (LoRa only) 
- *                          FSK : N/A ( set to 0 ) 
- *                          LoRa: timeout in symbols
- * \param [IN] fixLen       Fixed length packets [0: variable, 1: fixed]
- * \param [IN] payloadLen   Sets payload length when fixed lenght is used
- * \param [IN] crcOn        Enables/Disables the CRC [0: OFF, 1: ON]
- * \param [IN] FreqHopOn    Enables disables the intra-packet frequency hopping
- *                          FSK : N/A ( set to 0 )
- *                          LoRa: [0: OFF, 1: ON]
- * \param [IN] HopPeriod    Number of symbols bewteen each hop
- *                          FSK : N/A ( set to 0 )
- *                          LoRa: Number of symbols
- * \param [IN] iqInverted   Inverts IQ signals (LoRa only)
- *                          FSK : N/A ( set to 0 )
- *                          LoRa: [0: not inverted, 1: inverted]
- * \param [IN] rxContinuous Sets the reception in continuous mode
- *                          [false: single mode, true: continuous mode]
- */
-void SX1276SetRxConfig( RadioModems_t modem, uint32_t bandwidth,
-                         uint32_t datarate, uint8_t coderate,
-                         uint32_t bandwidthAfc, uint16_t preambleLen,
-                         uint16_t symbTimeout, bool fixLen,
-                         uint8_t payloadLen,
-                         bool crcOn, bool FreqHopOn, uint8_t HopPeriod,
-                         bool iqInverted, bool rxContinuous );
-
-/*!
- * \brief Sets the transmission parameters
- *
- * \remark When using LoRa modem only bandwidths 125, 250 and 500 kHz are supported
- *
- * \param [IN] modem        Radio modem to be used [0: FSK, 1: LoRa] 
- * \param [IN] power        Sets the output power [dBm]
- * \param [IN] fdev         Sets the frequency deviation (FSK only)
- *                          FSK : [Hz]
- *                          LoRa: 0
- * \param [IN] bandwidth    Sets the bandwidth (LoRa only)
- *                          FSK : 0
- *                          LoRa: [0: 125 kHz, 1: 250 kHz,
- *                                 2: 500 kHz, 3: Reserved] 
- * \param [IN] datarate     Sets the Datarate
- *                          FSK : 600..300000 bits/s
- *                          LoRa: [6: 64, 7: 128, 8: 256, 9: 512,
- *                                10: 1024, 11: 2048, 12: 4096  chips]
- * \param [IN] coderate     Sets the coding rate (LoRa only)
- *                          FSK : N/A ( set to 0 )
- *                          LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8] 
- * \param [IN] preambleLen  Sets the preamble length
- *                          FSK : Number of bytes 
- *                          LoRa: Length in symbols (the hardware adds 4 more symbols)
- * \param [IN] fixLen       Fixed length packets [0: variable, 1: fixed]
- * \param [IN] crcOn        Enables disables the CRC [0: OFF, 1: ON]
- * \param [IN] FreqHopOn    Enables disables the intra-packet frequency hopping
- *                          FSK : N/A ( set to 0 )
- *                          LoRa: [0: OFF, 1: ON]
- * \param [IN] HopPeriod    Number of symbols bewteen each hop
- *                          FSK : N/A ( set to 0 )
- *                          LoRa: Number of symbols
- * \param [IN] iqInverted   Inverts IQ signals (LoRa only)
- *                          FSK : N/A ( set to 0 )
- *                          LoRa: [0: not inverted, 1: inverted]
- * \param [IN] timeout      Transmission timeout [ms]
- */
-void SX1276SetTxConfig( RadioModems_t modem, int8_t power, uint32_t fdev, 
-                        uint32_t bandwidth, uint32_t datarate,
-                        uint8_t coderate, uint16_t preambleLen,
-                        bool fixLen, bool crcOn, bool FreqHopOn,
-                        uint8_t HopPeriod, bool iqInverted, uint32_t timeout );
-
-/*!
- * \brief Computes the packet time on air in us for the given payload
- *
- * \Remark Can only be called once SetRxConfig or SetTxConfig have been called
- *
- * \param [IN] modem      Radio modem to be used [0: FSK, 1: LoRa]
- * \param [IN] pktLen     Packet payload length
- *
- * \retval airTime        Computed airTime (us) for the given packet payload length
- */
-uint32_t SX1276GetTimeOnAir( RadioModems_t modem, uint8_t pktLen );
-
-/*!
- * \brief Sends the buffer of size. Prepares the packet to be sent and sets
- *        the radio in transmission
- *
- * \param [IN]: buffer     Buffer pointer
- * \param [IN]: size       Buffer size
- */
-void SX1276Send( uint8_t *buffer, uint8_t size );
-    
-/*!
- * \brief Sets the radio in sleep mode
- */
-void SX1276SetSleep( void );
-
-/*!
- * \brief Sets the radio in standby mode
- */
-void SX1276SetStby( void );
-
-/*!
- * \brief Sets the radio in reception mode for the given time
- * \param [IN] timeout Reception timeout [ms] [0: continuous, others timeout]
- */
-void SX1276SetRx( uint32_t timeout );
-
-/*!
- * \brief Start a Channel Activity Detection
- */
-void SX1276StartCad( void );
-
-/*!
- * \brief Reads the current RSSI value
- *
- * \retval rssiValue Current RSSI value in [dBm]
- */
-int16_t SX1276ReadRssi( RadioModems_t modem );
-
-/*!
- * \brief Writes the radio register at the specified address
- *
- * \param [IN]: addr Register address
- * \param [IN]: data New register value
- */
-void SX1276Write( uint8_t addr, uint8_t data );
-
-/*!
- * \brief Reads the radio register at the specified address
- *
- * \param [IN]: addr Register address
- * \retval data Register value
- */
-uint8_t SX1276Read( uint8_t addr );
-
-/*!
- * \brief Writes multiple radio registers starting at address
- *
- * \param [IN] addr   First Radio register address
- * \param [IN] buffer Buffer containing the new register's values
- * \param [IN] size   Number of registers to be written
- */
-void SX1276WriteBuffer( uint8_t addr, uint8_t *buffer, uint8_t size );
-
-/*!
- * \brief Reads multiple radio registers starting at address
- *
- * \param [IN] addr First Radio register address
- * \param [OUT] buffer Buffer where to copy the registers data
- * \param [IN] size Number of registers to be read
- */
-void SX1276ReadBuffer( uint8_t addr, uint8_t *buffer, uint8_t size );
-
-/*!
- * \brief Sets the maximum payload length.
- *
- * \param [IN] modem      Radio modem to be used [0: FSK, 1: LoRa]
- * \param [IN] max        Maximum payload length in bytes
- */
-void SX1276SetMaxPayloadLength( RadioModems_t modem, uint8_t max );
-
-/*!
- * \brief Set the RF Switch I/Os pins in Low Power mode
- *
- * \param [IN] status enable or disable
- */
-void SX1276SetAntSwLowPower( bool status );
-
-void SX1276OnTimeoutIrq( void );
-
-#endif // __SX1276_H__

+ 0 - 565
app/SX1278/sx1276Regs-LoRa.h

@@ -1,565 +0,0 @@
-/*
- / _____)             _              | |
-( (____  _____ ____ _| |_ _____  ____| |__
- \____ \| ___ |    (_   _) ___ |/ ___)  _ \
- _____) ) ____| | | || |_| ____( (___| | | |
-(______/|_____)_|_|_| \__)_____)\____)_| |_|
-    (C)2013 Semtech
-
-Description: SX1276 LoRa modem registers and bits definitions
-
-License: Revised BSD License, see LICENSE.TXT file include in the project
-
-Maintainer: Miguel Luis and Gregory Cristian
-*/
-#ifndef __SX1276_REGS_LORA_H__
-#define __SX1276_REGS_LORA_H__
-
-/*!
- * ============================================================================
- * SX1276 Internal registers Address
- * ============================================================================
- */
-#define REG_LR_FIFO                                 0x00 
-// Common settings
-#define REG_LR_OPMODE                               0x01 
-#define REG_LR_FRFMSB                               0x06 
-#define REG_LR_FRFMID                               0x07
-#define REG_LR_FRFLSB                               0x08 
-// Tx settings
-#define REG_LR_PACONFIG                             0x09 
-#define REG_LR_PARAMP                               0x0A 
-#define REG_LR_OCP                                  0x0B 
-// Rx settings
-#define REG_LR_LNA                                  0x0C 
-// LoRa registers
-#define REG_LR_FIFOADDRPTR                          0x0D 
-#define REG_LR_FIFOTXBASEADDR                       0x0E 
-#define REG_LR_FIFORXBASEADDR                       0x0F 
-#define REG_LR_FIFORXCURRENTADDR                    0x10 
-#define REG_LR_IRQFLAGSMASK                         0x11 
-#define REG_LR_IRQFLAGS                             0x12 
-#define REG_LR_RXNBBYTES                            0x13 
-#define REG_LR_RXHEADERCNTVALUEMSB                  0x14 
-#define REG_LR_RXHEADERCNTVALUELSB                  0x15 
-#define REG_LR_RXPACKETCNTVALUEMSB                  0x16 
-#define REG_LR_RXPACKETCNTVALUELSB                  0x17 
-#define REG_LR_MODEMSTAT                            0x18 
-#define REG_LR_PKTSNRVALUE                          0x19 
-#define REG_LR_PKTRSSIVALUE                         0x1A 
-#define REG_LR_RSSIVALUE                            0x1B 
-#define REG_LR_HOPCHANNEL                           0x1C 
-#define REG_LR_MODEMCONFIG1                         0x1D 
-#define REG_LR_MODEMCONFIG2                         0x1E 
-#define REG_LR_SYMBTIMEOUTLSB                       0x1F 
-#define REG_LR_PREAMBLEMSB                          0x20 
-#define REG_LR_PREAMBLELSB                          0x21 
-#define REG_LR_PAYLOADLENGTH                        0x22 
-#define REG_LR_PAYLOADMAXLENGTH                     0x23 
-#define REG_LR_HOPPERIOD                            0x24 
-#define REG_LR_FIFORXBYTEADDR                       0x25
-#define REG_LR_MODEMCONFIG3                         0x26
-#define REG_LR_FEIMSB                               0x28
-#define REG_LR_FEIMID                               0x29
-#define REG_LR_FEILSB                               0x2A
-#define REG_LR_RSSIWIDEBAND                         0x2C
-#define REG_LR_TEST2F                               0x2F
-#define REG_LR_TEST30                               0x30
-#define REG_LR_DETECTOPTIMIZE                       0x31
-#define REG_LR_INVERTIQ                             0x33
-#define REG_LR_TEST36                               0x36
-#define REG_LR_DETECTIONTHRESHOLD                   0x37
-#define REG_LR_SYNCWORD                             0x39
-#define REG_LR_TEST3A                               0x3A
-#define REG_LR_INVERTIQ2                            0x3B
-
-// end of documented register in datasheet
-// I/O settings
-#define REG_LR_DIOMAPPING1                          0x40
-#define REG_LR_DIOMAPPING2                          0x41
-// Version
-#define REG_LR_VERSION                              0x42
-// Additional settings
-#define REG_LR_PLLHOP                               0x44
-#define REG_LR_TCXO                                 0x4B
-#define REG_LR_PADAC                                0x4D
-#define REG_LR_FORMERTEMP                           0x5B
-#define REG_LR_BITRATEFRAC                          0x5D
-#define REG_LR_AGCREF                               0x61
-#define REG_LR_AGCTHRESH1                           0x62
-#define REG_LR_AGCTHRESH2                           0x63
-#define REG_LR_AGCTHRESH3                           0x64
-#define REG_LR_PLL                                  0x70
-
-/*!
- * ============================================================================
- * SX1276 LoRa bits control definition
- * ============================================================================
- */
-
-/*!
- * RegFifo
- */
-
-/*!
- * RegOpMode
- */
-#define RFLR_OPMODE_LONGRANGEMODE_MASK              0x7F 
-#define RFLR_OPMODE_LONGRANGEMODE_OFF               0x00 // Default
-#define RFLR_OPMODE_LONGRANGEMODE_ON                0x80 
-
-#define RFLR_OPMODE_ACCESSSHAREDREG_MASK            0xBF 
-#define RFLR_OPMODE_ACCESSSHAREDREG_ENABLE          0x40 
-#define RFLR_OPMODE_ACCESSSHAREDREG_DISABLE         0x00 // Default
-
-#define RFLR_OPMODE_FREQMODE_ACCESS_MASK            0xF7
-#define RFLR_OPMODE_FREQMODE_ACCESS_LF              0x08 // Default
-#define RFLR_OPMODE_FREQMODE_ACCESS_HF              0x00 
-
-#define RFLR_OPMODE_MASK                            0xF8 
-#define RFLR_OPMODE_SLEEP                           0x00 
-#define RFLR_OPMODE_STANDBY                         0x01 // Default
-#define RFLR_OPMODE_SYNTHESIZER_TX                  0x02 
-#define RFLR_OPMODE_TRANSMITTER                     0x03 
-#define RFLR_OPMODE_SYNTHESIZER_RX                  0x04 
-#define RFLR_OPMODE_RECEIVER                        0x05 
-// LoRa specific modes
-#define RFLR_OPMODE_RECEIVER_SINGLE                 0x06 
-#define RFLR_OPMODE_CAD                             0x07 
-
-/*!
- * RegFrf (MHz)
- */
-#define RFLR_FRFMSB_434_MHZ                         0x6C // Default
-#define RFLR_FRFMID_434_MHZ                         0x80 // Default
-#define RFLR_FRFLSB_434_MHZ                         0x00 // Default
-
-/*!
- * RegPaConfig
- */
-#define RFLR_PACONFIG_PASELECT_MASK                 0x7F 
-#define RFLR_PACONFIG_PASELECT_PABOOST              0x80 
-#define RFLR_PACONFIG_PASELECT_RFO                  0x00 // Default
-
-#define RFLR_PACONFIG_MAX_POWER_MASK                0x8F
-
-#define RFLR_PACONFIG_OUTPUTPOWER_MASK              0xF0 
- 
-/*!
- * RegPaRamp
- */
-#define RFLR_PARAMP_TXBANDFORCE_MASK                0xEF 
-#define RFLR_PARAMP_TXBANDFORCE_BAND_SEL            0x10 
-#define RFLR_PARAMP_TXBANDFORCE_AUTO                0x00 // Default
-
-#define RFLR_PARAMP_MASK                            0xF0 
-#define RFLR_PARAMP_3400_US                         0x00 
-#define RFLR_PARAMP_2000_US                         0x01 
-#define RFLR_PARAMP_1000_US                         0x02
-#define RFLR_PARAMP_0500_US                         0x03 
-#define RFLR_PARAMP_0250_US                         0x04 
-#define RFLR_PARAMP_0125_US                         0x05 
-#define RFLR_PARAMP_0100_US                         0x06 
-#define RFLR_PARAMP_0062_US                         0x07 
-#define RFLR_PARAMP_0050_US                         0x08 
-#define RFLR_PARAMP_0040_US                         0x09 // Default
-#define RFLR_PARAMP_0031_US                         0x0A 
-#define RFLR_PARAMP_0025_US                         0x0B 
-#define RFLR_PARAMP_0020_US                         0x0C 
-#define RFLR_PARAMP_0015_US                         0x0D 
-#define RFLR_PARAMP_0012_US                         0x0E 
-#define RFLR_PARAMP_0010_US                         0x0F 
-
-/*!
- * RegOcp
- */
-#define RFLR_OCP_MASK                               0xDF 
-#define RFLR_OCP_ON                                 0x20 // Default
-#define RFLR_OCP_OFF                                0x00   
-
-#define RFLR_OCP_TRIM_MASK                          0xE0
-#define RFLR_OCP_TRIM_045_MA                        0x00
-#define RFLR_OCP_TRIM_050_MA                        0x01   
-#define RFLR_OCP_TRIM_055_MA                        0x02 
-#define RFLR_OCP_TRIM_060_MA                        0x03 
-#define RFLR_OCP_TRIM_065_MA                        0x04 
-#define RFLR_OCP_TRIM_070_MA                        0x05 
-#define RFLR_OCP_TRIM_075_MA                        0x06 
-#define RFLR_OCP_TRIM_080_MA                        0x07  
-#define RFLR_OCP_TRIM_085_MA                        0x08
-#define RFLR_OCP_TRIM_090_MA                        0x09 
-#define RFLR_OCP_TRIM_095_MA                        0x0A 
-#define RFLR_OCP_TRIM_100_MA                        0x0B  // Default
-#define RFLR_OCP_TRIM_105_MA                        0x0C 
-#define RFLR_OCP_TRIM_110_MA                        0x0D 
-#define RFLR_OCP_TRIM_115_MA                        0x0E 
-#define RFLR_OCP_TRIM_120_MA                        0x0F 
-#define RFLR_OCP_TRIM_130_MA                        0x10
-#define RFLR_OCP_TRIM_140_MA                        0x11   
-#define RFLR_OCP_TRIM_150_MA                        0x12 
-#define RFLR_OCP_TRIM_160_MA                        0x13 
-#define RFLR_OCP_TRIM_170_MA                        0x14 
-#define RFLR_OCP_TRIM_180_MA                        0x15 
-#define RFLR_OCP_TRIM_190_MA                        0x16 
-#define RFLR_OCP_TRIM_200_MA                        0x17  
-#define RFLR_OCP_TRIM_210_MA                        0x18
-#define RFLR_OCP_TRIM_220_MA                        0x19 
-#define RFLR_OCP_TRIM_230_MA                        0x1A 
-#define RFLR_OCP_TRIM_240_MA                        0x1B
-
-/*!
- * RegLna
- */
-#define RFLR_LNA_GAIN_MASK                          0x1F 
-#define RFLR_LNA_GAIN_G1                            0x20 // Default
-#define RFLR_LNA_GAIN_G2                            0x40 
-#define RFLR_LNA_GAIN_G3                            0x60 
-#define RFLR_LNA_GAIN_G4                            0x80 
-#define RFLR_LNA_GAIN_G5                            0xA0 
-#define RFLR_LNA_GAIN_G6                            0xC0 
-
-#define RFLR_LNA_BOOST_LF_MASK                      0xE7 
-#define RFLR_LNA_BOOST_LF_DEFAULT                   0x00 // Default
-
-#define RFLR_LNA_BOOST_HF_MASK                      0xFC 
-#define RFLR_LNA_BOOST_HF_OFF                       0x00 // Default
-#define RFLR_LNA_BOOST_HF_ON                        0x03 
-
-/*!
- * RegFifoAddrPtr
- */
-#define RFLR_FIFOADDRPTR                            0x00 // Default
-
-/*!
- * RegFifoTxBaseAddr
- */
-#define RFLR_FIFOTXBASEADDR                         0x80 // Default
-
-/*!
- * RegFifoTxBaseAddr
- */
-#define RFLR_FIFORXBASEADDR                         0x00 // Default
-
-/*!
- * RegFifoRxCurrentAddr (Read Only)
- */
-
-/*!
- * RegIrqFlagsMask
- */
-#define RFLR_IRQFLAGS_RXTIMEOUT_MASK                0x80 
-#define RFLR_IRQFLAGS_RXDONE_MASK                   0x40 
-#define RFLR_IRQFLAGS_PAYLOADCRCERROR_MASK          0x20 
-#define RFLR_IRQFLAGS_VALIDHEADER_MASK              0x10 
-#define RFLR_IRQFLAGS_TXDONE_MASK                   0x08 
-#define RFLR_IRQFLAGS_CADDONE_MASK                  0x04 
-#define RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL_MASK       0x02 
-#define RFLR_IRQFLAGS_CADDETECTED_MASK              0x01 
-
-/*!
- * RegIrqFlags
- */
-#define RFLR_IRQFLAGS_RXTIMEOUT                     0x80 
-#define RFLR_IRQFLAGS_RXDONE                        0x40 
-#define RFLR_IRQFLAGS_PAYLOADCRCERROR               0x20 
-#define RFLR_IRQFLAGS_VALIDHEADER                   0x10 
-#define RFLR_IRQFLAGS_TXDONE                        0x08 
-#define RFLR_IRQFLAGS_CADDONE                       0x04 
-#define RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL            0x02 
-#define RFLR_IRQFLAGS_CADDETECTED                   0x01 
-
-/*!
- * RegFifoRxNbBytes (Read Only)
- */
-
-/*!
- * RegRxHeaderCntValueMsb (Read Only)
- */
-
-/*!
- * RegRxHeaderCntValueLsb (Read Only)
- */
-
-/*!
- * RegRxPacketCntValueMsb (Read Only)
- */
-
-/*!
- * RegRxPacketCntValueLsb (Read Only)
- */
-
-/*!
- * RegModemStat (Read Only)
- */
-#define RFLR_MODEMSTAT_RX_CR_MASK                   0x1F 
-#define RFLR_MODEMSTAT_MODEM_STATUS_MASK            0xE0 
- 
-/*!
- * RegPktSnrValue (Read Only)
- */
-
-/*!
- * RegPktRssiValue (Read Only)
- */
-
-/*!
- * RegRssiValue (Read Only)
- */
-
-/*!
- * RegHopChannel (Read Only)
- */
-#define RFLR_HOPCHANNEL_PLL_LOCK_TIMEOUT_MASK       0x7F 
-#define RFLR_HOPCHANNEL_PLL_LOCK_FAIL               0x80 
-#define RFLR_HOPCHANNEL_PLL_LOCK_SUCCEED            0x00 // Default
-                                                    
-#define RFLR_HOPCHANNEL_CRCONPAYLOAD_MASK           0xBF
-#define RFLR_HOPCHANNEL_CRCONPAYLOAD_ON             0x40
-#define RFLR_HOPCHANNEL_CRCONPAYLOAD_OFF            0x00 // Default
-
-#define RFLR_HOPCHANNEL_CHANNEL_MASK                0x3F 
-
-/*!
- * RegModemConfig1
- */
-#define RFLR_MODEMCONFIG1_BW_MASK                   0x0F 
-#define RFLR_MODEMCONFIG1_BW_7_81_KHZ               0x00 
-#define RFLR_MODEMCONFIG1_BW_10_41_KHZ              0x10 
-#define RFLR_MODEMCONFIG1_BW_15_62_KHZ              0x20 
-#define RFLR_MODEMCONFIG1_BW_20_83_KHZ              0x30 
-#define RFLR_MODEMCONFIG1_BW_31_25_KHZ              0x40 
-#define RFLR_MODEMCONFIG1_BW_41_66_KHZ              0x50 
-#define RFLR_MODEMCONFIG1_BW_62_50_KHZ              0x60 
-#define RFLR_MODEMCONFIG1_BW_125_KHZ                0x70 // Default
-#define RFLR_MODEMCONFIG1_BW_250_KHZ                0x80 
-#define RFLR_MODEMCONFIG1_BW_500_KHZ                0x90 
-                                                    
-#define RFLR_MODEMCONFIG1_CODINGRATE_MASK           0xF1 
-#define RFLR_MODEMCONFIG1_CODINGRATE_4_5            0x02
-#define RFLR_MODEMCONFIG1_CODINGRATE_4_6            0x04 // Default
-#define RFLR_MODEMCONFIG1_CODINGRATE_4_7            0x06 
-#define RFLR_MODEMCONFIG1_CODINGRATE_4_8            0x08 
-                                                    
-#define RFLR_MODEMCONFIG1_IMPLICITHEADER_MASK       0xFE 
-#define RFLR_MODEMCONFIG1_IMPLICITHEADER_ON         0x01 
-#define RFLR_MODEMCONFIG1_IMPLICITHEADER_OFF        0x00 // Default
-
-/*!
- * RegModemConfig2
- */
-#define RFLR_MODEMCONFIG2_SF_MASK                   0x0F 
-#define RFLR_MODEMCONFIG2_SF_6                      0x60 
-#define RFLR_MODEMCONFIG2_SF_7                      0x70 // Default
-#define RFLR_MODEMCONFIG2_SF_8                      0x80 
-#define RFLR_MODEMCONFIG2_SF_9                      0x90 
-#define RFLR_MODEMCONFIG2_SF_10                     0xA0 
-#define RFLR_MODEMCONFIG2_SF_11                     0xB0 
-#define RFLR_MODEMCONFIG2_SF_12                     0xC0 
-
-#define RFLR_MODEMCONFIG2_TXCONTINUOUSMODE_MASK     0xF7 
-#define RFLR_MODEMCONFIG2_TXCONTINUOUSMODE_ON       0x08 
-#define RFLR_MODEMCONFIG2_TXCONTINUOUSMODE_OFF      0x00 
-
-#define RFLR_MODEMCONFIG2_RXPAYLOADCRC_MASK         0xFB 
-#define RFLR_MODEMCONFIG2_RXPAYLOADCRC_ON           0x04 
-#define RFLR_MODEMCONFIG2_RXPAYLOADCRC_OFF          0x00 // Default
- 
-#define RFLR_MODEMCONFIG2_SYMBTIMEOUTMSB_MASK       0xFC 
-#define RFLR_MODEMCONFIG2_SYMBTIMEOUTMSB            0x00 // Default
-
-/*!
- * RegSymbTimeoutLsb
- */
-#define RFLR_SYMBTIMEOUTLSB_SYMBTIMEOUT             0x64 // Default
-
-/*!
- * RegPreambleLengthMsb
- */
-#define RFLR_PREAMBLELENGTHMSB                      0x00 // Default
-
-/*!
- * RegPreambleLengthLsb
- */
-#define RFLR_PREAMBLELENGTHLSB                      0x08 // Default
-
-/*!
- * RegPayloadLength
- */
-#define RFLR_PAYLOADLENGTH                          0x0E // Default
-
-/*!
- * RegPayloadMaxLength
- */
-#define RFLR_PAYLOADMAXLENGTH                       0xFF // Default
-
-/*!
- * RegHopPeriod
- */
-#define RFLR_HOPPERIOD_FREQFOPPINGPERIOD            0x00 // Default
-
-/*!
- * RegFifoRxByteAddr (Read Only)
- */
-
-/*!
- * RegModemConfig3
- */
-#define RFLR_MODEMCONFIG3_LOWDATARATEOPTIMIZE_MASK  0xF7 
-#define RFLR_MODEMCONFIG3_LOWDATARATEOPTIMIZE_ON    0x08 
-#define RFLR_MODEMCONFIG3_LOWDATARATEOPTIMIZE_OFF   0x00 // Default
-
-#define RFLR_MODEMCONFIG3_AGCAUTO_MASK              0xFB 
-#define RFLR_MODEMCONFIG3_AGCAUTO_ON                0x04 // Default 
-#define RFLR_MODEMCONFIG3_AGCAUTO_OFF               0x00 
-
-/*!
- * RegFeiMsb (Read Only)
- */
-
-/*!
- * RegFeiMid (Read Only)
- */
-
-/*!
- * RegFeiLsb (Read Only)
- */
-
-/*!
- * RegRssiWideband (Read Only)
- */
-
-/*!
- * RegDetectOptimize
- */
-#define RFLR_DETECTIONOPTIMIZE_MASK                 0xF8
-#define RFLR_DETECTIONOPTIMIZE_SF7_TO_SF12          0x03 // Default
-#define RFLR_DETECTIONOPTIMIZE_SF6                  0x05
-
-/*!
- * RegInvertIQ
- */
-#define RFLR_INVERTIQ_RX_MASK                       0xBF
-#define RFLR_INVERTIQ_RX_OFF                        0x00
-#define RFLR_INVERTIQ_RX_ON                         0x40
-#define RFLR_INVERTIQ_TX_MASK                       0xFE
-#define RFLR_INVERTIQ_TX_OFF                        0x01
-#define RFLR_INVERTIQ_TX_ON                         0x00
-
-/*!
- * RegDetectionThreshold
- */
-#define RFLR_DETECTIONTHRESH_SF7_TO_SF12            0x0A // Default
-#define RFLR_DETECTIONTHRESH_SF6                    0x0C
-
-/*!
- * RegInvertIQ2
- */
-#define RFLR_INVERTIQ2_ON                           0x19
-#define RFLR_INVERTIQ2_OFF                          0x1D
-
-/*!
- * RegDioMapping1
- */
-#define RFLR_DIOMAPPING1_DIO0_MASK                  0x3F
-#define RFLR_DIOMAPPING1_DIO0_00                    0x00  // Default
-#define RFLR_DIOMAPPING1_DIO0_01                    0x40
-#define RFLR_DIOMAPPING1_DIO0_10                    0x80
-#define RFLR_DIOMAPPING1_DIO0_11                    0xC0
-
-#define RFLR_DIOMAPPING1_DIO1_MASK                  0xCF
-#define RFLR_DIOMAPPING1_DIO1_00                    0x00  // Default
-#define RFLR_DIOMAPPING1_DIO1_01                    0x10
-#define RFLR_DIOMAPPING1_DIO1_10                    0x20
-#define RFLR_DIOMAPPING1_DIO1_11                    0x30
-
-#define RFLR_DIOMAPPING1_DIO2_MASK                  0xF3
-#define RFLR_DIOMAPPING1_DIO2_00                    0x00  // Default
-#define RFLR_DIOMAPPING1_DIO2_01                    0x04
-#define RFLR_DIOMAPPING1_DIO2_10                    0x08
-#define RFLR_DIOMAPPING1_DIO2_11                    0x0C
-
-#define RFLR_DIOMAPPING1_DIO3_MASK                  0xFC
-#define RFLR_DIOMAPPING1_DIO3_00                    0x00  // Default
-#define RFLR_DIOMAPPING1_DIO3_01                    0x01
-#define RFLR_DIOMAPPING1_DIO3_10                    0x02
-#define RFLR_DIOMAPPING1_DIO3_11                    0x03
-
-/*!
- * RegDioMapping2
- */
-#define RFLR_DIOMAPPING2_DIO4_MASK                  0x3F
-#define RFLR_DIOMAPPING2_DIO4_00                    0x00  // Default
-#define RFLR_DIOMAPPING2_DIO4_01                    0x40
-#define RFLR_DIOMAPPING2_DIO4_10                    0x80
-#define RFLR_DIOMAPPING2_DIO4_11                    0xC0
-
-#define RFLR_DIOMAPPING2_DIO5_MASK                  0xCF
-#define RFLR_DIOMAPPING2_DIO5_00                    0x00  // Default
-#define RFLR_DIOMAPPING2_DIO5_01                    0x10
-#define RFLR_DIOMAPPING2_DIO5_10                    0x20
-#define RFLR_DIOMAPPING2_DIO5_11                    0x30
-
-#define RFLR_DIOMAPPING2_MAP_MASK                   0xFE
-#define RFLR_DIOMAPPING2_MAP_PREAMBLEDETECT         0x01
-#define RFLR_DIOMAPPING2_MAP_RSSI                   0x00  // Default
-
-/*!
- * RegVersion (Read Only)
- */
-
-/*!
- * RegPllHop
- */
-#define RFLR_PLLHOP_FASTHOP_MASK                    0x7F
-#define RFLR_PLLHOP_FASTHOP_ON                      0x80
-#define RFLR_PLLHOP_FASTHOP_OFF                     0x00 // Default
-
-/*!
- * RegTcxo
- */
-#define RFLR_TCXO_TCXOINPUT_MASK                    0xEF
-#define RFLR_TCXO_TCXOINPUT_ON                      0x10
-#define RFLR_TCXO_TCXOINPUT_OFF                     0x00  // Default
-
-/*!
- * RegPaDac
- */
-#define RFLR_PADAC_20DBM_MASK                       0xF8
-#define RFLR_PADAC_20DBM_ON                         0x07
-#define RFLR_PADAC_20DBM_OFF                        0x04  // Default
-
-/*!
- * RegFormerTemp
- */
-
-/*!
- * RegBitrateFrac
- */
-#define RF_BITRATEFRAC_MASK                         0xF0
-
-/*!
- * RegAgcRef
- */
-
-/*!
- * RegAgcThresh1
- */
-
-/*!
- * RegAgcThresh2
- */
-
-/*!
- * RegAgcThresh3
- */
-
-/*!
- * RegPll
- */
-#define RF_PLL_BANDWIDTH_MASK                       0x3F
-#define RF_PLL_BANDWIDTH_75                         0x00
-#define RF_PLL_BANDWIDTH_150                        0x40
-#define RF_PLL_BANDWIDTH_225                        0x80
-#define RF_PLL_BANDWIDTH_300                        0xC0  // Default
-
-#endif // __SX1276_REGS_LORA_H__

+ 111 - 0
app/SYSTEM/includes/gateway_message.h

@@ -0,0 +1,111 @@
+#ifndef __GATEWAY_MESSAGE_H
+#define __GATEWAY_MESSAGE_H
+#include "stm32f2xx.h"
+
+
+
+//枚举了协议类型
+enum {DLT645_07=1,MODBUS_READ,DLT645_97,MODBUS_WRITE}PROTOCOL;
+//枚举了数据的格式
+enum {typeInt=1,typeFloat,typeDouble}DATAType;
+
+//大小端
+typedef enum
+{   
+  MModBus_16bitOrder_AB=1,   //大端
+  MModBus_16bitOrder_BA,    
+}MModBus_16bitOrder_t;
+
+// 节点所存储的modbus写命令
+typedef struct _NODE_WRITE_MODBUS_COMMAND
+{
+	uint8_t slaveAddress;
+	uint8_t dataType;          //数据类型
+	uint8_t slaveAdress;
+	uint8_t keyword[20]; // 所写属性的名称
+	uint8_t bigLittleFormat;
+	uint16_t registerAddress;	// 寄存器地址
+	uint8_t write_command_flag; // 是否成功写入的标志
+} NODE_WRITE_MODBUS_COMMAND;
+// 节点所存储的modbus读命令
+typedef struct _NODE_READ_MODBUS_COMMAND
+{
+	uint8_t slaveAddress;
+	uint8_t keyword[20]; // 所读属性的名称
+	uint8_t bigLittleFormat;
+	uint8_t dataType;          //数据类型
+	uint16_t registerAddress;  // 寄存器地址
+	uint8_t read_command_flag; // 是否成功读取到的标志
+	uint8_t value[4];          //读取到的数据值
+	uint8_t decimalPoint;
+} NODE_READ_MODBUS_COMMAND;
+// 节点所存储都DLT645读指令
+typedef struct _NODE_READ_DLT645_COMMAND
+{
+	uint8_t deviceID645[6];
+	uint8_t keyword[20];   // 所读属性的名称
+	uint32_t functionCode; // 645数据标识
+	uint8_t data[9];	   // 读到的数据
+	uint8_t rxLen;		   // 从机应答值的长度
+} NODE_READ_DLT645_COMMAND;
+
+typedef struct _PARAMS_PROTOCOL_COMMAND
+{
+	NODE_READ_MODBUS_COMMAND   *node_read_modbus_command;
+	NODE_WRITE_MODBUS_COMMAND  *node_write_modbus_command;
+	NODE_READ_DLT645_COMMAND   *node_read_dlt645_command;
+	struct _PARAMS_PROTOCOL_COMMAND *nextParams;
+}PARAMS_PROTOCOL_COMMAND;
+
+// 节点包含的设备信息
+typedef struct _DEVICE_PARAMS
+{
+	uint8_t aliveflag; // 存活证明(由轮询来进行保证,当有轮询回应是确定其存活,当链路变化时立即上报设备已经死去,当轮询有相应的相应值时去上报已经存活)
+	uint8_t deviceID[20];
+	uint8_t protocol;  // 所属协议类型                  1:modbus read 2:modbus write     3:dlt97  4:dlt07            一个设备只能存在一个协议
+	PARAMS_PROTOCOL_COMMAND	*params;
+	struct _DEVICE_PARAMS *nextDevice; // 指向下一个设备地址
+} DEVICE_PARAMS;
+
+typedef struct _NODE_PARAMS
+{
+	uint8_t node_address[10];
+	// 外设的串口工作属性仅只有一个
+	uint32_t baudrate;	 // 波特率
+	uint8_t dataBits;	 // 数据位
+	uint8_t checkBit;	 // 校验位
+	uint8_t stopBit;	 // 停止位
+	uint8_t flowControl; // 流控制
+	// lora通信的属性设置
+
+	// 包含的设备结构体
+	uint8_t deviceCount;
+	DEVICE_PARAMS *device_params;
+	struct _NODE_PARAMS *nextNode; // 下一个设备所存地址如果没有下一个设备指向NULL
+} NODE_PARAMS;
+
+typedef struct _GATEWAY_PARAMS
+{
+	uint8_t data_valid_flag;  // 数据有效标志  0xF1:有效  其它:无效
+	uint8_t host[20];		  // MQTT服务器地址
+	uint16_t port;			  // MQTT服务器端口号
+	uint8_t messageTopic[50]; // MQTT消息主题
+	uint8_t commandTopic[50]; // MQTT指令主题
+	uint8_t deviceId[25];	  // 设备ID
+	uint8_t dataSource;		  // 协议类型                 0 保留 1 表示645协议 2表示modbus协议
+	uint8_t dataType645;	  // 645协议数据类型          0保留  1 表示07版本  2表示97版本
+	uint32_t pollTime;		  // 轮询时间
+	uint32_t inboundTime;
+	uint8_t state;			 // 检测是否上位机配置过当上位机配置过该状态位,则以后均不走http获取相应配置 置位值为0xF1
+	uint8_t gatewayId[10];	 // 固化信息
+	uint8_t gatewayMode[10]; // 工作模式、后续版本迭代使用
+	// 网关相关信息
+	uint8_t gateName[10];
+
+	// 附属设备相关信息
+	NODE_PARAMS *node_params;
+} GATEWAY_PARAMS;
+
+void addNode(GATEWAY_PARAMS *gateway, const char *nodeId);
+GATEWAY_PARAMS *get_gateway_config_params();
+#endif

+ 13 - 0
app/SYSTEM/includes/myFile.h

@@ -0,0 +1,13 @@
+#ifndef __MYFILE_H
+#define	__MYFILE_H
+
+
+#include "bsp.h"
+#include "ff.h"			/* FatFSÎļþϵͳģ¿é*/
+#include "demo_nand_fatfs.h"
+
+
+void write_file(const char* filename, const char* data, uint32_t length);
+void read_file(const char* filename, char* data);
+void ViewRootDir();
+#endif

+ 0 - 0
app/SYSTEM/includes/protocol.h


+ 13 - 0
app/SYSTEM/includes/task.h

@@ -0,0 +1,13 @@
+#ifndef __TASK_H
+#define	__TASK_H
+#include "includes.h"
+#include "stm32f2xx.h"
+//Ö÷ÒªµÄÊý¾Ý´¦ÀíÏß³Ì
+#define DATA_TASK_PRIO 5
+#define DATA_STK_SIZE  10*1024
+
+extern void data_task(void *pdata);
+
+
+
+#endif

+ 66 - 0
app/SYSTEM/source/gateway_message.c

@@ -0,0 +1,66 @@
+#include "gateway_message.h"
+#include "string.h"
+#include <stdlib.h>
+
+static GATEWAY_PARAMS gateway_config_params = {0};
+
+
+
+
+GATEWAY_PARAMS *get_gateway_config_params()
+{
+		return &gateway_config_params;
+}
+
+
+ /**
+  * @brief  向网关结构体内新增一个节点信息
+  * @param  cJSON *data_obj 网关结构体信息、const char* nodeId新增的节点ID
+  * @retval 无
+  */
+void addNode(GATEWAY_PARAMS* gateway, const char* nodeId) {
+    // 增加节点数量
+    NODE_PARAMS* newNode = (NODE_PARAMS*)malloc(sizeof(NODE_PARAMS));
+    strcpy((char *)&newNode->node_address,nodeId);
+    newNode->device_params = NULL;         //先将其设备挂载为NULL
+    newNode->nextNode = NULL;              //下一个设备的挂载为NULL
+
+    // 添加节点到网关链表中
+    if (gateway->node_params == NULL) {
+        gateway->node_params = newNode;
+    } 
+		else 
+		{
+        NODE_PARAMS* current = gateway->node_params;
+        while (current->nextNode != NULL) {
+            current = current->nextNode;
+        }
+        current->nextNode = newNode;
+    }
+}
+ /**
+  * @brief  向节点下新增设备
+  * @param  NODE_PARAMS* node往那个节点中加入新的设备,const char* deviceName将设备地址当作其唯一标识
+  * @retval 无
+  */
+void addDevice(NODE_PARAMS* node,const uint8_t* deviceName)
+{
+	 // 创建新设备页
+    DEVICE_PARAMS* newDevicePage = (DEVICE_PARAMS*)malloc(sizeof(DEVICE_PARAMS));
+
+    newDevicePage->nextDevice = NULL;
+    // 添加设备页到链表末尾
+    if (node->device_params == NULL) {
+        node->device_params = newDevicePage;
+    } else {
+        DEVICE_PARAMS* current = node->device_params;
+        while (current->nextDevice != NULL) {
+            current = current->nextDevice;
+        }
+        current->nextDevice = newDevicePage;
+    }
+}
+
+void addParams()
+{
+}

+ 192 - 0
app/SYSTEM/source/myFile.c

@@ -0,0 +1,192 @@
+#include "myFile.h"
+/*
+*********************************************************************************************************
+*	函 数 名: int write_file(const char* filename, const char* data, uint32_t length)
+*	形    参:*fileName所创建的文件系统名称*data要写入字符串的首地址,总共要写入的数据长度。
+*	返 回 值: 无
+*********************************************************************************************************
+*/
+void write_file(const char* filename, const char* data, uint32_t length)
+{
+  /* 本函数使用的局部变量占用较多,请修改启动文件,保证堆栈空间够用 */
+	FRESULT result;
+	FATFS fs;
+	FIL file;
+	DIR DirInf;
+	uint32_t bw;
+
+ 	/* 挂载文件系统 */
+	result = f_mount(&fs, FS_VOLUME_NAND, 0);			/* Mount a logical drive */
+	if (result != FR_OK)
+	{
+		printf("挂载文件系统失败 (%d)\r\n", result);
+	}
+
+	/* 打开根文件夹 */
+	result = f_opendir(&DirInf, "0:/"); /* 0: 表示盘符 */
+	if(result==FR_NO_FILESYSTEM)  //如果返回值为无filesystem则创建文件系统
+	{
+		f_mkfs("0:",0,0);
+	}
+	if (result != FR_OK)
+	{	
+		printf("打开根目录失败 (%d)\r\n", result);
+		return ;
+	}
+  char filepath[30];
+  sprintf(filepath, "0:/%s", filename);//为filename加入filepath前缀
+
+	/* 打开文件 */
+	result = f_open(&file, filepath, FA_CREATE_ALWAYS | FA_WRITE);
+
+	/* 写一串数据 */
+	result = f_write(&file,data, length, &bw);
+	if (result == FR_OK)
+	{
+		printf("文件写入成功\r\n");
+	}
+	else
+	{
+		printf("文件写入失败\r\n");
+	}
+	/* 关闭文件*/
+	f_close(&file);
+	/* 卸载文件系统 */
+	f_mount(NULL, FS_VOLUME_NAND, 0);
+}
+
+/*
+*********************************************************************************************************
+*	函 数 名: ReadFileData
+*	功能说明: 
+*	形    参:无
+*	返 回 值: 无
+*********************************************************************************************************
+*/
+void read_file(const char* filename, char* data)
+{
+	/* 本函数使用的局部变量占用较多,请修改启动文件,保证堆栈空间够用 */
+	FRESULT result;
+	FATFS fs;
+	FIL file;
+	DIR DirInf;
+	uint32_t bw;
+
+ 	/* 挂载文件系统 */
+	result = f_mount(&fs, FS_VOLUME_NAND, 0);			/* Mount a logical drive */
+	
+	if (result != FR_OK)
+	{
+		printf("挂载文件系统失败(%d)\r\n", result);
+	}
+
+	/* 打开根文件夹 */
+	result = f_opendir(&DirInf, "0:/"); 
+	if(result==FR_NO_FILESYSTEM)  //如果返回值为无filesystem则创建文件系统
+	{
+		f_mkfs("0:",0,0);
+	}
+	if (result != FR_OK)
+	{
+		printf("打开根目录失败(%d)\r\n", result);
+		return;
+	}
+	char filepath[30];
+  sprintf(filepath, "0:/%s", filename);//为filename加入filepath前缀
+	/* 打开文件 */
+	result = f_open(&file, filepath, FA_OPEN_EXISTING | FA_READ);
+	if (result !=  FR_OK)
+	{
+		printf("Don't Find File \r\n");
+		return;
+	}
+
+	/* 读取文件 */
+
+	result= f_read(&file, data, f_size(&file), &bw);
+	if (bw > 0)
+	{
+		printf("\r\%s 文件内容 : \r\n%s\r\n", filename,data);
+	}
+	else
+	{
+		printf("\r\%s 文件内容 : \r\n",filename);
+	}
+
+	/* 关闭文件*/
+	f_close(&file);
+
+	/* 卸载文件系统 */
+	f_mount(NULL, FS_VOLUME_NAND, 0);
+}
+/*
+*********************************************************************************************************
+*	函 数 名: ViewRootDir
+*	功能说明: 显示SD卡根目录下的文件名
+*	形    参:无
+*	返 回 值: 无
+*********************************************************************************************************
+*/
+void ViewRootDir(void)
+{
+	/* 本函数使用的局部变量占用较多,请修改启动文件,保证堆栈空间够用 */
+	FRESULT result;
+	FATFS fs;
+	DIR DirInf;
+	FILINFO FileInf;
+	uint32_t cnt = 0;
+	char lfname[256];
+
+ 	/* 挂载文件系统 */
+	result = f_mount(&fs, FS_VOLUME_NAND, 0);	/* Mount a logical drive */	
+	if (result != FR_OK)
+	{
+		printf("挂载文件系统失败 (%d)\r\n", result);
+	}
+	/* 打开根文件夹 */
+	result = f_opendir(&DirInf, "0:/"); /* 0: 表示盘符 */
+	if (result != FR_OK)
+	{
+		printf("打开根目录失败 (%d)\r\n", result);
+		return;
+	}
+
+	/* 读取当前文件夹下的文件和目录 */
+	FileInf.lfname = lfname;
+	FileInf.lfsize = 256;
+
+	printf("属性 |  文件大小 | 短文件名 | 长文件名\r\n");
+	for (cnt = 0; ;cnt++)
+	{
+		result = f_readdir(&DirInf,&FileInf); 		/* 读取目录项,索引会自动下移 */
+		if (result != FR_OK || FileInf.fname[0] == 0)
+		{
+			break;
+		}
+
+		if (FileInf.fname[0] == '.')
+		{
+			continue;
+		}
+
+		/* 判断是文件还是子目录 */
+		if (FileInf.fattrib & AM_DIR)
+		{
+			printf("(0x%02d)目录  ", FileInf.fattrib);
+		}
+		else
+		{
+			printf("(0x%02d)文件  ", FileInf.fattrib);
+		}
+
+		/* 打印文件大小, 最大4G */
+		printf(" %10d", FileInf.fsize);
+
+		printf("  %s |", FileInf.fname);	/* 短文件名 */
+
+		printf("  %s\r\n", (char *)FileInf.lfname);	/* 长文件名 */
+	}
+
+	/* 卸载文件系统 */
+	f_mount(NULL, FS_VOLUME_NAND, 0);
+}

+ 199 - 0
app/SYSTEM/source/protocol.c

@@ -0,0 +1,199 @@
+#include "protocol.h"
+#include "stdint.h"
+#include "gateway_message.h"
+#include "stdlib.h"
+#include "string.h"
+
+
+/*****************************protocol主要为主网关与子节点通讯的协议使用**********************************/
+/*****************************其主要作用主网关给子节点轮询发送数据的编码**********************************/
+/*****************************子节点解析该主网关发送的数据              **********************************/
+/*****************************子节点回应对应的响应                     **********************************/
+/*****************************子节点回应对应的响应的解析               **********************************/
+
+static volatile int deviceNum=0;                           //记录轮询读取设备的结束位置
+static volatile int paramsNum=0;                            //记录轮询读取属性的结束位置
+static volatile int startDeviceNum=0;                       //记录轮询读取设备的开始位置
+static volatile int startParamsNum=0;                       //记录轮询读取设备属性的开始位置
+void insertHexData(uint8_t *String,const uint8_t *hexData,uint8_t insertIndex,uint8_t length);
+
+enum {protocol_dlt645_97=0x08,protocol_modbus,protocol_dlt645_07}PROTOCOL_LENGTH;   //每个协议的数据包长度
+/*
+*********************************************************************************************************
+*	函 数 名: void masterSendNodeString(uint8_t nodeIndex)Index下标从0开始
+*	功能说明: 负责取出网关第nodeIndex下的数据组成下发格式的数据,注:此处没有对node是否为NULL进行判断,请确保有该节点的信息
+*	形    参:无
+*	返 回 值: 0:该节点下已经没有属性需要在去读出了,1:该节点下还拥有其他属性等待读出。
+	注:其一次性只能传输20条属性的值若超出其范围还有数据则要多次组成发送
+	逻辑:每次调用该函数都会总成一条string,属性足够的时候会组成一条具有20个属性的指令,并记录结束的设备链表位置,属性链表位置,下次再调用从结束位置再开始,到最后可能就组成不了20个属性的string了,此时将开始的设备num,属性都归位
+				且也要记录每次开始的设备位置和属性位置,方便接收应答信号的解析
+*********************************************************************************************************
+*/
+int masterSendNodeString(uint8_t nodeIndex,uint8_t *string,uint16_t *size)
+{
+	startDeviceNum=deviceNum;            //起始位置等于上次结束的位置
+	startParamsNum=paramsNum;           //起始位置等于上次结束的位置
+	int nowDeviceNum=deviceNum;
+	int nowparamsNum=paramsNum;
+	GATEWAY_PARAMS *gateway;
+	gateway=get_gateway_config_params();
+	//将当前的节点指针指到需要读取的节点位置
+	NODE_PARAMS* currentNode = gateway->node_params;
+	while(nodeIndex)
+	{
+		currentNode = currentNode->nextNode;
+		nodeIndex--;
+	}
+	string=malloc(257);
+	memset(string,0,257);
+	//将首字符用nodeAdress
+	string[0]=currentNode->node_address[0];
+	string[1]=currentNode->node_address[1];
+	//找到当前的设备结束位置
+	DEVICE_PARAMS* currentDevice=currentNode->device_params;
+	while(!nowDeviceNum)
+	{
+		currentDevice=currentDevice->nextDevice;
+		nowDeviceNum--;
+	}
+	PARAMS_PROTOCOL_COMMAND* currentParams=currentDevice->params;
+	//移动位置到结束位置属性的下一位 
+	while(!nowparamsNum)
+	{
+		currentParams=currentParams->nextParams;
+		nowparamsNum--;
+	}
+	if(currentParams==NULL)
+	{
+		currentDevice=currentDevice->nextDevice;
+			//判断当前还有没有设备没有读取了
+			if(currentDevice==NULL)                      //且当前链表无后续设备了则跳出循环
+			{
+				deviceNum=0;                                //将结束位置全部归0
+				paramsNum=0;
+				return -1;
+			}
+			currentParams=currentDevice->params;         //有则更新当前指针位置
+			nowDeviceNum++;
+			nowparamsNum=0;
+	}
+	
+	
+	//最多进行20次循环组成下发数据
+	int i=0;
+	int len=strlen((char *)&string);
+	do
+	{
+		switch(currentDevice->protocol)
+		{
+			case MODBUS_READ:
+				insertHexData(string,(uint8_t *)protocol_modbus,len,1);                                                        //插入modbus长度
+			  len++;
+				insertHexData(string,(uint8_t *)MODBUS_READ,len,1);                                                            //插入modbus读指令
+			  len++;
+				insertHexData(string,&currentParams->node_read_modbus_command->dataType,len,1);                                 //插入读取的数据格式
+			  len++;
+			  insertHexData(string,&currentParams->node_read_modbus_command->slaveAddress,len,1);                             //插入modbus从站地址
+				len++;
+				insertHexData(string,(uint8_t *)&currentParams->node_read_modbus_command->registerAddress,len,2);              //插入modbus寄存器地址
+			  len+=2;
+			  insertHexData(string,&currentParams->node_read_modbus_command->decimalPoint,len,1);                            //插入小数点位数
+			  len++;
+				insertHexData(string,&currentParams->node_read_modbus_command->bigLittleFormat,len,1);                         //插入大小端
+			  len++;
+			break;
+			case MODBUS_WRITE:
+				insertHexData(string,(uint8_t *)protocol_modbus,len,1);                                                        //插入modbus长度
+			  len++;
+				insertHexData(string,(uint8_t *)MODBUS_WRITE,len,1);                                                            //插入modbus读指令
+			  len++;
+				insertHexData(string,&currentParams->node_write_modbus_command->dataType,len,1);                                 //插入读取的数据格式
+			  len++;
+			  insertHexData(string,&currentParams->node_write_modbus_command->slaveAddress,len,1);                             //插入modbus从站地址
+				len++;
+				insertHexData(string,(uint8_t *)&currentParams->node_write_modbus_command->registerAddress,len,2);              //插入modbus寄存器地址
+			  len+=2;
+			  insertHexData(string,0x00,len,1);                                                                               //插入小数点位数
+			  len++;
+				insertHexData(string,&currentParams->node_write_modbus_command->bigLittleFormat,len,1);                         //插入大小端
+			  len++;
+			break;
+			case DLT645_07:
+				insertHexData(string,(uint8_t *)protocol_dlt645_07,len,1);                                                          //插入dlt645_07数据长度
+				len++;
+			  insertHexData(string,(uint8_t *)&currentParams->node_read_dlt645_command->deviceID645,len,6);                      //插入dlt645地址域               
+        len+=6;
+        insertHexData(string,(uint8_t *)&currentParams->node_read_dlt645_command->functionCode,len,4);
+				len+=4;
+			break;
+			case DLT645_97:
+				insertHexData(string,(uint8_t *)protocol_dlt645_97,len,1);                                                          //插入dlt645_97数据长度
+				len++;
+			  insertHexData(string,(uint8_t *)&currentParams->node_read_dlt645_command->deviceID645,len,6);                      //插入dlt645_97地址域               
+        len+=6;
+        insertHexData(string,(uint8_t *)&currentParams->node_read_dlt645_command->functionCode,len,2);                      //插入dlt645_97数据标识                 
+				len+=2;
+			default:
+				break;
+		}
+		i++;
+		currentParams=currentParams->nextParams;
+		//判断当前设备有没有属性可读了
+		if(currentParams==NULL)                        
+		{
+			currentDevice=currentDevice->nextDevice;
+			//判断当前还有没有设备没有读取了
+			if(currentDevice==NULL)                      //且当前链表无后续设备了则跳出循环
+			{
+				deviceNum=0;                                //将结束位置全部归0
+				paramsNum=0;
+				break;
+			}
+			currentParams=currentDevice->params;         //有则更新当前指针位置
+			nowDeviceNum++;
+			nowparamsNum=0;
+		}
+		nowparamsNum++;
+	} while (i==20);
+	
+	//更新结束的位置分为两种情况,一种还在当前设备的属性中轮询此时nowDeviceNum没有改变过,另外一种情况设备内的属性
+	if(nowDeviceNum==0)
+	{
+		deviceNum=startDeviceNum;
+		paramsNum=startParamsNum+nowparamsNum;
+	}
+	else
+	{
+		deviceNum=startDeviceNum+nowDeviceNum;
+		paramsNum=nowparamsNum;
+	}
+	*size=len;
+	
+}
+/*
+*********************************************************************************************************
+*	函 数 名: void insertHexData(uint8_t *originalString,const uint8_t *hexData,int position)
+*	形    参:uint8_t *String需要插入的字符串,hexData插入的hex数据,insertIndex插入的下标位置,length插入的数据长度
+*	返 回 值: 无
+  注:插入的数据以被插入的字符串都可能包含0x00不要使用strlen
+*********************************************************************************************************
+*/
+void insertHexData(uint8_t *String,const uint8_t *hexData,uint8_t insertIndex,uint8_t length)
+{
+	memcpy(String+insertIndex,hexData,length);
+}
+
+/*
+*********************************************************************************************************
+*	函 数 名: uint8_t SlaveProtocolAnalysis(uint8_t *buff,uint16_t len)
+*	形    参:uint8_t *buff等待解析的字符串数据,
+*	返 回 值: 无
+	解析这段数据时要先判断是否为该节点的消息,如果是才进行数据解析工作
+*********************************************************************************************************
+*/
+uint8_t SlaveProtocolAnalysis(uint8_t *buff,uint16_t len)
+{
+	uint16_t NodeAdress=buff[0]<<8 || buff[1];
+	
+	
+}

+ 244 - 0
app/SYSTEM/source/task.c

@@ -0,0 +1,244 @@
+#include "task.h"
+#include "malloc.h"
+#include "cjson.h"
+#include "myFile.h"
+#include "gateway_message.h"
+#include "log.h"
+
+#include "sx1276.h"
+#include "radio.h"
+
+void processHTTPjson(cJSON *json);
+void processDevice(cJSON *json, const char *readString);
+void master_task(char *string);
+void slave_task();
+
+tRadioDriver *Radio = NULL;
+
+uint16_t BufferSize ;
+uint8_t Buffer[256];
+
+uint32_t rx_num = 0;
+
+uint8_t PingMsg[] = "PING\0";
+uint8_t PongMsg[] = "PONG\0";
+
+/**
+ * @brief  从输入字符串匹配对应的key并将value中的string返回
+ * @param  cJSON *data_obj json对象, const char *key key关键字
+ * @retval 解析出的string
+ */
+char *processStringData(cJSON *data_obj, const char *key)
+{
+	cJSON *json_data = cJSON_GetObjectItemCaseSensitive(data_obj, key);
+	if (cJSON_IsString(json_data) && (json_data->valuestring != NULL))
+	{
+		return json_data->valuestring;
+	}
+	else
+	{
+		// gateway.data_valid_flag = 0; // 如果任意数据为NULL则此次数据为无效
+		return NULL;
+	}
+}
+
+// json解析int
+int processIntData(cJSON *data_obj, const char *key)
+{
+	cJSON *json_data = cJSON_GetObjectItemCaseSensitive(data_obj, key);
+	// if (cJSON_IsNumber(json_data) && (json_data->valueint != NULL)) 解决寄存器地址为0问题
+	if (cJSON_IsNumber(json_data))
+	{
+		return json_data->valueint;
+	}
+	else
+	{
+		// gateway.data_valid_flag = 0; // 如果任意数据为NULL则此次数据为无效
+		return -1;
+	}
+}
+// 解析json中包含的节点数量,已经节点的id
+void processNodeListData(cJSON *data_obj, GATEWAY_PARAMS *gateway)
+{
+	cJSON *nodeList = cJSON_GetObjectItemCaseSensitive(data_obj, "nodeList");
+	if (nodeList == NULL || !cJSON_IsArray(nodeList))
+	{
+		cJSON_Delete(nodeList);
+	}
+	int nodeListSize = cJSON_GetArraySize(nodeList);
+	for (int i = 0; i < nodeListSize; i++)
+	{
+		cJSON *node = cJSON_GetArrayItem(nodeList, i);
+
+		if (cJSON_IsString(node))
+		{
+			addNode(gateway, node->valuestring); // 往链表中不断加入新的节点
+		}
+	}
+}
+/*
+*********************************************************************************************************
+*	函 数 名: void data_task(void *pdata)
+*	功能说明: 主要是data_task处理线程,优先级高。其运行逻辑是将nandflash中的数据解析出来轮询发送数据
+*	形    参:无
+*	返 回 值: 无
+*********************************************************************************************************
+*/
+void data_task(void *pdata)
+{
+	OS_CPU_SR cpu_sr;
+	pdata = pdata;
+	char *lora_config_json = malloc(15 * 1024);
+	read_file("lora_json.txt", lora_config_json);
+	cJSON *json = cJSON_Parse(lora_config_json);
+	if (json != NULL)
+	{
+		OS_ENTER_CRITICAL(); // 进入临界区确保同一时间只有一个线程访问gatewayMessage
+		processHTTPjson(json);
+		OS_EXIT_CRITICAL();
+	}
+	else
+	{
+		LogPrint(LOG_INFO, __func__, __LINE__, "json is to long");
+	}
+	cJSON_Delete(json);
+	free(lora_config_json);
+
+	Radio = RadioDriverInit();
+	Radio->Init();
+#ifdef MASTER
+	Radio->SetTxPacket(PingMsg, strlen((const char *)PingMsg));
+	printf("MASTER");
+#else
+	Radio->StartRx();
+	printf("SLAVE");
+
+#endif
+	while (1)
+	{
+#ifdef MASTER
+		master_task("a");
+#else
+		slave_task();
+#endif
+	}
+}
+/*
+*********************************************************************************************************
+*	函 数 名: void processHTTPjson(cJSON *json)
+*	功能说明: 解析http下载json文件数据转换为结构体信息保存在内部结构体
+*	形    参:无
+*	返 回 值: 无
+*********************************************************************************************************
+*/
+void processHTTPjson(cJSON *json)
+{
+	GATEWAY_PARAMS *gateway = get_gateway_config_params();
+	// 解析必须的网关信息
+	strcpy(gateway->host, processStringData(json, "host"));
+	gateway->port = processIntData(json, "port");
+	strcpy(gateway->messageTopic, processStringData(json, "messageTopic"));
+	strcpy(gateway->commandTopic, processStringData(json, "commandTopic"));
+	// 解析节点lodelist内包含的nodelist的设备序列号并扩充整个设备链表
+	processNodeListData(json, gateway);
+	NODE_PARAMS *current = gateway->node_params;
+	// 拿到节点的名称后去解析json的相关内容
+	while (current != NULL)
+	{
+		char *processNodeRead = malloc(20);
+		sprintf(processNodeRead, "read_%s", current->node_address);
+		cJSON *readArrayItem = cJSON_GetObjectItem(json, processNodeRead);
+		if (cJSON_IsArray(readArrayItem))
+		{
+			uint8_t read_data_num = cJSON_GetArraySize(readArrayItem);
+			for (int i = 0; i < read_data_num; i++)
+			{
+				cJSON *read_data_obj = cJSON_GetArrayItem(readArrayItem, i);
+				// 解析到节点内部的内容
+				if (cJSON_IsObject(read_data_obj))
+				{
+					DEVICE_PARAMS *currentDevice;
+				}
+				else
+				{
+				}
+			}
+		}
+		free(processNodeRead);
+		current = current->nextNode;
+	}
+}
+/*
+*********************************************************************************************************
+*	函 数 名: void master_task(char *string)
+*	功能说明: 主网关sx1278轮询发送调用接口,发送结束后就将状态切换到接收状态,等待从机的响应值,当从机超时或接收到数据进行后续数据处理的流程
+*	形    参:无
+*	返 回 值: 无
+*********************************************************************************************************
+*/
+
+volatile uint32_t startTime;             //记录开始的时间
+void master_task(char *string)
+{
+	
+	switch (Radio->Process())
+	{
+		case RF_RX_DONE:
+			Radio->GetRxPacket(Buffer, &BufferSize);
+			printf("Master_Task:RX_____%s,Rx_num:%d\n", Buffer, rx_num);
+			rx_num++;
+			if (strncmp((const char *)Buffer, (const char *)PongMsg, strlen((const char *)PongMsg)) == 0)
+			{
+				Radio->SetTxPacket(PingMsg, strlen((const char *)PingMsg));
+				startTime=OSTimeGet();
+				delay_ms(1000);
+			}
+			break;
+		case RF_TX_DONE:
+			startTime=OSTimeGet();
+			Radio->StartRx();
+		case RF_BUSY:
+		case RF_IDLE:
+			if(OSTimeGet()-startTime>10000)                                          //每次发送信号时记录上一次发送的时间如果超过一段时间没有响应则进行下一次发送
+				{
+					Radio->SetTxPacket(PingMsg, strlen((const char *)PingMsg));
+					startTime=OSTimeGet();                                     
+					delay_ms(1000);
+				}
+		default:
+			OSTimeDlyHMSM(0, 0, 0, 500);
+			break;
+		}
+}
+/*
+*********************************************************************************************************
+*	函 数 名: void slave_task(char *string)
+*	功能说明: 负责从站数据处理
+*	形    参:无
+*	返 回 值: 无
+*********************************************************************************************************
+*/
+volatile bool rxflag=false;
+void slave_task()
+{
+	switch (Radio->Process())
+	{
+		case RF_RX_DONE:
+			Radio->GetRxPacket(Buffer, &BufferSize);
+			printf("Slave_Task:RX_____%s,Rx_num:%d\n", Buffer, rx_num);
+			rx_num++;
+			if (strncmp((const char *)Buffer, (const char *)PingMsg, strlen((const char *)PingMsg)) == 0)
+			{
+				Radio->SetTxPacket(PongMsg, strlen((const char *)PongMsg));
+				delay_ms(1000);
+			}
+			break;
+		case RF_TX_DONE:
+			Radio->StartRx();
+			break;
+		case RF_IDLE:
+		case RF_BUSY:
+		default:
+		OSTimeDlyHMSM(0, 0, 0, 500);
+	}
+}

+ 87 - 0
app/Sx1278/platform/platform.h

@@ -0,0 +1,87 @@
+/*
+ * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND 
+ * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER.
+ * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
+ * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
+ * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ * 
+ * Copyright (C) SEMTECH S.A.
+ */
+/*! 
+ * \file       platform.h
+ * \brief        
+ *
+ * \version    1.0
+ * \date       Nov 21 2012
+ * \author     Miguel Luis
+ */
+#ifndef __PLATFORM_H__
+#define __PLATFORM_H__
+
+#ifndef __GNUC__
+#define inline
+#endif
+
+/*!
+ * Platform definition
+ */
+#define Bleeper                                     3
+#define SX1243ska                                   2
+#define SX12xxEiger                                 1
+#define SX12000DVK                                  0
+
+/*!
+ * Platform choice. Please uncoment the PLATFORM define and choose your platform
+ * or add/change the PLATFORM definition on the compiler Defines option
+ */
+#define PLATFORM                                    SX12xxEiger
+
+#if( PLATFORM == SX12xxEiger )
+/*!
+ * Radio choice. Please uncomment the wanted radio and comment the others
+ * or add/change wanted radio definition on the compiler Defines option
+ */
+//#define USE_SX1232_RADIO
+//#define USE_SX1272_RADIO
+#define USE_SX1276_RADIO
+//#define USE_SX1243_RADIO
+
+/*!
+ * Module choice. There are three existing module with the SX1276.
+ * Please set the connected module to the value 1 and set the others to 0
+ */
+#ifdef USE_SX1276_RADIO
+#define MODULE_SX1276RF1IAS                         0
+#define MODULE_SX1276RF1JAS                         0
+#define MODULE_SX1276RF1KAS                         1
+#endif
+
+    #include "sx12xxEiger.h"
+    #define USE_UART                                0
+
+#elif( PLATFORM == SX12000DVK )
+/*!
+ * Radio choice. Please uncomment the wanted radio and comment the others
+ * or add/change wanted radio definition on the compiler Defines option
+ */
+//#define USE_SX1232_RADIO
+//#define USE_SX1272_RADIO
+#define USE_SX1276_RADIO
+//#define USE_SX1243_RADIO
+
+//    #include "sx1200dvk/sx1200dvk.h"
+
+#elif( PLATFORM == SX1243ska )
+
+#elif( PLATFORM == Bleeper )
+    #define USE_SX1272_RADIO
+    
+    #include "bleeper/bleeper.h"
+    #define USE_UART                                0
+
+#else
+    #error "Missing define: Platform (ie. SX12xxEiger)"
+#endif
+
+#endif // __PLATFORM_H__

+ 130 - 0
app/Sx1278/platform/sx12xxEiger.c

@@ -0,0 +1,130 @@
+/*
+ * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND 
+ * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER.
+ * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
+ * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
+ * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ * 
+ * Copyright (C) SEMTECH S.A.
+ */
+/*! 
+ * \file       sx12xxEiger.c
+ * \brief        
+ *
+ * \version    1.0
+ * \date       Nov 21 2012
+ * \author     Miguel Luis
+ */
+#include <stdint.h> 
+#include "spi.h"
+#include "i2c.h"
+#include "ioe.h"
+#include "led.h"
+#include "uart.h"
+#include "sx12xxEiger.h"
+
+//#if( defined( STM32F4XX ) || defined( STM32F2XX ) || defined( STM32F429_439xx ) )
+//
+//#include "usbd_cdc_core.h"
+//#include "usbd_usr.h"
+//#include "usbd_desc.h"
+//
+//#else
+//
+//#include "usb_regs.h"
+//#include "usb_core.h"
+//#include "usb_init.h"
+//#include "usb_pwr.h"
+//#include "usb_bsp.h"
+//#include "usb_sil.h"
+//
+//#endif
+
+// System tick (1ms)
+volatile uint32_t TickCounter = 0;
+
+//#if( defined( STM32F4XX ) || defined( STM32F2XX ) || defined( STM32F429_439xx ) )
+//
+//#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+//  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+//    #pragma data_alignment=4   
+//  #endif
+//#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+//   
+//__ALIGN_BEGIN USB_OTG_CORE_HANDLE    USB_OTG_dev __ALIGN_END ;
+//
+//#else
+//
+//#endif
+
+void BoardInit( void )
+{
+//    uint8_t i;
+//
+//    /* Setup SysTick Timer for 1 us interrupts ( not too often to save power ) */
+//    if( SysTick_Config( SystemCoreClock / 1000 ) )
+//    { 
+//        /* Capture error */ 
+//        while (1);
+//    }
+//
+//    // Initialize SPI
+//    SpiInit( );
+//
+//    // Initialize I2C
+//    I2cInit( );
+//    
+//    // Initialize IO expander
+//    IoeInit( );
+//    
+//    // Initialize LED
+//    for( i = 0; i < LED_NB; i++ )
+//    {
+//        LedInit( ( tLed )i );
+//    }
+//    IoePinOn( LED_1_PIN );
+//    IoePinOn( LED_2_PIN );
+//    IoePinOn( LED_3_PIN );
+//    
+//#if( defined( STM32F4XX ) || defined( STM32F2XX ) || defined( STM32F429_439xx ) )
+//    
+//    USBD_Init( &USB_OTG_dev,
+//#ifdef USE_USB_OTG_HS 
+//               USB_OTG_HS_CORE_ID,
+//#else            
+//               USB_OTG_FS_CORE_ID,
+//#endif  
+//               &USR_desc, 
+//               &USBD_CDC_cb, 
+//               &USR_cb );
+//#else    
+//        /* Configure the used GPIOs*/
+//        GPIO_Configuration( );
+//        /* Additional EXTI configuration (configure both edges) */
+//        EXTI_Configuration( );
+//
+//        USB_Interrupts_Config( );
+//        Set_USBClock( );
+//        USB_Init( );
+//#endif
+}
+
+void Delay ( uint32_t delay )
+{
+    // Wait delay ms
+    uint32_t startTick = TickCounter;
+    while( ( TickCounter - startTick ) < delay );   
+}
+
+void LongDelay ( uint8_t delay )
+{
+    uint32_t longDelay;
+    uint32_t startTick;
+
+    longDelay = delay * 1000;
+
+    // Wait delay s
+    startTick = TickCounter;
+    while( ( TickCounter - startTick ) < longDelay );   
+}

+ 94 - 0
app/Sx1278/platform/sx12xxEiger.h

@@ -0,0 +1,94 @@
+/*
+ * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND 
+ * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER.
+ * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
+ * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
+ * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ * 
+ * Copyright (C) SEMTECH S.A.
+ */
+/*! 
+ * \file       sx12xxEiger.h
+ * \brief        
+ *
+ * \version    1.0
+ * \date       Nov 21 2012
+ * \author     Miguel Luis
+ */
+#ifndef __SX12XXEIGER_H__
+#define __SX12XXEIGER_H__
+
+#include <stdint.h>
+#include <stdbool.h>
+
+
+//#include "stm32f2xx.h"
+
+#define USE_USB                                     1
+
+#if defined( STM32F4XX ) || defined( STM32F2XX ) || defined( STM32F429_439xx )
+#define BACKUP_REG_BOOTLOADER                       RTC_BKP_DR0      /* Booloader enter*/
+#else
+#define BACKUP_REG_BOOTLOADER                       BKP_DR1          /* Booloader enter*/
+#endif
+
+#define FW_VERSION                                  "2.1.0"
+#define SK_NAME                                     "SX12xxEiger"
+
+/*!
+ * Functions return codes definition
+ */
+typedef enum
+{
+    SX_OK,
+    SX_ERROR,
+    SX_BUSY,
+    SX_EMPTY,
+    SX_DONE,
+    SX_TIMEOUT,
+    SX_UNSUPPORTED,
+    SX_WAIT,
+    SX_CLOSE,
+    SX_YES,
+    SX_NO,          
+}tReturnCodes;
+
+extern volatile uint32_t TickCounter;
+
+/**
+  * @brief   Small printf for GCC/RAISONANCE
+  */
+#ifdef __GNUC__
+/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
+   set to 'Yes') calls __io_putchar() */
+#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
+
+#endif /* __GNUC__ */
+
+/*!
+ * Initializes board peripherals
+ */
+void BoardInit( void );
+
+
+/*!
+ * Delay code execution for "delay" ms
+ */
+void Delay ( uint32_t delay );
+
+/*!
+ * Delay code execution for "delay" s
+ */
+void LongDelay ( uint8_t delay );
+
+/*!
+ * \brief Computes a random number between min and max
+ *
+ * \param [IN] min range minimum value
+ * \param [IN] max range maximum value
+ * \retval random random value in range min..max
+ */
+uint32_t randr( uint32_t min, uint32_t max );
+
+#endif // __SX12XXEIGER_H__

+ 65 - 0
app/Sx1278/radio/radio.c

@@ -0,0 +1,65 @@
+/*
+ * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND 
+ * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER.
+ * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
+ * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
+ * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ * 
+ * Copyright (C) SEMTECH S.A.
+ */
+/*! 
+ * \file       radio.c
+ * \brief      Generic radio driver ( radio abstraction )
+ *
+ * \version    2.0.0 
+ * \date       Nov 21 2012
+ * \author     Miguel Luis
+ *
+ * Last modified by Gregory Cristian on Apr 25 2013
+ */
+#include "platform.h"
+
+#include "radio.h"
+
+#if defined( USE_SX1232_RADIO )
+    #include "sx1232.h"
+#elif defined( USE_SX1272_RADIO )
+    #include "sx1272.h"
+#elif defined( USE_SX1276_RADIO )
+    #include "sx1276.h"
+#else
+    #error "Missing define: USE_XXXXXX_RADIO (ie. USE_SX1272_RADIO)"
+#endif    
+
+tRadioDriver RadioDriver;
+
+tRadioDriver* RadioDriverInit( void )
+{
+#if defined( USE_SX1232_RADIO )
+    RadioDriver.Init = SX1232Init;
+    RadioDriver.Reset = SX1232Reset;
+    RadioDriver.StartRx = SX1232StartRx;
+    RadioDriver.GetRxPacket = SX1232GetRxPacket;
+    RadioDriver.SetTxPacket = SX1232SetTxPacket;
+    RadioDriver.Process = SX1232Process;
+#elif defined( USE_SX1272_RADIO )
+    RadioDriver.Init = SX1272Init;
+    RadioDriver.Reset = SX1272Reset;
+    RadioDriver.StartRx = SX1272StartRx;
+    RadioDriver.GetRxPacket = SX1272GetRxPacket;
+    RadioDriver.SetTxPacket = SX1272SetTxPacket;
+    RadioDriver.Process = SX1272Process;
+#elif defined( USE_SX1276_RADIO )
+    RadioDriver.Init = SX1276Init;
+    RadioDriver.Reset = SX1276Reset;
+    RadioDriver.StartRx = SX1276StartRx;
+    RadioDriver.GetRxPacket = SX1276GetRxPacket;
+    RadioDriver.SetTxPacket = SX1276SetTxPacket;
+    RadioDriver.Process = SX1276Process;
+#else
+    #error "Missing define: USE_XXXXXX_RADIO (ie. USE_SX1272_RADIO)"
+#endif    
+
+    return &RadioDriver;
+}

+ 67 - 0
app/Sx1278/radio/radio.h

@@ -0,0 +1,67 @@
+/*
+ * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND 
+ * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER.
+ * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
+ * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
+ * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ * 
+ * Copyright (C) SEMTECH S.A.
+ */
+/*! 
+ * \file       radio.h
+ * \brief      Generic radio driver ( radio abstraction )
+ *
+ * \version    2.0.B2 
+ * \date       Nov 21 2012
+ * \author     Miguel Luis
+ *
+ * Last modified by Gregory Cristian on Apr 25 2013
+ */
+#ifndef __RADIO_H__
+#define __RADIO_H__
+
+
+/*!
+ * SX1272 and SX1276 General parameters definition
+ */
+#define LORA                                        1         // [0: OFF, 1: ON]
+
+/*!
+ * RF process function return codes
+ */
+typedef enum
+{
+    RF_IDLE,
+    RF_BUSY,
+    RF_RX_DONE,
+    RF_RX_TIMEOUT,
+    RF_TX_DONE,
+    RF_TX_TIMEOUT,
+    RF_LEN_ERROR,
+    RF_CHANNEL_EMPTY,
+    RF_CHANNEL_ACTIVITY_DETECTED,
+}tRFProcessReturnCodes;
+
+/*!
+ * Radio driver structure defining the different function pointers
+ */
+typedef struct sRadioDriver
+{
+    void ( *Init )( void );
+    void ( *Reset )( void );
+    void ( *StartRx )( void );
+    void ( *GetRxPacket )( void *buffer, uint16_t *size );
+    void ( *SetTxPacket )( const void *buffer, uint16_t size );
+    uint32_t ( *Process )( void );
+}tRadioDriver;
+
+/*!
+ * \brief Initializes the RadioDriver structure with specific radio
+ *        functions.
+ *
+ * \retval radioDriver Pointer to the radio driver variable
+ */
+tRadioDriver* RadioDriverInit( void );
+
+#endif // __RADIO_H__

+ 606 - 0
app/Sx1278/radio/sx1276-Fsk.c

@@ -0,0 +1,606 @@
+/*
+ * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND 
+ * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER.
+ * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
+ * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
+ * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ * 
+ * Copyright (C) SEMTECH S.A.
+ */
+/*! 
+ * \file       sx1276.c
+ * \brief      SX1276 RF chip driver
+ *
+ * \version    2.0.0 
+ * \date       May 6 2013
+ * \author     Gregory Cristian
+ *
+ * Last modified by Miguel Luis on Jun 19 2013
+ */
+#include <string.h>
+#include <math.h>
+
+#include "platform.h"
+
+#if defined( USE_SX1276_RADIO )
+
+#include "radio.h"
+
+#include "sx1276-Hal.h"
+#include "sx1276.h"
+
+#include "sx1276-FskMisc.h"
+#include "sx1276-Fsk.h"
+
+// Default settings
+tFskSettings FskSettings = 
+{
+    870000000,      // RFFrequency
+    9600,           // Bitrate
+    50000,          // Fdev
+    20,             // Power
+    100000,         // RxBw
+    150000,         // RxBwAfc
+    true,           // CrcOn
+    true,           // AfcOn    
+    255             // PayloadLength (set payload size to the maximum for variable mode, else set the exact payload length)
+};
+
+/*!
+ * SX1276 FSK registers variable
+ */
+tSX1276* SX1276;
+
+/*!
+ * Local RF buffer for communication support
+ */
+static uint8_t RFBuffer[RF_BUFFER_SIZE];
+
+/*!
+ * Chunk size of data write in buffer 
+ */
+static uint8_t DataChunkSize = 32;
+
+
+/*!
+ * RF state machine variable
+ */
+static uint8_t RFState = RF_STATE_IDLE;
+
+/*!
+ * Rx management support variables
+ */
+
+/*!
+ * PacketTimeout holds the RF packet timeout
+ * SyncSize = [0..8]
+ * VariableSize = [0;1]
+ * AddressSize = [0;1]
+ * PayloadSize = [0..RF_BUFFER_SIZE]
+ * CrcSize = [0;2]
+ * PacketTimeout = ( ( 8 * ( VariableSize + AddressSize + PayloadSize + CrcSize ) / BR ) * 1000.0 ) + 1
+ * Computed timeout is in miliseconds
+ */
+static uint32_t PacketTimeout;
+
+/*!
+ * Preamble2SyncTimeout
+ * Preamble2SyncTimeout = ( ( 8 * ( PremableSize + SyncSize ) / RFBitrate ) * 1000.0 ) + 1
+ * Computed timeout is in miliseconds
+ */
+static uint32_t Preamble2SyncTimeout;
+
+static bool PreambleDetected = false;
+static bool SyncWordDetected = false;
+static bool PacketDetected = false;
+static uint16_t RxPacketSize = 0;
+static uint8_t RxBytesRead = 0;
+static uint8_t TxBytesSent = 0;
+static double RxPacketRssiValue;
+static uint32_t RxPacketAfcValue;
+static uint8_t RxGain = 1;
+static uint32_t RxTimeoutTimer = 0;
+static uint32_t Preamble2SyncTimer = 0;
+
+/*!
+ * Tx management support variables
+ */
+static uint16_t TxPacketSize = 0;
+static uint32_t TxTimeoutTimer = 0;
+
+void SX1276FskInit( void )
+{
+    RFState = RF_STATE_IDLE;
+
+    SX1276FskSetDefaults( );
+    
+    SX1276ReadBuffer( REG_OPMODE, SX1276Regs + 1, 0x70 - 1 );
+
+    // Set the device in FSK mode and Sleep Mode
+    SX1276->RegOpMode = RF_OPMODE_MODULATIONTYPE_FSK | RF_OPMODE_SLEEP;
+    SX1276Write( REG_OPMODE, SX1276->RegOpMode );
+
+    SX1276->RegPaRamp = RF_PARAMP_MODULATIONSHAPING_01;
+    SX1276Write( REG_PARAMP, SX1276->RegPaRamp );
+
+    SX1276->RegLna = RF_LNA_GAIN_G1;
+    SX1276Write( REG_LNA, SX1276->RegLna );
+
+    if( FskSettings.AfcOn == true )
+    {
+        SX1276->RegRxConfig = RF_RXCONFIG_RESTARTRXONCOLLISION_OFF | RF_RXCONFIG_AFCAUTO_ON |
+                              RF_RXCONFIG_AGCAUTO_ON | RF_RXCONFIG_RXTRIGER_PREAMBLEDETECT;
+    }
+    else
+    {
+        SX1276->RegRxConfig = RF_RXCONFIG_RESTARTRXONCOLLISION_OFF | RF_RXCONFIG_AFCAUTO_OFF |
+                              RF_RXCONFIG_AGCAUTO_ON | RF_RXCONFIG_RXTRIGER_PREAMBLEDETECT;
+    }
+
+    SX1276->RegPreambleLsb = 8;
+    
+    SX1276->RegPreambleDetect = RF_PREAMBLEDETECT_DETECTOR_ON | RF_PREAMBLEDETECT_DETECTORSIZE_2 |
+                                RF_PREAMBLEDETECT_DETECTORTOL_10;
+
+    SX1276->RegRssiThresh = 0xFF;
+
+    SX1276->RegSyncConfig = RF_SYNCCONFIG_AUTORESTARTRXMODE_WAITPLL_ON | RF_SYNCCONFIG_PREAMBLEPOLARITY_AA |
+                            RF_SYNCCONFIG_SYNC_ON |
+                            RF_SYNCCONFIG_SYNCSIZE_4;
+
+    SX1276->RegSyncValue1 = 0x69;
+    SX1276->RegSyncValue2 = 0x81;
+    SX1276->RegSyncValue3 = 0x7E;
+    SX1276->RegSyncValue4 = 0x96;
+
+    SX1276->RegPacketConfig1 = RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE | RF_PACKETCONFIG1_DCFREE_OFF |
+                               ( FskSettings.CrcOn << 4 ) | RF_PACKETCONFIG1_CRCAUTOCLEAR_ON |
+                               RF_PACKETCONFIG1_ADDRSFILTERING_OFF | RF_PACKETCONFIG1_CRCWHITENINGTYPE_CCITT;
+    SX1276FskGetPacketCrcOn( ); // Update CrcOn on FskSettings
+
+    SX1276->RegPayloadLength = FskSettings.PayloadLength;
+
+    // we can now update the registers with our configuration
+    SX1276WriteBuffer( REG_OPMODE, SX1276Regs + 1, 0x70 - 1 );
+
+    // then we need to set the RF settings 
+    SX1276FskSetRFFrequency( FskSettings.RFFrequency );
+    SX1276FskSetBitrate( FskSettings.Bitrate );
+    SX1276FskSetFdev( FskSettings.Fdev );
+
+    SX1276FskSetDccBw( &SX1276->RegRxBw, 0, FskSettings.RxBw );
+    SX1276FskSetDccBw( &SX1276->RegAfcBw, 0, FskSettings.RxBwAfc );
+    SX1276FskSetRssiOffset( 0 );
+
+#if( ( MODULE_SX1276RF1IAS == 1 ) || ( MODULE_SX1276RF1KAS == 1 ) )
+    if( FskSettings.RFFrequency > 860000000 )
+    {
+        SX1276FskSetPAOutput( RF_PACONFIG_PASELECT_RFO );
+        SX1276FskSetPa20dBm( false );
+        FskSettings.Power = 14;
+        SX1276FskSetRFPower( FskSettings.Power );
+    }
+    else
+    {
+        SX1276FskSetPAOutput( RF_PACONFIG_PASELECT_PABOOST );
+        SX1276FskSetPa20dBm( true );
+        FskSettings.Power = 20;
+        SX1276FskSetRFPower( FskSettings.Power );
+    } 
+#elif( MODULE_SX1276RF1JAS == 1 )
+    if( FskSettings.RFFrequency > 860000000 )
+    {
+        SX1276FskSetPAOutput( RF_PACONFIG_PASELECT_PABOOST );
+        SX1276FskSetPa20dBm( true );
+        FskSettings.Power = 20;
+        SX1276FskSetRFPower( FskSettings.Power );
+    }
+    else
+    {
+        SX1276FskSetPAOutput( RF_PACONFIG_PASELECT_RFO );
+        SX1276FskSetPa20dBm( false );
+        FskSettings.Power = 14;
+        SX1276FskSetRFPower( FskSettings.Power );
+    } 
+#endif
+
+    SX1276FskSetOpMode( RF_OPMODE_STANDBY );
+
+    // Calibrate the HF
+    SX1276FskRxCalibrate( );
+}
+
+void SX1276FskSetDefaults( void )
+{
+    // REMARK: See SX1276 datasheet for modified default values.
+
+    SX1276Read( REG_VERSION, &SX1276->RegVersion );
+}
+
+void SX1276FskSetOpMode( uint8_t opMode )
+{
+    static uint8_t opModePrev = RF_OPMODE_STANDBY;
+    static bool antennaSwitchTxOnPrev = true;
+    bool antennaSwitchTxOn = false;
+
+    opModePrev = SX1276->RegOpMode & ~RF_OPMODE_MASK;
+
+    if( opMode != opModePrev )
+    {
+        if( opMode == RF_OPMODE_TRANSMITTER )
+        {
+            antennaSwitchTxOn = true;
+        }
+        else
+        {
+            antennaSwitchTxOn = false;
+        }
+        if( antennaSwitchTxOn != antennaSwitchTxOnPrev )
+        {
+            antennaSwitchTxOnPrev = antennaSwitchTxOn;
+            RXTX( antennaSwitchTxOn ); // Antenna switch control
+        }
+        SX1276->RegOpMode = ( SX1276->RegOpMode & RF_OPMODE_MASK ) | opMode;
+
+        SX1276Write( REG_OPMODE, SX1276->RegOpMode );        
+    }
+}
+
+uint8_t SX1276FskGetOpMode( void )
+{
+    SX1276Read( REG_OPMODE, &SX1276->RegOpMode );
+    
+    return SX1276->RegOpMode & ~RF_OPMODE_MASK;
+}
+
+int32_t SX1276FskReadFei( void )
+{
+    SX1276ReadBuffer( REG_FEIMSB, &SX1276->RegFeiMsb, 2 );                          // Reads the FEI value
+
+    return ( int32_t )( double )( ( ( uint16_t )SX1276->RegFeiMsb << 8 ) | ( uint16_t )SX1276->RegFeiLsb ) * ( double )FREQ_STEP;
+}
+
+int32_t SX1276FskReadAfc( void )
+{
+    SX1276ReadBuffer( REG_AFCMSB, &SX1276->RegAfcMsb, 2 );                            // Reads the AFC value
+    return ( int32_t )( double )( ( ( uint16_t )SX1276->RegAfcMsb << 8 ) | ( uint16_t )SX1276->RegAfcLsb ) * ( double )FREQ_STEP;
+}
+
+uint8_t SX1276FskReadRxGain( void )
+{
+    SX1276Read( REG_LNA, &SX1276->RegLna );
+    return( SX1276->RegLna >> 5 ) & 0x07;
+}
+
+double SX1276FskReadRssi( void )
+{
+    SX1276Read( REG_RSSIVALUE, &SX1276->RegRssiValue );                               // Reads the RSSI value
+
+    return -( double )( ( double )SX1276->RegRssiValue / 2.0 );
+}
+
+uint8_t SX1276FskGetPacketRxGain( void )
+{
+    return RxGain;
+}
+
+double SX1276FskGetPacketRssi( void )
+{
+    return RxPacketRssiValue;
+}
+
+uint32_t SX1276FskGetPacketAfc( void )
+{
+    return RxPacketAfcValue;
+}
+
+void SX1276FskStartRx( void )
+{
+    SX1276FskSetRFState( RF_STATE_RX_INIT );
+}
+
+void SX1276FskGetRxPacket( void *buffer, uint16_t *size )
+{
+    *size = RxPacketSize;
+    RxPacketSize = 0;
+    memcpy( ( void * )buffer, ( void * )RFBuffer, ( size_t )*size );
+}
+
+void SX1276FskSetTxPacket( const void *buffer, uint16_t size )
+{
+    TxPacketSize = size;
+    memcpy( ( void * )RFBuffer, buffer, ( size_t )TxPacketSize ); 
+
+    RFState = RF_STATE_TX_INIT;
+}
+
+// Remark: SX1276 must be fully initialized before calling this function
+uint16_t SX1276FskGetPacketPayloadSize( void )
+{
+    uint16_t syncSize;
+    uint16_t variableSize;
+    uint16_t addressSize;
+    uint16_t payloadSize;
+    uint16_t crcSize;
+
+    syncSize = ( SX1276->RegSyncConfig & 0x07 ) + 1;
+    variableSize = ( ( SX1276->RegPacketConfig1 & 0x80 ) == 0x80 ) ? 1 : 0;
+    addressSize = ( ( SX1276->RegPacketConfig1 & 0x06 ) != 0x00 ) ? 1 : 0;
+    payloadSize = SX1276->RegPayloadLength;
+    crcSize = ( ( SX1276->RegPacketConfig1 & 0x10 ) == 0x10 ) ? 2 : 0;
+    
+    return syncSize + variableSize + addressSize + payloadSize + crcSize;
+}
+
+// Remark: SX1276 must be fully initialized before calling this function
+uint16_t SX1276FskGetPacketHeaderSize( void )
+{
+    uint16_t preambleSize;
+    uint16_t syncSize;
+
+    preambleSize = ( ( uint16_t )SX1276->RegPreambleMsb << 8 ) | ( uint16_t )SX1276->RegPreambleLsb;
+    syncSize = ( SX1276->RegSyncConfig & 0x07 ) + 1;
+    
+    return preambleSize + syncSize;
+}
+
+uint8_t SX1276FskGetRFState( void )
+{
+    return RFState;
+}
+
+void SX1276FskSetRFState( uint8_t state )
+{
+    RFState = state;
+}
+
+uint32_t SX1276FskProcess( void )
+{
+    uint32_t result = RF_BUSY;
+
+    switch( RFState )
+    {
+    case RF_STATE_IDLE:
+        break;
+    // Rx management
+    case RF_STATE_RX_INIT:
+        // DIO mapping setup
+        if( ( SX1276->RegPacketConfig1 & RF_PACKETCONFIG1_CRC_ON ) == RF_PACKETCONFIG1_CRC_ON )
+        {
+            //                           CrcOk,                   FifoLevel,               SyncAddr,               FifoEmpty
+            SX1276->RegDioMapping1 = RF_DIOMAPPING1_DIO0_01 | RF_DIOMAPPING1_DIO1_00 | RF_DIOMAPPING1_DIO2_11 | RF_DIOMAPPING1_DIO3_00;
+        }
+        else
+        {
+            //                           PayloadReady,            FifoLevel,               SyncAddr,               FifoEmpty
+            SX1276->RegDioMapping1 = RF_DIOMAPPING1_DIO0_00 | RF_DIOMAPPING1_DIO1_00 | RF_DIOMAPPING1_DIO2_11 | RF_DIOMAPPING1_DIO3_00;
+        }
+        //                          Preamble,                   Data
+        SX1276->RegDioMapping2 = RF_DIOMAPPING2_DIO4_11 | RF_DIOMAPPING2_DIO5_10 | RF_DIOMAPPING2_MAP_PREAMBLEDETECT;
+        SX1276WriteBuffer( REG_DIOMAPPING1, &SX1276->RegDioMapping1, 2 );
+
+        SX1276FskSetOpMode( RF_OPMODE_RECEIVER );
+    
+        memset( RFBuffer, 0, ( size_t )RF_BUFFER_SIZE );
+
+        PacketTimeout = ( uint16_t )( round( ( 8.0 * ( ( double )SX1276FskGetPacketPayloadSize( ) ) / ( double )FskSettings.Bitrate ) * 1000.0 ) + 1.0 );
+        PacketTimeout = PacketTimeout + ( PacketTimeout >> 1 ); // Set the Packet timeout as 1.5 times the full payload transmission time
+
+        Preamble2SyncTimeout = PacketTimeout;
+
+        Preamble2SyncTimer = RxTimeoutTimer = GET_TICK_COUNT( );
+
+        SX1276->RegFifoThresh = RF_FIFOTHRESH_TXSTARTCONDITION_FIFONOTEMPTY | 0x20; // 32 bytes of data
+        SX1276Write( REG_FIFOTHRESH, SX1276->RegFifoThresh );
+
+        PreambleDetected = false;
+        SyncWordDetected = false;
+        PacketDetected = false;
+        RxBytesRead = 0;
+        RxPacketSize = 0;
+        RFState = RF_STATE_RX_SYNC;
+        break;
+    case RF_STATE_RX_SYNC:
+        if( ( DIO4 == 1 ) && ( PreambleDetected == false ) )// Preamble
+        {
+            PreambleDetected = true;
+            Preamble2SyncTimer = GET_TICK_COUNT( );
+        }
+        if( ( DIO2 == 1 ) && ( PreambleDetected == true ) && ( SyncWordDetected == false ) ) // SyncAddr
+        {
+            SyncWordDetected = true;
+        
+            RxPacketRssiValue = SX1276FskReadRssi( );
+
+            RxPacketAfcValue = SX1276FskReadAfc( );
+            RxGain = SX1276FskReadRxGain( );
+        
+            Preamble2SyncTimer = RxTimeoutTimer = GET_TICK_COUNT( );
+
+            RFState = RF_STATE_RX_RUNNING;
+        }
+
+        // Preamble 2 SyncAddr timeout
+        if( ( SyncWordDetected == false ) && ( PreambleDetected == true ) && ( ( GET_TICK_COUNT( ) - Preamble2SyncTimer ) > Preamble2SyncTimeout ) )
+        {
+            RFState = RF_STATE_RX_INIT;
+            SX1276Write( REG_RXCONFIG, SX1276->RegRxConfig | RF_RXCONFIG_RESTARTRXWITHPLLLOCK );
+        }
+        if( ( SyncWordDetected == false ) &&
+            ( PreambleDetected == false ) &&
+            ( PacketDetected == false ) &&
+            ( ( GET_TICK_COUNT( ) - RxTimeoutTimer ) > PacketTimeout ) )
+        {
+            RFState = RF_STATE_RX_TIMEOUT;
+        }
+        break;
+    case RF_STATE_RX_RUNNING:
+        if( RxPacketSize > RF_BUFFER_SIZE_MAX )
+        {
+            RFState = RF_STATE_RX_LEN_ERROR;
+            break;
+        }
+#if 1
+        if( DIO1 == 1 ) // FifoLevel
+        {
+            if( ( RxPacketSize == 0 ) && ( RxBytesRead == 0 ) ) // Read received packet size
+            {
+                if( ( SX1276->RegPacketConfig1 & RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE ) == RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE )
+                {
+                    SX1276ReadFifo( ( uint8_t* )&RxPacketSize, 1 );
+                }
+                else
+                {
+                    RxPacketSize = SX1276->RegPayloadLength;
+                }
+            }
+
+            if( ( RxPacketSize - RxBytesRead ) > ( SX1276->RegFifoThresh & 0x3F ) )
+            {
+                SX1276ReadFifo( ( RFBuffer + RxBytesRead ), ( SX1276->RegFifoThresh & 0x3F ) );
+                RxBytesRead += ( SX1276->RegFifoThresh & 0x3F );
+            }
+            else
+            {
+                SX1276ReadFifo( ( RFBuffer + RxBytesRead ), RxPacketSize - RxBytesRead );
+                RxBytesRead += ( RxPacketSize - RxBytesRead );
+            }
+        }
+#endif
+        if( DIO0 == 1 ) // PayloadReady/CrcOk
+        {
+            RxTimeoutTimer = GET_TICK_COUNT( );
+            if( ( RxPacketSize == 0 ) && ( RxBytesRead == 0 ) ) // Read received packet size
+            {
+                if( ( SX1276->RegPacketConfig1 & RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE ) == RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE )
+                {
+                    SX1276ReadFifo( ( uint8_t* )&RxPacketSize, 1 );
+                }
+                else
+                {
+                    RxPacketSize = SX1276->RegPayloadLength;
+                }
+                SX1276ReadFifo( RFBuffer + RxBytesRead, RxPacketSize - RxBytesRead );
+                RxBytesRead += ( RxPacketSize - RxBytesRead );
+                PacketDetected = true;
+                RFState = RF_STATE_RX_DONE;
+            }
+            else
+            {
+                SX1276ReadFifo( RFBuffer + RxBytesRead, RxPacketSize - RxBytesRead );
+                RxBytesRead += ( RxPacketSize - RxBytesRead );
+                PacketDetected = true;
+                RFState = RF_STATE_RX_DONE;
+            }
+        }
+        
+        // Packet timeout
+        if( ( PacketDetected == false ) && ( ( GET_TICK_COUNT( ) - RxTimeoutTimer ) > PacketTimeout ) )
+        {
+            RFState = RF_STATE_RX_TIMEOUT;
+        }
+        break;
+    case RF_STATE_RX_DONE:
+        RxBytesRead = 0;
+        RFState = RF_STATE_RX_INIT;
+        result = RF_RX_DONE;
+        break;
+    case RF_STATE_RX_TIMEOUT:
+        RxBytesRead = 0;
+        RxPacketSize = 0;
+        SX1276Write( REG_RXCONFIG, SX1276->RegRxConfig | RF_RXCONFIG_RESTARTRXWITHPLLLOCK );
+        RFState = RF_STATE_RX_INIT;
+        result = RF_RX_TIMEOUT;
+        break;
+    case RF_STATE_RX_LEN_ERROR:
+        RxBytesRead = 0;
+        RxPacketSize = 0;
+        SX1276Write( REG_RXCONFIG, SX1276->RegRxConfig | RF_RXCONFIG_RESTARTRXWITHPLLLOCK );
+        RFState = RF_STATE_RX_INIT;
+        result = RF_LEN_ERROR;
+        break;
+    // Tx management
+    case RF_STATE_TX_INIT:
+        // Packet DIO mapping setup
+        //                           PacketSent,               FifoLevel,              FifoFull,               TxReady
+        SX1276->RegDioMapping1 = RF_DIOMAPPING1_DIO0_00 | RF_DIOMAPPING1_DIO1_00 | RF_DIOMAPPING1_DIO2_00 | RF_DIOMAPPING1_DIO3_01;
+        //                           LowBat,                   Data
+        SX1276->RegDioMapping2 = RF_DIOMAPPING2_DIO4_00 | RF_DIOMAPPING2_DIO5_10;
+        SX1276WriteBuffer( REG_DIOMAPPING1, &SX1276->RegDioMapping1, 2 );
+
+        SX1276->RegFifoThresh = RF_FIFOTHRESH_TXSTARTCONDITION_FIFONOTEMPTY | 0x18; // 24 bytes of data
+        SX1276Write( REG_FIFOTHRESH, SX1276->RegFifoThresh );
+
+        SX1276FskSetOpMode( RF_OPMODE_TRANSMITTER );
+        RFState = RF_STATE_TX_READY_WAIT;
+        TxBytesSent = 0;
+        break;
+    case RF_STATE_TX_READY_WAIT:
+        if( DIO3 == 1 )    // TxReady
+        {
+            if( ( SX1276->RegPacketConfig1 & RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE ) == RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE )
+            {
+                SX1276WriteFifo( ( uint8_t* )&TxPacketSize, 1 );
+            }
+            
+            if( ( TxPacketSize > 0 ) && ( TxPacketSize <= 64 ) )
+            {
+                DataChunkSize = TxPacketSize;
+            }
+            else
+            {
+                DataChunkSize = 32;
+            }
+            
+            SX1276WriteFifo( RFBuffer, DataChunkSize );
+            TxBytesSent += DataChunkSize;
+            TxTimeoutTimer = GET_TICK_COUNT( );
+            RFState = RF_STATE_TX_RUNNING;
+        }
+        break;
+
+    case RF_STATE_TX_RUNNING:
+        if( DIO1 == 0 )    // FifoLevel below thresold
+        {  
+            if( ( TxPacketSize - TxBytesSent ) > DataChunkSize )
+            {
+                SX1276WriteFifo( ( RFBuffer + TxBytesSent ), DataChunkSize );
+                TxBytesSent += DataChunkSize;
+            }
+            else 
+            {
+                // we write the last chunk of data
+                SX1276WriteFifo( RFBuffer + TxBytesSent, TxPacketSize - TxBytesSent );
+                TxBytesSent += TxPacketSize - TxBytesSent;
+            }
+        }
+
+        if( DIO0 == 1 ) // PacketSent
+        {
+            TxTimeoutTimer = GET_TICK_COUNT( );
+            RFState = RF_STATE_TX_DONE;
+            SX1276FskSetOpMode( RF_OPMODE_STANDBY );
+        }
+         
+        // Packet timeout
+        if( ( GET_TICK_COUNT( ) - TxTimeoutTimer ) > TICK_RATE_MS( 1000 ) )
+        {
+            RFState = RF_STATE_TX_TIMEOUT;
+        }
+        break;
+    case RF_STATE_TX_DONE:
+        RFState = RF_STATE_IDLE;
+        result = RF_TX_DONE;
+        break;
+    case RF_STATE_TX_TIMEOUT:
+        RFState = RF_STATE_IDLE;
+        result = RF_TX_TIMEOUT;
+        break;
+    default:
+        break;
+    }
+    return result;
+}
+
+#endif // USE_SX1276_RADIO

+ 376 - 44
app/SX1278/sx1276Regs-Fsk.h

@@ -1,24 +1,77 @@
 /*
- / _____)             _              | |
-( (____  _____ ____ _| |_ _____  ____| |__
- \____ \| ___ |    (_   _) ___ |/ ___)  _ \
- _____) ) ____| | | || |_| ____( (___| | | |
-(______/|_____)_|_|_| \__)_____)\____)_| |_|
-    (C)2013 Semtech
-
-Description: SX1276 FSK modem registers and bits definitions
-
-License: Revised BSD License, see LICENSE.TXT file include in the project
-
-Maintainer: Miguel Luis and Gregory Cristian
-*/
-#ifndef __SX1276_REGS_FSK_H__
-#define __SX1276_REGS_FSK_H__
+ * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND 
+ * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER.
+ * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
+ * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
+ * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ * 
+ * Copyright (C) SEMTECH S.A.
+ */
+/*! 
+ * \file       sx1276-Fsk.h
+ * \brief      SX1276 RF chip driver mode FSK
+ *
+ * \version    2.0.B2 
+ * \date       May 6 2013
+ * \author     Gregory Cristian
+ *
+ * Last modified by Miguel Luis on Jun 19 2013
+ */
+#ifndef __SX1276_FSK_H__
+#define __SX1276_FSK_H__
+
+/*!
+ * SX1276 FSK General parameters definition
+ */
+
+typedef struct sFskSettings
+{
+    uint32_t RFFrequency;
+    uint32_t Bitrate;
+    uint32_t Fdev;
+    int8_t Power;
+    uint32_t RxBw;
+    uint32_t RxBwAfc;
+    bool CrcOn;
+    bool AfcOn;
+    uint8_t PayloadLength;
+}tFskSettings;
+
+/*!
+ * RF packet definition
+ */
+#define RF_BUFFER_SIZE_MAX                          256
+#define RF_BUFFER_SIZE                              256
+
+/*!
+ * RF state machine
+ */
+// FSK
+typedef enum
+{
+    RF_STATE_IDLE,
+    RF_STATE_RX_INIT,
+    RF_STATE_RX_SYNC,
+    RF_STATE_RX_RUNNING,
+    RF_STATE_RX_DONE,
+    RF_STATE_RX_TIMEOUT,
+    RF_STATE_RX_LEN_ERROR,
+    RF_STATE_TX_INIT,
+    RF_STATE_TX_READY_WAIT,
+    RF_STATE_TX_RUNNING,
+    RF_STATE_TX_DONE,
+    RF_STATE_TX_TIMEOUT,
+}tRFStates;
+
+/*!
+ * SX1276 definitions
+ */
+#define XTAL_FREQ                                   32000000
+#define FREQ_STEP                                   61.03515625
 
 /*!
- * ============================================================================
  * SX1276 Internal registers Address
- * ============================================================================
  */
 #define REG_FIFO                                    0x00
 // Common settings
@@ -107,12 +160,10 @@ Maintainer: Miguel Luis and Gregory Cristian
 #define REG_AGCTHRESH1                              0x62
 #define REG_AGCTHRESH2                              0x63
 #define REG_AGCTHRESH3                              0x64
-#define REG_PLL                                     0x70
+
 
 /*!
- * ============================================================================
- * SX1276 FSK bits control definition
- * ============================================================================
+ * SX1276 FSK bit control definition
  */
 
 /*!
@@ -123,18 +174,16 @@ Maintainer: Miguel Luis and Gregory Cristian
  * RegOpMode
  */
 #define RF_OPMODE_LONGRANGEMODE_MASK                0x7F
-#define RF_OPMODE_LONGRANGEMODE_OFF                 0x00
+#define RF_OPMODE_LONGRANGEMODE_OFF                 0x00  // Default
 #define RF_OPMODE_LONGRANGEMODE_ON                  0x80
 
 #define RF_OPMODE_MODULATIONTYPE_MASK               0x9F
 #define RF_OPMODE_MODULATIONTYPE_FSK                0x00  // Default
 #define RF_OPMODE_MODULATIONTYPE_OOK                0x20
 
-#define RF_OPMODE_MODULATIONSHAPING_MASK            0xE7
-#define RF_OPMODE_MODULATIONSHAPING_00              0x00  // Default
-#define RF_OPMODE_MODULATIONSHAPING_01              0x08
-#define RF_OPMODE_MODULATIONSHAPING_10              0x10
-#define RF_OPMODE_MODULATIONSHAPING_11              0x18
+#define RF_OPMODE_FREQMODE_ACCESS_MASK              0xF7
+#define RF_OPMODE_FREQMODE_ACCESS_LF                0x08  // Default
+#define RF_OPMODE_FREQMODE_ACCESS_HF                0x00 
 
 #define RF_OPMODE_MASK                              0xF8
 #define RF_OPMODE_SLEEP                             0x00
@@ -189,6 +238,15 @@ Maintainer: Miguel Luis and Gregory Cristian
 /*!
  * RegFdev (Hz)
  */
+ 
+#define RF_FDEVMSB_BANDREG_MASK                     0x3F 
+#define RF_FDEVMSB_BANDREG_AUTO                     0x00 // Default
+#define RF_FDEVMSB_BANDREG_DIV_BY_1                 0x40
+#define RF_FDEVMSB_BANDREG_DIV_BY_2                 0x80
+#define RF_FDEVMSB_BANDREG_DIV_BY_6                 0xC0
+ 
+#define RF_FDEVMSB_FDEV_MASK                        0xC0
+
 #define RF_FDEVMSB_2000_HZ                          0x00
 #define RF_FDEVLSB_2000_HZ                          0x21
 #define RF_FDEVMSB_5000_HZ                          0x00  // Default
@@ -376,9 +434,15 @@ Maintainer: Miguel Luis and Gregory Cristian
 /*!
  * RegPaRamp
  */
-#define RF_PARAMP_LOWPNTXPLL_MASK                   0xE0
-#define RF_PARAMP_LOWPNTXPLL_OFF                    0x10  // Default
-#define RF_PARAMP_LOWPNTXPLL_ON                     0x00
+#define RF_PARAMP_MODULATIONSHAPING_MASK            0x9F
+#define RF_PARAMP_MODULATIONSHAPING_00              0x00 // Default
+#define RF_PARAMP_MODULATIONSHAPING_01              0x20
+#define RF_PARAMP_MODULATIONSHAPING_10              0x40
+#define RF_PARAMP_MODULATIONSHAPING_11              0x60
+ 
+#define RF_PARAMP_TXBANDFORCE_MASK                  0xEF 
+#define RF_PARAMP_TXBANDFORCE_BAND_SEL              0x10 
+#define RF_PARAMP_TXBANDFORCE_AUTO                  0x00 // Default
 
 #define RF_PARAMP_MASK                              0xF0
 #define RF_PARAMP_3400_US                           0x00
@@ -446,9 +510,19 @@ Maintainer: Miguel Luis and Gregory Cristian
 #define RF_LNA_GAIN_G5                              0xA0
 #define RF_LNA_GAIN_G6                              0xC0
 
-#define RF_LNA_BOOST_MASK                           0xFC
-#define RF_LNA_BOOST_OFF                            0x00 // Default
-#define RF_LNA_BOOST_ON                             0x03
+#define RF_LNA_BOOST_LF_MASK                        0xE7 
+#define RF_LNA_BOOST_LF_DEFAULT                     0x00 // Default
+#define RF_LNA_BOOST_LF_GAIN                        0x08 
+#define RF_LNA_BOOST_LF_IP3                         0x10 
+#define RF_LNA_BOOST_LF_BOOST                       0x18 
+
+#define RF_LNA_RXBANDFORCE_MASK                     0xFB 
+#define RF_LNA_RXBANDFORCE_BAND_SEL                 0x04
+#define RF_LNA_RXBANDFORCE_AUTO                     0x00 // Default
+
+#define RF_LNA_BOOST_HF_MASK                        0xFC 
+#define RF_LNA_BOOST_HF_OFF                         0x00 // Default
+#define RF_LNA_BOOST_HF_ON                          0x03 
 
 /*!
  * RegRxConfig
@@ -1070,6 +1144,22 @@ Maintainer: Miguel Luis and Gregory Cristian
  * RegVersion (Read Only)
  */
 
+/*!
+ * RegAgcRef
+ */
+
+/*!
+ * RegAgcThresh1
+ */
+
+/*!
+ * RegAgcThresh2
+ */
+
+/*!
+ * RegAgcThresh3
+ */
+
 /*!
  * RegPllHop
  */
@@ -1091,6 +1181,24 @@ Maintainer: Miguel Luis and Gregory Cristian
 #define RF_PADAC_20DBM_ON                           0x07
 #define RF_PADAC_20DBM_OFF                          0x04  // Default
 
+/*!
+ * RegPll
+ */
+#define RF_PLL_BANDWIDTH_MASK                       0x3F
+#define RF_PLL_BANDWIDTH_75                         0x00
+#define RF_PLL_BANDWIDTH_150                        0x40
+#define RF_PLL_BANDWIDTH_225                        0x80
+#define RF_PLL_BANDWIDTH_300                        0xC0  // Default
+
+/*!
+ * RegPllLowPn
+ */
+#define RF_PLLLOWPN_BANDWIDTH_MASK                  0x3F
+#define RF_PLLLOWPN_BANDWIDTH_75                    0x00
+#define RF_PLLLOWPN_BANDWIDTH_150                   0x40
+#define RF_PLLLOWPN_BANDWIDTH_225                   0x80
+#define RF_PLLLOWPN_BANDWIDTH_300                   0xC0  // Default
+
 /*!
  * RegFormerTemp
  */
@@ -1100,29 +1208,253 @@ Maintainer: Miguel Luis and Gregory Cristian
  */
 #define RF_BITRATEFRAC_MASK                         0xF0
 
+typedef struct sSX1276
+{
+    uint8_t RegFifo;                                // 0x00
+    // Common settings
+    uint8_t RegOpMode;                              // 0x01
+    uint8_t RegBitrateMsb;                          // 0x02
+    uint8_t RegBitrateLsb;                          // 0x03
+    uint8_t RegFdevMsb;                             // 0x04
+    uint8_t RegFdevLsb;                             // 0x05
+    uint8_t RegFrfMsb;                              // 0x06
+    uint8_t RegFrfMid;                              // 0x07
+    uint8_t RegFrfLsb;                              // 0x08
+    // Tx settings
+    uint8_t RegPaConfig;                            // 0x09
+    uint8_t RegPaRamp;                              // 0x0A
+    uint8_t RegOcp;                                 // 0x0B
+    // Rx settings
+    uint8_t RegLna;                                 // 0x0C
+    uint8_t RegRxConfig;                            // 0x0D
+    uint8_t RegRssiConfig;                          // 0x0E
+    uint8_t RegRssiCollision;                       // 0x0F
+    uint8_t RegRssiThresh;                          // 0x10
+    uint8_t RegRssiValue;                           // 0x11
+    uint8_t RegRxBw;                                // 0x12
+    uint8_t RegAfcBw;                               // 0x13
+    uint8_t RegOokPeak;                             // 0x14
+    uint8_t RegOokFix;                              // 0x15
+    uint8_t RegOokAvg;                              // 0x16
+    uint8_t RegRes17;                               // 0x17
+    uint8_t RegRes18;                               // 0x18
+    uint8_t RegRes19;                               // 0x19
+    uint8_t RegAfcFei;                              // 0x1A
+    uint8_t RegAfcMsb;                              // 0x1B
+    uint8_t RegAfcLsb;                              // 0x1C
+    uint8_t RegFeiMsb;                              // 0x1D
+    uint8_t RegFeiLsb;                              // 0x1E
+    uint8_t RegPreambleDetect;                      // 0x1F
+    uint8_t RegRxTimeout1;                          // 0x20
+    uint8_t RegRxTimeout2;                          // 0x21
+    uint8_t RegRxTimeout3;                          // 0x22
+    uint8_t RegRxDelay;                             // 0x23
+    // Oscillator settings
+    uint8_t RegOsc;                                 // 0x24
+    // Packet handler settings
+    uint8_t RegPreambleMsb;                         // 0x25
+    uint8_t RegPreambleLsb;                         // 0x26
+    uint8_t RegSyncConfig;                          // 0x27
+    uint8_t RegSyncValue1;                          // 0x28
+    uint8_t RegSyncValue2;                          // 0x29
+    uint8_t RegSyncValue3;                          // 0x2A
+    uint8_t RegSyncValue4;                          // 0x2B
+    uint8_t RegSyncValue5;                          // 0x2C
+    uint8_t RegSyncValue6;                          // 0x2D
+    uint8_t RegSyncValue7;                          // 0x2E
+    uint8_t RegSyncValue8;                          // 0x2F
+    uint8_t RegPacketConfig1;                       // 0x30
+    uint8_t RegPacketConfig2;                       // 0x31
+    uint8_t RegPayloadLength;                       // 0x32
+    uint8_t RegNodeAdrs;                            // 0x33
+    uint8_t RegBroadcastAdrs;                       // 0x34
+    uint8_t RegFifoThresh;                          // 0x35
+    // Sequencer settings
+    uint8_t RegSeqConfig1;                          // 0x36
+    uint8_t RegSeqConfig2;                          // 0x37
+    uint8_t RegTimerResol;                          // 0x38
+    uint8_t RegTimer1Coef;                          // 0x39
+    uint8_t RegTimer2Coef;                          // 0x3A
+    // Service settings
+    uint8_t RegImageCal;                            // 0x3B
+    uint8_t RegTemp;                                // 0x3C
+    uint8_t RegLowBat;                              // 0x3D
+    // Status
+    uint8_t RegIrqFlags1;                           // 0x3E
+    uint8_t RegIrqFlags2;                           // 0x3F
+    // I/O settings
+    uint8_t RegDioMapping1;                         // 0x40
+    uint8_t RegDioMapping2;                         // 0x41
+    // Version
+    uint8_t RegVersion;                             // 0x42
+    // Additional settings
+    uint8_t RegAgcRef;                              // 0x43
+    uint8_t RegAgcThresh1;                          // 0x44
+    uint8_t RegAgcThresh2;                          // 0x45
+    uint8_t RegAgcThresh3;                          // 0x46
+    // Test
+    uint8_t RegTestReserved47[0x4B - 0x47];         // 0x47-0x4A
+    // Additional settings
+    uint8_t RegPllHop;                              // 0x4B
+    uint8_t RegTestReserved4C;                      // 0x4C
+    uint8_t RegPaDac;                               // 0x4D
+    // Test
+    uint8_t RegTestReserved4E[0x58-0x4E];           // 0x4E-0x57
+    // Additional settings
+    uint8_t RegTcxo;                                // 0x58
+    // Test
+    uint8_t RegTestReserved59;                      // 0x59
+    // Test
+    uint8_t RegTestReserved5B;                      // 0x5B
+    // Additional settings
+    uint8_t RegPll;                                 // 0x5C
+    // Test
+    uint8_t RegTestReserved5D;                      // 0x5D
+    // Additional settings
+    uint8_t RegPllLowPn;                            // 0x5E
+    // Test
+    uint8_t RegTestReserved5F[0x6C - 0x5F];         // 0x5F-0x6B
+    // Additional settings
+    uint8_t RegFormerTemp;                          // 0x6C
+    // Test
+    uint8_t RegTestReserved6D[0x70 - 0x6D];         // 0x6D-0x6F
+    // Additional settings
+    uint8_t RegBitrateFrac;                         // 0x70
+}tSX1276;
+
+extern tSX1276* SX1276;
+
+/*!
+ * \brief Initializes the SX1276
+ */
+void SX1276FskInit( void );
+
+/*!
+ * \brief Sets the SX1276 to datasheet default values
+ */
+void SX1276FskSetDefaults( void );
+
 /*!
- * RegAgcRef
+ * \brief Resets the SX1276
  */
+void SX1276FskReset( void );
 
 /*!
- * RegAgcThresh1
+ * \brief Enables/Disables the LoRa modem
+ *
+ * \param [IN]: enable [true, false]
  */
+void SX1276FskSetLoRaOn( bool enable );
 
 /*!
- * RegAgcThresh2
+ * \brief Sets the SX1276 operating mode
+ *
+ * \param [IN] opMode New operating mode
  */
+void SX1276FskSetOpMode( uint8_t opMode );
 
 /*!
- * RegAgcThresh3
+ * \brief Gets the SX1276 operating mode
+ *
+ * \retval opMode Current operating mode
  */
+uint8_t SX1276FskGetOpMode( void );
 
 /*!
- * RegPll
+ * \brief Trigs and reads the FEI
+ *
+ * \retval feiValue Frequency error value.
  */
-#define RF_PLL_BANDWIDTH_MASK                       0x3F
-#define RF_PLL_BANDWIDTH_75                         0x00
-#define RF_PLL_BANDWIDTH_150                        0x40
-#define RF_PLL_BANDWIDTH_225                        0x80
-#define RF_PLL_BANDWIDTH_300                        0xC0  // Default
+int32_t SX1276FskReadFei( void );
+
+/*!
+ * \brief Reads the current AFC value
+ *
+ * \retval afcValue Frequency offset value.
+ */
+int32_t SX1276FskReadAfc( void );
+
+/*!
+ * \brief Reads the current Rx gain setting
+ *
+ * \retval rxGain Current gain setting
+ */
+uint8_t SX1276FskReadRxGain( void );
+
+/*!
+ * \brief Trigs and reads the current RSSI value
+ *
+ * \retval rssiValue Current RSSI value in [dBm]
+ */
+double SX1276FskReadRssi( void );
+
+/*!
+ * \brief Gets the Rx gain value measured while receiving the packet
+ *
+ * \retval rxGainValue Current Rx gain value
+ */
+uint8_t SX1276FskGetPacketRxGain( void );
+
+/*!
+ * \brief Gets the RSSI value measured while receiving the packet
+ *
+ * \retval rssiValue Current RSSI value in [dBm]
+ */
+double SX1276FskGetPacketRssi( void );
+
+/*!
+ * \brief Gets the AFC value measured while receiving the packet
+ *
+ * \retval afcValue Current AFC value in [Hz]
+ */
+uint32_t SX1276FskGetPacketAfc( void );
+
+/*!
+ * \brief Sets the radio in Rx mode. Waiting for a packet
+ */
+void SX1276FskStartRx( void );
+
+/*!
+ * \brief Gets a copy of the current received buffer
+ *
+ * \param [IN]: buffer     Buffer pointer
+ * \param [IN]: size       Buffer size
+ */
+void SX1276FskGetRxPacket( void *buffer, uint16_t *size );
+
+/*!
+ * \brief Sets a copy of the buffer to be transmitted and starts the
+ *        transmission
+ *
+ * \param [IN]: buffer     Buffer pointer
+ * \param [IN]: size       Buffer size
+ */
+void SX1276FskSetTxPacket( const void *buffer, uint16_t size );
+
+/*!
+ * \brief Gets the current RFState
+ *
+ * \retval rfState Current RF state [RF_IDLE, RF_BUSY, 
+ *                                   RF_RX_DONE, RF_RX_TIMEOUT,
+ *                                   RF_TX_DONE, RF_TX_TIMEOUT]
+ */
+uint8_t SX1276FskGetRFState( void );
+
+/*!
+ * \brief Sets the new state of the RF state machine
+ *
+ * \param [IN]: state New RF state machine state
+ */
+void SX1276FskSetRFState( uint8_t state );
+
+/*!
+ * \brief Process the FSK modem Rx and Tx state machines depending on the
+ *       SX1276 operating mode.
+ *
+ * \retval rfState Current RF state [RF_IDLE, RF_BUSY, 
+ *                                   RF_RX_DONE, RF_RX_TIMEOUT,
+ *                                   RF_TX_DONE, RF_TX_TIMEOUT]
+ */
+uint32_t SX1276FskProcess( void );
 
-#endif // __SX1276_REGS_FSK_H__
+#endif //__SX1276_FSK_H__

+ 521 - 0
app/Sx1278/radio/sx1276-FskMisc.c

@@ -0,0 +1,521 @@
+/*
+ * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND 
+ * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER.
+ * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
+ * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
+ * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ * 
+ * Copyright (C) SEMTECH S.A.
+ */
+/*! 
+ * \file       sx1276-FskMisc.c
+ * \brief      SX1276 RF chip high level functions driver
+ *
+ * \remark     Optional support functions.
+ *             These functions are defined only to easy the change of the
+ *             parameters.
+ *             For a final firmware the radio parameters will be known so
+ *             there is no need to support all possible parameters.
+ *             Removing these functions will greatly reduce the final firmware
+ *             size.
+ *
+ * \version    2.0.0 
+ * \date       May 6 2013
+ * \author     Gregory Cristian
+ *
+ * Last modified by Miguel Luis on Jun 19 2013
+ */
+//#include <math.h>
+
+#include "platform.h"
+
+#if defined( USE_SX1276_RADIO )
+
+#include "sx1276-Hal.h"
+#include "sx1276.h"
+
+#include "sx1276-Fsk.h"
+#include "sx1276-FskMisc.h"
+
+extern tFskSettings FskSettings;
+
+void SX1276FskSetRFFrequency( uint32_t freq )
+{
+    FskSettings.RFFrequency = freq;
+
+    freq = ( uint32_t )( ( double )freq / ( double )FREQ_STEP );
+    SX1276->RegFrfMsb = ( uint8_t )( ( freq >> 16 ) & 0xFF );
+    SX1276->RegFrfMid = ( uint8_t )( ( freq >> 8 ) & 0xFF );
+    SX1276->RegFrfLsb = ( uint8_t )( freq & 0xFF );
+    SX1276WriteBuffer( REG_FRFMSB, &SX1276->RegFrfMsb, 3 );
+}
+
+uint32_t SX1276FskGetRFFrequency( void )
+{
+    SX1276ReadBuffer( REG_FRFMSB, &SX1276->RegFrfMsb, 3 );
+    FskSettings.RFFrequency = ( ( uint32_t )SX1276->RegFrfMsb << 16 ) | ( ( uint32_t )SX1276->RegFrfMid << 8 ) | ( ( uint32_t )SX1276->RegFrfLsb );
+    FskSettings.RFFrequency = ( uint32_t )( ( double )FskSettings.RFFrequency * ( double )FREQ_STEP );
+
+    return FskSettings.RFFrequency;
+}
+
+void SX1276FskRxCalibrate( void )
+{
+    // the function RadioRxCalibrate is called just after the reset so all register are at their default values
+    uint8_t regPaConfigInitVal;
+    uint32_t initialFreq;
+
+    // save register values;
+    SX1276Read( REG_PACONFIG, &regPaConfigInitVal );
+    initialFreq = SX1276FskGetRFFrequency( );
+
+    // Cut the PA just in case
+    SX1276->RegPaConfig = 0x00; // RFO output, power = -1 dBm
+    SX1276Write( REG_PACONFIG, SX1276->RegPaConfig );
+
+    // Set Frequency in HF band
+    SX1276FskSetRFFrequency( 860000000 );
+
+    // Rx chain re-calibration workaround
+    SX1276Read( REG_IMAGECAL, &SX1276->RegImageCal );    
+    SX1276->RegImageCal = ( SX1276->RegImageCal & RF_IMAGECAL_IMAGECAL_MASK ) | RF_IMAGECAL_IMAGECAL_START;
+    SX1276Write( REG_IMAGECAL, SX1276->RegImageCal );
+
+    SX1276Read( REG_IMAGECAL, &SX1276->RegImageCal );
+    // rx_cal_run goes low when calibration in finished
+    while( ( SX1276->RegImageCal & RF_IMAGECAL_IMAGECAL_RUNNING ) == RF_IMAGECAL_IMAGECAL_RUNNING )
+    {
+        SX1276Read( REG_IMAGECAL, &SX1276->RegImageCal );
+    }
+
+    // reload saved values into the registers
+    SX1276->RegPaConfig = regPaConfigInitVal;
+    SX1276Write( REG_PACONFIG, SX1276->RegPaConfig );
+
+    SX1276FskSetRFFrequency( initialFreq );
+
+}
+
+void SX1276FskSetBitrate( uint32_t bitrate )
+{
+    FskSettings.Bitrate = bitrate;
+    
+    bitrate = ( uint16_t )( ( double )XTAL_FREQ / ( double )bitrate );
+    SX1276->RegBitrateMsb    = ( uint8_t )( bitrate >> 8 );
+    SX1276->RegBitrateLsb    = ( uint8_t )( bitrate & 0xFF );
+    SX1276WriteBuffer( REG_BITRATEMSB, &SX1276->RegBitrateMsb, 2 );    
+}
+
+uint32_t SX1276FskGetBitrate( void )
+{
+    SX1276ReadBuffer( REG_BITRATEMSB, &SX1276->RegBitrateMsb, 2 );
+    FskSettings.Bitrate = ( ( ( uint32_t )SX1276->RegBitrateMsb << 8 ) | ( ( uint32_t )SX1276->RegBitrateLsb ) );
+    FskSettings.Bitrate = ( uint16_t )( ( double )XTAL_FREQ / ( double )FskSettings.Bitrate );
+
+    return FskSettings.Bitrate;
+}
+
+void SX1276FskSetFdev( uint32_t fdev )
+{
+    FskSettings.Fdev = fdev;
+
+    SX1276Read( REG_FDEVMSB, &SX1276->RegFdevMsb ); 
+
+    fdev = ( uint16_t )( ( double )fdev / ( double )FREQ_STEP );
+    SX1276->RegFdevMsb    = ( ( SX1276->RegFdevMsb & RF_FDEVMSB_FDEV_MASK ) | ( ( ( uint8_t )( fdev >> 8 ) ) & ~RF_FDEVMSB_FDEV_MASK ) );
+    SX1276->RegFdevLsb    = ( uint8_t )( fdev & 0xFF );
+    SX1276WriteBuffer( REG_FDEVMSB, &SX1276->RegFdevMsb, 2 );    
+}
+
+uint32_t SX1276FskGetFdev( void )
+{
+    SX1276ReadBuffer( REG_FDEVMSB, &SX1276->RegFdevMsb, 2 );
+    FskSettings.Fdev = ( ( ( uint32_t )( ( SX1276->RegFdevMsb << 8 ) & ~RF_FDEVMSB_FDEV_MASK ) ) | ( ( uint32_t )SX1276->RegFdevLsb ) );
+    FskSettings.Fdev = ( uint16_t )( ( double )FskSettings.Fdev * ( double )FREQ_STEP );
+
+    return FskSettings.Fdev;
+}
+
+void SX1276FskSetRFPower( int8_t power )
+{
+    SX1276Read( REG_PACONFIG, &SX1276->RegPaConfig );
+    SX1276Read( REG_PADAC, &SX1276->RegPaDac );
+    
+    if( ( SX1276->RegPaConfig & RF_PACONFIG_PASELECT_PABOOST ) == RF_PACONFIG_PASELECT_PABOOST )
+    {
+        if( ( SX1276->RegPaDac & 0x87 ) == 0x87 )
+        {
+            if( power < 5 )
+            {
+                power = 5;
+            }
+            if( power > 20 )
+            {
+                power = 20;
+            }
+            SX1276->RegPaConfig = ( SX1276->RegPaConfig & RF_PACONFIG_MAX_POWER_MASK ) | 0x70;
+            SX1276->RegPaConfig = ( SX1276->RegPaConfig & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 5 ) & 0x0F );
+        }
+        else
+        {
+            if( power < 2 )
+            {
+                power = 2;
+            }
+            if( power > 17 )
+            {
+                power = 17;
+            }
+            SX1276->RegPaConfig = ( SX1276->RegPaConfig & RF_PACONFIG_MAX_POWER_MASK ) | 0x70;
+            SX1276->RegPaConfig = ( SX1276->RegPaConfig & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power - 2 ) & 0x0F );
+        }
+    }
+    else
+    {
+        if( power < -1 )
+        {
+            power = -1;
+        }
+        if( power > 14 )
+        {
+            power = 14;
+        }
+        SX1276->RegPaConfig = ( SX1276->RegPaConfig & RF_PACONFIG_MAX_POWER_MASK ) | 0x70;
+        SX1276->RegPaConfig = ( SX1276->RegPaConfig & RF_PACONFIG_OUTPUTPOWER_MASK ) | ( uint8_t )( ( uint16_t )( power + 1 ) & 0x0F );
+    }
+    SX1276Write( REG_PACONFIG, SX1276->RegPaConfig );
+    FskSettings.Power = power;
+}
+
+int8_t SX1276FskGetRFPower( void )
+{
+    SX1276Read( REG_PACONFIG, &SX1276->RegPaConfig );
+    SX1276Read( REG_PADAC, &SX1276->RegPaDac );
+
+    if( ( SX1276->RegPaConfig & RF_PACONFIG_PASELECT_PABOOST ) == RF_PACONFIG_PASELECT_PABOOST )
+    {
+        if( ( SX1276->RegPaDac & 0x07 ) == 0x07 )
+        {
+            FskSettings.Power = 5 + ( SX1276->RegPaConfig & ~RF_PACONFIG_OUTPUTPOWER_MASK );
+        }
+        else
+        {
+            FskSettings.Power = 2 + ( SX1276->RegPaConfig & ~RF_PACONFIG_OUTPUTPOWER_MASK );
+        }
+    }
+    else
+    {
+        FskSettings.Power = -1 + ( SX1276->RegPaConfig & ~RF_PACONFIG_OUTPUTPOWER_MASK );
+    }
+    return FskSettings.Power;
+}
+
+/*!
+ * \brief Computes the Rx bandwidth with the mantisse and exponent
+ *
+ * \param [IN] mantisse Mantisse of the bandwidth value
+ * \param [IN] exponent Exponent of the bandwidth value
+ * \retval bandwidth Computed bandwidth
+ */
+static uint32_t SX1276FskComputeRxBw( uint8_t mantisse, uint8_t exponent )
+{
+    // rxBw
+    if( ( SX1276->RegOpMode & RF_OPMODE_MODULATIONTYPE_FSK ) == RF_OPMODE_MODULATIONTYPE_FSK )
+    {
+        return ( uint32_t )( ( double )XTAL_FREQ / ( mantisse * ( double )pow( 2, exponent + 2 ) ) );
+    }
+    else
+    {
+        return ( uint32_t )( ( double )XTAL_FREQ / ( mantisse * ( double )pow( 2, exponent + 3 ) ) );
+    }
+}
+
+/*!
+ * \brief Computes the mantisse and exponent from the bandwitdh value
+ *
+ * \param [IN] rxBwValue Bandwidth value
+ * \param [OUT] mantisse Mantisse of the bandwidth value
+ * \param [OUT] exponent Exponent of the bandwidth value
+ */
+static void SX1276FskComputeRxBwMantExp( uint32_t rxBwValue, uint8_t* mantisse, uint8_t* exponent )
+{
+    uint8_t tmpExp = 0;
+    uint8_t tmpMant = 0;
+
+    double tmpRxBw = 0;
+    double rxBwMin = 10e6;
+
+    for( tmpExp = 0; tmpExp < 8; tmpExp++ )
+    {
+        for( tmpMant = 16; tmpMant <= 24; tmpMant += 4 )
+        {
+            if( ( SX1276->RegOpMode & RF_OPMODE_MODULATIONTYPE_FSK ) == RF_OPMODE_MODULATIONTYPE_FSK )
+            {
+                tmpRxBw = ( double )XTAL_FREQ / ( tmpMant * ( double )pow( 2, tmpExp + 2 ) );
+            }
+            else
+            {
+                tmpRxBw = ( double )XTAL_FREQ / ( tmpMant * ( double )pow( 2, tmpExp + 3 ) );
+            }
+            if( fabs( tmpRxBw - rxBwValue ) < rxBwMin )
+            {
+                rxBwMin = fabs( tmpRxBw - rxBwValue );
+                *mantisse = tmpMant;
+                *exponent = tmpExp;
+            }
+        }
+    }
+}
+
+void SX1276FskSetDccBw( uint8_t* reg, uint32_t dccValue, uint32_t rxBwValue )
+{
+    uint8_t mantisse = 0;
+    uint8_t exponent = 0;
+    
+    if( reg == &SX1276->RegRxBw )
+    {
+        *reg = ( uint8_t )dccValue & 0x60;
+    }
+    else
+    {
+        *reg = 0;
+    }
+
+    SX1276FskComputeRxBwMantExp( rxBwValue, &mantisse, &exponent );
+
+    switch( mantisse )
+    {
+        case 16:
+            *reg |= ( uint8_t )( 0x00 | ( exponent & 0x07 ) );
+            break;
+        case 20:
+            *reg |= ( uint8_t )( 0x08 | ( exponent & 0x07 ) );
+            break;
+        case 24:
+            *reg |= ( uint8_t )( 0x10 | ( exponent & 0x07 ) );
+            break;
+        default:
+            // Something went terribely wrong
+            break;
+    }
+
+    if( reg == &SX1276->RegRxBw )
+    {
+        SX1276Write( REG_RXBW, *reg );
+        FskSettings.RxBw = rxBwValue;
+    }
+    else
+    {
+        SX1276Write( REG_AFCBW, *reg );
+        FskSettings.RxBwAfc = rxBwValue;
+    }
+}
+
+uint32_t SX1276FskGetBw( uint8_t* reg )
+{
+    uint32_t rxBwValue = 0;
+    uint8_t mantisse = 0;
+    switch( ( *reg & 0x18 ) >> 3 )
+    {
+        case 0:
+            mantisse = 16;
+            break;
+        case 1:
+            mantisse = 20;
+            break;
+        case 2:
+            mantisse = 24;
+            break;
+        default:
+            break;
+    }
+    rxBwValue = SX1276FskComputeRxBw( mantisse, ( uint8_t )*reg & 0x07 );
+    if( reg == &SX1276->RegRxBw )
+    {
+        return FskSettings.RxBw = rxBwValue;
+    }
+    else
+    {
+        return FskSettings.RxBwAfc = rxBwValue;
+    }
+}
+
+void SX1276FskSetPacketCrcOn( bool enable )
+{
+    SX1276Read( REG_PACKETCONFIG1, &SX1276->RegPacketConfig1 );
+    SX1276->RegPacketConfig1 = ( SX1276->RegPacketConfig1 & RF_PACKETCONFIG1_CRC_MASK ) | ( enable << 4 );
+    SX1276Write( REG_PACKETCONFIG1, SX1276->RegPacketConfig1 );
+    FskSettings.CrcOn = enable;
+}
+
+bool SX1276FskGetPacketCrcOn( void )
+{
+    SX1276Read( REG_PACKETCONFIG1, &SX1276->RegPacketConfig1 );
+    FskSettings.CrcOn = ( SX1276->RegPacketConfig1 & RF_PACKETCONFIG1_CRC_ON ) >> 4;
+    return FskSettings.CrcOn;
+}
+
+void SX1276FskSetAfcOn( bool enable )
+{
+    SX1276Read( REG_RXCONFIG, &SX1276->RegRxConfig );
+    SX1276->RegRxConfig = ( SX1276->RegRxConfig & RF_RXCONFIG_AFCAUTO_MASK ) | ( enable << 4 );
+    SX1276Write( REG_RXCONFIG, SX1276->RegRxConfig );
+    FskSettings.AfcOn = enable;
+}
+
+bool SX1276FskGetAfcOn( void )
+{
+    SX1276Read( REG_RXCONFIG, &SX1276->RegRxConfig );
+    FskSettings.AfcOn = ( SX1276->RegRxConfig & RF_RXCONFIG_AFCAUTO_ON ) >> 4;
+    return FskSettings.AfcOn;
+}
+
+void SX1276FskSetPayloadLength( uint8_t value )
+{
+    SX1276->RegPayloadLength = value;
+    SX1276Write( REG_PAYLOADLENGTH, SX1276->RegPayloadLength );
+    FskSettings.PayloadLength = value;
+}
+
+uint8_t SX1276FskGetPayloadLength( void )
+{
+    SX1276Read( REG_PAYLOADLENGTH, &SX1276->RegPayloadLength );
+    FskSettings.PayloadLength = SX1276->RegPayloadLength;
+    return FskSettings.PayloadLength;
+}
+
+void SX1276FskSetPa20dBm( bool enale )
+{
+    SX1276Read( REG_PADAC, &SX1276->RegPaDac );
+    SX1276Read( REG_PACONFIG, &SX1276->RegPaConfig );
+
+    if( ( SX1276->RegPaConfig & RF_PACONFIG_PASELECT_PABOOST ) == RF_PACONFIG_PASELECT_PABOOST )
+    {    
+        if( enale == true )
+        {
+            SX1276->RegPaDac = 0x87;
+        }
+    }
+    else
+    {
+        SX1276->RegPaDac = 0x84;
+    }
+    SX1276Write( REG_PADAC, SX1276->RegPaDac );
+}
+
+bool SX1276FskGetPa20dBm( void )
+{
+    SX1276Read( REG_PADAC, &SX1276->RegPaDac );
+    
+    return ( ( SX1276->RegPaDac & 0x07 ) == 0x07 ) ? true : false;
+}
+
+void SX1276FskSetPAOutput( uint8_t outputPin )
+{
+    SX1276Read( REG_PACONFIG, &SX1276->RegPaConfig );
+    SX1276->RegPaConfig = (SX1276->RegPaConfig & RF_PACONFIG_PASELECT_MASK ) | outputPin;
+    SX1276Write( REG_PACONFIG, SX1276->RegPaConfig );
+}
+
+uint8_t SX1276FskGetPAOutput( void )
+{
+    SX1276Read( REG_PACONFIG, &SX1276->RegPaConfig );
+    return SX1276->RegPaConfig & ~RF_PACONFIG_PASELECT_MASK;
+}
+
+
+void SX1276FskSetPaRamp( uint8_t value )
+{
+    SX1276Read( REG_PARAMP, &SX1276->RegPaRamp );
+    SX1276->RegPaRamp = ( SX1276->RegPaRamp & RF_PARAMP_MASK ) | ( value & ~RF_PARAMP_MASK );
+    SX1276Write( REG_PARAMP, SX1276->RegPaRamp );
+}
+
+uint8_t SX1276FskGetPaRamp( void )
+{
+    SX1276Read( REG_PARAMP, &SX1276->RegPaRamp );
+    return SX1276->RegPaRamp & ~RF_PARAMP_MASK;
+}
+
+void SX1276FskSetRssiOffset( int8_t offset )
+{
+    SX1276Read( REG_RSSICONFIG, &SX1276->RegRssiConfig );
+    if( offset < 0 )
+    {
+        offset = ( ~offset & 0x1F );
+        offset += 1;
+        offset = -offset;
+    }
+    SX1276->RegRssiConfig |= ( uint8_t )( ( offset & 0x1F ) << 3 );
+    SX1276Write( REG_RSSICONFIG, SX1276->RegRssiConfig );
+}
+
+int8_t SX1276FskGetRssiOffset( void )
+{
+    SX1276Read( REG_RSSICONFIG, &SX1276->RegRssiConfig );
+    int8_t offset = SX1276->RegRssiConfig >> 3;
+    if( ( offset & 0x10 ) == 0x10 )
+    {
+        offset = ( ~offset & 0x1F );
+        offset += 1;
+        offset = -offset;
+    }
+    return offset;
+}
+
+int8_t SX1276FskGetRawTemp( void )
+{
+    int8_t temp = 0;
+    uint8_t previousOpMode;
+    uint32_t startTick;
+    
+    // Enable Temperature reading
+    SX1276Read( REG_IMAGECAL, &SX1276->RegImageCal );
+    SX1276->RegImageCal = ( SX1276->RegImageCal & RF_IMAGECAL_TEMPMONITOR_MASK ) | RF_IMAGECAL_TEMPMONITOR_ON;
+    SX1276Write( REG_IMAGECAL, SX1276->RegImageCal );
+
+    // save current Op Mode
+    SX1276Read( REG_OPMODE, &SX1276->RegOpMode );
+    previousOpMode = SX1276->RegOpMode;
+
+    // put device in FSK RxSynth
+    SX1276->RegOpMode = RF_OPMODE_SYNTHESIZER_RX;
+    SX1276Write( REG_OPMODE, SX1276->RegOpMode );
+
+    // Wait 1ms
+    startTick = GET_TICK_COUNT( );
+    while( ( GET_TICK_COUNT( ) - startTick ) < TICK_RATE_MS( 1 ) );  
+
+    // Disable Temperature reading
+    SX1276Read( REG_IMAGECAL, &SX1276->RegImageCal );
+    SX1276->RegImageCal = ( SX1276->RegImageCal & RF_IMAGECAL_TEMPMONITOR_MASK ) | RF_IMAGECAL_TEMPMONITOR_OFF;
+    SX1276Write( REG_IMAGECAL, SX1276->RegImageCal );
+
+    // Read temperature
+    SX1276Read( REG_TEMP, &SX1276->RegTemp );
+    
+    temp = SX1276->RegTemp & 0x7F;
+    
+    if( ( SX1276->RegTemp & 0x80 ) == 0x80 )
+    {
+        temp *= -1;
+    }
+
+    // Reload previous Op Mode
+    SX1276Write( REG_OPMODE, previousOpMode );
+
+    return temp;
+}
+
+int8_t SX1276FskCalibreateTemp( int8_t actualTemp )
+{
+    return actualTemp - SX1276FskGetRawTemp( );
+}
+
+int8_t SX1276FskGetTemp( int8_t compensationFactor )
+{
+    return SX1276FskGetRawTemp( ) + compensationFactor;
+}
+
+#endif // USE_SX1276_RADIO

+ 241 - 0
app/Sx1278/radio/sx1276-FskMisc.h

@@ -0,0 +1,241 @@
+/*
+ * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND 
+ * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER.
+ * CONSEQUENTLY, SEMTECH SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
+ * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
+ * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ * 
+ * Copyright (C) SEMTECH S.A.
+ */
+/*! 
+ * \file       sx1276-FskMisc.h
+ * \brief      SX1276 RF chip high level functions driver
+ *
+ * \remark     Optional support functions.
+ *             These functions are defined only to easy the change of the
+ *             parameters.
+ *             For a final firmware the radio parameters will be known so
+ *             there is no need to support all possible parameters.
+ *             Removing these functions will greatly reduce the final firmware
+ *             size.
+ *
+ * \version    2.0.B2 
+ * \date       May 6 2013
+ * \author     Gregory Cristian
+ *
+ * Last modified by Miguel Luis on Jun 19 2013
+ */
+#ifndef __SX1276_FSK_MISC_H__
+#define __SX1276_FSK_MISC_H__
+
+/*!
+ * \brief Writes the new RF frequency value
+ *
+ * \param [IN] freq New RF frequency value in [Hz]
+ */
+void SX1276FskSetRFFrequency( uint32_t freq );
+
+/*!
+ * \brief Reads the current RF frequency value
+ *
+ * \retval freq Current RF frequency value in [Hz]
+ */
+uint32_t SX1276FskGetRFFrequency( void );
+
+/*!
+ * \brief Calibrate RSSI and I/Q mismatch for HF 
+ *
+ * \retval none
+ */
+void SX1276FskRxCalibrate( void );
+
+/*!
+ * \brief Writes the new bitrate value
+ *
+ * \param [IN] bitrate New bitrate value in [bps]
+ */
+void SX1276FskSetBitrate( uint32_t bitrate );
+
+/*!
+ * \brief Reads the current bitrate value
+ *
+ * \retval bitrate Current bitrate value in [bps]
+ */
+uint32_t SX1276FskGetBitrate( void );
+
+/*!
+ * \brief Writes the new frequency deviation value
+ *
+ * \param [IN] fdev New frequency deviation value in [Hz]
+ */
+void SX1276FskSetFdev( uint32_t fdev );
+
+/*!
+ * \brief Reads the current frequency deviation value
+ *
+ * \retval fdev Current frequency deviation value in [Hz]
+ */
+uint32_t SX1276FskGetFdev( void );
+
+/*!
+ * \brief Writes the new RF output power value
+ *
+ * \param [IN] power New output power value in [dBm]
+ */
+void SX1276FskSetRFPower( int8_t power );
+
+/*!
+ * \brief Reads the current RF output power value
+ *
+ * \retval power Current output power value in [dBm]
+ */
+int8_t SX1276FskGetRFPower( void );
+
+/*!
+ * \brief Writes the DC offset canceller and Rx bandwidth values
+ *
+ * \remark For SX1276 there is no DCC setting. dccValue should be 0
+ *         ie: SX1276SetDccBw( &SX1276.RegRxBw, 0, 62500 );
+ *
+ * \param [IN] reg Register pointer to either SX1231.RegRxBw or SX1231.RegAfcBw
+ * \param [IN] dccValue New DC offset canceller value in [Hz] ( SX1231 only )
+ * \param [IN] rxBwValue New Rx bandwidth value in [Hz]
+ */
+void SX1276FskSetDccBw( uint8_t* reg, uint32_t dccValue, uint32_t rxBwValue );
+
+/*!
+ * \brief Reads the current bandwidth setting
+ *
+ * \param [IN] reg Register pointer to either SX1231.RegRxBw or SX1231.RegAfcBw
+ *
+ * \retval bandwidth Bandwidth value
+ */
+uint32_t SX1276FskGetBw( uint8_t* reg );
+
+/*!
+ * \brief Enables/Disables CRC
+ *
+ * \param [IN] enable CRC enable/disable
+ */
+void SX1276FskSetPacketCrcOn( bool enable );
+
+/*!
+ * \brief Reads the current CRC Enable/Disbale value
+ *
+ * \retval enable Current CRC Enable/Disbale value
+ */
+bool SX1276FskGetPacketCrcOn( void );
+
+/*!
+ * \brief Enables/Disables AFC
+ *
+ * \param [IN] enable AFC enable/disable
+ */
+void SX1276FskSetAfcOn( bool enable );
+
+/*!
+ * \brief Reads the current AFC Enable/Disbale value
+ *
+ * \retval enable Current AFC Enable/Disbale value
+ */
+bool SX1276FskGetAfcOn( void );
+
+/*!
+ * \brief Writes the new payload length value
+ *
+ * \param [IN] value New payload length value
+ */
+void SX1276FskSetPayloadLength( uint8_t value );
+
+/*!
+ * \brief Reads the current payload length value
+ *
+ * \retval value Current payload length value
+ */
+uint8_t SX1276FskGetPayloadLength( void );
+
+/*!
+ * \brief Enables/Disables the 20 dBm PA
+ *
+ * \param [IN] enable [true, false]
+ */
+void SX1276FskSetPa20dBm( bool enale );
+
+/*!
+ * \brief Gets the current 20 dBm PA status
+ *
+ * \retval enable [true, false]
+ */
+bool SX1276FskGetPa20dBm( void );
+
+/*!
+ * \brief Set the RF Output pin 
+ *
+ * \param [IN] RF_PACONFIG_PASELECT_PABOOST or RF_PACONFIG_PASELECT_RFO
+ */
+void SX1276FskSetPAOutput( uint8_t outputPin );
+
+/*!
+ * \brief Gets the used RF Ouptu pin
+ *
+ * \retval RF_PACONFIG_PASELECT_PABOOST or RF_PACONFIG_PASELECT_RFO
+ */
+uint8_t SX1276FskGetPAOutput( void );
+
+/*!
+ * \brief Writes the new PA rise/fall time of ramp up/down value
+ *
+ * \param [IN] value New PaRamp value
+ */
+void SX1276FskSetPaRamp( uint8_t value );
+
+/*!
+ * \brief Reads the current PA rise/fall time of ramp up/down value
+ *
+ * \retval value Current PaRamp value
+ */
+uint8_t SX1276FskGetPaRamp( void );
+
+/*!
+ * \brief Applies an offset to the RSSI. Compensates board components
+ *
+ * \param [IN] offset Offset to be applied (+/-)
+ */
+void SX1276FskSetRssiOffset( int8_t offset );
+
+/*!
+ * \brief Gets the current RSSI offset.
+ *
+ * \retval offset Current offset (+/-)
+ */
+int8_t SX1276FskGetRssiOffset( void );
+
+/*!
+ * \brief Writes the new value for the preamble size
+ *
+ * \param [IN] size New value of pramble size
+ */
+void SX1276FskSetPreambleSize( uint16_t size );
+
+/*!
+ * Reads the raw temperature
+ * \retval temperature New raw temperature reading in 2's complement format
+ */
+int8_t SX1276FskGetRawTemp( void );
+
+/*!
+ * Computes the temperature compensation factor
+ * \param [IN] actualTemp Actual temperature measured by an external device
+ * \retval compensationFactor Computed compensation factor
+ */
+int8_t SX1276FskCalibreateTemp( int8_t actualTemp );
+
+/*!
+ * Gets the actual compensated temperature
+ * \param [IN] compensationFactor Return value of the calibration function
+ * \retval New compensated temperature value
+ */
+int8_t SX1276FskGetTemp( int8_t compensationFactor );
+
+#endif //__SX1276_FSK_MISC_H__

+ 0 - 0
app/Sx1278/radio/sx1276-Hal.c


部分文件因文件數量過多而無法顯示