Skip to content
Snippets Groups Projects
Commit 9b25f677 authored by jkerdreu's avatar jkerdreu
Browse files

Add xaal-send command line

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2815 b32b6428-25c9-4566-ad07-03861ab6144f
parent b6a2f10a
Branches
No related tags found
No related merge requests found
......@@ -32,11 +32,9 @@ setup(
'xaal-dumper = xaal.aiotools.toolbox:dumper',
'xaal-log = xaal.aiotools.toolbox:log',
'xaal-querydb = xaal.aiotools.toolbox:query_db',
'xaal-send = xaal.aiotools.toolbox:send',
'xaal-keygen = xaal.tools.keygen:main',
'xaal-test = xaal.aiotools.toolbox:test',
# 'xaal-tail = xaal.tools.tail:main',
# 'xaal-pkgrun = xaal.tools.pkgrun:main',
# 'xaal-uuidgen = xaal.tools.uuidgen:main',
# 'xaal-inspector = xaal.tools.inspector:main',
......
......@@ -170,7 +170,7 @@ class ToolboxHelper(object):
self.parser.add_option("-c" , dest="no_color",help="disable color",action="store_true", default=False)
self.parser.add_option("-a" , dest="mcast_addr",help="Multicast address",default=config.address)
self.parser.add_option("-p" , dest="mcast_port",help="Multicast port",default=config.port)
self.parser.add_option("-D" , dest="debug",help="Enable debugging",action="store_true",default=False)
self.parser.add_option("-v" , dest="debug",help="Enable debugging",action="store_true",default=False)
return self.parser
def setup_device(self):
......@@ -268,6 +268,28 @@ class ToolboxHelper(object):
return False
return dev.ready()
def dump_msg(self,msg):
color = not self.options.no_color
color_value = Colors.DEFAULT
if msg.is_request_isalive():
color_value = Colors.IS_ALIVE
elif msg.is_alive():
color_value = Colors.ALIVE
elif msg.is_attributes_change():
color_value = Colors.ATTRIBUTS
elif msg.is_request():
color_value = Colors.REQUEST
elif msg.is_reply():
color_value = Colors.REPLY
elif msg.is_notify():
color_value = Colors.NOTIFY
if color: print(color_value,end='')
msg.dump()
if color: print(style.RESET,end='')
def parse_msg(self,msg):
""" default parser used for info/walker"""
target = self.get_device(msg.source)
......@@ -307,6 +329,9 @@ class ToolboxHelper(object):
else:
self.engine.send_is_alive(self.device)
def request_action(self,addr,action,body=None):
self.engine.send_request(self.device, [addr,],action,body)
#####################################################
# db server
#####################################################
......@@ -341,8 +366,8 @@ class ToolboxHelper(object):
#####################################################
# start/stop/idle/error
#####################################################
async def wait_completed(self):
await asyncio.wait([self.exit_event.wait(),],timeout=0.3)
async def wait_completed(self,timeout=0.3):
await asyncio.wait([self.exit_event.wait(),],timeout=timeout)
def update_idle(self):
self.last_msg_time = now()
......@@ -350,7 +375,7 @@ class ToolboxHelper(object):
async def idle_detector(self):
while True:
await asyncio.sleep(0.1)
if now() - self.last_msg_time > 0.3:
if now() - self.last_msg_time > 0.4:
break
self.quit()
......@@ -407,33 +432,24 @@ def match_dev_type(msg,dev_type):
def dumper():
helper = ToolboxHelper()
helper.parser.add_option("-f",dest="filter_address",help="only show given address")
helper.parser.add_option("-t",dest="filter_type",help="only show given device type")
helper.parse()
target = helper.check_address(helper.options.filter_address)
color = not helper.options.no_color
dev_type = helper.check_devtype(helper.options.filter_type)
eng=helper.setup_engine()
async def dumper_callback(msg):
# filter by address
if target!=None:
if (msg.source != target) and (target not in msg.targets):
return
color_value = Colors.DEFAULT
if msg.is_request_isalive():
color_value = Colors.IS_ALIVE
elif msg.is_alive():
color_value = Colors.ALIVE
elif msg.is_attributes_change():
color_value = Colors.ATTRIBUTS
elif msg.is_request():
color_value = Colors.REQUEST
elif msg.is_reply():
color_value = Colors.REPLY
elif msg.is_notify():
color_value = Colors.NOTIFY
if color: print(color_value,end='')
msg.dump()
if color: print(style.RESET,end='')
# filter on dev_type
if not match_dev_type(msg, dev_type):
return
# dump message
helper.dump_msg(msg)
eng.subscribe(dumper_callback)
helper.run_forever()
......@@ -680,14 +696,42 @@ def query_db():
helper.run_forever()
def test():
helpers.setup_console_logger()
def send():
helper = ToolboxHelper()
helper.parser.add_option("-t",dest="filter_type",help="only show given device type")
(options,_)=helper.parse()
helper.parser.add_option("-d",dest="target_address",help="target device address")
helper.parser.add_option("-r",dest="request_action",help="request action")
helper.parser.add_option("-b",dest="request_body",help="request body example: 'smooth:10 speed:20'")
helper.parse()
# cmd line parsing
target = helper.check_address(helper.options.target_address)
action = helper.options.request_action
if not (target and action):
helper.error("-d and -r are mandatory")
# body parsing
tmp = helper.options.request_body
body = None
if tmp:
body = {}
for k in tmp.split(' '):
(i,j) = k.split(':')
body[i] = j
# let's go
(eng,dev) = helper.setup_basic()
dev_type = helper.check_devtype(options.filter_type)
print("Test")
helper.run_until_idle()
def action_callback(msg):
if msg.is_alive():return
if msg.source == target:
helper.dump_msg(msg)
helper.exit_event.set()
async def run():
helper.request_action(target,action,body)
# wait at least 1 msg
await helper.wait_completed(2)
helper.quit()
eng.subscribe(action_callback)
eng.on_start(run)
helper.run_forever()
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment