@@ -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 */
203203void 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