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.
 | ||||
|         // If a filter type changes, we do a memory reset.
 | ||||
|         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]) { | ||||
|             bqf_filter_types[filter_stages] = type; | ||||
|             type_changed = true; | ||||
|  | @ -502,19 +503,8 @@ void config_in_packet(struct usb_endpoint *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) { | ||||
|     printf("Config EP on cancel\n"); | ||||
| 
 | ||||
|     printf("Cancel request on config EP\n"); | ||||
|     write_offset = 0; | ||||
|     tlv_header* request = ((tlv_header*) working_configuration[inactive_working_configuration]); | ||||
|     request->type = NOK; | ||||
|  | @ -523,11 +513,9 @@ void configuration_ep_on_cancel(struct usb_endpoint *ep) { | |||
| 
 | ||||
| void apply_config_changes() { | ||||
|     if (reload_config) { | ||||
|         //uint32_t ints = save_and_disable_interrupts();
 | ||||
|         reload_config = false; | ||||
|         const uint8_t active_configuration = inactive_working_configuration ? 0 : 1; | ||||
|         apply_configuration((tlv_header*) working_configuration[active_configuration]); | ||||
|         //restore_interrupts(ints);
 | ||||
|     } | ||||
| } | ||||
| #endif | ||||
|  | @ -24,16 +24,26 @@ struct usb_endpoint; | |||
| 
 | ||||
| #define INIT_FILTER2(T) { \ | ||||
|     filter2 *args = (filter2 *)ptr; \ | ||||
|     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)); \ | ||||
|     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]); \ | ||||
|         memcpy(&bqf_filters_right[filter_stages], &bqf_filters_left[filter_stages], sizeof(bqf_coeff_t)); \ | ||||
|         bqf_filter_checksum[filter_stages] = checksum; \ | ||||
|     } \ | ||||
|     ptr += sizeof(filter2); \ | ||||
|     break; \ | ||||
|     } | ||||
| 
 | ||||
| #define INIT_FILTER3(T) { \ | ||||
|     filter3 *args = (filter3 *)ptr; \ | ||||
|     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)); \ | ||||
|     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]); \ | ||||
|         memcpy(&bqf_filters_right[filter_stages], &bqf_filters_left[filter_stages], sizeof(bqf_coeff_t)); \ | ||||
|         bqf_filter_checksum[filter_stages] = checksum; \ | ||||
|     } \ | ||||
|     ptr += sizeof(filter3); \ | ||||
|     break; \ | ||||
|     } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 George Norton
						George Norton