Skip to content

Commit 920358b

Browse files
committed
Callsign validation fixes, code cleanup
1 parent 9b8d6c4 commit 920358b

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

src/JTEncode.cpp

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ JTEncode::JTEncode(void)
4949
{
5050
// Initialize the Reed-Solomon encoder
5151
rs_inst = (struct rs *)(intptr_t)init_rs_int(6, 0x43, 3, 1, 51, 0);
52-
memset(callsign, 0, 12);
52+
// memset(callsign, 0, 13);
5353
}
5454

5555
/*
@@ -193,7 +193,7 @@ void JTEncode::jt4_encode(const char * msg, uint8_t * symbols)
193193
* Takes a callsign, grid locator, and power level and returns a WSPR symbol
194194
* table for a Type 1, 2, or 3 message.
195195
*
196-
* call - Callsign (11 characters maximum).
196+
* call - Callsign (12 characters maximum).
197197
* loc - Maidenhead grid locator (6 characters maximum).
198198
* dbm - Output power in dBm.
199199
* symbols - Array of channel symbols to transmit returned by the method.
@@ -202,7 +202,7 @@ void JTEncode::jt4_encode(const char * msg, uint8_t * symbols)
202202
*/
203203
void JTEncode::wspr_encode(const char * call, const char * loc, const int8_t dbm, uint8_t * symbols)
204204
{
205-
char call_[12];
205+
char call_[13];
206206
char loc_[7];
207207
uint8_t dbm_ = dbm;
208208
strcpy(call_, call);
@@ -624,15 +624,16 @@ void JTEncode::wspr_message_prep(char * call, char * loc, int8_t dbm)
624624
uint8_t i;
625625
for(i = 0; i < 12; i++)
626626
{
627-
if(callsign[i] != '/' && callsign[i] != '<' && callsign[i] != '>')
627+
if(call[i] != '/' && call[i] != '<' && call[i] != '>')
628628
{
629-
callsign[i] = toupper(callsign[i]);
630-
if(!(isdigit(callsign[i]) || isupper(callsign[i])))
629+
call[i] = toupper(call[i]);
630+
if(!(isdigit(call[i]) || isupper(call[i])))
631631
{
632-
callsign[i] = ' ';
632+
call[i] = ' ';
633633
}
634634
}
635635
}
636+
call[12] = 0;
636637

637638
strncpy(callsign, call, 12);
638639

@@ -815,8 +816,8 @@ void JTEncode::wspr_bit_packing(uint8_t * c)
815816
if(callsign[0] == '<')
816817
{
817818
// Type 3 message
818-
char base_call[12];
819-
memset(base_call, 0, 12);
819+
char base_call[13];
820+
memset(base_call, 0, 13);
820821
uint32_t init_val = 146;
821822
char* bracket_avail = strchr(callsign, (int)'>');
822823
int call_len = bracket_avail - callsign - 1;
@@ -1575,10 +1576,15 @@ void JTEncode::pad_callsign(char * call)
15751576
{
15761577
// If only the 2nd character is a digit, then pad with a space.
15771578
// If this happens, then the callsign will be truncated if it is
1578-
// longer than 5 characters.
1579+
// longer than 6 characters.
15791580
if(isdigit(call[1]) && isupper(call[2]))
15801581
{
1581-
memmove(call + 1, call, 5);
1582+
// memmove(call + 1, call, 6);
1583+
call[5] = call[4];
1584+
call[4] = call[3];
1585+
call[3] = call[2];
1586+
call[2] = call[1];
1587+
call[1] = call[0];
15821588
call[0] = ' ';
15831589
}
15841590

0 commit comments

Comments
 (0)