summaryrefslogtreecommitdiffstats
path: root/src/ss5/ss5.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ss5/ss5.h')
-rw-r--r--src/ss5/ss5.h85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/ss5/ss5.h b/src/ss5/ss5.h
new file mode 100644
index 0000000..91acdc9
--- /dev/null
+++ b/src/ss5/ss5.h
@@ -0,0 +1,85 @@
+
+#include "../libtimer/timer.h"
+#include "../libosmocc/endpoint.h"
+#include "../libosmocc/helper.h"
+#include "../libsample/sample.h"
+#include "../libjitter/jitter.h"
+#include "mf.h"
+#include "dsp.h"
+
+enum ss5_state {
+ SS5_STATE_NULL = 0,
+ /* idle line */
+ SS5_STATE_IDLE,
+ /* outgoing call */
+ SS5_STATE_SEND_SEIZE, /* sending seize, waiting for proceed-to-send */
+ SS5_STATE_RECV_PROCEED, /* detected proceed-to-send, waiting to cease */
+ SS5_STATE_SEND_DIGITS, /* proceed-to-send is ceased, sending digits */
+ SS5_STATE_OUT_INACTIVE, /* waiting for called party to answer or being busy */
+ SS5_STATE_SEND_ACK_ANS, /* detected answer, sending acknowledge, waiting to cease */
+ SS5_STATE_SEND_ACK_BUS, /* detected busy-flash, sending acknowledge, waiting to cease */
+ SS5_STATE_SEND_ACK_CLR, /* detected clear-back, sending acknowledge, waiting to cease */
+ SS5_STATE_OUT_ACTIVE, /* detected answer is ceased */
+ SS5_STATE_SEND_CLR_FWD, /* sending clear-forward, waiting for release-guard */
+ SS5_STATE_RECV_RELEASE, /* receiving release-guard, waiting to cease */
+ SS5_STATE_SEND_FORWARD, /* sending forward-transfer for a while */
+ /* incoming call */
+ SS5_STATE_SEND_PROCEED, /* detected seize, sending procced-to-send, waiting to cease */
+ SS5_STATE_RECV_DIGIT, /* seize is ceased, waiting for digits */
+ SS5_STATE_RECV_SPACE, /* digit received, waiting to cease */
+ SS5_STATE_IN_INACTIVE, /* waiting for called party to answer or disconnect */
+ SS5_STATE_SEND_ANSWER, /* sending answer, waiting for for acknowledge */
+ SS5_STATE_IN_ACTIVE, /* detected acknowledge of answer */
+ SS5_STATE_SEND_BUSY, /* sending busy-flash, waiting for acknowledge */
+ SS5_STATE_SEND_CLR_BAK, /* sending clear back (hangup) */
+ SS5_STATE_SEND_RELEASE, /* detected clear-forward, sending release-guard, waiting for cease */
+ SS5_STATE_SEND_REL_WAIT,/* clear forward ceased, but waiting to prevent blueboxing */
+ /* seize collision */
+ SS5_STATE_DOUBLE_SEIZE, /* seize is detected, sending for while, waiting for cease */
+};
+
+extern const char *ss5_state_names[];
+
+struct ss5_endpoint;
+
+/* SS5 link definition */
+typedef struct ss5 {
+ struct ss5 *next;
+ struct ss5_endpoint *ss5_ep;
+ char name[32]; /* name of link for debugging */
+
+ /* call states */
+ enum ss5_state state; /* state of link */
+ struct timer timer; /* for several timeouts */
+ uint32_t cc_callref; /* ref to CC call */
+ osmo_cc_session_t *cc_session; /* audio session description */
+ osmo_cc_session_codec_t *codec; /* selected codec */
+ char callerid[65]; /* current caller id (outgoing only) */
+ char dialing[33]; /* current dial string (send or receive) */
+
+ /* audio processing */
+ jitter_t dejitter; /* jitter buffer for audio from CC */
+ dsp_t dsp; /* all dsp processing */
+ sample_t *delay_buffer; /* buffer for delaying audio */
+ int delay_length;
+ int delay_index;
+} ss5_t;
+
+/* SS5 endpoint definition */
+typedef struct ss5_endpoint {
+ osmo_cc_endpoint_t cc_ep;
+ ss5_t *link_list;
+ double samplerate;
+ int suppress_disconnect; /* do not forward disconnect towards CC */
+ int prevent_blueboxing; /* extend release-guard, so outgoing exchange releases */
+ int crosstalk; /* mix crosstalk from TX to RX */
+ int comfort_noise; /* add comfort noise before answer and after disconnect */
+ int delay_ms; /* add delay to simulate long distance lines */
+ double sense_db; /* increase sensitivity of decoder by this value */
+} ss5_endpoint_t;
+
+void refresh_status(void);
+ss5_endpoint_t *ss5_ep_create(const char *ep_name, int links, int prevent_blueboxing, int crosstalk, int delay_ms, int comfort_noise, int suppress_disconnect, double sense_db);
+void ss5_ep_destroy(ss5_endpoint_t *ss5_ep);
+void cc_message(osmo_cc_endpoint_t *ep, uint32_t callref, osmo_cc_msg_t *msg);
+