[tuxdroid-svn] r552 - api/python/trunk
Status: Beta
Brought to you by:
ks156
From: remi <c2m...@c2...> - 2007-10-01 08:58:19
|
Author: remi Date: 2007-10-01 10:57:40 +0200 (Mon, 01 Oct 2007) New Revision: 552 Modified: api/python/trunk/tuxapi_class.py Log: ADD: Monitoring class UPD: tux.sys.delete_time_event Modified: api/python/trunk/tuxapi_class.py =================================================================== --- api/python/trunk/tuxapi_class.py 2007-09-28 14:52:17 UTC (rev 551) +++ api/python/trunk/tuxapi_class.py 2007-10-01 08:57:40 UTC (rev 552) @@ -106,6 +106,7 @@ self.hw=TUXhw(self) self.tts=TUXtts(self) self.misc=TUXmisc(self) + self.monitoring = TUXmonitoring(self) self.connected=False #deprecated t=threading.Thread(target=self.daemon._loop_auto_connect) t.setName('daemon._loop_auto_connect') @@ -454,6 +455,8 @@ #on status if self.event.on_status!=None: self.event.on_status(data) + #on monitoring + self.monitoring.check_events(data) #-------------------------------------------------------------------------- @@ -742,6 +745,7 @@ tux.sys.add_time_event tux.sys.clear_time_events tux.sys.delayed_function + tux.sys.delete_time_event tux.sys.looped_function tux.sys.shell tux.sys.shell_free @@ -756,8 +760,9 @@ """ Constructor of class """ - self.parent=parent - self.events_list=[[0,'NONE',9999,99,99,99,99,99]] + self.parent = parent + self.events_list = [[0,'NONE',9999,99,99,99,99,99]] + self.__time_event_mutex = threading.Lock() #-------------------------------------------------------------------------- # Get the current time in seconds @@ -839,8 +844,10 @@ Example: >>> tux.sys.add_time_event(CT_SHELL,'xmms',9999,99,99,8,5,0) """ + self.__time_event_mutex.acquire() self.events_list.append([cmd_type,cmd,year,month,day,hour, \ minute,second]) + self.__time_event_mutex.release() #-------------------------------------------------------------------------- # Clear the time events of the time event handler @@ -852,8 +859,44 @@ Example: >>> tux.sys.clear_time_events() """ + self.__time_event_mutex.acquire() self.events_list=[[0,'NONE',9999,99,99,99,99,99]] + self.__time_event_mutex.release() + + #-------------------------------------------------------------------------- + # Delete a time event from the time event handler + #-------------------------------------------------------------------------- + def delete_time_event(self, cmd_type,cmd,year,month,day,hour,minute,second): + """ + Delete a time event from the time event handler + + Parameters: + "cmd_type" as number : Command type (CT_SHELL|CT_FUNCTION) + "cmd" as string : Command to execute + "year" as integer : (ex : 2006) (9999 : parameter ignored) + "month" as integer : (ex : 12) (99 : parameter ignored) + "day" as integer : (ex : 23) (99 : parameter ignored) + "hour" as integer : (ex : 08) (99 : parameter ignored) + "minute" as integer : (ex : 55) (99 : parameter ignored) + "second" as integer : (ex : 30) (99 : parameter ignored) + Example: + >>> tux.sys.delete_time_event(CT_SHELL,'xmms',9999,99,99,8,5,0) + """ + self.__time_event_mutex.acquire() + event_to_remove = [cmd_type,cmd,year,month,day,hour,minute,second] + for i, event in enumerate(self.events_list): + matched = True + for j, p in enumerate(event): + if event_to_remove[j] != p: + matched = False + if matched: + self.events_list.pop(i) + self.__time_event_mutex.release() + return True + self.__time_event_mutex.release() + return False + #-------------------------------------------------------------------------- # Not a user function #-------------------------------------------------------------------------- @@ -871,7 +914,10 @@ and event[7] in [now[5], 99] while self.parent.daemon.connected: - for event in self.events_list: + self.__time_event_mutex.acquire() + events_list = self.events_list + self.__time_event_mutex.release() + for event in events_list: if event[0]!=0 and event_due(event): if event[0]==CT_SHELL: self.shell_free(event[1]) @@ -938,7 +984,49 @@ t.setName('sys.temporized_function') t.start() self.parent.main_thread_list.append(t) + +#============================================================================== +# TUXTCPCommunicator - monitoring - class +#============================================================================== +class TUXmonitoring(object): + def __init__(self, parent): + self.parent = parent + self._event_mutex = threading.Lock() + self._event_list = [] + + def insert(self, status, function): + self._event_mutex.acquire() + self._event_list.append([status, function]) + self._event_mutex.release() + return len(self._event_list) - 1 + + def remove(self, event_id): + self._event_mutex.acquire() + self._event_list.pop(event_id) + self._event_mutex.release() + + def check_events(self, frame): + self._event_mutex.acquire() + events = self._event_list + self._event_mutex.release() + + def __load_funct_async(idx, funct, args): + try: + funct(args) + except: + self.remove(idx) + + for i, event in enumerate(events): + if event[0] == ord(frame[4]): + frame = frame[5:] + ord_frame = [] + for val in frame: + ord_frame.append(ord(val)) + args = tuple(ord_frame) + thread.start_new_thread(__load_funct_async, (i, event[1], args)) + + #============================================================================== # TUXTCPCommunicator - event - class #============================================================================== |