diff --git a/application/controllers/Qso.php b/application/controllers/Qso.php
index c72882ea4..2e2eab2f2 100644
--- a/application/controllers/Qso.php
+++ b/application/controllers/Qso.php
@@ -13,6 +13,7 @@ class QSO extends CI_Controller {
public function index() {
$this->load->model('cat');
+ $this->load->library('qra');
$this->load->model('stations');
$this->load->model('logbook_model');
$this->load->model('user_model');
@@ -41,6 +42,7 @@ class QSO extends CI_Controller {
$data['iota'] = $this->logbook_model->fetchIota();
$data['modes'] = $this->modes->active();
$data['bands'] = $this->bands->get_user_bands_for_qso_entry();
+ [$data['lat'], $data['lng']] = $this->qra->qra2latlong($this->stations->gridsquare_from_station($this->stations->find_active()));
$data['user_default_band'] = $this->session->userdata('user_default_band');
$data['sat_active'] = array_search("SAT", $this->bands->get_user_bands(), true);
@@ -607,8 +609,10 @@ class QSO extends CI_Controller {
public function get_station_power() {
$this->load->model('stations');
+ $this->load->library('qra');
$stationProfile = $this->input->post('stationProfile', TRUE);
$data = array('station_power' => $this->stations->get_station_power($stationProfile));
+ [$data['lat'], $data['lng']] = $this->qra->qra2latlong($this->stations->gridsquare_from_station($stationProfile));
header('Content-Type: application/json');
echo json_encode($data);
diff --git a/application/views/interface_assets/footer.php b/application/views/interface_assets/footer.php
index 20275b161..db31b4ca5 100644
--- a/application/views/interface_assets/footer.php
+++ b/application/views/interface_assets/footer.php
@@ -1060,6 +1060,7 @@ $($('#callsign')).on('keypress',function(e) {
uri->segment(1) == "qso") { ?>
+
session->userdata('isWinkeyEnabled')) { ?>
diff --git a/application/views/qso/index.php b/application/views/qso/index.php
index ce2700421..4a19d5e70 100644
--- a/application/views/qso/index.php
+++ b/application/views/qso/index.php
@@ -8,6 +8,7 @@
var lang_dxccsummary_for = "= __("DXCC Summary for "); ?>";
var lang_lotw_upload_day_ago = "= __("LoTW User. Last upload was 1 day ago."); ?>";
var lang_lotw_upload_days_ago = "= __("LoTW User. Last upload was %x days ago."); ?>"; // due to the way the string is built (PHP to JS), %x is replaced with the number of days
+ var latlng=[];
diff --git a/application/views/qso/log_qso.php b/application/views/qso/log_qso.php
index 43779f727..90387e0c1 100644
--- a/application/views/qso/log_qso.php
+++ b/application/views/qso/log_qso.php
@@ -75,4 +75,4 @@
$('#redirect_message').html('= __("The data was redirected. You can close this window."); ?>');
window.close();
}
-
\ No newline at end of file
+
diff --git a/assets/js/sections/qso.js b/assets/js/sections/qso.js
index 691c2c0fb..b883a2ebf 100644
--- a/assets/js/sections/qso.js
+++ b/assets/js/sections/qso.js
@@ -39,6 +39,8 @@ $('#stationProfile').on('change', function () {
data: { 'stationProfile': stationProfile },
success: function (res) {
$('#transmit_power').val(res.station_power);
+ latlng=[res.lat,res.lng];
+ $("#sat_name").change();
},
error: function () {
$('#transmit_power').val('');
@@ -217,6 +219,9 @@ $(document).on("click", "#fav_del", function (event) {
$(document).on("click", "#fav_recall", function (event) {
$('#sat_name').val(favs[this.innerText].sat_name);
+ if (favs[this.innerText].sat_name) {
+ $("#sat_name").change();
+ }
$('#sat_mode').val(favs[this.innerText].sat_mode);
$('#band_rx').val(favs[this.innerText].band_rx);
$('#band').val(favs[this.innerText].band);
@@ -324,9 +329,87 @@ $("#sat_name").on('change', function () {
if (sat == "") {
$("#sat_mode").val("");
$("#selectPropagation").val("");
+ stop_az_ele_ticker();
+ } else {
+ get_tles();
}
});
+
+var satupdater;
+
+function stop_az_ele_ticker() {
+ if (satupdater) {
+ clearInterval(satupdater);
+ }
+ $("#ant_az").val('');
+ $("#ant_el").val('');
+}
+
+function start_az_ele_ticker(tle) {
+ const lines = tle.tle.trim().split('\n');
+
+ // Initialize a satellite record
+ var satrec = satellite.twoline2satrec(lines[0], lines[1]);
+
+ // Define the observer's location in radians
+ var observerGd = {
+ longitude: satellite.degreesToRadians(latlng[1]),
+ latitude: satellite.degreesToRadians(latlng[0]),
+ height: 0.370
+ };
+
+ function updateAzEl() {
+ let dateParts=$('#start_date').val().split("-");
+ let timeParts=$("#start_time").val().split(":");
+ try {
+ var time = new Date(Date.UTC(
+ parseInt(dateParts[2]),parseInt(dateParts[1])-1,parseInt(dateParts[0]),
+ parseInt(timeParts[0]),parseInt(timeParts[1]),(parseInt(timeParts[2] ?? 0))
+ ));
+ if (isNaN(time.getTime())) {
+ throw new Error("Invalid date");
+ }
+ var positionAndVelocity = satellite.propagate(satrec, time);
+ var gmst = satellite.gstime(time);
+ var positionEcf = satellite.eciToEcf(positionAndVelocity.position, gmst);
+ var observerEcf = satellite.geodeticToEcf(observerGd);
+ var lookAngles = satellite.ecfToLookAngles(observerGd, positionEcf);
+ let az=(satellite.radiansToDegrees(lookAngles.azimuth).toFixed(2));
+ let el=(satellite.radiansToDegrees(lookAngles.elevation).toFixed(2));
+ $("#ant_az").val(parseFloat(az).toFixed(1));
+ $("#ant_el").val(parseFloat(el).toFixed(1));
+ } catch(e) {
+ $("#ant_az").val('');
+ $("#ant_el").val('');
+ }
+ }
+ satupdater=setInterval(updateAzEl, 1000);
+}
+
+function get_tles() {
+ stop_az_ele_ticker();
+ $.ajax({
+ url: base_url + 'index.php/satellite/get_tle',
+ type: 'post',
+ data: {
+ sat: $("#sat_name").val(),
+ },
+ success: function (data) {
+ if (data !== null) {
+ start_az_ele_ticker(data);
+ }
+ },
+ error: function (data) {
+ console.log('Something went wrong while trying to fetch TLE for sat: '+$("#sat_name"));
+ },
+ });
+}
+
+if ($("#sat_name").val() !== '') {
+ get_tles();
+}
+
$('#stateDropdown').on('change', function () {
var state = $("#stateDropdown option:selected").text();
if (state != "") {
@@ -516,6 +599,7 @@ function reset_to_default() {
$("#sat_mode").val("");
$("#ant_az").val("");
$("#ant_el").val("");
+ stop_az_ele_ticker();
}
/* Function: reset_fields is used to reset the fields on the QSO page */
@@ -1268,6 +1352,7 @@ $('#band').on('change', function () {
$("#sat_mode").val("");
set_qrg();
$("#callsign").blur();
+ stop_az_ele_ticker();
});
/* On Key up Calculate Bearing and Distance */