V1.8.129 Tidied and fixed use of AFC; limit message uplink to length of actual message

pull/40/head^2
Dave Akerman 2019-06-13 07:48:41 +00:00
rodzic cfd29f0589
commit ed91ad1f1f
7 zmienionych plików z 35 dodań i 26 usunięć

Wyświetl plik

@ -229,6 +229,16 @@ Many thanks to David Brooke for coding this feature and the AFC.
Change History Change History
============== ==============
13/06/2019 - V1.8.29
--------------------
Fixed bug where only the first sentence in a multi-sentence packet was uploaded to Habitat
Fixed bug where the message uplink sent 255 bytes even if message was shorter
Fixed bug where after leaving help screen screen shows original frequency not AFC'd frequency
Fixed bug where AFC correction was lost after uplink
AFC correction is now upplied to uplink
09/05/2019 - V1.8.28 09/05/2019 - V1.8.28
-------------------- --------------------

Wyświetl plik

@ -45,7 +45,7 @@
#include "udpclient.h" #include "udpclient.h"
#include "lifo_buffer.h" #include "lifo_buffer.h"
#define VERSION "V1.8.28" #define VERSION "V1.8.29"
bool run = TRUE; bool run = TRUE;
// RFM98 // RFM98
@ -475,10 +475,6 @@ void setFrequency( int Channel, double Frequency )
writeRegister( Channel, 0x07, ( FrequencyValue >> 8 ) & 0xFF ); writeRegister( Channel, 0x07, ( FrequencyValue >> 8 ) & 0xFF );
writeRegister( Channel, 0x08, FrequencyValue & 0xFF ); writeRegister( Channel, 0x08, FrequencyValue & 0xFF );
Config.LoRaDevices[Channel].activeFreq = Frequency;
// LogMessage("Set Frequency to %lf\n", Frequency);
ChannelPrintf( Channel, 1, 1, "Channel %d %s MHz ", Channel, FrequencyString ); ChannelPrintf( Channel, 1, 1, "Channel %d %s MHz ", Channel, FrequencyString );
} }
@ -501,7 +497,7 @@ void setLoRaMode( int Channel )
setMode( Channel, RF98_MODE_SLEEP ); setMode( Channel, RF98_MODE_SLEEP );
setFrequency( Channel, Config.LoRaDevices[Channel].Frequency); setFrequency( Channel, Config.LoRaDevices[Channel].Frequency + Config.LoRaDevices[Channel].FrequencyOffset);
} }
int IntToSF(int Value) int IntToSF(int Value)
@ -627,8 +623,9 @@ void ReTune( int Channel, double FreqShift )
{ {
setMode( Channel, RF98_MODE_SLEEP ); setMode( Channel, RF98_MODE_SLEEP );
LogMessage( "Retune by %.1lfkHz\n", FreqShift * 1000 ); LogMessage( "Retune by %.1lfkHz\n", FreqShift * 1000 );
setFrequency( Channel, Config.LoRaDevices[Channel].activeFreq + FreqShift ); Config.LoRaDevices[Channel].FrequencyOffset += FreqShift;
startReceiving( Channel ); setFrequency(Channel, Config.LoRaDevices[Channel].Frequency + Config.LoRaDevices[Channel].FrequencyOffset);
startReceiving(Channel);
} }
void SendLoRaData(int Channel, char *buffer, int Length) void SendLoRaData(int Channel, char *buffer, int Length)
@ -639,8 +636,8 @@ void SendLoRaData(int Channel, char *buffer, int Length)
// Change frequency for the uplink ? // Change frequency for the uplink ?
if (Config.LoRaDevices[Channel].UplinkFrequency > 0) if (Config.LoRaDevices[Channel].UplinkFrequency > 0)
{ {
LogMessage("Change frequency to %.3lfMHz\n", Config.LoRaDevices[Channel].UplinkFrequency); LogMessage("Change frequency to %.3lfMHz\n", Config.LoRaDevices[Channel].UplinkFrequency + Config.LoRaDevices[Channel].FrequencyOffset);
setFrequency(Channel, Config.LoRaDevices[Channel].UplinkFrequency); setFrequency(Channel, Config.LoRaDevices[Channel].UplinkFrequency + Config.LoRaDevices[Channel].FrequencyOffset);
} }
// Change mode for the uplink ? // Change mode for the uplink ?
@ -730,7 +727,7 @@ void ProcessCallingMessage(int Channel, char *Message)
{ {
if (Config.LoRaDevices[Channel].AFC) if (Config.LoRaDevices[Channel].AFC)
{ {
Frequency += (Config.LoRaDevices[Channel].activeFreq - Config.LoRaDevices[Channel].Frequency); Frequency += Config.LoRaDevices[Channel].FrequencyOffset;
} }
LogMessage( "Ch %d: Calling message, new frequency %7.3lf\n", Channel, LogMessage( "Ch %d: Calling message, new frequency %7.3lf\n", Channel,
@ -739,7 +736,6 @@ void ProcessCallingMessage(int Channel, char *Message)
// Decoded OK // Decoded OK
setMode( Channel, RF98_MODE_SLEEP ); setMode( Channel, RF98_MODE_SLEEP );
// setFrequency(Channel, Config.LoRaDevices[Channel].activeFreq + );
setFrequency( Channel, Frequency ); setFrequency( Channel, Frequency );
SetLoRaParameters( Channel, ImplicitOrExplicit, ECToInt(ErrorCoding), BandwidthToDouble(Bandwidth), SFToInt(SpreadingFactor), LowOptToInt(LowDataRateOptimize)); SetLoRaParameters( Channel, ImplicitOrExplicit, ECToInt(ErrorCoding), BandwidthToDouble(Bandwidth), SFToInt(SpreadingFactor), LowOptToInt(LowDataRateOptimize));
@ -747,8 +743,6 @@ void ProcessCallingMessage(int Channel, char *Message)
setMode( Channel, RF98_MODE_RX_CONTINUOUS ); setMode( Channel, RF98_MODE_RX_CONTINUOUS );
Config.LoRaDevices[Channel].InCallingMode = 1; Config.LoRaDevices[Channel].InCallingMode = 1;
// ChannelPrintf(Channel, 1, 1, "Channel %d %7.3lfMHz ", Channel, Frequency);
} }
} }
@ -762,7 +756,7 @@ void ProcessCallingHABpack(int Channel, received_t *Received)
if (Config.LoRaDevices[Channel].AFC) if (Config.LoRaDevices[Channel].AFC)
{ {
Frequency += (Config.LoRaDevices[Channel].activeFreq - Config.LoRaDevices[Channel].Frequency); Frequency += Config.LoRaDevices[Channel].FrequencyOffset;
} }
// Decoded OK // Decoded OK
@ -1046,15 +1040,16 @@ int ProcessTelemetryMessage(int Channel, received_t *Received)
*startmessage = '$'; *startmessage = '$';
} }
strcpy( Config.LoRaDevices[Channel].Telemetry, startmessage ); strcpy(Config.LoRaDevices[Channel].Telemetry, startmessage);
Config.LoRaDevices[Channel].TelemetryCount++; Config.LoRaDevices[Channel].TelemetryCount++;
if ( Config.EnableHabitat ) if (Config.EnableHabitat)
{ {
// Add to Habitat upload queue // Add to Habitat upload queue
received_t *queueReceived = malloc(sizeof(received_t)); received_t *queueReceived = malloc(sizeof(received_t));
if(queueReceived != NULL) if(queueReceived != NULL)
{ {
strcpy(Received->HabitatString, startmessage);
memcpy(queueReceived, Received, sizeof(received_t)); memcpy(queueReceived, Received, sizeof(received_t));
/* We haven't copied the linked list, this'll be free()ed later, so remove pointer */ /* We haven't copied the linked list, this'll be free()ed later, so remove pointer */
queueReceived->Telemetry.habpack_extra = NULL; queueReceived->Telemetry.habpack_extra = NULL;
@ -1469,7 +1464,7 @@ int GetExternalListOfMissingSSDVPackets( int Channel, char *Message )
return 0; return 0;
} }
void SendUplinkMessage( int Channel ) void SendUplinkMessage(int Channel)
{ {
char Message[512]; char Message[512];
time_t now; time_t now;
@ -1489,9 +1484,9 @@ void SendUplinkMessage( int Channel )
*Config.LoRaDevices[Channel].UplinkMessage = 0; *Config.LoRaDevices[Channel].UplinkMessage = 0;
} }
} }
else if (GetTextMessageToUpload( Channel, Message)) else if (GetTextMessageToUpload(Channel, Message))
{ {
SendLoRaData(Channel, Message, 255); SendLoRaData(Channel, Message, strlen(Message));
} }
else if (GetExternalListOfMissingSSDVPackets( Channel, Message)) else if (GetExternalListOfMissingSSDVPackets( Channel, Message))
{ {
@ -1738,8 +1733,7 @@ double FrequencyError( int Channel )
return -( ( double ) Temp * ( 1 << 24 ) / 32000000.0 ) * (Config.LoRaDevices[Channel].CurrentBandwidth / 500.0); return -( ( double ) Temp * ( 1 << 24 ) / 32000000.0 ) * (Config.LoRaDevices[Channel].CurrentBandwidth / 500.0);
} }
int int receiveMessage( int Channel, char *message, rx_metadata_t *Metadata )
receiveMessage( int Channel, char *message, rx_metadata_t *Metadata )
{ {
int i, Bytes, currentAddr, x; int i, Bytes, currentAddr, x;
unsigned char data[257]; unsigned char data[257];
@ -1792,7 +1786,7 @@ receiveMessage( int Channel, char *message, rx_metadata_t *Metadata )
message[Bytes] = '\0'; message[Bytes] = '\0';
Metadata->Timestamp = time( NULL ); Metadata->Timestamp = time( NULL );
Metadata->Frequency = Config.LoRaDevices[Channel].activeFreq; Metadata->Frequency = Config.LoRaDevices[Channel].Frequency + Config.LoRaDevices[Channel].FrequencyOffset;
Metadata->FrequencyError = FreqError / 1000; Metadata->FrequencyError = FreqError / 1000;
Metadata->ImplicitOrExplicit = Config.LoRaDevices[Channel].ImplicitOrExplicit; Metadata->ImplicitOrExplicit = Config.LoRaDevices[Channel].ImplicitOrExplicit;
Metadata->Bandwidth = Config.LoRaDevices[Channel].CurrentBandwidth; Metadata->Bandwidth = Config.LoRaDevices[Channel].CurrentBandwidth;
@ -1888,6 +1882,9 @@ void LoadConfigFile(void)
Config.LoRaDevices[0].Frequency = -1; Config.LoRaDevices[0].Frequency = -1;
Config.LoRaDevices[1].Frequency = -1; Config.LoRaDevices[1].Frequency = -1;
Config.LoRaDevices[0].FrequencyOffset = 0;
Config.LoRaDevices[1].FrequencyOffset = 0;
if ( ( fp = fopen( filename, "r" ) ) == NULL ) if ( ( fp = fopen( filename, "r" ) ) == NULL )
{ {
exit_error("Failed to open config file\n"); exit_error("Failed to open config file\n");
@ -2384,7 +2381,7 @@ void SendTelnetMessage(int Channel, struct TServerInfo *TelnetInfo, int TimedOut
void displayChannel (int Channel) { void displayChannel (int Channel) {
displayFrequency ( Channel, Config.LoRaDevices[Channel].Frequency ); displayFrequency ( Channel, Config.LoRaDevices[Channel].Frequency + Config.LoRaDevices[Channel].FrequencyOffset);
displayLoRaParameters( displayLoRaParameters(
Channel, Channel,

Wyświetl plik

@ -31,13 +31,14 @@ struct TLoRaDevice
{ {
double Frequency; double Frequency;
double PPM; double PPM;
double FrequencyOffset;
double Bandwidth; double Bandwidth;
double CurrentBandwidth; double CurrentBandwidth;
int InUse; int InUse;
int DIO0; int DIO0;
int DIO5; int DIO5;
double activeFreq;
int AFC; // Enable Automatic Frequency Control int AFC; // Enable Automatic Frequency Control
double MaxAFCStep; // Maximum adjustment, in kHz, per packet double MaxAFCStep; // Maximum adjustment, in kHz, per packet
@ -200,6 +201,7 @@ typedef struct {
int Bytes; int Bytes;
/* UKHAS ASCII Telemetry String for habitat upload */ /* UKHAS ASCII Telemetry String for habitat upload */
char UKHASstring[UKHASstring_length]; char UKHASstring[UKHASstring_length];
char HabitatString[UKHASstring_length];
bool isCallingBeacon; bool isCallingBeacon;
double AscentRate; double AscentRate;
/* Telemetry values */ /* Telemetry values */

0
gra 100755
Wyświetl plik

Wyświetl plik

@ -84,7 +84,7 @@ bool UploadTelemetryPacket( received_t * t )
strftime( doc_time, sizeof( doc_time ), "%Y-%0m-%0dT%H:%M:%SZ", doc_tm ); strftime( doc_time, sizeof( doc_time ), "%Y-%0m-%0dT%H:%M:%SZ", doc_tm );
// Grab current telemetry string and append a linefeed // Grab current telemetry string and append a linefeed
sprintf( Sentence, "%s\n", t->UKHASstring ); sprintf(Sentence, "%s\n", t->HabitatString);
// Convert sentence to base64 // Convert sentence to base64
base64_encode( Sentence, strlen( Sentence ), &base64_length, base64_encode( Sentence, strlen( Sentence ), &base64_length,

0
udpclient.c 100755 → 100644
Wyświetl plik

0
udpclient.h 100755 → 100644
Wyświetl plik