summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/gsmd/usock.h38
-rw-r--r--include/libgsmd/voicecall.h35
2 files changed, 73 insertions, 0 deletions
diff --git a/include/gsmd/usock.h b/include/gsmd/usock.h
index d05f2bc..ddec870 100644
--- a/include/gsmd/usock.h
+++ b/include/gsmd/usock.h
@@ -43,6 +43,11 @@ enum gsmd_msg_voicecall_type {
GSMD_VOICECALL_VOL_GET = 6,
GSMD_VOICECALL_GET_STAT = 7,
GSMD_VOICECALL_CTRL = 8,
+ GSMD_VOICECALL_FWD_DIS = 9,
+ GSMD_VOICECALL_FWD_EN = 10,
+ GSMD_VOICECALL_FWD_STAT = 11,
+ GSMD_VOICECALL_FWD_REG = 12,
+ GSMD_VOICECALL_FWD_ERAS = 13,
};
@@ -99,6 +104,22 @@ enum gsmd_call_ctrl_proc {
GSMD_CALL_CTRL_M_HELD = 6, // 3
};
+/* call forward reason from 3GPP TS 07.07 subclause 07.10 */
+enum gsmd_call_fwd_reason {
+ GSMD_CALL_FWD_REASON_UNCOND = 0,
+ GSMD_CALL_FWD_REASON_BUSY = 1,
+ GSMD_CALL_FWD_REASON_NO_REPLY = 2,
+ GSMD_CALL_FWD_REASON_NOT_REACHABLE = 3,
+ GSMD_CALL_FWD_REASON_ALL_FORWARD = 4,
+ GSMD_CALL_FWD_REASON_ALL_COND_FORWARD = 5,
+};
+
+/* call forward status from 3GPP TS 07.07 subclause 07.10 */
+enum gsmd_call_fwd_status {
+ GSMD_CALL_FWD_STATUS_NOT_ACTIVE = 0,
+ GSMD_CALL_FWD_STATUS_ACTIVE = 1,
+};
+
/* Handset / MT related commands */
enum gsmd_msg_phone_type {
GSMD_PHONE_VOLUME = 1,
@@ -384,6 +405,23 @@ struct gsmd_call_ctrl {
u_int8_t idx;
} __attribute__ ((packed));
+/* call forwarding register from 3GPP TS 07.07 clause 7.10 */
+struct gsmd_call_fwd_reg {
+ enum gsmd_call_fwd_reason reason;
+ struct gsmd_addr addr;
+} __attribute__ ((packed));
+
+/* status of call forwarding from 3GPP TS 07.07 clause 7.10 */
+struct gsmd_call_fwd_stat {
+ enum gsmd_call_fwd_status status;
+ u_int8_t classx;
+ struct gsmd_addr addr;
+ char subaddr[16+1];
+ u_int8_t satype;
+ u_int8_t time;
+ int is_last;
+} __attribute__ ((packed));
+
#define GSMD_PIN_MAXLEN 8
struct gsmd_pin {
enum gsmd_pin_type type;
diff --git a/include/libgsmd/voicecall.h b/include/libgsmd/voicecall.h
index ac7b99c..87ecfcc 100644
--- a/include/libgsmd/voicecall.h
+++ b/include/libgsmd/voicecall.h
@@ -22,12 +22,28 @@ enum lgsm_voicecall_ctrl_proc {
LGSM_VOICECALL_CTRL_M_HELD = 6, // 3
};
+/* call forward reason from 3GPP TS 07.07 subclause 07.10 */
+enum lgsmd_voicecall_fwd_reason {
+ GSMD_VOICECALL_FWD_REASON_UNCOND = 0,
+ GSMD_VOICECALL_FWD_REASON_BUSY = 1,
+ GSMD_VOICECALL_FWD_REASON_NO_REPLY = 2,
+ GSMD_VOICECALL_FWD_REASON_NOT_REACHABLE = 3,
+ GSMD_VOICECALL_FWD_REASON_ALL_FORWARD = 4,
+ GSMD_VOICECALL_FWD_REASON_ALL_COND_FORWARD = 5,
+};
+
/* Refer to GSM 07.07 subclause 7.12 and 02.30 subclause 4.5.5.1 */
struct lgsm_voicecall_ctrl {
enum lgsm_voicecall_ctrl_proc proc;
int idx;
};
+/* Refer to GSM 07.07 subclause 07.10 */
+struct lgsm_voicecall_fwd_reg {
+ enum lgsmd_voicecall_fwd_reason reason;
+ struct lgsm_addr number;
+};
+
/* Initiate an outgoing voice call */
extern int lgsm_voice_out_init(struct lgsm_handle *lh,
const struct lgsm_addr *number);
@@ -48,4 +64,23 @@ extern int lgsm_voice_get_status(struct lgsm_handle *lh);
extern int lgsm_voice_ctrl(struct lgsm_handle *lh,
const struct lgsm_voicecall_ctrl *ctrl);
+/* disable call forwarding */
+extern int lgsm_voice_fwd_disable(struct lgsm_handle *lh,
+ enum lgsmd_voicecall_fwd_reason reason);
+
+/* enable call forwarding */
+extern int lgsm_voice_fwd_enable(struct lgsm_handle *lh,
+ enum lgsmd_voicecall_fwd_reason reason);
+
+/* querty current status/setting of call forwarding */
+extern int lgsm_voice_fwd_stat(struct lgsm_handle *lh,
+ enum lgsmd_voicecall_fwd_reason reason);
+
+/* register call forwarding */
+extern int lgsm_voice_fwd_reg(struct lgsm_handle *lh,
+ struct lgsm_voicecall_fwd_reg *fwd_reg);
+
+/* erase the record of registered call forwarding */
+extern int lgsm_voice_fwd_erase(struct lgsm_handle *lh,
+ enum lgsmd_voicecall_fwd_reason reason);
#endif
personal git repositories of Harald Welte. Your mileage may vary