#include "domain/AidStrategy.h" #include "utils/Time.h" #include "config/config.h" void AidStrategy::setup() {} void AidStrategy::process() { _writeToPrecedingBuffer(_audio); if (_isNoiseDetected(_audio)) { _recordAudio(_audio); } } void AidStrategy::_writeToPrecedingBuffer(Audio* audioSource) { if (!_isWritingToPrecedingBuffer && !_recordingAudio) { _isWritingToPrecedingBuffer = true; audioSource->writeToPrecedingBuffer(); _isWritingToPrecedingBuffer = false; } } bool AidStrategy::_isNoiseDetected(Audio* audioSource) { return audioSource->isNoiseDetected(); } void AidStrategy::_recordAudio(Audio* audioSource) { if (_recordingAudio) return; Serial.println("!!!"); bool isReady = false; _recordingAudio = true; isReady = _ready(); if (!isReady) return; if (_http->connect(RAT_IP, RAT_PORT)) { Serial.println("========================================"); Serial.println("| RECORDING..."); audioSource->record(); Serial.println("| Recording finished"); _sendAudio(audioSource); _http->stop(); } else { Serial.println("| Connection failed"); } _recordingAudio = false; } String AidStrategy::_ready() { return _http->send("POST", "/aid/ready", RAT_IP, RAT_PORT, "", ""); } void AidStrategy::_sendAudio(Audio* audioSource) { String payloadStart = _formPayloadStart(_audio->getStartMicros()); String payloadEnd = _formPayloadEnd(); int audioLength = _audio->getSize(); int jsonLength = payloadStart.length() + audioLength + payloadEnd.length(); _http->printHeader("POST", "/aid/save", RAT_IP, "application/json"); _http->printContentLength(jsonLength); this->_printContent(payloadStart, payloadEnd, _http->getClient()); } void AidStrategy::_printContent(String payloadStart, String payloadEnd, Stream* stream) { stream->print(payloadStart); _audio->print(stream); stream->print(payloadEnd); _logContent(payloadStart, payloadEnd); } void AidStrategy::_logContent(String payloadStart, String payloadEnd) { Serial.print("| "); Serial.print(payloadStart); Serial.print("..."); Serial.print(payloadEnd); } String AidStrategy::_formPayloadStart(unsigned long startMicros) { String payloadStart = ""; payloadStart += "{\"audio\":{\"micros\":"; payloadStart += String(_audio->getStartMicros() - _timeModule.getInitialMicros()); payloadStart += ",\"initialTime\":"; payloadStart += String(_timeModule.getInitialTime()); payloadStart += ",\"content\":\""; return payloadStart; } String AidStrategy::_formPayloadEnd() { return "\"}}\r\n\r\n"; }