# Create your views here. from django.contrib import messages from django.shortcuts import redirect, render, get_object_or_404 from django.core.exceptions import ValidationError # from apps.main.models import Experiment, Configuration from apps.main.views import sidebar from .models import DDSConfiguration from .forms import DDSConfigurationForm, UploadFileForm # Create your views here. from radarsys_api import dds def dds_conf(request, id_conf): conf = get_object_or_404(DDSConfiguration, pk=id_conf) answer = dds.echo(ip=str(conf.device.ip_address), port=conf.device.port_address) kwargs = {} kwargs['connected'] = (answer[0] == "1") if not kwargs['connected']: messages.error(request, message=answer) kwargs['dev_conf'] = conf kwargs['dev_conf_keys'] = ['experiment', 'device', 'clock', 'multiplier', 'frequency', 'frequency_bin', 'phase', # 'phase_binary', 'amplitude_ch_A', 'amplitude_ch_B', 'modulation', 'frequency_mod', 'frequency_mod_bin', 'phase_mod'] # 'phase_binary_mod'] kwargs['title'] = 'DDS Configuration' kwargs['suptitle'] = 'Details' kwargs['button'] = 'Edit Configuration' ###### SIDEBAR ###### kwargs.update(sidebar(conf)) return render(request, 'dds_conf.html', kwargs) def dds_conf_edit(request, id_conf): conf = get_object_or_404(DDSConfiguration, pk=id_conf) if request.method=='GET': form = DDSConfigurationForm(instance=conf) if request.method=='POST': form = DDSConfigurationForm(request.POST, instance=conf) if form.is_valid(): conf = form.save(commit=False) if conf.verify_frequencies(): conf.save() return redirect('url_dds_conf', id_conf=conf.id) ##ERRORS kwargs = {} kwargs['id_dev'] = conf.id kwargs['form'] = form kwargs['title'] = 'Device Configuration' kwargs['suptitle'] = 'Edit' kwargs['button'] = 'Save' ###### SIDEBAR ###### kwargs.update(sidebar(conf)) return render(request, 'dds_conf_edit.html', kwargs) def dds_conf_write(request, id_conf): conf = get_object_or_404(DDSConfiguration, pk=id_conf) answer = dds.write_config(ip=str(conf.device.ip_address), port=conf.device.port_address, clock=conf.clock, multiplier=conf.multiplier, freq_regA=conf.frequency_bin, freq_regB=conf.frequency_mod_bin, modulation=conf.modulation, phaseA=conf.phase2binary(conf.phase), phaseB=conf.phase2binary(conf.phase_mod), amplitude0=conf.amplitude_ch_A, amplitude1=conf.amplitude_ch_B) if answer[0] == "1": messages.success(request, answer[2:]) conf.pk = None conf.id = None conf.type = 1 conf.save() else: messages.error(request, "Could not write the parameters to this device") return redirect('url_dds_conf', id_conf=id_conf) def dds_conf_read(request, id_conf): conf = get_object_or_404(DDSConfiguration, pk=id_conf) if request.method=='POST': form = DDSConfigurationForm(request.POST, instance=conf) if form.is_valid(): dds_model = form.save(commit=False) if dds_model.verify_frequencies(): dds_model.save() return redirect('url_dds_conf', id_conf=conf.id) messages.error(request, "Parameters could not be saved") data = {} if request.method=='GET': #mult, freqA, freqB, modulation, phaseA, phaseB, amp0, amp1 parms = dds.read_config(ip=conf.device.ip_address, port=conf.device.port_address) if not parms: messages.error(request, "Could not read dds parameters from this device") return redirect('url_dds_conf', id_conf=conf.id) data = {'multiplier' : parms[0], 'frequency' : conf.binary2freq(parms[1], parms[0]*conf.clock), 'frequency_bin' : parms[1], 'phase' : conf.binary2phase(parms[4]), 'amplitude_ch_A' : parms[6], 'amplitude_ch_B' : parms[7], 'modulation' : parms[3], 'frequency_mod' : conf.binary2freq(parms[2], parms[0]*conf.clock), 'frequency_mod_bin' : parms[2], 'phase_mod' : conf.binary2phase(parms[5]), } form = DDSConfigurationForm(initial=data, instance=conf) kwargs = {} kwargs['id_dev'] = conf.id kwargs['form'] = form kwargs['title'] = 'Device Configuration' kwargs['suptitle'] = 'Parameters read from device' kwargs['button'] = 'Save' ###### SIDEBAR ###### kwargs.update(sidebar(conf)) return render(request, 'dds_conf_edit.html', kwargs) def dds_conf_import(request, id_conf): conf = get_object_or_404(DDSConfiguration, pk=id_conf) if request.method == 'POST': file_form = UploadFileForm(request.POST, request.FILES) if file_form.is_valid(): if conf.update_from_file(request.FILES['file']): try: conf.full_clean() except ValidationError as e: messages.error(request, e) else: conf.save() messages.success(request, "Parameters imported from file: '%s'." %request.FILES['file'].name) messages.warning(request, "Clock Input could not be read from file, using %3.2fMhz by default. Please update it to its real value" %conf.clock) return redirect('url_dds_conf', id_conf=conf.id) messages.error(request, "Could not import parameters from file") else: file_form = UploadFileForm() kwargs = {} kwargs['id_dev'] = conf.id kwargs['title'] = 'Device Configuration' kwargs['form'] = file_form kwargs['suptitle'] = 'Importing file' kwargs['button'] = 'Import' kwargs.update(sidebar(conf)) return render(request, 'dds_conf_import.html', kwargs) def handle_uploaded_file(f): data = {'multiplier' : 5, 'frequency' : 49.92, 'frequency_bin' : 45678, 'phase' : 0, 'amplitude_ch_A' : 1024, 'amplitude_ch_B' : 2014, 'modulation' : 1, 'frequency_mod' : 0, 'frequency_mod_bin' : 0, 'phase_mod' : 180, } return data