diff --git a/.env b/.env index 6411616..a908d18 100644 --- a/.env +++ b/.env @@ -1,7 +1,8 @@ + REDIS_HOST=radarsys-redis -REDIS_PORT=6379 +REDIS_PORT=6300 POSTGRES_PORT_5432_TCP_ADDR=radarsys-postgres -POSTGRES_PORT_5432_TCP_PORT=5432 +POSTGRES_PORT_5432_TCP_PORT=5400 DB_NAME=radarsys DB_USER=docker DB_PASSWORD=docker @@ -9,4 +10,4 @@ PGDATA=/var/lib/postgresql/data LC_ALL=C.UTF-8 TZ=America/Lima DOCKER_DATA=/data/dockers/radarsys/ -LOCAL_IP=192.168.1.128 +LOCAL_IP=192.168.1.128 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 59887dd..4c284df 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -migrations/ .DS_Store *.sqlite .vscode/ diff --git a/apps/abs/migrations/0001_initial.py b/apps/abs/migrations/0001_initial.py new file mode 100644 index 0000000..2b82410 --- /dev/null +++ b/apps/abs/migrations/0001_initial.py @@ -0,0 +1,40 @@ +# Generated by Django 2.2.1 on 2023-01-17 09:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='ABSActive', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + options={ + 'db_table': 'abs_absactive', + }, + ), + migrations.CreateModel( + name='ABSBeam', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(default='Beam', max_length=60)), + ('antenna', models.CharField(default='{"antenna_up": [[0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5], [0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5], [0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5], [0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5], [0.5, 0.5, 0.5, 0.5, 1.0, 1.0, 1.0, 1.0], [0.5, 0.5, 0.5, 0.5, 1.0, 1.0, 1.0, 1.0], [0.5, 0.5, 0.5, 0.5, 1.0, 1.0, 1.0, 1.0], [0.5, 0.5, 0.5, 0.5, 1.0, 1.0, 1.0, 1.0]], "antenna_down": [[0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5], [0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5], [0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5], [0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5], [0.5, 0.5, 0.5, 0.5, 3.0, 3.0, 3.0, 3.0], [0.5, 0.5, 0.5, 0.5, 3.0, 3.0, 3.0, 3.0], [0.5, 0.5, 0.5, 0.5, 3.0, 3.0, 3.0, 3.0], [0.5, 0.5, 0.5, 0.5, 3.0, 3.0, 3.0, 3.0]]}', max_length=1000, verbose_name='Antenna')), + ('tx', models.CharField(default='{"up": [[1, 1, 1, 1, 0, 0, 0, 0], [1, 1, 1, 1, 0, 0, 0, 0], [1, 1, 1, 1, 0, 0, 0, 0], [1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 1]], "down": [[1, 1, 1, 1, 0, 0, 0, 0], [1, 1, 1, 1, 0, 0, 0, 0], [1, 1, 1, 1, 0, 0, 0, 0], [1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 1]]}', max_length=1000, verbose_name='Tx')), + ('rx', models.CharField(default='{"up": [[1, 1, 1, 1, 0, 0, 0, 0], [1, 1, 1, 1, 0, 0, 0, 0], [1, 1, 1, 1, 0, 0, 0, 0], [1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 1]], "down": [[1, 1, 1, 1, 0, 0, 0, 0], [1, 1, 1, 1, 0, 0, 0, 0], [1, 1, 1, 1, 0, 0, 0, 0], [1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1, 1]]}', max_length=1000, verbose_name='Rx')), + ('s_time', models.TimeField(default='00:00:00', verbose_name='Star Time')), + ('e_time', models.TimeField(default='23:59:59', verbose_name='End Time')), + ('ues', models.CharField(default='{"up": [0.533333, 0.0, 1.06667, 0.0], "down": [0.533333, 0.0, 1.06667, 0.0]}', max_length=100, verbose_name='Ues')), + ('only_rx', models.CharField(default='{"up": false, "down": false}', max_length=40, verbose_name='Only RX')), + ], + options={ + 'db_table': 'abs_beams', + }, + ), + ] diff --git a/apps/abs/migrations/0002_auto_20230117_0948.py b/apps/abs/migrations/0002_auto_20230117_0948.py new file mode 100644 index 0000000..3d8c922 --- /dev/null +++ b/apps/abs/migrations/0002_auto_20230117_0948.py @@ -0,0 +1,42 @@ +# Generated by Django 2.2.1 on 2023-01-17 09:48 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('main', '0001_initial'), + ('abs', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='ABSConfiguration', + fields=[ + ('configuration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='main.Configuration')), + ('active_beam', models.PositiveSmallIntegerField(default=0, verbose_name='Active Beam')), + ('module_status', models.CharField(default='0000000000000000000000000000000000000000000000000000000000000000', max_length=10000, verbose_name='Module Status')), + ('operation_mode', models.PositiveSmallIntegerField(choices=[(0, 'Manual'), (1, 'Automatic')], default=0, verbose_name='Operation Mode')), + ('operation_value', models.FloatField(blank=True, default='10', null=True, verbose_name='Periodic (seconds)')), + ('module_messages', models.CharField(default='{"1": "Module 1", "2": "Module 2", "3": "Module 3", "4": "Module 4", "5": "Module 5", "6": "Module 6", "7": "Module 7", "8": "Module 8", "9": "Module 9", "10": "Module 10", "11": "Module 11", "12": "Module 12", "13": "Module 13", "14": "Module 14", "15": "Module 15", "16": "Module 16", "17": "Module 17", "18": "Module 18", "19": "Module 19", "20": "Module 20", "21": "Module 21", "22": "Module 22", "23": "Module 23", "24": "Module 24", "25": "Module 25", "26": "Module 26", "27": "Module 27", "28": "Module 28", "29": "Module 29", "30": "Module 30", "31": "Module 31", "32": "Module 32", "33": "Module 33", "34": "Module 34", "35": "Module 35", "36": "Module 36", "37": "Module 37", "38": "Module 38", "39": "Module 39", "40": "Module 40", "41": "Module 41", "42": "Module 42", "43": "Module 43", "44": "Module 44", "45": "Module 45", "46": "Module 46", "47": "Module 47", "48": "Module 48", "49": "Module 49", "50": "Module 50", "51": "Module 51", "52": "Module 52", "53": "Module 53", "54": "Module 54", "55": "Module 55", "56": "Module 56", "57": "Module 57", "58": "Module 58", "59": "Module 59", "60": "Module 60", "61": "Module 61", "62": "Module 62", "63": "Module 63", "64": "Module 64"}', max_length=10000, verbose_name='Modules Messages')), + ], + options={ + 'db_table': 'abs_configurations', + }, + bases=('main.configuration',), + ), + migrations.AddField( + model_name='absbeam', + name='abs_conf', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='abs.ABSConfiguration', verbose_name='ABS Configuration'), + ), + migrations.AddField( + model_name='absactive', + name='conf', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='abs.ABSConfiguration', verbose_name='ABS Configuration'), + ), + ] diff --git a/apps/cgs/migrations/0001_initial.py b/apps/cgs/migrations/0001_initial.py new file mode 100644 index 0000000..9d30f40 --- /dev/null +++ b/apps/cgs/migrations/0001_initial.py @@ -0,0 +1,31 @@ +# Generated by Django 2.2.1 on 2023-01-17 09:48 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('main', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='CGSConfiguration', + fields=[ + ('configuration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='main.Configuration')), + ('freq0', models.PositiveIntegerField(default=60, validators=[django.core.validators.MaxValueValidator(450000000.0)], verbose_name='Frequency 0 (Hz)')), + ('freq1', models.PositiveIntegerField(default=60, validators=[django.core.validators.MaxValueValidator(450000000.0)], verbose_name='Frequency 1 (Hz)')), + ('freq2', models.PositiveIntegerField(default=60, validators=[django.core.validators.MaxValueValidator(450000000.0)], verbose_name='Frequency 2 (Hz)')), + ('freq3', models.PositiveIntegerField(default=60, validators=[django.core.validators.MaxValueValidator(450000000.0)], verbose_name='Frequency 3 (Hz)')), + ], + options={ + 'db_table': 'cgs_configurations', + }, + bases=('main.configuration',), + ), + ] diff --git a/apps/dds/migrations/0001_initial.py b/apps/dds/migrations/0001_initial.py new file mode 100644 index 0000000..61aae83 --- /dev/null +++ b/apps/dds/migrations/0001_initial.py @@ -0,0 +1,39 @@ +# Generated by Django 2.2.1 on 2023-01-17 09:48 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('main', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='DDSConfiguration', + fields=[ + ('configuration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='main.Configuration')), + ('clock', models.FloatField(default=60, null=True, validators=[django.core.validators.MinValueValidator(5), django.core.validators.MaxValueValidator(75)], verbose_name='Clock In (MHz)')), + ('multiplier', models.PositiveIntegerField(default=4, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(20)], verbose_name='Multiplier')), + ('frequencyA_Mhz', models.DecimalField(decimal_places=16, default=49.92, max_digits=19, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(150)], verbose_name='Frequency A (MHz)')), + ('frequencyA', models.BigIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(281474976710655)], verbose_name='Frequency A (Decimal)')), + ('frequencyB_Mhz', models.DecimalField(blank=True, decimal_places=16, max_digits=19, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(150)], verbose_name='Frequency B (MHz)')), + ('frequencyB', models.BigIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(281474976710655)], verbose_name='Frequency B (Decimal)')), + ('phaseA_degrees', models.FloatField(default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(360)], verbose_name='Phase A (Degrees)')), + ('phaseB_degrees', models.FloatField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(360)], verbose_name='Phase B (Degrees)')), + ('modulation', models.PositiveIntegerField(choices=[(0, 'Single Tone'), (1, 'FSK'), (2, 'Ramped FSK'), (3, 'Chirp'), (4, 'BPSK')], default=0, verbose_name='Modulation Type')), + ('amplitude_enabled', models.BooleanField(choices=[(False, 'Disabled'), (True, 'Enabled')], default=False, verbose_name='Amplitude Control')), + ('amplitudeI', models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(4095)], verbose_name='Amplitude CH1')), + ('amplitudeQ', models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(4095)], verbose_name='Amplitude CH2')), + ], + options={ + 'db_table': 'dds_configurations', + }, + bases=('main.configuration',), + ), + ] diff --git a/apps/dds_rest/migrations/0001_initial.py b/apps/dds_rest/migrations/0001_initial.py new file mode 100644 index 0000000..6000efe --- /dev/null +++ b/apps/dds_rest/migrations/0001_initial.py @@ -0,0 +1,45 @@ +# Generated by Django 2.2.1 on 2023-01-17 09:48 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('main', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='DDSRestConfiguration', + fields=[ + ('configuration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='main.Configuration')), + ('clock', models.FloatField(default=60, null=True, validators=[django.core.validators.MinValueValidator(5), django.core.validators.MaxValueValidator(75)], verbose_name='Clock In (MHz)')), + ('multiplier', models.PositiveIntegerField(default=4, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(20)], verbose_name='Multiplier')), + ('frequencyA_Mhz', models.DecimalField(decimal_places=16, default=49.92, max_digits=19, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(150)], verbose_name='Frequency A (MHz)')), + ('frequencyA', models.BigIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(281474976710655)], verbose_name='Frequency A (Decimal)')), + ('frequencyB_Mhz', models.DecimalField(blank=True, decimal_places=16, max_digits=19, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(150)], verbose_name='Frequency B (MHz)')), + ('frequencyB', models.BigIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(281474976710655)], verbose_name='Frequency B (Decimal)')), + ('delta_frequency_Mhz', models.DecimalField(blank=True, decimal_places=16, max_digits=19, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(150)], verbose_name='Delta frequency (MHz)')), + ('delta_frequency', models.BigIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(281474976710655)], verbose_name='Delta frequency (Decimal)')), + ('update_clock_Mhz', models.DecimalField(blank=True, decimal_places=16, max_digits=19, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(150)], verbose_name='Update clock (MHz)')), + ('update_clock', models.BigIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(4294967295)], verbose_name='Update clock (Decimal)')), + ('ramp_rate_clock_Mhz', models.DecimalField(blank=True, decimal_places=16, max_digits=19, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(150)], verbose_name='Ramp rate clock (MHz)')), + ('ramp_rate_clock', models.BigIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(262143)], verbose_name='Ramp rate clock (Decimal)')), + ('phaseA_degrees', models.FloatField(default=0, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(360)], verbose_name='Phase A (Degrees)')), + ('phaseB_degrees', models.FloatField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(360)], verbose_name='Phase B (Degrees)')), + ('modulation', models.PositiveIntegerField(choices=[(0, 'Single Tone'), (1, 'FSK'), (2, 'Ramped FSK'), (3, 'Chirp'), (4, 'BPSK')], default=0, verbose_name='Modulation Type')), + ('amplitude_enabled', models.BooleanField(choices=[(False, 'Disabled'), (True, 'Enabled')], default=False, verbose_name='Amplitude Control')), + ('amplitudeI', models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(4095)], verbose_name='Amplitude CH1')), + ('amplitudeQ', models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(4095)], verbose_name='Amplitude CH2')), + ], + options={ + 'db_table': 'ddsrest_configurations', + }, + bases=('main.configuration',), + ), + ] diff --git a/apps/dds_rest/migrations/__init__.py b/apps/dds_rest/migrations/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/apps/dds_rest/migrations/__init__.py diff --git a/apps/jars/migrations/0001_initial.py b/apps/jars/migrations/0001_initial.py new file mode 100644 index 0000000..825a75c --- /dev/null +++ b/apps/jars/migrations/0001_initial.py @@ -0,0 +1,72 @@ +# Generated by Django 2.2.1 on 2023-01-17 09:48 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('main', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='JARSFilter', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(default='', max_length=60, unique=True, verbose_name='Name')), + ('clock', models.FloatField(default=60, null=True, validators=[django.core.validators.MinValueValidator(5), django.core.validators.MaxValueValidator(75)], verbose_name='Clock In (MHz)')), + ('multiplier', models.PositiveIntegerField(default=5, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(20)], verbose_name='Multiplier')), + ('frequency', models.FloatField(default=49.92, null=True, validators=[django.core.validators.MaxValueValidator(150)], verbose_name='Frequency (MHz)')), + ('f_decimal', models.BigIntegerField(default=721554505, null=True, validators=[django.core.validators.MinValueValidator(-9223372036854775808), django.core.validators.MaxValueValidator(4294967295)], verbose_name='Frequency (Decimal)')), + ('cic_2', models.PositiveIntegerField(default=10, validators=[django.core.validators.MinValueValidator(2), django.core.validators.MaxValueValidator(100)], verbose_name='CIC2')), + ('scale_cic_2', models.PositiveIntegerField(default=1, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(6)], verbose_name='Scale CIC2')), + ('cic_5', models.PositiveIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100)], verbose_name='CIC5')), + ('scale_cic_5', models.PositiveIntegerField(default=5, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(20)], verbose_name='Scale CIC5')), + ('fir', models.PositiveIntegerField(default=6, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100)], verbose_name='FIR')), + ('scale_fir', models.PositiveIntegerField(default=3, validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(7)], verbose_name='Scale FIR')), + ('number_taps', models.PositiveIntegerField(default=4, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(256)], verbose_name='Number of taps')), + ('taps', models.CharField(default='0', max_length=1600, verbose_name='Taps')), + ], + options={ + 'db_table': 'jars_filters', + }, + ), + migrations.CreateModel( + name='JARSConfiguration', + fields=[ + ('configuration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='main.Configuration')), + ('exp_type', models.PositiveIntegerField(choices=[(0, 'RAW_DATA'), (1, 'PDATA')], default=0, verbose_name='Experiment Type')), + ('cards_number', models.PositiveIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(4)], verbose_name='Number of Cards')), + ('channels_number', models.PositiveIntegerField(default=5, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(8)], verbose_name='Number of Channels')), + ('channels', models.CharField(default='1,2,3,4,5', max_length=15, verbose_name='Channels')), + ('data_type', models.PositiveIntegerField(choices=[(0, 'SHORT'), (1, 'FLOAT')], default=0, verbose_name='Data Type')), + ('raw_data_blocks', models.PositiveIntegerField(default=60, validators=[django.core.validators.MaxValueValidator(5000)], verbose_name='Raw Data Blocks')), + ('profiles_block', models.PositiveIntegerField(default=400, verbose_name='Profiles Per Block')), + ('acq_profiles', models.PositiveIntegerField(default=400, verbose_name='Acquired Profiles')), + ('ftp_interval', models.PositiveIntegerField(default=60, verbose_name='FTP Interval')), + ('fftpoints', models.PositiveIntegerField(default=16, verbose_name='FFT Points')), + ('cohe_integr_str', models.PositiveIntegerField(default=30, validators=[django.core.validators.MinValueValidator(1)], verbose_name='Coh. Int. Stride')), + ('cohe_integr', models.PositiveIntegerField(default=30, validators=[django.core.validators.MinValueValidator(1)], verbose_name='Coherent Integrations')), + ('incohe_integr', models.PositiveIntegerField(default=30, validators=[django.core.validators.MinValueValidator(1)], verbose_name='Incoherent Integrations')), + ('decode_data', models.PositiveIntegerField(choices=[(0, 'None'), (1, 'TimeDomain'), (2, 'FreqDomain'), (3, 'InvFreqDomain')], default=0, verbose_name='Decode Data')), + ('post_coh_int', models.BooleanField(default=False, verbose_name='Post Coherent Integration')), + ('spectral_number', models.PositiveIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1)], verbose_name='# Spectral Combinations')), + ('spectral', models.CharField(default='[0, 0],', max_length=5000, verbose_name='Combinations')), + ('create_directory', models.BooleanField(default=True, verbose_name='Create Directory Per Day')), + ('include_expname', models.BooleanField(default=False, verbose_name='Experiment Name in Directory')), + ('save_ch_dc', models.BooleanField(default=True, verbose_name='Save Channels DC')), + ('save_data', models.BooleanField(default=True, verbose_name='Save Data')), + ('filter_parms', models.CharField(default='{"id":1, "clock": 60, "multiplier": 5, "frequency": 49.92, "f_decimal":\t721554506, "fir": 2, "cic_2": 12, "cic_5": 25}', max_length=10000)), + ('filter', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='jars.JARSFilter', verbose_name='Filter')), + ], + options={ + 'db_table': 'jars_configurations', + }, + bases=('main.configuration',), + ), + ] diff --git a/apps/main/migrations/0001_initial.py b/apps/main/migrations/0001_initial.py new file mode 100644 index 0000000..cb32757 --- /dev/null +++ b/apps/main/migrations/0001_initial.py @@ -0,0 +1,138 @@ +# Generated by Django 2.2.1 on 2023-01-17 09:48 + +from django.conf import settings +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='DeviceType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(choices=[('', 'Select a device type'), ('rc', 'Radar Controller'), ('dds', 'Direct Digital Synthesizer'), ('jars', 'Jicamarca Radar Acquisition System'), ('usrp', 'Universal Software Radio Peripheral'), ('cgs', 'Clock Generator System'), ('abs', 'Automatic Beam Switching'), ('dds_rest', 'Direct Digital Synthesizer_REST')], default='dds_rest', max_length=10)), + ('sequence', models.PositiveSmallIntegerField(default=55)), + ('description', models.TextField(blank=True, null=True)), + ], + options={ + 'db_table': 'db_device_types', + }, + ), + migrations.CreateModel( + name='Experiment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('template', models.BooleanField(default=False)), + ('name', models.CharField(default='', max_length=40, unique=True)), + ('freq', models.FloatField(default=49.92, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(10000)], verbose_name='Operating Freq. (MHz)')), + ('start_time', models.TimeField(default='00:00:00')), + ('end_time', models.TimeField(default='23:59:59')), + ('task', models.CharField(blank=True, default='', max_length=36, null=True)), + ('status', models.PositiveSmallIntegerField(choices=[(0, 'Error'), (1, 'Cancelled'), (2, 'Running'), (3, 'Scheduled'), (4, 'Unknown')], default=4)), + ('hash', models.CharField(blank=True, default='', max_length=64, null=True)), + ('author', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'db_table': 'db_experiments', + 'ordering': ('template', 'name'), + }, + ), + migrations.CreateModel( + name='Location', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=30)), + ('description', models.TextField(blank=True, null=True)), + ], + options={ + 'db_table': 'db_location', + }, + ), + migrations.CreateModel( + name='RunningExperiment', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('status', models.PositiveSmallIntegerField(choices=[(0, 'No connected'), (1, 'Connected'), (2, 'Configured'), (3, 'Running'), (4, 'Scheduled')], default=0)), + ('radar', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='main.Location')), + ('running_experiment', models.ManyToManyField(blank=True, to='main.Experiment')), + ], + ), + migrations.CreateModel( + name='Profile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('theme', models.CharField(default='spacelab', max_length=30)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.AddField( + model_name='experiment', + name='location', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='main.Location'), + ), + migrations.CreateModel( + name='Device', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('ip_address', models.GenericIPAddressField(default='0.0.0.0', protocol='IPv4')), + ('port_address', models.PositiveSmallIntegerField(default=2000)), + ('description', models.TextField(blank=True, null=True)), + ('status', models.PositiveSmallIntegerField(choices=[(0, 'No connected'), (1, 'Connected'), (2, 'Configured'), (3, 'Running'), (4, 'Unknown')], default=4)), + ('conf_active', models.PositiveIntegerField(default=0, verbose_name='Current configuration')), + ('device_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='main.DeviceType')), + ('location', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='main.Location')), + ], + options={ + 'db_table': 'db_devices', + }, + ), + migrations.CreateModel( + name='Configuration', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('template', models.BooleanField(default=False)), + ('label', models.CharField(blank=True, default='', max_length=40, null=True, verbose_name='Label')), + ('type', models.PositiveSmallIntegerField(choices=[(0, 'Active'), (1, 'Historical')], default=0)), + ('created_date', models.DateTimeField(auto_now_add=True)), + ('programmed_date', models.DateTimeField(auto_now=True)), + ('parameters', models.TextField(default='{}')), + ('hash', models.CharField(blank=True, default='', max_length=64, null=True)), + ('author', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('device', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='main.Device', verbose_name='Device')), + ('experiment', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='main.Experiment', verbose_name='Experiment')), + ('polymorphic_ctype', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_main.configuration_set+', to='contenttypes.ContentType')), + ], + options={ + 'db_table': 'db_configurations', + 'ordering': ('device__device_type__name',), + }, + ), + migrations.CreateModel( + name='Campaign', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('template', models.BooleanField(default=False)), + ('name', models.CharField(max_length=60, unique=True)), + ('start_date', models.DateTimeField(blank=True, null=True)), + ('end_date', models.DateTimeField(blank=True, null=True)), + ('tags', models.CharField(blank=True, max_length=40, null=True)), + ('description', models.TextField(blank=True, null=True)), + ('author', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('experiments', models.ManyToManyField(blank=True, to='main.Experiment')), + ], + options={ + 'db_table': 'db_campaigns', + 'ordering': ('name',), + }, + ), + ] diff --git a/apps/rc/migrations/0001_initial.py b/apps/rc/migrations/0001_initial.py new file mode 100644 index 0000000..c203ab4 --- /dev/null +++ b/apps/rc/migrations/0001_initial.py @@ -0,0 +1,94 @@ +# Generated by Django 2.2.1 on 2023-01-17 09:48 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('main', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='RCConfiguration', + fields=[ + ('configuration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='main.Configuration')), + ('ipp', models.FloatField(default=300, validators=[django.core.validators.MinValueValidator(1)], verbose_name='IPP [Km]')), + ('ntx', models.PositiveIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1)], verbose_name='Number of TX')), + ('clock_in', models.FloatField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(80)], verbose_name='Clock in [MHz]')), + ('clock_divider', models.PositiveIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(256)], verbose_name='Clock divider')), + ('clock', models.FloatField(blank=True, default=1, verbose_name='Clock Master [MHz]')), + ('time_before', models.PositiveIntegerField(default=12, verbose_name='Time before [μS]')), + ('time_after', models.PositiveIntegerField(default=1, verbose_name='Time after [μS]')), + ('sync', models.PositiveIntegerField(default=0, verbose_name='Synchro delay')), + ('sampling_reference', models.CharField(choices=[('none', 'No Reference'), ('begin_baud', 'Begin of the first baud'), ('first_baud', 'Middle of the first baud'), ('sub_baud', 'Middle of the sub-baud')], default='none', max_length=40, verbose_name='Sampling Reference')), + ('control_tx', models.BooleanField(default=False, verbose_name='Control Switch TX')), + ('control_sw', models.BooleanField(default=False, verbose_name='Control Switch SW')), + ('total_units', models.PositiveIntegerField(default=0)), + ('mix', models.BooleanField(default=False)), + ], + options={ + 'db_table': 'rc_configurations', + }, + bases=('main.configuration',), + ), + migrations.CreateModel( + name='RCLineCode', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=40)), + ('bits_per_code', models.PositiveIntegerField(default=0)), + ('number_of_codes', models.PositiveIntegerField(default=0)), + ('codes', models.TextField(blank=True, null=True)), + ], + options={ + 'db_table': 'rc_line_codes', + 'ordering': ('name',), + }, + ), + migrations.CreateModel( + name='RCLineType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(choices=[('none', 'Not used'), ('tr', 'Transmission/reception selector signal'), ('tx', 'A modulating signal (Transmission pulse)'), ('codes', 'BPSK modulating signal'), ('windows', 'Sample window signal'), ('sync', 'Synchronizing signal'), ('flip', 'IPP related periodic signal'), ('prog_pulses', 'Programmable pulse'), ('mix', 'Mixed line')], max_length=40)), + ('description', models.TextField(blank=True, null=True)), + ('params', models.TextField(default='[]')), + ], + options={ + 'db_table': 'rc_line_types', + }, + ), + migrations.CreateModel( + name='RCLine', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('channel', models.PositiveIntegerField(default=0)), + ('position', models.PositiveIntegerField(default=0)), + ('params', models.TextField(default='{}')), + ('pulses', models.TextField(default='')), + ('line_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rc.RCLineType')), + ('rc_configuration', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rc.RCConfiguration')), + ], + options={ + 'db_table': 'rc_lines', + 'ordering': ['channel'], + }, + ), + migrations.CreateModel( + name='RCClock', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('mode', models.BooleanField(choices=[(True, 'Auto'), (False, 'Manual')], default=True)), + ('multiplier', models.PositiveIntegerField(default=60)), + ('divisor', models.PositiveIntegerField(default=10)), + ('reference', models.PositiveSmallIntegerField(choices=[(0, 'Internal (25MHz)'), (1, 'External (10MHz)')], default=1)), + ('frequency', models.FloatField(default=60.0)), + ('rc_configuration', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rc.RCConfiguration')), + ], + ), + ] diff --git a/apps/usrp/migrations/0001_initial.py b/apps/usrp/migrations/0001_initial.py new file mode 100644 index 0000000..e774f01 --- /dev/null +++ b/apps/usrp/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# Generated by Django 2.2.1 on 2023-01-17 09:48 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('main', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='USRPConfiguration', + fields=[ + ('configuration_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='main.Configuration')), + ], + options={ + 'db_table': 'usrp_configurations', + }, + bases=('main.configuration',), + ), + ]