@@ -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. |
|
|
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'] = [ |
|
|
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= |
|
|
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