def generate_synchronizer_rm(iterable_target_names): """returns lstswriter""" outlsts = lsts.writer() actionnames = ["tau", "kw_return false", "kw_return true"] return_false_action = 1 return_true_action = 2 transitions = [[]] for t in iterable_target_names: start_aw_action = len(actionnames) actionnames.append("start_awVerify%s" % t) end_aw_action = len(actionnames) actionnames.append("end_awVerify%s" % t) is_true_action = len(actionnames) actionnames.append("kw_IsTrue $(OUT = (syncTarget == %s.id))$" % t) is_not_true_action = len(actionnames) actionnames.append("~kw_IsTrue $(OUT = (syncTarget == %s.id))$" % t) # from initial state transitions[0].append((len(transitions), start_aw_action)) transitions.append([(len(transitions) + 1, is_true_action), (len(transitions) + 3, is_not_true_action)]) transitions.append([(len(transitions) + 1, return_true_action)]) transitions.append([(0, end_aw_action)]) transitions.append([(len(transitions) + 1, return_false_action)]) transitions.append([(0, end_aw_action)]) outlsts.set_actionnames(actionnames) outlsts.set_transitions(transitions) return outlsts
def generate_synchronizer_rm(iterable_target_names): """returns lstswriter""" outlsts = lsts.writer() actionnames = ["tau", "kw_return false", "kw_return true"] return_false_action = 1 return_true_action = 2 transitions = [[]] for t in iterable_target_names: start_aw_action = len(actionnames) actionnames.append("start_awVerify%s" % t) end_aw_action = len(actionnames) actionnames.append("end_awVerify%s" % t) is_true_action = len(actionnames) actionnames.append("kw_IsTrue $(OUT = (syncTarget == %s.id))$" % t) is_not_true_action = len(actionnames) actionnames.append("~kw_IsTrue $(OUT = (syncTarget == %s.id))$" % t) # from initial state transitions[0].append((len(transitions), start_aw_action)) transitions.append([(len(transitions)+1, is_true_action), (len(transitions)+3, is_not_true_action)]) transitions.append([(len(transitions)+1, return_true_action)]) transitions.append([(0, end_aw_action)]) transitions.append([(len(transitions)+1, return_false_action)]) transitions.append([(0, end_aw_action)]) outlsts.set_actionnames(actionnames) outlsts.set_transitions(transitions) return outlsts
def __createFlagModels(self, directory): for flag in self.__kendoXMLParser.getFlags(): actions = [] transitions = [] #Enabled state transitions.append([]) enabled_index = 0 #Disabled state transitions.append([]) disabled_index = 1 enableAction = "ALLOW<Enabled" + flag.getName() + ">" disableAction = "ALLOW<Disabled" + flag.getName() + ">" toEnabledAction = "ALLOW<toEnabled" + flag.getName() + ">" toDisabledAction = "ALLOW<toDisabled" + flag.getName() + ">" actions.append(enableAction) enabled_action_index = 1 actions.append(disableAction) disabled_action_index = 2 actions.append(toDisabledAction) toDisabled_action_index = 3 actions.append(toEnabledAction) toEnabled_action_index = 4 transitions[enabled_index].append((disabled_index, toDisabled_action_index)) transitions[enabled_index].append((enabled_index, enabled_action_index)) transitions[enabled_index].append((enabled_index, toEnabled_action_index)) transitions[disabled_index].append((disabled_index, toDisabled_action_index)) transitions[disabled_index].append((disabled_index, disabled_action_index)) transitions[disabled_index].append((enabled_index, toEnabled_action_index)) file = open(directory + "flagmodel_" + flag.getName() + ".lsts", "w") w = lsts.writer(file) w.set_actionnames(actions) w.set_transitions(transitions) #Set right intial state based on the flag default state if flag.getDefault_value() == False: w.get_header().initial_states = disabled_index else: w.get_header().initial_states = enabled_index w.write() ref_machine_file = open(directory + "rm" + os.sep + "flagmodel_" + flag.getName() + "-rm.lsts", "w") #write refinement machines self.__writeRefinementMachine({}, ref_machine_file)
def __writeLsts(self, lsts_model, model_name, outputDir): transitions = [] states = lsts_model.getStates() actions = lsts_model.getActions() state_props = {} refinements = [] for state in lsts_model.getStates(): state_transitions = [] for transition in state.getTransitions(): #print states[0] == transition.getFromState() state_transitions.append( (states.index(transition.getToState()), actions.index(transition.getAction()) + 1)) transitions.append(state_transitions) for state_prop in state.getState_propositions(): if state_prop.getName() in state_props: state_props[state_prop.getName()].append( states.index(state)) else: state_props[state_prop.getName()] = [] state_props[state_prop.getName()].append( states.index(state)) if state_prop.getKeywords() != None and len( state_prop.getKeywords()) > 0: if state_prop.getName() != "svStart": refinements.append((state_prop.getName(), state_prop.getKeywords())) action_names = [] for action in actions: action_names.append(action.getName()) if action.getRefinements() != None: refinements.append((action.getName(), action.getRefinements())) #self.__mergeStates(transitions, actions) action_machine_file = open(outputDir + model_name + ".lsts", "w") ref_machine_file = codecs.open( outputDir + "rm" + os.sep + model_name + "-rm.lsts", "w", "iso-8859-1") w = lsts.writer(action_machine_file) w.set_actionnames(action_names) w.set_transitions(transitions) w.set_stateprops(state_props) w.get_header().initial_states = states.index( lsts_model.getStart_state()) w.write() #write refinement machines self.__writeRefinementMachine(refinements, ref_machine_file)
def specialiser(targetdir,input_fileobj,output_fileobj): # Read APPLICATION and ABSTRACTSOURCE tags abstract_lsts_name, application_name = None, None # for line in file(infofilename): for line in input_fileobj: if line[:15]=="ABSTRACTSOURCE:": abstract_lsts_name=os.path.join(targetdir,line.split(":")[1].strip()+".lsts") elif line[:12]=="APPLICATION:": application_name=line.split(":")[1].strip() if abstract_lsts_name==None: raise SpecialiserError("ABSTRACTSOURCE not found") # Open abstract LSTS file abslsts=lsts.reader( open(abstract_lsts_name,'r') ) # the new lsts is based on the abslsts newlsts=lsts.writer( lsts_object=abslsts ) # Specialise the abstract LSTS by replacing @APPLICATION with concrete # application name in the action names of the LSTS newactionnames=[] for index,action in enumerate(abslsts.get_actionnames()): if application_name!=None and "@APPLICATION" in action: newactionnames.append(action.replace('@APPLICATION', application_name)) else: newactionnames.append(action) # Write out the specialised LSTS. newlsts.set_actionnames(newactionnames) newlsts.write( output_fileobj )
def create_lsts(lstsdata, keep_actionnames=["tau"], keep_propositionnames=()): """ Dual for create_datastructure: builds a new lsts object based on the given LstsData object. """ newlsts = lsts.writer() actionnames = keep_actionnames[:] transitions = [[]] propositions = dict([(p, []) for p in keep_propositionnames]) first_state_symbol = lstsdata.initial_state found_states = { first_state_symbol: 0 } # map state string in lstsdata to state number statestack = [first_state_symbol] while statestack: ss = statestack.pop() ssnum = found_states[ss] for t in lstsdata.tr_by_ss[ss]: if not t.action in actionnames: actionnames.append(t.action) acnum = actionnames.index(t.action) ds = '"%s"' % t.dest if not ds in found_states: found_states[ds] = len(found_states) transitions.append([]) if ds in lstsdata.tr_by_ss: # there are leaving transitions from ds statestack.append(ds) dsnum = found_states[ds] transitions[ssnum].append((dsnum, acnum)) newlsts.set_actionnames(actionnames) newlsts.set_transitions(transitions) for st in lstsdata.pr_by_st: for pr in lstsdata.pr_by_st[st]: if st in found_states: if not pr.prop in ["gt:istate"]: # reserved state propositions are not written to the lsts if not pr.prop in propositions: propositions[pr.prop] = [] propositions[pr.prop].append(found_states[st]) newlsts.set_stateprops(propositions) return newlsts
def __writeLsts(self,lsts_model, model_name, outputDir): transitions = [] states = lsts_model.getStates() actions = lsts_model.getActions() state_props = {} refinements = [] for state in lsts_model.getStates(): state_transitions = [] for transition in state.getTransitions(): #print states[0] == transition.getFromState() state_transitions.append((states.index(transition.getToState()), actions.index(transition.getAction())+1)) transitions.append(state_transitions) for state_prop in state.getState_propositions(): if state_prop.getName() in state_props: state_props[state_prop.getName()].append(states.index(state)) else: state_props[state_prop.getName()] = [] state_props[state_prop.getName()].append(states.index(state)) if state_prop.getKeywords() != None and len(state_prop.getKeywords()) > 0: if state_prop.getName() != "svStart": refinements.append((state_prop.getName(), state_prop.getKeywords())) action_names = [] for action in actions: action_names.append(action.getName()) if action.getRefinements() != None: refinements.append((action.getName(),action.getRefinements())) #self.__mergeStates(transitions, actions) action_machine_file = open(outputDir + model_name + ".lsts", "w") ref_machine_file = codecs.open(outputDir + "rm" + os.sep + model_name + "-rm.lsts", "w", "iso-8859-1") w = lsts.writer(action_machine_file) w.set_actionnames(action_names) w.set_transitions(transitions) w.set_stateprops(state_props) w.get_header().initial_states = states.index(lsts_model.getStart_state()) w.write() #write refinement machines self.__writeRefinementMachine(refinements, ref_machine_file)
def __writeRefinementMachine(self, refinements, file): transitions = [] actions = [] #add central state transitions.append([]) for ref in refinements: refName = ref[0] keywords = ref[1] #start aw/sv transitions.append([]) actions.append("start_" + refName) transitions[0].append((len(transitions) - 1, len(actions))) prev_state_index = len(transitions) - 1 #keywords for kw in keywords: if kw.strip() == "": continue matches = re.findall("\$(\w+)\$", kw) if matches != None and len(matches) > 0: for match in matches: #kw = lstsmodel.escape(kw.replace(match,"(OUT = " + match + ".name" + ")")) kw = kw.replace( match, "(OUT = " + self.__removeIllegalChars(match).lower() + ")") if kw in actions: kw_index = actions.index(kw) + 1 else: actions.append(kw) kw_index = len(actions) transitions.append([]) transitions[prev_state_index].append( (len(transitions) - 1, kw_index)) prev_state_index = len(transitions) - 1 #end aw/sv actions.append("end_" + refName) transitions[prev_state_index].append((0, len(actions))) w = lsts.writer(file) w.set_actionnames(actions) w.set_transitions(transitions) w.write()
def __writeRefinementMachine(self, refinements, file): transitions = [] actions = [] #add central state transitions.append([]) for ref in refinements: refName = ref[0] keywords = ref[1] #start aw/sv transitions.append([]) actions.append("start_" + refName) transitions[0].append((len(transitions) - 1, len(actions))) prev_state_index = len(transitions) - 1 #keywords for kw in keywords: if kw.strip() == "": continue matches = re.findall("\$(\w+)\$",kw) if matches != None and len(matches) > 0: for match in matches: #kw = lstsmodel.escape(kw.replace(match,"(OUT = " + match + ".name" + ")")) kw = kw.replace(match,"(OUT = " + self.__removeIllegalChars(match).lower() + ")") if kw in actions: kw_index = actions.index(kw) + 1 else: actions.append(kw) kw_index = len(actions) transitions.append([]) transitions[prev_state_index].append((len(transitions) - 1, kw_index)) prev_state_index = len(transitions) - 1 #end aw/sv actions.append("end_" + refName) transitions[prev_state_index].append((0, len(actions))) w = lsts.writer(file) w.set_actionnames(actions) w.set_transitions(transitions) w.write()
def create_lsts(lstsdata, keep_actionnames=["tau"], keep_propositionnames=()): """ Dual for create_datastructure: builds a new lsts object based on the given LstsData object. """ newlsts=lsts.writer() actionnames=keep_actionnames[:] transitions=[[]] propositions=dict([(p,[]) for p in keep_propositionnames]) first_state_symbol=lstsdata.initial_state found_states={first_state_symbol:0} # map state string in lstsdata to state number statestack=[first_state_symbol] while statestack: ss=statestack.pop() ssnum=found_states[ss] for t in lstsdata.tr_by_ss[ss]: if not t.action in actionnames: actionnames.append(t.action) acnum=actionnames.index(t.action) ds='"%s"'%t.dest if not ds in found_states: found_states[ds]=len(found_states) transitions.append([]) if ds in lstsdata.tr_by_ss: # there are leaving transitions from ds statestack.append(ds) dsnum=found_states[ds] transitions[ssnum].append((dsnum,acnum)) newlsts.set_actionnames(actionnames) newlsts.set_transitions(transitions) for st in lstsdata.pr_by_st: for pr in lstsdata.pr_by_st[st]: if st in found_states: if not pr.prop in ["gt:istate"]: # reserved state propositions are not written to the lsts if not pr.prop in propositions: propositions[pr.prop]=[] propositions[pr.prop].append(found_states[st]) newlsts.set_stateprops(propositions) return newlsts
def generate_synchronizer(iterable_target_names): """generate_synchronizer returns lsts_writer object""" outlsts = lsts.writer() actionnames = [ "tau", "WAKEtgt<Begin Synchronization>", "REQALLtgt<Unprime Targets>", "SLEEPtgt<End Synchronization: Success>", "SLEEPtgt<End Synchronization: Failure>", ] syncsucc_state = 2 syncfailed_action = 4 # (dest_state, action_number) transitions = [[(1, 1)], [(3, 2)], [(0, 3)]] stateprops = {} for t in iterable_target_names: verifysucc_action = len(actionnames) actionnames.append("awVerify%s" % t) verifyfail_action = len(actionnames) actionnames.append("~awVerify%s" % t) reqprime_action = len(actionnames) actionnames.append("REQALLtgt<Prime %s>" % t) verifysucc_state = len(transitions) + 1 verifyfail_state = len(transitions) + 2 stateprops['successful verification of %s' % t] = [verifysucc_state] stateprops['failed verification of %s' % t] = [verifyfail_state] # from last failed verification state: transitions.append([(verifysucc_state, verifysucc_action), (verifyfail_state, verifyfail_action)]) # from verifysucc_state: transitions.append([(syncsucc_state, reqprime_action)]) # from last failed verification state fail the whole thing: transitions.append([(0, syncfailed_action)]) outlsts.set_actionnames(actionnames) outlsts.set_transitions(transitions) outlsts.set_stateprops(stateprops) return outlsts
def generate_synchronizer(iterable_target_names): """generate_synchronizer returns lsts_writer object""" outlsts = lsts.writer() actionnames = ["tau", "WAKEtgt<Begin Synchronization>", "REQALLtgt<Unprime Targets>", "SLEEPtgt<End Synchronization: Success>", "SLEEPtgt<End Synchronization: Failure>", ] syncsucc_state = 2 syncfailed_action = 4 # (dest_state, action_number) transitions = [[(1,1)],[(3,2)],[(0,3)]] stateprops = {} for t in iterable_target_names: verifysucc_action = len(actionnames) actionnames.append("awVerify%s" % t) verifyfail_action = len(actionnames) actionnames.append("~awVerify%s" % t) reqprime_action = len(actionnames) actionnames.append("REQALLtgt<Prime %s>" % t) verifysucc_state = len(transitions)+1 verifyfail_state = len(transitions)+2 stateprops['successful verification of %s' % t] = [verifysucc_state] stateprops['failed verification of %s' % t] = [verifyfail_state] # from last failed verification state: transitions.append([(verifysucc_state, verifysucc_action), (verifyfail_state, verifyfail_action)]) # from verifysucc_state: transitions.append([(syncsucc_state, reqprime_action)]) # from last failed verification state fail the whole thing: transitions.append([(0, syncfailed_action)]) outlsts.set_actionnames(actionnames) outlsts.set_transitions(transitions) outlsts.set_stateprops(stateprops) return outlsts
def main(working_directory, ts_type, targetname, action_machine_names, file_object ): running_states_apps = [] taskswitcher=lsts.writer() # Create initial state and add "tau" action: taskswitcher.set_transitions([[]]) taskswitcher.set_actionnames(["tau"]) for am in action_machine_names: # To check the application name from the state proposition, # let's try to read the lsts file # try: # amlsts=lsts.reader(open(am+".lsts")) # amlsts.read() # # istate=amlsts.get_header().initial_states # istateprops=lsts.props_by_states(amlsts)[istate] # # stateproplist=amlsts.get_stateprops().keys() # stateproplist.sort() # except: # istateprops=[] appname="" try: with open(os.path.join(working_directory,"%s.info" % am),'r') as am_file: appname=find_application_name( am_file ) except IOError: pass if not appname: pass #sys.stderr.write("generateTaskSwitcher: Warning: application name could not be found in '%s.info'%s" % (am,os.linesep)) if ts_type in ["am","amtgts"]: add_activation_transitions(taskswitcher, running_states_apps, am, appname) elif ts_type == "rm": add_refinement_transitions(taskswitcher, am, appname) else: return False if ts_type == "amtgts" and targetname: extend_for_target_switching(taskswitcher, targetname, running_states_apps) taskswitcher.write(file_object) return True
def createVariableModels(self): for v in self.__variables: verifyAllowActions, toAllowActions = v.getActions() actions = verifyAllowActions + toAllowActions transitions = [] state_props = {} refinements = [] state_props["SleepState"] = [] idx = 0 values = v.getValues() for value in values: state_transitions = [] #Verifying allow transitions to the same state (value remains same) state_transitions.append((idx, idx + 1)) #Allow transitions to other values for i in range(0, len(v.getValues())): if i == idx: continue state_transitions.append( (i, len(verifyAllowActions) + 1 + i)) state_props["SleepState"].append(idx) state_props[v.getName() + value] = [idx] idx += 1 transitions.append(state_transitions) action_file = open(self.__outputDir + v.getName() + ".lsts", "w") w = lsts.writer(action_file) w.set_actionnames(actions) w.set_transitions(transitions) w.set_stateprops(state_props) w.get_header().initial_states = 0 w.write()
def createVariableModels(self): for v in self.__variables: verifyAllowActions, toAllowActions = v.getActions() actions = verifyAllowActions + toAllowActions transitions = [] state_props = {} refinements = [] state_props["SleepState"] = [] idx = 0 values = v.getValues() for value in values: state_transitions = [] #Verifying allow transitions to the same state (value remains same) state_transitions.append((idx,idx+1)) #Allow transitions to other values for i in range (0,len(v.getValues())): if i == idx: continue state_transitions.append((i,len(verifyAllowActions) + 1 + i)) state_props["SleepState"].append(idx) state_props[v.getName() + value] = [idx] idx += 1 transitions.append(state_transitions) action_file = open(self.__outputDir + v.getName() + ".lsts", "w") w = lsts.writer(action_file) w.set_actionnames(actions) w.set_transitions(transitions) w.set_stateprops(state_props) w.get_header().initial_states = 0 w.write()
def convert_to_lsts(model, filelike_object): action_map = dict() visible_set = set([str(alpha) for alpha in model.getActions()]) visible_set.discard("tau") action_vec = ["tau"] + [a for a in visible_set] for alpha, idx in zip(action_vec, xrange(len(action_vec))): action_map[alpha] = idx try: stateprops = [str(prop) for prop in model.getStatePropList()] except AttributeError: stateprops = [] conversionmodel = ConversionModel(action_map, stateprops, model.getInitialState()) w=lsts.writer(filelike_object) w.set_actionnames(action_vec) w.set_transitions(conversionmodel.getTransitions()) w.set_stateprops(conversionmodel.getStateProps()) w.write()
def specialiser(targetdir, input_fileobj, output_fileobj): # Read APPLICATION and ABSTRACTSOURCE tags abstract_lsts_name, application_name = None, None # for line in file(infofilename): for line in input_fileobj: if line[:15] == "ABSTRACTSOURCE:": abstract_lsts_name = os.path.join( targetdir, line.split(":")[1].strip() + ".lsts") elif line[:12] == "APPLICATION:": application_name = line.split(":")[1].strip() if abstract_lsts_name == None: raise SpecialiserError("ABSTRACTSOURCE not found") # Open abstract LSTS file abslsts = lsts.reader(open(abstract_lsts_name, 'r')) # the new lsts is based on the abslsts newlsts = lsts.writer(lsts_object=abslsts) # Specialise the abstract LSTS by replacing @APPLICATION with concrete # application name in the action names of the LSTS newactionnames = [] for index, action in enumerate(abslsts.get_actionnames()): if application_name != None and "@APPLICATION" in action: newactionnames.append( action.replace('@APPLICATION', application_name)) else: newactionnames.append(action) # Write out the specialised LSTS. newlsts.set_actionnames(newactionnames) newlsts.write(output_fileobj)
def createInterface(self): transitions = [] state_props = {} refinements = [] actions = [] state_props["SleepState"] = [0] #Add central state transitions.append([]) for v in self.__variables: verifyTransitions = [] values = v.getValues() for value in values: #Sets CallVerify transitions and actions transitions.append([]) verifyTransitions.append( (len(transitions) - 1, self.__addAction__( "REQ<@PARENT: " + v.getName() + value + ">", actions))) transitions[-1].append( (0, self.__addAction__( "SLEEPapp<ReturnVerify" + v.getName() + ":" + value + ">", actions))) #add setValue transitions and actions if (value != v.getUnknownValue()): transitions.append([]) transitions[0].append( (len(transitions) - 1, self.__addAction__( "WAKEapp<CallSet" + v.getName() + value + ">", actions))) transitions.append([]) transitions[-2].append( (len(transitions) - 1, self.__addAction__( "REQALL<@PARENT: To" + v.getName() + value + ">", actions))) transitions[-1].append( (0, self.__addAction__( "SLEEPapp<ReturnSet" + v.getName() + value + ">", actions))) #Adds CallDiscovers from unknown value if (v.getUnknownValue()): transitions.append([]) transitions[0].append( (len(transitions) - 1, self.__addAction__( "WAKEapp<@PARENT: CallDiscover" + v.getName() + value + ">", actions))) transitions.append([]) transitions[-2].append( (len(transitions) - 1, self.__addAction__( "REQ<@PARENT: " + v.getName() + v.getUnknownValue() + ">", actions))) transitions.append([]) transitions[-3].append( (len(transitions) - 1, self.__addAction__( "REQ<@PARENT: " + v.getName() + value + ">", actions))) transitions[-2].append( (len(transitions) - 1, self.__addAction__( "REQALL<@PARENT: To" + v.getName() + value + ">", actions))) transitions[-1].append( (0, self.__addAction__( "SLEEPapp<@PARENT: ReturnDiscover" + v.getName() + value + ">", actions))) transitions.append(verifyTransitions) transitions[0].append( (len(transitions) - 1, self.__addAction__( "WAKEapp<CallVerify" + v.getName() + "Status>", actions))) #Add forget settings call foundForget = False for v in self.__variables: if v.getUnknownValue(): if not foundForget: transitions.append([]) transitions[0].append( (len(transitions) - 1, self.__addAction__("WAKEapp<CallForgetSettings>", actions))) foundForget = True transitions.append([]) transitions[-2].append( (len(transitions) - 1, self.__addAction__( "REQALL<@PARENT: To" + v.getName() + v.getUnknownValue() + ">", actions))) if foundForget: transitions[-1].append( (0, self.__addAction__("SLEEPapp<ReturnForgetSettings>", actions))) action_file = open(self.__outputDir + "interface.lsts", "w") w = lsts.writer(action_file) w.set_actionnames(actions) w.set_transitions(transitions) w.set_stateprops(state_props) w.get_header().initial_states = 0 w.write()
def __createFlagModels(self, directory): for flag in self.__kendoXMLParser.getFlags(): actions = [] transitions = [] #Enabled state transitions.append([]) enabled_index = 0 #Disabled state transitions.append([]) disabled_index = 1 enableAction = "ALLOW<Enabled" + flag.getName() + ">" disableAction = "ALLOW<Disabled" + flag.getName() + ">" toEnabledAction = "ALLOW<toEnabled" + flag.getName() + ">" toDisabledAction = "ALLOW<toDisabled" + flag.getName() + ">" actions.append(enableAction) enabled_action_index = 1 actions.append(disableAction) disabled_action_index = 2 actions.append(toDisabledAction) toDisabled_action_index = 3 actions.append(toEnabledAction) toEnabled_action_index = 4 transitions[enabled_index].append( (disabled_index, toDisabled_action_index)) transitions[enabled_index].append( (enabled_index, enabled_action_index)) transitions[enabled_index].append( (enabled_index, toEnabled_action_index)) transitions[disabled_index].append( (disabled_index, toDisabled_action_index)) transitions[disabled_index].append( (disabled_index, disabled_action_index)) transitions[disabled_index].append( (enabled_index, toEnabled_action_index)) file = open(directory + "flagmodel_" + flag.getName() + ".lsts", "w") w = lsts.writer(file) w.set_actionnames(actions) w.set_transitions(transitions) #Set right intial state based on the flag default state if flag.getDefault_value() == False: w.get_header().initial_states = disabled_index else: w.get_header().initial_states = enabled_index w.write() ref_machine_file = open( directory + "rm" + os.sep + "flagmodel_" + flag.getName() + "-rm.lsts", "w") #write refinement machines self.__writeRefinementMachine({}, ref_machine_file)
def createInterface(self): transitions = [] state_props = {} refinements = [] actions = [] state_props["SleepState"] = [0] #Add central state transitions.append([]) for v in self.__variables: verifyTransitions = [] values = v.getValues() for value in values: #Sets CallVerify transitions and actions transitions.append([]) verifyTransitions.append((len(transitions)-1,self.__addAction__("REQ<@PARENT: "+ v.getName() + value + ">", actions))) transitions[-1].append((0,self.__addAction__("SLEEPapp<ReturnVerify" + v.getName() +":"+ value + ">", actions))) #add setValue transitions and actions if ( value != v.getUnknownValue()): transitions.append([]) transitions[0].append((len(transitions)-1,self.__addAction__("WAKEapp<CallSet" + v.getName() + value + ">", actions))) transitions.append([]) transitions[-2].append((len(transitions)-1,self.__addAction__("REQALL<@PARENT: To"+ v.getName() + value + ">", actions))) transitions[-1].append((0,self.__addAction__("SLEEPapp<ReturnSet" + v.getName() + value + ">", actions))) #Adds CallDiscovers from unknown value if(v.getUnknownValue()): transitions.append([]) transitions[0].append((len(transitions)-1,self.__addAction__("WAKEapp<@PARENT: CallDiscover" + v.getName() + value + ">", actions))) transitions.append([]) transitions[-2].append((len(transitions)-1,self.__addAction__("REQ<@PARENT: "+ v.getName() + v.getUnknownValue() + ">", actions))) transitions.append([]) transitions[-3].append((len(transitions)-1,self.__addAction__("REQ<@PARENT: "+ v.getName() + value + ">", actions))) transitions[-2].append((len(transitions)-1,self.__addAction__("REQALL<@PARENT: To"+ v.getName() + value + ">", actions))) transitions[-1].append((0,self.__addAction__("SLEEPapp<@PARENT: ReturnDiscover"+ v.getName() + value + ">", actions))) transitions.append(verifyTransitions) transitions[0].append((len(transitions)-1,self.__addAction__("WAKEapp<CallVerify" + v.getName() + "Status>", actions))) #Add forget settings call foundForget = False for v in self.__variables: if v.getUnknownValue(): if not foundForget: transitions.append([]) transitions[0].append((len(transitions)-1,self.__addAction__("WAKEapp<CallForgetSettings>", actions))) foundForget = True transitions.append([]) transitions[-2].append((len(transitions)-1,self.__addAction__("REQALL<@PARENT: To" + v.getName() + v.getUnknownValue() +">", actions))) if foundForget: transitions[-1].append((0,self.__addAction__("SLEEPapp<ReturnForgetSettings>", actions))) action_file = open(self.__outputDir + "interface.lsts", "w") w = lsts.writer(action_file) w.set_actionnames(actions) w.set_transitions(transitions) w.set_stateprops(state_props) w.get_header().initial_states = 0 w.write()