Exemplo n.º 1
0
def radio_set_rtctime(radio,
                      utctime,
                      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 = TagPut(name,
                     pl=TagTlvList([TagTlv(tlv_types.UTC_TIME, utctime)]))
    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:
            tagtime = payload2values(payload, [
                tlv_types.UTC_TIME,
            ])[0]
            return tagtime, rssi, sstatus, rstatus
    return None, None, sstatus, rstatus
Exemplo n.º 2
0
 def _put_msg(path_list, buf, offset=None):
     tlv_list = path2tlvs(path_list[:-1])
     tlv_list.append(TagTlv(tlv_types.VERSION, path_list[-1].split('.')))
     if (offset):
         tlv_list.append(TagTlv(tlv_types.OFFSET, offset))
     tname = TagName(tlv_list)
     msg = TagPut(tname)
     msg.payload = bytearray(buf[0:msg.payload_avail()])
     return (msg, len(msg.payload))
Exemplo n.º 3
0
 def _build_tlv(val):
     try:  # integer
         return TagTlv(tlv_types.INTEGER, int(val))
     except:
         pass
     try:  # string or <type:value>
         return TagTlv(val.encode('utf-8'))
     except:
         pass
     return TagTlv(val)
Exemplo n.º 4
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)
Exemplo n.º 5
0
 def _file_bytes_msg(path_list, amount_to_get, file_offset):
     # / <node_id> / "tag" / "sd" / 0 / devname / 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)
     # zzz
     print(tname)
     return TagGet(tname)
Exemplo n.º 6
0
 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
Exemplo n.º 7
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
Exemplo n.º 8
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
Exemplo n.º 9
0
def radio_get_power(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('tx_pwr')])
    # zzz print('*** radio_get_power',name)
    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:
            # zzz print('*** radio_get_power',payload)
            tag_power = payload2values(payload, [
                tlv_types.INTEGER,
            ])[0]
            return tag_power, rssi, sstatus, rstatus
    return None, None, sstatus, rstatus
Exemplo n.º 10
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
Exemplo n.º 11
0
 def _build_tlv(val):
     #        try:                                   # version
     #            key, major, minor, build = \
     #                    re.findall('<(.{1,}):(.{1,}).(.{1,}).(.{1,})>', val)[0]
     #            # zzz print(key, value)
     #            return TagTlv(eval('tlv_types.'+key.upper()),
     #                          (int(major),int(minor),int(build)))
     #        except: pass
     #        try:                                   # node_id
     #            key, value = re.findall('<(.{1,}):(.{1,})>', val)[0]
     #            # zzz print(key, value)
     #            return TagTlv(eval('tlv_types.'+key.upper()),
     #                          value.encode('utf-8'))
     #        except: pass
     try:  # integer
         return TagTlv(tlv_types.INTEGER, int(val))
     except:
         pass
     try:  # string or <type:value>
         return TagTlv(val.encode('utf-8'))
     except:
         pass
     return TagTlv(val)
Exemplo n.º 12
0
def radio_set_power(radio,
                    tag_power,
                    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('tx_pwr'),
        ])
    req_obj = TagPut(name,
                     pl=TagTlvList([TagTlv(tlv_types.INTEGER, tag_power)]))
    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:
            return payload[0].value(), rssi, sstatus, rstatus
    return None, None, sstatus, rstatus
Exemplo n.º 13
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
Exemplo n.º 14
0
 def _file_put_msg(tname, buf, offset):
     if (offset):
         tname.append(TagTlv(tlv_types.OFFSET, offset))
     msg = TagPut(tname, pl=bytearray(buf))
     return msg
Exemplo n.º 15
0
 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
Exemplo n.º 16
0
 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
Exemplo n.º 17
0
 def _close_msg(path_list):
     im_name = TagName(path2tlvs(path_list))
     msg = TagPut(im_name, pl=[TagTlv(tlv_types.EOF)])
     return msg
Exemplo n.º 18
0
def radio_read_test(radio,
                    test_name,
                    pos,
                    num,
                    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, num),
        ])
    req_obj = TagGet(name)
    if get_cmd_args().verbosity > 2:
        mylog.debug(method=inspect.stack()[0][3],
                    lineno=sys._getframe().f_lineno,
                    name=req_obj.name)
    req_msg = req_obj.build()
    radio_send_msg(radio, req_msg, power)
    rsp_msg, rssi, status = radio_receive_msg(radio, MAX_RECV, wait)
    if rsp_msg:
        rsp_obj = TagMessage(rsp_msg)
        if get_cmd_args().verbosity > 2:
            mylog.debug(method=inspect.stack()[0][3],
                        lineno=sys._getframe().f_lineno,
                        error=rsp_obj.header.options.param.error_code,
                        data=rsp_obj.payload.__repr__())
        if rsp_obj.payload:
            error, offset, amt, block = payload2values(rsp_obj.payload, [
                tlv_types.ERROR,
                tlv_types.OFFSET,
                tlv_types.SIZE,
                tlv_types.BLOCK,
            ])
            seta = set(block)
            if (len(seta) > 1):
                mylog.error(
                    'check error',
                    method=inspect.stack()[0][3],
                    diff=seta,
                    size=amt,
                )
                amt = 0
            return error, offset, amt, block
        else:
            mylog.error('timeout',
                        method=inspect.stack()[0][3],
                        error=rsp_obj.header.options.param.error_code)
    else:
        mylog.error(
            'timeout',
            method=inspect.stack()[0][3],
        )
    return None