add scaffolding for pocsag decoding
This commit is contained in:
parent
4859cb5db8
commit
12e5d2f6f3
@ -160,7 +160,10 @@
|
|||||||
{
|
{
|
||||||
"name": "70cm",
|
"name": "70cm",
|
||||||
"lower_bound": 430000000,
|
"lower_bound": 430000000,
|
||||||
"upper_bound": 440000000
|
"upper_bound": 440000000,
|
||||||
|
"frequencies": {
|
||||||
|
"pocsag": 439987500
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "23cm",
|
"name": "23cm",
|
||||||
|
@ -129,11 +129,6 @@
|
|||||||
"frequency": 439937500,
|
"frequency": 439937500,
|
||||||
"modulation": "dmr"
|
"modulation": "dmr"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Pocsag",
|
|
||||||
"frequency": 439987500,
|
|
||||||
"modulation": "nfm"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "DB0ULR",
|
"name": "DB0ULR",
|
||||||
"frequency": 145575000,
|
"frequency": 145575000,
|
||||||
|
14
csdr/csdr.py
14
csdr/csdr.py
@ -244,6 +244,11 @@ class dsp(object):
|
|||||||
if self.last_decimation != 1.0:
|
if self.last_decimation != 1.0:
|
||||||
chain += ["csdr fractional_decimator_ff {last_decimation}"]
|
chain += ["csdr fractional_decimator_ff {last_decimation}"]
|
||||||
return chain + ["csdr convert_f_s16", "direwolf -c {direwolf_config} -r {audio_rate} -t 0 -q d -q h - 1>&2"]
|
return chain + ["csdr convert_f_s16", "direwolf -c {direwolf_config} -r {audio_rate} -t 0 -q d -q h - 1>&2"]
|
||||||
|
elif which == "pocsag":
|
||||||
|
chain += ["csdr fmdemod_quadri_cf"]
|
||||||
|
if self.last_decimation != 1.0:
|
||||||
|
chain += ["csdr fractional_decimator_ff {last_decimation}"]
|
||||||
|
return chain + ["fsk_demodulator", "pocsag_decoder"]
|
||||||
|
|
||||||
def set_secondary_demodulator(self, what):
|
def set_secondary_demodulator(self, what):
|
||||||
if self.get_secondary_demodulator() == what:
|
if self.get_secondary_demodulator() == what:
|
||||||
@ -448,6 +453,8 @@ class dsp(object):
|
|||||||
return 48000
|
return 48000
|
||||||
elif self.isWsjtMode():
|
elif self.isWsjtMode():
|
||||||
return 12000
|
return 12000
|
||||||
|
elif self.isPocsag():
|
||||||
|
return 12000
|
||||||
return self.get_output_rate()
|
return self.get_output_rate()
|
||||||
|
|
||||||
def isDigitalVoice(self, demodulator=None):
|
def isDigitalVoice(self, demodulator=None):
|
||||||
@ -465,6 +472,11 @@ class dsp(object):
|
|||||||
demodulator = self.get_secondary_demodulator()
|
demodulator = self.get_secondary_demodulator()
|
||||||
return demodulator == "packet"
|
return demodulator == "packet"
|
||||||
|
|
||||||
|
def isPocsag(self, demodulator=None):
|
||||||
|
if demodulator is None:
|
||||||
|
demodulator = self.get_secondary_demodulator()
|
||||||
|
return demodulator == "pocsag"
|
||||||
|
|
||||||
def set_output_rate(self, output_rate):
|
def set_output_rate(self, output_rate):
|
||||||
if self.output_rate == output_rate:
|
if self.output_rate == output_rate:
|
||||||
return
|
return
|
||||||
@ -528,7 +540,7 @@ class dsp(object):
|
|||||||
def set_squelch_level(self, squelch_level):
|
def set_squelch_level(self, squelch_level):
|
||||||
self.squelch_level = squelch_level
|
self.squelch_level = squelch_level
|
||||||
# no squelch required on digital voice modes
|
# no squelch required on digital voice modes
|
||||||
actual_squelch = -150 if self.isDigitalVoice() or self.isPacket() else self.squelch_level
|
actual_squelch = -150 if self.isDigitalVoice() or self.isPacket() or self.isPocsag() else self.squelch_level
|
||||||
if self.running:
|
if self.running:
|
||||||
self.modification_lock.acquire()
|
self.modification_lock.acquire()
|
||||||
self.squelch_pipe_file.write("%g\n" % (self.convertToLinear(actual_squelch)))
|
self.squelch_pipe_file.write("%g\n" % (self.convertToLinear(actual_squelch)))
|
||||||
|
@ -187,6 +187,7 @@
|
|||||||
<option value="jt9" data-feature="wsjt-x">JT9</option>
|
<option value="jt9" data-feature="wsjt-x">JT9</option>
|
||||||
<option value="ft4" data-feature="wsjt-x">FT4</option>
|
<option value="ft4" data-feature="wsjt-x">FT4</option>
|
||||||
<option value="packet" data-feature="packet">Packet</option>
|
<option value="packet" data-feature="packet">Packet</option>
|
||||||
|
<option value="pocsag" data-feature="pocsag">Pocsag</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="openwebrx-panel-line">
|
<div class="openwebrx-panel-line">
|
||||||
|
@ -2160,6 +2160,7 @@ function demodulator_digital_replace(subtype) {
|
|||||||
demodulators[0].set();
|
demodulators[0].set();
|
||||||
break;
|
break;
|
||||||
case "packet":
|
case "packet":
|
||||||
|
case "pocsag":
|
||||||
secondary_demod_start(subtype);
|
secondary_demod_start(subtype);
|
||||||
demodulator_analog_replace('nfm', true);
|
demodulator_analog_replace('nfm', true);
|
||||||
break;
|
break;
|
||||||
|
@ -32,6 +32,7 @@ class FeatureDetector(object):
|
|||||||
"digital_voice_dsd": ["dsd", "sox", "digiham"],
|
"digital_voice_dsd": ["dsd", "sox", "digiham"],
|
||||||
"wsjt-x": ["wsjtx", "sox"],
|
"wsjt-x": ["wsjtx", "sox"],
|
||||||
"packet": ["direwolf", "sox"],
|
"packet": ["direwolf", "sox"],
|
||||||
|
"pocsag": ["digiham", "sox"],
|
||||||
}
|
}
|
||||||
|
|
||||||
def feature_availability(self):
|
def feature_availability(self):
|
||||||
@ -181,6 +182,8 @@ class FeatureDetector(object):
|
|||||||
"mbe_synthesizer",
|
"mbe_synthesizer",
|
||||||
"gfsk_demodulator",
|
"gfsk_demodulator",
|
||||||
"digitalvoice_filter",
|
"digitalvoice_filter",
|
||||||
|
"fsk_demodulator",
|
||||||
|
"pocsag_decoder",
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
True,
|
True,
|
||||||
|
Loading…
Reference in New Issue
Block a user