jroIO_usrp_api.py
138 lines
| 3.4 KiB
| text/x-python
|
PythonLexer
|
r568 | ''' | |
Created on Jul 15, 2014 | |||
@author: roj-idl71 | |||
''' | |||
import time | |||
import threading | |||
import cPickle | |||
|
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 | |||
__DATAKEYLIST = ['data','utctime','flagNoData'] | |||
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, | |||
serializer = self.__serializer) | |||
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: | |||
|
r684 | raise RuntimeError, 'setup() method has to be called before start()' | |
|
r800 | ||
print "Running ..." | |||
|
r568 | while True: | |
if not self.__isBufferEmpty: | |||
sleep(1e-12) | |||
continue | |||
if not self.getData(): | |||
break | |||
print ".", | |||
self.__mySerial = obj2Serial(self.dataOut, | |||
keyList = self.__DATAKEYLIST, | |||
serializer = self.__serializer) | |||
self.__isBufferEmpty = False | |||
# print self.profileIndex | |||
# print 'wait 1 second' | |||
# sleep(0.1) | |||
|
r800 | ||
print "Closing thread" | |||
|
r568 | return |