Exemple #1
0
 def generate_on_exit_code(self, event, callback_name):
    code = C.sequence()
    else_str = 'else ' if len(self.calls) > 0 else ''
    code.append(C.line(else_str+'if ( (previousMode == RTE_MODE_{0}) && (newMode != RTE_MODE_{0}) )'.format(event.mode+'_'+event.modeDeclaration)))
    block = C.block(innerIndent = innerIndentDefault)
    block.append(C.statement(C.fcall(callback_name)))
    code.append(block)
    self.add_event_to_call(event, callback_name)
    self.body.extend(code)
Exemple #2
0
 def _genWrite(self, fp, prototypes):
    for proto in prototypes:
       hasComSignal = False
       body = C.block(innerIndent=3)
       if proto.data_element.name in self.com_access['send']:
          func = self.com_access['send'][proto.data_element.name]
          body.code.append(C.statement('return '+str(C.fcall(func.name, params=[proto.func.args[0].name]))))
       else:
          body.code.append(C.statement('return RTE_E_OK'))
       fp.write(str(proto.func)+'\n')
       fp.write('\n'.join(body.lines())+'\n\n')     
Exemple #3
0
 def _generate_runnable_calls(self, code, matching_runnables):
     events = matching_runnables[0].event_triggers
     if len(events) == 1:
         event = events[0]
         if not isinstance(event, autosar.rte.base.OperationInvokedEvent):
             code.append(C.line('if (eventMask & %s)' % event.symbol))
             block = C.block(innerIndent=innerIndentDefault)
             for runnable in matching_runnables:
                 block.append(C.statement(C.fcall(runnable.symbol)))
             code.append(block)
     elif len(events) > 1:
         raise NotImplementedError('multiple events')
Exemple #4
0
 def _genRead(self, fp, prototypes):
    """Generates all Rte_Read functions"""
    for proto in prototypes:
       body = C.block(innerIndent=3)
       #body.code.append(C.statement('*%s = %s'%(proto.func.args[0].name, proto.rte_var.name)))
       #print(proto.rte_var.typename)
       if proto.data_element.name in self.com_access['receive']:
          func = self.com_access['receive'][proto.data_element.name]
          body.code.append(C.statement('return '+str(C.fcall(func.name, params=[proto.func.args[0].name]))))
       else:
          body.code.append(C.statement('return RTE_E_OK'))
       fp.write(str(proto.func)+'\n')
       fp.write('\n'.join(body.lines())+'\n\n')     
Exemple #5
0
def _printf():
    print("Generate printf function...")
    body = C.block(innerIndent=3)
    body.append(C.statement(C.fcall('printf').add_arg('\"%d\"').add_arg('p0')))
    head = C.function(
        'f_printf',
        'void',
    ).add_param(C.variable('p0', 'int'))
    func = C.sequence()
    func.append(head)
    func.append(body)
    print(str(func))
    return func
Exemple #6
0
 def _generate_mode_switch_func(self, callback_name, events):
    code = C.sequence()
    generated=set()
    code.append(C.function(callback_name, 'void'))
    block = C.block(innerIndent = innerIndentDefault)
    for event in events:
       task = self.cfg.find_os_task_by_runnable(event.runnable)
       if task is not None:
          if (task.name, event.name) not in generated:               
             block.append(C.statement(C.fcall('os_task_setEvent', params=['&m_os_task_%s'%task.name, 'EVENT_MASK_%s_%s'%(task.name, event.name)])))
             generated.add((task.name, event.name))
    code.append(block)
    return code
Exemple #7
0
 def _createMockServerCallFunction(self, proto, var_name):
     body = C.block(innerIndent=innerIndentDefault)
     body.append(C.line('if (%s != 0)' % (var_name)))
     inner = C.block(innerIndent=innerIndentDefault)
     fcall = C.fcall(var_name)
     for arg in proto.args:
         fcall.add_param(arg.name)
     if proto.typename != 'void':
         inner.append(C.statement('return %s' % str(fcall)))
     else:
         inner.append(C.statement(fcall))
     body.append(inner)
     if proto.typename != 'void':
         body.append(C.statement('return RTE_E_OK'))
     return body
Exemple #8
0
def _scanf_no_pointer():
    print("Generate scanf function...")
    body = C.block(innerIndent=3)
    body.append(C.statement(C.variable('var0', 'int')))
    body.append(
        C.statement(C.fcall('scanf').add_arg('\"%d\"').add_arg('&var0')))
    body.append(C.statement("return var0"))
    head = C.function(
        'f_scanf_nop',
        'int',
    )
    func = C.sequence()
    func.append(head)
    func.append(body)
    print(str(func))
    return func
Exemple #9
0
 def _generate_mode_switch_func(self, callback_name, events):
     code = C.sequence()
     generated = set()
     code.append(C.function(callback_name, 'void'))
     block = C.block(innerIndent=innerIndentDefault)
     for event in events:
         task = self.cfg.find_os_task_by_runnable(event.runnable)
         if task is not None:
             if (task.name, event.name) not in generated:
                 block.append(
                     C.statement(
                         C.fcall('os_task_setEvent',
                                 params=[
                                     '&m_os_task_%s' % task.name,
                                     'EVENT_MASK_%s_%s' %
                                     (task.name, event.name)
                                 ])))
                 generated.add((task.name, event.name))
     code.append(block)
     return code
Exemple #10
0
 def _genWrite(self, fp, prototypes):
     for port_func in prototypes:
         hasComSignal = False
         body = C.block(innerIndent=innerIndentDefault)
         if port_func.data_element.symbol is not None:
             body.code.append(
                 C.statement('%s = %s' % (port_func.data_element.symbol,
                                          port_func.proto.args[0].name)))
         if port_func.data_element.com_access['Send'] is not None:
             com_func = port_func.data_element.com_access['Send']
             body.code.append(
                 C.statement('return ' + str(
                     C.fcall(com_func.name,
                             params=[port_func.proto.args[0].name]))))
         else:
             if port_func.data_element.result_var is not None:
                 body.code.append(
                     C.statement('return %s' %
                                 port_func.data_element.result_var.name))
             else:
                 body.code.append(C.statement('return RTE_E_OK'))
         fp.write(str(port_func.proto) + '\n')
         fp.write('\n'.join(body.lines()) + '\n\n')
Exemple #11
0
    def _genRead(self, fp, prototypes):
        """Generates all Rte_Read functions"""
        for port_func in prototypes:
            body = C.block(innerIndent=innerIndentDefault)
            if port_func.data_element.com_access['Receive'] is not None:
                com_func = port_func.data_element.com_access['Receive']
                body.code.append(
                    C.statement('return ' + str(
                        C.fcall(com_func.name,
                                params=[port_func.proto.args[0].name]))))
            else:
                body.code.append(
                    C.statement('*%s = %s' % (port_func.proto.args[0].name,
                                              port_func.data_element.symbol)))
                if port_func.data_element.result_var is not None:
                    body.code.append(
                        C.statement('return %s' %
                                    port_func.data_element.result_var.name))
                else:
                    body.code.append(C.statement('return RTE_E_OK'))

            fp.write(str(port_func.proto) + '\n')
            fp.write('\n'.join(body.lines()) + '\n\n')
Exemple #12
0
import cfile as C
hello = C.cfile('hello.c')
hello.code.append(C.sysinclude('stdio.h'))
hello.code.append(C.blank())
hello.code.append(
    C.function(
        'main',
        'int',
    ).add_param(C.variable('argc', 'int')).add_param(
        C.variable('argv', 'char', pointer=2)))
body = C.block(innerIndent=3)
body.append(C.statement(C.fcall('printf').add_arg(r'"Hello World!\n"')))
body.append(C.statement('return 0'))
hello.code.append(body)
print(str(hello))