Ejemplo n.º 1
0
int cmd_mimo(struct cli_state *state, int argc, char **argv)
{
    int status = 0;

    if (argc != 2) {
        return CLI_RET_NARGS;
    }

    if (!strcasecmp(argv[1], "slave")) {
        status = bladerf_si5338_write(state->dev, 6, 4);
        if (status != 0) {
            goto out;
        }

        status |= bladerf_si5338_write(state->dev, 28, 0x2b);
        if (status != 0) {
            goto out;
        }

        status |= bladerf_si5338_write(state->dev, 29, 0x28);
        if (status != 0) {
            goto out;
        }

        status |= bladerf_si5338_write(state->dev, 30, 0xa8);
        if (status != 0) {
            goto out;
        }

        printf("\n  Successfully set device to slave MIMO mode.\n\n");

    } else if (!strcmp(argv[1], "master")) {
        status |= bladerf_si5338_write(state->dev, 39, 1);
        if (status != 0) {
            goto out;
        }

        status |= bladerf_si5338_write(state->dev, 34, 0x22);
        if (status != 0) {
            goto out;
        }

        printf("\n  Successfully set device to master MIMO mode.\n\n");
    } else {
        cli_err(state, argv[0], "Invalid mode: %s\n", argv[1]);
    }

out:
    if (status != 0) {
        state->last_lib_error = status;
        status = CLI_RET_LIBBLADERF;
    }

    return status;
}
Ejemplo n.º 2
0
int cmd_mimo(struct cli_state *state, int argc, char **argv)
{
    int status = 0;

    printf("\n");
    printf("  IMPORTANT: This command is deprecated and has been superseded\n");
    printf("             by `print|set smb_mode`. Run `set smb_mode` for usage.\n");

    if (argc < 2) {
        printf("\n");
        printf("  Usage: %s <slave>\n", argv[0]);
        printf("         %s <master> [frequency]\n", argv[0]);
        printf("\n");
        return 0;
    }

    if (!strcasecmp(argv[1], "slave")) {
        uint8_t val;
        if (argc != 2) {
            return CLI_RET_NARGS;
        }

        status = bladerf_si5338_write(state->dev, 6, 4);
        if (status != 0) {
            goto out;
        }

        status = bladerf_si5338_write(state->dev, 28, 0x2b);
        if (status != 0) {
            goto out;
        }

        status = bladerf_si5338_write(state->dev, 29, 0x28);
        if (status != 0) {
            goto out;
        }

        status = bladerf_si5338_write(state->dev, 30, 0xa8);
        if (status != 0) {
            goto out;
        }

        /* Turn off any SMB connector output */
        status = bladerf_si5338_read(state->dev, 39, &val);
        if (status != 0) {
            goto out;
        }

        val &= ~(1);
        status = bladerf_si5338_write(state->dev, 39, val);
        if (status != 0) {
            goto out;
        }

        printf("\n  Successfully set device to slave MIMO mode.\n\n");

    } else if (!strcmp(argv[1], "master")) {
        if (argc == 2) {
            /* Output the 38.4MHz clock on the SMB connector. */
            uint8_t val ;
            status = bladerf_si5338_read(state->dev, 39, &val);

            if (status != 0) {
                goto out;
            }

            val |= 1;
            status = bladerf_si5338_write(state->dev, 39, val);
            if (status != 0) {
                goto out;
            }

            status = bladerf_si5338_write(state->dev, 34, 0x22);
            if (status != 0) {
                goto out;
            }

            printf("\n  Successfully set device to master MIMO mode.\n\n");
        } else if (argc == 3) {
            /* Output a specific frequency on the SMB connector. */

            unsigned int freq, actual;
            bool ok;
            freq = str2uint_suffix(argv[2], BLADERF_SMB_FREQUENCY_MIN,
                                   BLADERF_SMB_FREQUENCY_MAX, freq_suffixes,
                                   NUM_FREQ_SUFFIXES, &ok);
            if (!ok) {
                cli_err(state, argv[0], "Invalid SMB frequency (%s)\n",
                        argv[2]);
                return CLI_RET_INVPARAM;
            } else {
                status = bladerf_set_smb_frequency(state->dev, freq, &actual);
                if(status >= 0) {
                    printf("\n  Set device to master MIMO, "
                           "req freq:%9uHz, actual:%9uHz\n\n", freq, actual);
                } else {
                    goto out;
                }
            }
        } else {
            return CLI_RET_NARGS;
        }

    } else {
        cli_err(state, argv[0], "Invalid mode: %s\n", argv[1]);
    }

out:
    if (status != 0) {
        state->last_lib_error = status;
        status = CLI_RET_LIBBLADERF;
    }

    return status;
}