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
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
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
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
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
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())
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)
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
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)
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
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
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
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)
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
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
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)
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
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)
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)
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
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
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 ['.', '..']
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))
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
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'
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
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
def destroy(self, path): if get_cmd_args().verbosity > 3: self.log.debug(method=inspect.stack()[0][3], path=path) return None
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
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