[-]
[+]
|
Changed |
_service:tar_git:ofono.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:ofono.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -1,7 +1,7 @@
<services>
<service name="tar_git">
<param name="url">https://git.merproject.org/slava/ofono.git</param>
- <param name="branch">reg_state</param>
- <param name="revision">4be4cb4</param>
+ <param name="branch">master</param>
+ <param name="revision">21e90e5</param>
</service>
</services>
|
[-]
[+]
|
Changed |
_service:tar_git:ofono-1.16+git25.tar.xz/ofono/drivers/ril/ril_constants.h
^
|
@@ -142,6 +142,22 @@
#define CALL_FAIL_CDMA_ACCESS_BLOCKED 1009
#define CALL_FAIL_ERROR_UNSPECIFIED 0xffff
+/* Not defined in ril.h but valid 3GPP specific cause values
+ * for call control. See 3GPP TS 24.008 Annex H. */
+#define CALL_FAIL_NO_ROUTE_TO_DESTINATION 3
+#define CALL_FAIL_CHANNEL_UNACCEPTABLE 6
+#define CALL_FAIL_OPERATOR_DETERMINED_BARRING 8
+#define CALL_FAIL_NO_USER_RESPONDING 18
+#define CALL_FAIL_USER_ALERTING_NO_ANSWER 19
+#define CALL_FAIL_CALL_REJECTED 21
+#define CALL_FAIL_NUMBER_CHANGED 22
+#define CALL_FAIL_ANONYMOUS_CALL_REJECTION 24
+#define CALL_FAIL_PRE_EMPTION 25
+#define CALL_FAIL_DESTINATION_OUT_OF_ORDER 27
+#define CALL_FAIL_INCOMPLETE_NUMBER 28
+#define CALL_FAIL_FACILITY_REJECTED 29
+#define CALL_FAIL_NORMAL_UNSPECIFIED 31
+
/* see RIL_REQUEST_DEACTIVATE_DATA_CALL parameter */
#define RIL_DEACTIVATE_DATA_CALL_NO_REASON 0
#define RIL_DEACTIVATE_DATA_CALL_RADIO_SHUTDOWN 1
|
[-]
[+]
|
Changed |
_service:tar_git:ofono-1.16+git25.tar.xz/ofono/drivers/ril/ril_voicecall.c
^
|
@@ -1,7 +1,7 @@
/*
* oFono - Open Source Telephony - RIL-based devices
*
- * Copyright (C) 2015 Jolla Ltd.
+ * Copyright (C) 2015-2016 Jolla Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
@@ -175,6 +175,24 @@
return l;
}
+/* Valid call statuses have value >= 0 */
+static int call_status_with_id(struct ofono_voicecall *vc, int id)
+{
+ GSList *l;
+ struct voicecall *v;
+
+ GASSERT(vc);
+
+ for (l = vc->call_list; l; l = l->next) {
+ v = l->data;
+ if (v->call->id == id) {
+ return v->call->status;
+ }
+ }
+
+ return -1;
+}
+
static void ril_voicecall_lastcause_cb(GRilIoChannel *io, int status,
const void *data, guint len, void *user_data)
{
@@ -182,6 +200,7 @@
struct ofono_voicecall *vc = reqdata->vc;
int tmp;
int id = reqdata->id;
+ int call_status;
enum ofono_disconnect_reason reason = OFONO_DISCONNECT_REASON_ERROR;
int last_cause = CALL_FAIL_ERROR_UNSPECIFIED;
@@ -197,33 +216,55 @@
* protocols", Annex H, are properly reflected in the RIL API.
* For example, cause #21 "call rejected" is mapped to
* CALL_FAIL_ERROR_UNSPECIFIED, and thus indistinguishable
- * from a network failure. We signal disconnect reason "remote"
- * for cause values
- * - #16 "normal call clearing"
- * - #17 "user busy"
- * - UNSPECIFIED for MO calls that are not yet connected
- * , and disconnect reason "network" otherwise.
+ * from a network failure.
*/
- ofono_info("Call %d ended with RIL cause %d", id, last_cause);
- if (last_cause == CALL_FAIL_NORMAL || last_cause == CALL_FAIL_BUSY) {
- reason = OFONO_DISCONNECT_REASON_REMOTE_HANGUP;
- }
+ switch (last_cause) {
+ case CALL_FAIL_UNOBTAINABLE_NUMBER:
+ case CALL_FAIL_NORMAL:
+ case CALL_FAIL_BUSY:
+ case CALL_FAIL_NO_ROUTE_TO_DESTINATION:
+ case CALL_FAIL_CHANNEL_UNACCEPTABLE:
+ case CALL_FAIL_OPERATOR_DETERMINED_BARRING:
+ case CALL_FAIL_NO_USER_RESPONDING:
+ case CALL_FAIL_USER_ALERTING_NO_ANSWER:
+ case CALL_FAIL_CALL_REJECTED:
+ case CALL_FAIL_NUMBER_CHANGED:
+ case CALL_FAIL_ANONYMOUS_CALL_REJECTION:
+ case CALL_FAIL_PRE_EMPTION:
+ case CALL_FAIL_DESTINATION_OUT_OF_ORDER:
+ case CALL_FAIL_INCOMPLETE_NUMBER:
+ case CALL_FAIL_FACILITY_REJECTED:
+ reason = OFONO_DISCONNECT_REASON_REMOTE_HANGUP;
+ break;
+
+ case CALL_FAIL_NORMAL_UNSPECIFIED:
+ call_status = call_status_with_id(vc, id);
+ if (call_status == CALL_STATUS_ACTIVE ||
+ call_status == CALL_STATUS_HELD ||
+ call_status == CALL_STATUS_DIALING ||
+ call_status == CALL_STATUS_ALERTING) {
+ reason = OFONO_DISCONNECT_REASON_REMOTE_HANGUP;
+ } else if (call_status == CALL_STATUS_INCOMING) {
+ reason = OFONO_DISCONNECT_REASON_LOCAL_HANGUP;
+ }
+ break;
- if (last_cause == CALL_FAIL_ERROR_UNSPECIFIED) {
- GSList *l;
- struct voicecall *v;
- for (l = vc->call_list; l; l = l->next) {
- v = l->data;
- if (v->call->id == id) {
- if (v->call->status == CALL_STATUS_DIALING ||
- v->call->status == CALL_STATUS_ALERTING) {
- reason = OFONO_DISCONNECT_REASON_REMOTE_HANGUP;
- }
- break;
+ case CALL_FAIL_ERROR_UNSPECIFIED:
+ call_status = call_status_with_id(vc, id);
+ if (call_status == CALL_STATUS_DIALING ||
+ call_status == CALL_STATUS_ALERTING) {
+ reason = OFONO_DISCONNECT_REASON_REMOTE_HANGUP;
}
- }
+ break;
+
+ default:
+ reason = OFONO_DISCONNECT_REASON_ERROR;
+ break;
}
+ ofono_info("Call %d ended with RIL cause %d -> ofono reason %d",
+ id, last_cause, reason);
+
ofono_voicecall_disconnected(vc, id, reason, NULL);
}
|