Skip to content

Commit

Permalink
fix memory leak, clamp DAC output
Browse files Browse the repository at this point in the history
  • Loading branch information
marchingband committed Dec 8, 2021
1 parent ef5bea0 commit 596993d
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 16 deletions.
12 changes: 9 additions & 3 deletions src/file_system.c
Original file line number Diff line number Diff line change
Expand Up @@ -540,7 +540,7 @@ void add_wav_to_file_system(char *name,int voice,int note,size_t start_block,siz
// log_i("done");
}

void add_rack_to_file_system(char *name, int voice, int note, size_t start_block, size_t size, int layer, cJSON *json)
void add_rack_to_file_system(char *name, int voice, int note, size_t start_block, size_t size, int layer, const char *json)
{
log_i("adding rack layer:%u name:%s voice:%d, note:%d, start_block:%d, size:%d",
layer,name,voice,note,start_block,size);
Expand Down Expand Up @@ -577,9 +577,10 @@ int get_empty_rack(void){
return(-1);
}

void add_wav_to_rack(char* name, int rack_index, size_t start_block, size_t size, int layer, cJSON *json){
void add_wav_to_rack(char* name, int rack_index, size_t start_block, size_t size, int layer, const char *json_string){
log_i("name %s, start_block %u, size %u, layer %u",name,start_block,size,layer);
// fill out the wav entry for that layer
const cJSON *json = cJSON_Parse(json_string);
struct rack_file_t *buf = (struct rack_file_t *)ps_malloc(RACK_DIRECTORY_BLOCKS * SECTOR_SIZE);
if(buf == NULL){log_i("malloc rack_file_t buf failed");}
ESP_ERROR_CHECK(emmc_read(buf,RACK_DIRECTORY_START_BLOCK,RACK_DIRECTORY_BLOCKS));
Expand Down Expand Up @@ -610,6 +611,7 @@ void add_wav_to_rack(char* name, int rack_index, size_t start_block, size_t size
buf[rack_index] = rack;
ESP_ERROR_CHECK(emmc_write(buf,RACK_DIRECTORY_START_BLOCK,RACK_DIRECTORY_BLOCKS));
free(buf);
cJSON_Delete(json);
// write_rack_lut_to_disk();
// read_rack_lut_from_disk();
}
Expand Down Expand Up @@ -1089,6 +1091,7 @@ size_t get_website_chunk(size_t start_block, size_t toWrite, uint8_t *buffer, si
void updateVoiceConfig(char *json){
feedLoopWDT();
cJSON *vc_json = cJSON_Parse(json);
// free(json); // ??
feedLoopWDT();
cJSON *voice = NULL;
cJSON *note = NULL;
Expand Down Expand Up @@ -1143,7 +1146,7 @@ void updateRackConfig(cJSON *note){
struct rack_file_t rack_file = buf[rack_num];
// set the data in the rack file
rack_file.free = 0;
memcpy(&rack_file.name,cJSON_GetObjectItemCaseSensitive(rack, "name")->valuestring,24);
memcpy(&rack_file.name, cJSON_GetObjectItemCaseSensitive(rack, "name")->valuestring,24);
// update the breakpoints and layer count
int layer = 0;
cJSON_ArrayForEach(point,break_points)
Expand All @@ -1159,6 +1162,9 @@ void updateRackConfig(cJSON *note){
ESP_ERROR_CHECK(emmc_write(buf,RACK_DIRECTORY_START_BLOCK,RACK_DIRECTORY_BLOCKS));
feedLoopWDT();
free(buf);
// cJSON_Delete(point);
// cJSON_Delete(break_points);
// cJSON_Delete(rack);
}

void updatePinConfig(cJSON *config){
Expand Down
4 changes: 2 additions & 2 deletions src/file_system.h
Original file line number Diff line number Diff line change
Expand Up @@ -327,9 +327,9 @@ size_t get_website_chunk(size_t start_block, size_t toWrite, uint8_t *buffer, si
void init_rack_lut(void);
void write_frack_lut_to_disk(void);
void read_rack_lut_from_disk(void);
void add_rack_to_file_system(char *name, int voice, int note, size_t start_block, size_t size, int layer, cJSON *json);
void add_rack_to_file_system(char *name, int voice, int note, size_t start_block, size_t size, int layer, const char *json);
int get_empty_rack(void);
void add_wav_to_rack(char* name, int rack_index, size_t start_block, size_t size, int layer, cJSON *json);
void add_wav_to_rack(char* name, int rack_index, size_t start_block, size_t size, int layer, const char *json_string);
struct wav_lu_t *get_all_wav_files(size_t *len);
int sort_lut(const void * a, const void * b);
size_t search_directory(struct wav_lu_t *_data, size_t num_data_entries, size_t start, size_t end, size_t file_size);
Expand Down
11 changes: 2 additions & 9 deletions src/server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ char r_name[24];
int r_voice;
int r_note;
int r_layer;
cJSON *r_rack_json;
const char *r_rack_json;
size_t r_start_block;

void handleRack(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total){
Expand All @@ -284,8 +284,7 @@ void handleRack(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_
sscanf(request->getHeader("voice")->value().c_str(), "%d", &r_voice);
sscanf(request->getHeader("note")->value().c_str(), "%d", &r_note);
sscanf(request->getHeader("layer")->value().c_str(), "%d", &r_layer);
// log_i("\nNEW REQUEST %u %ubytes\n",r_layer, total);
r_rack_json = cJSON_Parse(request->getHeader("rack-json")->value().c_str());
r_rack_json = request->getHeader("rack-json")->value().c_str();
r_start_block = find_gap_in_file_system(total);
}
//always
Expand All @@ -296,7 +295,6 @@ void handleRack(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_
//done
close_wav_to_emmc();
add_rack_to_file_system(&r_name[0],r_voice,r_note,r_start_block,total,r_layer,r_rack_json);
free(r_rack_json);
//wav_player_resume();
}
}
Expand Down Expand Up @@ -349,12 +347,7 @@ void handleNewFirmware(AsyncWebServerRequest *request, uint8_t *data, size_t len
}

int rf_bytes_read = 0;
// char rf_firmware_slot;
// size_t rf_gui_size;
size_t rf_firmware_size;
// char rf_gui_name[24];
// char rf_firmware_name[24];


void handleNewRecoveryFirmware(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total){
//once
Expand Down
11 changes: 9 additions & 2 deletions src/wav_player.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@

static const char* TAG = "wav_player";

#define MAX_INT_16 32767
#define MIN_INT_16 -32768

#define wav_player_queue_SIZE 80
#define BLOCK_SIZE 512

Expand Down Expand Up @@ -473,8 +476,12 @@ void wav_player_task(void* pvParameters)
{
tmp16 = scale_sample(tmp16, 127 - bufs[i].fade);
}
// mix into master
output_buf[s] += ( tmp16 >> DAMPEN_BITS );
// mix into master
// output_buf[s] += ( tmp16 >> DAMPEN_BITS );
// mix into master clamped
int next = output_buf[s] + ( tmp16 >> DAMPEN_BITS );
// int16_t next_16 = (int16_t)(next > MAX_INT_16 ? MAX_INT_16 : next < MIN_INT_16 ? MIN_INT_16 : next);
output_buf[s] = (next > MAX_INT_16) ? MAX_INT_16 : (next < MIN_INT_16) ? MIN_INT_16 : next;
// fade
if(bufs[i].fade > 0 && left && odd)
{
Expand Down

0 comments on commit 596993d

Please sign in to comment.