Загрузка данных


/*--------------------------------------------------------------------------*/
/* 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;
}