1
0
Fork 0

Refacter transmitter_card fields and kaitai struct decoder info

Removes the field.html include - and the frequent inclusion of that in the transmitter cards.

Fix a bug in satellite.js where input not recognized as an integer

Add gitlab links to the version info

Removes the manually-entered kaitai struct field from view (will need removed from db in a later change) - replacing with a procedurally generated list of fields from the class imported through satnogsdecoders.

Fixes #385

Signed-off-by: Corey Shields <cshields@gmail.com>
spacecruft
Corey Shields 2020-07-30 18:47:22 -04:00
parent faa38e3960
commit ff3d88001e
6 changed files with 84 additions and 98 deletions

View File

@ -4,6 +4,7 @@ from os import path
from uuid import uuid4
import h5py
import satnogsdecoders
from django.conf import settings
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError
@ -488,6 +489,18 @@ class Telemetry(models.Model):
def __str__(self):
return self.name
def get_kaitai_fields(self):
"""Return an empty-value dict of fields for this kaitai.io struct
Beware the overuse of "decoder" in satnogsdecoders and "decoder" the
field above in this Telemetry model"""
results = {}
try:
decoder_class = getattr(satnogsdecoders.decoder, self.decoder.capitalize())
results = satnogsdecoders.decoder.get_fields(decoder_class, empty=True)
except AttributeError:
pass
return results
@python_2_unicode_compatible
class DemodData(models.Model):

View File

@ -81,7 +81,8 @@ function freq_to_ppb(freq_obs, freq) {
}
}
function format_freq(frequency) {
function format_freq(freq) {
var frequency = +freq;
if (frequency < 1000) {
// Frequency is in Hz range
return frequency.toFixed(3) + ' Hz';

View File

@ -161,9 +161,9 @@
</nav>
<div class="satnogs-sidebar-footer text-center">
<span>
{{ version }}
<a href="https://gitlab.com/librespacefoundation/satnogs/satnogs-db" target="_blank">{{ version }} <i class="fab fa-gitlab"></i></a>
<br>
{{ decoders_version }}
<a href="https://gitlab.com/librespacefoundation/satnogs/satnogs-decoders" target="_blank">{{ decoders_version }} <i class="fab fa-gitlab"></i></a>
</span>
</div>
<div class="satnogs-sidebar-footer text-center">

View File

@ -272,25 +272,28 @@
{% for telemetry in satellite.telemetries.all %}
<div class="col-12 col-md-6 my-2">
<div class="card">
<div class="card-body">
<div class="row align-items-center no-gutters">
<div class="col mr-2">
<div class="font-weight-bold h5 mb-1"><span>Decoder:
{{ telemetry.name }}</span></div>
</div>
<div class="card-header">
<div class="satellite-title">
<i class="fas fa-code"></i>
Decoder: {{ telemetry.name }}
</div>
</div>
<div class="card-body">
<div class="col-12">
{% include "includes/field.html" with name="Decoder Script" value=telemetry.decoder %}
<div class="row transmitter-element">
<div class="col-md-6">
<span class="badge badge-secondary satellite-detail-badge">Decoder Struct</span>
</div>
<div class="col-md-6">
<dl class="row mb-0">
<dt class="col-sm-4">Script Name</dt>
<dd class="col-sm-8">{{ telemetry.decoder }}</dd>
</dl>
<dl class="row mb-0">
<dt class="col-sm-4">
Decoder Fields
</dt>
<dd class="col-sm-8">
<a href="#" data-toggle="modal" data-target="#StructModal-{{ telemetry.id }}">
Click here
</a>
</div>
</div>
</dd>
</dl>
</div>
</div>
</div>
@ -301,23 +304,25 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="StructModalLabel">Kaitai Struct for {{ telemetry.name }}</h4>
<h4 class="modal-title" id="StructModalLabel">Kaitai decoder fields for {{ telemetry.name }}</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">×</span></button>
</div>
<div class="modal-body">
{% if not telemetry.schema == '' %}
<div class="kaitai-header">
See <a href="http://kaitai.io" target="_blank">kaitai.io</a> for more information on the format
See <a href="http://kaitai.io" target="_blank">kaitai.io <i class="fas fa-external-link-alt fa-xs"></i></a> for more information on the format
and <a href="https://gitlab.com/librespacefoundation/satnogs/satnogs-decoders" target="_blank">
the satnogs-decoders repository</a> for the most recent decoders.
the satnogs-decoders repository <i class="fas fa-external-link-alt fa-xs"></i></a> for the most recent decoders.
</div>
<div class="kaitai-struct">
<pre>{{ telemetry.schema }}</pre>
<div class="kaitai-struct m-2">
{% for field in telemetry.get_kaitai_fields %}
<code>{{ field }}</code><br/>
{% endfor %}
</div>
{% else %}
<div>
Struct format appears to be missing.
Struct fields appear to be missing.
</div>
{% endif %}
</div>
@ -331,14 +336,13 @@
{% else %}
<div class="col-12 col-md-6 my-2">
<div class="card">
<div class="card-body transmitter-card-body">
<div class="row align-items-center no-gutters">
<div class="col mr-2">
<div class="text-uppercase text-satnogs-primary font-weight-bold h6 mb-1"><span>No Decoders
Found</span></div>
</div>
<div class="col-auto"><i class="fas fa-exclamation-circle fa-2x text-satnogs-inactive"></i></div>
<div class="card-header">
<div class="satellite-title">
<i class="fas fa-code"></i>
No Decoders Found
</div>
</div>
<div class="card-body">
<div class="col-12">
<span>Help us develop a decoder, you can find instructions at this <a
href="https://wiki.satnogs.org/Adding_a_new_data_decoder" target="_blank">wiki link</a></span>

View File

@ -46,68 +46,56 @@
</div>
</div>
<div class="card-body">
<div class="col-12">
{% if transmitter.type %}
{% include "includes/field.html" with name="Type" value=transmitter.type %}
{% endif %}
{% if transmitter.service %}
{% include "includes/field.html" with name="Service" value=transmitter.service %}
<dl class="row">
<dt class="col-sm-6">Type</dt>
<dd class="col-sm-6">{{ transmitter.type }}</dd>
{% if transmitter.service and transmitter.service != 'Unknown' %}
<dt class="col-sm-6">Service</dt>
<dd class="col-sm-6">{{ transmitter.service }}</dd>
{% endif %}
{% if transmitter.downlink_mode %}
{% include "includes/field.html" with name="Downlink Mode" value=transmitter.downlink_mode %}
<dt class="col-sm-6">Downlink Mode</dt>
<dd class="col-sm-6">{{ transmitter.downlink_mode }}</dd>
{% endif %}
{% if transmitter.uplink_mode %}
{% include "includes/field.html" with name="Uplink Mode" value=transmitter.uplink_mode %}
{% if transmitter.downlink_low %}
<dt class="col-sm-6">Downlink Frequency</dt>
<dd class="col-sm-6" data-toggle="tooltip" data-placement="bottom" title="{{ transmitter.downlink_low }} Hz">
<span class="frequency">{{ transmitter.downlink_low }}</span></dd>
{% endif %}
{% if transmitter.downlink_drift %}
<dt class="col-sm-6">Downlink Drifted</dt>
<dd class="col-sm-6" data-toggle="tooltip" data-placement="bottom" title="{{ transmitter.downlink_drift }} ppb">
<span class="frequency drifted" data-freq_or="{{ transmitter.downlink_low }}" data-drift="{{ transmitter.downlink_drift }}">{{ transmitter.downlink_drift }}</dd>
{% endif %}
{% if transmitter.baud %}
{% include "includes/field.html" with name="Baud" value=transmitter.baud %}
{% endif %}
{% if transmitter.type == 'Transmitter' %}
{% if transmitter.downlink_low %}
{% include "includes/field.html" with name="Downlink" value=transmitter.downlink_low hz=transmitter.downlink_low %}
{% endif %}
{% if transmitter.downlink_drift %}
{% include "includes/field.html" with name="Downlink Drifted" value=transmitter.downlink_drift hz=transmitter.downlink_drift class="drifted" freq_or=transmitter.downlink_low %}
{% endif %}
{% endif %}
{% if transmitter.type == 'Transceiver' %}
{% if transmitter.downlink_low %}
{% include "includes/field.html" with name="Downlink" value=transmitter.downlink_low hz=transmitter.downlink_low %}
{% endif %}
{% if transmitter.downlink_drift %}
{% include "includes/field.html" with name="Downlink Drifted" value=transmitter.downlink_drift hz=transmitter.downlink_drift class="drifted" freq_or=transmitter.downlink_low %}
{% endif %}
{% if transmitter.uplink_low %}
{% include "includes/field.html" with name="Uplink" value=transmitter.uplink_low hz=transmitter.uplink_low %}
{% endif %}
{% if transmitter.uplink_drift %}
{% include "includes/field.html" with name="Uplink Drifted" value=transmitter.uplink_drift hz=transmitter.uplink_drift class="drifted" freq_or=transmitter.uplink_low %}
{% endif %}
{% endif %}
{% if transmitter.type == 'Transponder' %}
{% if transmitter.downlink_low %}
{% include "includes/field.html" with name="Downlink Low" value=transmitter.downlink_low hz=transmitter.downlink_low %}
<dt class="col-sm-6">Baud</dt>
<dd class="col-sm-6">{{ transmitter.baud|floatformat:0 }}</dd>
{% endif %}
{% if transmitter.downlink_high %}
{% include "includes/field.html" with name="Downlink High" value=transmitter.downlink_high hz=transmitter.downlink_high %}
{% endif %}
{% if transmitter.downlink_drift %}
{% include "includes/field.html" with name="Downlink Drift" value=transmitter.downlink_drift hz=transmitter.downlink_drift %}
<dt class="col-sm-6">Downlink High</dt>
<dd class="col-sm-6" data-toggle="tooltip" data-placement="bottom" title="{{ transmitter.downlink_high }}">
<span class="frequency">{{ transmitter.downlink_high }}</dd>
{% endif %}
{% if transmitter.uplink_low %}
{% include "includes/field.html" with name="Uplink Low" value=transmitter.uplink_low hz=transmitter.uplink_low %}
{% endif %}
{% if transmitter.uplink_high %}
{% include "includes/field.html" with name="Uplink High" value=transmitter.uplink_high hz=transmitter.uplink_high %}
<dt class="col-sm-6">Uplink Frequency</dt>
<dd class="col-sm-6" data-toggle="tooltip" data-placement="bottom" title="{{ transmitter.uplink_low }}">
<span class="frequency">{{ transmitter.uplink_low }}</dd>
{% endif %}
{% if transmitter.uplink_drift %}
{% include "includes/field.html" with name="Uplink Drift" value=transmitter.uplink_drift hz=transmitter.uplink_drift %}
<dt class="col-sm-6">Uplink Drift</dt>
<dd class="col-sm-6" data-toggle="tooltip" data-placement="bottom" title="{{ transmitter.uplink_drift }} ppb">
<span class="frequency drifted" data-freq_or="{{ transmitter.uplink_low }}" data-drift="{{ transmitter.uplink_drift }}">{{ transmitter.uplink_drift }}</dd>
{% endif %}
{% if transmitter.uplink_high %}
<dt class="col-sm-6">Uplink High</dt>
<dd class="col-sm-6" data-toggle="tooltip" data-placement="bottom" title="{{ transmitter.uplink_high }}">
<span class="frequency">{{ transmitter.uplink_high }}</dd>
{% endif %}
{% if transmitter.invert %}
{% include "includes/field.html" with name="Invert" value=transmitter.invert %}
<dt class="col-sm-6">Inverted</dt>
<dd class="col-sm-6">Yes</dd>
{% endif %}
{% endif %}
</div>
</dl>
</div>
<div class="card-footer align-items-baseline justify-content-between transmitter-card-footer">
Updated on {{ transmitter.created|date:'Y-m-d H:i' }} by {{ transmitter.user }}

View File

@ -1,20 +0,0 @@
<div class="row transmitter-element">
<div class="col-md-6">
<span class="badge badge-secondary satellite-detail-badge">{{ name }}</span>
</div>
<div class="col-md-6" {% if hz %}
{% if freq_or %}
data-toggle="tooltip" data-placement="bottom" title="{{ hz }} ppb"
{% else %}
data-toggle="tooltip" data-placement="bottom" title="{{ hz }} Hz"
{% endif %}
{% endif %}>
<span {% if hz %}class="frequency {{ class }}"{% endif %}
{% if freq_or %}data-freq_or="{{ freq_or }}" data-drift="{{ value }}"{% endif %}>{{ value }}</span>
{% if original and original != value %}
<div>
<del class="text-muted">{{ original }}</del>
</div>
{% endif %}
</div>
</div>