ERIS CORE

◆ disconnect()

bool AudioConnection::disconnect ( void  )

Definition at line 240 of file AudioStream.cpp.

241 {
243 
244  if (!isConnected) return false;
245  if (dest_index > pDst->num_inputs) return false;
246  //Serial.flush();
247  //Serial.print(F("M (eris)AudioConnection:disconnect()"));
248  //Serial.print(F(" src: "));Serial.print(pSrc->short_name);
249  //Serial.print(F(" src ptr:"));Serial.print((uint32_t)pSrc);
250  //Serial.print(F(":"));Serial.print((uint32_t)src_index);
251  //Serial.print(F(" dst: "));Serial.print(pDst->short_name);
252  //Serial.print(F(" dst ptr:"));Serial.print((uint32_t)pDst);
253  //Serial.print(F(":"));Serial.println((uint32_t)dest_index);
254 
255  //__disable_irq();
256  // Remove destination from source list
258  if (p == NULL) {
259 //>>> PAH re-enable the IRQ
260  //__enable_irq();
261  return false;
262  } else if (p == this) {
263  if (p->next_dest) {
265  } else {
266  pSrc->destination_list = NULL;
267  }
268  } else {
269  while (p) {
270  if (p == this) {
271  if (p->next_dest) {
272  p = next_dest;
273  break;
274  } else {
275  p = NULL;
276  break;
277  }
278  }
279  p = p->next_dest;
280  }
281  //Serial.println(F("(eris)AudioConnection:disconnect() complete"));
282  }
283 //>>> PAH release the audio buffer properly
284  //Remove possible pending src block from destination
285  if(pDst->inputQueue[dest_index] != NULL) {
287  // release() re-enables the IRQ. Need it to be disabled a little longer
288  //__disable_irq();
289  pDst->inputQueue[dest_index] = NULL;
290  }
291 
292  //Check if the disconnected AudioStream objects should still be active
293  pSrc->numConnections--;
294  if (pSrc->numConnections == 0) {
295  pSrc->active = false;
296  }
297 
298  pDst->numConnections--;
299  if (pDst->numConnections == 0) {
300  pDst->active = false;
301  }
302 
303  isConnected = false;
304  //__enable_irq();
305  return true;
306 }
const char PROGMEM p[][16]
Definition: Eris.h:247
AudioStream * pDst
Definition: AudioStream.h:119
AudioStream * pSrc
Definition: AudioStream.h:116
unsigned char dest_index
Definition: AudioStream.h:121
AudioConnection * next_dest
Definition: AudioStream.h:122
static void release(audio_block_t *block)
AudioConnection * destination_list
Definition: AudioStream.h:205
uint8_t numConnections
Definition: AudioStream.h:203
unsigned char num_inputs
Definition: AudioStream.h:192
audio_block_t ** inputQueue
Definition: AudioStream.h:206

References AudioStream::active, dest_index, AudioStream::destination_list, AudioStream::inputQueue, isConnected, next_dest, AudioStream::num_inputs, AudioStream::numConnections, p, pDst, pSrc, and AudioStream::release().

Referenced by ~AudioConnection().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: