standalone sx1276 demo program

Dependencies:   SX1276Lib mbed

Fork of SX1276_GPS by CaryCoders

hello.cpp

Committer:
ftagius
Date:
2015-07-29
Revision:
32:a2472bbe7c92
Parent:
31:2c813f321db7
Child:
33:319cbac3b6eb

File content as of revision 32:a2472bbe7c92:

#include "mbed.h"
#include "sx1276-hal.h"
#include "main.h"
#include "debug.h"
#include "serial_api.h"
#include "GPS.h"
#include <math.h>


void start_hello(void)
{
    int len = get_kbd_str(pcbuf, PCBUF_SIZE);
    //printf("in start gps/hello\r\n");
    if (len < 0) {
        fflush(stdout);
        Radio.Rx( RX_TIMEOUT_VALUE );
        Radio.Tx( TX_TIMEOUT_VALUE );
        Radio.Sleep( );
        if (gpsEnabled)
            debug("GPS exchange ended\r\n");
        else
            debug("Hello exchange ended\r\n");    
        app = APP_CONSOLE;
        print_help();
        printf("> ");
        fflush(stdout);
        return;
    }
    else
    {   
       hello();
    }
}

void hello(void)
{
 
    // srand ( randomSeed() );
    // generate a random wait time
    // int mywait = ((rand()%2 +1));
    int mywait = 3;
    int i=0;
    int rcvd=0;
    int lost=0;
     
    // check_gps();
    for (i=0;i<max_pkts;i++)
    {
        
        if (pkt_data[i]==1)
        {
            //printf("rcvd, pkt count=%d\r\n",i);
            rcvd++;
        }
        else if (pkt_data[i] == 2)
        {
            //printf("lose, pkt count=%d\r\n",i);
            lost++;
        }
     
    }
    if ((rcvd + lost) > 0)
    {
        per = 100 - (rcvd*100 / (rcvd + lost));
        //printf("rcvd = %d, lost = %d per = %d\r\n",rcvd, lost, per);
    }
    else 
        per = 0;

 
    switch( State )
    {
  
        case RX_TIMEOUT:

            printf("rx timeout in gps/hello loop. ");
            printf("per=%d\r\n", per);
            r_latitude = 0;
            r_longitude = 0;
            // printf("rcv - rssi = %d snr = %d msg=%s\r\n", RssiValue, SnrValue, BufferRx);
            cLCD.setCursor(0,0);
            cLCD.printf("RI:NA SR:NA      ");
        case RX:
             
            if( BufferSize > 0 )
            {
                if( strncmp( ( const char* )BufferRx, ( const char* )HelloMsg, 5 ) == 0 )
                {
                    // radfta led = !led;     
                    printf("rcv - rssi = %d snr = %d msg=%s ", RssiValue, SnrValue, BufferRx );
                    printf("per=%d\r\n", per);
                    cLCD.setCursor(0,0);
                    cLCD.printf("RI:%d SR:%d   ", RssiValue, SnrValue);
                }
                else
                {

                  if(sscanf((char *)BufferRx, "GP,%f,%f", &r_latitude, &r_longitude ) >= 1) 
                  {                    
                    // radfta led = !led;     
                    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);
                    printf("per=%d\r\n", per);
                    cLCD.setCursor(0,0);
                    cLCD.printf("RI:%d SR:%d    ", RssiValue,SnrValue);
                    //printf("Msg received - Lat: %0.4f Lon: %0.4f\r\n", latitude, longitude);
                  }
                  else
                    printf("strange received message: %s\r\n", BufferRx);
           
              }                  
            }
       case RX_ERROR:
         
            if (gpsEnabled)
                sprintf((char *)BufferTx, "GP,%4.5f,%4.5f", gpsd.lat_deg, gpsd.lon_deg);
            else
                strcpy( ( char* )BufferTx, ( char* )HelloMsg );
#if 0
radfta     
            BufferSize=strlen((char *)BufferTx);
            //printf("Sending new buffer\r\n");
            Radio.Send( BufferTx, BufferSize );
#endif            
            State = LOWPOWER;

            break;
        case TX:    
            //printf("tx state\r\n");
            //wait_ms (30);
 
            Radio.Rx( RX_TIMEOUT_VALUE / mywait  );
            State = LOWPOWER;
            break;
         case TX_TIMEOUT:
            debug("tx timeout\r\n");
            Radio.Tx( TX_TIMEOUT_VALUE );
            State = LOWPOWER;
            break;
        case LOWPOWER:
            //printf("in wait\r\n");
           // wait_ms (1);
            break;
        default:
            debug("state is set to low power\r\n");
            State = LOWPOWER;
            break;
    }    
}