-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit ecb0e41
Showing
55 changed files
with
4,986 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
# Prerequisites | ||
*.d | ||
|
||
# Compiled Object files | ||
*.slo | ||
*.lo | ||
*.o | ||
*.obj | ||
|
||
# Precompiled Headers | ||
*.gch | ||
*.pch | ||
|
||
# Compiled Dynamic libraries | ||
*.so | ||
*.dylib | ||
*.dll | ||
|
||
# Fortran module files | ||
*.mod | ||
*.smod | ||
|
||
# Compiled Static libraries | ||
*.lai | ||
*.la | ||
*.a | ||
*.lib | ||
|
||
# Executables | ||
*.exe | ||
*.out | ||
*.app | ||
|
||
.idea | ||
cmake-build-debug | ||
build | ||
.vscode |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
cmake_minimum_required(VERSION 3.15) | ||
project(Spencer-lib) | ||
set(PORT /dev/ttyUSB0) | ||
set(DEVICE cm:esp32:ringo) | ||
set(CMAKE_CXX_STANDARD 11) | ||
|
||
if(WIN32 OR CYGWIN) | ||
set(Arduino15 $ENV{APPDATA}/../Local/Arduino15) | ||
set(ArduinoLibs $ENV{USERPROFILE}/Documents/Arduino/libraries) | ||
|
||
string(REPLACE "\\" "/" Arduino15 ${Arduino15}) | ||
string(REPLACE "\\" "/" ArduinoLibs ${ArduinoLibs}) | ||
|
||
if(${CYGWIN}) | ||
string(REGEX REPLACE "^([A-Za-z]):" "/cygdrive/\\1" Arduino15 ${Arduino15}) | ||
string(REGEX REPLACE "^([A-Za-z]):" "/cygdrive/\\1" ArduinoLibs ${ArduinoLibs}) | ||
endif() | ||
else() | ||
set(Arduino15 ~/.arduino15) | ||
set(ArduinoLibs ~/Arduino/libraries) | ||
endif() | ||
|
||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/libraries/Wire/src) | ||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/libraries/FS/src) | ||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/libraries/SD/src) | ||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/libraries/SPI/src) | ||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/libraries/WiFi/src) | ||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/libraries/SPIFFS/src) | ||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/libraries/HTTPClient/src) | ||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/libraries/WebServer/src) | ||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/libraries/DNSServer/src) | ||
|
||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/cores/esp32) | ||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/tools/sdk) | ||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/tools/sdk/include) | ||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/tools/sdk/include/esp32) | ||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/tools/sdk/include/freertos) | ||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/tools/sdk/include/driver) | ||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/tools/sdk/include/driver/driver) | ||
include_directories(${Arduino15}/packages/cm/hardware/esp32/1.0.4/tools/sdk/include/spi_flash) | ||
|
||
include_directories(${ArduinoLibs}/CircuitOS/src) | ||
include_directories(${ArduinoLibs}/TFT_eSPI) | ||
include_directories(${ArduinoLibs}/TFT_eSPI/Extensions) | ||
include_directories(${ArduinoLibs}/ESP8266Audio/src) | ||
include_directories(${ArduinoLibs}/SerialFlash) | ||
include_directories(${ArduinoLibs}/ArduinoJson/src) | ||
include_directories(${ArduinoLibs}/NTPClient) | ||
|
||
|
||
AUX_SOURCE_DIRECTORY(src SOURCES) | ||
AUX_SOURCE_DIRECTORY(src/DataStream SOURCES) | ||
AUX_SOURCE_DIRECTORY(src/Intent SOURCES) | ||
AUX_SOURCE_DIRECTORY(src/Intent/Funpack SOURCES) | ||
AUX_SOURCE_DIRECTORY(src/LEDmatrix SOURCES) | ||
AUX_SOURCE_DIRECTORY(src/Services SOURCES) | ||
AUX_SOURCE_DIRECTORY(src/Services/Audio SOURCES) | ||
AUX_SOURCE_DIRECTORY(src/Services/LocationService SOURCES) | ||
AUX_SOURCE_DIRECTORY(src/Services/TimeService SOURCES) | ||
AUX_SOURCE_DIRECTORY(src/SetupServer SOURCES) | ||
AUX_SOURCE_DIRECTORY(src/Speech SOURCES) | ||
AUX_SOURCE_DIRECTORY(src/State SOURCES) | ||
AUX_SOURCE_DIRECTORY(src/Util SOURCES) | ||
|
||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build) | ||
|
||
add_definitions(-DDEBUG) | ||
add_definitions(-DESP32) | ||
|
||
SET_SOURCE_FILES_PROPERTIES(${CMAKE_PROJECT_NAME}.ino PROPERTIES LANGUAGE CXX) | ||
|
||
add_custom_command(OUTPUT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_PROJECT_NAME}.ino.elf | ||
COMMAND arduino-cli compile --fqbn ${DEVICE} --output-dir ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${CMAKE_PROJECT_NAME}.ino | ||
DEPENDS ${CMAKE_PROJECT_NAME}.ino ${SOURCES} | ||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) | ||
|
||
add_custom_target(CMBuild | ||
SOURCES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_PROJECT_NAME}.ino.elf) | ||
|
||
add_custom_target(CMUpload ALL | ||
COMMAND arduino-cli upload --fqbn ${DEVICE} -p ${PORT} --input-dir ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} | ||
DEPENDS CMBuild | ||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) | ||
|
||
add_executable(${CMAKE_PROJECT_NAME}.bin ${CMAKE_PROJECT_NAME}.ino ${SOURCES}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
#include <Arduino.h> | ||
#include "src/Spencer.hpp" | ||
Spencer spencer; | ||
void setup(){ | ||
spencer.begin(); | ||
} | ||
|
||
void loop(){ | ||
|
||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
#ifndef SPENCER_ASYNCPROCESSOR_HPP | ||
#define SPENCER_ASYNCPROCESSOR_HPP | ||
|
||
|
||
#include <Sync/Semaphore.h> | ||
#include <Sync/Mutex.h> | ||
#include <queue> | ||
#include <Util/Task.h> | ||
|
||
template<typename T> | ||
class AsyncProcessor { | ||
public: | ||
|
||
/** | ||
* Add a job to the queue. When completed, Xjob.result will point to an instance of XResult. | ||
* Ownership of the object is transferred to the caller, and should be deallocated after use. | ||
* * @param job | ||
*/ | ||
void addJob(const T& job); | ||
|
||
protected: | ||
AsyncProcessor(const char* name, uint16_t queueSize = 1); | ||
|
||
virtual void doJob(const T& job) = 0; | ||
|
||
private: | ||
Task task; | ||
Semaphore semaphore; | ||
std::queue<T> jobs; | ||
Mutex jobsMutex; | ||
|
||
[[noreturn]] static void taskFunc(Task* task); | ||
|
||
}; | ||
|
||
template<typename T> | ||
AsyncProcessor<T>::AsyncProcessor(const char* name, uint16_t queueSize) : task(name, taskFunc, 8192, this), semaphore(queueSize){ | ||
task.start(1, 0); | ||
} | ||
|
||
template<typename T> | ||
void AsyncProcessor<T>::addJob(const T& job){ | ||
jobsMutex.lock(); | ||
jobs.push(job); | ||
jobsMutex.unlock(); | ||
|
||
semaphore.signal(); | ||
} | ||
|
||
template<typename T> | ||
void AsyncProcessor<T>::taskFunc(Task* task){ | ||
AsyncProcessor<T>* proc = static_cast<AsyncProcessor<T>*>(task->arg); | ||
|
||
while(task->running){ | ||
if(!proc->semaphore.wait()) continue; | ||
|
||
proc->jobsMutex.lock(); | ||
if(proc->jobs.empty()){ | ||
proc->jobsMutex.unlock(); | ||
continue; | ||
} | ||
|
||
T job = proc->jobs.front(); | ||
proc->jobs.pop(); | ||
proc->jobsMutex.unlock(); | ||
|
||
proc->doJob(job); | ||
} | ||
} | ||
|
||
#endif //SPENCER_ASYNCPROCESSOR_HPP |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
#include "AudioFileSourceRAM.h" | ||
|
||
AudioFileSourceRAM::AudioFileSourceRAM() | ||
{ | ||
f = nullptr; | ||
fileSize = 0; | ||
pos = 0; | ||
} | ||
AudioFileSourceRAM::AudioFileSourceRAM(void* dataPointer, size_t size) | ||
{ | ||
open(dataPointer, size); | ||
} | ||
|
||
bool AudioFileSourceRAM::open(const char *filename) | ||
{ | ||
return false; | ||
} | ||
|
||
bool AudioFileSourceRAM::open(void* dataPointer, size_t size) | ||
{ | ||
if(dataPointer == nullptr || size == 0) return false; | ||
f = dataPointer; | ||
fileSize = size; | ||
pos = 0; | ||
} | ||
|
||
AudioFileSourceRAM::~AudioFileSourceRAM() | ||
{ | ||
if(isOpen()) | ||
{ | ||
delete f; | ||
} | ||
} | ||
|
||
uint32_t AudioFileSourceRAM::read(void *data, uint32_t rdlen) | ||
{ | ||
uint8_t *p = (uint8_t *)data; | ||
if(pos + rdlen > fileSize) { | ||
if (pos >= fileSize) return 0; | ||
rdlen = fileSize - pos; | ||
} | ||
memcpy(data, f + pos, rdlen); | ||
pos += rdlen; | ||
return rdlen; | ||
} | ||
|
||
bool AudioFileSourceRAM::seek(int32_t _pos, int dir) | ||
{ | ||
if(dir == SEEK_CUR && _pos > (fileSize - 1)) return false; | ||
switch (dir) | ||
{ | ||
case SEEK_SET: | ||
pos = 0; | ||
break; | ||
case SEEK_END: | ||
pos = fileSize - 1; | ||
break; | ||
default: | ||
pos = _pos; | ||
break; | ||
} | ||
return true; | ||
} | ||
|
||
bool AudioFileSourceRAM::close() | ||
{ | ||
f = nullptr; | ||
fileSize = 0; | ||
pos = 0; | ||
return true; | ||
} | ||
|
||
bool AudioFileSourceRAM::isOpen() | ||
{ | ||
if(f == nullptr || fileSize == 0) return false; | ||
else return true; | ||
} | ||
|
||
uint32_t AudioFileSourceRAM::getSize() | ||
{ | ||
if (!isOpen()) return 0; | ||
return fileSize; | ||
|
||
} | ||
uint32_t AudioFileSourceRAM::getPos() | ||
{ | ||
if (!isOpen()) return 0; | ||
return fileSize; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
#ifndef SPENCER_AUDIOFILESOURCERAM_H | ||
#define SPENCER_AUDIOFILESOURCERAM_H | ||
|
||
#include <AudioFileSource.h> | ||
#include <SerialFlash.h> | ||
|
||
|
||
class AudioFileSourceRAM : public AudioFileSource | ||
{ | ||
public: | ||
AudioFileSourceRAM(); | ||
AudioFileSourceRAM(void* dataPointer, size_t size); | ||
virtual ~AudioFileSourceRAM() override; | ||
|
||
virtual bool open(const char *filename) override; | ||
bool open(void* dataPointer, size_t size); | ||
virtual uint32_t read(void *data, uint32_t len) override; | ||
virtual bool seek(int32_t pos, int dir) override; | ||
virtual bool close() override; | ||
virtual bool isOpen() override; | ||
virtual uint32_t getSize() override; | ||
virtual uint32_t getPos() override; | ||
private: | ||
void* f; | ||
size_t fileSize; | ||
uint32_t pos; | ||
}; | ||
|
||
|
||
#endif |
Oops, something went wrong.