| */ | */ | ||||
| // 2015/08/23: (FB) added mute_PCM() - sets or unsets VALID in VUCP (and adjusts PARITY) | // 2015/08/23: (FB) added mute_PCM() - sets or unsets VALID in VUCP (and adjusts PARITY) | ||||
| #include "output_spdif.h" | #include "output_spdif.h" | ||||
| #define PREAMBLE_B (0xE8) //11101000 | #define PREAMBLE_B (0xE8) //11101000 | ||||
| void AudioOutputSPDIF::begin(void) | void AudioOutputSPDIF::begin(void) | ||||
| { | { | ||||
| dma.begin(true); // Allocate the DMA channel first | dma.begin(true); // Allocate the DMA channel first | ||||
| block_left_1st = NULL; | block_left_1st = NULL; | ||||
| if (++frame > 191) { | if (++frame > 191) { | ||||
| // VUCP-Bits ("Valid, Subcode, Channelstatus, Parity) = 0 (0xcc) | Preamble (depends on Framno.) | Auxillary | // VUCP-Bits ("Valid, Subcode, Channelstatus, Parity) = 0 (0xcc) | Preamble (depends on Framno.) | Auxillary | ||||
| *(dest+0) = vucp | (PREAMBLE_B << 16 ) | aux; //special preamble for one of 192 frames | |||||
| *(dest+0) = vucp | (PREAMBLE_B << 16 ) | aux; //special preamble for one of 192 frames | |||||
| frame = 0; | frame = 0; | ||||
| } else { | } else { | ||||
| *(dest+0) = vucp | (PREAMBLE_M << 16 ) | aux; | *(dest+0) = vucp | (PREAMBLE_M << 16 ) | aux; | ||||
| } else { | } else { | ||||
| do { | do { | ||||
| if ( ++frame > 191 ) { | if ( ++frame > 191 ) { | ||||
| *(dest+0) = 0xcce8cccc; | |||||
| *(dest+0) = vucp | 0x00e8cccc; | |||||
| frame = 0; | frame = 0; | ||||
| } else { | } else { | ||||
| *(dest+0) = 0xcce2cccc; | |||||
| *(dest+0) = vucp | 0x00e2cccc; | |||||
| } | } | ||||
| *(dest+1) = 0xccccccccUL; | *(dest+1) = 0xccccccccUL; | ||||
| } | } | ||||
| } else { | } else { | ||||
| do { | do { | ||||
| *dest = 0xcce4ccccUL; | |||||
| *dest = vucp | 0x00e4ccccUL; | |||||
| *(dest+1) = 0xccccccccUL; | *(dest+1) = 0xccccccccUL; | ||||
| dest += 4 ; | dest += 4 ; | ||||
| } while (dest < end); | } while (dest < end); | ||||
| void AudioOutputSPDIF::mute_PCM(const bool mute) | void AudioOutputSPDIF::mute_PCM(const bool mute) | ||||
| { | { | ||||
| vucp = mute?VUCP_INVALID:VUCP_VALID; | |||||
| vucp = mute?VUCP_INVALID:VUCP_VALID; | |||||
| } | } | ||||
| void AudioOutputSPDIF::update(void) | void AudioOutputSPDIF::update(void) |