Skip to content
Snippets Groups Projects
ipaacaspam.py 1.9 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/env python
    
    import sys
    import time
    import unittest
    
    import ipaaca
    
    class Receiver(object):
    	def __init__(self):
    		self.count = 0
    		self.last_time = 0
    		self.ib = ipaaca.InputBuffer('PowerIn', ['spam'])
    		self.ib.register_handler(self.handle_iu_event)
    	
    	def handle_iu_event(self, iu, event_type, local):
    		if self.count==0: self.last_time=time.time()
    		self.count+=1
    		if self.count==1000:
    			print "Received 1k IU updates at", int(1000.0/(time.time()-self.last_time)), "Hz"
    			self.count=0
    	
    	def run(self):
    		while True:
    			time.sleep(1)
    
    
    class Sender(object):
    	def __init__(self, send_frequency):
    		self.ob = ipaaca.OutputBuffer('PowerOut')
    		self.iu = ipaaca.IU('spam')
    		self.iu.payload = {'data':'0'}
    		self.ob.add(self.iu)
    		self.counter = 0
    		self.frequency = send_frequency
    		self.delay = 1.0/send_frequency
    	
    	def run(self):
    		print "Sending with", self.delay ,"s delay - upper bound ",self.frequency,"Hz ..."
    		last_time = time.time()
    		while True:
    			time.sleep(self.delay)
    			self.counter += 1
    			self.iu.payload['data'] = str(self.counter)
    			if self.counter == 1000:
    				print "Sent 1k updates at", int(1000.0/(time.time()-last_time)),"Hz"
    				last_time = time.time()
    				self.counter = 0
    				#print ".",
    				#sys.stdout.flush()
    	
    if __name__ == '__main__':
    	if len(sys.argv)<2:
    		print "specify either 'sender' or 'receiver' as an argument"
    		print "   for the sender, you can additionally specify a delay (in 1/s)"
    		print "   between 1 and 10000 please (=> 1 sec ... 0.0001 sec) [default: 1000 => 0.001 sec]"
    		sys.exit(1)
    	if sys.argv[1] == 'receiver':
    		r = Receiver()
    		r.run()
    	elif sys.argv[1] == 'sender':
    		freq=1000
    		try:
    			freq = int(sys.argv[2])
    		except:
    			pass
    		if freq<1 or freq>10000:
    			print "Between 1 and 10000 please (=> 1 sec ... 0.0001 sec)"
    			sys.exit(1)
    		s = Sender(send_frequency=freq)
    		s.run()
    	else:
    		print "specify either 'sender' or 'receiver' as an argument"
    		sys.exit(1)