Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
W
White Rabbit Trigger Distribution
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
White Rabbit Trigger Distribution
Commits
e5af8581
Commit
e5af8581
authored
Sep 13, 2019
by
Dimitris Lampridis
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[sw] add functions to detect MT IDs and rework config tool
parent
49057cee
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
363 additions
and
253 deletions
+363
-253
mock-turtle
dependencies/mock-turtle
+1
-1
libwrtd.c
software/lib/libwrtd.c
+84
-28
libwrtd.h
software/lib/libwrtd.h
+5
-1
PyWrtd.py
software/lib/python/PyWrtd.py
+187
-172
wrtd-config.py
software/tools/wrtd-config.py
+86
-51
No files found.
mock-turtle
@
add8319c
Subproject commit
b07df87ad36d963beb7d7596b3dffa4221d6bd58
Subproject commit
add8319c68770cd2dac9c10842aad8487aeb1717
software/lib/libwrtd.c
View file @
e5af8581
...
@@ -20,17 +20,96 @@
...
@@ -20,17 +20,96 @@
* @{
* @{
*/
*/
wrtd_status
wrtd_get_node_count
(
uint32_t
*
count
)
{
int
i
;
uint32_t
dev_count
=
0
;
struct
trtl_dev
*
trtl
;
const
struct
trtl_config_rom
*
cfgrom
;
char
**
dev_list
=
trtl_list
();
if
(
!
dev_list
)
return
WRTD_ERROR_INTERNAL
;
for
(
i
=
0
;
dev_list
[
i
];
i
++
)
{
trtl
=
trtl_open
(
dev_list
[
i
]);
if
(
trtl
==
NULL
)
{
trtl_list_free
(
dev_list
);
return
WRTD_ERROR_RESOURCE_UNKNOWN
;
}
cfgrom
=
trtl_config_get
(
trtl
);
/* WRTD = 0x57525444 */
if
(
cfgrom
->
app_id
==
0x57525444
)
dev_count
++
;
trtl_close
(
trtl
);
}
trtl_list_free
(
dev_list
);
*
count
=
dev_count
;
return
WRTD_SUCCESS
;
}
wrtd_status
wrtd_get_node_id
(
uint32_t
index
,
uint32_t
*
node_id
)
{
int
i
;
uint32_t
dev_count
=
0
;
struct
trtl_dev
*
trtl
;
const
struct
trtl_config_rom
*
cfgrom
;
char
**
dev_list
=
trtl_list
();
if
(
!
dev_list
)
return
WRTD_ERROR_INTERNAL
;
*
node_id
=
0
;
for
(
i
=
0
;
dev_list
[
i
];
i
++
)
{
trtl
=
trtl_open
(
dev_list
[
i
]);
if
(
trtl
==
NULL
)
{
trtl_list_free
(
dev_list
);
return
WRTD_ERROR_RESOURCE_UNKNOWN
;
}
cfgrom
=
trtl_config_get
(
trtl
);
/* WRTD = 0x57525444 */
if
(
cfgrom
->
app_id
==
0x57525444
)
dev_count
++
;
if
(
dev_count
==
index
)
{
char
*
eptr
;
/* expecting string in the form of "trtl-xxxx, where
xxxx is a hex integer */
*
node_id
=
strtoul
(
dev_list
[
i
]
+
5
,
&
eptr
,
16
);
if
(
*
eptr
!=
0
)
{
trtl_list_free
(
dev_list
);
trtl_close
(
trtl
);
return
WRTD_ERROR_INTERNAL
;
}
}
trtl_close
(
trtl
);
}
trtl_list_free
(
dev_list
);
if
(
*
node_id
==
0
)
return
WRTD_ERROR_RESOURCE_UNKNOWN
;
return
WRTD_SUCCESS
;
}
/**
/**
* Initialize the WRTD Node and obtain the WRTD device token.
* Initialize the WRTD Node and obtain the WRTD device token.
*
*
* @param[in] resource_name Underlying MockTurtle device ID in
* @param[in] node_id WRTD Node ID
* the form of **MTxxx** or **trtl-xxxx**.
* @param[in] reset Reserved for future use.
* @param[in] reset Reserved for future use.
* @param[in] options_str Reserved for future use.
* @param[in] options_str Reserved for future use.
* @param[out] wrtd Pointer to WRTD device token.
* @param[out] wrtd Pointer to WRTD device token.
* @return #wrtd_status
* @return #wrtd_status
*/
*/
wrtd_status
wrtd_init
(
const
char
*
resource_name
,
wrtd_status
wrtd_init
(
uint32_t
node_id
,
bool
reset
,
bool
reset
,
const
char
*
options_str
,
const
char
*
options_str
,
wrtd_dev
**
wrtd
)
wrtd_dev
**
wrtd
)
...
@@ -41,35 +120,12 @@ wrtd_status wrtd_init(const char *resource_name,
...
@@ -41,35 +120,12 @@ wrtd_status wrtd_init(const char *resource_name,
struct
wrtd_config_msg
msg
;
struct
wrtd_config_msg
msg
;
wrtd_status
status
;
wrtd_status
status
;
static
int
initialized
;
/* In case of error... */
/* In case of error... */
*
wrtd
=
NULL
;
*
wrtd
=
NULL
;
/* Initialize (only once).*/
trtl
=
trtl_open_by_id
(
node_id
);
if
(
!
initialized
)
{
initialized
=
1
;
trtl_init
();
}
/* Resource is MTxxx where xxx is the mock-turtle device id. */
if
(
trtl
==
NULL
)
if
(
resource_name
[
0
]
==
'M'
&&
resource_name
[
1
]
==
'T'
)
{
unsigned
long
dev_id
;
char
*
eptr
;
dev_id
=
strtoul
(
resource_name
+
2
,
&
eptr
,
0
);
if
(
*
eptr
!=
0
)
{
/* Invalid characters. */
return
WRTD_ERROR_RESOURCE_UNKNOWN
;
}
trtl
=
trtl_open_by_id
(
dev_id
);
}
else
if
(
strncmp
(
resource_name
,
"trtl-"
,
5
)
==
0
)
{
trtl
=
trtl_open
(
resource_name
);
}
else
{
return
WRTD_ERROR_RESOURCE_UNKNOWN
;
}
if
(
trtl
==
NULL
)
return
WRTD_ERROR_RESOURCE_UNKNOWN
;
return
WRTD_ERROR_RESOURCE_UNKNOWN
;
wrtd_dev
*
res
;
wrtd_dev
*
res
;
...
...
software/lib/libwrtd.h
View file @
e5af8581
...
@@ -242,7 +242,11 @@ typedef enum wrtd_attr {
...
@@ -242,7 +242,11 @@ typedef enum wrtd_attr {
/* Initialisation */
/* Initialisation */
wrtd_status
wrtd_init
(
const
char
*
resource_name
,
wrtd_status
wrtd_get_node_count
(
uint32_t
*
count
);
wrtd_status
wrtd_get_node_id
(
uint32_t
index
,
uint32_t
*
node_id
);
wrtd_status
wrtd_init
(
uint32_t
node_id
,
bool
reset
,
bool
reset
,
const
char
*
options_str
,
const
char
*
options_str
,
wrtd_dev
**
wrtd
);
wrtd_dev
**
wrtd
);
...
...
software/lib/python/PyWrtd.py
View file @
e5af8581
...
@@ -45,11 +45,38 @@ def encode_arguments(func, *args, **kwargs):
...
@@ -45,11 +45,38 @@ def encode_arguments(func, *args, **kwargs):
args
=
tuple
(
encoded
)
args
=
tuple
(
encoded
)
return
func
(
*
args
,
**
kwargs
)
return
func
(
*
args
,
**
kwargs
)
def
errcheck
(
ret
,
func
,
args
):
"""Generic error checker for WRTD functions (with a dev token as first argument)"""
if
ret
<
PyWrtd
.
WRTD_SUCCESS
:
wrtd_p
=
args
[
0
]
if
wrtd_p
:
buf_size
=
PyWrtd
.
wrtd_lib
.
wrtd_get_error
(
wrtd_p
,
None
,
0
,
None
)
error_description
=
create_string_buffer
(
buf_size
)
PyWrtd
.
wrtd_lib
.
wrtd_get_error
(
wrtd_p
,
None
,
buf_size
,
error_description
)
msg
=
error_description
.
value
.
decode
(
'ascii'
)
else
:
error_message
=
create_string_buffer
(
256
)
PyWrtd
.
wrtd_lib
.
wrtd_error_message
(
None
,
ret
,
error_message
)
msg
=
error_message
.
value
.
decode
(
'ascii'
)
raise
OSError
(
ret
,
msg
)
else
:
return
ret
def
errcheck_static
(
ret
,
func
,
args
):
"""Generic error checker for static WRTD functions (without a dev token)"""
if
ret
<
PyWrtd
.
WRTD_SUCCESS
:
error_message
=
create_string_buffer
(
256
)
PyWrtd
.
wrtd_lib
.
wrtd_error_message
(
None
,
ret
,
error_message
)
msg
=
error_message
.
value
.
decode
(
'ascii'
)
raise
OSError
(
ret
,
msg
)
else
:
return
ret
class
PyWrtd
():
class
PyWrtd
():
"""Top-level Python wrapper class for WRTD library.
"""Top-level Python wrapper class for WRTD library.
:param resource_name: Underlying MockTurtle device ID in the form of ``MTxxx`` or
\
:param node_id: WRTD Node ID. See also :ref:`node_id`.
``trtl-xxxx``. See also :ref:`node_id`.
"""
"""
...
@@ -127,182 +154,181 @@ class PyWrtd():
...
@@ -127,182 +154,181 @@ class PyWrtd():
WRTD_LOG_ENTRY_SIZE
=
120
WRTD_LOG_ENTRY_SIZE
=
120
def
__init__
(
self
,
resource_name
):
wrtd_lib
=
CDLL
(
"libwrtd.so"
)
self
.
wrtd_lib
=
CDLL
(
"libwrtd.so"
)
wrtd_lib
.
wrtd_get_node_count
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_init
.
restype
=
c_int
wrtd_lib
.
wrtd_get_node_count
.
errcheck
=
errcheck_static
self
.
wrtd_lib
.
wrtd_init
.
errcheck
=
self
.
__errcheck
wrtd_lib
.
wrtd_get_node_count
.
argtypes
=
[
POINTER
(
c_uint
)]
self
.
wrtd_lib
.
wrtd_init
.
argtypes
=
[
c_char_p
,
c_bool
,
c_char_p
,
POINTER
(
POINTER
(
wrtd_dev
))]
wrtd_lib
.
wrtd_get_node_id
.
restype
=
c_int
wrtd_lib
.
wrtd_get_node_id
.
errcheck
=
errcheck_static
self
.
wrtd_lib
.
wrtd_close
.
restype
=
c_int
wrtd_lib
.
wrtd_get_node_id
.
argtypes
=
[
c_uint
,
POINTER
(
c_uint
)]
self
.
wrtd_lib
.
wrtd_close
.
errcheck
=
self
.
__errcheck
self
.
wrtd_lib
.
wrtd_close
.
argtypes
=
[
POINTER
(
wrtd_dev
)]
wrtd_lib
.
wrtd_init
.
restype
=
c_int
wrtd_lib
.
wrtd_init
.
errcheck
=
errcheck_static
self
.
wrtd_lib
.
wrtd_reset
.
restype
=
c_int
wrtd_lib
.
wrtd_init
.
argtypes
=
[
c_uint
,
c_bool
,
c_char_p
,
self
.
wrtd_lib
.
wrtd_reset
.
errcheck
=
self
.
__errcheck
POINTER
(
POINTER
(
wrtd_dev
))]
self
.
wrtd_lib
.
wrtd_reset
.
argtypes
=
[
POINTER
(
wrtd_dev
)]
wrtd_lib
.
wrtd_close
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_get_error
.
restype
=
c_int
wrtd_lib
.
wrtd_close
.
errcheck
=
errcheck
# No errcheck on the get_error function, it is used internally
wrtd_lib
.
wrtd_close
.
argtypes
=
[
POINTER
(
wrtd_dev
)]
# by self._errcheck and might lead to recursive errors
self
.
wrtd_lib
.
wrtd_get_error
.
argtypes
=
[
POINTER
(
wrtd_dev
),
wrtd_lib
.
wrtd_reset
.
restype
=
c_int
POINTER
(
c_int
),
wrtd_lib
.
wrtd_reset
.
errcheck
=
errcheck
c_int32
,
c_char_p
]
wrtd_lib
.
wrtd_reset
.
argtypes
=
[
POINTER
(
wrtd_dev
)]
self
.
wrtd_lib
.
wrtd_error_message
.
restype
=
c_int
wrtd_lib
.
wrtd_get_error
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_error_message
.
errcheck
=
self
.
__errcheck
# No errcheck on the get_error function, it is used internally
self
.
wrtd_lib
.
wrtd_error_message
.
argtypes
=
[
POINTER
(
wrtd_dev
),
# by errcheck and might lead to recursive errors
c_uint
,
c_char_p
]
wrtd_lib
.
wrtd_get_error
.
argtypes
=
[
POINTER
(
wrtd_dev
),
POINTER
(
c_int
),
self
.
wrtd_lib
.
wrtd_set_attr_bool
.
restype
=
c_int
c_int32
,
c_char_p
]
self
.
wrtd_lib
.
wrtd_set_attr_bool
.
errcheck
=
self
.
__errcheck
self
.
wrtd_lib
.
wrtd_set_attr_bool
.
argtypes
=
[
POINTER
(
wrtd_dev
),
wrtd_lib
.
wrtd_error_message
.
restype
=
c_int
c_char_p
,
# No errcheck on the error_message function, it is used internally
c_uint
,
c_bool
]
# by errcheck and might lead to recursive errors
wrtd_lib
.
wrtd_error_message
.
argtypes
=
[
POINTER
(
wrtd_dev
),
self
.
wrtd_lib
.
wrtd_get_attr_bool
.
restype
=
c_int
c_uint
,
c_char_p
]
self
.
wrtd_lib
.
wrtd_get_attr_bool
.
errcheck
=
self
.
__errcheck
self
.
wrtd_lib
.
wrtd_get_attr_bool
.
argtypes
=
[
POINTER
(
wrtd_dev
),
wrtd_lib
.
wrtd_set_attr_bool
.
restype
=
c_int
c_char_p
,
wrtd_lib
.
wrtd_set_attr_bool
.
errcheck
=
errcheck
c_uint
,
POINTER
(
c_bool
)]
wrtd_lib
.
wrtd_set_attr_bool
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
,
self
.
wrtd_lib
.
wrtd_set_attr_int32
.
restype
=
c_int
c_uint
,
c_bool
]
self
.
wrtd_lib
.
wrtd_set_attr_int32
.
errcheck
=
self
.
__errcheck
self
.
wrtd_lib
.
wrtd_set_attr_int32
.
argtypes
=
[
POINTER
(
wrtd_dev
),
wrtd_lib
.
wrtd_get_attr_bool
.
restype
=
c_int
c_char_p
,
wrtd_lib
.
wrtd_get_attr_bool
.
errcheck
=
errcheck
c_uint
,
c_int32
]
wrtd_lib
.
wrtd_get_attr_bool
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
,
self
.
wrtd_lib
.
wrtd_get_attr_int32
.
restype
=
c_int
c_uint
,
POINTER
(
c_bool
)]
self
.
wrtd_lib
.
wrtd_get_attr_int32
.
errcheck
=
self
.
__errcheck
self
.
wrtd_lib
.
wrtd_get_attr_int32
.
argtypes
=
[
POINTER
(
wrtd_dev
),
wrtd_lib
.
wrtd_set_attr_int32
.
restype
=
c_int
c_char_p
,
wrtd_lib
.
wrtd_set_attr_int32
.
errcheck
=
errcheck
c_uint
,
POINTER
(
c_int32
)]
wrtd_lib
.
wrtd_set_attr_int32
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
,
self
.
wrtd_lib
.
wrtd_set_attr_string
.
restype
=
c_int
c_uint
,
c_int32
]
self
.
wrtd_lib
.
wrtd_set_attr_string
.
errcheck
=
self
.
__errcheck
self
.
wrtd_lib
.
wrtd_set_attr_string
.
argtypes
=
[
POINTER
(
wrtd_dev
),
wrtd_lib
.
wrtd_get_attr_int32
.
restype
=
c_int
c_char_p
,
wrtd_lib
.
wrtd_get_attr_int32
.
errcheck
=
errcheck
c_uint
,
c_char_p
]
wrtd_lib
.
wrtd_get_attr_int32
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
,
self
.
wrtd_lib
.
wrtd_get_attr_string
.
restype
=
c_int
c_uint
,
POINTER
(
c_int32
)]
self
.
wrtd_lib
.
wrtd_get_attr_string
.
errcheck
=
self
.
__errcheck
self
.
wrtd_lib
.
wrtd_get_attr_string
.
argtypes
=
[
POINTER
(
wrtd_dev
),
wrtd_lib
.
wrtd_set_attr_string
.
restype
=
c_int
c_char_p
,
c_uint
,
wrtd_lib
.
wrtd_set_attr_string
.
errcheck
=
errcheck
wrtd_lib
.
wrtd_set_attr_string
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
,
c_uint
,
c_char_p
]
wrtd_lib
.
wrtd_get_attr_string
.
restype
=
c_int
wrtd_lib
.
wrtd_get_attr_string
.
errcheck
=
errcheck
wrtd_lib
.
wrtd_get_attr_string
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
,
c_uint
,
c_int32
,
c_char_p
]
wrtd_lib
.
wrtd_set_attr_tstamp
.
restype
=
c_int
wrtd_lib
.
wrtd_set_attr_tstamp
.
errcheck
=
errcheck
wrtd_lib
.
wrtd_set_attr_tstamp
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
,
c_uint
,
POINTER
(
wrtd_tstamp
)]
wrtd_lib
.
wrtd_get_attr_tstamp
.
restype
=
c_int
wrtd_lib
.
wrtd_get_attr_tstamp
.
errcheck
=
errcheck
wrtd_lib
.
wrtd_get_attr_tstamp
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
,
c_uint
,
POINTER
(
wrtd_tstamp
)]
wrtd_lib
.
wrtd_clear_event_log_entries
.
restype
=
c_int
wrtd_lib
.
wrtd_clear_event_log_entries
.
errcheck
=
errcheck
wrtd_lib
.
wrtd_clear_event_log_entries
.
argtypes
=
[
POINTER
(
wrtd_dev
)]
wrtd_lib
.
wrtd_get_next_event_log_entry
.
restype
=
c_int
wrtd_lib
.
wrtd_get_next_event_log_entry
.
errcheck
=
errcheck
wrtd_lib
.
wrtd_get_next_event_log_entry
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_int32
,
c_char_p
]
c_int32
,
c_char_p
]
self
.
wrtd_lib
.
wrtd_set_attr_tstamp
.
restype
=
c_int
wrtd_lib
.
wrtd_add_alarm
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_set_attr_tstamp
.
errcheck
=
self
.
__errcheck
wrtd_lib
.
wrtd_add_alarm
.
errcheck
=
errcheck
self
.
wrtd_lib
.
wrtd_set_attr_tstamp
.
argtypes
=
[
POINTER
(
wrtd_dev
),
wrtd_lib
.
wrtd_add_alarm
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
]
c_char_p
,
c_uint
,
POINTER
(
wrtd_tstamp
)]
wrtd_lib
.
wrtd_disable_all_alarms
.
restype
=
c_int
wrtd_lib
.
wrtd_disable_all_alarms
.
errcheck
=
errcheck
self
.
wrtd_lib
.
wrtd_get_attr_tstamp
.
restype
=
c_int
wrtd_lib
.
wrtd_disable_all_alarms
.
argtypes
=
[
POINTER
(
wrtd_dev
)]
self
.
wrtd_lib
.
wrtd_get_attr_tstamp
.
errcheck
=
self
.
__errcheck
self
.
wrtd_lib
.
wrtd_get_attr_tstamp
.
argtypes
=
[
POINTER
(
wrtd_dev
),
wrtd_lib
.
wrtd_remove_alarm
.
restype
=
c_int
c_char_p
,
c_uint
,
wrtd_lib
.
wrtd_remove_alarm
.
errcheck
=
errcheck
POINTER
(
wrtd_tstamp
)]
wrtd_lib
.
wrtd_remove_alarm
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
]
self
.
wrtd_lib
.
wrtd_clear_event_log_entries
.
restype
=
c_int
wrtd_lib
.
wrtd_remove_all_alarms
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_clear_event_log_entries
.
errcheck
=
self
.
__errcheck
wrtd_lib
.
wrtd_remove_all_alarms
.
errcheck
=
errcheck
self
.
wrtd_lib
.
wrtd_clear_event_log_entries
.
argtypes
=
[
POINTER
(
wrtd_dev
)]
wrtd_lib
.
wrtd_remove_all_alarms
.
argtypes
=
[
POINTER
(
wrtd_dev
)]
self
.
wrtd_lib
.
wrtd_get_next_event_log_entry
.
restype
=
c_int
wrtd_lib
.
wrtd_get_alarm_name
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_get_next_event_log_entry
.
errcheck
=
self
.
__errcheck
wrtd_lib
.
wrtd_get_alarm_name
.
errcheck
=
errcheck
self
.
wrtd_lib
.
wrtd_get_next_event_log_entry
.
argtypes
=
[
POINTER
(
wrtd_dev
),
wrtd_lib
.
wrtd_get_alarm_name
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_int32
,
c_int32
,
c_char_p
]
c_int32
,
c_char_p
]
self
.
wrtd_lib
.
wrtd_add_alarm
.
restype
=
c_int
wrtd_lib
.
wrtd_add_rule
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_add_alarm
.
errcheck
=
self
.
__errcheck
wrtd_lib
.
wrtd_add_rule
.
errcheck
=
errcheck
self
.
wrtd_lib
.
wrtd_add_alarm
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
]
wrtd_lib
.
wrtd_add_rule
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
]
self
.
wrtd_lib
.
wrtd_disable_all_alarms
.
restype
=
c_int
wrtd_lib
.
wrtd_disable_all_rules
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_disable_all_alarms
.
errcheck
=
self
.
__errcheck
wrtd_lib
.
wrtd_disable_all_rules
.
errcheck
=
errcheck
self
.
wrtd_lib
.
wrtd_disable_all_alarms
.
argtypes
=
[
POINTER
(
wrtd_dev
)]
wrtd_lib
.
wrtd_disable_all_rules
.
argtypes
=
[
POINTER
(
wrtd_dev
)]
self
.
wrtd_lib
.
wrtd_remove_alarm
.
restype
=
c_int
wrtd_lib
.
wrtd_remove_rule
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_remove_alarm
.
errcheck
=
self
.
__errcheck
wrtd_lib
.
wrtd_remove_rule
.
errcheck
=
errcheck
self
.
wrtd_lib
.
wrtd_remove_alarm
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
]
wrtd_lib
.
wrtd_remove_rule
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
]
self
.
wrtd_lib
.
wrtd_remove_all_alarms
.
restype
=
c_int
wrtd_lib
.
wrtd_remove_all_rules
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_remove_all_alarms
.
errcheck
=
self
.
__errcheck
wrtd_lib
.
wrtd_remove_all_rules
.
errcheck
=
errcheck
self
.
wrtd_lib
.
wrtd_remove_all_alarms
.
argtypes
=
[
POINTER
(
wrtd_dev
)]
wrtd_lib
.
wrtd_remove_all_rules
.
argtypes
=
[
POINTER
(
wrtd_dev
)]
self
.
wrtd_lib
.
wrtd_get_alarm_name
.
restype
=
c_int
wrtd_lib
.
wrtd_get_rule_name
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_get_alarm_name
.
errcheck
=
self
.
__errcheck
wrtd_lib
.
wrtd_get_rule_name
.
errcheck
=
errcheck
self
.
wrtd_lib
.
wrtd_get_alarm_name
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_int32
,
wrtd_lib
.
wrtd_get_rule_name
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_int32
,
c_int32
,
c_char_p
]
c_int32
,
c_char_p
]
self
.
wrtd_lib
.
wrtd_add_rule
.
restype
=
c_int
wrtd_lib
.
wrtd_reset_rule_stats
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_add_rule
.
errcheck
=
self
.
__errcheck
wrtd_lib
.
wrtd_reset_rule_stats
.
errcheck
=
errcheck
self
.
wrtd_lib
.
wrtd_add_rule
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
]
wrtd_lib
.
wrtd_reset_rule_stats
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
]
self
.
wrtd_lib
.
wrtd_disable_all_rules
.
restype
=
c_int
wrtd_lib
.
wrtd_get_fw_name
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_disable_all_rules
.
errcheck
=
self
.
__errcheck
wrtd_lib
.
wrtd_get_fw_name
.
errcheck
=
errcheck
self
.
wrtd_lib
.
wrtd_disable_all_rules
.
argtypes
=
[
POINTER
(
wrtd_dev
)]
wrtd_lib
.
wrtd_get_fw_name
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_int32
,
c_int32
,
c_char_p
]
self
.
wrtd_lib
.
wrtd_remove_rule
.
restype
=
c_int
def
__init__
(
self
,
node_id
):
self
.
wrtd_lib
.
wrtd_remove_rule
.
errcheck
=
self
.
__errcheck
self
.
wrtd_lib
.
wrtd_remove_rule
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
]
self
.
wrtd_lib
.
wrtd_remove_all_rules
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_remove_all_rules
.
errcheck
=
self
.
__errcheck
self
.
wrtd_lib
.
wrtd_remove_all_rules
.
argtypes
=
[
POINTER
(
wrtd_dev
)]
self
.
wrtd_lib
.
wrtd_get_rule_name
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_get_rule_name
.
errcheck
=
self
.
__errcheck
self
.
wrtd_lib
.
wrtd_get_rule_name
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_int32
,
c_int32
,
c_char_p
]
self
.
wrtd_lib
.
wrtd_reset_rule_stats
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_reset_rule_stats
.
errcheck
=
self
.
__errcheck
self
.
wrtd_lib
.
wrtd_reset_rule_stats
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_char_p
]
self
.
wrtd_lib
.
wrtd_get_fw_name
.
restype
=
c_int
self
.
wrtd_lib
.
wrtd_get_fw_name
.
errcheck
=
self
.
__errcheck
self
.
wrtd_lib
.
wrtd_get_fw_name
.
argtypes
=
[
POINTER
(
wrtd_dev
),
c_int32
,
c_int32
,
c_char_p
]
self
.
resource_name
=
resource_name
.
encode
(
'utf-8'
)
self
.
wrtd_p
=
POINTER
(
wrtd_dev
)()
self
.
wrtd_p
=
POINTER
(
wrtd_dev
)()
ret
=
self
.
wrtd_lib
.
wrtd_init
(
self
.
resource_name
,
0
,
None
,
byref
(
self
.
wrtd_p
))
ret
=
self
.
wrtd_lib
.
wrtd_init
(
node_id
,
0
,
None
,
byref
(
self
.
wrtd_p
))
def
__del__
(
self
):
def
__del__
(
self
):
if
self
.
wrtd_p
:
if
self
.
wrtd_p
:
self
.
wrtd_lib
.
wrtd_close
(
self
.
wrtd_p
)
self
.
wrtd_lib
.
wrtd_close
(
self
.
wrtd_p
)
self
.
wrtd_p
=
0
self
.
wrtd_p
=
0
def
reset
(
self
):
@
staticmethod
def
get_node_count
():
"""
"""
Corresponds to C library :cpp:func:`wrtd_
rese
t`.
Corresponds to C library :cpp:func:`wrtd_
get_node_coun
t`.
"""
"""
self
.
wrtd_lib
.
wrtd_reset
(
self
.
wrtd_p
)
count
=
c_uint
();
PyWrtd
.
wrtd_lib
.
wrtd_get_node_count
(
byref
(
count
))
return
count
.
value
;
def
get_error
(
self
):
@
staticmethod
def
get_node_id
(
index
):
"""
"""
Corresponds to C library :cpp:func:`wrtd_get_error`.
Corresponds to C library :cpp:func:`wrtd_get_node_id`.
:return: a tuple with the :ref:`Error Code <api_error_codes>` and the error message.
"""
"""
buf_size
=
self
.
wrtd_lib
.
wrtd_get_error
(
self
.
wrtd_p
,
None
,
0
,
None
)
node_id
=
c_uint
();
error_description
=
create_string_buffer
(
buf_size
)
PyWrtd
.
wrtd_lib
.
wrtd_get_node_id
(
index
,
byref
(
node_id
))
error_c
=
c_int
()
return
node_id
.
value
;
self
.
wrtd_lib
.
wrtd_get_error
(
self
.
wrtd_p
,
byref
(
error_c
),
buf_size
,
error_description
)
return
error_c
.
value
,
error_description
.
value
.
decode
(
'ascii'
)
def
error_message
(
self
,
err_code
):
def
reset
(
self
):
"""
"""
Corresponds to C library :cpp:func:`wrtd_error_message`.
Corresponds to C library :cpp:func:`wrtd_reset`.
:param err_code: error code to convert
:return: error message (string)
"""
"""
error_message
=
create_string_buffer
(
256
)
self
.
wrtd_lib
.
wrtd_reset
(
self
.
wrtd_p
)
self
.
wrtd_lib
.
wrtd_error_message
(
self
.
wrtd_p
,
err_code
,
error_message
)
return
error_message
.
value
.
decode
(
'ascii'
)
@
encode_arguments
@
encode_arguments
def
set_attr_bool
(
self
,
rep_cap_id
,
id
,
value
):
def
set_attr_bool
(
self
,
rep_cap_id
,
id
,
value
):
...
@@ -553,14 +579,3 @@ class PyWrtd():
...
@@ -553,14 +579,3 @@ class PyWrtd():
self
.
wrtd_lib
.
wrtd_get_fw_name
(
self
.
wrtd_p
,
index
,
self
.
wrtd_lib
.
wrtd_get_fw_name
(
self
.
wrtd_p
,
index
,
buf_size
,
name
)
buf_size
,
name
)
return
name
.
value
.
decode
(
'ascii'
)
return
name
.
value
.
decode
(
'ascii'
)
def
__errcheck
(
self
,
ret
,
func
,
args
):
"""Generic error checker for WRTD functions"""
if
ret
<
self
.
WRTD_SUCCESS
:
if
self
.
wrtd_p
:
code
,
msg
=
self
.
get_error
()
else
:
code
,
msg
=
ret
,
self
.
error_message
(
ret
)
raise
OSError
(
ret
,
'Error {0}: {1}'
.
format
(
hex
(
code
%
(
1
<<
32
)),
msg
))
else
:
return
ret
software/tools/wrtd-config.py
View file @
e5af8581
...
@@ -36,6 +36,16 @@ def __tstamp_to_str(tstamp):
...
@@ -36,6 +36,16 @@ def __tstamp_to_str(tstamp):
int
(
ret
[
'ns'
]
/
1e1
)
%
1000
,
int
(
ret
[
'ns'
]
/
1e1
)
%
1000
,
ret
[
'frac'
]
>>
(
32
-
9
))
ret
[
'frac'
]
>>
(
32
-
9
))
def
cmd_list_nodes
(
args
):
for
i
in
range
((
PyWrtd
.
get_node_count
())):
node_id
=
PyWrtd
.
get_node_id
(
i
+
1
)
print
(
'-> WRTD Node detected with ID: {0}'
.
format
(
node_id
))
if
args
.
verbose
:
wrtd
=
PyWrtd
(
node_id
)
args
.
verbose
=
False
cmd_sys_info
(
wrtd
,
args
)
args
.
verbose
=
True
def
cmd_sys_info
(
wrtd
,
args
):
def
cmd_sys_info
(
wrtd
,
args
):
print
(
''
)
print
(
''
)
cmd_sys_time
(
wrtd
,
args
)
cmd_sys_time
(
wrtd
,
args
)
...
@@ -279,47 +289,70 @@ def time_interval_help():
...
@@ -279,47 +289,70 @@ def time_interval_help():
def
main
():
def
main
():
parser
=
argparse
.
ArgumentParser
(
description
=
'WRTD node configuration tool'
)
parser
=
argparse
.
ArgumentParser
(
description
=
'WRTD Node configuration tool'
)
parser
.
add_argument
(
'-D'
,
'--dev-id'
,
dest
=
'dev'
,
required
=
True
,
type
=
lambda
x
:
int
(
x
,
0
),
help
=
'MockTurtle device ID (integer) to open'
)
devid_parse
=
argparse
.
ArgumentParser
(
add_help
=
False
)
devid_parse
.
add_argument
(
'devid'
,
type
=
lambda
x
:
int
(
x
,
0
),
metavar
=
'<NODE_ID>'
,
help
=
'The ID of the WRTD Node (int, can be hex with "0x" prefix)'
)
verbose_parse
=
argparse
.
ArgumentParser
(
add_help
=
False
)
verbose_parse
.
add_argument
(
'-v'
,
'--verbose'
,
action
=
'store_true'
,
help
=
'Show more details'
)
rname_parse
=
argparse
.
ArgumentParser
(
add_help
=
False
)
rname_parse
.
add_argument
(
'name'
,
metavar
=
'<RULE_ID>'
,
help
=
'The ID of the Rule (string up to 15 characters)'
)
aname_parse
=
argparse
.
ArgumentParser
(
add_help
=
False
)
aname_parse
.
add_argument
(
'name'
,
metavar
=
'<ALARM_ID>'
,
help
=
'The ID of the Alarm (string up to 15 characters)'
)
subparsers
=
parser
.
add_subparsers
(
title
=
'Available commands'
,
subparsers
=
parser
.
add_subparsers
(
title
=
'Available commands'
,
dest
=
'command'
,
metavar
=
'<command>'
,
dest
=
'command'
,
metavar
=
'<command>'
,
help
=
'(Use "<command> -h" to get more details)'
)
help
=
'(Use "<command> -h" to get more details)'
)
subparsers
.
required
=
True
;
subparsers
.
required
=
True
;
# list-nodes
cmd_parser
=
subparsers
.
add_parser
(
'list-nodes'
,
help
=
'List the IDs of all detected WRTD Nodes'
,
parents
=
[
verbose_parse
])
cmd_parser
.
set_defaults
(
func
=
cmd_list_nodes
,
devid
=
None
)
# sys-info
# sys-info
cmd_parser
=
subparsers
.
add_parser
(
'sys-info'
,
help
=
'Show system information'
)
cmd_parser
=
subparsers
.
add_parser
(
'sys-info'
,
help
=
'Show system information'
,
cmd_parser
.
add_argument
(
'-v'
,
'--verbose'
,
action
=
'store_true'
,
parents
=
[
devid_parse
,
verbose_parse
])
help
=
'Show more details'
)
cmd_parser
.
set_defaults
(
func
=
cmd_sys_info
)
cmd_parser
.
set_defaults
(
func
=
cmd_sys_info
)
# sys-time
# sys-time
cmd_parser
=
subparsers
.
add_parser
(
'sys-time'
,
help
=
'Show current system time'
)
cmd_parser
=
subparsers
.
add_parser
(
'sys-time'
,
help
=
'Show current system time'
,
parents
=
[
devid_parse
])
cmd_parser
.
set_defaults
(
func
=
cmd_sys_time
)
cmd_parser
.
set_defaults
(
func
=
cmd_sys_time
)
# set-log
# set-log
cmd_parser
=
subparsers
.
add_parser
(
'set-log'
,
help
=
'Enable/Disable logging'
)
cmd_parser
=
subparsers
.
add_parser
(
'set-log'
,
help
=
'Enable/Disable logging'
,
parents
=
[
devid_parse
])
cmd_parser
.
add_argument
(
'log'
,
choices
=
[
'on'
,
'off'
],
help
=
'Enable/Disable logging'
)
cmd_parser
.
add_argument
(
'log'
,
choices
=
[
'on'
,
'off'
],
help
=
'Enable/Disable logging'
)
cmd_parser
.
set_defaults
(
func
=
cmd_set_log
)
cmd_parser
.
set_defaults
(
func
=
cmd_set_log
)
# clear-log
# clear-log
cmd_parser
=
subparsers
.
add_parser
(
'clear-log'
,
help
=
'Clear pending log entries'
)
cmd_parser
=
subparsers
.
add_parser
(
'clear-log'
,
help
=
'Clear pending log entries'
,
parents
=
[
devid_parse
])
cmd_parser
.
set_defaults
(
func
=
cmd_clear_log
)
cmd_parser
.
set_defaults
(
func
=
cmd_clear_log
)
# list-rules
# list-rules
cmd_parser
=
subparsers
.
add_parser
(
'list-rules'
,
help
=
'List all defined Rules'
)
cmd_parser
=
subparsers
.
add_parser
(
'list-rules'
,
help
=
'List all defined Rules'
,
cmd_parser
.
add_argument
(
'-v'
,
'--verbose'
,
action
=
'store_true'
,
parents
=
[
devid_parse
,
verbose_parse
])
help
=
'Show details about each Rule'
)
cmd_parser
.
set_defaults
(
func
=
cmd_list_rules
)
cmd_parser
.
set_defaults
(
func
=
cmd_list_rules
)
# add-rule
# add-rule
cmd_parser
=
subparsers
.
add_parser
(
'add-rule'
,
help
=
'Define a new Rule'
)
cmd_parser
=
subparsers
.
add_parser
(
'add-rule'
,
help
=
'Define a new Rule'
,
cmd_parser
.
add_argument
(
'name'
,
help
=
'The name of the new Rule'
)
parents
=
[
devid_parse
,
rname_parse
]
)
cmd_parser
.
set_defaults
(
func
=
cmd_add_rule
)
cmd_parser
.
set_defaults
(
func
=
cmd_add_rule
)
# set-rule
# set-rule
cmd_parser
=
subparsers
.
add_parser
(
'set-rule'
,
help
=
'Configure a Rule'
)
cmd_parser
=
subparsers
.
add_parser
(
'set-rule'
,
help
=
'Configure a Rule'
,
cmd_parser
.
add_argument
(
'name'
,
help
=
'The name of the Rule to configure'
)
parents
=
[
devid_parse
,
rname_parse
]
)
cmd_parser
.
add_argument
(
'-d'
,
'--delay'
,
type
=
time_interval
,
default
=
0
,
cmd_parser
.
add_argument
(
'-d'
,
'--delay'
,
type
=
time_interval
,
default
=
0
,
help
=
'Set the delay for this Rule. '
+
time_interval_help
())
help
=
'Set the delay for this Rule. '
+
time_interval_help
())
cmd_parser
.
add_argument
(
'source'
,
help
=
'The source Event ID for this Rule.'
)
cmd_parser
.
add_argument
(
'source'
,
help
=
'The source Event ID for this Rule.'
)
...
@@ -327,53 +360,53 @@ def main():
...
@@ -327,53 +360,53 @@ def main():
cmd_parser
.
set_defaults
(
func
=
cmd_set_rule
)
cmd_parser
.
set_defaults
(
func
=
cmd_set_rule
)
# remove-rule
# remove-rule
cmd_parser
=
subparsers
.
add_parser
(
'remove-rule'
,
help
=
'Delete a Rule'
)
cmd_parser
=
subparsers
.
add_parser
(
'remove-rule'
,
help
=
'Delete a Rule'
,
cmd_parser
.
add_argument
(
'name'
,
help
=
'The name of the Rule to delete'
)
parents
=
[
devid_parse
,
rname_parse
]
)
cmd_parser
.
set_defaults
(
func
=
cmd_remove_rule
)
cmd_parser
.
set_defaults
(
func
=
cmd_remove_rule
)
# remove-all-rules
# remove-all-rules
cmd_parser
=
subparsers
.
add_parser
(
'remove-all-rules'
,
help
=
'Delete all Rules'
)
cmd_parser
=
subparsers
.
add_parser
(
'remove-all-rules'
,
help
=
'Delete all Rules'
,
parents
=
[
devid_parse
])
cmd_parser
.
set_defaults
(
func
=
cmd_remove_all_rules
)
cmd_parser
.
set_defaults
(
func
=
cmd_remove_all_rules
)
# enable-rule
# enable-rule
cmd_parser
=
subparsers
.
add_parser
(
'enable-rule'
,
help
=
'Enable a Rule'
)
cmd_parser
=
subparsers
.
add_parser
(
'enable-rule'
,
help
=
'Enable a Rule'
,
cmd_parser
.
add_argument
(
'name'
,
help
=
'The name of the Rule to enable'
)
parents
=
[
devid_parse
,
rname_parse
]
)
cmd_parser
.
set_defaults
(
func
=
cmd_enable_rule
)
cmd_parser
.
set_defaults
(
func
=
cmd_enable_rule
)
# disable-rule
# disable-rule
cmd_parser
=
subparsers
.
add_parser
(
'disable-rule'
,
help
=
'Disable a Rule'
)
cmd_parser
=
subparsers
.
add_parser
(
'disable-rule'
,
help
=
'Disable a Rule'
,
cmd_parser
.
add_argument
(
'name'
,
help
=
'The name of the Rule to disable'
)
parents
=
[
devid_parse
,
rname_parse
]
)
cmd_parser
.
set_defaults
(
func
=
cmd_disable_rule
)
cmd_parser
.
set_defaults
(
func
=
cmd_disable_rule
)
# disable-all-rules
# disable-all-rules
cmd_parser
=
subparsers
.
add_parser
(
'disable-all-rules'
,
help
=
'Disable all Rules'
)
cmd_parser
=
subparsers
.
add_parser
(
'disable-all-rules'
,
help
=
'Disable all Rules'
,
parents
=
[
devid_parse
])
cmd_parser
.
set_defaults
(
func
=
cmd_disable_all_rules
)
cmd_parser
.
set_defaults
(
func
=
cmd_disable_all_rules
)
# rule-info
# rule-info
cmd_parser
=
subparsers
.
add_parser
(
'rule-info'
,
help
=
'Display information about a Rule'
)
cmd_parser
=
subparsers
.
add_parser
(
'rule-info'
,
help
=
'Display information about a Rule'
,
cmd_parser
.
add_argument
(
'name'
,
help
=
'The name of the Rule to display its information'
)
parents
=
[
devid_parse
,
rname_parse
]
)
cmd_parser
.
set_defaults
(
func
=
cmd_rule_info
)
cmd_parser
.
set_defaults
(
func
=
cmd_rule_info
)
# reset-rule-stats
# reset-rule-stats
cmd_parser
=
subparsers
.
add_parser
(
'reset-rule-stats'
,
help
=
'Reset all statistics of a Rule'
)
cmd_parser
=
subparsers
.
add_parser
(
'reset-rule-stats'
,
help
=
'Reset all statistics of a Rule'
,
cmd_parser
.
add_argument
(
'name'
,
help
=
'The name of the Rule to reset its statistics'
)
parents
=
[
devid_parse
,
rname_parse
]
)
cmd_parser
.
set_defaults
(
func
=
cmd_reset_rule_stats
)
cmd_parser
.
set_defaults
(
func
=
cmd_reset_rule_stats
)
# list-alarms
# list-alarms
cmd_parser
=
subparsers
.
add_parser
(
'list-alarms'
,
help
=
'List all defined Alarms'
)
cmd_parser
=
subparsers
.
add_parser
(
'list-alarms'
,
help
=
'List all defined Alarms'
,
cmd_parser
.
add_argument
(
'-v'
,
'--verbose'
,
action
=
'store_true'
,
parents
=
[
devid_parse
,
verbose_parse
])
help
=
'Show details about each Alarm'
)
cmd_parser
.
set_defaults
(
func
=
cmd_list_alarms
)
cmd_parser
.
set_defaults
(
func
=
cmd_list_alarms
)
# add-alarm
# add-alarm
cmd_parser
=
subparsers
.
add_parser
(
'add-alarm'
,
help
=
'Define a new Alarm'
)
cmd_parser
=
subparsers
.
add_parser
(
'add-alarm'
,
help
=
'Define a new Alarm'
,
cmd_parser
.
add_argument
(
'name'
,
help
=
'The name of the new Alarm'
)
parents
=
[
devid_parse
,
aname_parse
]
)
cmd_parser
.
set_defaults
(
func
=
cmd_add_alarm
)
cmd_parser
.
set_defaults
(
func
=
cmd_add_alarm
)
# set-alarm
# set-alarm
cmd_parser
=
subparsers
.
add_parser
(
'set-alarm'
,
help
=
'Configure an Alarm'
)
cmd_parser
=
subparsers
.
add_parser
(
'set-alarm'
,
help
=
'Configure an Alarm'
,
cmd_parser
.
add_argument
(
'name'
,
help
=
'The name of the Alarm to configure'
)
parents
=
[
devid_parse
,
aname_parse
]
)
cmd_parser
.
add_argument
(
'-d'
,
'--delay'
,
type
=
time_interval
,
required
=
True
,
cmd_parser
.
add_argument
(
'-d'
,
'--delay'
,
type
=
time_interval
,
required
=
True
,
help
=
'Set the delay for this Alarm wrt now. '
+
time_interval_help
())
help
=
'Set the delay for this Alarm wrt now. '
+
time_interval_help
())
cmd_parser
.
add_argument
(
'-s'
,
'--setup'
,
type
=
time_interval
,
default
=
0
,
cmd_parser
.
add_argument
(
'-s'
,
'--setup'
,
type
=
time_interval
,
default
=
0
,
...
@@ -387,40 +420,42 @@ def main():
...
@@ -387,40 +420,42 @@ def main():
cmd_parser
.
set_defaults
(
func
=
cmd_set_alarm
)
cmd_parser
.
set_defaults
(
func
=
cmd_set_alarm
)
# remove-alarm
# remove-alarm
cmd_parser
=
subparsers
.
add_parser
(
'remove-alarm'
,
help
=
'Delete an Alarm'
)
cmd_parser
=
subparsers
.
add_parser
(
'remove-alarm'
,
help
=
'Delete an Alarm'
,
cmd_parser
.
add_argument
(
'name'
,
help
=
'The name of the Alarm to delete'
)
parents
=
[
devid_parse
,
aname_parse
]
)
cmd_parser
.
set_defaults
(
func
=
cmd_remove_alarm
)
cmd_parser
.
set_defaults
(
func
=
cmd_remove_alarm
)
# remove-all-alarms
# remove-all-alarms
cmd_parser
=
subparsers
.
add_parser
(
'remove-all-alarms'
,
help
=
'Delete all Alarms'
)
cmd_parser
=
subparsers
.
add_parser
(
'remove-all-alarms'
,
help
=
'Delete all Alarms'
,
parents
=
[
devid_parse
])
cmd_parser
.
set_defaults
(
func
=
cmd_remove_all_alarms
)
cmd_parser
.
set_defaults
(
func
=
cmd_remove_all_alarms
)
# enable-alarm
# enable-alarm
cmd_parser
=
subparsers
.
add_parser
(
'enable-alarm'
,
help
=
'Enable an Alarm'
)
cmd_parser
=
subparsers
.
add_parser
(
'enable-alarm'
,
help
=
'Enable an Alarm'
,
cmd_parser
.
add_argument
(
'name'
,
help
=
'The name of the Alarm to enable'
)
parents
=
[
devid_parse
,
aname_parse
]
)
cmd_parser
.
set_defaults
(
func
=
cmd_enable_alarm
)
cmd_parser
.
set_defaults
(
func
=
cmd_enable_alarm
)
# disable-alarm
# disable-alarm
cmd_parser
=
subparsers
.
add_parser
(
'disable-alarm'
,
help
=
'Disable an Alarm'
)
cmd_parser
=
subparsers
.
add_parser
(
'disable-alarm'
,
help
=
'Disable an Alarm'
,
cmd_parser
.
add_argument
(
'name'
,
help
=
'The name of the Alarm to disable'
)
parents
=
[
devid_parse
,
aname_parse
]
)
cmd_parser
.
set_defaults
(
func
=
cmd_disable_alarm
)
cmd_parser
.
set_defaults
(
func
=
cmd_disable_alarm
)
# disable-all-alarms
# disable-all-alarms
cmd_parser
=
subparsers
.
add_parser
(
'disable-all-alarms'
,
help
=
'Disable all Alarms'
)
cmd_parser
=
subparsers
.
add_parser
(
'disable-all-alarms'
,
help
=
'Disable all Alarms'
,
parents
=
[
devid_parse
])
cmd_parser
.
set_defaults
(
func
=
cmd_disable_all_alarms
)
cmd_parser
.
set_defaults
(
func
=
cmd_disable_all_alarms
)
# alarm-info
# alarm-info
cmd_parser
=
subparsers
.
add_parser
(
'alarm-info'
,
help
=
'Display information about an Alarm'
)
cmd_parser
=
subparsers
.
add_parser
(
'alarm-info'
,
help
=
'Display information about an Alarm'
,
cmd_parser
.
add_argument
(
'name'
,
help
=
'The name of the Alarm to display its information'
)
parents
=
[
devid_parse
,
aname_parse
]
)
cmd_parser
.
set_defaults
(
func
=
cmd_alarm_info
)
cmd_parser
.
set_defaults
(
func
=
cmd_alarm_info
)
args
=
parser
.
parse_args
()
args
=
parser
.
parse_args
()
dev
=
'MT'
+
str
(
args
.
dev
)
if
(
args
.
devid
!=
None
):
wrtd
=
PyWrtd
(
args
.
devid
)
wrtd
=
PyWrtd
(
dev
)
args
.
func
(
wrtd
,
args
)
else
:
args
.
func
(
wrtd
,
args
)
args
.
func
(
args
)
if
__name__
==
"__main__"
:
if
__name__
==
"__main__"
:
main
()
main
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment