Changeset - c5bc128e44a6
[Not reviewed]
default
0 3 0
Ethan Zonca - 10 years ago 2016-04-02 20:44:19
ez@ethanzonca.com
WSPR and gps now coexist, don't call jtencode_init because it inits the reed-solomon encoder that wspr doesn't even use
3 files changed with 63 insertions and 35 deletions:
0 comments (0 inline, 0 general)
STM32F031G6_FLASH.ld
Show inline comments
 
@@ -35,7 +35,7 @@ ENTRY(Reset_Handler)
 

	
 
/* Generate a link error if heap and stack don't fit into RAM */
 
_Min_Heap_Size = 0;      /* required amount of heap  */
 
_Min_Stack_Size = 0x300; /* required amount of stack */
 
_Min_Stack_Size = 0x200; /* required amount of stack */
 

	
 
/* Specify the memory areas */
 
MEMORY
lib/jtencode/jtencode.c
Show inline comments
 
@@ -57,6 +57,19 @@ char locator[5];
 
uint8_t power;
 

	
 

	
 
static void emz_memcpy( uint8_t *pDest, uint8_t *pSrc, uint32_t len )
 
{
 
    uint32_t i;
 

	
 
    // Manually copy the data
 
    for ( i = 0; i < len; i++ )
 
    {
 
        // Copy data from source to destination
 
        *pDest++ = *pSrc++;
 
    }
 
}
 

	
 

	
 
/* Public Class Members */
 

	
 
void* jtencode_init(void)
 
@@ -163,29 +176,30 @@ void jt9_encode(char * message, uint8_t 
 
 */
 
void jt4_encode(char * message, uint8_t * symbols)
 
{
 
    // emz comment memmove
 
  // Ensure that the message text conforms to standards
 
  // --------------------------------------------------
 
  jt_message_prep(message);
 

	
 
  // Bit packing
 
  // -----------
 
  uint8_t c[13];
 
  jt9_bit_packing(message, c);
 

	
 
  // Convolutional Encoding
 
  // ---------------------
 
  uint8_t s[JT4_SYMBOL_COUNT];
 
  convolve(c, s, 13, JT4_BIT_COUNT);
 

	
 
  // Interleaving
 
  // ------------
 
  jt9_interleave(s);
 
  memmove(s + 1, s, JT4_BIT_COUNT);
 
  s[0] = 0; // Append a 0 bit to start of sequence
 

	
 
  // Merge with sync vector
 
  // ----------------------
 
  jt4_merge_sync_vector(s, symbols);
 
//  // --------------------------------------------------
 
//  jt_message_prep(message);
 
//
 
//  // Bit packing
 
//  // -----------
 
//  uint8_t c[13];
 
//  jt9_bit_packing(message, c);
 
//
 
//  // Convolutional Encoding
 
//  // ---------------------
 
//  uint8_t s[JT4_SYMBOL_COUNT];
 
//  convolve(c, s, 13, JT4_BIT_COUNT);
 
//
 
//  // Interleaving
 
//  // ------------
 
//  jt9_interleave(s);
 
//  memmove(s + 1, s, JT4_BIT_COUNT);
 
//  s[0] = 0; // Append a 0 bit to start of sequence
 
//
 
//  // Merge with sync vector
 
//  // ----------------------
 
//  jt4_merge_sync_vector(s, symbols);
 
}
 

	
 
/*
 
@@ -194,9 +208,9 @@ void jt4_encode(char * message, uint8_t 
 
 * Takes an arbitrary message of up to 13 allowable characters and returns
 
 *
 
 * call - Callsign (6 characters maximum).
 
 * loc - Maidenhead grid locator (4 charcters maximum).
 
 * loc - Maidenhead grid locator (4 characters maximum).
 
 * dbm - Output power in dBm.
 
 * symbols - Array of channel symbols to transmit retunred by the method.
 
 * symbols - Array of channel symbols to transmit returned by the method.
 
 *  Ensure that you pass a uint8_t array of size WSPR_SYMBOL_COUNT to the method.
 
 *
 
 */
 
@@ -332,8 +346,18 @@ void wspr_message_prep(char * call, char
 
	// longer than 5 characters.
 
	if((call[1] >= '0' && call[1] <= '9') && (call[2] < '0' || call[2] > '9'))
 
	{
 
		memmove(call + 1, call, 5);
 
		//memmove(call + 1, call, 5);
 
		//call[0] = ' ';
 

	
 
	    call[6] = '\0';
 
		call[5] = call[4];
 
		call[4] = call[3];
 
		call[3] = call[2];
 
		call[2] = call[1];
 
		call[1] = call[0];
 
		call[0] = ' ';
 

	
 

	
 
	}
 

	
 
	// Now the 3rd charcter in the callsign must be a digit
 
@@ -355,7 +379,7 @@ void wspr_message_prep(char * call, char
 
		}
 
	}
 

	
 
  memcpy(callsign, call, 6);
 
	emz_memcpy(callsign, call, 6);
 

	
 
	// Grid locator validation
 
	for(i = 0; i < 4; i++)
 
@@ -367,7 +391,7 @@ void wspr_message_prep(char * call, char
 
		}
 
	}
 

	
 
  memcpy(locator, loc, 4);
 
	emz_memcpy(locator, loc, 4);
 

	
 
	// Power level validation
 
	// Only certain increments are allowed
 
@@ -561,7 +585,7 @@ void jt65_interleave(uint8_t * s)
 
    }
 
  }
 

	
 
  memcpy(s, d, JT65_ENCODE_COUNT);
 
  emz_memcpy(s, d, JT65_ENCODE_COUNT);
 
}
 

	
 
void jt9_interleave(uint8_t * s)
 
@@ -600,7 +624,7 @@ void jt9_interleave(uint8_t * s)
 
    d[j0[i]] = s[i];
 
  }
 

	
 
  memcpy(s, d, JT9_BIT_COUNT);
 
  emz_memcpy(s, d, JT9_BIT_COUNT);
 
}
 

	
 
void wspr_interleave(uint8_t * s)
 
@@ -637,14 +661,19 @@ void wspr_interleave(uint8_t * s)
 
		}
 
	}
 

	
 
  memcpy(s, d, WSPR_BIT_COUNT);
 
	emz_memcpy(s, d, WSPR_BIT_COUNT);
 
}
 

	
 
void jt9_packbits(uint8_t * d, uint8_t * a)
 
{
 
  uint8_t i, k;
 
  k = 0;
 
  memset(a, 0, JT9_ENCODE_COUNT);
 

	
 
  //memset(a, 0, JT9_ENCODE_COUNT);
 
  for(uint8_t iter = 0; iter<JT9_ENCODE_COUNT; iter++)
 
  {
 
      a[iter] = 0;
 
  }
 

	
 
  for(i = 0; i < JT9_ENCODE_COUNT; i++)
 
  {
src/main.c
Show inline comments
 
@@ -97,7 +97,6 @@ int main(void)
 
    i2c_init();
 
    gps_init();
 
 
 
//    jtencode_init();
 
 
    HAL_Delay(300);
 
@@ -127,7 +126,7 @@ int main(void)
 
 
    uint32_t led_timer = HAL_GetTick();
 
    uint32_t last_gps  = HAL_GetTick();
 
    uint32_t last_wspr  = 0xfffff; // start immediately.
 
    uint32_t last_wspr  = HAL_GetTick(); //0xfffff; // start immediately.
 
 
    HAL_GPIO_TogglePin(LED_BLUE);
 
    HAL_Delay(100);
 
@@ -143,7 +142,7 @@ int main(void)
 
    {
 
        if(HAL_GetTick() - last_wspr > 120000)
 
        {
 
            //encode_wspr();
 
            encode_wspr();
 
            last_wspr = HAL_GetTick();
 
        }
 
0 comments (0 inline, 0 general)