diff --git a/iOS_OnlyFIles/droidstar.h b/iOS_OnlyFIles/droidstar.h
new file mode 100644
index 0000000..a196fd4
--- /dev/null
+++ b/iOS_OnlyFIles/droidstar.h
@@ -0,0 +1,419 @@
+/*
+ Copyright (C) 2019-2021 Doug McLain
+ Modification Copyright (C) 2024 Rohith Namboothiri
+
+ 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 .
+*/
+
+#ifndef DROIDSTAR_H
+#define DROIDSTAR_H
+
+#include
+#include "mode.h"
+
+class DroidStar : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit DroidStar(QObject *parent = nullptr);
+
+ ~DroidStar();
+
+ Q_INVOKABLE void addRecentTGID(const QString& tgid);
+ Q_INVOKABLE QStringList loadRecentTGIDs() const;
+ Q_INVOKABLE void clearRecentTGIDs();
+ void setup_state_change_listeners();
+
+
+signals:
+ void input_source_changed(int, QString);
+ void tgidsUpdated(const QStringList& newTgids);
+ void recentTgidsUpdated();
+ void mode_changed();
+ void module_changed(char);
+ void slot_changed(int);
+ void cc_changed(int);
+ void update_data();
+ void update_log(QString);
+ void open_vocoder_dialog();
+ void update_settings();
+ void connect_status_changed(int c);
+ void in_audio_vol_changed(qreal);
+ void tx_pressed();
+ void tx_released();
+ void tx_clicked(bool);
+ void dmrpc_state_changed(int);
+ void dmr_tgid_changed(int);
+ void m17_rate_changed(int);
+ void m17_can_changed(int);
+ void send_dtmf(QByteArray);
+ void swtx_state_changed(int);
+ void swrx_state_changed(int);
+ void swtx_state(int);
+ void swrx_state(int);
+ void agc_state(int);
+ void agc_state_changed(int);
+ void rptr1_changed(QString);
+ void rptr2_changed(QString);
+ void mycall_changed(QString);
+ void urcall_changed(QString);
+ void usrtxt_changed(QString);
+ void dst_changed(QString);
+ void debug_changed(bool);
+ void update_devices();
+public slots:
+ void handle_background_state();
+ void handle_foreground_state();
+
+ void set_callsign(const QString &callsign) { m_callsign = callsign.simplified(); save_settings(); }
+ void set_dmrtgid(const QString &dmrtgid) { m_dmr_destid = dmrtgid.simplified().toUInt(); save_settings(); }
+ void set_slot(const int slot) {emit slot_changed(slot); }
+ void set_cc(const int cc) {emit cc_changed(cc); }
+ void tgid_text_changed(QString s){emit dmr_tgid_changed(s.toUInt());}
+ void set_dmrid(const QString &dmrid) { m_dmrid = dmrid.simplified().toUInt(); save_settings(); }
+ void set_essid(const QString &essid)
+ {
+ if (essid != "None") {
+ m_essid = essid.simplified().toUInt() + 1;
+ save_settings();
+ }
+ else{
+ m_essid = 0;
+ }
+ }
+ void set_bm_password(const QString &bmpwd) { m_bm_password = bmpwd; save_settings(); }
+ void set_tgif_password(const QString &tgifpwd) { m_tgif_password = tgifpwd; save_settings(); }
+ void set_latitude(const QString &lat){ m_latitude = lat; save_settings(); }
+ void set_longitude(const QString &lon){ m_longitude = lon; save_settings(); }
+ void set_location(const QString &loc){ m_location = loc; save_settings(); }
+ void set_description(const QString &desc){ m_description = desc; save_settings(); }
+ void set_freq(const QString &freq){ m_freq = freq; save_settings(); }
+ void set_url(const QString &url){ m_url = url; save_settings(); }
+ void set_swid(const QString &swid){ m_swid = swid; save_settings(); }
+ void set_pkgid(const QString &pkgid){ m_pkgid = pkgid; save_settings(); }
+ void set_dmr_options(const QString &dmropts) { m_dmropts = dmropts; save_settings(); }
+ void set_dmr_pc(int pc) { m_pc = pc; emit dmrpc_state_changed(m_pc); }
+ void set_module(const QString &module) { m_module = module.toStdString()[0]; save_settings(); emit module_changed(m_module);}
+ void set_protocol(const QString &protocol) { m_protocol = protocol; save_settings(); }
+ void set_input_volume(qreal v);
+ void set_modelchange(bool t){ m_modelchange = t; }
+ void set_mycall(const QString &mycall) { m_mycall = mycall; save_settings(); emit mycall_changed(mycall); }
+ void set_urcall(const QString &urcall) { m_urcall = urcall; save_settings(); emit urcall_changed(urcall); }
+ void set_rptr1(const QString &rptr1) { m_rptr1 = rptr1; save_settings(); emit rptr1_changed(rptr1); qDebug() << "rpt1 == " << m_rptr1; }
+ void set_rptr2(const QString &rptr2) { m_rptr2 = rptr2; save_settings(); emit rptr2_changed(rptr2); qDebug() << "rpt2 == " << m_rptr2; }
+ void set_usrtxt(const QString &usrtxt) { m_dstarusertxt = usrtxt; save_settings(); emit usrtxt_changed(usrtxt); }
+ void set_txtimeout(const QString &t) { m_txtimeout = t.simplified().toUInt(); save_settings();}
+ void set_toggletx(bool x) { m_toggletx = x; save_settings(); }
+ void set_xrf2ref(bool x) { m_xrf2ref = x; save_settings(); }
+ void set_ipv6(bool ipv6) { m_ipv6 = ipv6; save_settings(); }
+ void set_vocoder(QString vocoder) { m_vocoder = vocoder; }
+ void set_modem(QString modem) { m_modem = modem; }
+ void set_playback(QString playback) { m_playback = playback; }
+ void set_capture(QString capture) { m_capture = capture; }
+ void set_swtx(bool swtx) { emit swtx_state_changed(swtx); }
+ void set_swrx(bool swrx) { emit swrx_state_changed(swrx); }
+ void set_agc(bool agc) { emit agc_state_changed(agc); }
+ void set_mmdvm_direct(bool mmdvm) { m_mdirect = mmdvm; process_mode_change(m_protocol); }
+ void set_iaxport(const QString &port){ m_iaxport = port.simplified().toUInt(); save_settings(); }
+ void set_dst(QString dst){emit dst_changed(dst);}
+ void set_debug(bool debug){emit debug_changed(debug);}
+
+ void set_modemRxFreq(QString m) { m_modemRxFreq = m; save_settings(); }
+ void set_modemTxFreq(QString m) { m_modemTxFreq = m; save_settings(); }
+ void set_modemRxOffset(QString m) { m_modemRxOffset = m; save_settings(); }
+ void set_modemTxOffset(QString m) { m_modemTxOffset = m; save_settings(); }
+ void set_modemRxDCOffset(QString m) { m_modemRxDCOffset = m; save_settings(); }
+ void set_modemTxDCOffset(QString m) { m_modemTxDCOffset = m; save_settings(); }
+ void set_modemRxLevel(QString m) { m_modemRxLevel = m; save_settings(); }
+ void set_modemTxLevel(QString m) { m_modemTxLevel = m; save_settings(); }
+ void set_modemRFLevel(QString m) { m_modemRFLevel = m; save_settings(); }
+ void set_modemTxDelay(QString m) { m_modemTxDelay = m; save_settings(); }
+ void set_modemCWIdTxLevel(QString m) { m_modemCWIdTxLevel = m; save_settings(); }
+ void set_modemDstarTxLevel(QString m) { m_modemDstarTxLevel = m; save_settings(); }
+ void set_modemDMRTxLevel(QString m) { m_modemDMRTxLevel = m; save_settings(); }
+ void set_modemYSFTxLevel(QString m) { m_modemYSFTxLevel = m; save_settings(); }
+ void set_modemP25TxLevel(QString m) { m_modemP25TxLevel = m; save_settings(); }
+ void set_modemNXDNTxLevel(QString m) { m_modemNXDNTxLevel = m; save_settings(); }
+ void set_modemBaud(QString m) { m_modemBaud = m; save_settings(); }
+ void set_modemM17CAN(QString m) { emit m17_can_changed(m.toInt()); }
+
+ void m17_rate_changed(bool r) { emit m17_rate_changed((int)r); }
+ void process_connect();
+ void press_tx();
+ void release_tx();
+ void click_tx(bool);
+ void process_settings();
+ void check_host_files();
+ void update_host_files();
+ void update_custom_hosts(QString);
+ void update_dmr_ids();
+ void update_nxdn_ids();
+ void process_mode_change(const QString &m);
+ void process_host_change(const QString &h);
+ void dtmf_send_clicked(QString);
+ bool get_modelchange(){ return m_modelchange; }
+ QString get_label1() { return m_label1; }
+ QString get_label2() { return m_label2; }
+ QString get_label3() { return m_label3; }
+ QString get_label4() { return m_label4; }
+ QString get_label5() { return m_label5; }
+ QString get_label6() { return m_label6; }
+ QString get_data1() { return m_data1; }
+ QString get_data2() { return m_data2; }
+ QString get_data3() { return m_data3; }
+ QString get_data4() { return m_data4; }
+ QString get_data5() { return m_data5; }
+ QString get_data6() { return m_data6; }
+ QString get_ambestatustxt() { return m_ambestatustxt; }
+ QString get_mmdvmstatustxt() { return m_mmdvmstatustxt; }
+ QString get_netstatustxt() { return m_netstatustxt; }
+ QString get_mode() { return m_protocol; }
+ QString get_host() { return m_host; }
+ QString get_module() { return QString(m_module); }
+ QString get_callsign() { return m_callsign; }
+ QString get_dmrid() { return m_dmrid ? QString::number(m_dmrid) : ""; }
+ QString get_essid() { return m_essid ? QString("%1").arg(m_essid - 1, 2, 10, QChar('0')) : "None"; }
+ QString get_bm_password() { return m_bm_password; }
+ QString get_tgif_password() { return m_tgif_password; }
+ QString get_latitude() { return m_latitude; }
+ QString get_longitude() { return m_longitude; }
+ QString get_location() { return m_location; }
+ QString get_description() { return m_description; }
+ QString get_freq() { return m_freq; }
+ QString get_url() { return m_url; }
+ QString get_swid() { return m_swid; }
+ QString get_pkgid() { return m_pkgid; }
+ QString get_dmr_options() { return m_dmropts; }
+ QString get_dmrtgid() { return m_dmr_destid ? QString::number(m_dmr_destid) : ""; }
+ QStringList get_hosts() { return m_hostsmodel; }
+ QString get_ref_host() { return m_saved_refhost; }
+ QString get_dcs_host() { return m_saved_dcshost; }
+ QString get_xrf_host() { return m_saved_xrfhost; }
+ QString get_ysf_host() { return m_saved_ysfhost; }
+ QString get_fcs_host() { return m_saved_fcshost; }
+ QString get_dmr_host() { return m_saved_dmrhost; }
+ QString get_p25_host() { return m_saved_p25host; }
+ QString get_nxdn_host() { return m_saved_nxdnhost; }
+ QString get_m17_host() { return m_saved_m17host; }
+ QString get_iax_host() { return m_saved_iaxhost; }
+ QString get_mycall() { return m_mycall; }
+ QString get_urcall() { return m_urcall; }
+ QString get_rptr1() { return m_rptr1; }
+ QString get_rptr2() { return m_rptr2; }
+ QString get_txtimeout() { return QString::number(m_txtimeout); }
+ QString get_error_text() { return m_errortxt; }
+ bool get_toggletx() { return m_toggletx; }
+ bool get_ipv6() { return m_ipv6; }
+ bool get_xrf2ref() { return m_xrf2ref; }
+ QString get_local_hosts(){ return m_localhosts; }
+ QStringList get_vocoders() { return m_vocoders; }
+ QStringList get_modems() { return m_modems; }
+ QStringList get_playbacks() { return m_playbacks; }
+ QStringList get_captures() { return m_captures; }
+ QString get_modemRxFreq() { return m_modemRxFreq; }
+ QString get_modemTxFreq() { return m_modemTxFreq; }
+ QString get_modemRxOffset() { return m_modemRxOffset; }
+ QString get_modemTxOffset() { return m_modemTxOffset; }
+ QString get_modemRxDCOffset() { return m_modemRxDCOffset; }
+ QString get_modemTxDCOffset() { return m_modemTxDCOffset; }
+ QString get_modemRxLevel() { return m_modemRxLevel; }
+ QString get_modemTxLevel() { return m_modemTxLevel; }
+ QString get_modemRFLevel() { return m_modemRFLevel; }
+ QString get_modemTxDelay() { return m_modemTxDelay; }
+ QString get_modemCWIdTxLevel() { return m_modemCWIdTxLevel; }
+ QString get_modemDstarTxLevel() { return m_modemDstarTxLevel; }
+ QString get_modemDMRTxLevel() { return m_modemDMRTxLevel; }
+ QString get_modemYSFTxLevel() { return m_modemYSFTxLevel; }
+ QString get_modemP25TxLevel() { return m_modemP25TxLevel; }
+ QString get_modemNXDNTxLevel() { return m_modemNXDNTxLevel; }
+ QString get_modemBaud() { return m_modemBaud; }
+ QString get_modemM17CAN() { return m_modemM17CAN; }
+
+#if defined(Q_OS_ANDROID)
+ QString get_platform() { return QSysInfo::productType(); }
+ void reset_connect_status();
+ QString get_monofont() { return "Droid Sans Mono"; }
+#elif defined(Q_OS_WIN)
+ QString get_platform() { return QSysInfo::kernelType(); }
+ void reset_connect_status() {}
+ QString get_monofont() { return "Courier"; }
+#else
+ QString get_platform() { return QSysInfo::kernelType(); }
+ void reset_connect_status() {}
+ QString get_monofont() { return "monospace"; }
+#endif
+ QString get_arch() { return QSysInfo::currentCpuArchitecture(); }
+ QString get_build_abi() { return QSysInfo::buildAbi(); }
+ QString get_software_build() { return VERSION_NUMBER; }
+
+
+
+ void download_file(QString, bool u = false);
+ void file_downloaded(QString);
+ void url_downloaded(QString);
+ unsigned short get_output_level(){ return m_outlevel; }
+ void set_output_level(unsigned short l){ m_outlevel = l; }
+ void tts_changed(QString);
+ void tts_text_changed(QString);
+ void attempt_reconnect();
+ void start_keep_alive();
+ void stop_keep_alive();
+ void send_keep_alive();
+ void on_network_state_changed(QNetworkInformation::Reachability reachability);
+
+private:
+
+ int connect_status;
+ bool m_update_host_files;
+ QSettings *m_settings;
+ QStringList recentTGIDs;
+ QString config_path;
+ QString hosts_filename;
+ QString m_callsign;
+ QString m_host;
+ QString m_refname;
+ QString m_protocol;
+ QString m_bm_password;
+ QString m_tgif_password;
+ QString m_latitude;
+ QString m_longitude;
+ QString m_location;
+ QString m_description;
+ QString m_freq;
+ QString m_url;
+ QString m_swid;
+ QString m_pkgid;
+ QString m_dmropts;
+ int m_pc;
+ QString m_saved_refhost;
+ QString m_saved_dcshost;
+ QString m_saved_xrfhost;
+ QString m_saved_ysfhost;
+ QString m_saved_fcshost;
+ QString m_saved_dmrhost;
+ QString m_saved_p25host;
+ QString m_saved_nxdnhost;
+ QString m_saved_m17host;
+ QString m_saved_iaxhost;
+ uint32_t m_dmrid;
+ uint8_t m_essid;
+ uint32_t m_dmr_srcid;
+ uint32_t m_dmr_destid;
+ QMap m_dmrids;
+ QMap m_nxdnids;
+ char m_module;
+ int m_port;
+ QString m_label1;
+ QString m_label2;
+ QString m_label3;
+ QString m_label4;
+ QString m_label5;
+ QString m_label6;
+ QString m_data1;
+ QString m_data2;
+ QString m_data3;
+ QString m_data4;
+ QString m_data5;
+ QString m_data6;
+ QString m_ambestatustxt;
+ QString m_mmdvmstatustxt;
+ QString m_netstatustxt;
+ QString m_mycall;
+ QString m_urcall;
+ QString m_rptr1;
+ QString m_rptr2;
+ int m_txtimeout;
+ bool m_toggletx;
+ QString m_dstarusertxt;
+ QStringList m_hostsmodel;
+ QMap m_hostmap;
+ QStringList m_customhosts;
+ QThread *m_modethread;
+ Mode *m_mode;
+ QByteArray user_data;
+ QString m_localhosts;
+ int m_iaxport;
+ bool m_settings_processed;
+ bool m_modelchange;
+ const uint8_t header[5] = {0x80,0x44,0x53,0x56,0x54}; //DVSI packet header
+ uint16_t m_outlevel;
+ QString m_errortxt;
+ bool m_xrf2ref;
+ bool m_ipv6;
+ QString m_vocoder;
+ QString m_modem;
+ QString m_playback;
+ QString m_capture;
+ QStringList m_vocoders;
+ QStringList m_modems;
+ QStringList m_playbacks;
+ QStringList m_captures;
+ bool m_mdirect;
+
+ int m_tts;
+ QString m_ttstxt;
+
+ QString m_modemRxFreq;
+ QString m_modemTxFreq;
+ QString m_modemRxOffset;
+ QString m_modemTxOffset;
+ QString m_modemRxDCOffset;
+ QString m_modemTxDCOffset;
+ QString m_modemRxLevel;
+ QString m_modemTxLevel;
+ QString m_modemRFLevel;
+ QString m_modemTxDelay;
+ QString m_modemCWIdTxLevel;
+ QString m_modemDstarTxLevel;
+ QString m_modemDMRTxLevel;
+ QString m_modemYSFTxLevel;
+ QString m_modemP25TxLevel;
+ QString m_modemNXDNTxLevel;
+ QString m_modemBaud;
+ QString m_modemM17CAN;
+ bool m_modemTxInvert;
+ bool m_modemRxInvert;
+ bool m_modemPTTInvert;
+ QTimer *m_reconnectTimer;
+ QTimer *m_keepAliveTimer;
+
+#ifdef Q_OS_ANDROID
+ AndroidSerialPort *m_USBmonitor;
+#endif
+
+private slots:
+#ifdef Q_OS_ANDROID
+ void keepScreenOn();
+#endif
+ void discover_devices();
+ void process_dstar_hosts(QString);
+ void process_ysf_hosts();
+ void process_fcs_rooms();
+ void process_dmr_hosts();
+ void process_p25_hosts();
+ void process_nxdn_hosts();
+ void process_m17_hosts();
+ void process_iax_hosts();
+ void process_dmr_ids();
+ void process_nxdn_ids();
+ void update_data(Mode::MODEINFO);
+ void updatelog(QString);
+ void save_settings();
+ void update_output_level(unsigned short l){ m_outlevel = l;}
+ //void load_md380_fw();
+};
+
+extern "C" void callProcessConnect();
+#endif