Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
sdk:scripts:voice-dispatcher-audio [2015/05/05 15:04]
127.0.0.1 external edit
sdk:scripts:voice-dispatcher-audio [2022/08/23 13:21]
juraschek
Line 2: Line 2:
 <code c voice-dispatcher-audio.are>​ <code c voice-dispatcher-audio.are>​
 /* DESC: This script implements an audio voice dispatcher /* DESC: This script implements an audio voice dispatcher
 + * The first audio Interface (line-in/​out) is used for the GSM-Call audio.
 + * - Dialing os controlled via digital in 1 (in1)
 + ​* ​  If it is set high (1), the predefined nummer is called. ​
 + ​* ​  Must be set to high (1) to acknowledge incomming calls.
 + ​* ​  Any call will be terminated when it goes low (0).
 + * - Incomming calls are signaled at digital out 1 (out1). ​
 + ​* ​  ​It'​s set to high (1) when call is incomming and statys high during call.
 + ​* ​  It will go to low (0) when the call is ended.
 + *
  * Copyright (C) 2012 NetModule AG, Switzerland  * Copyright (C) 2012 NetModule AG, Switzerland
 + ​* ​
  */  */
  
-INTERVAL = 3;           /​* ​seconds */+INTERVAL = 1;           /​* ​polling status change every x seconds */
 NUMBER = "​+123456789"; ​ /* number to call when DI1 = on */ NUMBER = "​+123456789"; ​ /* number to call when DI1 = on */
  
Line 83: Line 93:
                     nb_syslog("​unable to initate call to %s", NUMBER);                     nb_syslog("​unable to initate call to %s", NUMBER);
                 }                 }
 +              nb_dio_set("​out2",​ 1); /* call is active */
             } else {             } else {
                 nb_syslog("​not calling %s as endpoint %s is not available",​ NUMBER, audesc);                 nb_syslog("​not calling %s as endpoint %s is not available",​ NUMBER, audesc);
Line 99: Line 110:
                 }                 }
             }             }
 +            nb_dio_set("​out2",​ 0); /* no active call */
         }         }
  
Line 123: Line 135:
         switch (type) {         switch (type) {
             case "​outgoing":​             case "​outgoing":​
-                /don't touch any locally initiated calls */+                /don't touch any locally initiated calls 
                 break;                 break;
             case "​incoming":​             case "​incoming":​
Line 129: Line 141:
                           id, struct_get(call,​ "​calling"​),​ struct_get(call,​ "​called"​));​                           id, struct_get(call,​ "​calling"​),​ struct_get(call,​ "​called"​));​
  
-                /route any incoming calls to audio device ​*/+                /route any incoming calls to audio device ​
                 if (nb_voice_call_route(call,​ audesc) == 0) {                 if (nb_voice_call_route(call,​ audesc) == 0) {
                     nb_syslog("​routing call %d to %s", id, audesc);                     nb_syslog("​routing call %d to %s", id, audesc);
 +                    nb_dio_set("​out2",​ 1); /* ring, incomming call */
                 } else {                 } else {
                     nb_syslog("​unable to route call %d to %s", id, audesc);                     nb_syslog("​unable to route call %d to %s", id, audesc);
                     nb_voice_call_hangup(call);​                     nb_voice_call_hangup(call);​
 +                    // no signaling ​
                 }                 }
                 break;                 break;
             case "​dispatched":​             case "​dispatched":​
-                /accept calls if DI1 closes ​*/+                /accept calls if DI1 closes ​
  
                 nb_syslog("​call %s: %s to %s got dispatched",​                 nb_syslog("​call %s: %s to %s got dispatched",​
Line 146: Line 160:
                     if (austate == "​available"​) {                     if (austate == "​available"​) {
                         nb_syslog("​hanging up call %d as audio is busy", id);                         nb_syslog("​hanging up call %d as audio is busy", id);
-                        nb_voice_call_hangup(call);​ 
                     } else {                     } else {
-                        /wait until IN1 has been closed ​*/+                        /wait until IN1 has been closed ​
                         nb_syslog("​waiting 10s until IN1 is closed"​);​                         nb_syslog("​waiting 10s until IN1 is closed"​);​
                         for (i = 0; i < 10; i++) {                         for (i = 0; i < 10; i++) {
Line 157: Line 170:
                                 if (nb_voice_call_accept(call) == 0) {                                 if (nb_voice_call_accept(call) == 0) {
                                     nb_syslog("​accepted call %d", id);                                     nb_syslog("​accepted call %d", id);
- +                                    ​// nb_voice_call_volume(call,​ 7); increase volume level to max // 
-                                    if (1) { +                                    return; ​/* call established */
-                                        ​/* increase volume level */ +
-                                        ​nb_voice_call_volume(call,​ 7); +
-                                    } +
- +
-                                    return;+
                                 } else {                                 } else {
                                     nb_syslog("​unable to accept call %d", id);                                     nb_syslog("​unable to accept call %d", id);
Line 172: Line 180:
                         }                         }
                     }                     }
-                    /otherwise hangup ​*/+                    /otherwise hangup ​
                     nb_syslog("​hanging up call %d", id);                     nb_syslog("​hanging up call %d", id);
                     nb_voice_call_hangup(call);​                     nb_voice_call_hangup(call);​
 +                    nb_dio_set("​out2",​ 0); // error, no active call 
                 }                 }
                 break;                 break;
Line 200: Line 209:
  
 d = new dispatcher();​ d = new dispatcher();​
 +nb_dio_set("​out1",​ 0); // clear signaling ​
 dump(d); dump(d);
 d.run(); d.run();