standalone sx1276 demo program

Dependencies:   SX1276Lib mbed

Fork of SX1276_GPS by CaryCoders

Committer:
ftagius
Date:
Thu Sep 03 14:33:55 2015 +0000
Revision:
33:319cbac3b6eb
Parent:
32:a2472bbe7c92
Child:
34:75e4c3600d2f
sx1276 demo program requiring only the freedom board and a semtech shield

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ftagius 29:0ea07cc7124b 1 #include "mbed.h"
ftagius 29:0ea07cc7124b 2 #include "sx1276-hal.h"
ftagius 29:0ea07cc7124b 3 #include "main.h"
ftagius 29:0ea07cc7124b 4 #include "debug.h"
ftagius 29:0ea07cc7124b 5 #include "serial_api.h"
ftagius 33:319cbac3b6eb 6 #ifndef STANDALONE
ftagius 29:0ea07cc7124b 7 #include "GPS.h"
ftagius 33:319cbac3b6eb 8 #endif
ftagius 29:0ea07cc7124b 9 #include <math.h>
ftagius 32:a2472bbe7c92 10
ftagius 29:0ea07cc7124b 11
ftagius 29:0ea07cc7124b 12 void start_hello(void)
ftagius 29:0ea07cc7124b 13 {
ftagius 29:0ea07cc7124b 14 int len = get_kbd_str(pcbuf, PCBUF_SIZE);
ftagius 33:319cbac3b6eb 15 //printf("in start gps/hello len=%d\r\n",len);
ftagius 29:0ea07cc7124b 16 if (len < 0) {
ftagius 29:0ea07cc7124b 17 fflush(stdout);
ftagius 29:0ea07cc7124b 18 Radio.Rx( RX_TIMEOUT_VALUE );
ftagius 29:0ea07cc7124b 19 Radio.Tx( TX_TIMEOUT_VALUE );
ftagius 29:0ea07cc7124b 20 Radio.Sleep( );
ftagius 29:0ea07cc7124b 21 if (gpsEnabled)
ftagius 29:0ea07cc7124b 22 debug("GPS exchange ended\r\n");
ftagius 29:0ea07cc7124b 23 else
ftagius 29:0ea07cc7124b 24 debug("Hello exchange ended\r\n");
ftagius 29:0ea07cc7124b 25 app = APP_CONSOLE;
ftagius 29:0ea07cc7124b 26 print_help();
ftagius 29:0ea07cc7124b 27 printf("> ");
ftagius 29:0ea07cc7124b 28 fflush(stdout);
ftagius 29:0ea07cc7124b 29 return;
ftagius 29:0ea07cc7124b 30 }
ftagius 29:0ea07cc7124b 31 else
ftagius 29:0ea07cc7124b 32 {
ftagius 33:319cbac3b6eb 33 Radio.Rx( RX_TIMEOUT_VALUE / 3 );
ftagius 32:a2472bbe7c92 34 hello();
ftagius 29:0ea07cc7124b 35 }
ftagius 29:0ea07cc7124b 36 }
ftagius 29:0ea07cc7124b 37
ftagius 29:0ea07cc7124b 38 void hello(void)
ftagius 29:0ea07cc7124b 39 {
ftagius 32:a2472bbe7c92 40
ftagius 32:a2472bbe7c92 41 // srand ( randomSeed() );
ftagius 29:0ea07cc7124b 42 // generate a random wait time
ftagius 33:319cbac3b6eb 43 int mywait = ((rand()%2 +1));
ftagius 33:319cbac3b6eb 44 // int mywait = 3;
ftagius 29:0ea07cc7124b 45 int i=0;
ftagius 29:0ea07cc7124b 46 int rcvd=0;
ftagius 29:0ea07cc7124b 47 int lost=0;
ftagius 32:a2472bbe7c92 48
ftagius 32:a2472bbe7c92 49 // check_gps();
ftagius 29:0ea07cc7124b 50 for (i=0;i<max_pkts;i++)
ftagius 29:0ea07cc7124b 51 {
ftagius 29:0ea07cc7124b 52
ftagius 29:0ea07cc7124b 53 if (pkt_data[i]==1)
ftagius 29:0ea07cc7124b 54 {
ftagius 29:0ea07cc7124b 55 //printf("rcvd, pkt count=%d\r\n",i);
ftagius 29:0ea07cc7124b 56 rcvd++;
ftagius 29:0ea07cc7124b 57 }
ftagius 29:0ea07cc7124b 58 else if (pkt_data[i] == 2)
ftagius 29:0ea07cc7124b 59 {
ftagius 29:0ea07cc7124b 60 //printf("lose, pkt count=%d\r\n",i);
ftagius 29:0ea07cc7124b 61 lost++;
ftagius 29:0ea07cc7124b 62 }
ftagius 29:0ea07cc7124b 63
ftagius 29:0ea07cc7124b 64 }
ftagius 29:0ea07cc7124b 65 if ((rcvd + lost) > 0)
ftagius 29:0ea07cc7124b 66 {
ftagius 29:0ea07cc7124b 67 per = 100 - (rcvd*100 / (rcvd + lost));
ftagius 29:0ea07cc7124b 68 //printf("rcvd = %d, lost = %d per = %d\r\n",rcvd, lost, per);
ftagius 29:0ea07cc7124b 69 }
ftagius 29:0ea07cc7124b 70 else
ftagius 29:0ea07cc7124b 71 per = 0;
ftagius 29:0ea07cc7124b 72
ftagius 29:0ea07cc7124b 73
ftagius 29:0ea07cc7124b 74 switch( State )
ftagius 29:0ea07cc7124b 75 {
ftagius 29:0ea07cc7124b 76
ftagius 29:0ea07cc7124b 77 case RX_TIMEOUT:
ftagius 29:0ea07cc7124b 78
ftagius 29:0ea07cc7124b 79 printf("rx timeout in gps/hello loop. ");
ftagius 29:0ea07cc7124b 80 printf("per=%d\r\n", per);
ftagius 32:a2472bbe7c92 81 r_latitude = 0;
ftagius 32:a2472bbe7c92 82 r_longitude = 0;
ftagius 29:0ea07cc7124b 83 // printf("rcv - rssi = %d snr = %d msg=%s\r\n", RssiValue, SnrValue, BufferRx);
ftagius 33:319cbac3b6eb 84 #ifndef STANDALONE
ftagius 29:0ea07cc7124b 85 cLCD.setCursor(0,0);
ftagius 29:0ea07cc7124b 86 cLCD.printf("RI:NA SR:NA ");
ftagius 33:319cbac3b6eb 87 #endif
ftagius 29:0ea07cc7124b 88 case RX:
ftagius 29:0ea07cc7124b 89
ftagius 29:0ea07cc7124b 90 if( BufferSize > 0 )
ftagius 29:0ea07cc7124b 91 {
ftagius 33:319cbac3b6eb 92 RXin = !RXin;
ftagius 29:0ea07cc7124b 93 if( strncmp( ( const char* )BufferRx, ( const char* )HelloMsg, 5 ) == 0 )
ftagius 29:0ea07cc7124b 94 {
ftagius 32:a2472bbe7c92 95 // radfta led = !led;
ftagius 29:0ea07cc7124b 96 printf("rcv - rssi = %d snr = %d msg=%s ", RssiValue, SnrValue, BufferRx );
ftagius 29:0ea07cc7124b 97 printf("per=%d\r\n", per);
ftagius 33:319cbac3b6eb 98 #ifndef STANDALONE
ftagius 29:0ea07cc7124b 99 cLCD.setCursor(0,0);
ftagius 29:0ea07cc7124b 100 cLCD.printf("RI:%d SR:%d ", RssiValue, SnrValue);
ftagius 33:319cbac3b6eb 101 #endif
ftagius 29:0ea07cc7124b 102 }
ftagius 33:319cbac3b6eb 103 #ifndef STANDALONE
ftagius 29:0ea07cc7124b 104 else
ftagius 29:0ea07cc7124b 105 {
ftagius 32:a2472bbe7c92 106
ftagius 32:a2472bbe7c92 107 if(sscanf((char *)BufferRx, "GP,%f,%f", &r_latitude, &r_longitude ) >= 1)
ftagius 33:319cbac3b6eb 108 {
ftagius 33:319cbac3b6eb 109 r_latitude_last = r_latitude;
ftagius 33:319cbac3b6eb 110 r_longitude_last = r_longitude;
ftagius 32:a2472bbe7c92 111 // radfta led = !led;
ftagius 32:a2472bbe7c92 112 printf("rssi=%d snr=%d rlat=%0.5f rlon=%0.5f llat=%0.5f llon=%0.5f dst=%0.0fm ", RssiValue, SnrValue, r_latitude, r_longitude, gpsd.lat_deg, gpsd.lon_deg, distance);
ftagius 29:0ea07cc7124b 113 printf("per=%d\r\n", per);
ftagius 29:0ea07cc7124b 114 cLCD.setCursor(0,0);
ftagius 29:0ea07cc7124b 115 cLCD.printf("RI:%d SR:%d ", RssiValue,SnrValue);
ftagius 29:0ea07cc7124b 116 //printf("Msg received - Lat: %0.4f Lon: %0.4f\r\n", latitude, longitude);
ftagius 29:0ea07cc7124b 117 }
ftagius 29:0ea07cc7124b 118 else
ftagius 29:0ea07cc7124b 119 printf("strange received message: %s\r\n", BufferRx);
ftagius 32:a2472bbe7c92 120
ftagius 33:319cbac3b6eb 121 }
ftagius 33:319cbac3b6eb 122 #else
ftagius 33:319cbac3b6eb 123 printf("rssi=%d \tsnr=%d \tper=%d \tmsg=%s\r\n", RssiValue, SnrValue, per, BufferRx);
ftagius 33:319cbac3b6eb 124 #endif
ftagius 29:0ea07cc7124b 125 }
ftagius 29:0ea07cc7124b 126 case RX_ERROR:
ftagius 33:319cbac3b6eb 127 #ifndef STANDALONE
ftagius 29:0ea07cc7124b 128 if (gpsEnabled)
ftagius 32:a2472bbe7c92 129 sprintf((char *)BufferTx, "GP,%4.5f,%4.5f", gpsd.lat_deg, gpsd.lon_deg);
ftagius 29:0ea07cc7124b 130 else
ftagius 33:319cbac3b6eb 131 #endif
ftagius 29:0ea07cc7124b 132 strcpy( ( char* )BufferTx, ( char* )HelloMsg );
ftagius 33:319cbac3b6eb 133 #if 1
ftagius 29:0ea07cc7124b 134 BufferSize=strlen((char *)BufferTx);
ftagius 29:0ea07cc7124b 135 //printf("Sending new buffer\r\n");
ftagius 29:0ea07cc7124b 136 Radio.Send( BufferTx, BufferSize );
ftagius 33:319cbac3b6eb 137 State = LOWPOWER;
ftagius 33:319cbac3b6eb 138 #else
ftagius 33:319cbac3b6eb 139 State = CAD;
ftagius 32:a2472bbe7c92 140 #endif
ftagius 29:0ea07cc7124b 141
ftagius 29:0ea07cc7124b 142 break;
ftagius 29:0ea07cc7124b 143 case TX:
ftagius 33:319cbac3b6eb 144 // printf("tx state\r\n");
ftagius 33:319cbac3b6eb 145 // wait_ms (10);
ftagius 29:0ea07cc7124b 146 Radio.Rx( RX_TIMEOUT_VALUE / mywait );
ftagius 29:0ea07cc7124b 147 State = LOWPOWER;
ftagius 29:0ea07cc7124b 148 break;
ftagius 29:0ea07cc7124b 149 case TX_TIMEOUT:
ftagius 29:0ea07cc7124b 150 debug("tx timeout\r\n");
ftagius 29:0ea07cc7124b 151 Radio.Tx( TX_TIMEOUT_VALUE );
ftagius 29:0ea07cc7124b 152 State = LOWPOWER;
ftagius 29:0ea07cc7124b 153 break;
ftagius 29:0ea07cc7124b 154 case LOWPOWER:
ftagius 32:a2472bbe7c92 155 //printf("in wait\r\n");
ftagius 33:319cbac3b6eb 156 //wait_ms (1);
ftagius 33:319cbac3b6eb 157 //wait_us(200);
ftagius 33:319cbac3b6eb 158 #ifndef STANDALONE
ftagius 33:319cbac3b6eb 159 check_gps();
ftagius 33:319cbac3b6eb 160 #endif
ftagius 33:319cbac3b6eb 161 break;
ftagius 33:319cbac3b6eb 162 case CAD:
ftagius 33:319cbac3b6eb 163 printf("in cad\r\n");
ftagius 33:319cbac3b6eb 164 //State = LOWPOWER;
ftagius 29:0ea07cc7124b 165 break;
ftagius 29:0ea07cc7124b 166 default:
ftagius 33:319cbac3b6eb 167 //debug("state is set to CAD\r\n");
ftagius 29:0ea07cc7124b 168 State = LOWPOWER;
ftagius 29:0ea07cc7124b 169 break;
ftagius 29:0ea07cc7124b 170 }
ftagius 29:0ea07cc7124b 171 }