from os import times import struct from .interfaces import adc_default, gra_default, sdr_default, sync_default from . import models from . import serializers from multiprocessing import * import numpy as np from rest_framework import permissions, viewsets from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.parsers import JSONParser,ParseError from rest_framework import status from django.conf import settings import threading import subprocess import base64 import time as tm class NewThread(threading.Thread): def __init__(self, group=None, target=None, name=None, args=(), kwargs={}): threading.Thread.__init__(self, group, target, name, args, kwargs) self._return = None def run(self): if self._target != None: self._return = self._target(*self._args, **self._kwargs) else: self._return = ((0x00, 0), 0) def join(self, *args): threading.Thread.join(self, *args) return self._return class DefaultEngine: def __init__(self, instance, lock): self.measure = instance if(self.measure.info.iadc.enabled): if(self.measure.info.iadc.device.proto == 'USB'): self.adc_interface = adc_default(port=-1) else: self.adc_interface = adc_default(port=5003) if(self.measure.info.isync.device.proto == 'USB'): self.sync_interface = sync_default(port=-1) else: self.sync_interface = sync_default(port=5001) if(self.measure.info.isdr.device.proto == 'USB'): self.sdr_interface = sdr_default(port=-1) else: self.sdr_interface = sdr_default(port=5003) if(self.measure.info.igrax.enabled): self.grax_interface = gra_default(ip = self.measure.info.igrax.ip, port=5002) if(self.measure.info.igray.enabled): self.gray_interface = gra_default(ip = self.measure.info.igray.ip, port=5002) if(self.measure.info.igraz.enabled): self.graz_interface = gra_default(ip = self.measure.info.igraz.ip, port=5002) self.engine_thread = threading.Thread(target=self.run) self.lock = lock self.engine_thread.start() self.measure.state.status = 'STARTING' self.lock.acquire() self.measure.state.save() self.measure.save() self.lock.release() def getThread(self): return self.engine_thread def run(self): # Connect to the sync product first # Open the sync product, check for errors if any returned with status byte 0xFF ret = self.sync_interface.upload(str(settings.BASE_DIR) + '\\bin\\Sync.exe', self.measure.info.isync.file, self.measure.info.isync.port) # Final configuration: set the status to configured for sync and overall. self.measure.state.sync.status = 'CONFIGURED' self.measure.state.sync.code = 1 self.lock.acquire() self.measure.state.sync.save() self.measure.state.save() self.measure.save() self.lock.release() print('UPDATED') # Grax connect and reset if(self.measure.info.igrax.enabled == True): try: self.grax_interface.connect() except Exception as e: self.measure.state.grax.status = 'CONN ERROR' self.measure.state.grax.code = -1 self.measure.state.status = 'GRA X ERROR' self.measure.state.code = -2 self.lock.acquire() self.measure.state.grax.save() self.measure.state.save() self.measure.save() self.lock.release() return -100 # Reset and power on self.grax_interface.reset() ret = self.grax_interface.state() self.measure.state.grax.code = ret[2] self.measure.state.grax.status = f'RETCODE {ret}' # Power on self.grax_interface.ps_on() ret = self.grax_interface.state() self.measure.state.grax.code = ret[2] self.measure.state.grax.status = f'RETCODE {ret}' data = b'' with open(self.measure.info.igrax.file, 'rb') as file: data = file.read() i = 0 nodes = [] while(i < len(nodes)): time, ampl = struct.unpack('