views.py
220 lines
| 7.2 KiB
| text/x-python
|
PythonLexer
|
r12 | # Create your views here. | |
|
r26 | from django.contrib import messages | |
|
r20 | from django.shortcuts import redirect, render, get_object_or_404 | |
|
r0 | ||
|
r32 | from django.core.exceptions import ValidationError | |
|
r30 | # from apps.main.models import Experiment, Configuration | |
|
r26 | from apps.main.views import sidebar | |
|
r12 | from .models import DDSConfiguration | |
|
r32 | from .forms import DDSConfigurationForm, UploadFileForm | |
|
r0 | # Create your views here. | |
|
r12 | ||
|
r30 | from radarsys_api import dds | |
|
r26 | ||
|
r13 | def dds_conf(request, id_conf): | |
|
r12 | ||
|
r20 | conf = get_object_or_404(DDSConfiguration, pk=id_conf) | |
|
r12 | ||
|
r26 | answer = dds.echo(ip=str(conf.device.ip_address), port=conf.device.port_address) | |
|
r13 | kwargs = {} | |
|
r32 | ||
|
r30 | kwargs['connected'] = (answer[0] == "1") | |
|
r26 | ||
|
r32 | if not kwargs['connected']: | |
messages.error(request, message=answer) | |||
|
r17 | kwargs['dev_conf'] = conf | |
|
r13 | kwargs['dev_conf_keys'] = ['experiment', 'device', | |
'clock', 'multiplier', | |||
|
r26 | 'frequency', | |
|
r30 | 'frequency_bin', | |
|
r26 | 'phase', | |
# 'phase_binary', | |||
|
r30 | 'amplitude_ch_A', 'amplitude_ch_B', | |
'modulation', | |||
'frequency_mod', | |||
'frequency_mod_bin', | |||
'phase_mod'] | |||
|
r26 | # 'phase_binary_mod'] | |
|
r12 | ||
|
r13 | kwargs['title'] = 'DDS Configuration' | |
kwargs['suptitle'] = 'Details' | |||
kwargs['button'] = 'Edit Configuration' | |||
|
r17 | ###### SIDEBAR ###### | |
|
r26 | kwargs.update(sidebar(conf)) | |
|
r17 | ||
|
r13 | return render(request, 'dds_conf.html', kwargs) | |
|
r19 | def dds_conf_edit(request, id_conf): | |
|
r13 | ||
|
r20 | conf = get_object_or_404(DDSConfiguration, pk=id_conf) | |
|
r13 | ||
if request.method=='GET': | |||
|
r17 | form = DDSConfigurationForm(instance=conf) | |
|
r12 | ||
|
r13 | if request.method=='POST': | |
|
r17 | form = DDSConfigurationForm(request.POST, instance=conf) | |
|
r12 | ||
if form.is_valid(): | |||
|
r26 | conf = form.save(commit=False) | |
if conf.verify_frequencies(): | |||
conf.save() | |||
return redirect('url_dds_conf', id_conf=conf.id) | |||
##ERRORS | |||
|
r13 | ||
kwargs = {} | |||
|
r26 | kwargs['id_dev'] = conf.id | |
|
r13 | kwargs['form'] = form | |
kwargs['title'] = 'Device Configuration' | |||
kwargs['suptitle'] = 'Edit' | |||
|
r26 | 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, | |||
|
r32 | phaseA=conf.phase2binary(conf.phase), | |
phaseB=conf.phase2binary(conf.phase_mod), | |||
|
r26 | amplitude0=conf.amplitude_ch_A, | |
amplitude1=conf.amplitude_ch_B) | |||
if answer[0] == "1": | |||
messages.success(request, answer[2:]) | |||
|
r30 | ||
conf.pk = None | |||
conf.id = None | |||
conf.type = 1 | |||
conf.save() | |||
|
r26 | else: | |
|
r32 | messages.error(request, "Could not write the parameters to this device") | |
|
r26 | ||
|
r32 | return redirect('url_dds_conf', id_conf=id_conf) | |
|
r26 | ||
def dds_conf_read(request, id_conf): | |||
conf = get_object_or_404(DDSConfiguration, pk=id_conf) | |||
|
r30 | ||
|
r26 | 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) | |||
|
r30 | ||
|
r32 | messages.error(request, "Parameters could not be saved") | |
|
r30 | ||
data = {} | |||
|
r26 | ||
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) | |||
|
r30 | if not parms: | |
|
r32 | messages.error(request, "Could not read dds parameters from this device") | |
|
r30 | return redirect('url_dds_conf', id_conf=conf.id) | |
|
r32 | data = {'multiplier' : parms[0], | |
|
r30 | 'frequency' : conf.binary2freq(parms[1], parms[0]*conf.clock), | |
'frequency_bin' : parms[1], | |||
|
r32 | 'phase' : conf.binary2phase(parms[4]), | |
|
r30 | '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], | |||
|
r32 | 'phase_mod' : conf.binary2phase(parms[5]), | |
|
r30 | } | |
|
r26 | ||
|
r32 | form = DDSConfigurationForm(initial=data, instance=conf) | |
|
r26 | ||
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)) | |||
|
r13 | ||
|
r32 | 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 |