Commit 3e06c9e7 authored by Dimitris Lampridis's avatar Dimitris Lampridis

sw: introduce more fw-related attributes

parent 47a61400
......@@ -109,6 +109,11 @@ class PyWrtd():
WRTD_ATTR_FW_MINOR_VERSION = __WRTD_ATTR_BASE + 0x82
WRTD_ATTR_FW_MAJOR_VERSION_REQUIRED = __WRTD_ATTR_BASE + 0x83
WRTD_ATTR_FW_MINOR_VERSION_REQUIRED = __WRTD_ATTR_BASE + 0x84
WRTD_ATTR_FW_MAX_RULES = __WRTD_ATTR_BASE + 0x85
WRTD_ATTR_FW_MAX_ALARMS = __WRTD_ATTR_BASE + 0x86
WRTD_ATTR_FW_CAPABILITIES = __WRTD_ATTR_BASE + 0x88
WRTD_ATTR_FW_LOCAL_INPUTS = __WRTD_ATTR_BASE + 0x8A
WRTD_ATTR_FW_LOCAL_OUTPUTS = __WRTD_ATTR_BASE + 0x8B
WRTD_GLOBAL_REP_CAP_ID = 'WGRCI'
......
......@@ -77,6 +77,108 @@ enum wrtd_status wrtd_attr_get_fw_minor_version_required(struct wrtd_dev *wrtd,
return WRTD_SUCCESS;
}
enum wrtd_status wrtd_attr_get_fw_max_rules(struct wrtd_dev *wrtd,
const char *rep_cap_id,
int32_t *value)
{
enum wrtd_status status;
unsigned int idx;
status = wrtd_fill_roots(wrtd, __func__);
WRTD_RETURN_IF_ERROR(status);
status = wrtd_find_fw(wrtd, rep_cap_id, &idx, __func__);
WRTD_RETURN_IF_ERROR(status);
*value = wrtd->roots[idx].nbr_rules;
return WRTD_SUCCESS;
}
enum wrtd_status wrtd_attr_get_fw_max_alarms(struct wrtd_dev *wrtd,
const char *rep_cap_id,
int32_t *value)
{
enum wrtd_status status;
unsigned int idx;
status = wrtd_fill_roots(wrtd, __func__);
WRTD_RETURN_IF_ERROR(status);
status = wrtd_find_fw(wrtd, rep_cap_id, &idx, __func__);
WRTD_RETURN_IF_ERROR(status);
*value = wrtd->roots[idx].nbr_alarms;
return WRTD_SUCCESS;
}
enum wrtd_status wrtd_attr_get_fw_capabilities(struct wrtd_dev *wrtd,
const char *rep_cap_id,
int32_t *value)
{
enum wrtd_status status;
unsigned int idx;
status = wrtd_fill_roots(wrtd, __func__);
WRTD_RETURN_IF_ERROR(status);
status = wrtd_find_fw(wrtd, rep_cap_id, &idx, __func__);
WRTD_RETURN_IF_ERROR(status);
*value = wrtd->roots[idx].capabilities;
return WRTD_SUCCESS;
}
enum wrtd_status wrtd_attr_get_fw_local_inputs(struct wrtd_dev *wrtd,
const char *rep_cap_id,
int32_t *value)
{
enum wrtd_status status;
unsigned int idx;
int32_t count;
int i;
status = wrtd_fill_roots(wrtd, __func__);
WRTD_RETURN_IF_ERROR(status);
status = wrtd_find_fw(wrtd, rep_cap_id, &idx, __func__);
WRTD_RETURN_IF_ERROR(status);
for (count = 0, i = 0; i < wrtd->roots[idx].nbr_devices; i++)
if (wrtd->roots[idx].devices_chs_dir[i] == WRTD_CH_DIR_IN)
count += wrtd->roots[idx].devices_nbr_chs[i];
*value = count;
return WRTD_SUCCESS;
}
enum wrtd_status wrtd_attr_get_fw_local_outputs(struct wrtd_dev *wrtd,
const char *rep_cap_id,
int32_t *value)
{
enum wrtd_status status;
unsigned int idx;
int32_t count;
int i;
status = wrtd_fill_roots(wrtd, __func__);
WRTD_RETURN_IF_ERROR(status);
status = wrtd_find_fw(wrtd, rep_cap_id, &idx, __func__);
WRTD_RETURN_IF_ERROR(status);
for (count = 0, i = 0; i < wrtd->roots[idx].nbr_devices; i++)
if (wrtd->roots[idx].devices_chs_dir[i] == WRTD_CH_DIR_OUT)
count += wrtd->roots[idx].devices_nbr_chs[i];
*value = count;
return WRTD_SUCCESS;
}
enum wrtd_status wrtd_attr_get_alarm_count(struct wrtd_dev *wrtd,
int32_t *value)
{
......
......@@ -188,6 +188,21 @@ enum wrtd_status wrtd_attr_get_fw_major_version_required(struct wrtd_dev *wrtd,
enum wrtd_status wrtd_attr_get_fw_minor_version_required(struct wrtd_dev *wrtd,
const char *rep_cap_id,
int32_t *value);
enum wrtd_status wrtd_attr_get_fw_max_rules(struct wrtd_dev *wrtd,
const char *rep_cap_id,
int32_t *value);
enum wrtd_status wrtd_attr_get_fw_max_alarms(struct wrtd_dev *wrtd,
const char *rep_cap_id,
int32_t *value);
enum wrtd_status wrtd_attr_get_fw_capabilities(struct wrtd_dev *wrtd,
const char *rep_cap_id,
int32_t *value);
enum wrtd_status wrtd_attr_get_fw_local_inputs(struct wrtd_dev *wrtd,
const char *rep_cap_id,
int32_t *value);
enum wrtd_status wrtd_attr_get_fw_local_outputs(struct wrtd_dev *wrtd,
const char *rep_cap_id,
int32_t *value);
enum wrtd_status wrtd_attr_get_alarm_count(struct wrtd_dev *wrtd,
int32_t *value);
enum wrtd_status wrtd_attr_set_alarm_period(struct wrtd_dev *wrtd,
......
......@@ -513,6 +513,11 @@ wrtd_status wrtd_set_attr_int32(wrtd_dev *wrtd,
case WRTD_ATTR_FW_MINOR_VERSION:
case WRTD_ATTR_FW_MAJOR_VERSION_REQUIRED:
case WRTD_ATTR_FW_MINOR_VERSION_REQUIRED:
case WRTD_ATTR_FW_MAX_RULES:
case WRTD_ATTR_FW_MAX_ALARMS:
case WRTD_ATTR_FW_CAPABILITIES:
case WRTD_ATTR_FW_LOCAL_INPUTS:
case WRTD_ATTR_FW_LOCAL_OUTPUTS:
case WRTD_ATTR_ALARM_COUNT:
case WRTD_ATTR_RULE_COUNT:
case WRTD_ATTR_STAT_RULE_RX_EVENTS:
......@@ -590,6 +595,31 @@ wrtd_status wrtd_get_attr_int32(wrtd_dev *wrtd,
(wrtd, rep_cap_id, value);
WRTD_RETURN_IF_ERROR(status);
return WRTD_SUCCESS;
case WRTD_ATTR_FW_MAX_RULES:
status = wrtd_attr_get_fw_max_rules
(wrtd, rep_cap_id, value);
WRTD_RETURN_IF_ERROR(status);
return WRTD_SUCCESS;
case WRTD_ATTR_FW_MAX_ALARMS:
status = wrtd_attr_get_fw_max_alarms
(wrtd, rep_cap_id, value);
WRTD_RETURN_IF_ERROR(status);
return WRTD_SUCCESS;
case WRTD_ATTR_FW_CAPABILITIES:
status = wrtd_attr_get_fw_capabilities
(wrtd, rep_cap_id, value);
WRTD_RETURN_IF_ERROR(status);
return WRTD_SUCCESS;
case WRTD_ATTR_FW_LOCAL_INPUTS:
status = wrtd_attr_get_fw_local_inputs
(wrtd, rep_cap_id, value);
WRTD_RETURN_IF_ERROR(status);
return WRTD_SUCCESS;
case WRTD_ATTR_FW_LOCAL_OUTPUTS:
status = wrtd_attr_get_fw_local_outputs
(wrtd, rep_cap_id, value);
WRTD_RETURN_IF_ERROR(status);
return WRTD_SUCCESS;
case WRTD_ATTR_ALARM_COUNT:
status = wrtd_attr_global
(wrtd, rep_cap_id);
......
......@@ -213,7 +213,6 @@ typedef enum wrtd_attr {
reception by WRTD. */
WRTD_ATTR_STAT_RULE_RX_LATENCY_AVG = __WRTD_ATTR_BASE + 0x3B,
/** `RO` `int32` `global` Number of separate WRTD firmware applications
running on the device. */
WRTD_ATTR_FW_COUNT = __WRTD_ATTR_BASE + 0x80,
......@@ -227,6 +226,21 @@ typedef enum wrtd_attr {
/** `RO` `int32` Minor part of WRTD version supported by the firmware.
It must be less than or equal to the minor version of the WRTD library in use. */
WRTD_ATTR_FW_MINOR_VERSION_REQUIRED = __WRTD_ATTR_BASE + 0x84,
/** `RO` `int32` Max number of rules allowed by this firmware. */
WRTD_ATTR_FW_MAX_RULES = __WRTD_ATTR_BASE + 0x85,
/** `RO` `int32` Max number of alarms allowed by this firmware. */
WRTD_ATTR_FW_MAX_ALARMS = __WRTD_ATTR_BASE + 0x86,
/** `RO` `int32` Event TX/RX capabilities of this firmware. This is
a bit-field with the following meaning per bit:
- **bit 0:** if set, the firmware can receive network events.
- **bit 1:** if set, the firmware can create network events.
- **bit 2:** if set, the firmware can receive local events.
- **bit 3:** if set, the firmware can create local events. */
WRTD_ATTR_FW_CAPABILITIES = __WRTD_ATTR_BASE + 0x88,
/** `RO` `int32` Number of available local input channels. */
WRTD_ATTR_FW_LOCAL_INPUTS = __WRTD_ATTR_BASE + 0x8A,
/** `RO` `int32` Number of available local output channels. */
WRTD_ATTR_FW_LOCAL_OUTPUTS = __WRTD_ATTR_BASE + 0x8B,
/** Always last entry in this enum */
__WRTD_ATTR_MAX_NUMBER,
......
......@@ -52,13 +52,21 @@ def cmd_sys_info(wrtd, args):
print ('# {0}'.format(fw_name))
if args.verbose:
print(" + Version Info")
print(" - Name.........: {0}".format(fw_name))
print(" - FW version...: {0}.{1}".format(
print(" - Name..............: {0}".format(fw_name))
print(" - FW version........: {0}.{1}".format(
wrtd.get_attr_int32(fw_name, wrtd.WRTD_ATTR_FW_MAJOR_VERSION),
wrtd.get_attr_int32(fw_name, wrtd.WRTD_ATTR_FW_MINOR_VERSION)))
print(" - WRTD version.: {0}.{1}".format(
print(" - WRTD version......: {0}.{1}".format(
wrtd.get_attr_int32(fw_name, wrtd.WRTD_ATTR_FW_MAJOR_VERSION_REQUIRED),
wrtd.get_attr_int32(fw_name, wrtd.WRTD_ATTR_FW_MINOR_VERSION_REQUIRED)))
print(" + Capabilities")
print(" - Local RX Channels.: {0}".format(
wrtd.get_attr_int32(fw_name, wrtd.WRTD_ATTR_FW_LOCAL_INPUTS)))
print(" - Local TX Channels.: {0}".format(
wrtd.get_attr_int32(fw_name, wrtd.WRTD_ATTR_FW_LOCAL_OUTPUTS)))
caps = wrtd.get_attr_int32(fw_name, wrtd.WRTD_ATTR_FW_CAPABILITIES)
print(" - Network RX........: {0}".format(caps & 0x1 != 0))
print(" - Network TX........: {0}".format(caps & 0x2 != 0))
print()
cmd_list_alarms(wrtd, args)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment