}
while(n--)
*to++ = flip[*from++];
+ if (psip->p_dov_rx)
+ psip->dov_rx(payload, payload_len);
psip->bridge_tx(payload, payload_len);
return 0;
/* receive from remote */
int Psip::bridge_rx(unsigned char *data, int len)
{
+ int ret;
+
/* don't bridge, if tones are provided */
- if (p_tone_name[0])
+ if (p_tone_name[0] || p_dov_tx)
return -EBUSY;
+ if (p_dov_tx)
+ return -EBUSY;
+
+ if ((ret = Port::bridge_rx(data, len)))
+ return ret;
+
/* write to rx buffer */
while(len--) {
p_s_rxdata[p_s_rxpos++] = flip[*data++];
return;
/* don't start timer if ... */
- if (!p_tone_name[0])
+ if (!p_tone_name[0] && !p_dov_tx)
return;
p_s_next_tv_sec = 0;
class Psip *psip = (class Psip *)instance;
/* stop timer if ... */
- if (!psip->p_tone_name[0])
+ if (!psip->p_tone_name[0] && !psip->p_dov_tx)
return 0;
psip->load_tx();
/* copy tones */
if (p_tone_name[0]) {
tosend -= read_audio(p, tosend);
+ } else
+ if (p_dov_tx) {
+ tosend -= dov_tx(p, tosend);
}
if (tosend) {
PERROR("buffer is not completely filled\n");