arduino-audio-tools
All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Modules Pages
AudioPlayerProtocolServer.h
1#pragma once
2#include "AudioPlayerProtocol.h"
3#include "AudioTools/CoreAudio/BaseStream.h"
4#include "AudioTools/CoreAudio/Buffers.h"
5#include "HttpServer.h"
6
7namespace audio_tools {
8
9/***
10 * @brief Audio Player Protocol Server: We can use the indicated protocol over
11 * http to control the audio player provided by the audiotools.
12 * @author Phil Schatzmann
13 */
15 public:
18 AudioPlayer& player, int port = 80,
19 const char* ssid = nullptr,
20 const char* pwd = nullptr) {
21 setProtocol(protocol);
22 setPlayer(player);
23 setPort(port);
24 setSSID(ssid);
25 setPassword(pwd);
26 }
27
30
32 void setPlayer(AudioPlayer& player) { p_protocol->setPlayer(player); }
33
34 void setPort(int port) { this->port = port; }
35 void setSSID(const char* ssid) { this->ssid = ssid; }
36 void setPassword(const char* password) { this->password = password; }
37 void setSSID(const char* ssid, const char* password) {
38 this->ssid = ssid;
39 this->password = password;
40 }
41
42 bool begin() {
43 context[0] = this;
44 server.on("/", T_GET, parse, context.data(), context.size());
45
46 // connect to WIFI
47 if (ssid != nullptr && password != nullptr) {
48 return server.begin(port, ssid, password);
49 }
50 return server.begin(port);
51 }
52
53 void loop() { server.copy(); }
54 void copy() { server.copy(); }
55
57 void setBufferSize(int size) { buffer_size = size; }
58
59 void setProtocol(AudioPlayerProtocol& protocol) {
60 this->p_protocol = &protocol;
61 }
62
63 protected:
64 WiFiServer wifi;
65 HttpServer server{wifi};
66 AudioPlayerProtocol* p_protocol;
67 RingBuffer<uint8_t> ringBuffer{0};
68 QueueStream<uint8_t> queueStream{ringBuffer};
69 Vector<void*> context{1};
70 int port = 80;
71 const char* ssid = nullptr;
72 const char* password = nullptr;
73 int buffer_size = 512;
74
75 static void parse(HttpServer* server, const char* requestPath,
76 HttpRequestHandlerLine* hl) {
77 LOGI("parse: %s", requestPath);
79 self->ringBuffer.resize(self->buffer_size);
80 QueueStream<uint8_t>& queueStream = self->queueStream;
81 queueStream.begin();
82 bool ok = self->p_protocol->processCommand(requestPath, queueStream);
83 LOGI("available: %d", queueStream.available());
84 server->reply("text/plain", queueStream, queueStream.available(),
85 ok ? 200 : 400, ok ? SUCCESS : "Error");
86 self->ringBuffer.resize(0);
87 }
88};
89
90} // namespace audio_tools
Implements a simple audio player which supports the following commands:
Definition AudioPlayer.h:38
Definition AudioPlayerProtocol.h:11
virtual void setPlayer(AudioPlayer &player)
Defines the player.
Definition AudioPlayerProtocol.h:25
Definition AudioPlayerProtocolServer.h:14
AudioPlayerProtocolServer()=default
Empty constructor: call setPlayer to define the player.
void setPlayer(AudioPlayer &player)
Defines the player.
Definition AudioPlayerProtocolServer.h:32
AudioPlayerProtocolServer(AudioPlayerProtocol &protocol, AudioPlayer &player, int port=80, const char *ssid=nullptr, const char *pwd=nullptr)
Default constructor.
Definition AudioPlayerProtocolServer.h:17
void setBufferSize(int size)
Defines the buffer size that is made available for the http reply.
Definition AudioPlayerProtocolServer.h:57
virtual bool begin() override
Activates the output.
Definition BaseStream.h:336
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition AudioCodecsBase.h:10