GithubHelp home page GithubHelp logo

etherkit / jtencode Goto Github PK

View Code? Open in Web Editor NEW
94.0 15.0 32.0 361 KB

JT65/JT9/JT4/WSPR/FSQ Encoder Library for Arduino

License: GNU General Public License v3.0

C++ 57.58% C 42.42%
wspr arduino fsq jt65 jt9 jt4 ft8

jtencode's People

Contributors

nt7s avatar per1234 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jtencode's Issues

Please help trying your library

Hi there!
Since the demo does not seems to work for me, i've started with a blank project and copied part of your code into mine.

Can someone explain me why it hangs on

si5351.set_freq((freq * 100) + (tx_buffer[i] * tone_spacing), SI5351_CLK0); // HANGS HERE!!!!!!!!!!

The code is located here:

http://pastebin.com/QzXLnbCK

Many many thanks!

Project is missing COPYING file at top level

Hi,
It looks like this might be a GPL v3 project based on the header file license block.

  1. If so, if likely should have a COPYING file with the text of the GPL v3 in it
  2. The Readme.md file should be updated to contain a license section.

thanks!

variable callsigin: length correct?

I read through the code because I had an other problem and searched for all occurences of strcpy, strncpy, ..

I see the following problem with callsign, defined in JTEncode.h:
char callsign[12];

We know, compound calls in wspr type2 messages are 12 bytes long: <DL9/DL9SAU>, plus the terminating \0.

JTEncode.cpp does:
strncpy(callsign, call, 12);
-> No buffer overflow, but the copied 12 bytes long string is not terminated.
The operation further down,
char* slash_avail = strchr(callsign, (int)'/');
may search for '/' beyond end of char[] callsign (if user had a wrong input). Same for
char* bracket_avail = strchr(callsign, (int)'>');

Fix:
I see no reason to keep char callsign 12 bytes long.
-> Define in JTEncode.h
char callsign[13];
should solve the hypothetical problem.

Saving some more memory - solutions

Hi

Great library, thank you for all your work.

A few ways to save more memory - I saved 562 bytes of flash and 530 bytes of flash with these changes through suggestions made to me:

Moved the tables from jt65_merge_sync_vector, jt9_merge_sync_vector, jt4_merge_sync_vector and wspr_sync_vector all to PROGMEM and read back via pgm_read_byte(wspr_sync_vector +i) etc.

In ft8_merge_sync_vector moved costas7x7 and graymap to PROGMEM. Then memcpy_P and pgm_read_byte(&graymap[idx]) to read them back:

`void JTEncode::ft8_merge_sync_vector(uint8_t* symbols, uint8_t* output)
{
static const uint8_t PROGMEM costas7x7[7] = {3, 1, 4, 0, 6, 5, 2};
static const uint8_t PROGMEM graymap[8] = {0, 1, 3, 2, 5, 6, 4, 7};
uint8_t i, j, k, idx;

// Insert Costas sync arrays
memcpy_P(output, costas7x7, 7);
memcpy_P(output + 36, costas7x7, 7);
memcpy_P(output + FT8_SYMBOL_COUNT - 7, costas7x7, 7);

k = 6;
for(j = 0; j < 58; ++j) // 58 data symbols
{
i = 3 * j;
++k;
if(j == 29)
{
k += 7;
}
idx = symbols[i] * 4 + symbols[i + 1] * 2 + symbols[i + 2];
output[k] = pgm_read_byte(&graymap[idx]);
}
}`

If you would rather a pull request I can do that.

Thanks very much
Kevin

Incompatibility with TinyGPSPlus?

Hi!
Yes...it's me again...but this time i think the problem is very hard to investigate...
The library and my project worked ok till now...but...
If i simply add

TinyGPSPlus gpsext;

The jtencode.jt65_encode(message, tx_buffer); doesn't work anymore

If i remove the TinyGPSPlus declaration (i've only added the declaration!!!! and the #include <TinyGPS++.h>) everythings works ok.

Leaving the #include <TinyGPS++.h> and not declaring the gpsext object, it works ok.

I've NO idea how to investigate this strange thing...the examples examples of TiniGPS++ works ok, the jtencode works ok.....but when i use the 2 libraryes in the same project jt65_encode(message, tx_buffer); hangs somewhere

Add CW Mode

Is it possible for you to add CW mode? It could be very easy...

FT8 on 144MHz.

Hello Jason,
Playing with Si5351JTDemo ( using <si5351.h> v. 2.1.4 and <JTEncode.h> v.1.2.1 ) I met the following problem - transmiting of FT8 (also on JT4) text on 144MHz is interrupted on every new tone, breaks and starts of transmition occures everytime frequency has changed. It's looks like Si5351 could not locks the frequencies. This problem is missing on HF, 50 and 70MHz. I've tried with different chips and reference frequencies ( 25MHz, 26MHz and 27Mhz) but without any luck. Any suggestion ?
Thank you very much for your great support to the HAM community !
Best regards,
Georgi LZ1ZP

Bug in FT8 Telemetry mode and an easy fix. (Atmel tool chain and possibly others)

There is a bug in the FT8 telemetry mode code.

In JTEncode.cpp line 887 the line: snprintf(temp_msg, 19, "%*s", 18, c18); sets temp_msg to a zero length string. This causes the variable "message" further down in the code to have a zero 1st byte and corrupts the telemetry message.

Replace the snprintf call with the following: snprintf(temp_msg, 19, "%18s", c18);

I am running the code on an Arduno Pro Mini (Atmel chip) and it appears that the %*s formatter is not functioning correctly on this tool chain. Since the length is hard coded, the simpler %18s will work.

73s de KJ6FO

Hang on jtencode

Please, i'm very frustrated now...
I've started a very little project from your demo (that seems TO ME to not being working).
The problem is when i use the function

jtencode.jt65_encode(message, tx_buffer);

It seems to stop my arduino

My code is here:

http://pastebin.com/X7bz84JB

The offending line is the n. 61

If I uncomment that line, the program/arduino hangs, instead if i comment that line everything works (ok...no jt65 good message, but i can see the carriers on the spectrum of my sdr).

PLEASE, any help is very appreciated!

WSPR Callsign with one char prefix failed.

Hello,
I did have some trouble with a one char prefix in the wspr callsign (F/PE0FKO), it was not received by the wspr systems.
Did check the code for the JTEncode::wspr_encode() function and found the problem in JTEncode::wspr_bit_packing(). There, in the function line 1000, the 3 and 2 char prefix is handled, only the one char prefix is not!
I fixed the code with some extra if statement for the 1 char prefix and it works (for me ;-)), maybe you update the repo for that.
73, Fred, pe0fko

Add CW mode

Hi!
It would be great if you can add CW mode (wanna build a sort of multimode beacon with your library).

Greeting Mike iu5hes

String overflow in jt_message_prep

Hi! I noticed today that in jt_message_prep, the code that pads a short string (less than 13 characters) with spaces overwrites the terminating null byte (undesirable).

This

  if(len < 13)
  {
    for(i = len; i <= 13; i++)
    {
      message[i] = ' ';
    }
  }

could be simply

  for(i = len; i < 13; i++)
  {
    message[i] = ' ';
  }

(Note 'i <= 13' changed to 'i < 13')

Crash when message is 11 characters

If message[] is exactly 11 characters, as in the example sketch, the library does not work. See a shorter example sketch below. This sketch should simply output a single tone, and many lines of "tone change" to the serial monitor. Instead, "tone change" prints once, and the sketch stops.

Changing message[] to some other string that is not 11 characters results in the sketch reaching completion.

#include <si5351.h>
#include <Wire.h>
#include <JTEncode.h>

Si5351 si5351;
JTEncode jtencode;

char message[] = "abababababa";
uint8_t tx_buffer[255];

unsigned long baseFreq;

void encode(){
  uint8_t i;
  memset(tx_buffer, 0, 255);
  jtencode.jt9_encode(message, tx_buffer);

  si5351.output_enable(SI5351_CLK0, 1);

  for(i = 0; i < JT9_SYMBOL_COUNT; i++){
    Serial.println("tone change");
    uint8_t test = tx_buffer[i];
    si5351.set_freq(708080000ULL, SI5351_CLK0);
    delay(580);
  }
  si5351.output_enable(SI5351_CLK0, 0);
}


void setup() {
  Serial.begin(9600);
  baseFreq = 708080000ULL;

  si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0, 0);
  si5351.set_freq(baseFreq, SI5351_CLK0);
  si5351.output_enable(SI5351_CLK0, 0);
  si5351.update_status();
}

void loop() {
  delay(1000);
  Serial.println("Calling encode();");
  encode();
  Serial.println("Returned from encode();");
}

Decode the received message

Hello,

First of, I would like to thank you for this great library, it works amazingly well.
My question is, is it possible to decode the received signal using an Arduino. For the project I'm working on I need to be able to send and receive the signal with an Arduino using the JT65 protocol.

wspr_encode destroying data in RAM

Hi,

when using jtencode as shown in the example, data from the calling routine gets lost as soon as wspr_merge_sync_vectors is called. Which is funny as it does not do anything dangerous and the needed 255 bytes should fit in the remaining 800 bytes pretty well.

Please tell me how I can help you debug stuff.

Add CW mode

Hi!
Please, ,, can you add CW mode?
Many thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.