[SSTV] Update to 5.0.0
This commit is contained in:
parent
7f3ef0bff5
commit
9504bc24ab
4 changed files with 52 additions and 51 deletions
|
@ -91,7 +91,7 @@ void setup() {
|
||||||
// initialize SX1278 with default settings
|
// initialize SX1278 with default settings
|
||||||
Serial.print(F("[SX1278] Initializing ... "));
|
Serial.print(F("[SX1278] Initializing ... "));
|
||||||
int state = radio.beginFSK();
|
int state = radio.beginFSK();
|
||||||
if (state == ERR_NONE) {
|
if (state == RADIOLIB_ERR_NONE) {
|
||||||
Serial.println(F("success!"));
|
Serial.println(F("success!"));
|
||||||
} else {
|
} else {
|
||||||
Serial.print(F("failed, code "));
|
Serial.print(F("failed, code "));
|
||||||
|
@ -117,7 +117,7 @@ void setup() {
|
||||||
// (lower number = shorter pulses).
|
// (lower number = shorter pulses).
|
||||||
// The value is usually around 0.95 (95%).
|
// The value is usually around 0.95 (95%).
|
||||||
state = sstv.begin(434.0, Wrasse, 0.95);
|
state = sstv.begin(434.0, Wrasse, 0.95);
|
||||||
if(state == ERR_NONE) {
|
if(state == RADIOLIB_ERR_NONE) {
|
||||||
Serial.println(F("success!"));
|
Serial.println(F("success!"));
|
||||||
} else {
|
} else {
|
||||||
Serial.print(F("failed, code "));
|
Serial.print(F("failed, code "));
|
||||||
|
|
|
@ -90,7 +90,7 @@ void setup() {
|
||||||
// initialize SX1278 with default settings
|
// initialize SX1278 with default settings
|
||||||
Serial.print(F("[SX1278] Initializing ... "));
|
Serial.print(F("[SX1278] Initializing ... "));
|
||||||
int state = radio.beginFSK();
|
int state = radio.beginFSK();
|
||||||
if (state == ERR_NONE) {
|
if (state == RADIOLIB_ERR_NONE) {
|
||||||
Serial.println(F("success!"));
|
Serial.println(F("success!"));
|
||||||
} else {
|
} else {
|
||||||
Serial.print(F("failed, code "));
|
Serial.print(F("failed, code "));
|
||||||
|
@ -115,7 +115,7 @@ void setup() {
|
||||||
// (lower number = shorter pulses).
|
// (lower number = shorter pulses).
|
||||||
// The value is usually around 0.95 (95%).
|
// The value is usually around 0.95 (95%).
|
||||||
state = sstv.begin(Wrasse, 0.95);
|
state = sstv.begin(Wrasse, 0.95);
|
||||||
if(state == ERR_NONE) {
|
if(state == RADIOLIB_ERR_NONE) {
|
||||||
Serial.println(F("success!"));
|
Serial.println(F("success!"));
|
||||||
} else {
|
} else {
|
||||||
Serial.print(F("failed, code "));
|
Serial.print(F("failed, code "));
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#if !defined(RADIOLIB_EXCLUDE_SSTV)
|
#if !defined(RADIOLIB_EXCLUDE_SSTV)
|
||||||
|
|
||||||
const SSTVMode_t Scottie1 {
|
const SSTVMode_t Scottie1 {
|
||||||
.visCode = SSTV_SCOTTIE_1,
|
.visCode = RADIOLIB_SSTV_SCOTTIE_1,
|
||||||
.width = 320,
|
.width = 320,
|
||||||
.height = 256,
|
.height = 256,
|
||||||
.scanPixelLen = 432,
|
.scanPixelLen = 432,
|
||||||
|
@ -19,7 +19,7 @@ const SSTVMode_t Scottie1 {
|
||||||
};
|
};
|
||||||
|
|
||||||
const SSTVMode_t Scottie2 {
|
const SSTVMode_t Scottie2 {
|
||||||
.visCode = SSTV_SCOTTIE_2,
|
.visCode = RADIOLIB_SSTV_SCOTTIE_2,
|
||||||
.width = 320,
|
.width = 320,
|
||||||
.height = 256,
|
.height = 256,
|
||||||
.scanPixelLen = 275,
|
.scanPixelLen = 275,
|
||||||
|
@ -36,7 +36,7 @@ const SSTVMode_t Scottie2 {
|
||||||
};
|
};
|
||||||
|
|
||||||
const SSTVMode_t ScottieDX {
|
const SSTVMode_t ScottieDX {
|
||||||
.visCode = SSTV_SCOTTIE_DX,
|
.visCode = RADIOLIB_SSTV_SCOTTIE_DX,
|
||||||
.width = 320,
|
.width = 320,
|
||||||
.height = 256,
|
.height = 256,
|
||||||
.scanPixelLen = 1080,
|
.scanPixelLen = 1080,
|
||||||
|
@ -53,7 +53,7 @@ const SSTVMode_t ScottieDX {
|
||||||
};
|
};
|
||||||
|
|
||||||
const SSTVMode_t Martin1 {
|
const SSTVMode_t Martin1 {
|
||||||
.visCode = SSTV_MARTIN_1,
|
.visCode = RADIOLIB_SSTV_MARTIN_1,
|
||||||
.width = 320,
|
.width = 320,
|
||||||
.height = 256,
|
.height = 256,
|
||||||
.scanPixelLen = 458,
|
.scanPixelLen = 458,
|
||||||
|
@ -71,7 +71,7 @@ const SSTVMode_t Martin1 {
|
||||||
};
|
};
|
||||||
|
|
||||||
const SSTVMode_t Martin2 {
|
const SSTVMode_t Martin2 {
|
||||||
.visCode = SSTV_MARTIN_2,
|
.visCode = RADIOLIB_SSTV_MARTIN_2,
|
||||||
.width = 320,
|
.width = 320,
|
||||||
.height = 256,
|
.height = 256,
|
||||||
.scanPixelLen = 229,
|
.scanPixelLen = 229,
|
||||||
|
@ -89,7 +89,7 @@ const SSTVMode_t Martin2 {
|
||||||
};
|
};
|
||||||
|
|
||||||
const SSTVMode_t Wrasse {
|
const SSTVMode_t Wrasse {
|
||||||
.visCode = SSTV_WRASSE_SC2_180,
|
.visCode = RADIOLIB_SSTV_WRASSE_SC2_180,
|
||||||
.width = 320,
|
.width = 320,
|
||||||
.height = 256,
|
.height = 256,
|
||||||
.scanPixelLen = 734,
|
.scanPixelLen = 734,
|
||||||
|
@ -104,7 +104,7 @@ const SSTVMode_t Wrasse {
|
||||||
};
|
};
|
||||||
|
|
||||||
const SSTVMode_t PasokonP3 {
|
const SSTVMode_t PasokonP3 {
|
||||||
.visCode = SSTV_PASOKON_P3,
|
.visCode = RADIOLIB_SSTV_PASOKON_P3,
|
||||||
.width = 640,
|
.width = 640,
|
||||||
.height = 496,
|
.height = 496,
|
||||||
.scanPixelLen = 208,
|
.scanPixelLen = 208,
|
||||||
|
@ -121,7 +121,7 @@ const SSTVMode_t PasokonP3 {
|
||||||
};
|
};
|
||||||
|
|
||||||
const SSTVMode_t PasokonP5 {
|
const SSTVMode_t PasokonP5 {
|
||||||
.visCode = SSTV_PASOKON_P5,
|
.visCode = RADIOLIB_SSTV_PASOKON_P5,
|
||||||
.width = 640,
|
.width = 640,
|
||||||
.height = 496,
|
.height = 496,
|
||||||
.scanPixelLen = 312,
|
.scanPixelLen = 312,
|
||||||
|
@ -138,7 +138,7 @@ const SSTVMode_t PasokonP5 {
|
||||||
};
|
};
|
||||||
|
|
||||||
const SSTVMode_t PasokonP7 {
|
const SSTVMode_t PasokonP7 {
|
||||||
.visCode = SSTV_PASOKON_P7,
|
.visCode = RADIOLIB_SSTV_PASOKON_P7,
|
||||||
.width = 640,
|
.width = 640,
|
||||||
.height = 496,
|
.height = 496,
|
||||||
.scanPixelLen = 417,
|
.scanPixelLen = 417,
|
||||||
|
@ -172,7 +172,7 @@ SSTVClient::SSTVClient(AFSKClient* audio) {
|
||||||
int16_t SSTVClient::begin(const SSTVMode_t& mode, float correction) {
|
int16_t SSTVClient::begin(const SSTVMode_t& mode, float correction) {
|
||||||
if(_audio == nullptr) {
|
if(_audio == nullptr) {
|
||||||
// this initialization method can only be used in AFSK mode
|
// this initialization method can only be used in AFSK mode
|
||||||
return(ERR_WRONG_MODEM);
|
return(RADIOLIB_ERR_WRONG_MODEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(begin(0, mode, correction));
|
return(begin(0, mode, correction));
|
||||||
|
@ -198,7 +198,7 @@ int16_t SSTVClient::begin(float base, const SSTVMode_t& mode, float correction)
|
||||||
|
|
||||||
void SSTVClient::idle() {
|
void SSTVClient::idle() {
|
||||||
_phy->transmitDirect();
|
_phy->transmitDirect();
|
||||||
this->tone(SSTV_TONE_LEADER);
|
this->tone(RADIOLIB_SSTV_TONE_LEADER);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSTVClient::sendHeader() {
|
void SSTVClient::sendHeader() {
|
||||||
|
@ -207,44 +207,44 @@ void SSTVClient::sendHeader() {
|
||||||
_phy->transmitDirect();
|
_phy->transmitDirect();
|
||||||
|
|
||||||
// send the first part of header (leader-break-leader)
|
// send the first part of header (leader-break-leader)
|
||||||
this->tone(SSTV_TONE_LEADER, SSTV_HEADER_LEADER_LENGTH);
|
this->tone(RADIOLIB_SSTV_TONE_LEADER, RADIOLIB_SSTV_HEADER_LEADER_LENGTH);
|
||||||
this->tone(SSTV_TONE_BREAK, SSTV_HEADER_BREAK_LENGTH);
|
this->tone(RADIOLIB_SSTV_TONE_BREAK, RADIOLIB_SSTV_HEADER_BREAK_LENGTH);
|
||||||
this->tone(SSTV_TONE_LEADER, SSTV_HEADER_LEADER_LENGTH);
|
this->tone(RADIOLIB_SSTV_TONE_LEADER, RADIOLIB_SSTV_HEADER_LEADER_LENGTH);
|
||||||
|
|
||||||
// VIS start bit
|
// VIS start bit
|
||||||
this->tone(SSTV_TONE_BREAK, SSTV_HEADER_BIT_LENGTH);
|
this->tone(RADIOLIB_SSTV_TONE_BREAK, RADIOLIB_SSTV_HEADER_BIT_LENGTH);
|
||||||
|
|
||||||
// VIS code
|
// VIS code
|
||||||
uint8_t parityCount = 0;
|
uint8_t parityCount = 0;
|
||||||
for(uint8_t mask = 0x01; mask < 0x80; mask <<= 1) {
|
for(uint8_t mask = 0x01; mask < 0x80; mask <<= 1) {
|
||||||
if(_mode.visCode & mask) {
|
if(_mode.visCode & mask) {
|
||||||
this->tone(SSTV_TONE_VIS_1, SSTV_HEADER_BIT_LENGTH);
|
this->tone(RADIOLIB_SSTV_TONE_VIS_1, RADIOLIB_SSTV_HEADER_BIT_LENGTH);
|
||||||
parityCount++;
|
parityCount++;
|
||||||
} else {
|
} else {
|
||||||
this->tone(SSTV_TONE_VIS_0, SSTV_HEADER_BIT_LENGTH);
|
this->tone(RADIOLIB_SSTV_TONE_VIS_0, RADIOLIB_SSTV_HEADER_BIT_LENGTH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// VIS parity
|
// VIS parity
|
||||||
if(parityCount % 2 == 0) {
|
if(parityCount % 2 == 0) {
|
||||||
// even parity
|
// even parity
|
||||||
this->tone(SSTV_TONE_VIS_0, SSTV_HEADER_BIT_LENGTH);
|
this->tone(RADIOLIB_SSTV_TONE_VIS_0, RADIOLIB_SSTV_HEADER_BIT_LENGTH);
|
||||||
} else {
|
} else {
|
||||||
// odd parity
|
// odd parity
|
||||||
this->tone(SSTV_TONE_VIS_1, SSTV_HEADER_BIT_LENGTH);
|
this->tone(RADIOLIB_SSTV_TONE_VIS_1, RADIOLIB_SSTV_HEADER_BIT_LENGTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
// VIS stop bit
|
// VIS stop bit
|
||||||
this->tone(SSTV_TONE_BREAK, SSTV_HEADER_BIT_LENGTH);
|
this->tone(RADIOLIB_SSTV_TONE_BREAK, RADIOLIB_SSTV_HEADER_BIT_LENGTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSTVClient::sendLine(uint32_t* imgLine) {
|
void SSTVClient::sendLine(uint32_t* imgLine) {
|
||||||
// check first line flag in Scottie modes
|
// check first line flag in Scottie modes
|
||||||
if(_firstLine && ((_mode.visCode == SSTV_SCOTTIE_1) || (_mode.visCode == SSTV_SCOTTIE_2) || (_mode.visCode == SSTV_SCOTTIE_DX))) {
|
if(_firstLine && ((_mode.visCode == RADIOLIB_SSTV_SCOTTIE_1) || (_mode.visCode == RADIOLIB_SSTV_SCOTTIE_2) || (_mode.visCode == RADIOLIB_SSTV_SCOTTIE_DX))) {
|
||||||
_firstLine = false;
|
_firstLine = false;
|
||||||
|
|
||||||
// send start sync tone
|
// send start sync tone
|
||||||
this->tone(SSTV_TONE_BREAK, 9000);
|
this->tone(RADIOLIB_SSTV_TONE_BREAK, 9000);
|
||||||
}
|
}
|
||||||
|
|
||||||
// send all tones in sequence
|
// send all tones in sequence
|
||||||
|
@ -271,7 +271,7 @@ void SSTVClient::sendLine(uint32_t* imgLine) {
|
||||||
case(tone_t::GENERIC):
|
case(tone_t::GENERIC):
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
this->tone(SSTV_TONE_BRIGHTNESS_MIN + ((float)color * 3.1372549), _mode.scanPixelLen);
|
this->tone(RADIOLIB_SSTV_TONE_BRIGHTNESS_MIN + ((float)color * 3.1372549), _mode.scanPixelLen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -282,7 +282,8 @@ uint16_t SSTVClient::getPictureHeight() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSTVClient::tone(float freq, uint32_t len) {
|
void SSTVClient::tone(float freq, uint32_t len) {
|
||||||
uint32_t start = Module::micros();
|
Module* mod = _phy->getMod();
|
||||||
|
uint32_t start = mod->micros();
|
||||||
#if !defined(RADIOLIB_EXCLUDE_AFSK)
|
#if !defined(RADIOLIB_EXCLUDE_AFSK)
|
||||||
if(_audio != nullptr) {
|
if(_audio != nullptr) {
|
||||||
_audio->tone(freq, false);
|
_audio->tone(freq, false);
|
||||||
|
@ -292,8 +293,8 @@ void SSTVClient::tone(float freq, uint32_t len) {
|
||||||
#else
|
#else
|
||||||
_phy->transmitDirect(_base + (freq / _phy->getFreqStep()));
|
_phy->transmitDirect(_base + (freq / _phy->getFreqStep()));
|
||||||
#endif
|
#endif
|
||||||
while(Module::micros() - start < len) {
|
while(mod->micros() - start < len) {
|
||||||
Module::yield();
|
mod->yield();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#if !defined(_RADIOLIB_SSTV_H)
|
#if !defined(_RADIOLIB_RADIOLIB_SSTV_H)
|
||||||
#define _RADIOLIB_SSTV_H
|
#define _RADIOLIB_RADIOLIB_SSTV_H
|
||||||
|
|
||||||
#include "../../TypeDef.h"
|
#include "../../TypeDef.h"
|
||||||
|
|
||||||
|
@ -12,28 +12,28 @@
|
||||||
// http://www.barberdsp.com/downloads/Dayton%20Paper.pdf
|
// http://www.barberdsp.com/downloads/Dayton%20Paper.pdf
|
||||||
|
|
||||||
// VIS codes
|
// VIS codes
|
||||||
#define SSTV_SCOTTIE_1 60
|
#define RADIOLIB_SSTV_SCOTTIE_1 60
|
||||||
#define SSTV_SCOTTIE_2 56
|
#define RADIOLIB_SSTV_SCOTTIE_2 56
|
||||||
#define SSTV_SCOTTIE_DX 76
|
#define RADIOLIB_SSTV_SCOTTIE_DX 76
|
||||||
#define SSTV_MARTIN_1 44
|
#define RADIOLIB_SSTV_MARTIN_1 44
|
||||||
#define SSTV_MARTIN_2 40
|
#define RADIOLIB_SSTV_MARTIN_2 40
|
||||||
#define SSTV_WRASSE_SC2_180 55
|
#define RADIOLIB_SSTV_WRASSE_SC2_180 55
|
||||||
#define SSTV_PASOKON_P3 113
|
#define RADIOLIB_SSTV_PASOKON_P3 113
|
||||||
#define SSTV_PASOKON_P5 114
|
#define RADIOLIB_SSTV_PASOKON_P5 114
|
||||||
#define SSTV_PASOKON_P7 115
|
#define RADIOLIB_SSTV_PASOKON_P7 115
|
||||||
|
|
||||||
// SSTV tones in Hz
|
// SSTV tones in Hz
|
||||||
#define SSTV_TONE_LEADER 1900
|
#define RADIOLIB_SSTV_TONE_LEADER 1900
|
||||||
#define SSTV_TONE_BREAK 1200
|
#define RADIOLIB_SSTV_TONE_BREAK 1200
|
||||||
#define SSTV_TONE_VIS_1 1100
|
#define RADIOLIB_SSTV_TONE_VIS_1 1100
|
||||||
#define SSTV_TONE_VIS_0 1300
|
#define RADIOLIB_SSTV_TONE_VIS_0 1300
|
||||||
#define SSTV_TONE_BRIGHTNESS_MIN 1500
|
#define RADIOLIB_SSTV_TONE_BRIGHTNESS_MIN 1500
|
||||||
#define SSTV_TONE_BRIGHTNESS_MAX 2300
|
#define RADIOLIB_SSTV_TONE_BRIGHTNESS_MAX 2300
|
||||||
|
|
||||||
// calibration header timing in us
|
// calibration header timing in us
|
||||||
#define SSTV_HEADER_LEADER_LENGTH 300000
|
#define RADIOLIB_SSTV_HEADER_LEADER_LENGTH 300000
|
||||||
#define SSTV_HEADER_BREAK_LENGTH 10000
|
#define RADIOLIB_SSTV_HEADER_BREAK_LENGTH 10000
|
||||||
#define SSTV_HEADER_BIT_LENGTH 30000
|
#define RADIOLIB_SSTV_HEADER_BIT_LENGTH 30000
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\struct tone_t
|
\struct tone_t
|
||||||
|
@ -187,7 +187,7 @@ class SSTVClient {
|
||||||
*/
|
*/
|
||||||
uint16_t getPictureHeight() const;
|
uint16_t getPictureHeight() const;
|
||||||
|
|
||||||
#ifndef RADIOLIB_GODMODE
|
#if !defined(RADIOLIB_GODMODE)
|
||||||
private:
|
private:
|
||||||
#endif
|
#endif
|
||||||
PhysicalLayer* _phy;
|
PhysicalLayer* _phy;
|
||||||
|
|
Loading…
Add table
Reference in a new issue