forked from OpenShield/DudeShield
-
Notifications
You must be signed in to change notification settings - Fork 0
/
dcscodec.h
137 lines (128 loc) · 3.52 KB
/
dcscodec.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
Copyright (C) 2019-2021 Doug McLain
This program 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.
This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
*/
#ifndef DCSCODEC_H
#define DCSCODEC_H
#include <QObject>
#include <QtNetwork>
#include "audioengine.h"
#include "serialambe.h"
#include "mbedec.h"
#include "mbeenc.h"
#ifdef USE_FLITE
#include <flite/flite.h>
#endif
class DCSCodec : public QObject
{
Q_OBJECT
public:
DCSCodec(QString callsign, QString hostname, QString host, int port, QString vocoder, QString audioin, QString audioout);
~DCSCodec();
unsigned char * get_frame(unsigned char *ambe);
QString get_callsign() { return m_callsign; }
QString get_mycall() { return m_mycall; }
QString get_urcall() { return m_urcall; }
QString get_rptr1() { return m_rptr1; }
QString get_rptr2() { return m_rptr2; }
uint16_t get_streamid() { return m_streamid; }
QString get_usertxt() { return m_userdata; }
uint8_t get_status(){ return m_status; }
QString get_host() { return m_host; }
int get_port() { return m_port; }
uint8_t get_fn() { return m_fn; }
int get_cnt() { return m_cnt; }
bool get_hwrx() { return m_hwrx; }
bool get_hwtx() { return m_hwtx; }
signals:
void update();
private:
bool m_tx;
uint32_t m_txcnt;
uint8_t m_ttsid;
QString m_ttstext;
#ifdef USE_FLITE
cst_voice *voice_slt;
cst_voice *voice_kal;
cst_voice *voice_awb;
cst_wave *tts_audio;
#endif
enum{
DISCONNECTED,
CONNECTING,
DMR_AUTH,
DMR_CONF,
DMR_OPTS,
CONNECTED_RW,
CONNECTED_RO
} m_status;
QUdpSocket *m_udp = nullptr;
QHostAddress m_address;
QString m_callsign;
QString m_mycall;
QString m_urcall;
QString m_rptr1;
QString m_rptr2;
QString m_txmycall;
QString m_txurcall;
QString m_txrptr1;
QString m_txrptr2;
QString m_userdata;
QString m_txusrtxt;
QString m_hostname;
char m_module;
QString m_host;
int m_port;
uint16_t m_streamid;
uint8_t m_fn;
uint32_t m_cnt;
MBEDecoder *m_mbedec;
MBEEncoder *m_mbeenc;
QTimer *m_ping_timer;
QTimer *m_txtimer;
AudioEngine *m_audio;
QString m_vocoder;
SerialAMBE *m_ambedev;
QTimer *m_hwrxtimer;
bool m_hwrx;
bool m_hwtx;
uint8_t packet_size;
uint16_t m_ttscnt;
QQueue<char> m_ambeq;
QString m_audioin;
QString m_audioout;
private slots:
void start_tx();
void stop_tx();
void deleteLater();
void process_udp();
void receive_hwrx_data();
void get_ambe();
void send_ping();
void send_connect();
void send_disconnect();
void transmit();
void hostname_lookup(QHostInfo i);
void input_src_changed(int id, QString t) { m_ttsid = id; m_ttstext = t; }
void module_changed(int m) { m_module = 0x41 + m; m_streamid = 0; }
void mycall_changed(QString mc) { m_txmycall = mc; }
void urcall_changed(QString uc) { m_txurcall = uc; }
void rptr1_changed(QString r1) { m_txrptr1 = r1; }
void rptr2_changed(QString r2) { m_txrptr2 = r2; }
void swrx_state_changed(int s) {m_hwrx = !s; }
void swtx_state_changed(int s) {m_hwtx = !s; }
void send_frame(uint8_t *);
void in_audio_vol_changed(qreal);
void out_audio_vol_changed(qreal);
void decoder_gain_changed(qreal);
};
#endif // DCSCODEC_H