Skip to content

Commit

Permalink
starting commit
Browse files Browse the repository at this point in the history
  • Loading branch information
MiLeG committed Nov 29, 2020
0 parents commit ecb0e41
Show file tree
Hide file tree
Showing 55 changed files with 4,986 additions and 0 deletions.
37 changes: 37 additions & 0 deletions .gitignore
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
85 changes: 85 additions & 0 deletions CMakeLists.txt
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})
11 changes: 11 additions & 0 deletions Spencer-lib.ino
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(){


}
71 changes: 71 additions & 0 deletions src/AsyncProcessor.hpp
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
89 changes: 89 additions & 0 deletions src/Audio/AudioFileSourceRAM.cpp
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;
}
30 changes: 30 additions & 0 deletions src/Audio/AudioFileSourceRAM.h
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
Loading

0 comments on commit ecb0e41

Please sign in to comment.