asix-sigma: eliminate magic numbers in firmware file references
Use symbolic identifiers to select firmware images, which eliminates magic 0/1/2 position numbers in the list of files, improves readability and also improves robustness. Move 'devc' to 'ctx' and before other arguments in routine signatures while we are here.
This commit is contained in:
parent
1bb9dc8217
commit
80e717b3cf
|
@ -235,7 +235,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options)
|
|||
devc->id.type = dev_type;
|
||||
devc->samplerate = samplerates[0];
|
||||
sr_sw_limits_init(&devc->cfg_limits);
|
||||
devc->cur_firmware = -1;
|
||||
devc->firmware_idx = SIGMA_FW_NONE;
|
||||
devc->capture_ratio = 50;
|
||||
devc->use_triggers = 0;
|
||||
}
|
||||
|
|
|
@ -48,11 +48,11 @@ SR_PRIV const uint64_t samplerates[] = {
|
|||
SR_PRIV const size_t samplerates_count = ARRAY_SIZE(samplerates);
|
||||
|
||||
static const char *firmware_files[] = {
|
||||
"asix-sigma-50.fw", /* Up to 50MHz sample rate, 8bit divider. */
|
||||
"asix-sigma-100.fw", /* 100MHz sample rate, fixed. */
|
||||
"asix-sigma-200.fw", /* 200MHz sample rate, fixed. */
|
||||
"asix-sigma-50sync.fw", /* Synchronous clock from external pin. */
|
||||
"asix-sigma-phasor.fw", /* Frequency counter. */
|
||||
[SIGMA_FW_50MHZ] = "asix-sigma-50.fw", /* 50MHz, 8bit divider. */
|
||||
[SIGMA_FW_100MHZ] = "asix-sigma-100.fw", /* 100MHz, fixed. */
|
||||
[SIGMA_FW_200MHZ] = "asix-sigma-200.fw", /* 200MHz, fixed. */
|
||||
[SIGMA_FW_SYNC] = "asix-sigma-50sync.fw", /* Sync from external pin. */
|
||||
[SIGMA_FW_FREQ] = "asix-sigma-phasor.fw", /* Frequency counter. */
|
||||
};
|
||||
|
||||
#define SIGMA_FIRMWARE_SIZE_LIMIT (256 * 1024)
|
||||
|
@ -496,7 +496,7 @@ static int sigma_fw_2_bitbang(struct sr_context *ctx, const char *name,
|
|||
}
|
||||
|
||||
static int upload_firmware(struct sr_context *ctx,
|
||||
int firmware_idx, struct dev_context *devc)
|
||||
struct dev_context *devc, enum sigma_firmware_idx firmware_idx)
|
||||
{
|
||||
int ret;
|
||||
unsigned char *buf;
|
||||
|
@ -504,9 +504,15 @@ static int upload_firmware(struct sr_context *ctx,
|
|||
size_t buf_size;
|
||||
const char *firmware;
|
||||
|
||||
/* Avoid downloading the same firmware multiple times. */
|
||||
/* Check for valid firmware file selection. */
|
||||
if (firmware_idx >= ARRAY_SIZE(firmware_files))
|
||||
return SR_ERR_ARG;
|
||||
firmware = firmware_files[firmware_idx];
|
||||
if (devc->cur_firmware == firmware_idx) {
|
||||
if (!firmware || !*firmware)
|
||||
return SR_ERR_ARG;
|
||||
|
||||
/* Avoid downloading the same firmware multiple times. */
|
||||
if (devc->firmware_idx == firmware_idx) {
|
||||
sr_info("Not uploading firmware file '%s' again.", firmware);
|
||||
return SR_OK;
|
||||
}
|
||||
|
@ -564,7 +570,7 @@ static int upload_firmware(struct sr_context *ctx,
|
|||
|
||||
/* Keep track of successful firmware download completion. */
|
||||
devc->state.state = SIGMA_IDLE;
|
||||
devc->cur_firmware = firmware_idx;
|
||||
devc->firmware_idx = firmware_idx;
|
||||
sr_info("Firmware uploaded.");
|
||||
|
||||
return SR_OK;
|
||||
|
@ -705,13 +711,13 @@ SR_PRIV int sigma_set_samplerate(const struct sr_dev_inst *sdi)
|
|||
*/
|
||||
num_channels = devc->num_channels;
|
||||
if (samplerate <= SR_MHZ(50)) {
|
||||
ret = upload_firmware(drvc->sr_ctx, 0, devc);
|
||||
ret = upload_firmware(drvc->sr_ctx, devc, SIGMA_FW_50MHZ);
|
||||
num_channels = 16;
|
||||
} else if (samplerate == SR_MHZ(100)) {
|
||||
ret = upload_firmware(drvc->sr_ctx, 1, devc);
|
||||
ret = upload_firmware(drvc->sr_ctx, devc, SIGMA_FW_100MHZ);
|
||||
num_channels = 8;
|
||||
} else if (samplerate == SR_MHZ(200)) {
|
||||
ret = upload_firmware(drvc->sr_ctx, 2, devc);
|
||||
ret = upload_firmware(drvc->sr_ctx, devc, SIGMA_FW_200MHZ);
|
||||
num_channels = 4;
|
||||
}
|
||||
|
||||
|
|
|
@ -294,6 +294,15 @@ struct sigma_state {
|
|||
uint16_t lastsample;
|
||||
};
|
||||
|
||||
enum sigma_firmware_idx {
|
||||
SIGMA_FW_NONE,
|
||||
SIGMA_FW_50MHZ,
|
||||
SIGMA_FW_100MHZ,
|
||||
SIGMA_FW_200MHZ,
|
||||
SIGMA_FW_SYNC,
|
||||
SIGMA_FW_FREQ,
|
||||
};
|
||||
|
||||
struct submit_buffer;
|
||||
|
||||
struct dev_context {
|
||||
|
@ -308,7 +317,7 @@ struct dev_context {
|
|||
struct sr_sw_limits cfg_limits; /* Configured limits (user specified). */
|
||||
struct sr_sw_limits acq_limits; /* Acquisition limits (internal use). */
|
||||
struct sr_sw_limits feed_limits; /* Datafeed limits (internal use). */
|
||||
int cur_firmware;
|
||||
enum sigma_firmware_idx firmware_idx;
|
||||
int num_channels;
|
||||
int samples_per_event;
|
||||
uint64_t capture_ratio;
|
||||
|
|
Loading…
Reference in New Issue