diff --git a/apps/abs/models.py b/apps/abs/models.py index 944aafd..cfc3e0a 100644 --- a/apps/abs/models.py +++ b/apps/abs/models.py @@ -377,8 +377,10 @@ class ABSConfiguration(Configuration): return False #-------------Write each abs module----------- + if beams: - message = 'SNDF{:02d}'.format(nbeams) + block_id = 0 + message = 'SNDF{:03d}{:02d}{:02d}'.format(nbeams, nbeams, block_id) for i, status in enumerate(self.module_status): message += ''.join([fromBinary2Char(beam.module_6bits(i)) for beam in beams]) status = ['0'] * 64 @@ -386,9 +388,10 @@ class ABSConfiguration(Configuration): sock = self.send_multicast(message) - for i in range(64): + for i in range(32): try: data, address = sock.recvfrom(1024) + print address, data if data == '1': status[int(address[0][10:])-1] = '3' elif data == '0': @@ -408,7 +411,7 @@ class ABSConfiguration(Configuration): return False else: self.message = "ABS Beams List have been sent to ABS Modules" - beams[0].set_as_activebeam() + self.active_beam = beams[0].pk self.device.status = 3 self.module_status = ''.join(status) @@ -481,7 +484,7 @@ class ABSConfiguration(Configuration): for i, status in enumerate(self.module_status): if status != '0': num += 1 - print('status {}:{}'.format(i+1, status)) + #print('status {}:{}'.format(i+1, status)) return num def send_multicast(self, message): @@ -489,8 +492,9 @@ class ABSConfiguration(Configuration): multicast_group = ('224.3.29.71', 10000) # Create the datagram socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - sock.settimeout(0.01) - local_ip = "0.0.0.0" + sock.settimeout(0.5) + local_ip = "192.168.1.128" + sock.bind((local_ip, 10000)) sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF, socket.inet_aton(local_ip)) sent = sock.sendto(message, multicast_group) print('Sending ' + message) @@ -506,9 +510,11 @@ class ABSConfiguration(Configuration): n = 0 status = ['0'] * 64 - for i in range(64): + for i in range(32): + #if True: try: data, address = sock.recvfrom(1024) + print address, data if data == '1': status[int(address[0][10:])-1] = '3' elif data == '0': @@ -516,6 +522,7 @@ class ABSConfiguration(Configuration): n += 1 print('Module: {} connected'.format(address)) except: + print('Module: {} error'.format(address)) pass sock.close() @@ -538,13 +545,17 @@ class ABSConfiguration(Configuration): """ # Se manda a cero RC para poder realizar cambio de beam - confs = Configuration.objects.filter(experiment = self.experiment).filter(type=0) + if self.experiment is None: + confs = [] + else: + confs = Configuration.objects.filter(experiment = self.experiment).filter(type=0) confdds = '' confjars = '' confrc = '' - + print 'Starting...', self.experiment #TO STOP DEVICES: DDS-JARS-RC for i in range(0,len(confs)): + print i if i==0: for conf in confs: if conf.device.device_type.name == 'dds': @@ -559,11 +570,12 @@ class ABSConfiguration(Configuration): break if i==2: for conf in confs: + print conf if conf.device.device_type.name == 'rc': confrc = conf confrc.stop_device() break - + print 'Stop devices' if beam_pos > 0: beam_pos = beam_pos - 1 else: @@ -573,9 +585,10 @@ class ABSConfiguration(Configuration): #El servidor tcp en el embebido comienza a contar desde 0 status = ['0'] * 64 message = 'CHGB{}'.format(beam_pos) + print 'Before send' sock = self.send_multicast(message) - - for i in range(64): + print 'Waiting' + for i in range(32): try: data, address = sock.recvfrom(1024) print address, data @@ -670,6 +683,7 @@ class ABSBeam(models.Model): """ This function reads antenna pattern and choose 6bits (upbits-downbits) for one abs module """ + module += 1 if module > 64: beam_bits = "" return beam_bits diff --git a/apps/abs/urls.py b/apps/abs/urls.py index 488f016..918ac5b 100644 --- a/apps/abs/urls.py +++ b/apps/abs/urls.py @@ -5,6 +5,7 @@ from apps.abs import views urlpatterns = ( url(r'^(?P-?\d+)/$', views.abs_conf, name='url_abs_conf'), url(r'^(?P-?\d+)/edit/$', views.abs_conf_edit, name='url_edit_abs_conf'), + url(r'^alert/$', views.abs_conf_alert, name='url_alert_abs_conf'), url(r'^(?P-?\d+)/import/$', views.import_file, name='url_import_abs_conf'), #url(r'^(?P-?\d+)/status/', views.abs_conf, {'status_request':True},name='url_status_abs_conf'), url(r'^(?P-?\d+)/change_beam/(?P-?\d+)/$', views.send_beam, name='url_send_beam'), diff --git a/apps/abs/views.py b/apps/abs/views.py index 109a2be..0558254 100644 --- a/apps/abs/views.py +++ b/apps/abs/views.py @@ -5,6 +5,7 @@ from django.contrib import messages from django.conf import settings from django.http import HttpResponse from django.core.urlresolvers import reverse +from django.views.decorators.csrf import csrf_exempt from datetime import datetime from time import sleep @@ -200,6 +201,15 @@ def abs_conf_edit(request, id_conf): return render(request, 'abs_conf_edit.html', kwargs) +@csrf_exempt +def abs_conf_alert(request): + + if request.method == 'POST': + print request.POST + return HttpResponse(json.dumps({'result':1}), content_type='application/json') + else: + return redirect('index') + def import_file(request, id_conf): @@ -342,7 +352,6 @@ def remove_beam(request, id_conf, id_beam): if request.method=='POST': if beam: try: - beam.remove_beamfromlist() beam.delete() messages.success(request, 'Beam: "%s" has been deleted.' % beam) except: @@ -403,4 +412,4 @@ def plot_pattern(request, id_conf, id_beam, antenna): fig.savefig(buf, format='png') response = HttpResponse(buf.getvalue(), content_type='image/png') return response - \ No newline at end of file +