Skip to content

Commit

Permalink
first commit
Browse files Browse the repository at this point in the history
  • Loading branch information
marchingband committed May 30, 2021
0 parents commit 73c944a
Show file tree
Hide file tree
Showing 41 changed files with 5,579 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.vscode
.DS_Store
43 changes: 43 additions & 0 deletions examples/wvr_basic/wvr_basic.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#include <wvr_pins.h>
#include <button_struct.h>
#include <ws_log.h>
#include <wvr_ui.h>
#include <WVR.h>
#include <midiXparser.h>
#include <midi_in.h>
#include <wav_player.h>
#include <button.h>
#include <rpc.h>
#include <file_system.h>
#include <wvr_0.3.h>

WVR wvr;
Button btn1(D2, FALLING, 300);

bool serverOn = true;

void on1(void)
{
// wvr.play(0,40,127);
if(serverOn)
{
wvr.serverPause();
}
else
{
wvr.serverResume();
}
serverOn = !serverOn;
}

void setup() {
// put your setup code here, to run once:
wvr.begin();
pinMode(D2, INPUT_PULLUP);
btn1.onPress(on1);
}

void loop() {
// put your main code here, to run repeatedly:
vTaskDelay(portMAX_DELAY);
}
32 changes: 32 additions & 0 deletions keywords.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Syntax Coloring Map For ExampleLibrary

# Datatypes (KEYWORD1)

# Methods and Functions (KEYWORD2)
onPress KEYWORD2
onRelease KEYWORD2
play KEYWORD2
serverPause KEYWORD2
serverResume KEYWORD2

# Instances (KEYWORD2)
WVR KEYWORD2
Button KEYWORD2

# Structures KEYWORD3
wav_player_event_t KEYWORD3

# Constants (LITERAL1)
D0 LITERAL1
D1 LITERAL1
D2 LITERAL1
D3 LITERAL1
D4 LITERAL1
D5 LITERAL1
D6 LITERAL1
D7 LITERAL1
D8 LITERAL1
D9 LITERAL1
D10 LITERAL1
D11 LITERAL1
D12 LITERAL1
33 changes: 33 additions & 0 deletions library.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"name":"WVR",
"description":"Firmware for WVR, the ESP32 Audio Board",
"keywords":"wvr,audio,esp32",
"authors":
{
"name": "Andrew March",
"maintainer": true
},
"repository":
{
"type": "git",
"url": "https://github.com/marchingband/WVR.git"
},
"version": "0.0.1",
"license": "LGPL-3.0",
"frameworks": "arduino",
"platforms": ["espressif32"],
"dependencies": [
{
"name": "AsyncTCP",
"platforms": "espressif32"
},
{
"name": "ESPAsyncWebServer",
"platforms": "espressif32"
},
{
"name": "Adafruit_NeoPixel",
"platforms": "espressif32"
}
]
}
10 changes: 10 additions & 0 deletions library.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name=WVR
version=0.1.1
author=Andrew March
maintainer=Andrew March
sentence=Firmware for WVR, the ESP32 Audio Board
paragraph=Firmware for WVR, the ESP32 Audio Board
category=Other
url=https://github.com/marchingband/WVR
architectures=*
depends=AsyncTCP,ESPAsyncWebServer,Adafruit_NeoPixel
26 changes: 26 additions & 0 deletions src/WVR.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#include "Arduino.h"
#include "WVR.h"
#include "wvr_0.3.h"
#include "wav_player.h"
#include "server.h"

WVR::WVR()
{
}

void WVR::begin()
{
wvr_init();
}
void WVR::play(uint8_t voice, uint8_t note, uint8_t velocity)
{
play_wav(voice,note,velocity);
}
void WVR::serverPause()
{
server_pause();
}
void WVR::serverResume()
{
server_resume();
}
20 changes: 20 additions & 0 deletions src/WVR.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
WVR.h - Library for building WVR firmware.
Created by Andrew March, May 20, 2021.
Released into the public domain.
*/
#ifndef WVR_H
#define WVR_H

#include "Arduino.h"

class WVR {
public:
WVR();
void begin();
void play(uint8_t voice, uint8_t note, uint8_t velocity);
void serverPause();
void serverResume();
};

#endif
138 changes: 138 additions & 0 deletions src/boot.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
#include <Update.h>
#include "esp_ota_ops.h"
#include "esp_image_format.h"
#include "driver/sdmmc_host.h"
#include "esp_system.h"
#include "file_system.h"
#include "wvr_pins.h"

extern "C" esp_err_t emmc_read(void *dst, size_t start_sector, size_t sector_count);
extern "C" struct metadata_t *get_metadata(void);
extern "C" void write_metadata(struct metadata_t m);

void bootFromEmmc(int index)
{
firmware_t *firmware = get_firmware_slot(index);
log_i("booting firmware index %d, length %d, start_block %d", index, firmware->length, firmware->start_block);
bool ret = Update.begin(firmware->length);
if(!ret){
log_e("not enough space in flash to boot this firmware");
return;
}
size_t num_sectors = firmware->length / SECTOR_SIZE;
size_t remaining = firmware->length % SECTOR_SIZE;
size_t sector = firmware->start_block;
uint8_t *buf = (uint8_t *)ps_malloc(SECTOR_SIZE);

log_i("starting update");
for(int i=0;i<num_sectors;i++){
feedLoopWDT();
ESP_ERROR_CHECK(emmc_read(buf,sector++,1));
size_t written = Update.write(buf, SECTOR_SIZE);
if(written != SECTOR_SIZE){
log_e("didn't finish writting sector");
Update.abort();
break;
} else {
printf(".");
}
}
ESP_ERROR_CHECK(emmc_read(buf,sector++,1));
size_t written = Update.write(buf, remaining);
if(written != remaining){
log_e("didn't finish writting sector");
Update.abort();
} else {
log_e("done writting");
}
feedLoopWDT();
if(Update.end()){
if(Update.isFinished()){
log_e("success");
free(buf);
metadata_t *new_metadata = get_metadata();
new_metadata->current_firmware_index = index;
new_metadata->current_website_index = index;
write_metadata(*new_metadata);
sdmmc_host_deinit();
feedLoopWDT();
// delay(1000);
ESP.restart();
} else {
log_e("Update.isFinished() : false");
}
} else {
log_e("Update.end() : false");
}
free(buf);
}

void bootIntoRecoveryMode(void)
{
int index = -1;
firmware_t *firmware = get_firmware_slot(index);
log_i("booting firmware index %d, length %d, start_block %d", index, firmware->length, firmware->start_block);
bool ret = Update.begin(firmware->length);
if(!ret){
log_e("not enough space in flash to boot this firmware");
return;
}
size_t num_sectors = firmware->length / SECTOR_SIZE;
size_t remaining = firmware->length % SECTOR_SIZE;
size_t sector = firmware->start_block;
uint8_t *buf = (uint8_t *)ps_malloc(SECTOR_SIZE);

log_i("starting update");
for(int i=0;i<num_sectors;i++){
ESP_ERROR_CHECK(emmc_read(buf,sector++,1));
size_t written = Update.write(buf, SECTOR_SIZE);
if(written != SECTOR_SIZE){
log_e("didn't finish writting sector");
Update.abort();
break;
} else {
printf(".");
}
}
ESP_ERROR_CHECK(emmc_read(buf,sector++,1));
size_t written = Update.write(buf, remaining);
if(written != remaining){
log_e("didn't finish writting sector");
Update.abort();
} else {
log_e("done writting");
}
if(Update.end()){
if(Update.isFinished()){
log_e("success");
free(buf);
metadata_t *new_metadata = get_metadata();
new_metadata->current_firmware_index = index;
write_metadata(*new_metadata);
// sdmmc_host_deinit();
// feedLoopWDT();
// delay(1000);
ESP.restart();
} else {
log_e("Update.isFinished() : false");
}
} else {
log_e("Update.end() : false");
}
free(buf);
}

int check_for_recovery_mode(void)
{
metadata_t *new_metadata = get_metadata();
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;
}
8 changes: 8 additions & 0 deletions src/boot.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#ifndef BOOT_H
#define BOOT_H

void bootFromEmmc(int index);
int check_for_recovery_mode(void);
void bootIntoRecoveryMode(void);

#endif
Loading

0 comments on commit 73c944a

Please sign in to comment.