diff --git a/apps/main/models.py b/apps/main/models.py index 52f9f1e..9368bd5 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -431,7 +431,10 @@ class Experiment(models.Model): def get_status(self): confs = Configuration.objects.filter(experiment=self) - + + for conf in confs: + conf.status_device() + total = confs.aggregate(models.Sum('device__status'))['device__status__sum'] if total==2*confs.count(): @@ -579,6 +582,12 @@ class Experiment(models.Model): def get_absolute_url_export(self): return reverse('url_export_experiment', args=[str(self.id)]) + def get_absolute_url_start(self): + return reverse('url_start_experiment', args=[str(self.id)]) + + def get_absolute_url_stop(self): + return reverse('url_stop_experiment', args=[str(self.id)]) + class Configuration(PolymorphicModel): @@ -665,7 +674,7 @@ class Configuration(PolymorphicModel): if format == 'binary': content_type = 'application/octet-stream' - filename = '%s_%s.bin' %(self.device.device_type.name, self.name) + filename = '%s_%s.dat' %(self.device.device_type.name, self.name) content = self.parms_to_binary() if not content_type: diff --git a/apps/main/templates/experiment.html b/apps/main/templates/experiment.html index b619fc2..f9643bf 100644 --- a/apps/main/templates/experiment.html +++ b/apps/main/templates/experiment.html @@ -20,10 +20,10 @@
  • Edit
  • Delete
  • Import
  • -
  • Export
  • - {% block extra-menu-actions %} - {% endblock %} +
  • Export
  • ----------------
  • +
  • Start
  • +
  • Stop
  • Mix RC Configurations
  • Add Configuration
  • Summary
  • diff --git a/apps/main/urls.py b/apps/main/urls.py index 1b886f1..7eb65bb 100644 --- a/apps/main/urls.py +++ b/apps/main/urls.py @@ -32,6 +32,8 @@ urlpatterns = ( url(r'^experiment/(?P-?\d+)/delete/$', views.experiment_delete, name='url_delete_experiment'), url(r'^experiment/(?P-?\d+)/export/$', views.experiment_export, name='url_export_experiment'), url(r'^experiment/(?P-?\d+)/import/$', views.experiment_import, name='url_import_experiment'), + url(r'^experiment/(?P-?\d+)/start/$', views.experiment_start, name='url_start_experiment'), + url(r'^experiment/(?P-?\d+)/stop/$', views.experiment_stop, name='url_stop_experiment'), url(r'^experiment/(?P-?\d+)/mix/$', views.experiment_mix, name='url_mix_experiment'), url(r'^experiment/(?P-?\d+)/mix/delete/$', views.experiment_mix_delete, name='url_delete_mix_experiment'), url(r'^experiment/(?P-?\d+)/summary/$', views.experiment_summary, name='url_sum_experiment'), diff --git a/apps/main/views.py b/apps/main/views.py index 6d35093..a28c09b 100644 --- a/apps/main/views.py +++ b/apps/main/views.py @@ -543,12 +543,12 @@ def experiments(request): def experiment(request, id_exp): experiment = get_object_or_404(Experiment, pk=id_exp) - + experiment.get_status() configurations = Configuration.objects.filter(experiment=experiment, type=0) kwargs = {} - kwargs['experiment_keys'] = ['template', 'radar_system', 'name', 'start_time', 'end_time'] + kwargs['experiment_keys'] = ['radar_system', 'name', 'start_time', 'end_time'] kwargs['experiment'] = experiment kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status'] @@ -711,6 +711,46 @@ def experiment_import(request, id_exp): @user_passes_test(lambda u:u.is_staff) +def experiment_start(request, id_exp): + + exp = get_object_or_404(Experiment, pk=id_exp) + + if exp.status == 2: + messages.warning(request, 'Experiment {} already running'.format(exp)) + + elif exp.status == 3: + messages.warning(request, 'Experiment {} already programmed'.format(exp)) + + else: + task = task_start.delay(exp.pk) + exp.status = task.wait() + if exp.status==0: + messages.error(request, 'Experiment {} not start'.format(exp)) + if exp.status==2: + messages.success(request, 'Experiment {} started'.format(exp)) + + exp.save() + + return redirect(exp.get_absolute_url()) + + +@user_passes_test(lambda u:u.is_staff) +def experiment_stop(request, id_exp): + + exp = get_object_or_404(Experiment, pk=id_exp) + + if exp.status == 2: + task = task_stop.delay(exp.pk) + exp.status = task.wait() + messages.warning(request, 'Experiment {} stopped'.format(exp)) + exp.save() + else: + messages.error(request, 'Experiment {} not running'.format(exp)) + + return redirect(exp.get_absolute_url()) + + +@user_passes_test(lambda u:u.is_staff) def experiment_mix(request, id_exp): experiment = get_object_or_404(Experiment, pk=id_exp) diff --git a/apps/rc/models.py b/apps/rc/models.py index 4b0be9b..b6d369f 100644 --- a/apps/rc/models.py +++ b/apps/rc/models.py @@ -13,6 +13,7 @@ from django.core.validators import MinValueValidator, MaxValueValidator from apps.main.models import Configuration from devices.rc import api from .utils import RCFile +from django.template.defaultfilters import last # Create your models here. @@ -318,12 +319,13 @@ class RCConfiguration(Configuration): # write flips data.extend(self.add_cmd('FLIP_START')) - states = self.get_pulses(binary=False) + states = self.get_pulses(binary=True) - for flips, delay in zip(states, delays): - flips.reverse() - flip = int(''.join([str(x) for x in flips]), 2) - data.extend(self.add_data(flip+1)) + + last = 0 + for flip, delay in zip(states, delays): + data.extend(self.add_data((flip^last)+1)) + last = flip while delay>252: data.extend(self.add_data(1)) delay -= 253