Skip to content
Snippets Groups Projects
Select Git revision
  • 24be7ca2cd2ef1f7dc3b97bdf6f0c0143d773cf8
  • master default protected
  • backslash
  • nickname-match-configs
  • genofire/leds_rgb_get_state
  • genofire/rockets-state
  • genofire/ble-follow-py
  • plaetzchen/ios-workaround
  • blinkisync-as-preload
  • genofire/haule-ble-fs-deactive
  • schneider/max30001-pycardium
  • schneider/max30001-epicaridum
  • schneider/max30001
  • schneider/stream-locks
  • ios-workarounds
  • schneider/fundamental-test
  • schneider/ble-buffers
  • schneider/maxim-sdk-update
  • ch3/splashscreen
  • koalo/bhi160-works-but-dirty
  • koalo/wip/i2c-for-python
  • v1.9
  • v1.8
  • v1.7
  • v1.6
  • v1.5
  • v1.4
  • v1.3
  • v1.2
  • v1.1
  • v1.0
  • release-1
  • bootloader-v1
  • v0.0
34 results

htmlcolor.py

Blame
  • Forked from card10 / firmware
    Source project has a limited visibility.
    event.py 3.21 KiB
    import hardware
    import time 
    import math
    
    
    EVENTTYPE_TIMED = 1
    EVENTTYPE_INPUT = 2
    #EVENTTYPE_BUTTON = 2
    #EVENTTYPE_CAPTOUCH = 3
    #EVENTTYPE_CAPCROSS = 4
    
    class Engine():
    	def __init__(self):
    		self.events_timed = []
    		self.events_input = []
    		self.next_timed = None
    		self.last_input_state = None
    	
    	def add(self,event):
    		if isinstance(event,EventTimed):
    			self.add_timed(event)
    		elif isinstance(event,Event):
    			self.add_input(event)
    			
    	def add_timed(self,event):
    		self.events_timed.append(event)
    		self.events_timed = sorted(self.events_timed, key = lambda event: event.deadline)
    	
    	
    	def add_input(self,event):
    	    self.events_input.append(event)
    	
    	def _handle_timed(self):
    		if not self.next_timed and self.events_timed:
    			self.next_timed = self.events_timed.pop(0)
    	
    		now = time.ticks_ms()
    		
    		if self.next_timed:
    			diff = time.ticks_diff(self.next_timed.deadline, now)
    			if diff <= 0:
    				self.next_timed.trigger({"ticks_ms":now, "ticks_delay": -diff})
    				self.next_timed = None
    				
    	def _handle_input(self):
    		input_state={
    			"b0":(hardware.get_button(0),"button",0),
    			"b1":(hardware.get_button(1),"button",1)
    		}
    		
    		for i in range(0,10):
    			input_state["c"+str(i)]=(hardware.get_captouch(i),"captouch",i)
    			
    		
    		if not self.last_input_state:
    			self.last_input_state=input_state
    			return
    		
    		diff=[]
    		for key in input_state:
    			if input_state[key][0] != self.last_input_state[key][0]:
    				diff.append({
    					"type" : input_state[key][1],
    					"index" : input_state[key][2],
    					"to" : input_state[key][0],
    					"from" : self.last_input_state[key][0],
    					"ticks_ms": time.ticks_ms()
    				})
    				
    		
    		if diff:
    			#print(diff)
    			for d in diff:
    				triggered_events = list(filter(lambda e: e.condition(d),self.events_input))
    				#print (triggered_events)
    				#map(lambda e: e.trigger(d), triggered_events)
    				for e in triggered_events:
    					e.trigger(d)
    					
    			
    		self.last_input_state=input_state		
    		
    		
    		
    	def _eventloop_single(self):
    		self._handle_timed()
    		self._handle_input()
    			
    	def eventloop(self):
    		while True:
    			self._eventloop_single()
    			time.sleep(0.005)
    		
    class Event():
    	def __init__(self,name="unknown",data={},action=None,condition=None):
    		#print (action)
    		self.name = name
    		self.eventtype = None
    		self.data = data
    		self.action = action
    		self.condition = condition
    		if not condition:
    			self.condition = lambda x: True
    		
    		the_engine.add(self)
    			
    		#print (data)
    		
    	def trigger(self,triggerdata={}):
    		print ("triggered {} (with {})".format(self.name,triggerdata))
    		if not self.action is None:
    			triggerdata.update(self.data)
    			#print("trigger")
    			self.action(triggerdata)
    	
    
    class EventTimed(Event):
    	def __init__(self,ms,name="timer", *args, **kwargs):
    		#super().__init__(name,data,action)
    		self.deadline = time.ticks_add(time.ticks_ms(),ms)
    		
    		super().__init__(*args, **kwargs)
    		self.name=name
    		self.type=EVENTTYPE_TIMED
    		
    	def __repr__(self):
    		return ("event on tick {} ({})".format(self.deadline,self.name))
    
    global the_engine
    the_engine = Engine()
    
    EventTimed(200,name="bar",action=lambda data: print("GNANGNAGNA"))
    EventTimed(100,name="foo")
    Event(name="baz",
    	action=lambda data: print(data),
    	condition=lambda data: data.get('type')=="captouch"
    )
    
    print (the_engine.events_timed)
    #e.eventloop()