1 /*
2 * Copyright (C) 2015-2020 Alibaba Group Holding Limited
3 */
4
5 #include <string.h>
6 #include "board.h"
7 #include "radio.h"
8 #include "aos/hal/gpio.h"
9 #include "aos/hal/spi.h"
10 #include "sx126x-board.h"
11 #include "aos/hal/timer.h"
12 #include "ulog/ulog.h"
13
14 #define TRANS_MODE_TX (0xEF)
15 #define TRANS_MODE_RX (0xFE)
16
17 // set transmission mode here, TRANS_MODE_TX or TRANS_MODE_RX
18 #define TRANSMIT_MODE TRANS_MODE_TX
19
20 #define RF_FREQUENCY 470000000 // 779000000 Hz
21 #define TX_OUTPUT_POWER 14 // dBm
22 #define LORA_BANDWIDTH 2 // [0: 125 kHz, 1: 250 kHz, 2: 500 kHz]
23 #define LORA_SPREADING_FACTOR 7 // [SF7..SF12]
24 #define LORA_CODINGRATE 1 // [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]
25 #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
26 #define LORA_SYMBOL_TIMEOUT 0 // Symbols
27 #define LORA_FIX_LENGTH_PAYLOAD_ON false
28 #define LORA_IQ_INVERSION_ON false
29
30 #define BUFFER_SIZE 64 // Define the payload size here
31 uint8_t g_buffer[BUFFER_SIZE] = {0};
32
33 static RadioEvents_t g_RadioCallback;
34
OnTxDone()35 void OnTxDone( ) {
36 LOG("[lora demo][%s] << %s \n", __func__, g_buffer);
37 memset(g_buffer, 0, BUFFER_SIZE);
38 sleep(5);
39 }
40
OnRxDone(uint8_t * payload,uint16_t size,int16_t rssi,int8_t snr)41 void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ) {
42 LOG("[lora demo][%s] >> %s \n", __func__, payload);
43 Radio.Sleep();
44 Radio.Rx( 1000 );
45 }
46
47 /**
48 * Main application entry point.
49 */
application_start(int argc,char * argv[])50 int application_start(int argc, char *argv[]) {
51 bool isMaster = true;
52 uint8_t i;
53
54 // set log level
55 aos_set_log_level(AOS_LL_DEBUG);
56
57 // Radio initialization
58 g_RadioCallback.TxDone = OnTxDone;
59 g_RadioCallback.RxDone = OnRxDone;
60 Radio.Init( &g_RadioCallback );
61 LOG("[lora demo] ++init radio done++");
62
63 Radio.SetChannel( RF_FREQUENCY );
64
65 #if defined(TRANSMIT_MODE) && (TRANSMIT_MODE == TRANS_MODE_TX)
66 Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
67 LORA_SPREADING_FACTOR, LORA_CODINGRATE,
68 LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
69 true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );
70 LOG("[lora demo] ++set TX config done++");
71 #elif defined(TRANSMIT_MODE) && (TRANSMIT_MODE == TRANS_MODE_RX)
72 Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
73 LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
74 LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
75 0, true, 0, 0, LORA_IQ_INVERSION_ON, true );
76 LOG("[lora demo] ++set RX config done++");
77 #else
78 #error "PLEASE SET VALID TRANSMIT MODE FIRST!!"
79 #endif
80
81 Radio.SetMaxPayloadLength( MODEM_LORA, BUFFER_SIZE );
82 LOG("[lora demo] ++lora init done++\n");
83
84 #if defined(TRANSMIT_MODE) && (TRANSMIT_MODE == TRANS_MODE_RX)
85 Radio.Rx( 1000 );
86 #endif
87
88 while( 1 )
89 {
90 #if defined(TRANSMIT_MODE) && (TRANSMIT_MODE == TRANS_MODE_TX)
91 if(strlen(g_buffer) == 0) {
92 snprintf(g_buffer, BUFFER_SIZE, "Hello from HaaS@%llu...", aos_now_ms());
93 Radio.Send( g_buffer, strlen(g_buffer)+1);
94 }
95 #endif
96 if( Radio.IrqProcess != NULL )
97 {
98 Radio.IrqProcess( );
99 }
100 // sleep for other system task, such as CLI task.
101 aos_msleep(100);
102 }
103 return 0;
104 }
105