DatvRx/longmynd/main.h

147 lines
4.5 KiB
C
Raw Normal View History

2024-06-04 19:03:30 +02:00
/* -------------------------------------------------------------------------------------------------- */
/* The LongMynd receiver: main.h */
/* Copyright 2019 Heather Lomond */
/* -------------------------------------------------------------------------------------------------- */
/*
This file is part of longmynd.
Longmynd is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Longmynd is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with longmynd. If not, see <https://www.gnu.org/licenses/>.
*/
#ifndef MAIN_H
#define MAIN_H
#include <stdint.h>
#include <stdbool.h>
#include <inttypes.h>
#include <pthread.h>
/* states of the main loop state machine */
#define STATE_INIT 0
#define STATE_DEMOD_HUNTING 1
#define STATE_DEMOD_FOUND_HEADER 2
#define STATE_DEMOD_S 3
#define STATE_DEMOD_S2 4
/* define the various status reports */
#define STATUS_STATE 1
#define STATUS_LNA_GAIN 2
#define STATUS_PUNCTURE_RATE 3
#define STATUS_POWER_I 4
#define STATUS_POWER_Q 5
#define STATUS_CARRIER_FREQUENCY 6
#define STATUS_CONSTELLATION_I 7
#define STATUS_CONSTELLATION_Q 8
#define STATUS_SYMBOL_RATE 9
#define STATUS_VITERBI_ERROR_RATE 10
#define STATUS_BER 11
#define STATUS_MER 12
#define STATUS_SERVICE_NAME 13
#define STATUS_SERVICE_PROVIDER_NAME 14
#define STATUS_TS_NULL_PERCENTAGE 15
#define STATUS_ES_PID 16
#define STATUS_ES_TYPE 17
#define STATUS_MODCOD 18
#define STATUS_SHORT_FRAME 19
#define STATUS_PILOTS 20
#define STATUS_ERRORS_LDPC_COUNT 21
#define STATUS_ERRORS_BCH_COUNT 22
#define STATUS_ERRORS_BCH_UNCORRECTED 23
#define STATUS_LNB_SUPPLY 24
#define STATUS_LNB_POLARISATION_H 25
/* The number of constellation peeks we do for each background loop */
#define NUM_CONSTELLATIONS 16
#define NUM_ELEMENT_STREAMS 16
typedef struct {
bool port_swap;
uint8_t port;
uint32_t freq_requested;
uint32_t sr_requested;
bool beep_enabled;
uint8_t device_usb_bus;
uint8_t device_usb_addr;
bool ts_use_ip;
bool ts_reset;
char ts_fifo_path[128];
char ts_ip_addr[16];
int ts_ip_port;
bool status_use_ip;
char status_fifo_path[128];
char status_ip_addr[16];
int status_ip_port;
bool polarisation_supply;
bool polarisation_horizontal; // false -> 13V, true -> 18V
bool new;
pthread_mutex_t mutex;
} longmynd_config_t;
typedef struct {
uint8_t state;
uint8_t demod_state;
bool lna_ok;
uint16_t lna_gain;
uint8_t power_i;
uint8_t power_q;
uint32_t frequency_requested;
int32_t frequency_offset;
bool polarisation_supply;
bool polarisation_horizontal; // false -> 13V, true -> 18V
uint32_t symbolrate;
uint32_t viterbi_error_rate; // DVB-S1
uint32_t bit_error_rate; // DVB-S2
uint32_t modulation_error_rate; // DVB-S2
bool errors_bch_uncorrected;
uint32_t errors_bch_count;
uint32_t errors_ldpc_count;
uint8_t constellation[NUM_CONSTELLATIONS][2]; // { i, q }
uint8_t puncture_rate;
char service_name[255];
char service_provider_name[255];
uint8_t ts_null_percentage;
uint16_t ts_elementary_streams[NUM_ELEMENT_STREAMS][2]; // { pid, type }
uint32_t modcod;
bool short_frame;
bool pilots;
uint64_t last_updated_monotonic;
pthread_mutex_t mutex;
pthread_cond_t signal;
} longmynd_status_t;
typedef struct {
uint8_t *main_state_ptr;
uint8_t *main_err_ptr;
uint8_t thread_err;
longmynd_config_t *config;
longmynd_status_t *status;
} thread_vars_t;
uint64_t timestamp_ms(void);
void config_set_frequency(uint32_t frequency);
void config_set_symbolrate(uint32_t symbolrate);
void config_set_frequency_and_symbolrate(uint32_t frequency, uint32_t symbolrate);
void config_set_lnbv(bool enabled, bool horizontal);
#endif