Skip to content

Commit

Permalink
refactor task cores/priorities
Browse files Browse the repository at this point in the history
  • Loading branch information
marchingband committed Jun 4, 2021
1 parent 73c944a commit 4b25156
Show file tree
Hide file tree
Showing 16 changed files with 182 additions and 212 deletions.
6 changes: 6 additions & 0 deletions examples/wvr_basic/wvr_basic.ino
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,24 @@ void on1(void)
// wvr.play(0,40,127);
if(serverOn)
{
log_i("server pause");
wvr.serverPause();
log_i("wifi on %d", get_metadata()->wifi_starts_on);
}
else
{
log_i("server resume");
wvr.serverResume();
log_i("wifi on %d", get_metadata()->wifi_starts_on);
}
serverOn = !serverOn;
}

void setup() {
// put your setup code here, to run once:
wvr.begin();
serverOn = get_metadata()->wifi_starts_on;
log_i("wifi on %d", serverOn);
pinMode(D2, INPUT_PULLUP);
btn1.onPress(on1);
}
Expand Down
4 changes: 4 additions & 0 deletions src/WVR.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ void WVR::play(uint8_t voice, uint8_t note, uint8_t velocity)
{
play_wav(voice,note,velocity);
}
void WVR::stop(uint8_t voice, uint8_t note)
{
stop_wav(voice,note);
}
void WVR::serverPause()
{
server_pause();
Expand Down
1 change: 1 addition & 0 deletions src/WVR.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class WVR {
WVR();
void begin();
void play(uint8_t voice, uint8_t note, uint8_t velocity);
void stop(uint8_t voice, uint8_t note);
void serverPause();
void serverResume();
};
Expand Down
12 changes: 6 additions & 6 deletions src/boot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ void bootFromEmmc(int index)
free(buf);
}

void bootIntoRecoveryMode(void)
void boot_into_recovery_mode(void)
{
int index = -1;
firmware_t *firmware = get_firmware_slot(index);
Expand Down Expand Up @@ -125,14 +125,14 @@ void bootIntoRecoveryMode(void)
int check_for_recovery_mode(void)
{
metadata_t *new_metadata = get_metadata();
if(!new_metadata->should_check_strapping_pin)
{
// do a normal boot
return 1;
}
gpio_reset_pin(gpio_pins[new_metadata->recovery_mode_straping_pin]);
pinMode(wvr_pins[new_metadata->recovery_mode_straping_pin], INPUT_PULLUP);
int res = digitalRead(wvr_pins[new_metadata->recovery_mode_straping_pin]);
log_i("strapping pin %d reads %d",new_metadata->recovery_mode_straping_pin,res);
// if(res == 0) // boot from recovery slot
// {
// log_i("booting in recovery mode!");
// bootFromEmmc(-1);
// }
return res;
}
39 changes: 36 additions & 3 deletions src/file_system.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@
#define FILE_STORAGE_END_BLOCK (RECOVERY_FIRMWARE_START_BLOCK - 1)


char waver_tag[METADATA_TAG_LENGTH] = "wvr_magic_7";
// char waver_tag[METADATA_TAG_LENGTH] = "wvr_magic_10";
char waver_tag[METADATA_TAG_LENGTH] = "wvr_magic_11";
static const char* TAG = "file_system";

// declare prototypes from emmc.c
Expand Down Expand Up @@ -190,10 +191,13 @@ void init_metadata(void){
.num_websites = 10,
.current_firmware_index = -1,
.current_website_index = -1,
.recovery_mode_straping_pin = 5, // button 1 on dev board
.recovery_mode_straping_pin = 5, // button 1 on dev board,
.should_check_strapping_pin = 1, // default to should check
.global_volume = 127,
.wlog_verbosity = 0,
.wifi_starts_on = 1,
.ssid = "WVR",
.passphrase = "12345678"
};
memcpy(new_metadata.tag, waver_tag, METADATA_TAG_LENGTH);
write_metadata(new_metadata);
Expand Down Expand Up @@ -879,7 +883,13 @@ void add_metadata_json(cJSON * RESPONSE_ROOT){
cJSON_AddNumberToObject(RESPONSE_ROOT,"numFirmwares",metadata.num_firmwares);
cJSON_AddNumberToObject(RESPONSE_ROOT,"numWebsites",metadata.num_websites);
cJSON_AddNumberToObject(RESPONSE_ROOT,"currentFirmwareIndex",metadata.current_firmware_index);
cJSON_AddNumberToObject(RESPONSE_ROOT,"currentWebsiteIndex",metadata.current_website_index);
cJSON_AddNumberToObject(RESPONSE_ROOT,"shouldCheckStrappingPin",metadata.should_check_strapping_pin);
cJSON_AddNumberToObject(RESPONSE_ROOT,"recoveryModeStrappingPin",metadata.recovery_mode_straping_pin);
cJSON_AddNumberToObject(RESPONSE_ROOT,"globalVolume",metadata.global_volume);
cJSON_AddNumberToObject(RESPONSE_ROOT,"wLogVerbosity",metadata.wlog_verbosity);
cJSON_AddNumberToObject(RESPONSE_ROOT,"wifiStartsOn",metadata.wifi_starts_on);
cJSON_AddStringToObject(RESPONSE_ROOT,"wifiNetworkName",metadata.ssid);
cJSON_AddStringToObject(RESPONSE_ROOT,"wifiNetworkPassword",metadata.passphrase);
}

void add_pin_config_json(cJSON *RESPONSE_ROOT){
Expand Down Expand Up @@ -1132,6 +1142,29 @@ void updatePinConfig(cJSON *config){
cJSON_Delete(json);
}

void updateMetadata(cJSON *config){
cJSON *json = cJSON_Parse(config);
metadata.global_volume = cJSON_GetObjectItemCaseSensitive(json, "globalVolume")->valueint;
metadata.should_check_strapping_pin = cJSON_GetObjectItemCaseSensitive(json, "shouldCheckStrappingPin")->valueint;
metadata.recovery_mode_straping_pin = cJSON_GetObjectItemCaseSensitive(json, "recoveryModeStrappingPin")->valueint;
metadata.wifi_starts_on = cJSON_GetObjectItemCaseSensitive(json, "wifiStartsOn")->valueint;
metadata.wlog_verbosity = cJSON_GetObjectItemCaseSensitive(json, "wLogVerbosity")->valueint;
memcpy(&metadata.ssid,cJSON_GetObjectItemCaseSensitive(json, "wifiNetworkName")->valuestring,20);
memcpy(&metadata.passphrase,cJSON_GetObjectItemCaseSensitive(json, "wifiNetworkPassword")->valuestring,20);
// metadata.ssid = cJSON_GetObjectItemCaseSensitive(json, "wifiNetworkName")->valuestring;
// metadata.passphrase = cJSON_GetObjectItemCaseSensitive(json, "wifiNetworkPassword")->valuestring;
write_metadata(metadata);
wlog_i("gv:%d scsp:%d rmsp:%d wso:%d wlv:%d",
metadata.global_volume,
metadata.should_check_strapping_pin,
metadata.recovery_mode_straping_pin,
metadata.wifi_starts_on,
metadata.wlog_verbosity
);
wlog_i("updated and saved metadata");
cJSON_Delete(json);
}

/**
* file system starts empty.
* when browser starts up, it receives JSON of the file system.
Expand Down
8 changes: 7 additions & 1 deletion src/file_system.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,13 +94,18 @@ struct metadata_t {
int current_website_index;
// struct pin_config_t pin_config[14];
///new
int recovery_mode_straping_pin;
size_t recovery_firmware_size;
int recovery_mode_straping_pin;
uint8_t global_volume;
uint8_t wlog_verbosity;
uint8_t wifi_starts_on;
uint8_t should_check_strapping_pin;
char ssid[20];
char passphrase[20];
};

// struct metadata_t metadata;

struct wav_lu_t {
size_t length;
size_t start_block;
Expand Down Expand Up @@ -337,6 +342,7 @@ 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);
void current_bank_up(void);
void current_bank_down(void);
struct metadata_t *get_metadata(void);

#ifdef __cplusplus
}
Expand Down
2 changes: 1 addition & 1 deletion src/midi_in.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,6 @@ static void read_uart_task()
void midi_init(void)
{
init_gpio();
xTaskCreatePinnedToCore(read_uart_task, "read_uart_task", 4096, NULL, 9, NULL, 1);
xTaskCreatePinnedToCore(read_uart_task, "read_uart_task", 4096, NULL, 3, NULL, 0);
// xTaskCreatePinnedToCore(read_uart_task, "read_uart_task", 4096, NULL, 3, NULL, 1);
}
22 changes: 8 additions & 14 deletions src/rpc.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,15 @@ QueueHandle_t rpc_out_queue;
TaskHandle_t rpc_out_task_handle;
BaseType_t task_return;

#define NO_RPC_OUT 1

// wav_player.c
// int play_wav(uint8_t voice, uint8_t note, uint8_t velocity);
// int stop_wav(uint8_t voice, uint8_t note);
// server.cpp
// void server_pause(void);
// void server_resume(void);
#define NO_RPC_OUT 0

void sendWSMsg(char* msg);

void rpc_out(int procedure, int arg0, int arg1, int arg2)
{
if(ARDUHAL_LOG_LEVEL == ARDUHAL_LOG_LEVEL_NONE) return;
if(NO_RPC_OUT) return;
wlog_i("rpc_out called");
wlog_d("rpc_out called");
struct rpc_event_t rpc_event_out;
rpc_event_out.procedure = procedure;
rpc_event_out.arg0 = arg0;
Expand Down Expand Up @@ -61,7 +54,7 @@ char* on_rpc_in(cJSON *json)
uint8_t voice = cJSON_GetObjectItemCaseSensitive(json, "voice")->valueint;
uint8_t note = cJSON_GetObjectItemCaseSensitive(json, "note")->valueint;
stop_wav(voice, note);
char * res = "started wav";
char * res = "stopped wav";
return(res);
break;
}
Expand All @@ -77,11 +70,11 @@ void rpc_out_task(void* pvParameters)
if(xQueueReceive(rpc_out_queue, (void *)&event, (portTickType)portMAX_DELAY))
{

wlog_i("rpc_out_task received event");
log_v("rpc_out_task received event");
cJSON *rpc_root = cJSON_CreateObject();
switch(event.procedure){
case RPC_NOTE_ON:
wlog_i("rpc note on");
wlog_d("rpc note on");
cJSON_AddNumberToObject(rpc_root, "procedure", RPC_NOTE_ON);
cJSON_AddNumberToObject(rpc_root, "voice", event.arg0);
cJSON_AddNumberToObject(rpc_root, "note", event.arg1);
Expand All @@ -95,9 +88,10 @@ void rpc_out_task(void* pvParameters)
default: break;
}
char *json = cJSON_PrintUnformatted(rpc_root);
// wlog_i("json: %s",json);
log_v(" rpc json: %s",json);
sendWSMsg(json);
cJSON_Delete(rpc_root);
// sendWSMsg("hit");
}
}
}
Expand All @@ -107,5 +101,5 @@ void rpc_init(void)
// rpc_in_queue = xQueueCreate(20, sizeof(struct rpc_event_t));
rpc_out_queue = xQueueCreate(20, sizeof(struct rpc_event_t));
// task_return = xTaskCreate(rpc_in_task,"rpc_in_task", 1024, NULL, 1, rpc_in_task_handle);
task_return = xTaskCreate(rpc_out_task,"rpc_out_task", 1024 * 4, NULL, 1, rpc_out_task_handle);
task_return = xTaskCreatePinnedToCore(rpc_out_task,"rpc_out_task", 1024 * 4, NULL, 3, rpc_out_task_handle,0);
}
56 changes: 49 additions & 7 deletions src/server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ extern "C" void add_wav_to_file_system(char *name,int voice,int note,size_t star
extern "C" size_t place_wav(struct lut_t *_data, size_t num_data_entries, size_t start, size_t end, size_t file_size);
extern "C" void updateVoiceConfig(char* json);
extern "C" void updatePinConfig(char* json);
extern "C" void updateMetadata(char* json);
extern "C" char* on_rpc_in(cJSON* json);
extern "C" char* write_recovery_firmware_to_emmc(uint8_t* source, size_t size);
extern "C" char* close_recovery_firmware_to_emmc(size_t recovery_firmware_size);
Expand Down Expand Up @@ -241,6 +242,28 @@ void handleUpdatePinConfig(AsyncWebServerRequest *request, uint8_t *data, size_t
}
}

uint8_t *metadata_json = NULL;

void handleUpdateMetadata(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total){
if(index==0){
//start
metadata_json = (uint8_t*)ps_malloc(total);
if(!metadata_json){
wlog_i("failed to malloc for metadata json");
}
}
//always
for(int i=0;i<len;i++){
metadata_json[i + index] = data[i];
}
if(index + len == total){
//done
updateMetadata((char *)metadata_json);
free(metadata_json);
request->send(200, "text/plain", "all done pin config update");
}
}

int w_bytes_read = 0;
char w_name[21];
int w_voice;
Expand Down Expand Up @@ -492,19 +515,28 @@ void _server_pause(){
void server_begin() {
Serial.println("Configuring access point...");

WiFi.mode(WIFI_AP); //Access Point mode
WiFi.softAP("ESPWebServer", "12345678");
WiFi.mode(WIFI_AP);

IPAddress IP = IPAddress (192, 168, 5, 18);
IPAddress gateway = IPAddress (192, 168, 5, 20);
IPAddress NMask = IPAddress (255, 255, 255, 0);

WiFi.softAPConfig(IP, gateway, NMask);

WiFi.softAP(metadata.ssid, metadata.passphrase);
log_i("set ssid :%s, set passphrase: %s",metadata.ssid, metadata.passphrase);

// again??
WiFi.softAPConfig(IP, gateway, NMask);

IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP);

server.on(
"/",
HTTP_GET,
[](AsyncWebServerRequest *request){
request->send(200, "text/html", MAIN_page);
}
handleMain
);

server.on(
Expand Down Expand Up @@ -557,6 +589,14 @@ void server_begin() {
handleUpdatePinConfig
);

server.on(
"/updateMetadata",
HTTP_POST,
[](AsyncWebServerRequest * request){request->send(204);},
NULL,
handleUpdateMetadata
);

server.on(
"/addfirmware",
HTTP_POST,
Expand Down Expand Up @@ -616,9 +656,11 @@ void server_begin() {
}

void server_pause(void){
_server_pause();
// _server_pause();
WiFi.mode(WIFI_OFF);
}

void server_resume(void){
server_begin();
// server_begin();
WiFi.mode(WIFI_AP);
}
2 changes: 2 additions & 0 deletions src/server.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#ifndef SERVER_H
#define SERVER_H

#include <ESPAsyncWebServer.h>

void server_pause();
void server_resume();

Expand Down
Loading

0 comments on commit 4b25156

Please sign in to comment.