SPAN_DECLARE(int) dtmf_tx(dtmf_tx_state_t *s, int16_t amp[], int max_samples) { int len; const char *cp; int digit; len = 0; if (s->tones.current_section >= 0) { /* Deal with the fragment left over from last time */ len = tone_gen(&(s->tones), amp, max_samples); } while (len < max_samples && (digit = queue_read_byte(&s->queue.queue)) >= 0) { /* Step to the next digit */ if (digit == 0) continue; if ((cp = strchr(dtmf_positions, digit)) == NULL) continue; tone_gen_init(&(s->tones), &dtmf_digit_tones[cp - dtmf_positions]); s->tones.tone[0].gain = s->low_level; s->tones.tone[1].gain = s->high_level; s->tones.duration[0] = s->on_time; s->tones.duration[1] = s->off_time; len += tone_gen(&(s->tones), amp + len, max_samples - len); } return len; }
SPAN_DECLARE(int) bell_mf_tx(bell_mf_tx_state_t *s, int16_t amp[], int max_samples) { int len; const char *cp; int digit; len = 0; if (s->tones.current_section >= 0) { /* Deal with the fragment left over from last time */ len = tone_gen(&(s->tones), amp, max_samples); } while (len < max_samples && (digit = queue_read_byte(&s->queue.queue)) >= 0) { /* Step to the next digit */ if ((cp = strchr(bell_mf_tone_codes, digit)) == NULL) continue; tone_gen_init(&(s->tones), &bell_mf_digit_tones[cp - bell_mf_tone_codes]); len += tone_gen(&(s->tones), amp + len, max_samples - len); } return len; }