@@ -431,7 +431,10 class Experiment(models.Model): | |||||
431 | def get_status(self): |
|
431 | def get_status(self): | |
432 |
|
432 | |||
433 | confs = Configuration.objects.filter(experiment=self) |
|
433 | confs = Configuration.objects.filter(experiment=self) | |
434 |
|
434 | |||
|
435 | for conf in confs: | |||
|
436 | conf.status_device() | |||
|
437 | ||||
435 | total = confs.aggregate(models.Sum('device__status'))['device__status__sum'] |
|
438 | total = confs.aggregate(models.Sum('device__status'))['device__status__sum'] | |
436 |
|
439 | |||
437 | if total==2*confs.count(): |
|
440 | if total==2*confs.count(): | |
@@ -579,6 +582,12 class Experiment(models.Model): | |||||
579 | def get_absolute_url_export(self): |
|
582 | def get_absolute_url_export(self): | |
580 | return reverse('url_export_experiment', args=[str(self.id)]) |
|
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 | class Configuration(PolymorphicModel): |
|
592 | class Configuration(PolymorphicModel): | |
584 |
|
593 | |||
@@ -665,7 +674,7 class Configuration(PolymorphicModel): | |||||
665 |
|
674 | |||
666 | if format == 'binary': |
|
675 | if format == 'binary': | |
667 | content_type = 'application/octet-stream' |
|
676 | content_type = 'application/octet-stream' | |
668 |
filename = '%s_%s. |
|
677 | filename = '%s_%s.dat' %(self.device.device_type.name, self.name) | |
669 | content = self.parms_to_binary() |
|
678 | content = self.parms_to_binary() | |
670 |
|
679 | |||
671 | if not content_type: |
|
680 | if not content_type: |
@@ -20,10 +20,10 | |||||
20 | <li><a href="{% url 'url_edit_experiment' experiment.id %}"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit</a></li> |
|
20 | <li><a href="{% url 'url_edit_experiment' experiment.id %}"><span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit</a></li> | |
21 | <li><a href="{% url 'url_delete_experiment' experiment.id %}"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Delete</a></li> |
|
21 | <li><a href="{% url 'url_delete_experiment' experiment.id %}"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Delete</a></li> | |
22 | <li><a href="{{ experiment.get_absolute_url_import }}"><span class="glyphicon glyphicon-import" aria-hidden="true"></span> Import </a></li> |
|
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> |
|
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 %} |
|
|||
26 | <li><a>----------------</a></li> |
|
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 | <li><a href="{% url 'url_mix_experiment' experiment.id %}"><span class="glyphicon glyphicon-random" aria-hidden="true"></span> Mix RC Configurations </a></li> |
|
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 | <li><a href="{% url 'url_add_dev_conf' experiment.id %}"><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span> Add Configuration</a></li> |
|
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 | <li><a href="{% url 'url_sum_experiment' experiment.id %}"><span class="glyphicon glyphicon-list-alt" aria-hidden="true"></span> Summary</a></li> |
|
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 | url(r'^experiment/(?P<id_exp>-?\d+)/delete/$', views.experiment_delete, name='url_delete_experiment'), |
|
32 | url(r'^experiment/(?P<id_exp>-?\d+)/delete/$', views.experiment_delete, name='url_delete_experiment'), | |
33 | url(r'^experiment/(?P<id_exp>-?\d+)/export/$', views.experiment_export, name='url_export_experiment'), |
|
33 | url(r'^experiment/(?P<id_exp>-?\d+)/export/$', views.experiment_export, name='url_export_experiment'), | |
34 | url(r'^experiment/(?P<id_exp>-?\d+)/import/$', views.experiment_import, name='url_import_experiment'), |
|
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 | url(r'^experiment/(?P<id_exp>-?\d+)/mix/$', views.experiment_mix, name='url_mix_experiment'), |
|
37 | url(r'^experiment/(?P<id_exp>-?\d+)/mix/$', views.experiment_mix, name='url_mix_experiment'), | |
36 | url(r'^experiment/(?P<id_exp>-?\d+)/mix/delete/$', views.experiment_mix_delete, name='url_delete_mix_experiment'), |
|
38 | url(r'^experiment/(?P<id_exp>-?\d+)/mix/delete/$', views.experiment_mix_delete, name='url_delete_mix_experiment'), | |
37 | url(r'^experiment/(?P<id_exp>-?\d+)/summary/$', views.experiment_summary, name='url_sum_experiment'), |
|
39 | url(r'^experiment/(?P<id_exp>-?\d+)/summary/$', views.experiment_summary, name='url_sum_experiment'), |
@@ -543,12 +543,12 def experiments(request): | |||||
543 | def experiment(request, id_exp): |
|
543 | def experiment(request, id_exp): | |
544 |
|
544 | |||
545 | experiment = get_object_or_404(Experiment, pk=id_exp) |
|
545 | experiment = get_object_or_404(Experiment, pk=id_exp) | |
546 |
|
546 | experiment.get_status() | ||
547 | configurations = Configuration.objects.filter(experiment=experiment, type=0) |
|
547 | configurations = Configuration.objects.filter(experiment=experiment, type=0) | |
548 |
|
548 | |||
549 | kwargs = {} |
|
549 | kwargs = {} | |
550 |
|
550 | |||
551 |
kwargs['experiment_keys'] = [ |
|
551 | kwargs['experiment_keys'] = ['radar_system', 'name', 'start_time', 'end_time'] | |
552 | kwargs['experiment'] = experiment |
|
552 | kwargs['experiment'] = experiment | |
553 |
|
553 | |||
554 | kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status'] |
|
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 | @user_passes_test(lambda u:u.is_staff) |
|
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 | def experiment_mix(request, id_exp): |
|
754 | def experiment_mix(request, id_exp): | |
715 |
|
755 | |||
716 | experiment = get_object_or_404(Experiment, pk=id_exp) |
|
756 | experiment = get_object_or_404(Experiment, pk=id_exp) |
@@ -13,6 +13,7 from django.core.validators import MinValueValidator, MaxValueValidator | |||||
13 | from apps.main.models import Configuration |
|
13 | from apps.main.models import Configuration | |
14 | from devices.rc import api |
|
14 | from devices.rc import api | |
15 | from .utils import RCFile |
|
15 | from .utils import RCFile | |
|
16 | from django.template.defaultfilters import last | |||
16 |
|
17 | |||
17 | # Create your models here. |
|
18 | # Create your models here. | |
18 |
|
19 | |||
@@ -318,12 +319,13 class RCConfiguration(Configuration): | |||||
318 | # write flips |
|
319 | # write flips | |
319 | data.extend(self.add_cmd('FLIP_START')) |
|
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 | ||
324 | flips.reverse() |
|
325 | last = 0 | |
325 | flip = int(''.join([str(x) for x in flips]), 2) |
|
326 | for flip, delay in zip(states, delays): | |
326 | data.extend(self.add_data(flip+1)) |
|
327 | data.extend(self.add_data((flip^last)+1)) | |
|
328 | last = flip | |||
327 | while delay>252: |
|
329 | while delay>252: | |
328 | data.extend(self.add_data(1)) |
|
330 | data.extend(self.add_data(1)) | |
329 | delay -= 253 |
|
331 | delay -= 253 |
General Comments 0
You need to be logged in to leave comments.
Login now