Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SX1276Lib1 WakeUp mbed-src
Fork of SX1276PingPong by
Revision 2:59e108728d71, committed 2014-08-21
- Comitter:
- GregCr
- Date:
- Thu Aug 21 11:58:56 2014 +0000
- Parent:
- 1:126d70d374f6
- Child:
- 3:8b9e2a4df4b5
- Commit message:
- Release Candidate V1.1
Changed in this revision
| SX1276Lib.lib | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/SX1276Lib.lib Wed Aug 20 06:29:39 2014 +0000 +++ b/SX1276Lib.lib Thu Aug 21 11:58:56 2014 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/GregCr/code/SX1276Lib/#f0ce52e94d3f +http://mbed.org/users/GregCr/code/SX1276Lib/#11ec8a6ba4f0
--- a/main.cpp Wed Aug 20 06:29:39 2014 +0000
+++ b/main.cpp Thu Aug 21 11:58:56 2014 +0000
@@ -7,10 +7,10 @@
/* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */
-#define USE_MODEM_LORA 1
+#define USE_MODEM_LORA 0
#define USE_MODEM_FSK !USE_MODEM_LORA
-#define RF_FREQUENCY 868000000 // Hz
+#define RF_FREQUENCY 875000000 // Hz
#define TX_OUTPUT_POWER 14 // 14 dBm
#if USE_MODEM_LORA == 1
@@ -31,10 +31,10 @@
#elif USE_MODEM_FSK == 1
- #define FSK_FDEV 25e3 // Hz
- #define FSK_DATARATE 9600 // bps
- #define FSK_BANDWIDTH 50e3 // Hz
- #define FSK_AFC_BANDWIDTH 83.333e3 // Hz
+ #define FSK_FDEV 25000 // Hz
+ #define FSK_DATARATE 19200 // bps
+ #define FSK_BANDWIDTH 50000 // Hz
+ #define FSK_AFC_BANDWIDTH 83333 // Hz
#define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx
#define FSK_FIX_LENGTH_PAYLOAD_ON false
@@ -111,7 +111,16 @@
debug( DEBUG_MESSAGE, " > Untested Platform <\r\n" );
#endif
- debug( DEBUG_MESSAGE, "SX1276 Chipset Version = 0x%x \n\r", Radio.Read( REG_VERSION ) );
+ if( Radio.DetectBoardType( ) == SX1276MB1LAS )
+ {
+ debug( DEBUG_MESSAGE, "\n\r > Board Type: SX1276MB1LAS < \n\r" );
+ }
+ else
+ {
+ debug( DEBUG_MESSAGE, "\n\r > Board Type: SX1276MB1MAS < \n\r" );
+ }
+
+ debug( DEBUG_MESSAGE, " > Chipset Version = 0x%x < \n\r", Radio.Read( REG_VERSION ) );
Radio.SetChannel( RF_FREQUENCY );
@@ -162,7 +171,7 @@
{
if( strncmp( ( const char* )Buffer, ( const char* )PongMsg, 4 ) == 0 )
{
- debug( "Pong...\r\n" );
+ debug( "...Pong\r\n" );
// Send the next PING frame
Buffer[0] = 'P';
Buffer[1] = 'I';
@@ -176,12 +185,28 @@
wait_ms( 10 );
Radio.Send( Buffer, BufferSize );
}
- else if( strncmp( ( const char* )Buffer,
- ( const char* )PingMsg, 4 ) == 0 )
+ else if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, 4 ) == 0 )
{ // A master already exists then become a slave
+ debug( "...Ping\r\n" );
isMaster = false;
+ // Send the next PING frame
+ Buffer[0] = 'P';
+ Buffer[1] = 'O';
+ Buffer[2] = 'N';
+ Buffer[3] = 'G';
+ // We fill the buffer with numbers for the payload
+ for( i = 4; i < BufferSize; i++ )
+ {
+ Buffer[i] = i - 4;
+ }
+ // wait_ms( 10 );
+ Radio.Send( Buffer, BufferSize );
+ }
+ else // valid reception but neither a PING or a PONG message
+ { // Set device as master ans start again
+ isMaster = true;
Radio.Rx( RX_TIMEOUT_VALUE );
- }
+ }
}
}
else
@@ -190,8 +215,8 @@
{
if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, 4 ) == 0 )
{
- debug( "Ping...\r\n" );
- // Send the reply to the PONG string
+ debug( "...Ping\r\n" );
+ // Send the reply to the PING string
Buffer[0] = 'P';
Buffer[1] = 'O';
Buffer[2] = 'N';
@@ -204,20 +229,24 @@
wait_ms( 10 );
Radio.Send( Buffer, BufferSize );
}
+ else // valid reception but not a PING as expected
+ { // Set device as master and start again
+ isMaster = true;
+ Radio.Rx( RX_TIMEOUT_VALUE );
+ }
}
}
State = LOWPOWER;
break;
- case TX:
- if ( isMaster )
+ case TX:
+ if( isMaster == true )
{
- debug("...Ping\r\n" );
+ debug( "Ping...\r\n" );
}
else
{
- debug("...Pong\r\n" );
+ debug( "Pong...\r\n" );
}
-
Radio.Rx( RX_TIMEOUT_VALUE );
State = LOWPOWER;
break;
@@ -259,7 +288,17 @@
}
else
{
- Radio.Rx( RX_TIMEOUT_VALUE );
+ // Send the next PONG frame
+ Buffer[0] = 'P';
+ Buffer[1] = 'O';
+ Buffer[2] = 'N';
+ Buffer[3] = 'G';
+ for( i = 4; i < BufferSize; i++ )
+ {
+ Buffer[i] = i - 4;
+ }
+ wait_ms( 10 );
+ Radio.Send( Buffer, BufferSize );
}
State = LOWPOWER;
break;
@@ -278,13 +317,13 @@
void OnTxDone( void )
{
- debug( DEBUG_MESSAGE, ":OnTxDone\n\r" );
+ debug( DEBUG_MESSAGE, "> OnTxDone\n\r" );
State = TX;
}
void OnRxDone( uint8_t *payload, uint16_t size, int8_t rssi, int8_t snr)
{
- debug( DEBUG_MESSAGE, ":OnRxDone\n\r" );
+ debug( DEBUG_MESSAGE, "> OnRxDone\n\r" );
Radio.Sleep( );
BufferSize = size;
memcpy( Buffer, payload, BufferSize );
@@ -295,14 +334,14 @@
void OnTxTimeout( void )
{
- debug( DEBUG_MESSAGE, ":OnTxTimeout\n\r" );
+ debug( DEBUG_MESSAGE, "> OnTxTimeout\n\r" );
Radio.Sleep( );
State = TX_TIMEOUT;
}
void OnRxTimeout( void )
{
- debug( DEBUG_MESSAGE, ":OnRxTimeout\n\r" );
+ debug( DEBUG_MESSAGE, "> OnRxTimeout\n\r" );
Radio.Sleep( );
Buffer[ BufferSize ] = 0;
State = RX_TIMEOUT;
@@ -310,7 +349,7 @@
void OnRxError( void )
{
- debug( DEBUG_MESSAGE, ":OnRxError\n\r" );
+ debug( DEBUG_MESSAGE, "> OnRxError\n\r" );
Radio.Sleep( );
State = RX_ERROR;
}
