static int Dr_Neuhaus_set_device (int device) { reset_watchdog(); switch (device) { case NO_DEVICE: voice_command("AT+VLS=0", "OK"); return(OK); case DIALUP_LINE: voice_command("AT+VLS=2", "OK"); return(OK); case INTERNAL_SPEAKER: voice_command("AT+VLS=4", "OK"); return(OK); case INTERNAL_MICROPHONE: /* The Smarty has an INTERNAL_MICROPHONE. * -- Raoul Boenisch <*****@*****.**> */ voice_command("AT+VLS=14", "OK"); return(OK); }; lprintf(L_WARN, "%s: Unknown output device (%d)", voice_modem_name, device); return(FAIL); }
int Cirrus_Logic_beep (int frequency, int length) { char buffer[VOICE_BUF_LEN]; int watchdog_count = 0; reset_watchdog(); sprintf(buffer, "AT#VBP"); lprintf(L_MESG, "Checking Beep"); if (voice_command(buffer, "") != OK) return(FAIL); while (!check_for_input(voice_fd)) { if ((watchdog_count--) <= 0) { reset_watchdog(); watchdog_count = cvd.watchdog_timeout.d.i * 1000 / cvd.poll_interval.d.i / 2; } delay(cvd.poll_interval.d.i); } if (voice_command("", "OK") != VMA_USER_1) return(FAIL); return(OK); }
static int Multitech_2834_set_device(int device) { reset_watchdog(); switch (device) { case NO_DEVICE: voice_command("AT+VLS=0", "OK"); return(OK); case LOCAL_HANDSET: voice_command("AT+VLS=2", "OK"); return(OK); case DIALUP_LINE: voice_command("AT+VLS=1", "OK"); /* [email protected] */ return(OK); case EXTERNAL_MICROPHONE: voice_command("AT+VLS=11", "OK"); return(OK); case INTERNAL_SPEAKER: voice_command("AT+VLS=4", "OK"); return(OK); }; lprintf(L_WARN, "%s: Unknown output device (%d)", voice_modem_name, device); return(FAIL); }
static int ZyXEL_2864_set_device (int device) { reset_watchdog(); switch (device) { case NO_DEVICE: voice_command("AT+VLS=0", "OK"); return(OK); case LOCAL_HANDSET: voice_command("AT+VLS=1", "OK"); return(OK); case DIALUP_LINE: if (voice_command("AT+VLS=2", "OK|CONNECT*") == VMA_USER_2) return(VMA_CONNECT); return(OK); case EXTERNAL_MICROPHONE: voice_command("AT+VLS=8", "OK"); return(OK); case INTERNAL_SPEAKER: voice_command("AT+VLS=16", "OK"); return(OK); }; lprintf(L_WARN, "%s: Unknown output device (%d)", voice_modem_name, device); return(FAIL); }
static int Dolphin_set_device (int device) { reset_watchdog(); switch (device) { case NO_DEVICE: if (voice_write("AT+VLS=0") != OK) return(FAIL); if (voice_command("", "AT+VLS=0|OK") == VMA_USER_1) voice_command("", "OK"); return(OK); case DIALUP_LINE: voice_command("AT+VLS=2", "VCON"); return(OK); case INTERNAL_SPEAKER: voice_command("AT+VLS=16", "VCON"); return(OK); }; lprintf(L_WARN, "%s: Unknown output device (%d)", voice_modem_name, device); return(FAIL); }
static int Multitech_2834_voice_mode_on(void) { char buffer[VOICE_BUF_LEN]; if (voice_command(voice_modem->ask_mode_cmnd, "") != OK) return FAIL; do { if (voice_read(mode_save) != OK) return FAIL; } while (strlen(mode_save) == 0); if (strncmp(mode_save, "+FCLASS=", 8) == 0) memmove(mode_save, mode_save + 8, strlen(mode_save) - 8 + 1); if ((voice_command("", voice_modem->ask_mode_answr) & VMA_USER) != VMA_USER) return FAIL; sprintf(buffer, "%s%s", voice_modem->switch_mode_cmnd, voice_modem->voice_mode_id); if ((voice_command(buffer, voice_modem->switch_mode_answr) & VMA_USER) != VMA_USER) return FAIL; Multitech_2834_fix_modem(0); return OK; }
static int Dolphin_init (void) { char buffer[VOICE_BUF_LEN]; reset_watchdog(); voice_modem_state = INITIALIZING; lprintf(L_MESG, "initializing Dolphin voice modem"); /* * AT+VNH=1 - Disable automatic hangup. */ if (voice_command("AT+VNH=1", "OK") != VMA_USER_1) lprintf(L_WARN, "disabling automatic hangup didn't work"); /* * AT+VSD=x,y - Set silence threshold and duration. */ sprintf(buffer, "AT+VSD=%d,%d", (int)cvd.rec_silence_threshold.d.i * 31 / 100, (int)cvd.rec_silence_len.d.i); if (voice_command(buffer, "OK") != VMA_USER_1) lprintf(L_WARN, "setting recording preferences didn't work"); voice_modem_state = IDLE; return(OK); }
int Cirrus_Logic_set_device (int device) { reset_watchdog(); lprintf(L_MESG, "Setting device"); switch (device) { case NO_DEVICE: voice_command("AT#VLN=0", "OK"); return(OK); case DIALUP_LINE: voice_command("AT#VLN=1", "OK"); return(OK); case EXTERNAL_MICROPHONE: voice_command("AT#VLN=32", "OK"); return(OK); case INTERNAL_SPEAKER: voice_command("AT#VLN=16", "OK"); return(OK); case LOCAL_HANDSET: voice_command("AT#VLN=2","OK"); return(OK); } lprintf(L_WARN, "%s: Unknown output device (%d)", voice_modem_name, device); return(FAIL); }
int Multitech_5634ZPX_set_compression(p_int *compression, p_int *speed, int *bits) { char buffer[VOICE_BUF_LEN]; reset_watchdog(); if (*compression == 0) *compression = 132; if (*speed == 0) *speed = 8000; if (*speed != 8000) { lprintf(L_WARN, "%s: Illegal sample rate (%d)", voice_modem_name, (int)*speed); return(FAIL); } /* VSM=cml,vsr,scs,sel cml: 128-256 (compression method) 128,"8-BIT LINEAR",(7200,8000,11025) 129,"16-BIT LINEAR",(7200,8000,11025) 130,"8-BIT ALAW",(8000) 131,"8-BIT ULAW",(8000) 132,"IMA ADPCM",(7200,8000,11025) vsr: (voice sample rate) scs: 0 (disabled), 1-n (how much noise is silence) sel: 0 (disabled), 1-n (.1 sec incr: silence expansion) */ switch (*compression) { case 4: *bits = 4; sprintf(buffer, "AT+VSM=2,%d", (int)*speed); if (voice_command(buffer, "OK") != VMA_USER_1) return(FAIL); break; case 132: *bits = 4; sprintf(buffer, "AT+VSM=132,%d", (int)*speed); if (voice_command(buffer, "OK") != VMA_USER_1) return(FAIL); break; default: lprintf(L_WARN, "%s: Illegal voice compression method (%d)", voice_modem_name, (int)*compression); return(FAIL); } return(OK); }
static int UMC_beep(int frequency, int length) { #ifdef UMC_VTS_WORKAROUND /* * generate a beep with 900Hz * sorry: just a near miss. */ TIO tio; char *sinewave="\x37\x8c\xc8\x73"; int sinelen=4; int i; tio_get(voice_fd, &tio); tio_set_flow_control(voice_fd, &tio, FLOW_HARD); tio_set(voice_fd, &tio); voice_command("AT#VBS=4", "OK"); voice_command("AT#VTX", "CONNECT"); lprintf(L_JUNK, "%s->%s: sinewave", program_name, voice_modem_name); for (i=length; i>0; i--) { if (write(voice_fd,sinewave,sinelen) != sinelen) lprintf(L_WARN, "%s->%s: write error (errno 0x%x)", program_name, voice_modem_name, errno); } lprintf(L_JUNK, "%s->%s: <DLE> <ETX>", program_name, voice_modem_name); if (write(voice_fd, dletx , 2) != 2) lprintf(L_WARN, "%s->%s: write error (errno 0x%x)", program_name, voice_modem_name, errno); tio_set(voice_fd, &voice_tio); voice_command("", "VCON"); #else char buffer[VOICE_BUF_LEN]; reset_watchdog(); if (length > 4000 ) lprintf(L_WARN, "%s->%s: Warning beeps longer than 4000 ms might not be supported.", program_name, voice_modem_name); lprintf(L_JUNK, "%s->%s: Some UMC modems beep with fixed frequency. This is a not a software bug.", program_name, voice_modem_name); sprintf(buffer, "AT#VTS=[%d,0,%d]", frequency, length / 100); if (voice_command(buffer, "OK") != VMA_USER_1) return(FAIL); #endif return(OK); }
static int Multitech_5600ZDXv_set_compression (p_int *compression, p_int *speed, int *bits) { char buf[VOICE_BUF_LEN]; reset_watchdog(); /* * Build the speed command and send it */ switch (*speed) { case 0: *speed = 7200; /* FALL THROUGH */ case 7200: case 11025: break; default: lprintf(L_WARN, "%s: Illegal sample rate (%d)", voice_modem_name, (int)*speed); return(FAIL); } if (sprintf(buf, "AT#VSR=%d", (int)*speed) == -1) { lprintf(L_ERROR, "%s: Command too long", __FUNCTION__); } if (voice_command(buf, "OK") != VMA_USER_1) { return(FAIL); } /* * Build the number of bits and send it */ switch (*compression) { case 0: *compression = 2; /* FALL THROUGH */ case 2: case 4: case 8: *bits = *compression; break; default: lprintf(L_WARN, "ROCKWELL handle event: Illegal voice compression method (%d)", *compression); return(FAIL); } if (sprintf(buf, "AT#VBS=%d", *bits) == -1) { lprintf(L_ERROR, "%s: Command too long", __FUNCTION__); } if (voice_command(buf, "OK") != VMA_USER_1) { return(FAIL); } return (OK); }
int Cirrus_Logic_answer_phone (void) { reset_watchdog(); lprintf(L_MESG, "Answering Call"); if (voice_command("AT#VLN=1", "OK") != VMA_USER_1) return(VMA_ERROR); if (voice_command("AT#VIP=1", "OK") != VMA_USER_1) return(VMA_ERROR); return(VMA_OK); }
static int ISDN4Linux_set_compression(int *compression, int *speed, int *bits) { char buffer[VOICE_BUF_LEN]; reset_watchdog(); if (*compression == 0) *compression = 2; *speed = 8000; switch (*compression) { case 2: *bits = 2; if (voice_command("AT+VSM=2", "OK") != VMA_USER_1) return(FAIL); return(OK); case 3: *bits = 3; if (voice_command("AT+VSM=3", "OK") != VMA_USER_1) return(FAIL); return(OK); case 4: *bits = 4; if (voice_command("AT+VSM=4", "OK") != VMA_USER_1) return(FAIL); return(OK); case 5: case 6: *bits = 8; sprintf(buffer,"AT+VSM=%d",*compression); if (voice_command(buffer, "OK") != VMA_USER_1) return(FAIL); return(OK); } lprintf(L_WARN, "ISDN4Linux handle event: Illegal voice compression method (%d)", *compression); return(FAIL); }
static int Dr_Neuhaus_set_compression (int *compression, int *speed, int *bits) { reset_watchdog(); if (*compression == 0) *compression = 129; if (*speed == 0) *speed = 8000; if (*speed != 8000) { lprintf(L_WARN, "%s: Illegal sample rate (%d)", voice_modem_name, *speed); return(FAIL); }; switch (*compression) { case 128: *bits = 8; if (voice_command("AT+VSM=128", "OK") != VMA_USER_1) return(FAIL); break; case 129: *bits = 2; if (voice_command("AT+VSM=129", "OK") != VMA_USER_1) return(FAIL); break; case 130: *bits = 3; if (voice_command("AT+VSM=130", "OK") != VMA_USER_1) return(FAIL); break; default: lprintf(L_WARN, "%s: Illegal voice compression method (%d)", voice_modem_name, *compression); return(FAIL); }; return(OK); }
static int Dolphin_set_compression (p_int *compression, p_int *speed, int *bits) { reset_watchdog(); if (*compression == 0) *compression = 2; if (*speed == 0) *speed = 9600; if (*speed != 9600) { lprintf(L_WARN, "%s: Illegal sample rate (%d)", voice_modem_name, *speed); return(FAIL); }; if (*compression != 2) { lprintf(L_WARN, "%s: Illegal voice compression method (%d)", voice_modem_name, *compression); return(FAIL); }; *bits = 2; if (voice_command("AT+VSM=2", "OK") != VMA_USER_1) return(FAIL); return(OK); }
static int Multitech_2834_set_compression(p_int *compression, p_int *speed, int *bits) { char buffer[VOICE_BUF_LEN]; reset_watchdog(); if (*compression == 0) *compression = 4; if (*speed == 0) *speed = 8000; if (*speed != 8000) { lprintf(L_WARN, "%s: Illegal sample rate (%d)", voice_modem_name, *speed); return(FAIL); } switch (*compression) { case 4: *bits = 4; sprintf(buffer, "AT+VSM=2,%d", (int)*speed); if (voice_command(buffer, "OK") != VMA_USER_1) return(FAIL); break; case 132: *bits = 4; sprintf(buffer, "AT+VSM=132,%d", (int)*speed); if (voice_command(buffer, "OK") != VMA_USER_1) return(FAIL); break; default: lprintf(L_WARN, "%s: Illegal voice compression method (%d)", voice_modem_name, *compression); return(FAIL); } return(OK); }
static int Multitech_5634ZPX_set_device(int device) { reset_watchdog(); /* 0,"",B0000000,B0000000,B0000000 1,"T",0BC01800,0BC01800,0BC01800 2,"L",00000000,00000000,B0000000 3,"LT",0BC01800,0BC01800,0BC01800 4,"S",00000000,00000000,B0000000 5,"ST",0BC01800,0BC01800,0BC01800 6,"M",00000000,00000000,B0000000 7,"MST",0BC01800,0BC01800,0BC01800 where: 0 "" on-hook, local phone->telco 1 T off-hook, modem->telco 2 L off-hook, local phone->telco 3 LT off-hook, local phone&modem->telco 4 S on-hook, spkr->modem, local phone->telco 5 ST off-hook, spkr->telco, modem->telco 6 M on-hook, mike->modem, local phone->telco 7 MST off-hook, mike&spkr->telco, modem->telco */ switch (device) { case NO_DEVICE: voice_command("AT+VLS=0", "OK"); return(OK); case LOCAL_HANDSET: voice_command("AT+VLS=2", "OK"); return(OK); case DIALUP_LINE: voice_command("AT+VLS=0", "OK"); /* MD: Changed from 1 to 0 -> now vm dials out */ return(OK); case EXTERNAL_MICROPHONE: voice_command("AT+VLS=11", "OK"); return(OK); case INTERNAL_SPEAKER: voice_command("AT+VLS=4", "OK"); return(OK); }; lprintf(L_WARN, "%s: Unknown output device (%d)", voice_modem_name, device); return(FAIL); }
int ISDN4Linux_handle_dle(char data) { switch (data) { case DC4: lprintf(L_WARN, "%s: <DLE> <DC4> received", program_name); voice_stop_current_action(); switch (voice_command("", "OK|VCON|NO CARRIER")) { case VMA_USER_3: queue_event(create_event(NO_CARRIER)); break; case VMA_USER_1: case VMA_USER_2: break; default: return FAIL; } got_DLE_DC4 = TRUE; return (OK); case ETX: lprintf(L_WARN, "%s: <DLE> <ETX> received", program_name); voice_stop_current_action(); switch (voice_command("", "OK|VCON|NO CARRIER")) { case VMA_USER_3: queue_event(create_event(NO_CARRIER)); break; case VMA_USER_1: case VMA_USER_2: break; default: return FAIL; } return (OK); default: return(IS_101_handle_dle(data)); } }
static int Lucent_set_device (int device) { reset_watchdog(); switch (device) { case DIALUP_WITH_LOCAL_HANDSET: case NO_DEVICE: voice_command("AT+VLS=0", "OK"); return(OK); case DIALUP_LINE: voice_command("AT+VLS=1", "OK"); return(OK); case LOCAL_HANDSET: voice_command("AT+VLS=2", "OK"); return(OK); case INTERNAL_SPEAKER: voice_command("AT+VLS=4", "OK"); return(OK); case INTERNAL_MICROPHONE: voice_command("AT+VLS=6", "OK"); return(OK); case DIALUP_WITH_INT_SPEAKER: voice_command("AT+VLS=5", "OK"); return(OK); case DIALUP_WITH_INTERNAL_MIC_AND_SPEAKER: voice_command("AT+VLS=7", "OK"); return(OK); }; lprintf(L_WARN, "%s: Unknown output device (%d)", voice_modem_name, device); return(FAIL); }
int Lucent_beep(int frequency, int length) { char buffer[VOICE_BUF_LEN]; int true_length = length / voice_modem->beep_timeunit; reset_watchdog(); sprintf(buffer, voice_modem->beep_cmnd, frequency, frequency, true_length); if (voice_command(buffer, "") != OK) return(FAIL); delay(((length - 1000) > 0) ? (length - 1000) : 0); if ((voice_command("", voice_modem->beep_answr) & VMA_USER) != VMA_USER) return(FAIL); return(OK); }
static int UMC_init(void) { char buffer[VOICE_BUF_LEN]; reset_watchdog(); lprintf(L_MESG, "initializing UMC voice modem"); voice_modem_state = INITIALIZING; sprintf(buffer, "AT#VSP=%1u", cvd.rec_silence_len.d.i); if (voice_command(buffer, "OK") != VMA_USER_1) lprintf(L_WARN, "can't set silence period"); if (voice_command("AT#VSD=0", "OK") != VMA_USER_1) lprintf(L_WARN, "can't disable silence deletion"); if (voice_command("AT#VTD=3F,3F,3F", "OK") != VMA_USER_1) lprintf(L_WARN, "can't set DLE responses"); if ((cvd.rec_silence_threshold.d.i > 100) || (cvd.rec_silence_threshold.d.i < 0)) { lprintf(L_WARN, "Invalid threshold value."); return(ERROR); } sprintf(buffer, "AT#VSS=%1u", cvd.rec_silence_threshold.d.i * 3 / 100); if (voice_command(buffer, "OK") != VMA_USER_1) lprintf(L_WARN, "can't set silence threshold"); if (voice_command("AT\\Q3", "OK") == VMA_USER_1) { TIO tio; tio_get(voice_fd, &tio); tio_set_flow_control(voice_fd, &tio, FLOW_HARD); tio_set(voice_fd, &tio); } else lprintf(L_WARN, "can't turn on hardware flow control"); voice_modem_state = IDLE; return(OK); }
static int Digi_RAS_set_device (int device) { reset_watchdog(); switch (device) { case NO_DEVICE: voice_command("AT+VLS=0", "OK"); return(OK); case DIALUP_LINE: /* voice_command("AT+VLS=2", "OK"); */ voice_command("AT+VLS=1", "OK"); return(OK); }; lprintf(L_WARN, "%s: Unknown output device (%d)", voice_modem_name, device); return(FAIL); }
static int ISDN4Linux_set_device(int device) { int result; reset_watchdog(); switch (device) { case NO_DEVICE: voice_write("AT+VLS=0"); result = voice_command("", "OK|NO CARRIER|AT+VLS=0"); if (result == VMA_USER_3) result = voice_command("", "OK|NO CARRIER"); switch(result) { case VMA_USER_2: queue_event(create_event(NO_CARRIER)); /* Fall through */ case VMA_USER_1: return (OK); } return(FAIL); case DIALUP_LINE: switch (voice_command("AT+VLS=2", "VCON|OK|NO CARRIER")) { case VMA_USER_3: queue_event(create_event(NO_CARRIER)); /* Fall through */ case VMA_USER_1: case VMA_USER_2: return(OK); } return(FAIL); } lprintf(L_WARN, "ISDN4Linux handle event: Unknown output device (%d)", device); return(FAIL); }
int UMC_switch_to_data_fax(char *mode) { char buffer[VOICE_BUF_LEN]; reset_watchdog(); sprintf(buffer, "AT#CLS=%s", mode); if (voice_command(buffer, "OK") != VMA_USER_1) return(FAIL); return(OK); }
static int Digi_RAS_set_compression (int *compression, int *speed, int *bits) { reset_watchdog(); if (*compression == 0) *compression = 4; if (*speed == 0) *speed = 8000; if (*speed != 8000) { lprintf(L_WARN, "%s: Illegal sample rate (%d)", voice_modem_name, *speed); return(FAIL); }; switch (*compression) { case 4: *bits = 8; if (voice_command("AT+VSM=4", "OK") != VMA_USER_1) return(FAIL); break; case 5: *bits = 8; if (voice_command("AT+VSM=5", "OK") != VMA_USER_1) return(FAIL); break; default: lprintf(L_WARN, "%s: Illegal voice compression method (%d)", voice_modem_name, *compression); return(FAIL); }; return(OK); }
static int UMC_set_compression(int *compression, int *speed, int *bits) { reset_watchdog(); if (*compression == 0) *compression = 4; if (*speed == 0) *speed = 7200; switch (*compression) { case 2: *bits=2; if (voice_command("AT#VBS=2", "OK") != VMA_USER_1) return(FAIL); return (OK); case 3: *bits=3; if (voice_command("AT#VBS=3", "OK") != VMA_USER_1) return(FAIL); return (OK); case 4: *bits=4; if (voice_command("AT#VBS=4", "OK") != VMA_USER_1) return(FAIL); return (OK); } lprintf(L_WARN, "UMC handle event: Illegal voice compression method (%d)", *compression); return(FAIL); }
int Cirrus_Logic_switch_to_data_fax (char *mode) { char buffer[VOICE_BUF_LEN]; lprintf(L_MESG, "Switching to data/fax"); reset_watchdog(); sprintf(buffer, "AT+FCLASS=%s", mode); if (voice_command(buffer, "OK") != VMA_USER_1) return(FAIL); return(OK); }
static int Cirrus_Logic_set_compression (p_int *compression, p_int *speed, int *bits) { lprintf(L_MESG, "Setting compression"); reset_watchdog(); if (*compression == 0) *compression = 1; if (*speed == 0) *speed = 9600; if (*speed != 9600) { lprintf(L_WARN, "%s: Illegal sample speed (%d)", voice_modem_name, *speed); return(FAIL); } voice_command("AT#VSR=9600", "OK"); switch (*compression) { case 3: voice_command("AT#VSM=AD3", "OK"); *bits = 3; return(OK); case 4: voice_command("AT#VSM=AD4", "OK"); *bits = 4; return(OK); default: voice_command("AT#VSM=CL1", "OK"); *bits = 5; return(OK); } return(OK); }
static int Multitech_2834_voice_mode_off(void) { char buffer[VOICE_BUF_LEN]; sprintf(buffer, "%s%s", voice_modem->switch_mode_cmnd, mode_save); if ((voice_command(buffer, voice_modem->switch_mode_answr) & VMA_USER) != VMA_USER) return FAIL; Multitech_2834_fix_modem(1); return OK; }
int Multitech_5634ZPX_switch_to_data_fax(char *mode) { char buffer[VOICE_BUF_LEN]; sprintf(buffer, "%s%s", voice_modem->switch_mode_cmnd, mode); if ((voice_command(buffer, voice_modem->switch_mode_answr) & VMA_USER) != VMA_USER) return FAIL; Multitech_5634ZPX_fix_modem(1); return OK; }