Esempio n. 1
0
def im_delete_file(radio, path_list):
    """
    Delete the file from the remote tag

    Return True  if error == success
    """
    def _delete_msg(path_list):
        im_name = TagName(path2tlvs(path_list))
        msg = TagDelete(im_name)
        return msg

    if get_cmd_args().verbosity > 2:
        mylog.debug(method=inspect.stack()[0][3], path=path_list)
    delete_req = _delete_msg(path_list)
    if get_cmd_args().verbosity > 2:
        mylog.debug(
            method=inspect.stack()[0][3],
            name=delete_req.name,
        )
    error, payload, msg_meta = msg_exchange(radio, delete_req)
    if get_cmd_args().verbosity > 2:
        mylog.debug(method=inspect.stack()[0][3], error=error, data=payload)
    if (error) and (error != tlv_errors.SUCCESS):
        error = tlv_errors.SUCCESS
    mylog.info(
        method=inspect.stack()[0][3],
        error=error,
    )
    return error
Esempio n. 2
0
def im_close_file(radio, path_list, offset):
    def _close_msg(path_list):
        im_name = TagName(path2tlvs(path_list))
        im_name.append(TagTlv(tlv_types.OFFSET, offset))
        msg = TagPut(im_name, pl=TagTlvList([TagTlv(tlv_types.EOF)]))
        return msg

    close_req = _close_msg(path_list)
    if get_cmd_args().verbosity > 2:
        mylog.debug(method=inspect.stack()[0][3],
                    name=close_req.name,
                    data=close_req.payload)
    error, payload, msg_meta = msg_exchange(radio, close_req)
    if get_cmd_args().verbosity > 2:
        mylog.debug(method=inspect.stack()[0][3],
                    error=error,
                    data=close_req.payload,
                    meta=msg_meta)
    if (error) \
       and (error != tlv_errors.SUCCESS) \
       and (error != tlv_errors.EODATA):
        return 0
    offset = payload2values(payload, [
        tlv_types.OFFSET,
    ])[0]
    if (offset):
        return offset
    else:
        return 0
Esempio n. 3
0
def _put_bytes(radio, tname, buf, offset):
    '''
    Send bytes to a remote file on the tag
    '''

    def _file_put_msg(tname, buf, offset):
        if (offset):
            tname.append(TagTlv(tlv_types.OFFSET, offset))
        msg = TagPut(tname, pl=bytearray(buf))
        return msg

    req_msg = _file_put_msg(tname, buf, offset)
    if get_cmd_args().verbosity > 2:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    name=req_msg.name)
    err, payload, msg_meta = msg_exchange(radio, req_msg)
    if (err == tlv_errors.SUCCESS):
        amtLeft = payload2values(payload,
                             [tlv_types.SIZE,
                             ])[0]
        if (amtLeft == None):
            amtLeft = len(buf)
        if get_cmd_args().verbosity > 2:
            mylog.debug(method=inspect.stack()[0][3],
                        lineno=sys._getframe().f_lineno,
                        count=len(buf),
                        size=amtLeft)
        return amtLeft
    mylog.error(method=inspect.stack()[0][3],
               lineno=sys._getframe().f_lineno,
               error=err)
    return 0
Esempio n. 4
0
def file_truncate(radio, path_list, offset):

    def _truncate_msg(tname, offset):
        msg = TagPut(tname,
                     pl=TagTlvList([(tlv_types.INTEGER, offset)]))
        return msg

    tname = TagName(path2tlvs(path_list))
    req_msg = _truncate_msg(tname, offset)
    if get_cmd_args().verbosity > 2:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    name=req_msg.name, offset=offset)
    err, payload, msg_meta = msg_exchange(radio, req_msg)
    if (err == tlv_errors.SUCCESS):
        amtLeft = payload2values(payload,
                             [tlv_types.SIZE,
                             ])[0]
        if get_cmd_args().verbosity > 2:
            mylog.debug(method=inspect.stack()[0][3],
                        lineno=sys._getframe().f_lineno,
                        offset=amtLeft)
        return amtLeft
    mylog.error(method=inspect.stack()[0][3],
               lineno=sys._getframe().f_lineno,
               error=err)
    return -2
Esempio n. 5
0
def int_status(radio, clr_flags, show=False):
    clr_flags.ph_pend.STATE_CHANGE = False  # always clear this interrupt
    if get_cmd_args().verbosity > 4:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    flags=clr_flags,
                    show=show)
    try:
        p_g = radio.get_clear_interrupts(clr_flags)
    except Exception as ex:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    exception=ex)
        raise RuntimeError('radio int_status error')

    if (show is True):
        s_name = 'int_status_rsp_s'
        p_s = eval(s_name)
        p_d = p_s.build(p_g)
        mylog.debug('const config strings',
                    method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    name=s_name,
                    data=hexlify(p_d))
        mylog.debug('config structure',
                    method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    data=radio_display_structs[p_s](p_s, p_d))
    if get_cmd_args().verbosity > 4:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    results=p_g)
    return p_g
Esempio n. 6
0
def radio_show_config(radio, config):
    '''
    Show Radio device configuration
    '''
    radio_show_config(radio.dump_radio())
    total = 0
    if get_cmd_args().verbosity > 1:
        mylog.debug(
            'const config strings',
            method=inspect.stack()[0][3],
            lineno=sys._getframe().f_lineno,
        )
    for s in config:
        if get_cmd_args().verbosity > 1:
            mylog.debug(method=inspect.stack()[0][3],
                        lineno=sys._getframe().f_lineno,
                        data=(hexlify(s)))
        total += len(s) - 4
    if get_cmd_args().verbosity > 1:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    size=total)
    # ## Get Chip Status
    if get_cmd_args().verbosity > 1:
        mylog.debug('const config strings',
                    method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    data=radio.get_chip_status())
Esempio n. 7
0
def payload2values(payload, keynames):
    '''
    Extract all parameters in payload and then filter for the
    parameters of interest.

    Remove any matched parameters from the payload.
    '''
    plist = []
    if get_cmd_args().verbosity > 3:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    data=keynames.__repr__())
    for match_key in keynames:
        item = None
        for tlv in payload:
            if match_key == tlv.tlv_type():
                item = tlv.value()
                payload.remove(tlv)
                break
            if get_cmd_args().verbosity > 5:
                mylog.debug(method=inspect.stack()[0][3],
                            lineno=sys._getframe().f_lineno,
                            data={
                                'match': match_key,
                                'tlv': tlv,
                                'list': plist
                            })
        plist.append(item)
    if get_cmd_args().verbosity > 3:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    data=plist.__repr__())
    return (plist)
Esempio n. 8
0
def payload2special(payload, keynames):
    '''
    get first keyname to match and return its value as packed bytes
    '''
    buf = bytearray()
    if get_cmd_args().verbosity > 4:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    data=keynames.__repr__())
    for match_key in keynames:
        for tlv in payload:
            if match_key == tlv.tlv_type():
                buf = bytearray(tlv.build())
                payload.remove(tlv)
                break
            if get_cmd_args().verbosity > 4:
                mylog.debug(method=inspect.stack()[0][3],
                            lineno=sys._getframe().f_lineno,
                            data={
                                'match': match_key,
                                'tlv': tlv.__repr__()
                            })
        if buf:
            break
    if get_cmd_args().verbosity > 4:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    data='' if not buf else hexlify(buf))
    return buf
Esempio n. 9
0
 def link(self, link, target):
     if get_cmd_args().verbosity > 3:
         self.log.debug(method=inspect.stack()[0][3],
                        link=link,
                        target=target)
     # make sure target exists
     target_handler, target_list = self.LocateNode(target)
     if (not target_handler):
         self.log.warn('target doesnt exist',
                       method=inspect.stack()[0][3],
                       link=link,
                       target=target)
         raise FuseOSError(ENOENT)
     link_base, link_name = os.path.split(link)
     # make sure version matches
     target_base, target_name = os.path.split(target)
     if (link_name != target_name):
         self.log.warn('names dont match',
                       method=inspect.stack()[0][3],
                       link=link_name,
                       target=taget_name)
         raise FuseOSError(EPERM)
     # link directory handler creates context for linked file
     link_handler, link_list = self.LocateNode(link_base)
     if (link_handler):
         if get_cmd_args().verbosity > 3:
             self.log.debug(method=inspect.stack()[0][3],
                            link=link_list,
                            target=target_list)
         return link_handler.link(link_list, target_list)
     self.log.warn('link does not exist',
                   method=inspect.stack()[0][3],
                   link=link_base)
     raise FuseOSError(ENOENT)
Esempio n. 10
0
def radio_write_test(radio,
                     test_name,
                     buf,
                     pos=0,
                     node=None,
                     name=None,
                     power=None,
                     wait=MAX_WAIT):
    if not node:
        node = TagTlv(tlv_types.NODE_ID, -1)
    if not name:
        name = TagName([
            node,
            TagTlv('tag'),
            TagTlv('.test'),
            TagTlv(test_name),
            TagTlv('byte'),
            TagTlv(tlv_types.OFFSET, pos),
            TagTlv(tlv_types.SIZE, len(buf)),
        ])
    req_obj = TagPut(name, pl=buf)
    if get_cmd_args().verbosity > 2:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    name=req_obj.name,
                    data=req_obj.payload.__repr__())
    req_msg = req_obj.build()
    sstatus = radio_send_msg(radio, req_msg, power)
    rsp_msg, rssi, rstatus = radio_receive_msg(radio, MAX_RECV, wait)
    if rsp_msg:
        if get_cmd_args().verbosity > 3:
            mylog.debug(method=inspect.stack()[0][3],
                        lineno=sys._getframe().f_lineno,
                        data=rsp_msg.__repr__())
        rsp_obj = TagMessage(rsp_msg)
        if get_cmd_args().verbosity > 4:
            mylog.debug(method=inspect.stack()[0][3],
                        lineno=sys._getframe().f_lineno,
                        data={
                            'header': rsp_obj.header,
                            'name': rsp_obj.name,
                            'payload': rsp_obj.payload
                        })
        if rsp_obj.payload:
            if get_cmd_args().verbosity > 3:
                mylog.debug(method=inspect.stack()[0][3],
                            lineno=sys._getframe().f_lineno,
                            data=rsp_obj.payload.__repr__())
            error, offset = payload2values(rsp_obj.payload, [
                tlv_types.ERROR,
                tlv_types.OFFSET,
            ])
            if error and error != tlv_errors.SUCCESS:
                return error, offset
        return tlv_errors.SUCCESS, pos + len(buf)
    return tlv_errors.EINVAL, pos
Esempio n. 11
0
def radio_get_position(radio, node=None, name=None, power=None, wait=MAX_WAIT):
    gps_geo = None
    if not node:
        node = TagTlv(tlv_types.NODE_ID, -1)
    if not name:
        name = TagName([
            node,
            TagTlv('tag'),
            TagTlv('info'),
            TagTlv('sens'),
            TagTlv('gps'),
            TagTlv('xyz')
        ])
    xyz_struct = pystruct.Struct('<iii')
    get_gps_xyz = TagGet(name)
    if get_cmd_args().verbosity > 2:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    name=get_gps_xyz.name)
    req_msg = get_gps_xyz.build()
    error, payload, msg_meta = msg_exchange(radio, req_obj)
    rssi, sstatus, rstatus = msg_meta
    if (error is tlv_errors.SUCCESS):
        if payload:
            gps_xyz = payload2values(payload, [
                tlv_types.GPS,
            ])[0]
            if get_cmd_args().verbosity > 2:
                mylog.debug(method=inspect.stack()[0][3],
                            lineno=sys._getframe().f_lineno,
                            data={
                                'x': gps_xyz[0],
                                'y': gps_xyz[0],
                                'z': gps_xyz[0],
                            })
            lon, lat, elv = transform(ecef, wgs84, *gps_xyz)
            gps_geo = float(lat), float(lon), float(elv)
            if get_cmd_args().verbosity > 2:
                mylog.debug('home geolocation',
                            method=inspect.stack()[0][3],
                            lineno=sys._getframe().f_lineno,
                            data={
                                'latitude': gps_geo[0],
                                'longitude': gps_geo[1],
                                'elevation': gps_geo[0],
                            })
            return gps_xyz, gps_geo
        else:
            mylog.error('response error',
                        method=inspect.stack()[0][3],
                        error=error)
    else:
        mylog.error('timeout', method=inspect.stack()[0][3])
    return None, None
Esempio n. 12
0
def simple_get_record(radio, path_list):
    '''
    Simple Record Data Transfer function
    '''
    def _file_record_msg(path_list):
        # / <node_id> / "tag" / "info" / "sens" / "gps" / "xyz"
        tlv_list = path2tlvs(path_list)
        tname = TagName(tlv_list)
        if get_cmd_args().verbosity > 3:
            mylog.debug(method=inspect.stack()[0][3],
                        lineno=sys._getframe().f_lineno,
                        name=tname)
        return TagGet(tname)

    end = time() + DEADMAN_TIME # deadman timer
    accum_bytes = bytearray()
    req_msg = _file_record_msg(path_list)
    while time() < end:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    name=req_msg.name)
        err, payload, msg_meta = msg_exchange(radio, req_msg)
        if get_cmd_args().verbosity > 2:
            mylog.debug(method=inspect.stack()[0][3],
                        lineno=sys._getframe().f_lineno,
                        error=err,
                        data=payload)
        if (err == tlv_errors.SUCCESS) or \
           (err == tlv_errors.EODATA):
            if (err == tlv_errors.EODATA):
                mylog.info('end of data',
                           method=inspect.stack()[0][3],
                           error=err)
            break
        else:
            mylog.error('error',
                       method=inspect.stack()[0][3],
                       lineno=sys._getframe().f_lineno,
                       error=err)
            if err != tlv_errors.EBUSY:
                break
    if time() > end:
        mylog.warn('deadman timeout',
                   method=inspect.stack()[0][3],
                   lineno=sys._getframe().f_lineno,
                   end=end, now=time())
    if get_cmd_args().verbosity > 1:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    error=err,
                    data=payload)
    return err, payload, msg_meta
Esempio n. 13
0
 def getattr(self, path, fh=None):
     if get_cmd_args().verbosity > 4:
         self.log.debug(method=inspect.stack()[0][3], path=path, fh=fh)
     handler, path_list = self.LocateNode(path)
     if get_cmd_args().verbosity > 4:
         self.log.debug(method=inspect.stack()[0][3],
                        handler=type(handler),
                        path_list=path_list)
     if get_cmd_args().verbosity > 1:
         self.log.debug(method=inspect.stack()[0][3],
                        handler=type(handler),
                        path_list=path_list)
     try:
         return handler.getattr(path_list, update=True)
     except AttributeError:
         raise FuseOSError(ENOENT)
Esempio n. 14
0
def im_get_dir(radio, path_list, version=None):
    '''
    Get Image Directory

    Returns a list of tuples containing a directory
    name and current state.
    '''
    mylog.debug(method=inspect.stack()[0][3], path=path_list)

    def _get_dir_msg(path_list, version):
        tlv_list = path2tlvs(path_list)
        if (version):
            tlv_list.append(TagTlv(tlv_types.VERSION, version))
        im_name = TagName(tlv_list)
        msg = TagGet(im_name)
        return msg

    if (version):
        dir_req = _get_dir_msg(path_list, version)
    else:
        dir_req = _get_dir_msg(path_list, None)

    mylog.debug(method=inspect.stack()[0][3], name=dir_req.name)
    error, payload, msg_meta = msg_exchange(radio, dir_req)
    mylog.debug(method=inspect.stack()[0][3],
                error=error,
                data=payload,
                meta=msg_meta)
    rtn_list = []
    if (error == tlv_errors.SUCCESS):
        if get_cmd_args().verbosity > 2:
            mylog.debug(method=inspect.stack()[0][3], data=payload)
        for x in range(0, len(payload), 2):
            version = payload[x].value()
            state = payload[x + 1].value()
            if get_cmd_args().verbosity > 2:
                mylog.debug(method=inspect.stack()[0][3],
                            state=state,
                            version=version)
            if (state == 'a'): state = 'active'
            elif (state == 'b'): state = 'backup'
            elif (state == 'g'): state = 'golden'
            elif (state == 'n'): state = 'NIB'
            elif (state == 'v'): state = 'valid'
            rtn_list.append((version, state))
    return rtn_list
Esempio n. 15
0
 def fsync(self, path, datasync, fip):
     if get_cmd_args().verbosity > 3:
         self.log.debug(method=inspect.stack()[0][3],
                        path=path,
                        datasync=datasync,
                        fip=fip)
     raise FuseOSError(ENOENT)
     # zzz use this to trigger tag to search for sync record
     return 0
Esempio n. 16
0
 def _file_record_msg(path_list):
     # / <node_id> / "tag" / "info" / "sens" / "gps" / "xyz"
     tlv_list = path2tlvs(path_list)
     tname = TagName(tlv_list)
     if get_cmd_args().verbosity > 3:
         mylog.debug(method=inspect.stack()[0][3],
                     lineno=sys._getframe().f_lineno,
                     name=tname)
     return TagGet(tname)
Esempio n. 17
0
def file_update_attrs(radio, path_list, attrs):
    '''
    Retrieve current attributes of a file from remote tag
    '''

    def _file_attr_msg(path_list):
        tname = TagName(path2tlvs(path_list))
        return TagHead(tname)

    req_msg = _file_attr_msg(path_list)
    if (req_msg == None):
        mylog.error('bad request',
                    method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    path=path_list)
        return attrs
    if get_cmd_args().verbosity > 2:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    name=req_msg.name)
    err, payload, msg_meta = msg_exchange(radio, req_msg)
    if (err == tlv_errors.SUCCESS):
        if get_cmd_args().verbosity > 2:
            mylog.debug(method=inspect.stack()[0][3],
                        lineno=sys._getframe().f_lineno,
                        data=payload)
        offset, filesize = payload2values(payload,
                                          [tlv_types.OFFSET,
                                           tlv_types.SIZE,
                                           # zzz tlv_types.UTC_TIME,
                                          ])
        this_time = time() # zzz need to set from response value
        if (filesize == None): filesize = 0
        if (offset == None): offset = 0
    else:
        mylog.error('response failure', method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    error=err)
        this_time = -1
        filesize = 0
    attrs['st_size']  = filesize
    attrs['st_mtime'] = this_time
    attrs['rssi'] = msg_meta[0]
    return attrs
Esempio n. 18
0
 def _file_bytes_msg(path_list, amount_to_get, file_offset):
     # / <node_id> / "tag" / "sd" / 0 / blockname / byte [/ fileno]
     tlv_list = path2tlvs(path_list)
     tlv_list.extend([TagTlv(tlv_types.OFFSET, file_offset),
                      TagTlv(tlv_types.SIZE, amount_to_get)])
     tname = TagName(tlv_list)
     if get_cmd_args().verbosity > 2:
         mylog.debug(method=inspect.stack()[0][3],
                     lineno=sys._getframe().f_lineno,
                     name=tname)
     return TagGet(tname)
Esempio n. 19
0
 def create(self, path, mode, fh):
     base, name = os.path.split(path)
     dirhandler, path_list = self.LocateNode(base)
     if get_cmd_args().verbosity > 3:
         self.log.debug(method=inspect.stack()[0][3],
                        base=base,
                        name=name,
                        dirhandler=dirhandler)
     # try:
     if (dirhandler):
         path_list.append(name)
         return dirhandler.create(path_list, mode)
Esempio n. 20
0
 def release(self, path, fh):
     if get_cmd_args().verbosity > 4:
         self.log.debug(method=inspect.stack()[0][3], path=path, fh=fh)
     handler, path_list = self.LocateNode(path)
     base, name = os.path.split(path)
     ret_val = handler.release(path_list)
     dhandler, _ = self.LocateNode(base)
     try:
         dhandler.release(path_list)
     except AttributeError:
         pass
     return ret_val
Esempio n. 21
0
def collect_int_status(status):
    p = []
    for pend in [status.chip_pend, status.modem_pend, status.ph_pend]:
        for item in pend.iteritems():
            if item[1]:
                p.append(item[0])
    if get_cmd_args().verbosity > 4:
        mylog.debug('*** collect_int_status',
                    method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    status=status,
                    progress=p)
    return p
Esempio n. 22
0
 def readdir(self, path, fh):
     handler, path_list = self.LocateNode(path)
     if get_cmd_args().verbosity > 4:
         self.log.debug(method=inspect.stack()[0][3],
                        handler=type(handler),
                        path_list=path_list)
     dir_list = handler.readdir(path_list)
     if dir_list:
         return dir_list
     else:
         self.log.warn(
             'no directory found',
             method=inspect.stack()[0][3],
         )
         return ['.', '..']
Esempio n. 23
0
def show_int_rsp(radio, pend_flags):
    s_name = 'int_status_rsp_s'
    p_s = eval(s_name)
    clr_flags = clr_no_flags
    clr_flags.ph_pend.STATE_CHANGE = False
    p_g = radio.get_clear_interrupts(clr_flags)
    p_d = p_s.build(p_g)
    if get_cmd_args().verbosity > 1:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    name=s_name,
                    data=hexlify(p_d))
        mylog.debug('interrupt structure',
                    method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    data=radio_display_structs[p_s](p_s, p_d))
Esempio n. 24
0
def im_set_version(radio, path_list):
    def _set_version_msg(path_list):
        tlv_list = path2tlvs(path_list[:-1])
        tlv_list.append(TagTlv(tlv_types.VERSION, path_list[-1].split('.')))
        req_obj = TagPut(TagName(tlv_list))
        return req_obj

    req_msg = _set_version_msg(path_list)
    if get_cmd_args().verbosity > 2:
        mylog.debug(
            method=inspect.stack()[0][3],
            name=req_msg.name,
        )
    err, payload, msg_meta = msg_exchange(radio, req_msg)
    if (err is None):
        err = tlv_errors.SUCCESS
    mylog.debug(method=inspect.stack()[0][3], error=err)
    return err
Esempio n. 25
0
    def __init__(self):
        self.create_count = 0
        self.open_count = 0
        self.start = time()
        self.radio = None
        self.tree_root = None
        self.log = rootlog
        #uid, gid, pid = fuse_get_context()
        if get_cmd_args().verbosity > 3:
            self.log.debug(method=inspect.stack()[0][3],
                           context=fuse_get_context())

        self.uid = os.getuid()
        self.gid = os.getgid()

        #clear up any possible env var diffs
        os.environ['USER'] = '******'
        os.environ['USERNAME'] = '******'
        os.environ['LOGNAME'] = 'pi'
Esempio n. 26
0
def radio_get_rtctime(radio, node=None, name=None, power=None, wait=MAX_WAIT):
    if not node:
        node = TagTlv(tlv_types.NODE_ID, -1)
    if not name:
        name = TagName([node, TagTlv('tag'), TagTlv('sys'), TagTlv('rtc')])
    req_obj = TagGet(name)
    if get_cmd_args().verbosity > 3:
        mylog.debug('*** radio_get_rtctime',
                    method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    name=name)
    error, payload, msg_meta = msg_exchange(radio, req_obj)
    rssi, sstatus, rstatus = msg_meta
    if (error is tlv_errors.SUCCESS):
        if payload:
            tagtime = payload2values(payload, [
                tlv_types.UTC_TIME,
            ])[0]
            return tagtime, rssi, sstatus, rstatus
    return None, None, sstatus, rstatus
Esempio n. 27
0
def radio_get_rssi(radio, node=None, name=None, power=None, wait=MAX_WAIT):
    if not node:
        node = TagTlv(tlv_types.NODE_ID, -1)
    if not name:
        name = TagName([node, TagTlv('tag'), TagTlv('.test'), TagTlv('rssi')])
    req_obj = TagGet(name)
    req_msg = req_obj.build()
    error, payload, msg_meta = msg_exchange(radio, req_obj)
    rssi, sstatus, rstatus = msg_meta
    if (error is tlv_errors.SUCCESS):
        if payload:
            if get_cmd_args().verbosity > 3:
                mylog.debug('*** radio_get_rssi',
                            method=inspect.stack()[0][3],
                            lineno=sys._getframe().f_lineno,
                            payload=payload)
            tag_rssi = payload2values(payload, [
                tlv_types.INTEGER,
            ])[0]
            return tag_rssi, rssi, sstatus, rstatus
        return None, rssi, sstatus, rstatus
    return None, None, sstatus, rstatus
Esempio n. 28
0
 def destroy(self, path):
     if get_cmd_args().verbosity > 3:
         self.log.debug(method=inspect.stack()[0][3], path=path)
     return None
Esempio n. 29
0
def file_get_bytes(radio, path_list, amount_to_get, file_offset):
    '''
    File Byte Data Transfer function
    '''
    accum_bytes = bytearray()
    eof = False

    def _file_bytes_msg(path_list, amount_to_get, file_offset):
        # / <node_id> / "tag" / "sd" / 0 / blockname / byte [/ fileno]
        tlv_list = path2tlvs(path_list)
        tlv_list.extend([TagTlv(tlv_types.OFFSET, file_offset),
                         TagTlv(tlv_types.SIZE, amount_to_get)])
        tname = TagName(tlv_list)
        if get_cmd_args().verbosity > 2:
            mylog.debug(method=inspect.stack()[0][3],
                        lineno=sys._getframe().f_lineno,
                        name=tname)
        return TagGet(tname)

    end = time() + DEADMAN_TIME # deadman timer
    accum_bytes = bytearray()
    eof = False
    while (amount_to_get > 0) and time() < end:
        req_msg = _file_bytes_msg(path_list, amount_to_get, file_offset)
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    name=req_msg.name)
        err, payload, msg_meta = msg_exchange(radio, req_msg)
        if get_cmd_args().verbosity > 3:
            mylog.debug(method=inspect.stack()[0][3],
                        lineno=sys._getframe().f_lineno,
                        error=err,
                        data=payload)
        if (err == tlv_errors.SUCCESS) or \
           (err == tlv_errors.EODATA):
            offset, amt2get, block = payload2values(payload,
                                                    [tlv_types.OFFSET,
                                                     tlv_types.SIZE,
                                                     tlv_types.BLOCK,
                                                    ])
            if get_cmd_args().verbosity > 2:
                mylog.debug(method=inspect.stack()[0][3],
                            lineno=sys._getframe().f_lineno,
                            offset=offset,
                            count=amt2get,
                            size=0 if not block else len(block),
                            error=err)
            if not block:
                block = payload2special(payload,
                               [tlv_types.INTEGER,
                                tlv_types.UTC_TIME,
                                tlv_types.VERSION,
                                tlv_types.GPS,
                                tlv_types.STRING])
            if block:
                accum_bytes   += block
                file_offset   += len(block)
                amount_to_get -= len(block)

            if (err == tlv_errors.EODATA):
                mylog.info('end of data',
                           method=inspect.stack()[0][3],
                           offset=file_offset,
                           count=amount_to_get,
                           error=err)
                eof = True
                break

            if (offset) and (offset != file_offset):
                mylog.warn('offset mismatch',
                           method=inspect.stack()[0][3],
                           offset=file_offset,
                           size=offset)
                break
            if (amt2get) and (amt2get != amount_to_get):
                mylog.warn('size mismatch',
                           method=inspect.stack()[0][3],
                           size=amount_to_get,
                           count=amt2get)
                break
        elif (err == tlv_errors.EBUSY):
            mylog.info('busy',
                       method=inspect.stack()[0][3],
                       offset=file_offset,
                       error=err)
            continue
        else:
            mylog.error('unexpected', method=inspect.stack()[0][3],
                        lineno=sys._getframe().f_lineno,
                        offset=file_offset,
                        error=err)
            break
    if get_cmd_args().verbosity > 2:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    count=file_offset-len(accum_bytes),
                    size=len(accum_bytes),
                    eof=eof)
    return accum_bytes, eof
Esempio n. 30
0
def radio_poll(radio, window=1000, slots=16, power=None, wait=None):
    '''
    Sends time, slot_time, slot_count, node_id, node_name,
    then receives none or more responses from any tags within
    radio 'earshot'. The poll request specifies the number of
    slots and time length of a slots. Each tag will use a
    random number to pick a slot (or no slot) and then wait
    the specified time period to respond with its node_id,
    software version, and event pending counter. Slot_time
    is in milliseconds.
    '''
    found = {}
    last_rssi = 0
    req_obj = TagPoll(slot_width=window, slot_count=slots)
    req_msg = req_obj.build()
    bps = get_ids_wds()['bps']
    wait_time = wait if (wait) else (slots * ((1.0 * window) / bps)) * 1000
    start = time()
    end = start + wait_time + SHORT_DELAY
    if get_cmd_args().verbosity > 2:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    start=start,
                    end=end,
                    total=end - start,
                    delay=wait_time,
                    slots=slots,
                    window=window,
                    speed=bps)
    rstatus = ''
    sstatus = radio_send_msg(radio, req_msg, power)
    if get_cmd_args().verbosity > 3:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno)


#                    name=req_obj.name,)
#                    payload=req_obj.payload,)
#                    data=hexlify(req_msg))
    while (time() < end):
        rsp_msg, rssi, rstatus = radio_receive_msg(radio, MAX_RECV,
                                                   end - time())
        if rsp_msg:
            last_rssi = rssi
            if get_cmd_args().verbosity > 3:
                mylog.debug(method=inspect.stack()[0][3],
                            lineno=sys._getframe().f_lineno,
                            data=hexlify(rsp_msg))
            try:
                rsp_obj = TagMessage(rsp_msg)
            except (TlvBadException, TlvListBadException):
                mylog.warn('bad response', method=inspect.stack()[0][3])
                continue
            try:
                found[hexlify(rsp_obj.payload[0].value())] = [rssi] + \
                    [rsp_obj.payload[i].value() for i in range(1,len(rsp_obj.payload))]
            except (TlvBadException, TlvListBadException):
                mylog.warn('bad parameters', method=inspect.stack()[0][3])
                if get_cmd_args().verbosity > 3:
                    mylog.debug(method=inspect.stack()[0][3],
                                lineno=sys._getframe().f_lineno,
                                data=radio.trace.filter(count=-20))
    if get_cmd_args().verbosity > 2:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    elapsed=time() - start,
                    data=found)
    return found