示例#1
0
 def ate_success_cb(cmd, res, args):
     logger.debug('in ate_success_cb')
     if not 'OK' in res:
         logger.debug('invalid response')
         ate_error_cb(cmd, res, args)
     else:
         self._read_supported_pids()
示例#2
0
 def ate_success_cb(cmd, res, args):
     logger.debug('in ate_success_cb')
     if not 'OK' in res:
         logger.debug('invalid response')
         ate_error_cb(cmd, res, args)
     else:
         self._read_supported_pids()
示例#3
0
 def error_cb(cmd, msg, args):
     if msg == '?':
         #FIXME
         logger.debug('BRD command not supported')
     else:
         logger.debug('error in request_baudrate %s' % msg)
         self._port.baudrate = self.initial_baudrate
         self._current_baudrate = self.initial_baudrate
示例#4
0
 def error_cb(cmd, msg, args):
     if msg == '?':
         #FIXME
         logger.debug('BRD command not supported')
     else:
         logger.debug('error in request_baudrate %s' % msg)
         self._port.baudrate = self.initial_baudrate
         self._current_baudrate = self.initial_baudrate
示例#5
0
 def _update_supported_views(self):
     logger.debug('in update_supported_views')
     for views in (self.views, self.os_views):
         for view in views:
             if self.app.device:
                 if view.command.command in self.app.device.supported_commands:
                     view.supported = True
                     if view in self.os_views or view.command.command == '0101':
                         view.active = True
                 else:
                     view.supported = False
             else:
                 view.supported = False
示例#6
0
 def _update_supported_views(self):
     logger.debug('in update_supported_views')
     for views in (self.views, self.os_views):
         for view in views:
             if self.app.device:
                 if view.command.command in self.app.device.supported_commands:
                     view.supported=True
                     if view in self.os_views or view.command.command == '0101':
                         view.active=True
                 else:
                     view.supported=False
             else:
                 view.supported=False
示例#7
0
 def _port_io_watch_cb(self, fd, condition, data=None):
     logger.debug('in _port_io_watch_cb')
     if condition & gobject.IO_HUP:
         logger.debug('received HUP signal')
         self._sent_command = None
         self._ret_cb = None
         self._err_cb = None
         self._cb_args = None
         self.close()    
         return False
     elif condition & gobject.IO_ERR:
         logger.debug('received ERR signal')
         self._sent_command = None
         self._ret_cb = None
         self._err_cb = None
         self._cb_args = None
         self.close()    
         return False
     elif condition & gobject.IO_IN:
         try:
             result = self._read_result()
             self._parse_result(result)
         except OBDPortError, e:
             logger.debug('CONDITION = IO_IN but reading times out. Error: %s' % e[0])
         finally:
示例#8
0
 def _port_io_watch_cb(self, fd, condition, data=None):
     logger.debug('in _port_io_watch_cb')
     if condition & gobject.IO_HUP:
         logger.debug('received HUP signal')
         self._sent_command = None
         self._ret_cb = None
         self._err_cb = None
         self._cb_args = None
         self.close()
         return False
     elif condition & gobject.IO_ERR:
         logger.debug('received ERR signal')
         self._sent_command = None
         self._ret_cb = None
         self._err_cb = None
         self._cb_args = None
         self.close()
         return False
     elif condition & gobject.IO_IN:
         try:
             result = self._read_result()
             self._parse_result(result)
         except OBDPortError, e:
             logger.debug(
                 'CONDITION = IO_IN but reading times out. Error: %s' %
                 e[0])
         finally:
示例#9
0
 def _update_supported_views(self):
     logger.debug('in update_supported_views')
     if self.app.device.supported_freeze_frame_pids == None:
         logger.debug('supported_freeze_frame_pids not yet read')
         return
     for view in self.views:
         if self.app.device:
             if view.command.command in self.app.device.supported_freeze_frame_pids:
                 view.supported=True
                 view.active=True
             else:
                 view.supported=False
                 view.active=False
         else:
             view.supported=False
             view.active=False
示例#10
0
 def _update_supported_views(self):
     logger.debug('in update_supported_views')
     if self.app.device.supported_freeze_frame_pids == None:
         logger.debug('supported_freeze_frame_pids not yet read')
         return
     for view in self.views:
         if self.app.device:
             if view.command.command in self.app.device.supported_freeze_frame_pids:
                 view.supported = True
                 view.active = True
             else:
                 view.supported = False
                 view.active = False
         else:
             view.supported = False
             view.active = False
示例#11
0
 def _deactivate_plugin(self, plugin):
     
     instance = self._plugin_instance_from_string(plugin)
     istr = str(instance)
     
     if instance.action_group:
         self.app.ui.remove_action_group(instance.action_group)
     if instance.merge_id:
         self.app.ui.remove_ui(instance.merge_id)
     if hasattr(instance, 'unload'):
         instance.unload()
     del instance
         
     for item in self._active_plugins:
         string, i = item
         if string ==  plugin:
             self._active_plugins.remove(item)
                 
     logger.info('Plugin deactivated: %s' % plugin)
     logger.debug('Plugin deactivated: %s' % istr)
示例#12
0
def decode_result(result):
    logger.debug('entering decode_result')
    if not result:
        raise OBDDataError('Data Read Error',
                           _('No data was received from the device'))
    ret = []
    
    result = string.split(result, "\r")

    for data in result:
        if data:
            data = string.split(data)
            data = string.join(data, '')
            
            if data[:2] == '7F':
                logger.debug('we got back 7F which is an error')
            else:
                ret.append(data[4:])
        
    return ret
示例#13
0
def decode_result(result):
    logger.debug('entering decode_result')
    if not result:
        raise OBDDataError('Data Read Error',
                           _('No data was received from the device'))
    ret = []

    result = string.split(result, "\r")

    for data in result:
        if data:
            data = string.split(data)
            data = string.join(data, '')

            if data[:2] == '7F':
                logger.debug('we got back 7F which is an error')
            else:
                ret.append(data[4:])

    return ret
示例#14
0
 def brd_support_success_cb(cmd, res, args):
     if 'OK' in res:
         logger.debug('res = OK')
         self._port.baudrate = baudrate
         logger.debug(self._stop - self._start)
     elif 'ELM327' in res:
         logger.debug('res = ELM327')
         self._send_command('\r', cr_success_cb, error_cb)    
示例#15
0
 def atz_success_cb(cmd, res, args):
     logger.debug('in atz_success_cb')
     if not 'ELM327' in res:
         logger.debug('invalid response')
         atz_error_cb(cmd, res, None)
     else:
         logger.debug('received answer valid')
         self._send_command('ate0', ate_success_cb, ate_error_cb)
示例#16
0
 def atz_success_cb(cmd, res, args):
     logger.debug('in atz_success_cb')
     if not 'ELM327' in res:
         logger.debug('invalid response')
         atz_error_cb(cmd, res, None)
     else:
         logger.debug('received answer valid')
         self._send_command('ate0', ate_success_cb, ate_error_cb) 
示例#17
0
 def brd_support_success_cb(cmd, res, args):
     if 'OK' in res:
         logger.debug('res = OK')
         self._port.baudrate = baudrate
         logger.debug(self._stop - self._start)
     elif 'ELM327' in res:
         logger.debug('res = ELM327')
         self._send_command('\r', cr_success_cb, error_cb)
示例#18
0
    def _send_command(self, command, ret, err, cleanup=True, *args):
        logger.debug('in _send_command; command is %s' % command)
        if not self._port.isOpen():
            raise OBDPortError('PortNotOpen', _('The port is not open'))

        self._cleanup_command = cleanup
        self._sent_command = command
        self._ret_cb = ret
        self._err_cb = err
        self._cb_args = args
        try:
            self._port.flushOutput()
            self._port.flushInput()
            self._port.write(command)
            self._port.write("\r")
        except serial.SerialException:
            self._sent_command = None
            self._ret_cb = None
            self._err_cb = None
            self._cb_args = None
            self.close()           
            raise OBDPortError('PortIOFailed', 
                               _('Unable to write to ') + self._portname)         
示例#19
0
    def _send_command(self, command, ret, err, cleanup=True, *args):
        logger.debug('in _send_command; command is %s' % command)
        if not self._port.isOpen():
            raise OBDPortError('PortNotOpen', _('The port is not open'))

        self._cleanup_command = cleanup
        self._sent_command = command
        self._ret_cb = ret
        self._err_cb = err
        self._cb_args = args
        try:
            self._port.flushOutput()
            self._port.flushInput()
            self._port.write(command)
            self._port.write("\r")
        except serial.SerialException:
            self._sent_command = None
            self._ret_cb = None
            self._err_cb = None
            self._cb_args = None
            self.close()
            raise OBDPortError('PortIOFailed',
                               _('Unable to write to ') + self._portname)
示例#20
0
    def _parse_result(self, data):
        error = False
        success = False
        res = None
        msg = None

        cmd = self._sent_command
        err_cb = self._err_cb
        ret_cb = self._ret_cb
        args = self._cb_args

        if self._sent_command:
            if data[0] == '>':
                logger.debug('command sent, received >')
                error = True

            elif data[0] == '?':
                logger.debug('command sent, received ?')
                error = True
                msg = '?'

            elif 'SEARCHING' in data:
                logger.info('received SEARCHING: resending command')
                self._send_command(cmd, ret_cb, err_cb, args)

            elif 'UNABLE TO CONNECT' in data:
                logger.debug('received UNABLE TO CONNECT')
                error = True
                msg = 'UNABLE TO CONNECT'

            elif 'NO DATA' in data:
                logger.debug('received NO DATA')
                error = True
                msg = 'NO DATA'

            else:
                res = data
                success = True

            if self._cleanup_command:
                self._err_cb = None
                self._ret_cb = None
                self._sent_command = None
                self._cb_args = None

            if error:
                err_cb(cmd, msg, args)

            if success:
                ret_cb(cmd, data, args)

        else:
            # no command sent
            # are we interested anyway?
            if '>' in data:
                logger.debug('received >')
            else:
                logger.debug('no command sent, received %s' % data)
示例#21
0
 def cr_return_cb(cmd, res, args):
     logger.debug('in cr_return_cb')
     if 'OK' in res:
         self._current_baudrate = baudrate
示例#22
0
 def ate_error_cb(cmd, msg, args):
     logger.debug('in atz_error_cb')
     raise OBDPortError('OpenPortFailed', 
                        _('ate0 command failed'))
示例#23
0
            logger.error('%s does not seem to be a valid Plugin' % instance)
            instance = None
            return None

        try:
            if instance.ui_info:
                instance.merge_id = self.app.ui.add_ui_from_string(instance.ui_info)
                self.app.ui.insert_action_group(instance.action_group, 0)
        except gobject.GError, msg:
                logger.error('building menus failed: %s' % msg)
        
        if hasattr(instance, 'load'):                    
            instance.load()

        logger.info('Plugin activated: %s' % plugin)
        logger.debug(instance)
        return instance
            
            
    def _deactivate_plugin(self, plugin):
        
        instance = self._plugin_instance_from_string(plugin)
        istr = str(instance)
        
        if instance.action_group:
            self.app.ui.remove_action_group(instance.action_group)
        if instance.merge_id:
            self.app.ui.remove_ui(instance.merge_id)
        if hasattr(instance, 'unload'):
            instance.unload()
        del instance
示例#24
0
    def _parse_result(self, data):
        error = False
        success = False
        res = None
        msg = None
        
        cmd = self._sent_command
        err_cb = self._err_cb
        ret_cb = self._ret_cb
        args = self._cb_args
     
        if self._sent_command:
            if data[0] == '>':
                logger.debug('command sent, received >')
                error = True
                
            elif data[0] == '?':
                logger.debug('command sent, received ?')
                error = True
                msg = '?'
                
            elif 'SEARCHING' in data:
                logger.info('received SEARCHING: resending command')
                self._send_command(cmd, ret_cb, err_cb, args)
                
            elif 'UNABLE TO CONNECT' in data:
                logger.debug('received UNABLE TO CONNECT')
                error = True
                msg = 'UNABLE TO CONNECT'

            elif 'NO DATA' in data:
                logger.debug('received NO DATA')
                error = True
                msg = 'NO DATA'
                
            else:
                res = data
                success = True
                
            if self._cleanup_command:
                self._err_cb = None
                self._ret_cb = None
                self._sent_command = None
                self._cb_args = None
                
            if error:
                err_cb(cmd, msg, args)
                
            if success:
                ret_cb(cmd, data, args)
                
        else:
            # no command sent
            # are we interested anyway?
            if '>' in data:
                logger.debug('received >')
            else:
                logger.debug('no command sent, received %s' % data)
示例#25
0
            self._sent_command = None
            self._ret_cb = None
            self._err_cb = None
            self._cb_args = None
            self.close()    
            return False
        elif condition & gobject.IO_IN:
            try:
                result = self._read_result()
                self._parse_result(result)
            except OBDPortError, e:
                logger.debug('CONDITION = IO_IN but reading times out. Error: %s' % e[0])
            finally:
                return True
        else:
            logger.debug('received an unknown io signal')
            return False

  
    
    def _read_supported_pids(self, freeze_frame=False):
        #FIXME: merge these 3 in a single function
        def zero_success_cb(cmd, data, args):
            self._supported_pids += decode_pids_from_bitstring(data)
            if '0120' in self._supported_pids:
                self._send_command('0120', twenty_success_cb, error_cb)
            else:
                self._connected = True
                logger.info('supported pids: %s\n' % self._supported_pids)
                self.emit('connected', True)
示例#26
0
 def cr_return_cb(cmd, res, args):
     logger.debug('in cr_return_cb')
     if 'OK' in res:
         self._current_baudrate = baudrate
示例#27
0
            self._err_cb = None
            self._cb_args = None
            self.close()
            return False
        elif condition & gobject.IO_IN:
            try:
                result = self._read_result()
                self._parse_result(result)
            except OBDPortError, e:
                logger.debug(
                    'CONDITION = IO_IN but reading times out. Error: %s' %
                    e[0])
            finally:
                return True
        else:
            logger.debug('received an unknown io signal')
            return False

    def _read_supported_pids(self, freeze_frame=False):
        #FIXME: merge these 3 in a single function
        def zero_success_cb(cmd, data, args):
            self._supported_pids += decode_pids_from_bitstring(data)
            if '0120' in self._supported_pids:
                self._send_command('0120', twenty_success_cb, error_cb)
            else:
                self._connected = True
                logger.info('supported pids: %s\n' % self._supported_pids)
                self.emit('connected', True)

        def twenty_success_cb(cmd, data, args):
            self._supported_pids += decode_pids_from_bitstring(data, 32)
示例#28
0
 def ate_error_cb(cmd, msg, args):
     logger.debug('in atz_error_cb')
     raise OBDPortError('OpenPortFailed', _('ate0 command failed'))