diff --git a/.env b/.env
index e713735..cf2fd7f 100644
--- a/.env
+++ b/.env
@@ -1,10 +1,10 @@
REDIS_HOST=radarsys-redis
REDIS_PORT=6379
-POSTGRES_DB_NAME=radarsys
POSTGRES_PORT_5432_TCP_ADDR=radarsys-postgres
POSTGRES_PORT_5432_TCP_PORT=5432
-POSTGRES_USER=docker
-POSTGRES_PASSWORD=docker
+DB_NAME=radarsys
+DB_USER=docker
+DB_PASSWORD=docker
PGDATA=/var/lib/postgresql/data
LC_ALL=C.UTF-8
TZ=America/Lima
diff --git a/apps/main/templates/dev_conf.html b/apps/main/templates/dev_conf.html
index 33aaba9..9c20ff9 100644
--- a/apps/main/templates/dev_conf.html
+++ b/apps/main/templates/dev_conf.html
@@ -33,6 +33,7 @@
{% endblock %}
+{% block content-detail %}
Status |
@@ -46,6 +47,7 @@
{% endfor %}
+{% endblock %}
{% block extra-content %}
{% endblock %}
diff --git a/apps/main/views.py b/apps/main/views.py
index 09bf64d..4bce831 100644
--- a/apps/main/views.py
+++ b/apps/main/views.py
@@ -36,7 +36,7 @@ from apps.cgs.models import CGSConfiguration
from apps.jars.models import JARSConfiguration, EXPERIMENT_TYPE
from apps.usrp.models import USRPConfiguration
from apps.abs.models import ABSConfiguration
-from apps.rc.models import RCConfiguration, RCLine, RCLineType
+from apps.rc.models import RCConfiguration, RCLine, RCLineType, RCClock
from apps.dds.models import DDSConfiguration
from radarsys.celery import app
@@ -1368,6 +1368,9 @@ def dev_conf_new(request, id_exp=0, id_dev=0):
l.pk) for l in new_lines if l.get_name() == ref_line.get_name()][0]
line.params = json.dumps(line_params)
line.save()
+ elif conf.device.device_type.name == 'rc':
+ clk = RCClock(rc_configuration=conf)
+ clk.save()
return redirect('url_dev_conf', id_conf=conf.pk)
diff --git a/apps/rc/admin.py b/apps/rc/admin.py
index 92356f0..555c362 100644
--- a/apps/rc/admin.py
+++ b/apps/rc/admin.py
@@ -1,5 +1,5 @@
from django.contrib import admin
-from .models import RCConfiguration, RCLine, RCLineType, RCLineCode
+from .models import RCConfiguration, RCLine, RCLineType, RCLineCode, RCClock
# Register your models here.
@@ -7,3 +7,4 @@ admin.site.register(RCConfiguration)
admin.site.register(RCLine)
admin.site.register(RCLineType)
admin.site.register(RCLineCode)
+admin.site.register(RCClock)
diff --git a/apps/rc/forms.py b/apps/rc/forms.py
index b8d40d9..fec2b2e 100644
--- a/apps/rc/forms.py
+++ b/apps/rc/forms.py
@@ -5,7 +5,7 @@ from django import forms
from django.utils.safestring import mark_safe
from apps.main.models import Device
from apps.main.forms import add_empty_choice
-from .models import RCConfiguration, RCLine, RCLineType, RCLineCode
+from .models import RCConfiguration, RCLine, RCLineType, RCLineCode, RCClock
from .widgets import KmUnitWidget, KmUnitHzWidget, KmUnitDcWidget, UnitKmWidget, DefaultWidget, CodesWidget, HiddenWidget, HCheckboxSelectMultiple
def create_choices_from_model(model, conf_id, all_choice=False):
@@ -78,7 +78,7 @@ class RCConfigurationForm(forms.ModelForm):
class Meta:
model = RCConfiguration
- exclude = ('type', 'parameters', 'status', 'total_units', 'mix', 'author', 'hash')
+ exclude = ('type', 'parameters', 'status', 'total_units', 'mix', 'author', 'hash', 'clock_in')
def clean(self):
form_data = super(RCConfigurationForm, self).clean()
@@ -382,3 +382,34 @@ class RCLineCodesForm(forms.ModelForm):
class Meta:
model = RCLineCode
exclude = ('name',)
+
+class RCClockForm(forms.ModelForm):
+
+ def __init__(self, *args, **kwargs):
+ super(RCClockForm, self).__init__(*args, **kwargs)
+
+ instance = getattr(self, 'instance', None)
+
+ if instance is not None and instance.mode:
+ self.fields['multiplier'].widget.attrs['readonly'] = True
+ self.fields['divisor'].widget.attrs['readonly'] = True
+ self.fields['reference'].widget.attrs['readonly'] = True
+
+
+ class Meta:
+ model = RCClock
+ exclude = ('rc_configuration',)
+
+ def clean(self):
+
+ form_data = self.cleaned_data
+
+ if form_data['mode'] is True and float(form_data['frequency']) not in (60., 55.):
+ self.add_error('frequency', 'Only 60 and 55 are valid values in auto mode')
+ elif form_data['mode'] is False:
+ if form_data['reference']==0 and not 24<=form_data['multiplier']<=36:
+ self.add_error('multiplier', 'For 25MHz, valid values are between 24 and 36')
+ elif form_data['reference']==1 and not 60<=form_data['multiplier']<=90:
+ self.add_error('multiplier', 'For 10MHz, valid values are between 60 and 90')
+
+ return form_data
\ No newline at end of file
diff --git a/apps/rc/models.py b/apps/rc/models.py
index 538bd1c..405c906 100644
--- a/apps/rc/models.py
+++ b/apps/rc/models.py
@@ -547,6 +547,20 @@ class RCConfiguration(Configuration):
def write_device(self, raw=False):
+ if not raw:
+ clock = RCClock.objects.get(rc_configuration=self)
+ if clock.mode:
+ data = {'default': clock.frequency}
+ else:
+ data = {'manual': [clock.multiplier, clock.divisor, clock.reference]}
+ payload = self.request('setfreq', 'post', data=json.dumps(data))
+ if payload['command'] <> 'ok':
+ self.message = 'RC write: {}'.format(payload['command'])
+ else:
+ self.message = payload['programming']
+ if payload['programming'] == 'fail':
+ self.message = 'RC write: error programming CGS chip'
+
values = []
for pulse, delay in zip(self.get_pulses(), self.get_delays()):
while delay>65536:
@@ -1002,3 +1016,12 @@ class RCLine(models.Model):
Y = [(int(ipp*x+before+delay[x%delays]+sync), int(ipp*x+width+before+delay[x%delays]+after+sync)) for x in range(ntx)]
return Y
+
+class RCClock(models.Model):
+
+ rc_configuration = models.ForeignKey(RCConfiguration, on_delete=models.CASCADE)
+ mode = models.BooleanField(default=True, choices=((True, 'Auto'), (False, 'Manual')))
+ multiplier = models.PositiveIntegerField(default=60)
+ divisor = models.PositiveIntegerField(default=10)
+ reference = models.PositiveSmallIntegerField(default=1, choices=((0, 'Internal (25MHz)'), (1, 'External (10MHz)')))
+ frequency = models.FloatField(default=60.0)
\ No newline at end of file
diff --git a/apps/rc/static/js/cr.js b/apps/rc/static/js/cr.js
index 06d50e0..97d9e38 100644
--- a/apps/rc/static/js/cr.js
+++ b/apps/rc/static/js/cr.js
@@ -107,14 +107,55 @@ function updateWindows(label) {
}
}
-
- $("#id_clock_in").change(function() {
- $("#id_clock").val(parseFloat($('#id_clock_in').val())/parseFloat($('#id_clock_divider').val()));
+
+function updateClock() {
+ if ($("#id_reference").val()==0){
+ var ref = 25;
+ }else{
+ var ref = 10;
+ }
+ $("#id_frequency").val(parseFloat($('#id_multiplier').val())*ref/parseFloat($('#id_divisor').val()));
+ $("#id_clock").val(parseFloat($('#id_frequency').val())/parseFloat($('#id_clock_divider').val()));
+ updateUnits();
+}
+
+
+ $("#id_frequency").change(function() {
+ $("#id_clock").val(parseFloat($('#id_frequency').val())/parseFloat($('#id_clock_divider').val()));
updateUnits();
});
$("#id_clock_divider").change(function() {
- $("#id_clock").val(parseFloat($('#id_clock_in').val())/parseFloat($('#id_clock_divider').val()));
+ $("#id_clock").val(parseFloat($('#id_frequency').val())/parseFloat($('#id_clock_divider').val()));
updateUnits();
});
+ $("#id_mode").change(function() {
+ if ($("#id_mode").val()=="False"){
+ $('#id_multiplier').removeProp("readonly");
+ $('#id_divisor').removeProp("readonly");
+ $('#id_reference').removeProp("readonly");
+ $('#id_frequency').prop("readonly", true);
+ updateClock();
+ }else{
+ $('#id_frequency').removeProp("readonly");
+ $('#id_multiplier').prop("readonly", true);
+ $('#id_divisor').prop("readonly", true);
+ $('#id_reference').prop("readonly", true);
+ $('#id_reference').val(1)
+ $('#id_frequency').val(60);
+ $("#id_clock").val(parseFloat($('#id_frequency').val())/parseFloat($('#id_clock_divider').val()));
+ }
+ });
+
+ $("#id_multiplier").change(function() {
+ updateClock();
+ });
+
+ $("#id_divisor").change(function() {
+ updateClock();
+ });
+
+ $("#id_reference").change(function() {
+ updateClock();
+ });
\ No newline at end of file
diff --git a/apps/rc/templates/rc_conf.html b/apps/rc/templates/rc_conf.html
index 7a8c59d..3e20179 100644
--- a/apps/rc/templates/rc_conf.html
+++ b/apps/rc/templates/rc_conf.html
@@ -7,6 +7,40 @@
View Pulses
{% endblock %}
+{% block content-detail %}
+
+Clock
+
+
+ Mode |
+ {{clock.get_mode_display}} |
+
+
+ Reference |
+ {{clock.get_reference_display}} |
+
+
+ Frequency |
+ {{clock.frequency}} |
+
+
+
+RC
+
+
+ Status |
+ {{dev_conf.device.get_status_display}} |
+
+
+ {% for key in dev_conf_keys %}
+
+ {% get_verbose_field_name dev_conf key %} |
+ {{dev_conf|attr:key}} |
+
+ {% endfor %}
+
+{% endblock %}
+
{% block extra-content %}
diff --git a/apps/rc/templates/rc_conf_edit.html b/apps/rc/templates/rc_conf_edit.html
index caefff5..0895330 100644
--- a/apps/rc/templates/rc_conf_edit.html
+++ b/apps/rc/templates/rc_conf_edit.html
@@ -14,9 +14,13 @@
{% block content %}