Пример #1
0
int main(int argc, char *argv[])
{
    otInstance *instance;

#if OPENTHREAD_EXAMPLES_POSIX
    if (setjmp(gResetJump))
    {
        alarm(0);
#if OPENTHREAD_ENABLE_COVERAGE
        __gcov_flush();
#endif
        execvp(argv[0], argv);
    }
#endif

#if OPENTHREAD_ENABLE_MULTIPLE_INSTANCES
    size_t   otInstanceBufferLength = 0;
    uint8_t *otInstanceBuffer       = NULL;
#endif

pseudo_reset:

    otSysInit(argc, argv);

#if OPENTHREAD_ENABLE_MULTIPLE_INSTANCES
    // Call to query the buffer size
    (void)otInstanceInit(NULL, &otInstanceBufferLength);

    // Call to allocate the buffer
    otInstanceBuffer = (uint8_t *)malloc(otInstanceBufferLength);
    assert(otInstanceBuffer);

    // Initialize OpenThread with the buffer
    instance = otInstanceInit(otInstanceBuffer, &otInstanceBufferLength);
#else
    instance = otInstanceInitSingle();
#endif
    assert(instance);

    otCliUartInit(instance);

#if OPENTHREAD_ENABLE_DIAG
    otDiagInit(instance);
#endif

    while (!otSysPseudoResetWasRequested())
    {
        otTaskletsProcess(instance);
        otSysProcessDrivers(instance);
    }

    otInstanceFinalize(instance);
#if OPENTHREAD_ENABLE_MULTIPLE_INSTANCES
    free(otInstanceBuffer);
#endif

    goto pseudo_reset;

    return 0;
}
Пример #2
0
void TestDiag(void)
{
    struct TestCommand
    {
        const char *mCommand;
        const char *mExpectedOutput;
    };

    static const TestCommand tests[] = {

        {
            "diag\n",
            "diagnostics mode is disabled\r\n",
        },
        {
            "diag send 10 100\n",
            "failed\r\nstatus 0xd\r\n",
        },
        {
            "diag start\n",
            "start diagnostics mode\r\nstatus 0x00\r\n",
        },
        {
            "diag",
            "diagnostics mode is enabled\r\n",
        },
        {
            "",
            "diagnostics mode is enabled\r\n",
        },
        {
            "diag channel 10\n",
            "failed\r\nstatus 0x7\r\n",
        },
        {
            "diag channel 11\n",
            "set channel to 11\r\nstatus 0x00\r\n",
        },
        {
            "diag channel\n",
            "channel: 11\r\n",
        },
        {
            "diag power -10\n",
            "set tx power to -10 dBm\r\nstatus 0x00\r\n",
        },
        {
            "diag power\n",
            "tx power: -10 dBm\r\n",
        },
        {
            "diag stats\n",
            "received packets: 0\r\nsent packets: 0\r\nfirst received packet: rssi=0, lqi=0\r\n",
        },
        {
            "diag send 20 100\n",
            "sending 0x14 packet(s), length 0x64\r\nstatus 0x00\r\n",
        },
        {
            "  diag \t send    \t 20\t100", // Check parsing of extra space chars between args
            "sending 0x14 packet(s), length 0x64\r\nstatus 0x00\r\n",
        },
        {"diag repeat 100 100\n", "sending packets of length 0x64 at the delay of 0x64 ms\r\nstatus 0x00\r\n"},
        {
            "diag stop\n",
            "received packets: 0\r\nsent packets: 0\r\nfirst received packet: rssi=0, lqi=0\r\n\nstop diagnostics "
            "mode\r\nstatus 0x00\r\n",
        },
        {
            "diag",
            "diagnostics mode is disabled\r\n",
        },
        {
            "diag 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32",
            "failed: command string contains too many arguments\r\n",
        },
        {
            NULL,
            NULL,
        }};

    // initialize platform layer
#if OPENTHREAD_ENABLE_POSIX_APP
    char *argv[] = {(char *)"test_diag", getenv("RADIO_DEVICE"), (char *)"1"};
#else
    char *argv[] = {(char *)"test_diag", (char *)"1"};
#endif
    otSysInit(sizeof(argv) / sizeof(char *), argv);

    // initialize diagnostics module
    otDiagInit(NULL);

    VerifyOrQuit(!otDiagIsEnabled(), "diagnostics mode should be disabled as default\n");

    for (const TestCommand *test = &tests[0]; test->mCommand != NULL; test++)
    {
        const char *output = NULL;

        printf("\nCommand: %s", MakePrintable(test->mCommand));
        output = otDiagProcessCmdLine(test->mCommand);
        printf("\nOutput:  %s\n", MakePrintable(output));

        VerifyOrQuit(strcmp(output, test->mExpectedOutput) == 0, "diagnostics output does not match expected result\n");
    }
}