Add a quick, dirty, and marginally-useful text configuration option to hackrf_si5351c example.
This commit is contained in:
@ -27,6 +27,7 @@
|
|||||||
|
|
||||||
static void usage() {
|
static void usage() {
|
||||||
printf("\nUsage:\n");
|
printf("\nUsage:\n");
|
||||||
|
printf("\t-c, --config: print textual configuration information\n");
|
||||||
printf("\t-n, --register <n>: set register number for subsequent read/write operations\n");
|
printf("\t-n, --register <n>: set register number for subsequent read/write operations\n");
|
||||||
printf("\t-r, --read: read register specified by last -n argument, or all registers\n");
|
printf("\t-r, --read: read register specified by last -n argument, or all registers\n");
|
||||||
printf("\t-w, --write <v>: write register specified by last -n argument with value <v>\n");
|
printf("\t-w, --write <v>: write register specified by last -n argument with value <v>\n");
|
||||||
@ -37,6 +38,7 @@ static void usage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct option long_options[] = {
|
static struct option long_options[] = {
|
||||||
|
{ "config", no_argument, 0, 'c' },
|
||||||
{ "register", required_argument, 0, 'n' },
|
{ "register", required_argument, 0, 'n' },
|
||||||
{ "write", required_argument, 0, 'w' },
|
{ "write", required_argument, 0, 'w' },
|
||||||
{ "read", no_argument, 0, 'r' },
|
{ "read", no_argument, 0, 'r' },
|
||||||
@ -99,6 +101,56 @@ int write_register(
|
|||||||
|
|
||||||
#define REGISTER_INVALID 32767
|
#define REGISTER_INVALID 32767
|
||||||
|
|
||||||
|
int dump_multisynth_config(hackrf_device* device, const uint_fast8_t ms_number) {
|
||||||
|
uint16_t parameters[8];
|
||||||
|
uint_fast8_t reg_base = 42 + (ms_number * 8);
|
||||||
|
for(uint_fast8_t i=0; i<8; i++) {
|
||||||
|
uint_fast8_t reg_number = reg_base + i;
|
||||||
|
int result = hackrf_si5351c_read(device, reg_number, ¶meters[i]);
|
||||||
|
if( result != HACKRF_SUCCESS ) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint32_t p1 =
|
||||||
|
(parameters[2] & 0x03 << 16)
|
||||||
|
| (parameters[3] << 8)
|
||||||
|
| parameters[4]
|
||||||
|
;
|
||||||
|
const uint32_t p2 =
|
||||||
|
(parameters[5] & 0x0F << 16)
|
||||||
|
| (parameters[6] << 8)
|
||||||
|
| parameters[7]
|
||||||
|
;
|
||||||
|
const uint32_t p3 =
|
||||||
|
(parameters[5] & 0xF0 << 12)
|
||||||
|
| (parameters[0] << 8)
|
||||||
|
| parameters[1]
|
||||||
|
;
|
||||||
|
const uint32_t r_div =
|
||||||
|
(parameters[2] >> 4) & 0x7
|
||||||
|
;
|
||||||
|
|
||||||
|
printf("MS%d:", ms_number);
|
||||||
|
printf("\tp1 = %u\n", p1);
|
||||||
|
printf("\tp2 = %u\n", p2);
|
||||||
|
printf("\tp3 = %u\n", p3);
|
||||||
|
printf("\toutput divider = %u\n", 1 << r_div);
|
||||||
|
|
||||||
|
return HACKRF_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int dump_configuration(hackrf_device* device) {
|
||||||
|
for(uint_fast8_t ms_number=0; ms_number<8; ms_number++) {
|
||||||
|
int result = dump_multisynth_config(device, ms_number);
|
||||||
|
if( result != HACKRF_SUCCESS ) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return HACKRF_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
int opt;
|
int opt;
|
||||||
uint16_t register_number = REGISTER_INVALID;
|
uint16_t register_number = REGISTER_INVALID;
|
||||||
@ -118,7 +170,7 @@ int main(int argc, char** argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int option_index = 0;
|
int option_index = 0;
|
||||||
while( (opt = getopt_long(argc, argv, "n:rw:", long_options, &option_index)) != EOF ) {
|
while( (opt = getopt_long(argc, argv, "cn:rw:", long_options, &option_index)) != EOF ) {
|
||||||
switch( opt ) {
|
switch( opt ) {
|
||||||
case 'n':
|
case 'n':
|
||||||
result = parse_int(optarg, ®ister_number);
|
result = parse_int(optarg, ®ister_number);
|
||||||
@ -139,6 +191,10 @@ int main(int argc, char** argv) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'c':
|
||||||
|
dump_configuration(device);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user