/*--------------------------------------------------------------------------*/
/* Rst command */
/*--------------------------------------------------------------------------*/
static int32_t MONITOR_CmdRst(int32_t argc, const char * const argv[],
int32_t rw)
{
int32_t status = SM_ERR_SUCCESS;
switch (rw)
{
default: /* read */
{
for (uint32_t domain = 0U; domain < SM_NUM_RESET;
domain++)
{
string rstNameAddr;
int32_t wName = 0;
bool assertNegate = false;
status = LMM_ResetDomainNameGet(s_lm, domain,
&rstNameAddr, &wName);
if (status == SM_ERR_SUCCESS)
{
status = LMM_ResetDomainGet(s_lm, domain,
&assertNegate);
}
if (status == SM_ERR_SUCCESS)
{
if (assertNegate)
{
printf("%03u: %*s = asserted\n", domain,
-wName, rstNameAddr);
}
else
{
printf("%03u: %*s = negated\n", domain,
-wName, rstNameAddr);
}
}
}
/* Handle reserved/fused domains */
if (status == SM_ERR_NOT_FOUND)
{
status = SM_ERR_SUCCESS;
}
}
break;
case WRITE: /* write */
{
uint32_t domain = 0U;
string const rstModes[] =
{
"assert",
"negate",
"auto"
};
if (argc < 2)
{
status = SM_ERR_MISSING_PARAMETERS;
}
else
{
status = MONITOR_NameToId(argv[0], &domain,
LMM_ResetDomainNameGet, SM_NUM_RESET);
}
if (status == SM_ERR_SUCCESS)
{
uint8_t rstMode = (uint8_t) MONITOR_Find(rstModes,
(int32_t) ARRAY_SIZE(rstModes), argv[1]);
switch (rstMode)
{
/* assert */
case 0:
status = LMM_ResetDomain(s_lm, domain,
0U, false, true);
break;
/* negate (aka de-assert) */
case 1:
status = LMM_ResetDomain(s_lm, domain,
0U, false, false);
break;
/* auto (aka toggle) */
case 2:
status = LMM_ResetDomain(s_lm, domain,
0U, true, false);
break;
default:
status = SM_ERR_INVALID_PARAMETERS;
break;
}
}
}
break;
}
/* Return status */
return status;
}