#define SIG_SF_FEATB (0x800000 | ZT_SIG_SF)
#define SIG_EM_E1 ZT_SIG_EM_E1
#define SIG_GR303FXOKS (0x100000 | ZT_SIG_FXOKS)
+#define SIG_GR303FXSKS (0x200000 | ZT_SIG_FXSKS)
#define NUM_SPANS 32
#define NUM_DCHANS 4 /* No more than 4 d-channels */
return "SF (Tone) Signalling with Feature Group B (MF)";
case SIG_GR303FXOKS:
return "GR-303 Signalling with FXOKS";
+ case SIG_GR303FXSKS:
+ return "GR-303 Signalling with FXSKS";
case 0:
return "Pseudo Signalling";
default:
case SIG_FXSLS:
case SIG_FXSGS:
case SIG_FXSKS:
+ case SIG_GR303FXSKS:
zt_disable_ec(i);
res = tone_zone_play_tone(i->subs[SUB_REAL].zfd, -1);
zt_set_hook(i->subs[SUB_REAL].zfd, ZT_ONHOOK);
} else {
if (channel == CHAN_PSEUDO)
signalling = 0;
- else if (signalling != SIG_FXOKS) {
- ast_log(LOG_ERROR, "CRV's must use FXO Kewl Start (fxo_ks) signalling only.\n");
+ else if ((signalling != SIG_FXOKS) && (signalling != SIG_FXSKS)) {
+ ast_log(LOG_ERROR, "CRV's must use FXO/FXS Kewl Start (fxo_ks/fxs_ks) signalling only.\n");
return NULL;
}
}
#ifdef ZAPATA_PRI
- if ((signalling == SIG_PRI) || (signalling == SIG_GR303FXOKS)) {
+ if ((signalling == SIG_PRI) || (signalling == SIG_GR303FXOKS) || (signalling == SIG_GR303FXSKS)) {
int offset;
int myswitchtype;
int matchesdchan;
cur_signalling = SIG_GR303FXOKS;
cur_radio = 0;
pritype = PRI_NETWORK;
+ } else if (!strcasecmp(v->value, "gr303fxsks_cpe")) {
+ cur_signalling = SIG_GR303FXSKS;
+ cur_radio = 0;
+ pritype = PRI_CPE;
#endif
#ifdef ZAPATA_R2
} else if (!strcasecmp(v->value, "r2")) {
; pri_cpe: PRI signalling, CPE side
; pri_net: PRI signalling, Network side
; gr303fxoks_net: GR-303 Signalling, FXO Loopstart, Network side
+; gr303fxsks_cpe: GR-303 Signalling, FXS Loopstart, CPE side
; sf: SF (Inband Tone) Signalling
; sf_w: SF Wink
; sf_featd: SF Feature Group D (The fake, Adtran style, DTMF)