Changeset - 2a60a19d0303
[Not reviewed]
default
0 1 0
Ethan Zonca - 8 years ago 2017-09-23 11:08:30
ez@ethanzonca.com
Fix encoding, add some dummy values, code compiles and might work now
1 file changed with 15 insertions and 7 deletions:
0 comments (0 inline, 0 general)
src/wspr.c
Show inline comments
 
@@ -99,7 +99,7 @@ void wspr_transmit(uint8_t* grid_locator
 

	
 
        // Encode to callsign
 
        if(chunk < 10)
 
            call[1] = '0' + chunk
 
            call[1] = '0' + chunk;
 
        else
 
            call[1] = chunk - 10 + 'A';
 

	
 
@@ -112,7 +112,7 @@ void wspr_transmit(uint8_t* grid_locator
 
        call[3] = 'A' + chunk;
 

	
 
        // Subtract off previous portion
 
        subalt -= (chunk * 26 * 26)
 
        subalt -= (chunk * 26 * 26);
 

	
 
        // Mask off following 1 26bit values
 
        chunk = (subalt / 26);
 
@@ -131,19 +131,25 @@ void wspr_transmit(uint8_t* grid_locator
 
        ////////////////////////////////////////
 

	
 
        // Encode value from -50C to 39C => 0-89. TODO: Bounds!
 
        uint8_t temp_enc = 0 + 50;
 
        uint8_t temp_enc = 12 + 50;
 

	
 
        // Encode value from 0-39 with some scalar/offset/etc
 
        uint8_t batt_enc = 0; 
 
        uint8_t batt_enc = 16; 
 

	
 
        // Encode speed in knots from 0-82 to 0-41
 
        uint8_t speed_enc = gpsdata()->speed / 2;
 
        uint8_t speed_enc = gps_getdata()->speed / 2;
 
        if(speed_enc > 41)
 
            speed_enc = 41;
 

	
 
        // Encode GPS status
 
        uint8_t gps_status = 0b00; // MSB is valid fix, lsb is sats > 8
 

	
 
        if(gps_getdata()->fixtype == 2 || gps_getdata()->fixtype == 3)
 
            gps_status |= 0b10;
 

	
 
        if(gps_getdata()->sats_in_solution > 5)
 
            gps_status |= 0b01;
 

	
 
        uint32_t engdata = gps_status + 2 * (speed_enc + 42 * (batt_enc + 40 * temp_enc));
 

	
 
        ////////////////////////////////////////////
 
@@ -172,7 +178,7 @@ void wspr_transmit(uint8_t* grid_locator
 
        chunk = engdata / 10 / 19;  
 

	
 
        // Encode
 
        grid_locater[2] = '0' + chunk;
 
        grid_locator[2] = '0' + chunk;
 

	
 
        // Subtract
 
        engdata -= (chunk * 10 * 19);  
 
@@ -190,8 +196,10 @@ void wspr_transmit(uint8_t* grid_locator
 
        chunk = engdata;  
 

	
 
        // Encode
 
        uint8_t powers[] = {0, 3, 7, 10, 13, 17, 20, 23, 27, 30, 33, 37, 40, 43, 47, 50, 53, 57, 60}
 
        uint8_t powers[] = {0, 3, 7, 10, 13, 17, 20, 23, 27, 30, 33, 37, 40, 43, 47, 50, 53, 57, 60};
 
        dbm = powers[chunk];
 

	
 

	
 
    }
 
    else
 
    {
0 comments (0 inline, 0 general)