diff --git a/apps/dds/forms.py b/apps/dds/forms.py new file mode 100644 index 0000000..3af86fa --- /dev/null +++ b/apps/dds/forms.py @@ -0,0 +1,24 @@ +from django import forms +from .models import DDSConfiguration + +from django.core.validators import MinValueValidator, MaxValueValidator + +class DDSConfigurationForm(forms.ModelForm): + + freq0 = forms.FloatField(label='Frequency', validators=[MinValueValidator(0e6), MaxValueValidator(150e6)]) + pha0 = forms.FloatField(label='Phase', validators=[MinValueValidator(0), MaxValueValidator(360)]) + + freq1 = forms.FloatField(label='Modulated Frequency', validators=[MinValueValidator(5e6), MaxValueValidator(150e6)], required=False) + pha1 = forms.FloatField(label='Modulated Phase', validators=[MinValueValidator(0), MaxValueValidator(360)], required=False) + + def __init__(self, *args, **kwargs): + #request = kwargs.pop('request') + super(DDSConfigurationForm, self).__init__(*args, **kwargs) + + def clean(self): + # Custom validation to force an integer when type of unit = "Unit" + return + + class Meta: + model = DDSConfiguration + fields = ('clock', 'multiplier', 'modulation') diff --git a/apps/dds/models.py b/apps/dds/models.py index 0d546f8..8de218f 100644 --- a/apps/dds/models.py +++ b/apps/dds/models.py @@ -2,9 +2,20 @@ from django.db import models from apps.main.models import Configuration # Create your models here. +from django.core.validators import MinValueValidator, MaxValueValidator + class DDSConfiguration(Configuration): - + clock = models.FloatField(verbose_name='Clock Master',validators=[MinValueValidator(5e6), MaxValueValidator(50e6)], blank=True, null=True) + multiplier = models.PositiveIntegerField(verbose_name='Multiplier',validators=[MinValueValidator(0), MaxValueValidator(20)], default=4) + modulation = models.PositiveIntegerField(verbose_name='Modulation',validators=[MinValueValidator(0), MaxValueValidator(3)], default=0) + frequency0 = models.PositiveIntegerField(verbose_name='Frequency 0',validators=[MinValueValidator(0), MaxValueValidator(2**32-1)], blank=True, null=True) + frequency1 = models.PositiveIntegerField(verbose_name='Frequency 1',validators=[MinValueValidator(0), MaxValueValidator(2**32-1)], blank=True, null=True) + phase0 = models.PositiveIntegerField(verbose_name='Phase 0',validators=[MinValueValidator(0), MaxValueValidator(2**14-1)], blank=True, null=True) + phase1 = models.PositiveIntegerField(verbose_name='Phase 1',validators=[MinValueValidator(0), MaxValueValidator(2**14-1)], blank=True, null=True) + amplitude_chA = models.PositiveIntegerField(verbose_name='Amplitude CHA',validators=[MinValueValidator(0), MaxValueValidator(2**10-1)], blank=True, null=True) + amplitude_chB = models.PositiveIntegerField(verbose_name='Amplitude CHB',validators=[MinValueValidator(0), MaxValueValidator(2**10-1)], blank=True, null=True) + class Meta: db_table = 'dds_configurations' \ No newline at end of file diff --git a/apps/dds/templates/conf_dds.html b/apps/dds/templates/conf_dds.html new file mode 100644 index 0000000..a89fbe3 --- /dev/null +++ b/apps/dds/templates/conf_dds.html @@ -0,0 +1 @@ +{% extends "conf_device.html" %} \ No newline at end of file diff --git a/apps/dds/templates/index.html b/apps/dds/templates/index.html deleted file mode 100644 index e21ab6b..0000000 --- a/apps/dds/templates/index.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends "base.html" %} -{% block mainactive %}active{% endblock %} - -{% block content-title %}TITLE{% endblock %} -{% block content-suptitle %}Suptitle{% endblock %} - -{% block content %} -

- {% lorem %} -

-{% endblock %} - -{% block sidebar%} - -{% endblock %} diff --git a/apps/dds/urls.py b/apps/dds/urls.py index 959712f..28ad4e1 100644 --- a/apps/dds/urls.py +++ b/apps/dds/urls.py @@ -1,5 +1,6 @@ from django.conf.urls import url urlpatterns = ( - + url(r'^(?P-?\d+)/$', 'apps.dds.views.config_dds', name='url_conf_dds'), + url(r'^(?P-?\d+)/edit/$', 'apps.dds.views.config_dds_edit', name='url_conf_dds_edit'), ) diff --git a/apps/dds/views.py b/apps/dds/views.py index 91ea44a..39d5a23 100644 --- a/apps/dds/views.py +++ b/apps/dds/views.py @@ -1,3 +1,57 @@ -from django.shortcuts import render +# Create your views here. + +from django.shortcuts import redirect, render +from apps.main.models import Device +from .models import DDSConfiguration +from .forms import DDSConfigurationForm # Create your views here. + +def config_dds(request, id_conf): + + if id_conf: + + conf = DDSConfiguration.objects.get(pk=id_conf) + form = DDSConfigurationForm(instance=conf) + experiment = conf.experiment + + devices = Device.objects.filter(configuration__experiment=experiment) + + deviceList = devices.values('configuration__id', 'device_type__alias', 'device_type__name') + + for thisDevice in deviceList: + if thisDevice['configuration__id'] == conf.id: + thisDevice['active'] = 'active' + break + + device = thisDevice + + else: + form = DDSConfigurationForm() + device = '' + experiment = '' + devices = {} + + kwargs = { + 'form': form, + 'device': device, + 'experiment': experiment, + 'devices': deviceList + } + +# return render_to_response('conf_dds.html', kwargs, context_instance=RequestContext(request)) + return render(request, 'conf_dds.html', kwargs) + +def config_dds_edit(request, id_conf): + + if request.method=='POST': + + conf = DDSConfiguration.objects.get(pk=id_conf) + form = DDSConfigurationForm(instance=conf) + + if form.is_valid(): + form.save() + else: + raise ValueError, "Error" + + return redirect('url_conf_dds', id_conf=id_conf) \ No newline at end of file