2020-04-21 12:07:47 +00:00
|
|
|
# A3XX High Frequency Radio
|
|
|
|
# Jonathan Redpath
|
|
|
|
|
2021-04-23 17:21:07 +00:00
|
|
|
# Copyright (c) 2021 Josh Davidson (Octal450)
|
2020-04-21 12:07:47 +00:00
|
|
|
|
|
|
|
var highFrequencyRadio = {
|
|
|
|
overrideDataLink: 0,
|
|
|
|
datalinkConnected: 0,
|
2020-04-21 13:24:05 +00:00
|
|
|
new: func(powerNode, num) {
|
2020-04-21 12:07:47 +00:00
|
|
|
var a = { parents:[highFrequencyRadio] };
|
|
|
|
a.powerNode = powerNode;
|
2020-04-21 14:54:55 +00:00
|
|
|
a.selectedChannelKhz = int(rand() * 10) ~ int(rand() * 10) ~ int(rand() * 10) ~ int(rand() * 10);
|
2020-04-21 13:24:05 +00:00
|
|
|
a.num = num;
|
2020-04-21 14:54:55 +00:00
|
|
|
a.receptionProp = props.globals.getNode("/systems/comm/hf/reception-" ~ (num + 1));
|
|
|
|
a.toneControl = props.globals.getNode("/systems/comm/hf/tone1000hz-" ~ (num + 1));
|
|
|
|
a._toneTime = nil;
|
|
|
|
a._transmitTime = nil;
|
|
|
|
a.transmit = 0;
|
|
|
|
a.tuned = 0;
|
2020-04-21 12:07:47 +00:00
|
|
|
return a;
|
|
|
|
},
|
|
|
|
selectChannel: func(selectedKhz) {
|
|
|
|
if (selectedKhz < 2000 or selectedKhz > 29999) { return; }
|
|
|
|
if (selectedKhz - int(selectedKhz) != 0) { return; }
|
|
|
|
me.selectedChannelKhz = selectedKhz;
|
|
|
|
me.tuned = 0;
|
2020-04-21 13:24:05 +00:00
|
|
|
rmp.update_active_vhf(me.num + 4);
|
2020-04-21 12:07:47 +00:00
|
|
|
},
|
|
|
|
pttToggle: func() {
|
|
|
|
if (me.powerNode.getValue() < 110) {
|
|
|
|
me.transmit = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (me.transmit) {
|
|
|
|
me.transmit = 0;
|
2020-04-21 14:54:55 +00:00
|
|
|
me.receptionProp.setValue(1);
|
2020-04-21 12:07:47 +00:00
|
|
|
} else {
|
|
|
|
me.transmit = 1;
|
2020-04-21 14:54:55 +00:00
|
|
|
me.receptionProp.setValue(0);
|
2020-04-21 12:07:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (me.transmit) {
|
2020-04-21 14:54:55 +00:00
|
|
|
me._transmitTime = pts.Sim.Time.elapsedSec.getValue();
|
|
|
|
if (me.num == 0) {
|
|
|
|
transmitTimer1.start();
|
|
|
|
} else {
|
|
|
|
transmitTimer2.start();
|
|
|
|
}
|
|
|
|
|
2020-04-21 12:07:47 +00:00
|
|
|
if (me.selectedChannelKhz < 2800 or me.selectedChannelKhz > 23999) {
|
|
|
|
me.generate1000Hz();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (!me.tuned) {
|
|
|
|
me.generate1000Hz(5);
|
|
|
|
me.tuned = 1;
|
|
|
|
}
|
|
|
|
} else {
|
2020-04-21 14:54:55 +00:00
|
|
|
if (me.num == 0) {
|
|
|
|
transmitTimer1.stop();
|
|
|
|
} else {
|
|
|
|
transmitTimer2.stop();
|
|
|
|
}
|
|
|
|
|
2020-04-21 15:07:16 +00:00
|
|
|
if (me.num == 0) {
|
|
|
|
ecam.transmitFlag1 = 0;
|
|
|
|
} else {
|
|
|
|
ecam.transmitFlag2 = 0;
|
|
|
|
}
|
|
|
|
|
2020-04-21 14:54:55 +00:00
|
|
|
if (me._toneTime == nil) {
|
|
|
|
me.toneControl.setValue(0);
|
2020-04-21 12:07:47 +00:00
|
|
|
}
|
2020-04-21 14:54:55 +00:00
|
|
|
me._transmitTime = nil;
|
2020-04-21 12:07:47 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
monitorPTT: func() {
|
2020-04-21 13:24:05 +00:00
|
|
|
if (me.transmit) {
|
2020-04-21 14:54:55 +00:00
|
|
|
if (pts.Sim.Time.elapsedSec.getValue() > me._transmitTime + 60) {
|
2020-04-21 15:07:16 +00:00
|
|
|
if (me.num == 0) {
|
|
|
|
ecam.transmitFlag1 = 1;
|
|
|
|
} else {
|
|
|
|
ecam.transmitFlag2 = 1;
|
|
|
|
}
|
2020-04-21 12:07:47 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
generate1000Hz: func(timeSec = 0) {
|
|
|
|
if (timeSec == 0) {
|
2020-04-21 14:54:55 +00:00
|
|
|
me.toneControl.setValue(1);
|
2020-04-21 12:07:47 +00:00
|
|
|
} else {
|
2020-04-21 14:54:55 +00:00
|
|
|
me.toneControl.setValue(1);
|
|
|
|
me._toneTime = pts.Sim.Time.elapsedSec.getValue() + timeSec;
|
|
|
|
if (me.num == 0) {
|
|
|
|
toneTimer1.start();
|
|
|
|
} else {
|
|
|
|
toneTimer2.start();
|
|
|
|
}
|
2020-04-21 12:07:47 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
datalink: func() {
|
2021-09-02 20:02:35 +00:00
|
|
|
if (me.powerNode.getValue() < 110) {
|
2020-04-21 12:07:47 +00:00
|
|
|
me.datalinkConnected = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (overrideConnected or !pts.Gear.wow[0].getValue()) {
|
|
|
|
datalinkConnected = 1;
|
|
|
|
} else {
|
|
|
|
datalinkConnected = 0;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2020-04-21 13:24:05 +00:00
|
|
|
var HFS = [highFrequencyRadio.new(systems.ELEC.Bus.acEssShed, 0), highFrequencyRadio.new(systems.ELEC.Bus.ac2, 1)];
|
2020-04-21 12:07:47 +00:00
|
|
|
|
2020-04-21 15:35:11 +00:00
|
|
|
# Can't use setlistener on the voltage as it always gets written to by JSB (and changes according to engine rpm)
|
|
|
|
|
|
|
|
var update_items_HF_radio = [
|
2021-09-02 20:02:35 +00:00
|
|
|
props.UpdateManager.FromHashValue("elecACEssShed", 0.2, func(val)
|
2020-04-21 15:35:11 +00:00
|
|
|
{
|
2020-11-28 15:38:17 +00:00
|
|
|
if (val < 110) {
|
2021-09-02 20:02:35 +00:00
|
|
|
if (HFS[0].receptionProp.getBoolValue()) {
|
|
|
|
HFS[0].transmit = 0;
|
|
|
|
HFS[0].receptionProp.setValue(0);
|
|
|
|
toneTimer1.stop();
|
|
|
|
transmitTimer1.stop();
|
|
|
|
HFS[0].toneControl.setValue(0);
|
|
|
|
HFS[0]._toneTime = nil;
|
|
|
|
ecam.transmitFlag1 = 0;
|
|
|
|
}
|
2020-04-21 15:35:11 +00:00
|
|
|
} else {
|
2021-09-02 20:02:35 +00:00
|
|
|
if (!HFS[0].receptionProp.getBoolValue()) {
|
|
|
|
HFS[0].receptionProp.setValue(1);
|
|
|
|
}
|
2020-04-21 15:35:11 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
),
|
2021-09-02 20:02:35 +00:00
|
|
|
props.UpdateManager.FromHashValue("elecAC2", 0.2, func(val)
|
2020-04-21 15:35:11 +00:00
|
|
|
{
|
2021-09-02 20:02:35 +00:00
|
|
|
if (val < 110) {
|
|
|
|
if (HFS[1].receptionProp.getBoolValue()) {
|
|
|
|
HFS[1].transmit = 0;
|
|
|
|
HFS[1].receptionProp.setValue(0);
|
|
|
|
toneTimer2.stop();
|
|
|
|
transmitTimer2.stop();
|
|
|
|
HFS[1].toneControl.setValue(0);
|
|
|
|
HFS[1]._toneTime = nil;
|
|
|
|
ecam.transmitFlag2 = 0;
|
|
|
|
}
|
2020-04-21 15:35:11 +00:00
|
|
|
} else {
|
2021-09-02 20:02:35 +00:00
|
|
|
if (!HFS[1].receptionProp.getBoolValue()) {
|
|
|
|
HFS[1].receptionProp.setValue(1);
|
|
|
|
}
|
2020-04-21 15:35:11 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
),
|
|
|
|
];
|
|
|
|
|
2020-11-28 15:38:17 +00:00
|
|
|
var HFLoop = func(notification) {
|
2020-04-21 15:35:11 +00:00
|
|
|
foreach (var update_item_HF; update_items_HF_radio) {
|
2020-11-28 15:38:17 +00:00
|
|
|
update_item_HF.update(notification);
|
2020-04-21 15:35:11 +00:00
|
|
|
}
|
|
|
|
}
|
2020-04-21 12:07:47 +00:00
|
|
|
|
2020-04-21 14:54:55 +00:00
|
|
|
var toneTimer1 = maketimer(1, func() {
|
|
|
|
if (pts.Sim.Time.elapsedSec.getValue() > HFS[0]._toneTime) {
|
|
|
|
HFS[0].toneControl.setValue(0);
|
|
|
|
HFS[0]._toneTime = nil;
|
|
|
|
toneTimer1.stop();
|
2020-04-21 12:07:47 +00:00
|
|
|
}
|
2020-04-21 13:24:05 +00:00
|
|
|
});
|
|
|
|
|
2020-04-21 14:54:55 +00:00
|
|
|
var toneTimer2 = maketimer(1, func() {
|
|
|
|
if (pts.Sim.Time.elapsedSec.getValue() > HFS[1]._toneTime) {
|
|
|
|
HFS[1].toneControl.setValue(0);
|
|
|
|
HFS[1]._toneTime = nil;
|
2020-04-21 15:07:16 +00:00
|
|
|
toneTimer2.stop();
|
2020-04-21 14:54:55 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
var transmitTimer1 = maketimer(1, func() {
|
2020-04-21 13:24:05 +00:00
|
|
|
HFS[0].monitorPTT();
|
2020-04-21 14:54:55 +00:00
|
|
|
});
|
2020-04-21 15:35:11 +00:00
|
|
|
|
2020-04-21 14:54:55 +00:00
|
|
|
var transmitTimer2 = maketimer(1, func() {
|
|
|
|
HFS[1].monitorPTT();
|
2021-09-02 20:02:35 +00:00
|
|
|
});
|