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