/* * M10.h * Functions for decoding Meteomodem M10 sondes with SX127x chips * Copyright (C) 2019 Hansi Reiser, dl9rdz * * SPDX-License-Identifier: GPL-2.0+ */ #ifndef M10_h #define M10_h #include #include #include #ifndef inttypes_h #include #endif #if 0 struct CONTEXTR9 { char calibdata[512]; uint32_t calibok; char mesok; char posok; char framesent; double lat; double lon; double heig; double speed; double dir; double climb; double lastlat; double laslong; double lastalt; double lastspeed; double lastdir; double lastclb; float hrmsc; float vrmsc; double hp; double hyg; double temp; double ozontemp; double ozon; uint32_t goodsats; uint32_t timems; uint32_t framenum; }; #endif /* Main class */ class M10 { private: void printRaw(uint8_t *data, int len); void processM10data(uint8_t data); int decodeframeM10(uint8_t *data); #if 0 void stobyte92(uint8_t byte); void dogps(const uint8_t *sf, int sf_len, struct CONTEXTR9 * cont, uint32_t * timems, uint32_t * gpstime); uint32_t bits2val(const uint8_t *bits, int len); int bitsToBytes(uint8_t *bits, uint8_t *bytes, int len); int decode92(byte *data, int maxlen); uint8_t hamming_conf[ 7*8]; // 7*8=56 uint8_t hamming_dat1[13*8]; // 13*8=104 uint8_t hamming_dat2[13*8]; uint8_t block_conf[ 7*4]; // 7*4=28 uint8_t block_dat1[13*4]; // 13*4=52 uint8_t block_dat2[13*4]; uint8_t H[4][8] = // extended Hamming(8,4) particy check matrix {{ 0, 1, 1, 1, 1, 0, 0, 0}, { 1, 0, 1, 1, 0, 1, 0, 0}, { 1, 1, 0, 1, 0, 0, 1, 0}, { 1, 1, 1, 0, 0, 0, 0, 1}}; uint8_t He[8] = { 0x7, 0xB, 0xD, 0xE, 0x8, 0x4, 0x2, 0x1}; // Spalten von H: // 1-bit-error-Syndrome boolean initialized = false; #endif public: M10(); int setup(float frequency); int receive(); int waitRXcomplete(); //int use_ecc = 1; }; extern M10 m10; #endif