Only update a filter if something has changed.
This commit is contained in:
parent
04fa7fc89b
commit
d4db7d278b
|
@ -148,6 +148,7 @@ void apply_filter_configuration(filter_configuration_tlv *filters) {
|
||||||
// so try to preserve our remembered values.
|
// so try to preserve our remembered values.
|
||||||
// If a filter type changes, we do a memory reset.
|
// If a filter type changes, we do a memory reset.
|
||||||
static uint8_t bqf_filter_types[MAX_FILTER_STAGES] = { };
|
static uint8_t bqf_filter_types[MAX_FILTER_STAGES] = { };
|
||||||
|
static uint32_t bqf_filter_checksum[MAX_FILTER_STAGES] = { };
|
||||||
if (type != bqf_filter_types[filter_stages]) {
|
if (type != bqf_filter_types[filter_stages]) {
|
||||||
bqf_filter_types[filter_stages] = type;
|
bqf_filter_types[filter_stages] = type;
|
||||||
type_changed = true;
|
type_changed = true;
|
||||||
|
@ -502,19 +503,8 @@ void config_in_packet(struct usb_endpoint *ep) {
|
||||||
usb_packet_done(ep);
|
usb_packet_done(ep);
|
||||||
}
|
}
|
||||||
|
|
||||||
void configuration_ep_on_stall_change(struct usb_endpoint *ep) {
|
|
||||||
printf("Config EP stall change: %d\n", usb_is_endpoint_stalled(ep));
|
|
||||||
if (!usb_is_endpoint_stalled(ep)) {
|
|
||||||
write_offset = 0;
|
|
||||||
tlv_header* request = ((tlv_header*) working_configuration[inactive_working_configuration]);
|
|
||||||
request->type = NOK;
|
|
||||||
request->length = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void configuration_ep_on_cancel(struct usb_endpoint *ep) {
|
void configuration_ep_on_cancel(struct usb_endpoint *ep) {
|
||||||
printf("Config EP on cancel\n");
|
printf("Cancel request on config EP\n");
|
||||||
|
|
||||||
write_offset = 0;
|
write_offset = 0;
|
||||||
tlv_header* request = ((tlv_header*) working_configuration[inactive_working_configuration]);
|
tlv_header* request = ((tlv_header*) working_configuration[inactive_working_configuration]);
|
||||||
request->type = NOK;
|
request->type = NOK;
|
||||||
|
@ -523,11 +513,9 @@ void configuration_ep_on_cancel(struct usb_endpoint *ep) {
|
||||||
|
|
||||||
void apply_config_changes() {
|
void apply_config_changes() {
|
||||||
if (reload_config) {
|
if (reload_config) {
|
||||||
//uint32_t ints = save_and_disable_interrupts();
|
|
||||||
reload_config = false;
|
reload_config = false;
|
||||||
const uint8_t active_configuration = inactive_working_configuration ? 0 : 1;
|
const uint8_t active_configuration = inactive_working_configuration ? 0 : 1;
|
||||||
apply_configuration((tlv_header*) working_configuration[active_configuration]);
|
apply_configuration((tlv_header*) working_configuration[active_configuration]);
|
||||||
//restore_interrupts(ints);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
|
@ -24,16 +24,26 @@ struct usb_endpoint;
|
||||||
|
|
||||||
#define INIT_FILTER2(T) { \
|
#define INIT_FILTER2(T) { \
|
||||||
filter2 *args = (filter2 *)ptr; \
|
filter2 *args = (filter2 *)ptr; \
|
||||||
|
uint32_t checksum = 0; \
|
||||||
|
for (int i = 0; i < sizeof(filter2) / 4; i++) checksum ^= ((uint32_t*) args)[i]; \
|
||||||
|
if (checksum != bqf_filter_checksum[filter_stages]) { \
|
||||||
bqf_##T##_config(SAMPLING_FREQ, args->f0, args->Q, &bqf_filters_left[filter_stages]); \
|
bqf_##T##_config(SAMPLING_FREQ, args->f0, args->Q, &bqf_filters_left[filter_stages]); \
|
||||||
memcpy(&bqf_filters_right[filter_stages], &bqf_filters_left[filter_stages], sizeof(bqf_coeff_t)); \
|
memcpy(&bqf_filters_right[filter_stages], &bqf_filters_left[filter_stages], sizeof(bqf_coeff_t)); \
|
||||||
|
bqf_filter_checksum[filter_stages] = checksum; \
|
||||||
|
} \
|
||||||
ptr += sizeof(filter2); \
|
ptr += sizeof(filter2); \
|
||||||
break; \
|
break; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define INIT_FILTER3(T) { \
|
#define INIT_FILTER3(T) { \
|
||||||
filter3 *args = (filter3 *)ptr; \
|
filter3 *args = (filter3 *)ptr; \
|
||||||
|
uint32_t checksum = 0; \
|
||||||
|
for (int i = 0; i < sizeof(filter3) / 4; i++) checksum ^= ((uint32_t*) args)[i]; \
|
||||||
|
if (checksum != bqf_filter_checksum[filter_stages]) { \
|
||||||
bqf_##T##_config(SAMPLING_FREQ, args->f0, args->db_gain, args->Q, &bqf_filters_left[filter_stages]); \
|
bqf_##T##_config(SAMPLING_FREQ, args->f0, args->db_gain, args->Q, &bqf_filters_left[filter_stages]); \
|
||||||
memcpy(&bqf_filters_right[filter_stages], &bqf_filters_left[filter_stages], sizeof(bqf_coeff_t)); \
|
memcpy(&bqf_filters_right[filter_stages], &bqf_filters_left[filter_stages], sizeof(bqf_coeff_t)); \
|
||||||
|
bqf_filter_checksum[filter_stages] = checksum; \
|
||||||
|
} \
|
||||||
ptr += sizeof(filter3); \
|
ptr += sizeof(filter3); \
|
||||||
break; \
|
break; \
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue