##// END OF EJS Templates
Add start, stop methods to experiment, fix RC dat export file...
Juan C. Espinoza -
r240:7e783bc1dbef
parent child
Show More
@@ -431,7 +431,10 class Experiment(models.Model):
431 431 def get_status(self):
432 432
433 433 confs = Configuration.objects.filter(experiment=self)
434
434
435 for conf in confs:
436 conf.status_device()
437
435 438 total = confs.aggregate(models.Sum('device__status'))['device__status__sum']
436 439
437 440 if total==2*confs.count():
@@ -579,6 +582,12 class Experiment(models.Model):
579 582 def get_absolute_url_export(self):
580 583 return reverse('url_export_experiment', args=[str(self.id)])
581 584
585 def get_absolute_url_start(self):
586 return reverse('url_start_experiment', args=[str(self.id)])
587
588 def get_absolute_url_stop(self):
589 return reverse('url_stop_experiment', args=[str(self.id)])
590
582 591
583 592 class Configuration(PolymorphicModel):
584 593
@@ -665,7 +674,7 class Configuration(PolymorphicModel):
665 674
666 675 if format == 'binary':
667 676 content_type = 'application/octet-stream'
668 filename = '%s_%s.bin' %(self.device.device_type.name, self.name)
677 filename = '%s_%s.dat' %(self.device.device_type.name, self.name)
669 678 content = self.parms_to_binary()
670 679
671 680 if not content_type:
@@ -20,10 +20,10
20 20 <li><a href="{% url 'url_edit_experiment' experiment.id %}"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit</a></li>
21 21 <li><a href="{% url 'url_delete_experiment' experiment.id %}"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Delete</a></li>
22 22 <li><a href="{{ experiment.get_absolute_url_import }}"><span class="glyphicon glyphicon-import" aria-hidden="true"></span> Import </a></li>
23 <li><a href="{{ experiment.get_absolute_url_export }}"><span class="glyphicon glyphicon-export" aria-hidden="true"></span> Export </a></li>
24 {% block extra-menu-actions %}
25 {% endblock %}
23 <li><a href="{{ experiment.get_absolute_url_export }}"><span class="glyphicon glyphicon-export" aria-hidden="true"></span> Export </a></li>
26 24 <li><a>----------------</a></li>
25 <li><a href="{{ experiment.get_absolute_url_start}}"><span class="glyphicon glyphicon-play" aria-hidden="true"></span> Start</a></li>
26 <li><a href="{{ experiment.get_absolute_url_stop }}"><span class="glyphicon glyphicon-stop" aria-hidden="true"></span> Stop</a></li>
27 27 <li><a href="{% url 'url_mix_experiment' experiment.id %}"><span class="glyphicon glyphicon-random" aria-hidden="true"></span> Mix RC Configurations </a></li>
28 28 <li><a href="{% url 'url_add_dev_conf' experiment.id %}"><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span> Add Configuration</a></li>
29 29 <li><a href="{% url 'url_sum_experiment' experiment.id %}"><span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span> Summary</a></li>
@@ -32,6 +32,8 urlpatterns = (
32 32 url(r'^experiment/(?P<id_exp>-?\d+)/delete/$', views.experiment_delete, name='url_delete_experiment'),
33 33 url(r'^experiment/(?P<id_exp>-?\d+)/export/$', views.experiment_export, name='url_export_experiment'),
34 34 url(r'^experiment/(?P<id_exp>-?\d+)/import/$', views.experiment_import, name='url_import_experiment'),
35 url(r'^experiment/(?P<id_exp>-?\d+)/start/$', views.experiment_start, name='url_start_experiment'),
36 url(r'^experiment/(?P<id_exp>-?\d+)/stop/$', views.experiment_stop, name='url_stop_experiment'),
35 37 url(r'^experiment/(?P<id_exp>-?\d+)/mix/$', views.experiment_mix, name='url_mix_experiment'),
36 38 url(r'^experiment/(?P<id_exp>-?\d+)/mix/delete/$', views.experiment_mix_delete, name='url_delete_mix_experiment'),
37 39 url(r'^experiment/(?P<id_exp>-?\d+)/summary/$', views.experiment_summary, name='url_sum_experiment'),
@@ -543,12 +543,12 def experiments(request):
543 543 def experiment(request, id_exp):
544 544
545 545 experiment = get_object_or_404(Experiment, pk=id_exp)
546
546 experiment.get_status()
547 547 configurations = Configuration.objects.filter(experiment=experiment, type=0)
548 548
549 549 kwargs = {}
550 550
551 kwargs['experiment_keys'] = ['template', 'radar_system', 'name', 'start_time', 'end_time']
551 kwargs['experiment_keys'] = ['radar_system', 'name', 'start_time', 'end_time']
552 552 kwargs['experiment'] = experiment
553 553
554 554 kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status']
@@ -711,6 +711,46 def experiment_import(request, id_exp):
711 711
712 712
713 713 @user_passes_test(lambda u:u.is_staff)
714 def experiment_start(request, id_exp):
715
716 exp = get_object_or_404(Experiment, pk=id_exp)
717
718 if exp.status == 2:
719 messages.warning(request, 'Experiment {} already running'.format(exp))
720
721 elif exp.status == 3:
722 messages.warning(request, 'Experiment {} already programmed'.format(exp))
723
724 else:
725 task = task_start.delay(exp.pk)
726 exp.status = task.wait()
727 if exp.status==0:
728 messages.error(request, 'Experiment {} not start'.format(exp))
729 if exp.status==2:
730 messages.success(request, 'Experiment {} started'.format(exp))
731
732 exp.save()
733
734 return redirect(exp.get_absolute_url())
735
736
737 @user_passes_test(lambda u:u.is_staff)
738 def experiment_stop(request, id_exp):
739
740 exp = get_object_or_404(Experiment, pk=id_exp)
741
742 if exp.status == 2:
743 task = task_stop.delay(exp.pk)
744 exp.status = task.wait()
745 messages.warning(request, 'Experiment {} stopped'.format(exp))
746 exp.save()
747 else:
748 messages.error(request, 'Experiment {} not running'.format(exp))
749
750 return redirect(exp.get_absolute_url())
751
752
753 @user_passes_test(lambda u:u.is_staff)
714 754 def experiment_mix(request, id_exp):
715 755
716 756 experiment = get_object_or_404(Experiment, pk=id_exp)
@@ -13,6 +13,7 from django.core.validators import MinValueValidator, MaxValueValidator
13 13 from apps.main.models import Configuration
14 14 from devices.rc import api
15 15 from .utils import RCFile
16 from django.template.defaultfilters import last
16 17
17 18 # Create your models here.
18 19
@@ -318,12 +319,13 class RCConfiguration(Configuration):
318 319 # write flips
319 320 data.extend(self.add_cmd('FLIP_START'))
320 321
321 states = self.get_pulses(binary=False)
322 states = self.get_pulses(binary=True)
322 323
323 for flips, delay in zip(states, delays):
324 flips.reverse()
325 flip = int(''.join([str(x) for x in flips]), 2)
326 data.extend(self.add_data(flip+1))
324
325 last = 0
326 for flip, delay in zip(states, delays):
327 data.extend(self.add_data((flip^last)+1))
328 last = flip
327 329 while delay>252:
328 330 data.extend(self.add_data(1))
329 331 delay -= 253
General Comments 0
You need to be logged in to leave comments. Login now