diff --git a/apps/generator/forms.py b/apps/generator/forms.py index a7345a1..f94336d 100644 --- a/apps/generator/forms.py +++ b/apps/generator/forms.py @@ -24,10 +24,10 @@ class GeneratorConfigurationForm(forms.ModelForm): if instance and instance.pk: devices = Device.objects.filter(device_type__name='generator') - if instance.experiment: - self.fields['experiment'].widget.attrs['read_only'] = True + #if instance.experiment: + #self.fields['experiment'].widget.attrs['read_only'] = True #self.fields['experiment'].widget.choices = [(instance.experiment.id, instance.experiment)] - self.fields['device'].widget.choices = [(device.id, device) for device in devices] + #self.fields['device'].widget.choices = [(device.id, device) for device in devices] if 'initial' in kwargs and 'experiment' in kwargs['initial'] and kwargs['initial']['experiment'] not in (0, '0'): self.fields['experiment'].widget.attrs['readonly'] = True diff --git a/apps/main/forms.py b/apps/main/forms.py index a097190..a1c4194 100644 --- a/apps/main/forms.py +++ b/apps/main/forms.py @@ -79,6 +79,23 @@ class ExperimentForm(forms.ModelForm): class Meta: model = Experiment exclude = ['task', 'status', 'author', 'hash'] + +class ExperimentEditionForm(forms.ModelForm): + + def __init__(self, *args, **kwargs): + super(ExperimentEditionForm, self).__init__(*args, **kwargs) + #self.fields['start_time'].widget = TimepickerWidget(self.fields['start_time'].widget.attrs) + #self.fields['end_time'].widget = TimepickerWidget(self.fields['end_time'].widget.attrs) + + def save(self, *args, **kwargs): + exp = super(ExperimentEditionForm, self).save(*args, **kwargs) + exp.name = exp.name.replace(' ', '') + exp.save() + return exp + + class Meta: + model = Experiment + exclude = ['pedestal', 'generator', 'task', 'status', 'author', 'hash'] class LocationForm(forms.ModelForm): class Meta: @@ -111,7 +128,7 @@ class DownloadFileForm(forms.Form): format = forms.ChoiceField(choices= ((0, 'json'),) ) def __init__(self, device_type, *args, **kwargs): - + super(DownloadFileForm, self).__init__(*args, **kwargs) self.fields['format'].choices = FILE_FORMAT diff --git a/apps/main/models.py b/apps/main/models.py index 010ed62..ae45928 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -152,7 +152,7 @@ class Device(models.Model): if self.status == 0: color = "danger" elif self.status == 1: - color = "warning" + color = "primary" elif self.status == 2: color = "info" elif self.status == 3: @@ -328,7 +328,7 @@ class RunningExperiment(models.Model): status = models.PositiveSmallIntegerField(default=0, choices=RADAR_STATES) -class Experiment(models.Model): +class Experiment(PolymorphicModel): template = models.BooleanField(default=False) name = models.CharField(max_length=40, default='', unique=True) @@ -336,10 +336,13 @@ class Experiment(models.Model): #freq = models.FloatField(verbose_name='Operating Freq. (MHz)', validators=[MinValueValidator(1), MaxValueValidator(10000)], default=49.9200) #start_time = models.TimeField(default='00:00:00') #end_time = models.TimeField(default='23:59:59') - pedestal = models.ForeignKey('pedestal.PedestalConfiguration', null=False, blank=False, on_delete=models.CASCADE, default=None, related_name = "pedestal_conf") + pedestal = models.ForeignKey('pedestal.PedestalConfiguration', null=False, blank=False, on_delete=models.PROTECT, default=None, related_name = "pedestal_conf") + generator = models.ForeignKey('Device', null=False, blank=False, on_delete=models.PROTECT, default=None, limit_choices_to={'device_type__name': 'generator'}, related_name = "generator_conf") + reception_rx = models.ForeignKey('usrp_rx.USRPRXConfiguration', null=False, blank=False, on_delete=models.PROTECT, default=None, related_name = "usrp_rx_CONF") + transmission_tx = models.ForeignKey('usrp_tx.USRPTXConfiguration', null=False, blank=False, on_delete=models.PROTECT, default=None, related_name = "usrp_tx") task = models.CharField(max_length=36, default='', blank=True, null=True) status = models.PositiveSmallIntegerField(default=4, choices=EXP_STATES) - author = models.ForeignKey(User, null=True, blank=True,on_delete=models.CASCADE) + author = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE) hash = models.CharField(default='', max_length=64, null=True, blank=True) class Meta: @@ -394,21 +397,33 @@ class Experiment(models.Model): ''' Configure and start experiments's devices ''' - - confs = [] - allconfs = Configuration.objects.filter(experiment=self, type = 0).order_by('-device__device_type__sequence') - confs = allconfs + #confs = [] + #allconfs = Configuration.objects.filter(experiment=self, type = 0).order_by('-device__device_type__sequence') + #confs = allconfs + experiment = get_object_or_404(Experiment, pk=self.id) + id_p = experiment.pedestal_id + id_rx = experiment.reception_rx_id + id_tx = experiment.transmission_tx_id + generator_periode = 1 /experiment.transmission_tx.frequency + generator_delay = experiment.transmission_tx.delay_1 + generator_width = int((experiment.transmission_tx.ipp * 2 / 300000) * 1000000) * experiment.transmission_tx.pulse_1 / 100 + print(generator_width) + generator_selector = 1 try: - for conf in confs: - conf.stop_device() - print("OK") - #conf.write_device() - conf.device.conf_active = conf.pk - conf.device.save() - conf.start_device() - print("OK") - time.sleep(1) + print("Hola") + #Configuration.objects.get(id = id_rx).start_device() + #Configuration.objects.get(id = id_p).start_device() + #Configuration.objects.get(id = id_tx).start_device() + # for conf in confs: + # conf.stop_device() + # print("OK") + # #conf.write_device() + # conf.device.conf_active = conf.pk + # conf.device.save() + # conf.start_device() + # print("OK") + # time.sleep(1) except: return 0 return 2 @@ -420,10 +435,18 @@ class Experiment(models.Model): PEDESTAL, PULSE GENERATOR & USRP's ''' - confs = Configuration.objects.filter(experiment=self, type = 0).order_by('device__device_type__sequence') + #confs = Configuration.objects.filter(experiment=self, type = 0).order_by('device__device_type__sequence') + experiment = get_object_or_404(Experiment, pk=self.id) + id_p = experiment.pedestal_id + id_rx = experiment.reception_rx_id + id_tx = experiment.transmission_tx_id + try: - for conf in confs: - conf.stop_device() + Configuration.objects.get(id = id_rx).stop_device() + Configuration.objects.get(id = id_p).stop_device() + Configuration.objects.get(id = id_tx).stop_device() + # for conf in confs: + # conf.stop_device() except: return 0 return 1 @@ -537,7 +560,6 @@ class Configuration(PolymorphicModel): # name = models.CharField(verbose_name="Configuration Name", max_length=40, default='') device = models.ForeignKey('Device', verbose_name='Device', null=True, on_delete=models.CASCADE) label = models.CharField(verbose_name="Label", max_length=40, default='', blank=False, null=False) - experiment = models.ForeignKey('Experiment', verbose_name='Experiment', null=True, blank=True, on_delete=models.CASCADE) type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES) created_date = models.DateTimeField(auto_now_add=True) programmed_date = models.DateTimeField(auto_now=True) @@ -577,7 +599,7 @@ class Configuration(PolymorphicModel): ignored = ('type', 'polymorphic_ctype', 'configuration_ptr', 'created_date', 'programmed_date', 'template', 'device', - 'experiment') + 'experiment', 'author') for field in self._meta.fields: if field.name in ignored: @@ -653,6 +675,7 @@ class Configuration(PolymorphicModel): content_type = 'application/json' filename = '%s_%s.json' %(self.device.device_type.name, self.name) content = json.dumps(self.parms_to_dict(), indent=2) + print(content) fields = {'content_type':content_type, 'filename':filename, @@ -674,31 +697,31 @@ class Configuration(PolymorphicModel): def status_device(self): - self.message = 'Function not implemented' + self.message = 'Function not supported' return False def stop_device(self): - self.message = 'Function not implemented' + self.message = 'Function not supported' return False def start_device(self): - - self.message = 'Function not implemented' + + self.message = 'Function not supported' return False def write_device(self): - self.message = 'Function not implemented' + self.message = 'Function not supported' return False def read_device(self): - self.message = 'Function not implemented' + self.message = 'Function not supported' return False diff --git a/apps/main/templates/base.html b/apps/main/templates/base.html index 0c9a0f8..bdaf4c8 100644 --- a/apps/main/templates/base.html +++ b/apps/main/templates/base.html @@ -77,6 +77,7 @@