static int test_x_04(void) { char result[1024]; char *t; int ch; int xx; int yy; int i; v18_state_t *v18_state; /* III.5.4.5.4 5 Bit to T.50 character conversion */ v18_state = v18_init(NULL, TRUE, V18_MODE_5BIT_45, NULL, NULL); printf("Original:\n"); t = result; for (i = 0; i < 127; i++) { ch = i; printf("%c", ch); xx = v18_encode_baudot(v18_state, ch); if (xx) { if ((xx & 0x3E0)) { yy = v18_decode_baudot(v18_state, (xx >> 5) & 0x1F); if (yy) *t++ = yy; } yy = v18_decode_baudot(v18_state, xx & 0x1F); if (yy) *t++ = yy; } }
switch_status_t spandsp_tdd_decode_session(switch_core_session_t *session) { switch_channel_t *channel = switch_core_session_get_channel(session); switch_media_bug_t *bug; switch_status_t status; switch_tdd_t *pvt; //switch_codec_implementation_t read_impl = { 0 }; //switch_core_session_get_read_impl(session, &read_impl); if (!(pvt = switch_core_session_alloc(session, sizeof(*pvt)))) { return SWITCH_STATUS_MEMERR; } pvt->session = session; pvt->tdd_state = v18_init(NULL, FALSE, get_v18_mode(session), put_text_msg, pvt); if ((status = switch_core_media_bug_add(session, "spandsp_tdd_decode", NULL, tdd_decode_callback, pvt, 0, SMBF_READ_REPLACE | SMBF_NO_PAUSE, &bug)) != SWITCH_STATUS_SUCCESS) { v18_free(pvt->tdd_state); return status; } switch_channel_set_private(channel, "tdd_decode", bug); return SWITCH_STATUS_SUCCESS; }
switch_status_t spandsp_tdd_send_session(switch_core_session_t *session, const char *text) { v18_state_t *tdd_state; switch_frame_t *read_frame, write_frame = { 0 }; uint8_t write_buf[SWITCH_RECOMMENDED_BUFFER_SIZE]; switch_codec_implementation_t read_impl = { 0 }; switch_codec_t write_codec = { 0 }; switch_channel_t *channel = switch_core_session_get_channel(session); switch_status_t status; switch_core_session_get_read_impl(session, &read_impl); if (switch_core_codec_init(&write_codec, "L16", NULL, read_impl.actual_samples_per_second, read_impl.microseconds_per_packet / 1000, read_impl.number_of_channels, SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL, switch_core_session_get_pool(session)) == SWITCH_STATUS_SUCCESS) { write_frame.data = write_buf; write_frame.buflen = sizeof(write_buf); write_frame.datalen = read_impl.decoded_bytes_per_packet; write_frame.samples = write_frame.datalen / 2; write_frame.codec = &write_codec; switch_core_session_set_read_codec(session, &write_codec); } else { return SWITCH_STATUS_FALSE; } tdd_state = v18_init(NULL, TRUE, get_v18_mode(session), put_text_msg, NULL); v18_put(tdd_state, text, -1); while(switch_channel_ready(channel)) { status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0); if (!SWITCH_READ_ACCEPTABLE(status)) { break; } if (!v18_tx(tdd_state, (void *)write_buf, write_frame.samples)) { break; } if (switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) { break; } } switch_core_codec_destroy(&write_codec); switch_core_session_set_read_codec(session, NULL); v18_free(tdd_state); return SWITCH_STATUS_SUCCESS; }
static int test_x_04(void) { const char *s; const char *ref; char result[1024]; char *t; int ch; int xx; int yy; v18_state_t *v18_state; /* III.5.4.5.4 5 Bit to T.50 character conversion */ v18_state = v18_init(NULL, TRUE, V18_MODE_5BIT_45, NULL, NULL); s = "The quick Brown Fox Jumps Over The Lazy dog 0123456789!@#$%^&*()"; printf("Original:\n%s\n", s); t = result; while ((ch = *s++)) { xx = v18_encode_baudot(v18_state, ch); if ((xx & 0x3E0)) { yy = v18_decode_baudot(v18_state, (xx >> 5) & 0x1F); if (yy) *t++ = yy; } yy = v18_decode_baudot(v18_state, xx & 0x1F); if (yy) *t++ = yy; }
static void basic_tests(int mode) { int16_t amp[SAMPLES_PER_CHUNK]; int outframes; int len; int push; int i; v18_state_t *v18_a; v18_state_t *v18_b; printf("Testing %s\n", v18_mode_to_str(mode)); v18_a = v18_init(NULL, TRUE, mode, put_text_msg, NULL); v18_b = v18_init(NULL, FALSE, mode, put_text_msg, NULL); /* Fake an OK condition for the first message test */ good_message_received = TRUE; push = 0; if (v18_put(v18_a, qbf_tx, -1) != strlen(qbf_tx)) { printf("V.18 put failed\n"); exit(2); } for (i = 0; i < 100000; i++) { if (push == 0) { if ((len = v18_tx(v18_a, amp, SAMPLES_PER_CHUNK)) == 0) push = 10; } else { len = 0; /* Push a little silence through, to flush things out */ if (--push == 0) { if (!good_message_received) { printf("No message received\n"); exit(2); } good_message_received = FALSE; if (v18_put(v18_a, qbf_tx, -1) != strlen(qbf_tx)) { printf("V.18 put failed\n"); exit(2); } } } if (len < SAMPLES_PER_CHUNK) { memset(&[len], 0, sizeof(int16_t)*(SAMPLES_PER_CHUNK - len)); len = SAMPLES_PER_CHUNK; } if (log_audio) { outframes = sf_writef_short(outhandle, amp, len); if (outframes != len) { fprintf(stderr, " Error writing audio file\n"); exit(2); } } v18_rx(v18_b, amp, len); } v18_free(v18_a); v18_free(v18_b); }
static void basic_tests(int mode) { int16_t amp[SAMPLES_PER_CHUNK]; int outframes; int len; int push; int i; v18_state_t *v18_a; v18_state_t *v18_b; printf("Testing %s\n", v18_mode_to_str(mode)); v18_a = v18_init(NULL, TRUE, mode, put_text_msg, NULL); v18_b = v18_init(NULL, FALSE, mode, put_text_msg, NULL); /* Fake an OK condition for the first message test */ good_message_received = TRUE; push = 0; v18_put(v18_a, "The quick Brown Fox Jumps Over The Lazy dog 0123456789!@#$%^&*()", -1); for (i = 0; i < 100000; i++) { if (push == 0) { if ((len = v18_tx(v18_a, amp, SAMPLES_PER_CHUNK)) == 0) push = 10; } else { len = 0; /* Push a little silence through, to flush things out */ if (--push == 0) { if (!good_message_received) { printf("No message received\n"); exit(2); } good_message_received = FALSE; v18_put(v18_a, "The quick Brown Fox Jumps Over The Lazy dog 0123456789!@#$%^&*()", -1); } } if (len < SAMPLES_PER_CHUNK) { memset(&[len], 0, sizeof(int16_t)*(SAMPLES_PER_CHUNK - len)); len = SAMPLES_PER_CHUNK; } if (log_audio) { outframes = afWriteFrames(outhandle, AF_DEFAULT_TRACK, amp, len); if (outframes != len) { fprintf(stderr, " Error writing wave file\n"); exit(2); } } v18_rx(v18_b, amp, len); } v18_free(v18_a); v18_free(v18_b); }