#include "freetdm.h" ftdm_status_t my_write_sample(int16_t *buf, ftdm_size_t buflen, void *user_data); struct helper { int fd; int wrote; }; ftdm_status_t my_write_sample(int16_t *buf, ftdm_size_t buflen, void *user_data) { struct helper *foo = (struct helper *) user_data; size_t len; len = write(foo->fd, buf, buflen * 2); if (!len) return FTDM_FAIL; foo->wrote += buflen * 2; return FTDM_SUCCESS; } int main(int argc, char *argv[]) { struct ftdm_fsk_modulator fsk_trans; ftdm_fsk_data_state_t fsk_data = {0}; int fd = -1; int16_t buf[160] = {0}; ssize_t len = 0; size_t type, mlen; char *sp; char str[128] = ""; char fbuf[256]; uint8_t databuf[1024] = ""; struct helper foo = {0}; // int x, bytes, start_bits = 180, stop_bits = 5, sbits = 300; char time_str[9]; struct tm tm; time_t now; if (argc < 2) { int x; const char *url = "sip:cool@rad.com"; if ((fd = open("tone.raw", O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR)) < 0) { fprintf(stderr, "File Error! [%s]\n", strerror(errno)); exit(-1); } time(&now); localtime_r(&now, &tm); strftime(time_str, sizeof(time_str), "%m%d%H%M", &tm); ftdm_fsk_data_init(&fsk_data, databuf, sizeof(databuf)); #if 1 ftdm_fsk_data_add_mdmf(&fsk_data, MDMF_DATETIME, (uint8_t *)time_str, strlen(time_str)); //ftdm_fsk_data_add_mdmf(&fsk_data, MDMF_DATETIME, "06091213", 8); ftdm_fsk_data_add_mdmf(&fsk_data, MDMF_PHONE_NUM, (uint8_t *)"14149361212", 7); ftdm_fsk_data_add_mdmf(&fsk_data, MDMF_PHONE_NAME, (uint8_t *)"Fred Smith", 10); for(x = 0; x < 0; x++) ftdm_fsk_data_add_mdmf(&fsk_data, MDMF_ALT_ROUTE, (uint8_t *)url, strlen(url)); #else ftdm_fsk_data_add_sdmf(&fsk_data, "06061234", "0"); //ftdm_fsk_data_add_sdmf(&state, "06061234", "5551212"); #endif ftdm_fsk_data_add_checksum(&fsk_data); foo.fd = fd; ftdm_fsk_modulator_init(&fsk_trans, FSK_BELL202, 8000, &fsk_data, -14, 180, 5, 300, my_write_sample, &foo); ftdm_fsk_modulator_send_all((&fsk_trans)); printf("%u %d %d\n", (unsigned) fsk_data.dlen, foo.wrote, fsk_trans.est_bytes); if (fd > -1) { close (fd); } return 0; } if (ftdm_fsk_demod_init(&fsk_data, 8000, (uint8_t *)fbuf, sizeof(fbuf))) { printf("wtf\n"); return 0; } if ((fd = open(argv[1], O_RDONLY)) < 0) { fprintf(stderr, "cant open file %s\n", argv[1]); exit (-1); } while((len = read(fd, buf, sizeof(buf))) > 0) { if (ftdm_fsk_demod_feed(&fsk_data, buf, len / 2) != FTDM_SUCCESS) { break; } } while(ftdm_fsk_data_parse(&fsk_data, &type, &sp, &mlen) == FTDM_SUCCESS) { ftdm_copy_string(str, sp, mlen+1); *(str+mlen) = '\0'; ftdm_clean_string(str); printf("TYPE %u (%s) LEN %u VAL [%s]\n", (unsigned)type, ftdm_mdmf_type2str(type), (unsigned)mlen, str); } ftdm_fsk_demod_destroy(&fsk_data); close(fd); return 0; }