jroIO_usrp_api.py
139 lines
| 3.4 KiB
| text/x-python
|
PythonLexer
|
r568 | ''' | ||
Created on Jul 15, 2014 | ||||
@author: roj-idl71 | ||||
''' | ||||
import time | ||||
import threading | ||||
|
r1167 | import pickle | ||
|
r568 | |||
|
r634 | # try: | ||
# from gevent import sleep | ||||
# except: | ||||
from time import sleep | ||||
|
r568 | |||
SERIALIZER = cPickle | ||||
# from schainpy.serializer import DynamicSerializer | ||||
from schainpy.model.io.jroIO_usrp import USRPReader | ||||
|
r697 | from schainpy.model.serializer.data import obj2Serial | ||
|
r568 | |||
class USRPReaderAPI(USRPReader, threading.Thread): | ||||
# __isBufferEmpty = True | ||||
r1396 | __DATAKEYLIST = ['data', 'utctime', 'flagNoData'] | |||
|
r568 | |||
def __init__(self, serializer='msgpack'): | ||||
threading.Thread.__init__(self) | ||||
USRPReader.__init__(self) | ||||
# self.__serializerObj = DynamicSerializer.DynamicSerializer('msgpack') | ||||
self.__mySerial = None | ||||
self.__isBufferEmpty = True | ||||
self.setSerializer(serializer) | ||||
def setSerializer(self, serializer): | ||||
self.__serializer = serializer | ||||
def getSerializer(self): | ||||
return self.__serializer | ||||
def getProfileIndex(self): | ||||
return self.profileIndex | ||||
def getSerialMetaData(self): | ||||
if self.__isBufferEmpty: | ||||
ini = time.time() | ||||
while True: | ||||
if not self.__isBufferEmpty: | ||||
break | ||||
if time.time() - ini > 20: | ||||
break | ||||
sleep(1e-12) | ||||
# if not self.getData(): | ||||
# self.__isBufferEmpty = False | ||||
# return None | ||||
if self.dataOut.flagNoData: | ||||
return None | ||||
myMetadataSerial = obj2Serial(self.dataOut, | ||||
r1396 | serializer=self.__serializer) | |||
|
r568 | |||
return myMetadataSerial | ||||
def getSerialData(self): | ||||
if self.__isBufferEmpty: | ||||
ini = time.time() | ||||
while True: | ||||
if not self.__isBufferEmpty: | ||||
break | ||||
if time.time() - ini > 20: | ||||
break | ||||
sleep(1e-12) | ||||
# if not self.getData(): | ||||
# self.__isBufferEmpty = False | ||||
# return None | ||||
if self.dataOut.flagNoData: | ||||
return None | ||||
self.__isBufferEmpty = True | ||||
return self.__mySerial | ||||
def run(self): | ||||
''' | ||||
|
r573 | This method will be called once when start() is called | ||
|
r568 | ''' | ||
if not self.isConfig: | ||||
|
r1167 | raise RuntimeError('setup() method has to be called before start()') | ||
|
r800 | |||
|
r1167 | print("Running ...") | ||
|
r800 | |||
|
r568 | while True: | ||
if not self.__isBufferEmpty: | ||||
sleep(1e-12) | ||||
continue | ||||
if not self.getData(): | ||||
break | ||||
|
r1167 | print(".", end=' ') | ||
|
r568 | |||
self.__mySerial = obj2Serial(self.dataOut, | ||||
r1396 | keyList=self.__DATAKEYLIST, | |||
serializer=self.__serializer) | ||||
|
r568 | self.__isBufferEmpty = False | ||
# print self.profileIndex | ||||
# print 'wait 1 second' | ||||
# sleep(0.1) | ||||
|
r800 | |||
|
r1167 | print("Closing thread") | ||
|
r800 | |||
r1396 | return | |||