Skip to content

Commit b3680f2

Browse files
authored
Merge pull request #103 from Digitelektro/develop
Develop
2 parents 1f00c21 + d2edb01 commit b3680f2

8 files changed

Lines changed: 123 additions & 74 deletions

File tree

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.5)
33
include(ExternalProject)
44

55
project(meteordemod
6-
VERSION 2.6.3
6+
VERSION 2.6.5
77
LANGUAGES CXX
88
)
99

common/settings.h

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,15 @@ class Settings {
5858
uint8_t B;
5959
};
6060

61+
struct ProjectionSetting {
62+
std::string satelliteNameInTLE;
63+
float scanAngle;
64+
float yaw;
65+
float pitch;
66+
float roll;
67+
float timeOffsetMs;
68+
};
69+
6170
friend std::istream& operator>>(std::istream& is, HTMLColor& color) {
6271
std::string rgb;
6372
is >> rgb;
@@ -105,35 +114,15 @@ class Settings {
105114
return mJpegQuality;
106115
}
107116

108-
std::string getSatNameInTLE() {
109-
std::string name;
110-
ini::extract(mIniParser.sections[getSateliteName()]["SatNameInTLE"], name);
111-
return name;
112-
}
113-
float getScanAngle() {
114-
float angle;
115-
ini::extract(mIniParser.sections[getSateliteName()]["ScanAngle"], angle, 110.8f);
116-
return angle;
117-
}
118-
float getRoll() {
119-
float roll;
120-
ini::extract(mIniParser.sections[getSateliteName()]["Roll"], roll, 0.0f);
121-
return roll;
122-
}
123-
float getPitch() {
124-
float pitch;
125-
ini::extract(mIniParser.sections[getSateliteName()]["Pitch"], pitch, 0.0f);
126-
return pitch;
127-
}
128-
float getYaw() {
129-
float yaw;
130-
ini::extract(mIniParser.sections[getSateliteName()]["Yaw"], yaw, 0.0f);
131-
return yaw;
132-
}
133-
float getTimeOffsetMs() {
134-
float timeOffset;
135-
ini::extract(mIniParser.sections[getSateliteName()]["TimeOffset"], timeOffset, 0.0f);
136-
return timeOffset;
117+
ProjectionSetting getProjectionSetting(const std::string& satellite) {
118+
ProjectionSetting result;
119+
ini::extract(mIniParser.sections[satellite]["SatNameInTLE"], result.satelliteNameInTLE);
120+
ini::extract(mIniParser.sections[satellite]["ScanAngle"], result.scanAngle, 110.8f);
121+
ini::extract(mIniParser.sections[satellite]["Roll"], result.roll, 0.0f);
122+
ini::extract(mIniParser.sections[satellite]["Pitch"], result.pitch, 0.0f);
123+
ini::extract(mIniParser.sections[satellite]["Yaw"], result.yaw, 0.0f);
124+
ini::extract(mIniParser.sections[satellite]["TimeOffset"], result.timeOffsetMs, 0.0f);
125+
return result;
137126
}
138127

139128
bool equadistantProjection() const {

decoder/protocol/lrpt/decoder.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,28 @@ namespace decoder {
99
namespace protocol {
1010
namespace lrpt {
1111

12+
std::string Decoder::serialNumberToSatName(uint8_t serialNumber) {
13+
switch(serialNumber) {
14+
case 1:
15+
return "METEOR M2-1";
16+
break;
17+
case 2:
18+
return "METEOR M2-2";
19+
break;
20+
case 3:
21+
return "METEOR M2-3";
22+
break;
23+
case 4:
24+
return "METEOR M2-4";
25+
break;
26+
case 5:
27+
return "METEOR M2-5";
28+
break;
29+
default:
30+
return "METEOR M2";
31+
}
32+
}
33+
1234
void Decoder::process(const uint8_t* cadu) {
1335
VCDU vcdu(cadu);
1436

@@ -106,6 +128,10 @@ void Decoder::parse70(const CCSDS& ccsds) {
106128
uint16_t s = ccsds.packetData()[18];
107129
uint16_t ms = static_cast<uint32_t>(ccsds.packetData()[19]) * 4;
108130

131+
mSerialNumber = ccsds.packetData()[20] >> 4;
132+
133+
// std::cout << "Serial number : " << (int)mSerialNumber << std::endl;
134+
109135
mLastTimeStamp = TimeSpan(0, h, m, s, ms * 1000);
110136
mLastHeightAtTimeStamp = getLastY();
111137
if(mFirstTime) {

decoder/protocol/lrpt/decoder.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ namespace lrpt {
1515

1616
// http://planet.iitp.ru/retro/index.php?lang=en&page_type=spacecraft&page=meteor_m_n2_structure_2
1717
class Decoder : public msumr::Image {
18+
public:
19+
static std::string serialNumberToSatName(uint8_t serialNumber);
20+
1821
public:
1922
void process(const uint8_t* cadu);
2023

@@ -34,6 +37,10 @@ class Decoder : public msumr::Image {
3437
return mLastTimeStamp.Add(missingTime);
3538
}
3639

40+
uint8_t getSerialNumber() const {
41+
return mSerialNumber;
42+
}
43+
3744
private:
3845
uint16_t parsePartial(const uint8_t* data, uint32_t length);
3946
void processPacket(const CCSDS& ccsds);
@@ -50,6 +57,7 @@ class Decoder : public msumr::Image {
5057
int mFirstHeightAtTimeStamp = 0;
5158
int mLastHeightAtTimeStamp = 0;
5259
bool mFirstTime = true;
60+
uint8_t mSerialNumber = 0;
5361

5462
private:
5563
static constexpr uint8_t cVCIDAVHRR = 5;

imageproc/threatimage.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <opencv2/imgcodecs.hpp>
55

66
#include "settings.h"
7+
#include "version.h"
78

89
std::map<std::string, ThreatImage::WatermarkPosition> ThreatImage::WatermarkPositionLookup{
910
{"top_left", WatermarkPosition::TOP_LEFT},
@@ -182,13 +183,14 @@ cv::Mat ThreatImage::contrast(const cv::Mat& image, double contrast, double brig
182183
return result;
183184
}
184185

185-
void ThreatImage::drawWatermark(cv::Mat image, const std::string& date) {
186+
void ThreatImage::drawWatermark(cv::Mat image, const std::string& date, const std::string& satelliteName) {
186187
int x = 0;
187188
int y = 0;
188189
Settings& settings = Settings::getInstance();
189190
double fontScale = cv::getFontScaleFromHeight(cv::FONT_ITALIC, settings.getWaterMarkSize() * settings.getProjectionScale(), settings.getWaterMarkLineWidth());
190191

191192
std::string watermarkText = settings.getWaterMarkText();
193+
const std::string versionStr = std::to_string(VERSION_MAJOR) + "." + std::to_string(VERSION_MINOR) + "." + std::to_string(VERSION_FIX);
192194

193195
WatermarkPosition position = TOP_CENTER;
194196
auto itr = WatermarkPositionLookup.find(settings.getWaterMarkPlace());
@@ -197,6 +199,8 @@ void ThreatImage::drawWatermark(cv::Mat image, const std::string& date) {
197199
}
198200

199201
replaceAll(watermarkText, "%date%", date);
202+
replaceAll(watermarkText, "%sat%", satelliteName);
203+
replaceAll(watermarkText, "%version%", versionStr);
200204
replaceAll(watermarkText, "\\n", "\n");
201205

202206
size_t lineCount = std::count(watermarkText.begin(), watermarkText.end(), '\n') + 1;

imageproc/threatimage.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class ThreatImage {
2121

2222
// Constrast 0.0-inf, brightnes -225 to 255
2323
static cv::Mat contrast(const cv::Mat& image, double contrast, double brightness);
24-
static void drawWatermark(cv::Mat image, const std::string& date);
24+
static void drawWatermark(cv::Mat image, const std::string& date, const std::string& satelliteName);
2525
static bool isNightPass(const cv::Mat& image, float treshold);
2626

2727
private:

0 commit comments

Comments
 (0)