running voip and url streaming code, while the streaming is working fine but when if toggeled to voip mode I'm receiving the error
#include <Arduino.h>
#include "WiFi.h"
#include <WiFiManager.h>
#include "Audio.h"
#include "SipMachine.h"
#include "Debug.h"
#include "driver/i2s.h"
Audio audio;
String user = "100";
String pwd = "100";
//String userAgent = "100";
String serverIp = "192.168.0.205";
String telNr = "100";
int SIPServerEnabled = 0;
int IsAlreadyEnabled = 0;
int audioi2sinit = 0;
int i2sinitok = 0;
SipMachine sipMachine = SipMachine(user, pwd, telNr, serverIp, serverIp);
SipMachine::Status status;
#define I2S_NUM_TXRX I2S_NUM_0
#define PIN_I2S_BCLK 26
#define PIN_I2S_WS 27
#define PIN_I2S_DIN 34
#define PIN_I2S_DOUT 25
const unsigned long event = 1000000;
void i2s_init() {
static const i2s_port_t i2s_num = I2S_NUM_0;
static const i2s_config_t i2s_config = { .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX),
.sample_rate = 8000,
.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
.communication_format = (i2s_comm_format_t)(I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB),
.intr_alloc_flags = 0,
.dma_buf_count = 4,
.dma_buf_len = 256,
.use_apll = 0,
.tx_desc_auto_clear = true,
.fixed_mclk = -1 };
static const i2s_pin_config_t pin_config = { .bck_io_num = 26, // The bit clock connectiom, goes to pin 27 of ESP32
.ws_io_num = 27, // Word select, also known as word select or left right clock
.data_out_num = 25, // Data out from the ESP32, connect to DIN on 38357A
.data_in_num = 34 };
i2s_driver_install(i2s_num, &i2s_config, 0, NULL);
i2s_set_pin(i2s_num, &pin_config);
}
// i2s_set_clk(I2S_NUM, rate, BPS, I2S_CHANNEL_STEREO);
void audioplay() {
audio.setPinout(PIN_I2S_BCLK, PIN_I2S_WS, PIN_I2S_DOUT);
audio.setVolume(12); // 0...21
audio.connecttohost("192.168.0.205/mallipoo.mp3");
}
void wifiEvent(WiFiEvent_t event) {
switch (event) {
case SYSTEM_EVENT_STA_GOT_IP:
Serial.println("WIFISTA Connected");
Serial.print("WIFISTA MAC: ");
Serial.print(WiFi.macAddress());
Serial.print(", IPv4: ");
Serial.println(WiFi.localIP());
break;
case SYSTEM_EVENT_STA_DISCONNECTED:
Serial.println("WIFISTA Disconnected");
WiFi.reconnect();
break;
default:
break;
}
}
void sipMachineEvent(int code) {
Serial.println("response=>");
Serial.print(code);
switch (code) {
case SIPMACHINE_EVENT_REGISTER_OK:
Serial.println("REGISTER OK");
break;
case SIPMACHINE_EVENT_BYE:
Serial.println(sipMachine.getTelNrIncomingCall() + String(" Bye Call"));
break;
case SIPMACHINE_EVENT_CANCEL:
Serial.println(sipMachine.getTelNrIncomingCall() + String(" Cancel Call"));
break;
case SIPMACHINE_EVENT_INVITE_OK:
Serial.println(sipMachine.getTelNrIncomingCall() + String(" Accept incoming Call"));
break;
case SIPMACHINE_EVENT_MESSAGE_OK:
Serial.println(String("send Message to ") + sipMachine.getTelNrIncomingCall() + String(" Ok"));
break;
case SIPMACHINE_EVENT_NOT_EXIST:
Serial.println(sipMachine.getTelNrIncomingCall() + String(" Call Leg/Transaction Does Not Exist"));
break;
case SIPMACHINE_EVENT_BUSY_HERE:
Serial.println(sipMachine.getTelNrIncomingCall() + String(" Busy Here"));
break;
default:
// Serial.println(String(code) + " does not Exists :-)");
break;
}
}
void readSpeachPcmCb(int16_t pcm) {
int16_t sample[4];
size_t bytes_read;
sample[0] = pcm;
sample[1] = sample[0];
i2s_write(I2S_NUM_TXRX, (const char *)&sample, 4, &bytes_read, 0xffff);
//Serial.println(pcm);
}
int16_t writeSpeachPcmCb() {
int8_t pcm_buf[4];
size_t bytes_read;
i2s_read(I2S_NUM_TXRX, (char *)&pcm_buf, 4, &bytes_read, 0xffff);
return (int16_t)(pcm_buf[0] + pcm_buf[1] * 256);
}
void setup() {
pinMode(23, INPUT_PULLUP);
pinMode(4, OUTPUT);
Serial.begin(115200);
delay(1000);
WiFi.mode(WIFI_STA);
WiFiManager wifiManager;
wifiManager.setConfigPortalTimeout(180);
wifiManager.autoConnect("Sporada_VoIP");
WiFi.persistent(true);
WiFi.setAutoConnect(true);
WiFi.setAutoReconnect(true);
}
unsigned long t2 = millis();
unsigned long t4 = micros();
unsigned long t5 = millis();
void loop() {
if (digitalRead(23) == 1) {
if (SIPServerEnabled == 0) {
SIPServerEnabled = 1;
Serial.println("SIPServerEnabled mode HIGH");
audioi2sinit = 0;
Serial.println("audioi2sinit mode LOW");
i2sinitok = 0;
}
} else if (audioi2sinit == 0) {
audioplay();
audioi2sinit = 1;
Serial.println("audioi2sinit mode HIGH");
SIPServerEnabled = 0;
Serial.println("SIPServerEnabled mode LOW");
IsAlreadyEnabled = 0;
}
if (SIPServerEnabled && IsAlreadyEnabled == 0) {
sipMachine.setup(WiFi.localIP().toString(), serverIp);
sipMachine.setEvent(sipMachineEvent);
i2s_init();
Serial.println("voip i2s init");
IsAlreadyEnabled = 1;
sipMachine.setReadSpeachPcmCallback(readSpeachPcmCb);
sipMachine.setWriteSpeachPcmCallback(writeSpeachPcmCb);
}
if (WiFi.status() == WL_CONNECTED) {
if (IsAlreadyEnabled) {
sipMachine.loop(0);
SipMachine::Status status = sipMachine.getStatus();
switch (status) {
case SipMachine::idle:
// // if ((t2 + 5000 < millis()) & (t2 + 6000 > millis())) {
// // Serial.println("calling No...");
// // sipMachine.makeCall("101");
// }
// break;
case SipMachine::ringIn:
Serial.println(String("Ringing Call Nr. ") + sipMachine.getTelNrIncomingCall());
delay(1000);
Serial.println(String("Accept incoming Call ") + sipMachine.getTelNrIncomingCall());
sipMachine.acceptIncomingCall();
break;
case SipMachine::ringOut:
break;
case SipMachine::call:
// if ((t5 + 20000) < millis())
// {
// sipMachine.bye();
// Serial.printf("bye bye\n");
// }
break;
case SipMachine::messageIn:
Serial.println(String("Received message Nr. ") + sipMachine.getTelNrIncomingCall());
Serial.println(String("Message:\n") + sipMachine.getMessageInData());
delay(1000);
sipMachine.sendMessage(sipMachine.getTelNrIncomingCall(), "Hello, I amnowsomethingis not,onewillcontact you.");
break;
default:;
break;
}
}
if (audioi2sinit == 1) {
audio.loop();
}
}
//WIFI RECONNECT**
while (WiFi.status() != WL_CONNECTED) {
WiFiManager wifimanager;
wifimanager.setConfigPortalTimeout(180);
wifimanager.autoConnect("Sporada_VoIP");
WiFi.persistent(true);
WiFi.setAutoConnect(true);
WiFi.setAutoReconnect(true);
}
//ESP_RESTART_16min*
if (millis() > event) {
ESP.restart();
}
//*****************************
}
void audio_info(const char *info) {
Serial.print("info ");
Serial.println(info);
}
void audio_id3data(const char *info) { //id3 metadata
Serial.print("id3data ");
Serial.println(info);
}
void audio_eof_mp3(const char *info) { //end of file
Serial.print("eof_mp3 ");
Serial.println(info);
}
void audio_showstation(const char *info) {
Serial.print("station ");
Serial.println(info);
}
void audio_showstreaminfo(const char *info) {
Serial.print("streaminfo ");
Serial.println(info);
}
void audio_showstreamtitle(const char *info) {
Serial.print("streamtitle ");
Serial.println(info);
}
void audio_bitrate(const char *info) {
Serial.print("bitrate ");
Serial.println(info);
}
void audio_commercial(const char *info) { //duration in sec
Serial.print("commercial ");
Serial.println(info);
}
void audio_icyurl(const char *info) { //homepage
Serial.print("icyurl ");
Serial.println(info);
}
void audio_lasthost(const char *info) { //stream URL played
Serial.print("lasthost ");
Serial.println(info);
}
void audio_eof_speech(const char *info) {
Serial.print("eof_speech ");
Serial.println(info);
}