From ae52101ce5c69c5839d8debccc288efbc60009bc Mon Sep 17 00:00:00 2001 From: "jk7744.park" Date: Tue, 8 Sep 2015 22:39:38 +0900 Subject: [PATCH] tizen 2.3.1 release --- CMakeLists.txt | 12 +- debian/changelog | 1812 ------- debian/compat | 1 - debian/control | 28 - debian/dirs | 2 - debian/docs | 0 debian/libslp-tapi-0.install.in | 1 - debian/libslp-tapi-dev.install.in | 2 - debian/rules | 117 - doc/libtapi_doc.h | 292 + image/SLP_TelephonyFW_PG_image001.png | Bin 117380 -> 0 bytes image/SLP_TelephonyFW_PG_image002.png | Bin 114263 -> 0 bytes image/SLP_TelephonyFW_PG_image003.png | Bin 5305 -> 0 bytes image/SLP_TelephonyFW_PG_image004.png | Bin 4009 -> 0 bytes include/ITapiCall.h | 2423 ++------- include/ITapiModem.h | 499 +- include/ITapiNetText.h | 1452 +---- include/ITapiNetwork.h | 947 +--- include/ITapiPS.h | 764 --- include/ITapiPhonebook.h | 541 +- include/ITapiSap.h | 431 +- include/ITapiSat.h | 413 +- include/ITapiSim.h | 1765 ++---- include/ITapiSs.h | 1147 ++-- include/SLP_TelephonyFW_PG.h | 9600 --------------------------------- include/TapiUtility.h | 201 +- include/TelCall.h | 1130 ++-- include/TelDefines.h | 80 - include/TelDisplay.h | 200 - include/TelErr.h | 186 - include/TelMisc.h | 363 +- include/TelNetwork.h | 693 ++- include/TelPower.h | 47 +- include/TelSat.h | 686 +-- include/TelSatEnvelope.h | 164 +- include/TelSatObj.h | 1819 ++++--- include/TelSatProactvCmd.h | 802 +-- include/TelSim.h | 1503 ++++-- include/TelSms.h | 885 +-- include/TelSs.h | 580 +- include/tapi_common.h | 143 +- include/tapi_event.h | 120 +- include/tapi_sat.h | 38 - include/tapi_type.h | 49 +- libslp-tapi.manifest | 8 + packaging/libslp-tapi.spec | 56 +- src/common.h | 48 +- src/tapi_call.c | 590 +- src/tapi_common.c | 2291 +++++--- src/tapi_log.h | 22 +- src/tapi_modem.c | 251 +- src/tapi_network.c | 887 ++- src/tapi_phonebook.c | 257 +- src/tapi_sap.c | 160 +- src/tapi_sat.c | 285 +- src/tapi_sim.c | 1753 ++++-- src/tapi_sms.c | 1111 ++-- src/tapi_ss.c | 236 +- test_src/CMakeLists.txt | 25 + test_src/call.c | 1007 ++++ test_src/call.h | 27 + test_src/main.c | 342 ++ test_src/menu.c | 390 ++ test_src/menu.h | 125 + test_src/modem.c | 380 ++ test_src/modem.h | 27 + test_src/network.c | 1029 ++++ test_src/network.h | 27 + test_src/phonebook.c | 448 ++ test_src/phonebook.h | 26 + test_src/sat.c | 199 + test_src/sat.h | 27 + test_src/sim.c | 1509 ++++++ test_src/sim.h | 26 + test_src/sms.c | 1731 ++++++ test_src/sms.h | 650 +++ test_src/sms_util.c | 902 ++++ test_src/sms_util.h | 557 ++ test_src/ss.c | 647 +++ test_src/ss.h | 27 + 80 files changed, 23193 insertions(+), 26828 deletions(-) delete mode 100644 debian/changelog delete mode 100644 debian/compat delete mode 100644 debian/control delete mode 100644 debian/dirs delete mode 100644 debian/docs delete mode 100644 debian/libslp-tapi-0.install.in delete mode 100644 debian/libslp-tapi-dev.install.in delete mode 100755 debian/rules create mode 100644 doc/libtapi_doc.h delete mode 100755 image/SLP_TelephonyFW_PG_image001.png delete mode 100755 image/SLP_TelephonyFW_PG_image002.png delete mode 100755 image/SLP_TelephonyFW_PG_image003.png delete mode 100755 image/SLP_TelephonyFW_PG_image004.png delete mode 100644 include/ITapiPS.h delete mode 100644 include/SLP_TelephonyFW_PG.h delete mode 100644 include/TelDefines.h delete mode 100644 include/TelDisplay.h delete mode 100644 include/TelErr.h mode change 100755 => 100644 include/TelSms.h delete mode 100644 include/tapi_sat.h create mode 100644 libslp-tapi.manifest create mode 100644 test_src/CMakeLists.txt create mode 100644 test_src/call.c create mode 100644 test_src/call.h create mode 100644 test_src/main.c create mode 100644 test_src/menu.c create mode 100644 test_src/menu.h create mode 100644 test_src/modem.c create mode 100644 test_src/modem.h create mode 100644 test_src/network.c create mode 100644 test_src/network.h create mode 100644 test_src/phonebook.c create mode 100644 test_src/phonebook.h create mode 100644 test_src/sat.c create mode 100644 test_src/sat.h create mode 100644 test_src/sim.c create mode 100644 test_src/sim.h create mode 100644 test_src/sms.c create mode 100644 test_src/sms.h create mode 100644 test_src/sms_util.c create mode 100644 test_src/sms_util.h create mode 100644 test_src/ss.c create mode 100644 test_src/ss.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d5d578..73dafcb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,9 +15,11 @@ FOREACH(flag ${pkgs_CFLAGS}) ENDFOREACH(flag) SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -Wl,-zdefs -fvisibility=hidden ") -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Werror -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wmissing-declarations -Wredundant-decls -Wcast-align") + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Werror -Wextra -Wno-missing-field-initializers -Wdeclaration-after-statement -Wmissing-declarations -Wredundant-decls -O2 -Wall -Wno-array-bounds -Wno-empty-body -Wno-ignored-qualifiers -Wno-unused-parameter -Wwrite-strings -Wswitch-default -Wno-unused-but-set-variable ") + #SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") -SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed") +SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed") INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src) @@ -41,7 +43,7 @@ SET(SRCS src/tapi_sms.c src/tapi_sat.c src/tapi_modem.c - ) +) ADD_LIBRARY(SLP-tapi SHARED ${SRCS}) TARGET_LINK_LIBRARIES(SLP-tapi ${pkgs_LDFLAGS}) @@ -54,3 +56,7 @@ CONFIGURE_FILE(tapi.pc.in tapi.pc @ONLY) INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION include/telephony-client) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/tapi.pc DESTINATION lib/pkgconfig) INSTALL(TARGETS SLP-tapi DESTINATION lib COMPONENT Runtime) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION /usr/share/license RENAME libslp-tapi) +IF (TIZEN_ENGINEER_MODE) + ADD_SUBDIRECTORY(test_src) +ENDIF (TIZEN_ENGINEER_MODE) diff --git a/debian/changelog b/debian/changelog deleted file mode 100644 index 4a51001..0000000 --- a/debian/changelog +++ /dev/null @@ -1,1812 +0,0 @@ -libslp-tapi (0.5.89) unstable; urgency=low - - * Sync Version with OBS - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.89 - - -- Youngman Park Fri, 25 May 2012 14:40:21 +0900 - -libslp-tapi (0.5.88) unstable; urgency=low - - * Sync Header File with Public GIT - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.88 - - -- Youngman Park Thu, 24 May 2012 22:30:21 +0900 - -libslp-tapi (0.5.87) unstable; urgency=low - - * add new feature for call, factory & phonebook select function - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.87 - - -- Youngman Park Mon, 21 May 2012 17:50:21 +0900 - -libslp-tapi (0.5.86) unstable; urgency=low - - * add sim api - get lock info and update phonebook data - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.86 - - -- Kyeongchul Kim Thu, 17 May 2012 17:32:21 +0900 - -libslp-tapi (0.5.86) unstable; urgency=low - - * add sim api - get lock info and update phonebook data - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.86 - - -- Kyeongchul Kim Thu, 17 May 2012 17:32:21 +0900 - -libslp-tapi (0.5.85) unstable; urgency=low - - * glib include into Sound Header to use gboolean type - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.85 - - -- Youngman Park Tue, 08 May 2012 14:20:33 +0900 - -libslp-tapi (0.5.84) unstable; urgency=low - - * Add Call New API ( call custom service ) - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.84 - - -- Youngman Park Mon, 07 May 2012 16:05:33 +0900 - -libslp-tapi (0.5.83) unstable; urgency=low - - * Fix dbus bug - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.83 - - -- DongHoo Park Tue, 10 Apr 2012 15:13:33 +0900 - -libslp-tapi (0.5.82) unstable; urgency=low - - * version up for code sync with public binary - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.82 - - -- Kyeongchul Kim Mon, 02 Apr 2012 12:00:29 +0900 - -libslp-tapi (0.5.81) unstable; urgency=low - - * add defence code in case of api return error - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.81 - - -- Kyeongchul Kim Wed, 21 Mar 2012 21:52:04 +0900 - -libslp-tapi (0.5.80) unstable; urgency=low - - * Update phonebook record struct - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.80 - - -- Kyeongchul Kim Mon, 19 Mar 2012 22:54:30 +0900 - -libslp-tapi (0.5.79) unstable; urgency=low - - * disable SAT functionality temporary - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.79 - - -- Kyeongchul Kim Mon, 19 Mar 2012 14:52:45 +0900 - -libslp-tapi (0.5.78) unstable; urgency=low - - * code clean up - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.78 - - -- Kyeongchul Kim Thu, 16 Feb 2012 21:00:36 +0900 - -libslp-tapi (0.5.77) unstable; urgency=low - - * SIM auth API and Doxygen comments are updated - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.77 - - -- Kyeongchul Kim Wed, 01 Feb 2012 16:51:05 +0900 - -libslp-tapi (0.5.76) unstable; urgency=low - - * Factory Omission Avoidance Bug Fix ( Confirm Message Broadcasting Problem ) - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.76 - - -- Youngman Park Fri, 09 Dec 2011 19:19:47 +0900 - -libslp-tapi (0.5.75) unstable; urgency=low - - * TIZEN initial version - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.75 - - -- Kyeongchul Kim Wed, 07 Dec 2011 20:19:47 +0900 - -libslp-tapi (0.5.74) unstable; urgency=low - - * Modify Code for Factory Sound Loopback - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.74 - - -- Youngman Park Wed, 23 Nov 2011 19:41:55 +0900 - -libslp-tapi (0.5.73) unstable; urgency=low - - * remove duplicated api with capi - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.73 - - -- Kyeongchul Kim Tue, 08 Nov 2011 21:12:55 +0900 - -libslp-tapi (0.5.72) unstable; urgency=low - - * add sync APIs to get vconf values(network, sim) - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.72 - - -- Kyeongchul Kim Tue, 08 Nov 2011 09:40:55 +0900 - -libslp-tapi (0.5.71) unstable; urgency=low - - * add emergency mode feature(MDM requirement) - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.71 - - -- Kyeongchul Kim Fri, 04 Nov 2011 16:56:43 +0900 - -libslp-tapi (0.5.70) unstable; urgency=low - - * clean up TC code - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.70 - - -- Kyeongchul Kim Thu, 06 Oct 2011 18:02:49 +0900 - -libslp-tapi (0.5.69) unstable; urgency=low - - * Merged with tapi-priv - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.69 - - -- Inho Oh Thu, 29 Sep 2011 14:53:38 +0900 - -libslp-tapi (0.5.68) unstable; urgency=low - - * Added msisdn api, extended language enum, fixed TC issue. - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.68 - - -- Kyeongchul Kim Wed, 21 Sep 2011 13:52:47 +0900 - -libslp-tapi (0.5.67) unstable; urgency=low - - * Removed unused API and added new APIs(cf,mw,cphs) - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.67 - - -- Kyeongchul Kim Wed, 31 Aug 2011 16:09:35 +0900 - -libslp-tapi (0.5.66) unstable; urgency=low - - * Fixed boilerplate, AUTHORS and COPYING. SAT-setup menu seq change - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.66 - - -- Kyeongchul Kim Sat, 23 Jul 2011 13:34:56 +0900 - -libslp-tapi (0.5.65) unstable; urgency=low - - * Add feature for getting ICCID and prevent bug fix - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.65 - - -- Kyeongchul Kim Thu, 26 May 2011 20:22:27 +0900 - -libslp-tapi (0.5.64) unstable; urgency=low - - * Factory code is added & SS CQ is fixed - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.64 - - -- Youngman Park Wed, 16 Mar 2011 10:53:49 +0900 - -libslp-tapi (0.5.63) unstable; urgency=low - - * Fixed prevent bugs - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.63 - - -- Inho Oh Thu, 17 Feb 2011 13:53:49 +0900 - -libslp-tapi (0.5.62) unstable; urgency=low - - * TC code clean - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.62 - - -- Youngman Park Wen, 9 Feb 2011 20:50:12 +0900 - -libslp-tapi (0.5.61) unstable; urgency=low - - * fix TC & add SAT event - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.61 - - -- Kyeongchul Kim Mon, 31 Jan 2011 20:57:12 +0900 - -libslp-tapi (0.5.60) unstable; urgency=low - - * The parameter in S.S ussd tapi is changed. - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.60 - - -- Youngman Park Fri, 14 Jan 2011 21:18:21 +0900 - -libslp-tapi (0.5.59) unstable; urgency=low - - * Dbus output param sync with telephony server - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.59 - - -- Kyeongchul Kim Mon, 10 Jan 2011 21:03:21 +0900 - -libslp-tapi (0.5.58) unstable; urgency=low - - * Added security cookie feature - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.58 - - -- Inho Oh Thu, 06 Jan 2011 12:31:04 +0900 - -libslp-tapi (0.5.57) unstable; urgency=low - - * Add SIM, ME SMS memory full enum - * Git: slp/pkgs/l/libslp-tapi - * Tag: libslp-tapi_0.5.57 - - -- Sunghyuk Lee Mon, 06 Dec 2010 15:02:03 +0900 - -libslp-tapi (0.5.56) unstable; urgency=low - - * Fix the wrong event data length bug - * Git: slp/pkgs/libslp-tapi - * Tag: libslp-tapi_0.5.56 - - -- Sunghyuk Lee Wed, 24 Nov 2010 18:42:10 +0900 - -libslp-tapi (0.5.55) unstable; urgency=low - - * package name is changed com.samsung... -> deb.com.samsung... - * Git: slp/pkgs/libslp-tapi - * Tag: libslp-tapi_0.5.55 - - -- Youngman Park Mon, 22 Nov 2010 16:31:28 +0900 - -libslp-tapi (0.5.54) unstable; urgency=low - - * Add TAPI_EVENT_SS_USSD_RSP_CNF and re-define TAPI_CS_SS_USSDRSP - * Git: slp/pkgs/libslp-tapi - * Tag: libslp-tapi_0.5.54 - - -- Sunghyuk Leee Fri, 12 Nov 2010 18:28:28 +0900 - -libslp-tapi (0.5.53) unstable; urgency=low - - * add image file - * Git: slp/pkgs/libslp-tapi - * Tag: libslp-tapi_0.5.53 - - -- Kyeongchul Kim Mon, 08 Nov 2010 14:32:31 +0900 - -libslp-tapi (0.5.52) unstable; urgency=low - - * add la file - * Git: slp/pkgs/libslp-tapi - * Tag: libslp-tapi_0.5.52 - - -- Kyeongchul Kim Wed, 03 Nov 2010 19:16:31 +0900 - -libslp-tapi (0.5.51) unstable; urgency=low - - * version update - * Git: slp/pkgs/libslp-tapi - * Tag: libslp-tapi_0.5.51 - - -- Youngman Park Tue, 02 Nov 2010 20:00:35 +0900 - -libslp-tapi (0.5.50) unstable; urgency=low - - * Removed libSLP-tapi.la - * Git: slp/pkgs/libslp-tapi - * Tag: libslp-tapi_0.5.50 - - -- Inho Oh Tue, 02 Nov 2010 15:30:35 +0900 - -libslp-tapi (0.5.49) unstable; urgency=low - - * separated source repository - * Git: slp/pkgs/libslp-tapi - * Tag: libslp-tapi_0.5.49 - - -- Inho Oh Tue, 2 Nov 2010 11:09:15 +0900 - -telephony-fwk (0.5.48) unstable; urgency=low - - * Update PG and sim,gprs code - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.48 - - -- Kyeongchul Kim Sun, 31 Oct 2010 16:50:12 +0900 - -telephony-fwk (0.5.47) unstable; urgency=low - - * GPS TIS work - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.47 - - -- Youngman Park Tue, 19 Oct 2010 19:43:44 +0900 - -telephony-fwk (0.5.46) unstable; urgency=low - - * Launch voicecall ui with AUL upon SAT SETUP CALL IND - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.46 - - -- Sunghyuk Lee Mon, 18 Oct 2010 20:54:44 +0900 - -telephony-fwk (0.5.45) unstable; urgency=low - - * Fixed GPRS requestid mismatch problem - * Removed wrong binary file (TC file) - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.45 - - -- Inho Oh Mon, 18 Oct 2010 20:03:18 +0900 - -telephony-fwk (0.5.44) unstable; urgency=low - - * Telephony SAT sends the SAT USSD message by itself - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.44 - - -- Sunghyuk Lee Mon, 18 Oct 2010 18:28:17 +0900 - -telephony-fwk (0.5.43) unstable; urgency=low - - * wrong code is fixed in debian/rules - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.43 - - -- Youngman Park Tue, 12 Oct 2010 20:10:33 +0900 - -telephony-fwk (0.5.42) unstable; urgency=low - - * debian/rule script is changed for hib - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.42 - - -- Youngman Park Tue, 12 Oct 2010 19:43:33 +0900 - -telephony-fwk (0.5.41) unstable; urgency=low - - * Add Device Node for DFT Rev0.9 - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.41 - - -- Youngman Park Tue, 12 Oct 2010 11:10:33 +0900 - -telephony-fwk (0.5.40) unstable; urgency=low - - * HIB path is changed - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.40 - - -- Youngman Park Mon, 11 Oct 2010 13:33:33 +0900 - -telephony-fwk (0.5.39) unstable; urgency=low - - * Do not launch CISS upon SAT event - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.39 - - -- Sunghyuk Lee Mon, 11 Oct 2010 10:33:33 +0900 - -telephony-fwk (0.5.38) unstable; urgency=low - - * Add nvdata file create code - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.38 - - -- Youngman Park Fri, 01 Oct 2010 21:58:01 +0900 - -telephony-fwk (0.5.37) unstable; urgency=low - - * Inform flightmode state to kernel - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.37 - - -- Sunghyuk Lee Fri, 01 Oct 2010 21:07:40 +0900 - -telephony-fwk (0.5.36) unstable; urgency=low - - * telephony PG is added - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.36 - - -- Youngman Park Fri, 01 Oct 2010 19:40:01 +0900 - -telephony-fwk (0.5.35) unstable; urgency=low - - * Add code to creat NV Data file (oem_init) - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.35 - - -- Youngman Park Fri, 01 Oct 2010 14:56:01 +0900 - -telephony-fwk (0.5.34) unstable; urgency=low - - * Stop launching CISS-MMI upon USSD CNF - * Remove binary files which were gernerated by TET-WARE - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.34 - - -- Sunghyuk Lee Fri, 01 Oct 2010 14:20:01 +0900 - -telephony-fwk (0.5.33) unstable; urgency=low - - * Change a dependat svn package name - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.33 - - -- Sunghyuk Lee Thu, 30 Sep 2010 19:16:19 +0900 - -telephony-fwk (0.5.32) unstable; urgency=low - - * Modify the Misc IPC header file - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.32 - - -- Sunghyuk Lee Mon, 27 Sep 2010 15:53:15 +0900 - -telephony-fwk (0.5.31) unstable; urgency=low - - * Remove GPL licensed codes - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.31 - - -- Sunghyuk Lee Mon, 27 Sep 2010 10:09:37 +0900 - -telephony-fwk (0.5.30) unstable; urgency=low - - * Add tet_scen and tslist.txt for SE team - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.30 - - -- Sunghyuk Lee Mon, 27 Sep 2010 09:54:42 +0900 - -telephony-fwk (0.5.29) unstable; urgency=low - - * Update the telephony test cases - * Fix some tapi proxy errors - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.29 - - -- Sunghyuk Lee Mon, 20 Sep 2010 18:38:11 +0900 - -telephony-fwk (0.5.28) unstable; urgency=low - - * Add Uploader - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.28 - - -- Youngman Park Fri, 17 Sep 2010 11:38:12 +0900 - -telephony-fwk (0.5.27) unstable; urgency=low - - * Modify Time value for Power OFF ( 30Sec -> 10Sec) - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.27 - - -- Youngman Park Thu, 16 Sep 2010 21:52:42 +0900 - -telephony-fwk (0.5.26) unstable; urgency=low - - * Fix the SIM Tapi returning value garray index mismatch - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.26 - - -- Sunghyuk Lee Thu, 16 Sep 2010 13:16:12 +0900 - -telephony-fwk (0.5.25) unstable; urgency=low - - * Add AUL interface for incoming call event - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.25 - - -- Sunghyuk Lee Wed, 15 Sep 2010 09:14:27 +0900 - -telephony-fwk (0.5.24) unstable; urgency=low - - * Make the test apps compilable and upload test cases - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.24 - - -- Sunghyuk Mon, 13 Sep 2010 15:16:36 +0900 - -telephony-fwk (0.5.23) unstable; urgency=low - - * repackaging for EFL upgrade - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.23 - - -- Hyeongbae Park Fri, 10 Sep 2010 21:58:32 +0900 - -telephony-fwk (0.5.22) unstable; urgency=low - - * Fix the pdp deactivating signal - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.22 - - -- Sunghyuk Lee Thu, 09 Sep 2010 22:34:32 +0900 - -telephony-fwk (0.5.21) unstable; urgency=low - - * Deny the pdp request if the dpd status is wrong - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.21 - - -- Sunghyuk Lee Thu, 09 Sep 2010 15:05:01 +0900 - -telephony-fwk (0.5.20) unstable; urgency=low - - * Fix typo of pdp deactivating path - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.20 - - -- Sunghyuk Lee Thu, 09 Sep 2010 13:47:12 +0900 - -telephony-fwk (0.5.19) unstable; urgency=low - - * remove system power off command - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.19 - - -- Hyeongbae Park Wed, 08 Sep 2010 14:12:43 +0900 - -telephony-fwk (0.5.18) unstable; urgency=low - - * bug fix - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.18 - - -- Hyeongbae Park Mon, 06 Sep 2010 10:59:43 +0900 - -telephony-fwk (0.5.17) unstable; urgency=low - - * add Tunnel API and fix bug in gprs suspend/resume - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.17 - - -- Hyeongbae Park Fri, 03 Sep 2010 21:24:43 +0900 - -telephony-fwk (0.5.16) unstable; urgency=low - - * Exclude TelUtility_ext.h from dev installation - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.16 - - -- Sunghyuk Lee Fri, 03 Sep 2010 09:52:43 +0900 - -telephony-fwk (0.5.15) unstable; urgency=low - - * Rename the SAT server function - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.15 - - -- Sunghyuk Lee Wed, 01 Sep 2010 16:31:00 +0900 - -telephony-fwk (0.5.14) unstable; urgency=low - - * Revise TapiCommon.h doxygen comments - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.14 - - -- Sunghyuk Lee Tue, 31 Aug 2010 10:56:26 +0900 - -telephony-fwk (0.5.13) unstable; urgency=low - - * Revise TAPI doxygen - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.13 - - -- Sunghyuk Lee Mon, 30 Aug 2010 21:27:03 +0900 - -telephony-fwk (0.5.12) unstable; urgency=low - - * Fix dlog string error in oem_init - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.12 - - -- Sunghyuk Lee Fri, 27 Aug 2010 17:41:04 +0900 - -telephony-fwk (0.5.11) unstable; urgency=low - - * Kernel boots the CP instead of Telephony Server - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.11 - - -- Sunghyuk Lee Thu, 26 Aug 2010 13:01:12 +0900 - -telephony-fwk (0.5.10) unstable; urgency=low - - * Add images and PG doxygen - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.10 - - -- Hyeongbae Park Thu, 26 Aug 2010 11:10:28 +0900 - -telephony-fwk (0.5.9) unstable; urgency=low - - * add sleep during modem bootin - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.9 - - -- Hyeongbae Park Wed, 25 Aug 2010 11:58:10 +0900 - -elephony-fwk (0.5.8) unstable; urgency=low - - * Change the swap confirmation to fix timeout issue at call swap - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.8 - - -- Sunghyuk Lee Tue, 24 Aug 2010 19:35:10 +0900 - -telephony-fwk (0.5.7) unstable; urgency=low - - * Publish SAT event with Dbus - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.7 - - -- Sunghyuk Lee Fri, 20 Aug 2010 21:58:36 +0900 - -telephony-fwk (0.5.6) unstable; urgency=low - - * Fix CiSS AUL key string - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.6 - - -- Sunghyuk Lee Fri, 20 Aug 2010 14:47:21 +0900 - -telephony-fwk (0.5.5) unstable; urgency=low - - * Fix timing issue with nitz_updater on booting time - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.5 - - -- Sunghyuk Lee Wed, 18 Aug 2010 17:13:09 +0900 - -telephony-fwk (0.5.4) unstable; urgency=low - - * Fix a bug regarding response upon SAT envelope commands - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.4 - - -- Sunghyuk Lee Fri, 13 Aug 2010 22:26:59 +0900 - -telephony-fwk (0.5.3) unstable; urgency=low - - * Fix the memory corruption issue at OEM request list operation - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.3 - - -- Sunghyuk Lee Wed, 11 Aug 2010 10:52:02 +0900 - -telephony-fwk (0.5.2) unstable; urgency=low - - * Disable event downloading feature temporarily - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.2 - - -- Sunghyuk Lee Mon, 09 Aug 2010 11:06:44 +0900 - -telephony-fwk (0.5.1) unstable; urgency=low - - * Log to dlog - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.1 - - -- Sunghyuk Lee Mon, 09 Aug 2010 09:16:57 +0900 - -telephony-fwk (0.5.0) unstable; urgency=low - - * Apply phonet socket interface - * Change OEM callback scheme - * Imporve GPRS OEM interface - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.5.0 - - -- Sunghyuk Lee Fri, 06 Aug 2010 17:04:27 +0900 - -telephony-fwk (0.4.22) unstable; urgency=low - - * Disable the modem boot option - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.4.22 - - -- Sunghyuk Lee Fri, 06 Aug 2010 09:27:34 +0900 - -telephony-fwk (0.4.21) unstable; urgency=low - - * Config git user setting - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.4.21 - - -- Sunghyuk Lee Thu, 05 Aug 2010 21:09:25 +0900 - -telephony-fwk (0.4.20) unstable; urgency=low - - * Apply new AUL api - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.4.20 - - -- Sunghyuk Lee Thu, 05 Aug 2010 20:01:08 +0900 - -telephony-fwk (0.4.19) unstable; urgency=low - - * bug fix in factory - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.4.19 - - -- Hyeongbae Park Thu, 29 Jul 2010 16:51:04 +0900 - -telephony-fwk (0.4.18) unstable; urgency=low - - * Add g_type_init - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.4.18 - - -- Hyeongbae Park Wed, 28 Jul 2010 20:33:04 +0900 - -telephony-fwk (0.4.17) unstable; urgency=low - - * Move the TelPower.h and TelDisplay.h to internal common header folder - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.4.17 - - -- Sunghyuk Lee Wed, 21 Jul 2010 13:47:04 +0900 - -telephony-fwk (0.4.16) unstable; urgency=low - - * Modify doxygen tag of misc, event_internal - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.4.16 - - -- Sunghyuk Lee Tue, 20 Jul 2010 19:16:15 +0900 - -telephony-fwk (0.4.15) unstable; urgency=low - - * Modify doxygen tag of display, power headers - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.4.15 - - -- Sunghyuk Lee Tue, 20 Jul 2010 19:05:09 +0900 - -telephony-fwk (0.4.14) unstable; urgency=low - - * Fix the VT event mismatch issue - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.4.14 - - -- Sunghyuk Lee Tue, 20 Jul 2010 16:09:26 +0900 - -telephony-fwk (0.4.13) unstable; urgency=low - - * Fix some doxygen warnings and missing symbol issues - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.4.13 - - -- Sunghyuk Lee Mon, 19 Jul 2010 18:04:41 +0900 - -telephony-fwk (0.4.12) unstable; urgency=low - - * Fix the event string for ts_delivery_initcomplete_event - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.4.12 - - -- Sunghyuk Lee Mon, 19 Jul 2010 08:44:16 +0900 - -telephony-fwk (0.4.11) unstable; urgency=low - - * Add the debug package rule - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.4.11 - - -- Sunghyuk Lee Fri, 16 Jul 2010 11:50:31 +0900 - -telephony-fwk (0.4.10) unstable; urgency=low - - * Correct some doxygen typo and missing symbol problem - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.4.10 - - -- Sunghyuk Lee Thu, 15 Jul 2010 20:49:34 +0900 - -telephony-fwk (0.4.9) unstable; urgency=low - - * Fix the internal function which determine whether the request is - synchronous or not - * Git: slp/pkgs/telephony-fwk - * Tag: telephony-fwk_0.4.9 - - -- Sunghyuk Lee Thu, 15 Jul 2010 11:57:01 +0900 - -telephony-fwk (0.4.8) unstable; urgency=low - - * Add io channel watch to g_main_loop for User actvity event - * Remove g_source which g_io_channel_watch has added - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.4.8 - - -- Sunghyuk Lee Sat, 10 Jul 2010 15:06:49 +0900 - -telephony-fwk (0.4.7) unstable; urgency=low - - * Hide unwanted functions from being visible in the library - * Generate the debug packages - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.4.7 - - -- Sunghyuk Lee Fri, 09 Jul 2010 20:57:23 +0900 - -telephony-fwk (0.4.6) unstable; urgency=low - - * Serarate telephony server main loop and rfs loop - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.4.6 - - -- Sunghyuk Lee Fri, 09 Jul 2010 11:54:48 +0900 - -telephony-fwk (0.4.5) unstable; urgency=low - - * Separate internal server features from the telephony server - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.4.5 - - -- Sunghyuk Lee Thu, 08 Jul 2010 17:26:15 +0900 - -telephony-fwk (0.4.4) unstable; urgency=low - - * Update the boiler plate - * Remove 'LIMO' from some definitions - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.4.4 - - -- Sunghyuk Lee Wed, 07 Jul 2010 10:11:58 +0900 - -telephony-fwk (0.4.3) unstable; urgency=low - - * Fix SAT bug which was caused by garray index mismatch of the userdata - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.4.3 - - -- Sunghyuk Lee Tue, 06 Jul 2010 21:10:57 +0900 - -telephony-fwk (0.4.2) unstable; urgency=low - - * Change to Single Thread - * Fix a bug on the simulator - * Add doxygen flag which exclude the private package from the document - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.4.2 - - -- Sunghyuk Lee Mon, 05 Jul 2010 13:37:36 +0900 - -telephony-fwk (0.4.1) unstable; urgency=low - - * Fix the event string mismatch bug for power, svcmode, display - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.4.1 - - -- Sunghyuk Lee Thu, 01 Jul 2010 20:35:13 +0900 - -telephony-fwk (0.4.0) unstable; urgency=low - - * Change the telephony event definition - * Point-to-point event delivery - * Add a user data parameter at the tel_register_event API - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.4.0 - - -- Sunghyuk Lee Thu, 01 Jul 2010 14:03:57 +0900 - -telephony-fwk (0.3.17) unstable; urgency=low - - * request id modification - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.17 - - -- SungEun Lee Fri, 25 Jun 2010 14:01:25 +0900 - -telephony-fwk (0.3.16) unstable; urgency=low - - * dlog modification - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.16 - - -- SungEun Lee Thu, 17 Jun 2010 11:01:25 +0900 - -telephony-fwk (0.3.15) unstable; urgency=low - - * dlog modification - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.15 - - -- SungEun Lee Wed, 16 Jun 2010 09:27:25 +0900 - -telephony-fwk (0.3.14) unstable; urgency=low - - * version up for EFL upgrade - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.14 - - -- Kyeongchul Kim Fri, 11 Jun 2010 11:14:25 +0900 - -telephony-fwk (0.3.13) unstable; urgency=low - - * noti modification for vt - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.13 - - -- SungEun Lee Wend, 08 Jun 2010 23:15:01 +0900 - -telephony-fwk (0.3.12) unstable; urgency=low - - * noti modification - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.12 - - -- SungEun Lee Wend, 08 Jun 2010 17:25:01 +0900 - -telephony-fwk (0.3.11) unstable; urgency=low - - * gprs modification for dormant - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.11 - - -- SungEun Lee Mon, 07 Jun 2010 17:25:01 +0900 - -telephony-fwk (0.3.10) unstable; urgency=low - - * Support the AUL for SAT and CiSS - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.10 - - -- Sunghyuk Lee Mon, 07 Jun 2010 10:53:01 +0900 - -telephony-fwk (0.3.9) unstable; urgency=low - - * resolve build break due to utilcore dependency - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.9 - - -- Hyeongbae Park Fri, 04 Jun 2010 15:55:28 +0900 - -telephony-fwk (0.3.8) unstable; urgency=low - - * fixed rsim access operation - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.8 - - -- Kyeongchul Kim Thu, 03 Jun 2010 22:01:28 +0900 - -telephony-fwk (0.3.7) unstable; urgency=low - - * the old API is removed - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.7 - -- selee Thu, 03 Jun 2010 13:50:01 +0900 - -telephony-fwk (0.3.6) unstable; urgency=low - - * bug fix in sms read message and change bs, vt launch ways - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.6 - - -- hyeongbae park Tue, 1 Jun 2010 17:00:34 +0900 - -telephony-fwk (0.3.5) unstable; urgency=low - - * rollback previous work(aul) - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.5 - - -- sungeun lee Sun, 30 May 2010 16:30:34 +0900 - -telephony-fwk (0.3.4) unstable; urgency=low - - * change vt launching method from fork to aul - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.4 - - -- sungeun lee Sun, 30 May 2010 15:12:34 +0900 - -telephony-fwk (0.3.3) unstable; urgency=low - - * Fix pin check procedure for getting valid retry count - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.3 - - -- kyeongchul kim Sun, 30 May 2010 13:37:34 +0900 - -telephony-fwk (0.3.2) unstable; urgency=low - - * Fix debug print statement in tel_get_sim_init_info - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.2 - - -- kyeongchul kim Sat, 29 May 2010 17:30:12 +0900 - -telephony-fwk (0.3.1) unstable; urgency=low - - * Fix the typo, tel_prcoess_power_command - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.1 - - -- Sunghyuk Lee Sat, 29 May 2010 13:58:59 +0900 - -telephony-fwk (0.3.0) unstable; urgency=low - - * Telephony API Enhancement - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.3.0 - - -- Sunghyuk Lee Sat, 29 May 2010 13:28:50 +0900 - -telephony-fwk (0.2.27) unstable; urgency=low - - * Disable dbus auto-activation according to the DAC policy - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.2.27 - - -- Sunghyuk Lee Fri, 28 May 2010 16:23:04 +0900 - -telephony-fwk (0.2.26) unstable; urgency=low - - * Change the package maintainer - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.2.26 - - -- Sunghyuk Lee Mon, 24 May 2010 09:37:01 +0900 - -telephony-fwk (0.2.25) unstable; urgency=low - - * Change boot script for hibernation capturing - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.2.25 - - -- Hyeongbae Park Mon, 17 May 2010 11:29:15 +0900 - -telephony-fwk (0.2.24) unstable; urgency=low - - * Change the file permission and owner according to the new security - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.2.24 - - -- Sunghyuk Lee Fri, 14 May 2010 14:31:15 - -telephony-fwk (0.2.23) unstable; urgency=low - - * [Build] Remove Dependency Problem of util-core - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.2.23 - - -- Youngman Park Wen, 12 May 2010 13:00:56 - -telephony-fwk (0.2.22) unstable; urgency=low - - * [MISC] Fix the OEM callback fucntion upon the version info response - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.2.22 - - -- Sunghyuk Lee Tue, 04 May 2010 16:59:56 - -telephony-fwk (0.2.21) unstable; urgency=low - - * fix the idle text function's parameter data type to support long text - string - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.2.21 - - -- Sunghyuk Lee Mon, 26 Apr 2010 19:54:35 - -telephony-fwk (0.2.20) unstable; urgency=low - - * Add option for fastboot - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.2.20 - - -- Hyeongbae Park Mon, 26 Apr 2010 17:39:54 +0900 - -telephony-fwk (0.2.19) unstable; urgency=low - - * Support the long SAT text - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.2.19 - - -- Sunghyuk Lee Fri, 23 Apr 2010 20:11:54 +0900 - -telephony-fwk (0.2.18) unstable; urgency=low - - * Fix a bug (Add the event string of SimReadFileRaw) - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.2.18 - - -- Sunghyuk Lee Fri, 23 Apr 2010 11:59:58 +0900 - -telephony-fwk (0.2.17) unstable; urgency=low - - * Adjust timeout value for SMS API related to SIM - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.2.17 - - -- Hyeongbae Park Thu, 22 Apr 2010 22:08:57 +0900 - -telephony-fwk (0.2.16) unstable; urgency=low - - * Fix a raw RSIM bug - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.2.16 - - -- Sunghyuk Lee Wed, 21 Apr 2010 20:34:57 +0900 - -telephony-fwk (0.2.15) unstable; urgency=low - - * Change condition check routine for getting security state - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.2.15 - - -- Kyeongchul Kim Tue, 20 Apr 2010 22:41:12 +0900 - -telephony-fwk (0.2.14) unstable; urgency=low - - * Add postinst for security - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.2.14 - - -- Sunghyuk Lee Mon, 19 Apr 2010 17:59:26 +0900 - -telephony-fwk (0.2.13) unstable; urgency=low - - * Fix the SAT command queuing problem - - -- Sunghyuk Lee Mon, 19 Apr 2010 17:35:47 +0900 - -telephony-fwk (0.2.12) unstable; urgency=low - - * change internal gconf key to vconf value - * Git: slp2.0/slp2.0-pkgs/telephony-0 - * Tag: telephony-fwk_0.2.12 - - -- Kyeongchul Kim Fri, 16 Apr 2010 23:17:30 +0900 - -telephony-fwk (0.2.11) unstable; urgency=low - - * Change SIM Ecc Value - - -- Youngman Park Fri, 09 Apr 2010 15:44:44 +0900 - -telephony-fwk (0.2.10) unstable; urgency=low - - * add audio loobpack and rc.d - - -- Hyeongbae Park Thu, 08 Apr 2010 19:10:53 +0900 - -telephony-fwk (0.2.9) unstable; urgency=low - - * Fix a bug to print out all debug message upon publishing dbus events - - -- Sunghyuk Lee Thu, 08 Apr 2010 16:45:53 +0900 - -telephony-fwk (0.2.8) unstable; urgency=low - - * File format chagne DOS -> UNIX - - -- youngman park Tue, 8 Apr 2010 13:31:14 +0900 - -telephony-fwk (0.2.7) unstable; urgency=low - - * Add ecc category for emergency call - - -- youngman park Mon, 5 Apr 2010 21:12:14 +0900 - -telephony-fwk (0.2.6) unstable; urgency=low - - * Adjust ramdump for test mode - - -- hyeongbae park Tue, 1 Apr 2010 11:20:54 +0900 - -telephony-fwk (0.2.5) unstable; urgency=low - - * Add timeprint to check main() timing issue - - -- Sunghyuk Lee Wed, 31 Mar 2010 18:03:54 +0900 - -telephony-fwk (0.2.4) unstable; urgency=low - - * Apply network band value re-arrangement from modem - - -- Kyeongchul Kim Wed, 31 Mar 2010 17:30:38 +0900 - - -telephony-fwk (0.2.4) unstable; urgency=low - - * Apply network band value re-arrangement from modem - - -- Kyeongchul Kim Wed, 31 Mar 2010 17:30:38 +0900 - -telephony-fwk (0.2.3) unstable; urgency=low - - * re-arrange telephony headers - - -- Kyeongchul Kim Tue, 30 Mar 2010 19:31:19 +0900 - -telephony-fwk (0.2.2) unstable; urgency=low - - * Add Emergency Call Event - - -- Youngman Park Fri, 26 Mar 2010 16:44:22 +0900 - -telephony-fwk (0.2.1) unstable; urgency=low - - * Bug Fix E911 Call - - -- Youngman Park Thu, 25 Mar 2010 21:25:22 +0900 - -telephony-fwk (0.2.0) unstable; urgency=low - - * Reupload dpkg upon request from SCM (toolchain upgrade) - - -- Sunghyuk Lee Thu, 25 Mar 2010 13:58:42 +0900 - -telephony-fwk (0.1.63) unstable; urgency=low - - * [SAT] Seperate the autoactivating sat event from normal event - - -- Sunghyuk Lee Wed, 24 Mar 2010 17:09:22 +0900 - -telephony-fwk (0.1.62) unstable; urgency=low - - * Fix E911 Call Bug - - -- youngman.park Wed, 24 Mar 2010 10:19:34 +0900 - -telephony-fwk (0.1.61) unstable; urgency=low - - * Fix DFT KeySend Bug - - -- youngman.park Tues, 23 Mar 2010 19:17:14 +0900 - -telephony-fwk (0.1.60) unstable; urgency=low - - * Change debug level from LEVEL_EMERG to LEVEL_DEBUG - - -- sungeun.lee Tues, 23 Mar 2010 09:20:41 +0900 - -telephony-fwk (0.1.59) unstable; urgency=low - - * Fix bug : bIsMainMenuPresent flag issue - - -- sunghyuk.lee Mon, 22 Mar 2010 21:51:41 +0900 - -telephony-fwk (0.1.58) unstable; urgency=low - - * Change KeyCode Data in Factory DFT - - -- youngman.park Mon, 22 Mar 2010 17:37:33 +0900 - -telephony-fwk (0.1.57) unstable; urgency=low - - * Bug Fix for Factory DFT - - -- youngman.park Thu, 19 Mar 2010 23:23:11 +0900 - -telephony-fwk (0.1.56) unstable; urgency=low - - * add clock ipc at sound module - - -- hyeongbae.park Thu, 17 Mar 2010 20:23:31 +0900 - -telephony-fwk (0.1.55) unstable; urgency=low - - * [SAT] Fix a bug. Stop to activate satui upon - Telephony.Sat.EventDownloadCnf event - - -- sunghyuk.lee Tue, 16 Mar 2010 16:17:19 +0900 - -telephony-fwk (0.1.54) unstable; urgency=low - - * [SAT] Fix a bug. It has made the satui activated abnormally - - -- sunghyuk.lee Tue, 16 Mar 2010 15:11:31 +0900 - -telephony-fwk (0.1.53) unstable; urgency=low - - * change CP RAMDUMP size from 36M to 37M due to Onedram partition - - -- hyeongbae.park Mon, 15 Mar 2010 16:40:33 +0900 - -telephony-fwk (0.1.52) unstable; urgency=low - - * [SAT] Support USER_ACTIVITY event downloading feature - - -- sunghyuk.lee Fri, 12 Mar 2010 22:25:33 +0900 - -telephony-fwk (0.1.51) unstable; urgency=low - - * replace sync into close in RFS - Fix C++ guard and empty parameter problem upon SDK request - - -- hyeongbae.park Fri, 12 Mar 2010 16:05:44 +0900 - -telephony-fwk (0.1.50) unstable; urgency=low - - * remove phone off and increase timeout for PSI CRC checking - - -- hyeongbae.park Thu, 11 Mar 2010 23:20:44 +0900 - -telephony-fwk (0.1.49) unstable; urgency=low - - * comment dlog_init and dlog_deinit for child process - - -- hyeongbae.park Wed, 10 Mar 2010 19:50:44 +0900 - -telephony-fwk (0.1.48) unstable; urgency=low - - * Remove sleep(1) from TelServerSatProactiveSelectItemInd - - -- sunghyuk.lee Wed, 10 Mar 2010 16:04:44 +0900 - -telephony-fwk (0.1.47) unstable; urgency=low - - * Do not activate the sat-ui automatically upon TAPI_EVENT_SAT_PROVIDE_LOCAL_INFO_IND event - - -- sunghyuk.lee Wed, 10 Mar 2010 10:42:44 +0900 - -telephony-fwk (0.1.46) unstable; urgency=low - - * change psi download sequnce and adjust modem partition from raw to mtd/ubi - - -- hyeongbae.park Mon, 08 Mar 2010 17:05:00 +0900 - -telephony-fwk (0.1.45) unstable; urgency=low - - * [SAT] Define BROWSER_DBUS_CONN_NAME to launch browser automatically upon SAT event - - -- sunghyuk.lee Fri, 05 Mar 2010 10:32:00 +0900 - -telephony-fwk (0.1.44) unstable; urgency=low - - * Define CISS_DBUS_CONN_NAME to launch ciss automatically upon SAT events - - -- sunghyuk.lee Tue, 02 Mar 2010 19:27:09 +0900 - -telephony-fwk (0.1.43) unstable; urgency=low - - * [SAT] Fix bugs to send dbus signals to other modules normally - - -- sunghyuk.lee Fri, 26 Feb 2010 10:11:30 +0900 - -telephony-fwk (0.1.42) unstable; urgency=low - - * Add new RFS & common boot - - -- hyeongbae.park Thu, 25 Feb 2010 21:00:01 +0900 - -telephony-fwk (0.1.41) unstable; urgency=low - - * ADD FACTORT DFT CODE (KEY, TOUCH) - - -- youngman.park Thu, 25 Feb 2010 17:00:01 +0900 - -telephony-fwk (0.1.40) unstable; urgency=low - - * ADD FACTORT DFT HEADER - - -- youngman.park Tue, 23 Feb 2010 23:10:04 +0900 - -telephony-fwk (0.1.39) unstable; urgency=low - - * FIX GPRS SIGSEGV ERROR by Wrong IPC Message (IPC_GPRS_CALL_STATUS) - - -- youngman.park Tue, 23 Feb 2010 23:00:10 +0900 - -telephony-fwk (0.1.38) unstable; urgency=low - - * FIX GPRS PORT LIST ERROR - - -- youngman.park Tue, 23 Feb 2010 22:55:12 +0900 - -telephony-fwk (0.1.37) unstable; urgency=low - - * modify tapi_misc_timezone_setinfo()'s doxygen tag - - -- sungeun.lee Tue, 23 Feb 2010 13:21:30 +0900 - -telephony-fwk (0.1.36) unstable; urgency=low - - * change CS/PS vconf init value OFF to UNKNOWN, add plmn handling code in - NITZ noti case - - -- kyeongchul.kim Mon, 22 Feb 2010 15:32:19 +0900 - -telephony-fwk (0.1.35) unstable; urgency=low - - * Add vconf key, VCONFKEY_TELEPHONY_SAT_STATE on request from VoiceCall app - - -- sunghyuk.lee Sat, 20 Feb 2010 11:35:30 +0900 - -telephony-fwk (0.1.34) unstable; urgency=low - - * [SAT] Support large icons and color icons (with -DLARGE_ICON option) - - -- sunghyuk.lee Fri, 19 Feb 2010 17:33:57 +0900 - -telephony-fwk (0.1.33) unstable; urgency=low - - * add noti publish code when card type is changed on boot time - - -- kyeongchul.kim Thu, 18 Feb 2010 16:53:46 +0900 - -telephony-fwk (0.1.32) unstable; urgency=low - - * Modify factory module for MM - -- youngman.park Wed, 10 Feb 2010 11:18:23 +0900 - -telephony-fwk (0.1.31) unstable; urgency=low - - * re-arrange internal header including,apply network ipc change, separate oem - callback function description from OemTapiCommon.h to OemTapiCommon_ext.h - - -- kyeongchul.kim Wed, 10 Feb 2010 22:17:38 +0900 - -telephony-fwk (0.1.30) unstable; urgency=low - - * psi size from 15K to 20K - - -- hyoengbae.park Wed, 10 Feb 2010 11:50:00 +0900 - -telephony-fwk (0.1.29) unstable; urgency=low - - * error handling for NV processing - - -- hyoengbae.park Tue, 9 Feb 2010 14:07:00 +0900 - -telephony-fwk (0.1.28) unstable; urgency=low - - * Add ramdump and fatal error - - -- hyoengbae.park Tue, 9 Feb 2010 00:10:00 +0900 - -telephony-fwk (0.1.27) unstable; urgency=low - - * Fix gprs port list Error - - -- youngman.park Mon, 8 Feb 2010 21:25:48 +0900 - -telephony-fwk (0.1.26) unstable; urgency=low - - * Add gprs port list - - -- youngman.park Mon, 8 Feb 2010 17:14:48 +0900 - -telephony-fwk (0.1.25) unstable; urgency=low - - * block RAMDUMP temporarily - - -- hyeongbae.park Fri, 5 Feb 2010 12:21:28 +0900 - -telephony-fwk (0.1.24) unstable; urgency=low - - * bug fix at RAMDUMP and add sim init crash case for SMC lab requirement - - -- kyeongchul.kim Wed, 3 Feb 2010 23:07:28 +0900 - -telephony-fwk (0.1.23) unstable; urgency=low - - * change modem device from mtd3 to mtd6 - - -- hyeongbae.park Tue, 2 Feb 2010 21:31:28 +0900 - -telephony-fwk (0.1.22) unstable; urgency=low - - * add SIM exception handling code and fixed Doxygen tag(COMMON part) - - -- kyeongchul.kim Tue, 2 Feb 2010 20:56:28 +0900 - -telephony-fwk (0.1.21) unstable; urgency=low - - * changed pb last index recognization(0x00 to 0xFFFF), PLMN handling code for - Infineon(6 digit to 5 digit) - - -- kyeongchul.kim Mon, 1 Feb 2010 20:11:29 +0900 - -telephony-fwk (0.1.20) unstable; urgency=low - - * fixed Doxygen tag and move TelSatUtil.h to server layer - - -- kyeongchul.kim Fri, 29 Jan 2010 19:40:41 +0900 - -telephony-fwk (0.1.19) unstable; urgency=low - - * remove doxygen comment in 'tapi-lib-common.h' and add vconf value(MSISDN) - - -- kyeongchul.kim Thu, 28 Jan 2010 22:34:27 +0900 - -telephony-fwk (0.1.18) unstable; urgency=low - - * remove status lib dependency in case of telephony v2.0 - - -- kyeongchul.kim Wed, 27 Jan 2010 22:53:14 +0900 - -telephony-fwk (0.1.17) unstable; urgency=low - - * change SLP prefix - - -- kyeongchul.kim Tue, 26 Jan 2010 18:49:09 +0900 - -telephony-fwk (0.1.16) unstable; urgency=low - - * change Doxygen comment and sim test app - - -- kyeongchul.kim Sat, 23 Jan 2010 19:30:12 +0900 - -telephony-fwk (0.1.15) unstable; urgency=low - - * tempraty time updated code deleted - - -- jooseok.park Thu, 21 Jan 2010 21:20:03 +0900 - -telephony-fwk (0.1.14) unstable; urgency=low - - * Fix 3G PB field length check process and add network init in modem reset - func - - -- kyeongchul.kim Wed, 20 Jan 2010 22:36:02 +0900 - -telephony-fwk (0.1.13) unstable; urgency=low - - * Bug fix in deleting SMS in the SIM - - -- hyeongbae.park Mon, 18 Jan 2010 17:00:00 +0900 - -telephony-fwk (0.1.12) unstable; urgency=low - - * Change FDN en/disable procedure in OEM layer - - -- kyeongchul.kim Thu, 14 Jan 2010 21:22:16 +0900 - -telephony-fwk (0.1.11) unstable; urgency=low - - * add reset, shutdown and sms save handling - - -- hyeongbae.park Wed, 14 Jan 2010 13:00:03 +0900 - -telephony-fwk (0.1.10) unstable; urgency=low - - * video call release all cnf event string added - - -- jooseok.park Wed, 13 Jan 2010 21:21:03 +0900 - -telephony-fwk (0.1.9) unstable; urgency=low - - * change Flight Mode value in the slp-setting - - -- hyeongbae.park The, 12 JAN 2010 23:56:06 +0900 - -telephony-fwk (0.1.8) unstable; urgency=low - - * change NV offset - - -- hyeongbae.park The, 12 JAN 2010 23:55:06 +0900 - -telephony-fwk (0.1.7) unstable; urgency=low - - * Bug fix in the deleting the sms in the sim - - -- hyeongbae.park The, 12 JAN 2010 20:10:06 +0900 - -telephony-fwk (0.1.6) unstable; urgency=low - - * Add SLP_SETTING_TELEPHONY_SIM_SLOT init process in boot time - - -- kyeongchul.kim The, 12 JAN 2010 19:10:06 +0900 - -telephony-fwk (0.1.5) unstable; urgency=low - - * SIM ipc data packed, fixed SLP-setting return check statement, NV EFS PATH - - -- kyeongchul.kim Thu, 7 JAN 2010 18:24:10 +0900 - -telephony-fwk (0.1.4) unstable; urgency=low - - * Enabling dlog messages, adding 2 TAPI for SAT - - -- sunghyuk.lee Wed, 6 JAN 2010 23:04:10 +0900 - -telephony-fwk (0.1.3) unstable; urgency=low - - * SIM,NETWORK - Code enhancement,Remove status lib usage,etc - - -- kyeongchul.kim Tue, 5 JAN 2010 18:02:10 +0900 - -telephony-fwk (0.1.2) unstable; urgency=low - - * fixed SLP-setting check condition in tapi_common_check_status() - - -- kyeongchul.kim Mon, 28 Dec 2009 17:12:20 +0900 - -telephony-fwk (0.1.1) unstable; urgency=low - - * [SAT] Stop checking the alarm boot feature which is no longer available - - -- sunghyuk.lee Mon, 28 Dec 2009 14:21:46 +0900 - -telephony-fwk (0.1.0-24) unstable; urgency=low - - * change parameter position of general response - - -- kyeongchul.kim Thu, 24 Dec 2009 19:22:24 +0900 - -telephony-fwk (0.1.0-23) unstable; urgency=low - - * support SLP-setting; - - -- kyeongchul.kim Wed, 23 Dec 2009 14:56:46 +0900 - -telephony-fwk (0.1.0-22msm6290) unstable; urgency=low - - * support UBI, RFS for qualcomm; - - -- hyeongbae.park Tue, 22 Dec 2009 22:27:46 +0900 - -telephony-fwk (0.1.0-22) unstable; urgency=low - - * support UBI, RFS for infineon modem: - - -- hyeongbae.park Tue, 22 Dec 2009 11:34:24 +0900 - -telephony-fwk (0.1.0-21) unstable; urgency=low - - * change nv,efs directory from /root to /csa - - -- hyeongbae.park Sat, 19 Dec 2009 16:02:48 +0900 - -telephony-fwk (0.1.0-21msm6290) unstable; urgency=low - - * change nv,efs directory from /root to /csa - - -- hyeongbae.park Sat, 19 Dec 2009 15:39:53 +0900 - -telephony-fwk (0.1.0-20) unstable; urgency=low - - * telephony dynamic logging adopted - - -- jooseok.park Fri, 18 Dec 2009 10:04:20 +0900 - -telephony-fwk (0.1.0-19msm6290) unstable; urgency=low - - * release for msm6290 oem. same bin with 0.1.0-18 - * i - - -- kyeongchul.kim Fri, 18 Dec 2009 10:04:00 +0900 - -telephony-fwk (0.1.0-19) unstable; urgency=low - - * Recovering the broken i386 packages - - -- sunghyuk.lee Thu, 17 Dec 2009 12:14:30 +0900 - -telephony-fwk (0.1.0-18) unstable; urgency=low - - * Dpkg 0.1.0-17 has been failed to be imported. So upload the packages again - - -- sunghyuk.lee Thu, 17 Dec 2009 12:04:30 +0900 - -telephony-fwk (0.1.0-17) unstable; urgency=low - - * fixed uncorrect debian package(0.1.0-16-msm6290) - - -- kyeongchul.kim Wed, 16 Dec 2009 21:30:30 +0900 -telephony-fwk (0.1.0-16) unstable; urgency=low - - * i686 telephony-fwk dpkg release - - -- sunghyuk.lee Tue, 15 Dec 2009 17:11:28 +0900 - -telephony-fwk (0.1.0-15) unstable; urgency=low - - * gps update - - -- soyoun2.kim Mon, 14 Dec 2009 12:45:28 +0900 - -telephony-fwk (0.1.0-14) unstable; urgency=low - - * Support RFS Filesystem - - -- hyeongbae.park Mon, 14 Dec 2009 12:12:03 +0900 - -telephony-fwk (0.1.0-13) unstable; urgency=low - - * Add Telepony.Servie.Ready Event - - -- youngman.park Sat, 12 Dec 2009 15:14:44 +0900 - -telephony-fwk (0.1.0-12) unstable; urgency=low - - * oem callback and SLP1.0 feature adopted - - -- jooseok.park Thu, 10 Dec 2009 17:32:15 +0900 - -telephony-fwk (0.1.0-11) unstable; urgency=low - - * add null check statement in TelOemNwGetNetworkInfo() - - -- kyeongchul.kim Tue, 01 Dec 2009 19:25:02 +0900 - -telephony-fwk (0.1.0-10) unstable; urgency=low - - * slp2.0 code merge - - -- jooseok.park Mon, 30 Nov 2009 17:53:50 +0900 - -telephony-fwk (0.1.0-9) unstable; urgency=low - - * Stop to remove NV binary. - - -- wonguk.jeong Wed, 25 Nov 2009 17:12:00 +0900 - -telephony-fwk (0.1.0-8) unstable; urgency=low - - * remove unnecessary files - - -- wonguk.jeong Fri, 20 Nov 2009 17:19:20 +0900 - -telephony-fwk (0.1.0-6) unstable; urgency=low - - * library prefix changed (X1 --> SLP) - - -- wonguk.jeong Fri, 20 Nov 2009 16:04:50 +0900 - -telephony-fwk (0.1.0-5) unstable; urgency=low - - * copyright added, as-needed option enabled - - -- wonguk.jeong Fri, 20 Nov 2009 10:38:45 +0900 - -telephony-fwk (0.1.0-4) unstable; urgency=low - - * remove debug message - - -- wonguk.jeong Thu, 19 Nov 2009 15:43:08 +0900 - -telephony-fwk (0.1.0-3) unstable; urgency=low - - * add arch environment variable - - -- wonguk.jeong Thu, 19 Nov 2009 15:30:39 +0900 - -telephony-fwk (0.1.0-2) unstable; urgency=low - - * add dependencies of telephony-server (temporary) - - -- wonguk.jeong Mon, 16 Nov 2009 11:23:43 +0900 - -telephony-fwk (0.1.0-1) unstable; urgency=low - - * Initial Release. (SLP source + SLP-lite patch) - - -- wonguk.jeong Sun, 15 Nov 2009 00:42:02 +0900 diff --git a/debian/compat b/debian/compat deleted file mode 100644 index 7ed6ff8..0000000 --- a/debian/compat +++ /dev/null @@ -1 +0,0 @@ -5 diff --git a/debian/control b/debian/control deleted file mode 100644 index 0cdd735..0000000 --- a/debian/control +++ /dev/null @@ -1,28 +0,0 @@ -Source: libslp-tapi -Section: libs -Priority: extra -Maintainer: Ja-young Gu -Uploaders: Ja-young Gu , kyeongchul.kim , Youngman Park , Inho Oh , DongHoo Park -Build-Depends: debhelper (>= 5), - libglib2.0-dev, dlog-dev, libsecurity-server-client-dev -Standards-Version: 0.0.0 - -Package: libslp-tapi-dev -Section: libs -Architecture: any -Depends: libslp-tapi-0 (= ${Source-Version}), - libglib2.0-dev, dlog-dev, libsecurity-server-client-dev -Description: telephony client API library (Development) - -Package: libslp-tapi-0 -Section: libs -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, -Description: telephony client API library (Shared Object) - -Package: libslp-tapi-0-dbg -Section: debug -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, libslp-tapi-0 (= ${Source-Version}) -Description: telephony client API library (dbg package) - diff --git a/debian/dirs b/debian/dirs deleted file mode 100644 index ca882bb..0000000 --- a/debian/dirs +++ /dev/null @@ -1,2 +0,0 @@ -usr/bin -usr/sbin diff --git a/debian/docs b/debian/docs deleted file mode 100644 index e69de29..0000000 diff --git a/debian/libslp-tapi-0.install.in b/debian/libslp-tapi-0.install.in deleted file mode 100644 index c3f5486..0000000 --- a/debian/libslp-tapi-0.install.in +++ /dev/null @@ -1 +0,0 @@ -@PREFIX@/lib/lib* diff --git a/debian/libslp-tapi-dev.install.in b/debian/libslp-tapi-dev.install.in deleted file mode 100644 index 61f30f2..0000000 --- a/debian/libslp-tapi-dev.install.in +++ /dev/null @@ -1,2 +0,0 @@ -@PREFIX@/include/telephony-client/* -@PREFIX@/lib/pkgconfig/tapi-lib.pc diff --git a/debian/rules b/debian/rules deleted file mode 100755 index 0ca9918..0000000 --- a/debian/rules +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -CFLAGS ?= -Wall -g -CXXFLAGS ?= -Wall -g -LDFLAGS ?= -PREFIX ?= /usr -DATADIR ?= /opt - -ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) - CFLAGS += -O0 - CXXFLAGS += -O0 -else - CFLAGS += -O2 - CXXFLAGS += -O2 -endif - -CFLAGS += -fvisibility=hidden -fpic -LDFLAGS += -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed -LDFLAGS += -Wl,--unresolved-symbols=ignore-in-shared-libs,--as-needed - -CMAKE_TMP_DIR = $(CURDIR)/cmake_tmp - -configure: configure-stamp -configure-stamp: - dh_testdir - # Add here commands to configure the package. - mkdir -p $(CMAKE_TMP_DIR); - cd $(CMAKE_TMP_DIR); CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" cmake .. -DCMAKE_INSTALL_PREFIX=$(PREFIX) - - touch configure-stamp - -build: build-stamp - -build-stamp: configure-stamp - dh_testdir - - # Add here commands to compile the package. - cd $(CMAKE_TMP_DIR) && $(MAKE) all - - for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ - cat $$f > $${f%.in}; \ - sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \ - sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \ - done - - touch $@ - -clean: - dh_testdir - dh_testroot - rm -f build-stamp configure-stamp - - # Add here commands to clean up after the build process. - rm -rf $(CMAKE_TMP_DIR) - - for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ - rm -f $${f%.in}; \ - done - - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - - # Add here commands to install the package into debian/wavplayer. - cd $(CMAKE_TMP_DIR) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install - - -# Build architecture-independent files here. -binary-indep: build install -# We have nothing to do by default. - -# Build architecture-dependent files here. -binary-arch: build install - dh_testdir - dh_testroot - dh_installchangelogs - dh_installdocs - dh_installexamples - dh_install --sourcedir=debian/tmp -# dh_installmenu -# dh_installdebconf -# dh_installlogrotate -# dh_installemacsen -# dh_installpam -# dh_installmime -# dh_python -# dh_installinit -# dh_installcron -# dh_installinfo - dh_installman - dh_link - dh_strip --dbg-package=libslp-tapi-0-dbg - dh_compress - dh_fixperms -# dh_perl - dh_makeshlibs - dh_installdeb - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/doc/libtapi_doc.h b/doc/libtapi_doc.h new file mode 100644 index 0000000..425c67c --- /dev/null +++ b/doc/libtapi_doc.h @@ -0,0 +1,292 @@ +/* + * libslp-tapi + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Ja-young Gu + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __TIZEN_TELEPHONY_SERVICE_DOC_H__ +#define __TIZEN_TELEPHONY_SERVICE_DOC_H__ + +/** + * @internal + * @ingroup CAPI_TELEPHONY_FRAMEWORK + * @defgroup CAPI_TELEPHONY_SERVICE Telephony Service + * @brief The Telephony Service module provides call, modem, network, phonebook, SAT, SIM, SMS, and SS services. + * + * @section CAPI_TELEPHONY_SERVICE_HEADER Required Header + * \#include + * + * @section CAPI_TELEPHONY_SERVICE_OVERVIEW Overview + * The Telephony Service module provides call, modem, network, phonebook, SAT, SIM, SMS, and SS services. + * @section CAPI_TELEPHONY_SERVICE_FEATURE Related Features + * This API is related with the following feature:\n + * - http://tizen.org/feature/network.telephony + * + * It is recommended to design feature related codes in your application for reliability.\n + * + * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n + * + * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n + * + * More details on featuring your application can be found from Feature Element. + */ + +/** + * @internal + * @ingroup CAPI_TELEPHONY_SERVICE + * @defgroup CAPI_TELEPHONY_SERVICE_CALL Call + * @brief + * @section CAPI_TELEPHONY_SERVICE_CALL_HEADER Required Header + * \#include + * + * @section CAPI_TELEPHONY_SERVICE_CALL_OVERVIEW Overview + * Call APIs allow an application to accomplish the following services: + * - Make a mobile originated Emergency call, Voice call, or Video call. + * - Accept or Reject incoming calls. + * - Release Calls. + * - Call dependent supplementary services such as call hold, retrieve, DTMF. + * - Multi-party call management, setup conference call, split conference call. + * - Call information such as get call information, get line identification number. + * - To verify whether a call (voice / video) is possible at any given time. + * + * @section CAPI_TELEPHONY_SERVICE_CALL_FEATURE Related Features + * This API is related with the following feature:\n + * - http://tizen.org/feature/network.telephony + * + * It is recommended to design feature related codes in your application for reliability.\n + * + * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n + * + * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n + * + * More details on featuring your application can be found from Feature Element. + */ + +/** + * @internal + * @ingroup CAPI_TELEPHONY_SERVICE + * @defgroup CAPI_TELEPHONY_SERVICE_MODEM Modem + * @brief + * + * @section CAPI_TELEPHONY_SERVICE_MODEM_HEADER Required Header + * \#include + * + * @section CAPI_TELEPHONY_SERVICE_MODEM_OVERVIEW Overview + * Modem APIs allow an application to accomplish the following services: + * - Process power command + * - Reset the phone power (on / off) + * - Process airplane mode + * + * @section CAPI_TELEPHONY_SERVICE_MODEM_FEATURE Related Features + * This API is related with the following feature:\n + * - http://tizen.org/feature/network.telephony + * + * It is recommended to design feature related codes in your application for reliability.\n + * + * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n + * + * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n + * + * More details on featuring your application can be found from Feature Element. + */ + +/** + * @internal + * @ingroup CAPI_TELEPHONY_SERVICE + * @defgroup CAPI_TELEPHONY_SERVICE_NETWORK Network + * @brief + * @section CAPI_TELEPHONY_SERVICE_NETWORK_HEADER Required Header + * \#include + * + * @section CAPI_TELEPHONY_SERVICE_NETWORK_OVERVIEW Overview + * Network APIs allow an application to accomplish the following services: + * - Search and Select Network + * - Get Network information + * - Get and Set Preferred PLMN + * + * @section CAPI_TELEPHONY_SERVICE_NETWORK_FEATURE Related Features + * This API is related with the following feature:\n + * - http://tizen.org/feature/network.telephony + * + * It is recommended to design feature related codes in your application for reliability.\n + * + * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n + * + * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n + * + * More details on featuring your application can be found from Feature Element. + */ + +/** + * @internal + * @ingroup CAPI_TELEPHONY_SERVICE + * @defgroup CAPI_TELEPHONY_SERVICE_PHONEBOOK Phonebook + * @brief + * + * @section CAPI_TELEPHONY_SERVICE_PHONEBOOK_HEADER Required Header + * \#include + * + * @section CAPI_TELEPHONY_SERVICE_PHONEBOOK Overview + * Telephony provides APIs for various phonebook related features such as getting SIM initialization status, + * supported phonebook types, total records and used records in phonebook, phonebook entry information, + * and reading, updating, deleting of SIM phonebook records. + * + * @section CAPI_TELEPHONY_SERVICE_PHONEBOOK_FEATURE Related Features + * This API is related with the following feature:\n + * - http://tizen.org/feature/network.telephony + * + * It is recommended to design feature related codes in your application for reliability.\n + * + * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n + * + * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n + * + * More details on featuring your application can be found from Feature Element. + */ + +/** + * @internal + * @ingroup CAPI_TELEPHONY_SERVICE + * @defgroup CAPI_TELEPHONY_SERVICE_SAT SAT + * @brief + * + * @section CAPI_TELEPHONY_SERVICE_SAT_HEADER Required Header + * \#include + * + * @section CAPI_TELEPHONY_SERVICE_SAT_OVERVIEW Overview + * SAT APIs allow an application to accomplish the following services: + * - Get main menu information from the SIM application + * - Send envelope commands to the SIM application + * - Send the execution results of which the SIM application requests from other applications + * - Send UI / User confirmation to the SIM application + * Note: Telephony SAT functionality allows message relaying from a USIM application to SAT related applications. + * + * @section CAPI_TELEPHONY_SERVICE_SAT_FEATURE Related Features + * This API is related with the following feature:\n + * - http://tizen.org/feature/network.telephony + * + * It is recommended to design feature related codes in your application for reliability.\n + * + * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n + * + * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n + * + * More details on featuring your application can be found from Feature Element. + */ + +/** + * @internal + * @ingroup CAPI_TELEPHONY_SERVICE + * @defgroup CAPI_TELEPHONY_SERVICE_SIM SIM + * @brief + * + * @section CAPI_TELEPHONY_SERVICE_SIM_HEADER Required Header + * \#include + * + * @section CAPI_TELEPHONY_SERVICE_SIM_OVERVIEW Overview + * SIM APIs allow an application to accomplish the following services: + * - Get Card Init status and Identification + * - Get the Card Type i.e. whether the SIM Card is a GSM SIM or a 3G SIM + * - Set and Get the language preference information stored in the SIM + * - Get the ECC (Emergency Call Codes) data + * - Get the IMSI (International Mobile Subscriber Identity) information + * - Set and Get the mailbox information stored in the SIM + * - Set and Get the message indication status stored in the SIM + * - Enable, Disable, Change, and Verify the SIM Lock status + * + * @section CAPI_TELEPHONY_SERVICE_SIM_FEATURE Related Features + * This API is related with the following feature:\n + * - http://tizen.org/feature/network.telephony + * + * It is recommended to design feature related codes in your application for reliability.\n + * + * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n + * + * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n + * + * More details on featuring your application can be found from Feature Element. + */ + +/** + * @internal + * @ingroup CAPI_TELEPHONY_SERVICE + * @defgroup CAPI_TELEPHONY_SERVICE_SMS SMS + * @brief + * @section CAPI_TELEPHONY_SERVICE_SMS_HEADER Required Header + * \#include + * + * @section CAPI_TELEPHONY_SERVICE_SMS_OVERVIEW Overview + * SMS APIs allow an application to accomplish the following services: + * - Send, save, receive, read, and delete network texts + * - Receive Cell-Broadcast Message + * - Set and Get Cell broadcast configuration + * - Set message status, memory status + * - Set and Get SMS parameters + * + * @section CAPI_TELEPHONY_SERVICE_SMS_FEATURE Related Features + * This API is related with the following feature:\n + * - http://tizen.org/feature/network.telephony + * + * It is recommended to design feature related codes in your application for reliability.\n + * + * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n + * + * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n + * + * More details on featuring your application can be found from Feature Element. + */ + +/** + * @internal + * @ingroup CAPI_TELEPHONY_SERVICE + * @defgroup CAPI_TELEPHONY_SERVICE_SS Supplementary Service + * @brief + * + * @section CAPI_TELEPHONY_SERVICE_SS_HEADER Required Header + * \#include + * + * @section CAPI_TELEPHONY_SERVICE_SS_OVERVIEW Overview + * Supplementary Service APIs allow an application to accomplish the following services: + * - Activate, Deactivate, and Change the password for call barring + * - Register, Deregister, Activate, and Deactivate call forwarding and call waiting + * - Set and Get the CLI(Calling Line Identification) status + * - Send USSD request + * + * Telephony provides APIs to activate/deactivate call barring, get the barring status, and change the barring password.\n + * This service makes it possible for a mobile subscriber to activate barring for certain categories of outgoing or incoming calls. + * It also allows the deactivation of call barring based on categories that are set.\n + * The mobile subscriber may also determine the type of barring preferred for incoming/outgoing calls, by subscribing to a set of one or more unique barring programs.\n + * Telephony provides APIs to activate/deactivate the call forwarding option at the Network and to get the call forward status.\n + * Call forwarding allows a user to forward incoming calls to another party. + * This service permits a called mobile subscriber to have the network send all incoming calls, or just those associated with a specific Basic service group meeting various call FORWARD conditions, to another directory number.\n + * The ability of the served mobile subscriber to originate calls is unaffected. If the service is activated, a call is forwarded only if the enabled forward condition is satisfied.\n + * An application has to call this API in order to explicitly register/deregister/activate/deactivate the call forwarding option. A request will be sent irrespective of whether another SS call forward is already in progress.\n + * + * @section CAPI_TELEPHONY_SERVICE_SS_FEATURE Related Features + * This API is related with the following feature:\n + * - http://tizen.org/feature/network.telephony + * + * It is recommended to design feature related codes in your application for reliability.\n + * + * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n + * + * To ensure your application is only running on the device with specific features, please define the features in your manifest file using the manifest editor in the SDK.\n + * + * More details on featuring your application can be found from Feature Element. + */ + +#endif /* __TIZEN_TELEPHONY_SERVICE_DOC_H__ */ diff --git a/image/SLP_TelephonyFW_PG_image001.png b/image/SLP_TelephonyFW_PG_image001.png deleted file mode 100755 index af8da9e6c4f29b3068ef811075601ecaffc435be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117380 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 diff --git a/image/SLP_TelephonyFW_PG_image003.png b/image/SLP_TelephonyFW_PG_image003.png deleted file mode 100755 index c518ec7be8d4c87374e01773fb7d0ba95592fa9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5305 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 MJu}@3ZI_t;16h8G`~Uy| diff --git a/include/ITapiCall.h b/include/ITapiCall.h index 3aa6e97..490ccf3 100644 --- a/include/ITapiCall.h +++ b/include/ITapiCall.h @@ -1,11 +1,11 @@ /* * libslp-tapi * - * Copyright (TapiHandle *handle, c) 2011 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Ja-young Gu * - * Licensed under the Apache License, Version 2.0 (TapiHandle *handle, the "License", tapi_response_cb callback, void *user_data); + * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * @@ -19,21 +19,13 @@ */ /** - * @open - * @ingroup TelephonyAPI - * @addtogroup TAPI_CALL CALL - * @{ - * * @file ITapiCall.h - * - * Call APIs allow an application to accomplish the following services: @n - * - Make a mobile originated Emergency call, Voice call, or Video call. @n - * - Accept or Reject incoming calls. @n - * - Release Calls. @n - * - Call dependent supplementary services such as call hold, retrieve, DTMF. @n - * - Multi -party call management, setup conference call, split conference call. @n - * - Call information such as get call information, get line identification number. @n - * - To verify whether a call (TapiHandle *handle, voice / video ) is possible at any given time. @n + */ + +/** + * @internal + * @addtogroup CAPI_TELEPHONY_SERVICE_CALL + * @{ */ #ifndef _ITAPI_CALL_H_ @@ -41,2148 +33,873 @@ #include #include -#include #ifdef __cplusplus extern "C" { -#endif - - /** - * @brief This function originates MO call setup. This is an asynchronous function. The function completes immediately and - * call setup proceeds in background. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - If call to tel_exe_call_mo(TapiHandle *handle, ) is successful, call handle and request ID are assigned by Telephony Server - * and returned to client by given Call Handle and Request Id parameters. MO call setup continues in - * background. There are multiple states involved in the call setup procedure. Upon request completion - * successful or not, various event notifications are sent to client along with data associated with event - * (TapiHandle *handle, Successful data or error information) based on the indication or response received at the Telephony Server. - * - Setting up Emergency call - * - when #TelCallType_t is voice_call, voice call is setup unless dial_number parameter is an - * emergency number known to telephony FW (TapiHandle *handle, like 112 for all 2G and above, other numbers may operator - * specific or device configuration specific, so Telephony FW will read relevant SIM files and refer to internal - * configuration records). If an emergency number is passed and #TelCallType_t is voice_call, Telephony - * FW shall setup emergency phone call. - * - When #TelCallType_t is emergency call, emergency call is always set up. - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] pParams - * - #TelCallSetupParams_t contains the CallType(TapiHandle *handle, whether it is a voice call or data call etc) and number. - * - * @param[out] pCallHandle - * - Unique handle for referring the call - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * TAPI_EVENT_CALL_SETUP_CNF is sent to the application when the lower layers get the call originate response. - * Asynchronous return status is indicated by #TelCallCause_t and call handle is sent in the event data. - * Various asynchronous indications are described in the unsolicited notifications section . [Refer, \ref page8] - * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) - * - * @par Prospective Clients: - * Embedded call application - * - * @see tel_exe_call_mo tel_answer_call tel_release_call - * \image html CallSetup.jpg - * \image latex CallSetup.jpg - * - * @code - * #include - * - * int ret_status =0; - * unsigned int pCallHandle; - * int pRequestID=0; - * TelCallSetupParams_t pParams; - * - * char normal[16] = "1234";//Called party number - * memset(TapiHandle *handle, &pParams, 0, sizeof(TapiHandle *handle, TelCallSetupParams_t), tapi_response_cb callback, void *user_data); - * pParams.CallType = TAPI_CALL_TYPE_VOICE; - * strcpy(TapiHandle *handle, pParams.szNumber,normal, tapi_response_cb callback, void *user_data); - * - * ret_status = tel_exe_call_mo (TapiHandle *handle, &pParams,&pCallHandle,&pRequestID, tapi_response_cb callback, void *user_data); // outgoing call - * @endcode - * - * @remarks - * - None - * - * - */ -int tel_dial_call(TapiHandle *handle, const TelCallDial_t *pParams, tapi_response_cb callback, void *user_data); - - /** - * @brief This function is used to answer the incoming call by accepting or rejecting the call. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] CallHandle - * - This is the unique handle for referring the call. This call handle is available to Application through incoming call - * (TapiHandle *handle, TAPI_EVENT_CALL_INCOM_IND) event. - * - * @param[in] AnsType - * - Answer type - accept / reject / replace / hold and accept. but, for CDMA, only accept is allowed. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - The event associated with this request is TAPI_EVENT_CALL_ANSWER_CNF. Asynchronous return status is - * indicated by #TelCallCause_t and call handle is sent in the event data. - * - TAPI_EVENT_CALL_CONNECTED_IND / TAPI_EVENT_CALL_END_IND event will be notified in case of call is accepted/rejected. - * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - Call associated with call handle should be TAPI_CALL_STATE_INCOM state otherwise the API fails and there can be a - * maximum of 1 existing call. - * - * @post - * - None. - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) - * - * @par Prospective Clients: - * Embedded call application - * - * @see tel_exe_call_mo tel_release_call - * - * \image html CallIncoming.jpg - * \image latex CallIncoming.jpg - * - * @code - * #include - * - * int ret_status ; - * unsigned int pCallHandle; - * int pRequestID=0; - * - * ret_status = tel_answer_call (TapiHandle *handle, pCallHandle,&pRequestID, tapi_response_cb callback, void *user_data); // call answer - * @endcode - * - * @remarks - * - None - * - * - * @remarks - * - None - * - * - */ -int tel_answer_call(TapiHandle *handle, unsigned int CallHandle, TelCallAnswerType_t AnsType, tapi_response_cb callback, void *user_data); - - /** - * - * @brief This function releases the call identified by Call Handle irrespective of call is hold or active state. - * It is used when releasing specific active call in multiparty call. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * - * @par Sync (TapiHandle *handle, or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - In case of MPTY Call handle, Call end event is returned for each call in MPTY. - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] CallHandle - * - Unique handle for referring the call. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - The event associated with this request is TAPI_EVENT_CALL_RELEASE_CNF and Asynchronous return status - * is indicated by #TelCallCause_t and call handle for the released call is sent in the event data.. - * - * - The event TAPI_EVENT_CALL_END_IND_IND is received as final asynchronous response and the associated data is #TelCallEndInfo_t. - * Asynchronous return status is indicated by #TelCallCause_t. - * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - Call handle should be valid and there should be an existing call in Active/hold state. - * - * @post - * - None. - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) - * - * @par Prospective Clients: - * Embedded call application - * - * @see tel_exe_call_mo tel_answer_call tel_release_call_all tel_release_call_all_active - * - * @code - * #include - * - * int ret_status ; - * unsigned int pCallHandle; - * int pRequestID=0; - * - * ret_status = tel_release_call(TapiHandle *handle, pCallHandle,&pRequestID, tapi_response_cb callback, void *user_data); // call release - * @endcode - * - * - * @remarks - * - None - * - * - */ -int tel_end_call(TapiHandle *handle, unsigned int CallHandle, TelCallEndType_t EndType, tapi_response_cb callback, void *user_data); - - - /** - * - * @brief This function puts the given call on hold. The call identified by Call Handle should be in active state. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * - * @par Sync (TapiHandle *handle, or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - Call duration for the call will be calculated from the time call has been connected until call is released, - * i.e. Time duration during the call on hold will also be counted. - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] CallHandle - * - Unique handle for referring the call. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - The event associated with this request is TAPI_EVENT_CALL_HOLD_CNF. Asynchronous return status is - * indicated by #TelCallCause_t and call handle is sent in the event data. - * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - The call identified by the Call Handle should be in active state. - * - * @post - * - None. - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) - * - * @par Prospective Clients: - * Embedded call application - * - * @code - * #include - * - * int ret_status ; - * unsigned int pCallHandle;//HANDLE OF AN ACTIVE CALL - * int pRequestID=0; - * - * ret_status = tel_hold_call(TapiHandle *handle, pCallHandle,&pRequestID, tapi_response_cb callback, void *user_data); // hold call - * @endcode - * - * - * @see tel_retrieve_call - * - * @remarks - * - None - * - * - */ - int tel_hold_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data); - - /** - * - * @brief This function retrieves the held call. The call identified by Call Handle must be in held state. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * - * @par Sync (TapiHandle *handle, or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - Call duration for the call will be calculated from the moment call has been connected until call is released. - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] CallHandle - * - Unique handle for referring the call. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - The event associated with this request is TAPI_EVENT_CALL_RETRIEVE_CNF. Asynchronous return status is indicated - * by #TelCallCause_t and call handle is sent in the event data. - * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - Call should be in held state in order to retrieve into active state and no active call present. - * - * @post - * - None. - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) - * - * @par Prospective Clients: - * Embedded call application - * - * @see tel_retrieve_call - * - * @code - * #include - * - * int ret_status ; - * unsigned int pCallHandle;//held call handle - * int pRequestID=0; - * - * ret_status = tel_retrieve_call(TapiHandle *handle, pCallHandle,&pRequestID, tapi_response_cb callback, void *user_data); // retrieve call - * @endcode - * - * @remarks - * - None - * - * - */ -int tel_active_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data); - - /** - * - * @brief Swap calls. This is only for calls you dialed or answered with Telephony. - * Swap is only available for the voice calls. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Notes: - * During a call, user can place all active calls and accepts the other held call with this function. - * If the terminal is not within a call, it will fail. - * - * - * @par Sync (TapiHandle *handle, or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] CallHandle1 - * - This is active call - * - * @param[in] CallHandle2 - * - This is Held call - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - - * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - None. - * - * @post - * - None. - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) - * - * @par Prospective Clients: - * Embedded call application - * - * @code - * #include - * - * int ret_status ; - * unsigned int pCallHandle1; - * unsigned int pCallHandle2; - * int pRequestID=0; - * - * ret_status = tel_swap_call(TapiHandle *handle, pCallHandle1, pCallHandle2,&pRequestID, tapi_response_cb callback, void *user_data); // swap call - * @endcode - * - * @see None. - * - * @remarks - * - None - * - * - */ - int tel_swap_call(TapiHandle *handle, unsigned int CallHandle1, unsigned int CallHandle2, tapi_response_cb callback, void *user_data); - - /** - * - * @brief This function sends one or more DTMF digits during the call. - * - * @par Notes: - * DTMF is abbreviation of Dual-tone-multi-frequency. It is used for telecommunication signaling - * over telephone lines in the voice-frequency band between UE and other communications devices. - * For example UE send DTMF tone to a server to choose options which the server provides. - * If the UE is not within a call, this function will fail with error code. * - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * -There will be a single asynchronous notification for all the DTMF digits sent. If the users of this API need an asynchronous - * response for each DTMF digit then User has to call this API multiple times passing each single DTMF digit in pDtmfString. - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] pDtmfString - * - A Null terminated DTMF string to be sent from MS. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - The event associated with this request is TAPI_EVENT_CALL_SEND_DTMF_CNF. Asynchronous return status - * is indicated by #TelCallCause_t and call handle is sent in the event data. - * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - Active call should be present. - * - * @post - * - None. - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) - * - * @par Prospective Clients: - * Embedded call application - * - * - * \image html CallDtmf.jpg - * \image latex CallDtmf.jpg - * - * @code - * #include - * - * int ret_status ; - * unsigned int pCallHandle; - * int pRequestID=0; - * char DtmfString[10] = {0, }; - * strcpy(TapiHandle *handle, DtmfString, "123456789", tapi_response_cb callback, void *user_data);//Sample DTMF digits that need to be sent - * ret_status= tel_send_call_dtmf(TapiHandle *handle, DtmfString,&pRequestID, tapi_response_cb callback, void *user_data); - * @endcode - * - * - * @see None. - * - * @remarks - * - None - * - * - */ - int tel_call_dtmf(TapiHandle *handle, const char *pDtmfString, tapi_response_cb callback, void *user_data); - - /** - * - * @brief This function joins the given two calls (TapiHandle *handle, one call in active conversation state and other call in held state) into conference. - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * - * @par Sync (TapiHandle *handle, or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - Call handle of an active call or held call will be made as MPTY-id, and the other call handle will join in a conference). - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] CallHandle1 - * - The unique handle can be either an active call or held call. - * - * @param[in] CallHandle2 - * - Unique call handle. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - The event associated with this request is TAPI_EVENT_CALL_SETUPCONFERENCE_CNF. Asynchronous return - * status is indicated by #TelCallCause_t and call handle of the MPTY call is sent in the event data. - * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - For a Multiparty call or for joining two calls into conference, there should be one call in active state and another call - * in held state. - * - * @post - * - None. - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) - * - * @par Prospective Clients: - * Embedded call application - * - * @see tel_split_call - * - * @code - * #include - * - * int ret_status ; - * unsigned int pCallHandle1; - * unsigned int pCallHandle2; - * int pRequestID=0; - * - * ret_status= tel_join_call(TapiHandle *handle, pCallHandle1, pCallHandle2,&pRequestID, tapi_response_cb callback, void *user_data); // call join - * @endcode - * - * @remarks - * - None - * - * - * - * - */ - int tel_join_call(TapiHandle *handle, unsigned int CallHandle1, unsigned int CallHandle2, tapi_response_cb callback, void *user_data); - - /** - * - * @brief This function triggers to splits a private call from multiparty call. This API allows creating a private communication - * with one of remote parties in a multiparty session. TAPI client application has to pass the call handle which needs - * to split from the multiparty call. - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * - * @par Sync (TapiHandle *handle, or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - The list of call handles present in the conference call is retrieved using #tel_get_call_conf_list API - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] CallHandle - * - Handle of call to be made private. Call handle referring to the call that is to be split from the conference - * (TapiHandle *handle, call to be made private). - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - The event associated with this request is TAPI_EVENT_CALL_SPLITCONFERENCE_CNF. Asynchronous return status - * is indicated by #TelCallCause_t and call handle for the split call is sent in the event data. - * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - Call should be in multiparty conference call. - * - * @post - * - Split call will be the active call and the conference will be held call. - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) - * - * @par Prospective Clients: - * Embedded call application - * - * @see tel_join _call - * - * @code - * #include - * - * int ret_status ; - * unsigned int pCallHandle; - * int pRequestID=0; - * - * ret_status= tel_split_call(TapiHandle *handle, pCallHandle,&pRequestID, tapi_response_cb callback, void *user_data); // call split - * @endcode - * - * @remarks - * - None - * - * - * - * - */ - int tel_split_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data); - - /** - * - * @brief Get the current calling line identification number. - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Notes: - * If the USIM card has multiple number, an user can choose which number he use. - * For example, a line is for private, the other line is for business. - * Using this function, user can get information about which line is currently active. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * NONE - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - * @param [out] ptr_active_line - * current active line id. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) - * - * @par Prospective Clients: - * Embedded call application - * - * @see tel_set_call_act_line - * - * @code - * #include - * - * int pRequestID=0; - * ret_status= tel_get_call_act_line(TapiHandle *handle, &pRequestID, tapi_response_cb callback, void *user_data); // get call active line - * @endcode - * - * @remarks - * - None - * - * - */ - int tel_get_call_act_line(TapiHandle *handle, tapi_response_cb callback, void *user_data); - - /** - * - * @brief Set the current calling line identification number. - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * - * @par Sync (TapiHandle *handle, or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * NONE - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] active_line - * - calling line identification - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) - * - * @par Prospective Clients: - * Embedded call application - * - * @see tel_get_call_act_line - * - * @code - * #include - * - * int ret_status ; - * TelCallActiveLine_t g_curLine =TAPI_CALL_ACTIVE_LINE1; - * TelCallActiveLine_t active_line ; - * int pRequestID=0; - * - * ret_status = tel_set_call_act_line (TapiHandle *handle, g_curLine,&pRequestID, tapi_response_cb callback, void *user_data); // set call active line - * @endcode - * - * @remarks - * - None - * - * - */ - int tel_set_call_act_line(TapiHandle *handle, TelCallActiveLine_t active_line, tapi_response_cb callback, void *user_data); - - /** - * - * @brief This function triggers to do an explicit call transfer by connecting the two parties where in one party being - * active (TapiHandle *handle, active state) and another party being held (TapiHandle *handle, held state). - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Notes: - * The ECT supplementary service enables the served mobile subscriber (TapiHandle *handle, subscriber A) who has two calls, - * each of which can be an incoming or outgoing call, to connect the other parties in the two calls - * and release the served mobile subscribers own connection. - * Prior to transfer, the connection shall have been established on the call - * between subscriber A and subscriber B. On the call between subscriber A and subscriber C, - * either the connection shall have been established prior to transfer, or, as a network option, - * transfer can occur while subscriber C is being informed of the call - * (TapiHandle *handle, i.e. the connection has not yet been established.) - * - * - * @par Sync (TapiHandle *handle, or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] CallHandle - * - Call handle of an active call. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - The event associated with this request is TAPI_EVENT_CALL_TRANSFER_CNF. Asynchronous return status is - * indicated by #TelCallCause_t and call handle is sent in the event data. Call handle in event data is active - * call handle which is used in the #tel_exe_call_explicit_transfer request. - * - * @pre - * - In order to call transfer, Served mobile subscriber should have 2 calls in one in active state and another one Call - * in Held state. - * - * @post - * - When the request has been completed successfully, Call end indication will be sent to both the calls (TapiHandle *handle, active and held). - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) - * - * @par Prospective Clients: - * Embedded call application - * - * @see None. - * - * @code - * #include - * - * int ret_status ; - * unsigned int pCallHandle;//active call - * int pRequestID=0; - * - * ret_status= tel_exe_call_explicit_transfer (TapiHandle *handle, pCallHandle,&pRequestID, tapi_response_cb callback, void *user_data); // explicit transfer - * @endcode - * - * @remarks - * -None - * - * - */ - int tel_transfer_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data); - - -/** - * - * @brief This function gets status for the current call identified by Call Handle whenever application wants the call status. Call handle must be valid. - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Synchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] CallHandle - * - Unique handle for referring the call. - * - * @param [out] pCallStatus - * - Call status information like destination number, call direction (TapiHandle *handle, MO or MT), call type (TapiHandle *handle, voice or data etc), whether - * the call is in conference state or not, present call state etc are returned through this parameter. - * - * @par Async Response Message: - * - None. - * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) - * - * @par Prospective Clients: - * Embedded call application - * - * - * - * - * @code - * #include - * - * int ret_status ; - * unsigned int CallHandle; - * TelCallStatus_t callStatus; - * - * ret_status= tel_get_call_status(TapiHandle *handle, CallHandle,&callStatus, tapi_response_cb callback, void *user_data); // get call status info - * @endcode - * - * - * @see None. - * - * @remarks - * - None - * - * - */ -int tel_get_call_status(TapiHandle *handle, int call_id, TelCallStatus_t *out ); - - -int tel_get_call_status_all(TapiHandle *handle, TelCallStatusCallback cb, void *user_data) ; - - - /** - * - * @brief This function gets duration of the given call. This is a synchronous function. Duration is accounted from the moment - * the connection is established, i.e. call goes into active state for first time. - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Synchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] CallHandle - * - Unique handle for referring the call. - * - * @param [out] pDurationInSecs - * - The total call duration in seconds from the call connecting time to the present time is returned through this parameter. - * - * @par Async Response Message: - * - None. - * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events +#endif + +/** + * @brief Originates MO call setup. * - * @post - * - None. + * @details This is an asynchronous function. The function completes immediately and call setup proceeds in the background.\n + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback.\n + * However it just means that the API request has been transfered to the CP successfully.\n + * The actual operation result is being delivered in the corresponding event asynchronously. * - * @return Return Type (TapiHandle *handle, int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer #TapiResult_t) + * Sync (or) Async: This is an Asynchronous API. * - * @par Prospective Clients: - * Embedded call application + * Prospective Clients: Embedded call application. * + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @code - * #include + * @remarks MO call setup continues in the background. There are multiple states involved in the call setup procedure.\n + * Depending on whether request completion is successful or not, various event notifications are sent to the client along with data\n + * associated with the event(Successful data or error information) based on the indication or response received at the Telephony Server.\n + * Setting up an emergency call when #TelCallType_t is a voice_call, voice call is setup unless the @a dial_number parameter is\n + * an emergency number known to telephony FW(like 112 for all 2G and above, other numbers may be operator specific or device configuration specific,\n + * so Telephony FW will read relevant SIM files and refer to internal configuration records).\n + * If an emergency number is passed and #TelCallType_t is a voice_call, Telephony FW shall setup an emergency phone call.\n + * When #TelCallType_t is an emergency call, emergency call is always set up. * - * int ret_status ; - * unsigned int CallHandle; - * unsigned int duration; + * @param[in] handle The handle from tel_init() * - * ret_status= tel_get_call_duration(TapiHandle *handle, CallHandle,&duration, tapi_response_cb callback, void *user_data); // get call duration - * @endcode + * @param[in] pParams #TelCallDial_t contains the CallType(whether it is a voice call or data call) and number * + * @param[in] callback To register a callback function for result * - * @see None. + * @param[in] user_data The user data for user specification * - * @remarks - * - None + * @return The return type (int) + * @c 0 indicates that the operation is completed successfully,\n + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t). * + * @pre Initialize the Dbus connection with #tel_init.\n + * Register the telephony event to be listened with #tel_register_noti_event.\n + * An event loop runs to listen to events. * + * @see #tel_answer_call #tel_end_call */ - int tel_get_call_duration(TapiHandle *handle, unsigned int CallHandle, unsigned int * pDurationInSecs) ; +int tel_dial_call(TapiHandle *handle, const TelCallDial_t *pParams, tapi_response_cb callback, void *user_data); - /** - *@brief Deflect the incoming call to other subscriber +/** + * @brief Supports answering the incoming call by accepting or rejecting the call. * - * If informed about an incoming call this call may be redirected to an another destination by - * entering the destination Number. The cleint spcifies the dstiantion number to which the current - * incoming call needs to be redirected is specifed via info argument. + * @details This API makes a Dbus method call to the Telephony Server and gets an immediate feedback.\n + * However it just means that the API request has been transfered to the CP successfully.\n + * The actual operation result is being delivered in the corresponding event asynchronously. * + * Sync (or) Async: This is an Asynchronous API. * - * @par Sync (TapiHandle *handle, or) Async: - * This is an Asynchronous API. + * Prospective Clients: Embedded call application. * - * @par Important Notes: - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. + * @param[in] handle The handle from tel_init() * + * @param[in] CallHandle The unique handle for referring the call \n + * This call handle is available to the application through an incoming call + * (TAPI_NOTI_VOICE_CALL_STATUS_INCOMING) event. * - * @param [in] handle - * - handle from tel_init() + * @param[in] AnsType The answer type - accept / reject / replace / hold and accept is allowed * - * @param[in] CallHandle - * - This is incoming call handle + * @param[in] callback To register a callback function for result * - * @param[out] deflect_info - * - Destination Number + * @param[in] user_data The user data for user specification * - * @param [in] callback - * - To register callback function for result of this function. + * @return The return type (int) + * @c 0 indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) * - * @param [in] user_data - * - user data for user specification + * @pre Initialize the Dbus connection with #tel_init.\n + * Register the telephony event to be listened with #tel_register_noti_event.\n + * An event loop runs to listen to events.\n + * Call associated with the call handle should be in the #TAPI_CALL_STATE_INCOM state otherwise the API fails and there can be a + * a maximum of 1 existing call. * - * @par Async Response Message: - * - + * @see tel_dial_call() + * @see tel_end_call() + */ +int tel_answer_call(TapiHandle *handle, unsigned int CallHandle, TelCallAnswerType_t AnsType, tapi_response_cb callback, void *user_data); + +/** + * @brief Releases the call identified by the call handle irrespective of whether the call is in the hold or active state. * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events + * @details It is used when releasing a specific active call from a multiparty call. + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is being delivered in the corresponding event asynchronously. * - * @post - * - None. + * Sync (or) Async: This is an Asynchronous API. * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * Prospective Clients: Embedded call application. * - * @par Prospective Clients: - * Embedded call application + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin + * + * @remarks In case of the MPTY Call handle, the call end event is returned for each call in MPTY. * - * @remarks - * - None + * @param[in] handle The handle from tel_init() * - * @code - * #include - * #include + * @param[in] CallHandle A unique handle that refers to the call * - * unsigned int call_handle; - * TelCallDeflectDstInfo_t deflect_info; - * int req_id; + * @param[in] callback To register a callback function for result * - * tel_deflect_call(TapiHandle *handle, call_handel, &deflect_info, req_id, tapi_response_cb callback, void *user_data); // call deflect + * @param[in] EndType The end call type (end specific call/end all calls/end all held calls/end all active calls) * - * @endcode + * @param[in] user_data The user data for user specification * - * @see None. + * @return The return type (int) + * @c 0 indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) * - * @remarks - * - None + * @pre Initialize the Dbus connection with #tel_init.\n + * Register the telephony event to be listened with #tel_register_noti_event.\n + * An event loop runs to listen to events.\n + * The call handle should be valid and there should be an existing call in the active/hold state. * + * @see tel_dial_call() + * @see tel_answer_call() */ - int tel_deflect_call(TapiHandle *handle, unsigned int CallHandle, const TelCallDeflectDstInfo_t *deflect_info, tapi_response_cb callback, void *user_data); - +int tel_end_call(TapiHandle *handle, unsigned int CallHandle, TelCallEndType_t EndType, tapi_response_cb callback, void *user_data); - /** - * - * @brief Activate Call Completion to a Busy Subscriber. +/** + * @brief Puts the given call on hold. * - * @par Notes: - * When subscriber A encounters a Network Determined User Busy (TapiHandle *handle, NDUB) destination B, - * subscriber A can request the CCBS supplementary service (TapiHandle *handle, i.e. activate a CCBS Request against destination B). - * The network will then monitor the wanted destination B for becoming idle. - * When the wanted destination B becomes idle, then the network will wait a short time - * in order to allow destination B to make an outgoing call. - * If destination B does not make any outgoing call within this time, - * then the network shall automatically recall subscriber A. - * When subscriber A accepts the CCBS recall, within a defined time, then the network will automatically - * generate a CCBS call to destination B. + * @details The call identified by the call handle should be in the active state. + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is being delivered in the corresponding event asynchronously. * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * Sync (or) Async: This is an Asynchronous API. * - * @par Sync (TapiHandle *handle, or) Async: - * This is an Asynchronous API. + * Prospective Clients: Embedded call application. * - * @par Important Notes: - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. + * @param[in] handle The handle from tel_init() * + * @param[in] CallHandle A unique handle for referring the call * - * @param [in] handle - * - handle from tel_init() + * @param[in] callback To register a callback function for result * - * @param [in] CallHandle - * - Handle of the call. + * @param[in] user_data The user data for user specification * - * @param [in] callback - * - To register callback function for result of this function. + * @return The return type (int) + * @c 0 indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) * - * @param [in] user_data - * - user data for user specification + * @pre Initialize the Dbus connection with #tel_init.\n + * Register the telephony event to be listened with #tel_register_noti_event.\n + * An event loop runs to listen to events.\n + * The call identified by the call handle should be in the active state. * - * @par Async Response Message: - * - + * @see tel_retrieve_call() + */ +int tel_hold_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data); + +/** + * @brief Retrieves the call being held. * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events + * @details The call identified by the call handle must be in the held state. + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is being delivered in the corresponding event asynchronously. * - * @post - * - None. + * Sync (or) Async: This is an Asynchronous API. * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * Prospective Clients: Embedded call application. * - * @par Prospective Clients: - * Embedded call application + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @code - * #include + * @remarks The call duration for the call will be calculated from the moment the call has been connected until the call is released. * - * int ret; - * unsigned int call_handle; - * int req_id; + * @param[in] handle The handle from tel_init() * - * ret = tel_activate_call_ccbs(TapiHandle *handle, call_handle, &req_id, tapi_response_cb callback, void *user_data); // ccbs activate - * @endcode + * @param[in] CallHandle A unique handle for referring the call * + * @param[in] callback To register a callback function for result * - * @see None. + * @param[in] user_data The user data for user specification * - * @remarks - * - None + * @return The return type (int) + * @c 0 indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) * + * @pre Initialize the Dbus connection with #tel_init.\n + * Register the telephony event to be listened with #tel_register_noti_event.\n + * An event loop runs to listen to events.\n + * Call should be in the held state in order to retrieve it into the active state unless no active call is present. */ - int tel_activate_call_ccbs(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data); - +int tel_active_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data); - /** - * @brief This is a synchronous function returns all call handles within the given conference call. - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Synchronous API. - * - * @par Important Notes: - * - Call should be a Multi-party conference call in order to return actual no of calls and call handles in the conference calls. - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] CallHandle - * - Handle of call which is associated with the conference. - * - * @param [out] pCallList - * - list of call joined in the conference call. In case there is no active conference. The list will be zero and - * number of calls parameter value will also be zero. Maximum number of calls in a conference can be up to 5 - * (TapiHandle *handle, Based on 3GPP TS 22.084). Memory allocation for call list is integer array of size 5. - * - * @param [out] pNoOfCalls - * - Number of the calls present in conference. +/** + * @brief Swaps calls. This is only for calls dialed or answered with Telephony. * - * @par Async Response Message: - * -None. + * @details Swap is only available for voice calls. + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events + * Notes: + * During a call, a user can place all active calls and accept other held calls with this function. + * If the terminal is not within a call, it will fail. * - * @post - * -None. + * Sync (or) Async: This is an Asynchronous API. * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * Prospective Clients: Embedded call application. * - * @par Prospective Clients: - * Embedded call application + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @code - * #include + * @param[in] handle The handle from tel_init() * - * int ret_status ; - * unsigned int CallHandle; - * unsigned int callList[5]; - * int noOfCalls; + * @param[in] CallHandle1 This is an active call * - * ret_status= tel_get_call_conf_list(TapiHandle *handle, CallHandle, callList, &noOfCalls, tapi_response_cb callback, void *user_data); // get conference call list - * @endcode + * @param[in] CallHandle2 This is a held call * - * @see tel_join_call + * @param[in] callback To register a callback function for result * - * @remarks - * - None + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * @c 0 indicates that the operation has completed successfully, + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) * + * @pre Initialize the Dbus connection with #tel_init.\n + * Register the telephony event to be listened with #tel_register_noti_event.\n + * An event loop runs to listen to events. */ -int tel_get_call_conf_list(TapiHandle *handle, unsigned int CallHandle, unsigned int *pCallList, int *pNoOfCalls); - +int tel_swap_call(TapiHandle *handle, unsigned int CallHandle1, unsigned int CallHandle2, tapi_response_cb callback, void *user_data); - /** - * - * @brief This function gets voice privacy option mode in phone(TapiHandle *handle, CDMA only). - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] PrivacyType - * - Privacy Type. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification +/** + * @brief Starts continuous DTMF by sending a single digit during the call. * - * @par Async Response Message: - * - The event associated with this request is TAPI_EVENT_CALL_GET_PRIVACYMODE_CNF. Asynchronous return status - * is indicated by #TelCallCause_t. #TelCallPrivacyMode_t is included in this event. + * @details DTMF is an abbreviation for Dual-tone-multi-frequency. It is used for telecommunication signaling\n + * over telephone lines in the voice-frequency band between UE and other communication devices.\n + * For example UE sends a DTMF tone to the server to choose from options which the server provides.\n + * If the UE is not within a call, this function will fail with an error code. * + * This function makes a Dbus method call to the Telephony Sever and gets an immediate feedback.\n + * However it just means that the API request has been transfered to the CP successfully.\n + * The actual operation result is being delivered in the corresponding event asynchronously. * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events + * Sync (or) Async: This is an Asynchronous API. * - * @post - * - None. + * Prospective Clients: Embedded call application. * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @par Prospective Clients: - * Embedded call application + * @remarks There will be a single asynchronous notification for all the DTMF digits sent. + * If the users of this API need an asynchronous\n + * response for each DTMF digit then the user has to call this API multiple times passing each single DTMF digit in @a pDtmfString. * + * @remarks To be invoked in the following cases: * + * i. Key Press during On-going call + * ii. DTMF digits passed with PAUSE (,) or WAIT (;) * - * @code - * #include + * In either of the above cases, the application can ONLY send a single DTMF Digit to Telephony.\n + * In case of PAUSE and WAIT, the application needs to invoke tel_stop_call_cont_dtmf() sequentially (for every digit) without waiting for response from tel_start_call_cont_dtmf(). * - * Int ReqId=-1; - * int ret_status = -1; - * int api_err; - * TelCallPrivacyType_t privacyType; - * privacyType=TAPI_CALL_PRIVACY_TYPE_MS; - * ret_status =tel_get_call_privacy_mode (TapiHandle *handle, privacyType,&req_id, tapi_response_cb callback, void *user_data); // get call privacy_mode - * @endcode + * @param[in] handle The handle from tel_init() * + * @param[in] dtmf_digit The DTMF digit to be sent from MS * - * @see None. + * @param[in] callback To register a callback function for result * - * @remarks - * - None + * @param[in] user_data The user data for user specification * + * @return The return type (TapiHandle *handle, int) \n + * @c 0 indicates that the operation has completed successfully, \n + * else it will return failure and an error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) * + * @pre Initialize the Dbus connection with #tel_init.\n + * An active call should be present. */ - int tel_get_call_privacy_mode(TapiHandle *handle, TelCallPrivacyType_t PrivacyType, tapi_response_cb callback, void *user_data); - +int tel_start_call_cont_dtmf(TapiHandle *handle, unsigned char dtmf_digit, tapi_response_cb callback, void *user_data); - /** +/** + * @brief Stops continuous DTMF during the call. * - * @brief This function sets voice privacy option mode in phone. It is available only where call exists(TapiHandle *handle, CDMA only). + * @details DTMF is an abbreviation for Dual-tone-multi-frequency. It is used for telecommunication signaling\n + * over telephone lines in the voice-frequency band between UE and other communication devices.\n + * For example UE sends a DTMF tone to the server to choose from options which the server provides.\n + * If the UE is not within a call, this function will fail with an error code. * + * This function makes a Dbus method call to the Telephony Sever and gets an immediate feedback.\n + * However it just means that the API request has been transfered to the CP successfully.\n + * The actual operation result is being delivered in the corresponding event asynchronously. * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * Sync (or) Async: This is an Asynchronous API. * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Asynchronous API. + * Prospective Clients: Embedded call application. * - * @par Important Notes: - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. + * @remarks There will be a single asynchronous notification for all the DTMF digits sent. + * If the users of this API need an asynchronous + * response for each DTMF digit then the user has to call this API multiple times passing each single DTMF digit in @a pDtmfString. * + * @remarks To be invoked in the following cases: * - * @param [in] handle - * - handle from tel_init() + * i. Key Release (post key press) during On-going call + * ii. DTMF digits passed with PAUSE (,) or WAIT (;) * - * @param[in] PrivacyInfo - * - voice privacy option mode(TapiHandle *handle, ENHANCED or STANDARD) + * Every tel_start_call_cont_dtmf() call needs to be followed by tel_stop_call_cont_dtmf() sequentially. * - * @param [in] callback - * - To register callback function for result of this function. + * @param[in] handle The handle from tel_init() * - * @param [in] user_data - * - user data for user specification + * @param[in] callback To register a callback function for result * - * @par Async Response Message: - * - The event associated with this request is TAPI_EVENT_CALL_SET_PRIVACYMODE_CNF. Asynchronous return status - * is indicated by #TelCallCause_t. + * @param[in] user_data The user data for user specification * + * @return The return type (int)\n + * @c 0 indicates that the operation has completed successfully,\n + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events + * @pre Initialize the Dbus connection with #tel_init.\n + * An active call should be present.\n + * Start a continuous DTMF request should be sent already. + */ +int tel_stop_call_cont_dtmf(TapiHandle *handle, tapi_response_cb callback, void *user_data); + +/** + * @brief Sends one or more DTMF digits during the call. (3GPP2 specific) * - * @post - * - None. + * @details DTMF is an abbreviation for Dual-tone-multi-frequency. It is used for telecommunication signaling\n + * over telephone lines in the voice-frequency band between UE and other communication devices.\n + * For example UE sends a DTMF tone to the server to choose from options which the server provides.\n + * If the UE is not within a call, this function will fail with an error code. * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * This function makes a Dbus method call to the Telephony Sever and gets an immediate feedback.\n + * However it just means that the API request has been transfered to the CP successfully.\n + * The actual operation result is being delivered in the corresponding event asynchronously. * - * @par Prospective Clients: - * Embedded call application + * Sync (or) Async: This is an Asynchronous API. * + * Prospective Clients: Embedded call application. * + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @code - * #include + * @remarks There will be a single asynchronous notification for all the DTMF digits sent. + * If the users of this API need an asynchronous\n + * response for each DTMF digit then the user has to call this API multiple times passing each single DTMF digit in @a pDtmfString. * - * int ReqId=-1; - * int ret_status = -1; - * int api_err; - * TelCallPrivacyMode_t pPrivacyMode_info={0,}; - * pPrivacyMode_info = TAPI_CALL_PRIVACY_MODE_STANDARD; + * @param[in] handle The handle from tel_init() * - * ret_status = tel_set_call_privacy_mode (TapiHandle *handle, pPrivacyMode_info,&reqId, tapi_response_cb callback, void *user_data); // set call privacy mode - * @endcode + * @param[in] info A Burst DTMF info structure containing DTMF string, pulse width, and inter digit interval MS * - * @see None. + * @param[in] callback To register a callback function for result * - * @remarks - * - None + * @param[in] user_data The user data for user specification * + * @return The return type (int)\n + * @c 0 indicates that the operation has completed successfully,\n + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) * + * @pre Initialize the Dbus connection with #tel_init.\n + * An active call should be present. */ - int tel_set_call_privacy_mode(TapiHandle *handle, TelCallVoicePrivacyInfo_t PrivacyInfo, tapi_response_cb callback, void *user_data); - +int tel_send_call_burst_dtmf(TapiHandle *handle, const TelCallBurstDtmf_t *info, tapi_response_cb callback, void *user_data); /** + * @brief Joins the given two calls (one call in the active conversation state and the other call in the held state) into conference. * - * @brief This function requests to send a Flash with Information Message(TapiHandle *handle, CDMA only). - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Asynchronous API. + * @details This function makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is being delivered in the corresponding event asynchronously. * - * @par Important Notes: - * - None. - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param[in] pDialNumber - * - this is the calling number for 3 way call. But in the call waiting, this param should be NULL. - * - * @param [in] callback - * - To register callback function for result of this function. + * Sync (or) Async: This is an Asynchronous API. * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - The event associated with this request is TAPI_EVENT_CALL_FLASHINFO_CNF. Asynchronous return status - * is indicated by #TelCallCause_t. + * Prospective Clients: Embedded call application. * + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @pre - * - None. - * - * @post - * - None. + * @remarks The call handle of an active call or held call will be made as MPTY-id, and the other call handle will join in a conference. * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * @param[in] handle The handle from tel_init() * - * @par Prospective Clients: - * Embedded call application + * @param[in] CallHandle1 A unique handle which is either an active call or a held call * - * @code - * #include + * @param[in] CallHandle2 A unique call handle * - * int ret_status = -1; - * int api_err; - * char const * const pDialNumber = "9999900000"; - * ret_status = tel_exe_call_flash_info(TapiHandle *handle, pDialNumber,&reqId, tapi_response_cb callback, void *user_data); // call flash info - * @endcode + * @param[in] callback To register a callback function for result * - * @see None. + * @param[in] user_data The user data for user specification * - * @remarks - * - None + * @return The return type (int) + * @c 0 indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) * + * @pre Initialize the Dbus connection with #tel_init.\n + * Register the telephony event to be listened with #tel_register_noti_event.\n + * An event loop runs to listen to events.\n + * For a Multiparty call or for joining two calls into conference, there should be one call in the active state and another call + * in the held state. * + * @see tel_split_call() */ - int tel_exe_call_flash_info(TapiHandle *handle, const char *pDialNumber, tapi_response_cb callback, void *user_data); - +int tel_join_call(TapiHandle *handle, unsigned int CallHandle1, unsigned int CallHandle2, tapi_response_cb callback, void *user_data); /** + * @brief Triggers splitting a private call from a multiparty call. * - * @brief This function requests to exit emergency call mode(TapiHandle *handle, CDMA only). - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Asynchronous API. + * @details This API allows creating a private communication with one of the remote parties in a + * multiparty session. TAPI client application has to pass the call handle which needs + * to be split from the multiparty call. * - * @par Important Notes: - * - None. - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - The event associated with this request is TAPI_EVENT_CALL_EXIT_EMERGENCYMODE_CNF. Asynchronous return status - * is indicated by #TelCallCause_t. + * This function makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is being delivered in the corresponding event asynchronously. * - * @pre - * - current state is emergency callback mode. - * - * @post - * - None. + * Sync (or) Async: This is an Asynchronous API. * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * Prospective Clients: Embedded call application. * - * @par Prospective Clients: - * Embedded call application + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @code - * #include + * @param[in] handle The handle from tel_init() * - * int req_id; - * int ret; + * @param[in] CallHandle The handle of the call to be made private \n + * The call handle referring to the call that is to be split from the conference + * (call to be made private) * - * ret = tel_exit_call_emergency_mode (TapiHandle *handle, &req_id, tapi_response_cb callback, void *user_data); // emergency call + * @param[in] callback To register a callback function for result * - * @endcode + * @param[in] user_data The user data for user specification * - * @see None. + * @return The return type (int) + * @c 0 indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) * - * @remarks - * - None + * @pre Initialize the Dbus connection with #tel_init.\n + * Register the telephony event to be listened with #tel_register_noti_event.\n + * An event loop runs to listen to events.\n + * The call should be in a multiparty conference call. * + * @post The split call will be the active call and the conference call will be the held call. * + * @see tel_join_call() */ - int tel_exit_call_emergency_mode(TapiHandle *handle, tapi_response_cb callback, void *user_data); - +int tel_split_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data); /** + * @brief Triggers making an explicit call transfer by connecting the two parties where one party is being + * active (active state) and another party is being held (held state). * - * @brief This function is used for querying the information about a call time and call count. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Asynchronous API. + * @details This function makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is being delivered in the corresponding event asynchronously. * - * @par Important Notes: - * - None. - * - * @warning - * Do not use this function. This function is dedicated to the embedded call application only. - * Please use its AUL interface instead of this. - * - * - * @param [in] handle - * - handle from tel_init() + * Notes: + * The ECT supplementary service enables the served mobile subscriber (subscriber A) who has two calls, + * each of which can be an incoming or outgoing call, to connect the other parties in the two calls + * and release the served mobile subscriber's own connection. + * Prior to transfer, the connection shall have been established on the call + * between subscriber A and subscriber B. On the call between subscriber A and subscriber C, + * either the connection shall have been established prior to transfer, or, as a network option, + * or the transfer can occur while subscriber C is being informed of the call + * (i.e. the connection has not yet been established.). * - * @param[in] req_mask - * - call time request type mask. + * Sync (or) Async: This is an Asynchronous API. * - * @param [in] callback - * - To register callback function for result of this function. + * Prospective Clients: Embedded call application. * - * @param [in] user_data - * - user data for user specification + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * + * @param[in] handle The handle from tel_init() * - * @par Async Response Message: - * - The event associated with this request is TAPI_EVENT_CALL_GET_CALL_TIME_CNF. Asynchronous return status - * is indicated by #TelCallCause_t. + * @param[in] CallHandle The call handle of an active call * + * @param[in] callback To register the callback function for result * - * @pre - * - None. + * @param[in] user_data The user data for user specification * - * @post - * - None. + * @return The return type (int) + * @c 0 indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * @pre Initialize the Dbus connection with #tel_init.\n + * Register the telephony event to be listend with #tel_register_noti_event.\n + * An event loop runs to listen to events.\n + * In order to call transfer, served mobile subscriber should have 2 calls, one in the active state and another one + * in the held state. * - * @par Prospective Clients: - * Embedded call application + * @post When the request has been completed successfully, a call end indication will be sent to both the calls (active and held). + */ +int tel_transfer_call(TapiHandle *handle, unsigned int CallHandle, tapi_response_cb callback, void *user_data); + +/** + * @brief Gets the status of the current call identified by the call handle whenever the application wants the call status, call handle must be valid. * - * @code - * #include + * @details This function makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is being delivered in the corresponding event asynchronously. * - * int ret_status = -1; - * int api_err; - * TelCallTimeMaskType_t mask_byte1 = {0,}; - * TelCallTimeMaskType_t mask_byte2 = {0,}; - * unsigned short mask_type; - * mask_byte1 = TAPI_CALL_TIME_TYPE_TOTAL_CALL_CNT; //masking call type - * mask_byte2 = TAPI_CALL_TIME_TYPE_TOTAL_CALL_TIME; + * Sync (or) Async: This is a Synchronous API. * - * mask_type = mask_byte1; - * mask_type << 8; - * mask_type = mask_byte2; + * Prospective Clients: Embedded call application. * - * ret_status = tel_get_call_time(TapiHandle *handle, mask_type,&reqId, tapi_response_cb callback, void *user_data); + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @endcode + * @param[in] handle The handle from tel_init() * - * @see None. + * @param[in] call_id A unique handle for referring the call * - * @remarks - * - None + * @param[out] out The call status information like destination number, call direction (MO or MT), call type (voice or data), whether + * the call is in the conference state or not \n + * The present call state is returned through this parameter * + * @return The return type (int) + * @c 0 indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) * + * @pre Initialize the Dbus connection with #tel_init. */ - int tel_get_call_time(TapiHandle *handle, unsigned short req_mask, tapi_response_cb callback, void *user_data); +int tel_get_call_status(TapiHandle *handle, int call_id, TelCallStatus_t *out ); - /** - * - * @brief This function is to get call volume. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * +/** + * @brief Gets the status all of the current call * + * Sync (or) Async: This is a Synchronous API. * - * @param [in] handle - * - handle from tel_init() + * Prospective Clients: Embedded call application. * - * @param [in] device - * - sound device + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @param [in] type - * - sound type + * @see tel_get_call_status() + */ +int tel_get_call_status_all(TapiHandle *handle, TelCallStatusCallback cb, void *user_data); + +/** + * @brief Redirects the incoming call to another subscriber. * - * @param [in] callback - * - To register callback function for result of this function. + * @details If informed about an incoming call this call may be redirected to another destination by + * entering the destination number. The destination number to which the current + * incoming call needs to be redirected is specified via the info argument. * - * @param [in] user_data - * - user data for user specification + * Sync (or) Async: This is an Asynchronous API. * - * @par Async Response Message: - * - TelCallGetVolumeInfoResp_t + * Prospective Clients: Embedded call application. * - * @pre - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @post - * - None. + * @param[in] handle The handle from tel_init() * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * @param[in] CallHandle An incoming call handle * - * @par Prospective Clients: - * Embedded call application + * @param[out] deflect_info The destination number * - * @see None. + * @param[in] callback To register a callback function for result * - * @remarks - * - None + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * @c 0 indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) * + * @pre Initialize the Dbus connection with #tel_init.\n + * Register the telephony event to be listened with #tel_register_noti_event.\n + * An event loop runs to listen to events. */ - - int tel_get_call_volume_info(TapiHandle *handle, TelSoundDevice_t device, TelSoundType_t type, tapi_response_cb callback, void *user_data ); +int tel_deflect_call(TapiHandle *handle, unsigned int CallHandle, const TelCallDeflectDstInfo_t *deflect_info, tapi_response_cb callback, void *user_data); /** + * @brief Gets the call volume. * - * @brief This function is to set call volume. + * @details This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is being delivered in the corresponding event asynchronously. * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * Sync (or) Async: This is a Asynchronous API. * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Asynchronous API. + * Prospective Clients: Embedded call application. * - * @par Important Notes: - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @warning - * + * @param[in] handle The handle from tel_init() * + * @param[in] device The sound device * - * @param [in] handle - * - handle from tel_init() + * @param[in] type The sound type * - * @param [in] path - * - call volume information + * @param[in] callback To register a callback function for result * - * @param [in] callback - * - To register callback function for result of this function. + * @param[in] user_data The user data for user specification * - * @param [in] user_data - * - user data for user specification + * @return The return type (int) + * @c 0 indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) + */ +int tel_get_call_volume_info(TapiHandle *handle, TelSoundDevice_t device, TelSoundType_t type, tapi_response_cb callback, void *user_data ); + +/** + * @brief Sets the call volume. * - * @par Async Response Message: - * - None. + * @details This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is being delivered in the corresponding event asynchronously. * - * @pre - * - None. + * Sync (or) Async: This is a Asynchronous API. * - * @post - * - None. + * Prospective Clients: Embedded call application. * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @par Prospective Clients: - * Embedded call application + * @param[in] handle The handle from tel_init() * - * @see None. + * @param[in] info The call volume information * - * @remarks - * - None + * @param[in] callback To register a callback function for result * + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * @c 0 indicates that the operation has completed successfully, + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) */ - int tel_set_call_volume_info(TapiHandle *handle, TelCallVolumeInfo_t *info, tapi_response_cb callback, void *user_data ); /** + * @brief Sets the call sound path. * - * @brief This function is to set call sound path. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * + * @details This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is being delivered in the corresponding event asynchronously. * + * Sync (or) Async: This is a Asynchronous API. * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] path - * - call sound path information - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - None. - * - * @pre - * - None. + * Prospective Clients: Embedded call application. * - * @post - * - None. - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @par Prospective Clients: - * Embedded call application + * @param[in] handle The handle from tel_init() * - * @see None. + * @param[in] path The call sound path information * - * @remarks - * - None + * @param[in] callback To register a callback function for result * + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * @c 0 indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) */ - int tel_set_call_sound_path(TapiHandle *handle, TelCallSoundPathInfo_t *path, tapi_response_cb callback, void *user_data ); /** + * @brief Sets the call mute state. * - * @brief This function is to set call mute state - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] mute - * - Sound Mute Status - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - None. + * @details This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is being delivered in the corresponding event asynchronously. * - * @pre - * - None. + * Sync (or) Async: This is a Asynchronous API. * - * @post - * - None. + * Prospective Clients: Embedded call application. * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @par Prospective Clients: - * Embedded call application + * @param[in] handle The handle from tel_init() * - * @see None. + * @param[in] mute The sound mute status * - * @remarks - * - None + * @param[in] callback To register a callback function for result * + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * @c 0 indicating that the operation has completed successfully, + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) */ - -int tel_set_call_mute_status(TapiHandle *handle, TelSoundMuteStatus_t mute, tapi_response_cb callback, void *user_data ); +int tel_set_call_mute_status(TapiHandle *handle, TelSoundMuteStatus_t mute, TelSoundMutePath_t path, tapi_response_cb callback, void *user_data ); /** + * @brief Gets the call mute state. * - * @brief This function is to get call mute state - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - TelCallGetMuteStatusResp_t + * @details This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * - * @pre - * - None. - * - * @post - * - None. + * Sync (or) Async: This is a Asynchronous API. * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * Prospective Clients: Embedded call application. * - * @par Prospective Clients: - * Embedded call application + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @see None. + * @param[in] handle The handle from tel_init() * - * @remarks - * - None + * @param[in] callback To register a callback function for result * + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * @c 0 indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) */ - int tel_get_call_mute_status(TapiHandle *handle, tapi_response_cb callback, void *user_data ); /** + * @brief Gets the voice privacy option mode in the phone. (3GPP2 specific) * - * @brief This function is to set call sound recording + * @details This function makes a Dbus method call to the Telephony Sever and gets an immediate feedback.\n + * However it just means that the API request has been transfered to the CP successfully.\n + * The actual operation result is being delivered in the corresponding event asynchronously. * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * Sync (or) Async: This is an Asynchronous API. * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Asynchronous API. + * Prospective Clients: Embedded call application. * - * @par Important Notes: - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @warning + * @param[in] handle The handle from tel_init() * + * @param[in] callback To register a callback function for result * - * @param [in] handle - * - handle from tel_init() + * @param[in] user_data The user data for user specification * - * @param [in] on - * - Sound recording on / off + * @return The return type (int)\n + * @c 0 indicates that the operation has completed successfully,\n + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) * - * @param [in] callback - * - To register callback function for result of this function. + * @pre Initialize the Dbus connection with #tel_init.\n + * Register the telephony event to be listened with #tel_register_noti_event.\n + * An event loop runs to listen to events. + */ +int tel_get_call_privacy_mode(TapiHandle *handle, tapi_response_cb callback, void *user_data); + +/** + * @brief Sets the voice privacy option mode in the phone. It is available only where a call exists. (3GPP2 specific) * - * @param [in] user_data - * - user data for user specification + * @details This function makes a Dbus method call to the Telephony Sever and gets an immediate feedback.\n + * However it just means that the API request has been transfered to the CP successfully.\n + * The actual operation result is being delivered in the corresponding event asynchronously. * - * @par Async Response Message: - * - None. + * Sync (or) Async: This is an Asynchronous API. * - * @pre - * - None. + * Prospective Clients: Embedded call application. * - * @post - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * @param[in] handle The handle from tel_init() * - * @par Prospective Clients: - * Embedded call application + * @param[in] PrivacyMode The voice privacy option mode(TapiHandle *handle, ENHANCED or STANDARD) * - * @see None. + * @param[in] callback To register a callback function for result * - * @remarks - * - None + * @param[in] user_data The user data for user specification * + * @return The return type (int)\n + * @c 0 indicates that the operation has completed successfully,\n + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t) * + * @pre Initialize the Dbus connection with #tel_init.\n + * Register the telephony event to be listened with #tel_register_noti_event.\n + * An event loop runs to listen to events. */ - -int tel_set_call_sound_recording(TapiHandle *handle, TelSoundRecording_t *on, tapi_response_cb callback, void *user_data); +int tel_set_call_privacy_mode(TapiHandle *handle, TelCallPrivacyMode_t PrivacyMode, tapi_response_cb callback, void *user_data); /** + * @brief This function is called to set 'preferred' Voice Subscription. * - * @brief This function is to set call sound equalization. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * * @param [in] handle - * - handle from tel_init() + * - handle from tel_init(). * - * @param [in] eq - * - call sound equalization information + * @param [in] preferred_subscription + * - 'preferred' Voice Subscription. + * - Refer #TelCallPreferredVoiceSubs_t for Subscription details * * @param [in] callback - * - To register callback function for result of this function. + * - To register callback function for result. * * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - None. - * - * @pre - * - None. + * - user_data for user specification. * * @post - * - None. + * - None. * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * @return Return Type (int) \n + * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n + * - Refer #TapiResult_t for failure and error code * * @par Prospective Clients: - * Embedded call application - * - * @see None. - * - * @remarks - * - None - * - * + * External Apps. */ +int tel_set_call_preferred_voice_subscription(TapiHandle *handle, TelCallPreferredVoiceSubs_t preferred_subscription, + tapi_response_cb callback, void *user_data); -int tel_set_call_sound_equalization(TapiHandle *handle, TelCallSoundEqualization_t *eq, tapi_response_cb callback, void *user_data); - - /** - * - * @brief This function is used for querying the set call sound reduction. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * +/** + * @brief This function is called to get the 'preferred' Voice Subscription. * + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * * @param [in] handle - * - handle from tel_init() - * - * @param [in] noise - * - - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * + * - handle from tel_init(). * - * @par Async Response Message: - * - None. - * - * @pre - * - None. + * @param [out] preferred_subscription + * - 'preferred' Voice Subscription. + * - Refer #TelCallPreferredVoiceSubs_t for Subscription details * * @post - * - None. + * - None. * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) + * @return Return Type (int) \n + * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n + * - Refer #TapiResult_t for failure and error code * * @par Prospective Clients: - * Embedded call application - * - * @code - * - * @endcode - * - * @see None. - * - * @remarks - * - None - * - * + * External Apps. */ - - int tel_set_call_sound_noise_reduction(TapiHandle *handle, TelSoundNoiseReduction_t noise, tapi_response_cb callback, void *user_data); - +int tel_get_call_preferred_voice_subscription(TapiHandle *handle, TelCallPreferredVoiceSubs_t *preferred_subscription); #ifdef __cplusplus } @@ -2190,6 +907,6 @@ int tel_set_call_sound_equalization(TapiHandle *handle, TelCallSoundEqualization #endif /* _ITAPI_CALL_H_ */ - /** -* @} -*/ +/** + * @} + */ diff --git a/include/ITapiModem.h b/include/ITapiModem.h index 3b9a4b6..742f493 100644 --- a/include/ITapiModem.h +++ b/include/ITapiModem.h @@ -1,7 +1,7 @@ /* * libslp-tapi * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Ja-young Gu * @@ -19,475 +19,232 @@ */ /** + * @file ITapiModem.h + */ + +/** * @internal - * @ingroup TelephonyAPI - * @addtogroup MODEM_TAPI POWER + * @addtogroup CAPI_TELEPHONY_SERVICE_MODEM * @{ - * - * These APIs allow an application to accomplish the following services: @n - * - Process power command @n - * - Reset the phone power (on / off), @n - * - Process airplane mode @n */ #ifndef _ITAPI_MODEM_H_ #define _ITAPI_MODEM_H_ #include -#include #include #include -#include "ITapiPS.h" #ifdef __cplusplus extern "C" { #endif /** + * @brief Turns the modem on/off. + * @details Sync (or) Async: This is a Synchronous API. \n * - * @brief This API is used to turn power off or on the modem. - * - * @par Sync (or) Async: - * This is a Synchronous API. - * - * @par Important Notes: - * -NONE - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] cmd - * - This index value is the power command as #tapi_power_phone_cmd_t. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - None - * - * - * @pre - * - None. + * Prospective Clients: External Apps. \n * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Otherwise it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * + * @param[in] handle The handle from tel_init() + * @param[in] cmd The index value, which is the power command #tapi_power_phone_cmd_t + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) \n + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it provides an error code (Refer #TapiResult_t). */ int tel_process_power_command(TapiHandle *handle, tapi_power_phone_cmd_t cmd, tapi_response_cb callback, void *user_data); /** + * @brief Switches the flight mode on/off. * - * @brief This API is used to enter or leave airplane mode - * - * @par Sync (or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * -NONE - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] mode - * - This mode value is the flight flag #tapi_power_flight_mode_type_t. + * @details Sync (or) Async: This is an Asynchronous API. \n * - * @param [in] callback - * - To register callback function for result of this function. + * Prospective Clients: External Apps. * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_MODEM_FLIGHT_MODE_RESP and the event data is #tapi_power_flight_mode_resp_type_t. - * Asynchronous return status is always TAPI_API_SUCCESS. - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Otherwise it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * + * @param[in] handle The handle from tel_init() * + * @param[in] mode The mode value, which is the flight flag #tapi_power_flight_mode_type_t + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification + + * @return The return type (int) \n + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, \n + * else it provides an error code (Refer #TapiResult_t). */ int tel_set_flight_mode(TapiHandle *handle, tapi_power_flight_mode_type_t mode, tapi_response_cb callback, void *user_data); - /** + * @brief Gets the flight mode * - * @brief This function is invoked to Get ME version information. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @par Sync (or) Async: - * This is a synchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - NA + * @param[in] handle The handle from tel_init() + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification + */ +int tel_get_flight_mode(TapiHandle *handle, tapi_response_cb callback, void *user_data); + +/** + * @brief Gets ME version information. * - * @pre - * - None. + * @details Sync (or) Async: This is a Synchronous API.\n * - * @post - * - None. + * Prospective Clients: External Apps.\n * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @par Prospective Clients: - * External Apps. + * @param[in] handle The handle from tel_init() + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) \n + * Integer '0' ( same with #TAPI_API_SUCCESS ): indicates that the operation is completed successfully \n + * Negative integer : It provides an error code (Refer #TapiResult_t). */ int tel_get_misc_me_version(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** + * @brief Gets the Misc ME version. * - * @brief This function is to get misc me version - * - * @par Sync (or) Async: - * This is a Synchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init() - * - * @par Async Response Message: - * - Na - * - * @pre - * - None. + * @details Sync (or) Async: This is a Synchronous API.\n * - * @post - * - None. + * Prospective Clients: External Apps.\n * - * @return Return Type ( TelMiscVersionInformation * ) \n - * - Misc Version Information + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @par Prospective Clients: - * External Apps. + * @param[in] handle The handle from tel_init() * + * @return The return type ( TelMiscVersionInformation * ) \n + * The Misc Version Information. */ - - TelMiscVersionInformation *tel_get_misc_me_version_sync(TapiHandle *handle); - /** + * @brief Gets the ME ESN/MEID for each phone type. * - * @brief This function is invoked to Get ME IMEI/ESN/MEID for each phone type. - * - * @par Sync (or) Async: - * This is a synchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] callback - * - To register callback function for result of this function. + * @details Sync (or) Async: This is a Synchronous API. \n * - * @param [in] user_data - * - user data for user specification + * Prospective Clients: External Apps. \n * - * @par Async Response Message: - * - NA + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. + * @param[in] handle The handle from tel_init() + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) \n + * Integer '0' ( same with #TAPI_API_SUCCESS ): indicates that the operation is completed successfully \n + * Negative integer : It provides an error code (Refer #TapiResult_t). */ int tel_get_misc_me_sn(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** + * @brief Gets the Misc ME Serial Number. * - * @brief This function is to get misc me Sereal Number - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Synchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * + * @details Sync (or) Async: This is a Synchronous API. \n * - * @param [in] handle - * - handle from tel_init() + * Prospective Clients: Embedded call application. \n * - * @pre - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @post - * - None. - * - * @return Return Type (char*) \n - * - Sereal Number string - * - * @par Prospective Clients: - * Embedded call application - * - * @see None. - * - * @remarks - * - None + * @remarks This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * + * @param[in] handle The handle from tel_init() * + * @return The return Type (char*) \n + * The Serial Number string. */ - -char *tel_get_misc_me_sn_sync(TapiHandle *handle); +TelMiscSNInformation *tel_get_misc_me_sn_sync(TapiHandle *handle); /** + * @brief Gets the Misc ME IMEI. * - * @brief This function is to get misc me imei - * - * @par Sync (or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. + * @details Sync (or) Async: This is an Asynchronous API.\n * - * @param [in] handle - * - handle from tel_init() + * Prospective Clients: External Apps. * - * @param [in] callback - * - To register callback function for result of this function. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - IMEI - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. + * @param[in] handle The handle from tel_init() + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) \n + * Integer '0' ( same with #TAPI_API_SUCCESS ): indicates that the operation is completed successfully \n + * Negative integer : It provides an error code (Refer #TapiResult_t). */ - int tel_get_misc_me_imei(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** + * @brief Gets the Misc ME IMEI. * - * @brief This function is to get misc me imei - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * @details Sync (or) Async: This is a Synchronous API.\n * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Synchronous API. + * Prospective Clients: Embedded call application. * - * @par Important Notes: - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @warning - * - * - * @param [in] handle - * - handle from tel_init() - * - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (char*) \n - * - IMEI string - * - * @par Prospective Clients: - * Embedded call application - * - * @see None. - * - * @remarks - * - None + * @remarks This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * + * @param[in] handle The handle from tel_init() * + * @return The return type (char*) \n + * The IMEI string. */ - char *tel_get_misc_me_imei_sync(TapiHandle *handle); /** + * @brief Checks the modem power status. * - * @brief This function is to check modem power status - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - * - * @param [in] handle - * - handle from tel_init() + * @details Sync (or) Async: This is an Asynchronous API. \n * - * @param [out] result - * - result of checking modem power status. + * Prospective Clients: Embedded call application. * - * @par Async Response Message: - * - + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) - * - * @par Prospective Clients: - * Embedded call application - * - * @see None. - * - * @remarks - * - None + * @remarks This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * + * @param[in] handle The handle from tel_init() + * @param[out] result The result of checking the modem power status * + * @return The return type (int) \n + * @c 0 indicates that the operation is completed successfully, \n + * else it will return failure and an error code (Refer Doxygen doc or #TapiResult_t). */ - int tel_check_modem_power_status(TapiHandle *handle, int *result); -/** - * - * @brief This function is to control modem dun pin - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (TapiHandle *handle, or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] pincontrol - * - pin control inforamation - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * - None. - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (TapiHandle *handle, int) \n - * - 0 - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (TapiHandle *handle, Refer Doxygen doc or #TapiResult_t) - * - * @par Prospective Clients: - * Embedded call application - * - * @see None. - * - * @remarks - * - None - * - * - */ - -int tel_control_modem_dun_pin_ctrl(TapiHandle *handle, tapi_ps_btdun_pincontrol *pincontrol, tapi_response_cb callback, void *user_data); - #ifdef __cplusplus } #endif diff --git a/include/ITapiNetText.h b/include/ITapiNetText.h index 059454c..65db6e7 100644 --- a/include/ITapiNetText.h +++ b/include/ITapiNetText.h @@ -1,7 +1,7 @@ /* * libslp-tapi * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Ja-young Gu * @@ -19,16 +19,13 @@ */ /** -* @open -* @ingroup TelephonyAPI -* @addtogroup NetText_TAPI NetText(SMS) -* @{ - * -* @file ITapiNettext.h - - @brief This file serves as a "C" header file defines functions for Tapi Nettext\n - It contains a sample set of function prototypes that would be required by applications. + * @file ITapiNetText.h + */ +/** + * @internal + * @addtogroup CAPI_TELEPHONY_SERVICE_SMS + * @{ */ #ifndef _ITAPI_NETTEXT_H_ @@ -36,1319 +33,424 @@ #include #include -#include #ifdef __cplusplus extern "C" { #endif - /** - * @brief This API is used to send an SMS message to the network. This API interface allows transmitting SMS PDU as defined by - * 3GPP TS 23.040 (SMS-SUBMIT, SMS-COMMAND) to lower layers. This API allows keeping the dedicated link at lower layers - * by passing information as more messages to send in parameters. This will enable not to release if a dedicated connection is - * used for transmission. Access to this API is limited to in-house application and we recommend you use Message Framework API(MAPI). - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] pDataPackage - * - Contains SMS-SUBMIT TPDU - * - * @param [in] bMoreMsgToSend - * - will be set to TRUE when there are more than one message to be send or Multiple segmented concatenated - * message to be send, otherwise FALSE. This flag indicates OEM that more messages to send. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * SMS sent status is returned in this event TAPI_EVENT_NETTEXT_SENTSTATUS_CNF and the event data associated with this event - * is #TelSmsDatapackageInfo_t that has SMS PDU as defined by 3GPP TS 23.040(SMS-SUBMIT-REPORT). Asynchronous return status is indicated by #TelSmsResponse_t. - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. +/** + * @brief Sends an SMS message to the network. * - * @code - * #include + * @details Allows transmitting SMS PDU as defined by 3GPP TS 23.040 (SMS-SUBMIT, SMS-COMMAND) to lower layers.\n + * It allows keeping the dedicated link at lower layers by passing information as messages to send through parameters.\n + * This will enable to avoid releasing a dedicated connection used for transmission. * - * TelSmsDatapackageInfo_t *pDataPackage; - * int ret_status; - * int RequestId = 0; + * Sync (or) Async: This is an Asynchronous API. * - * pDataPackage = (TelSmsDatapackageInfo_t*) malloc(sizeof(TelSmsDatapackageInfo_t)); - * // fill the structure appropriately - * // Sca parameter is optional. If you don't provide Service center address, you should fill "00" in sca array. - * // MsgLength is length of szData//fill the szData in TelSmsDatapackageInfo_t with SMS-SUBMIT or SMS-COMMAND TPDU. - * ret_status = tel_send_sms (pDataPackage, 0, &RequestId); - * @endcode + * Prospective Clients: External Apps. * - * @see - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @remarks - * - None. + * @remarks Access to this API is limited to in-house applications and Message Framework API(MAPI) is recommended instead. * + * @param[in] handle The handle from tel_init() + * @param[in] pDataPackage The SMS-SUBMIT TPDU + * @param[in] bMoreMsgToSend If @c true there is more than one message to be sent or a multiple segmented concatenated + * message has to be sent, otherwise @c false \n + * This flag informs OEM that more messages have to be sent + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) */ -/*================================================================================================*/ int tel_send_sms(TapiHandle *handle, const TelSmsDatapackageInfo_t *pDataPackage, int bMoreMsgToSend, tapi_response_cb callback, void* user_data); - /** - * @brief This API is used to send an SMS message to the network. This API interface allows transmitting SMS PDU as defined by - * 3GPP2 C.S0015 (SMS-SUBMIT, SMS-ACK, SMS-CANCEL) to lower layers. This API allows keeping the dedicated link at lower layers - * by passing information as more messages to send in parameters. This will enable not to release if a dedicated connection is - * used for transmission. Access to this API is limited to in-house application and we recommend you use Message Framework API(MAPI). - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] pSmsMsgInfo - * - Contains parameter mask, message type and data. - * - * @param [in] MoreMsgToSend - * - will be set to TRUE when there are more than one message to be send or Multiple segmented concatenated - * message to be send, otherwise FALSE. This flag indicates OEM that more messages to send. - * - * @param [out] pRequestId - * - Unique identifier for a particular request. - * - pRequestId value can be any value from 0 to 255 if the API is returned successfully - * - -1 (INVALID_REQUEST_ID) will be sent in case of failure. - * - * - * @par Async Response Message: - * SMS sent status is returned in this event TAPI_EVENT_NETTEXT_SENTSTATUS_EX_CNF and the event data associated with this event - * is #TelSmsIs637CauseCode_t. Asynchronous return status is indicated by #TelSmsResponse_t. - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * int ret_status = TAPI_API_SUCCESS; - * int requestId = 0; - * TelSmsMsgInfo_t pMsgInfo={0,}; - * char* diallingNum; - * int dialNumLen; - * TelSmsMsgInfo_t *pDataPackage = malloc(sizeof(TelSmsMsgInfo_t)); - * - * memset(pDataPackage, 0, sizeof(TelSmsMsgInfo_t)); - * pDataPackage->MsgType = TAPI_NETTEXT_MESSAGETYPE_SUBMIT; //fill structure appropriately - * pDataPackage->ParamMask |= TAPI_NETTEXT_PARAM_TELESERVICE_MASK; - * - * ret_status = tel_send_sms_msg(pDataPackage, 0 ,&requestId); - * - * @endcode - * - * @see - * - None. - * - * @remarks - * - None. - * - * - */ -/*================================================================================================*/ -//int tel_send_sms_msg(const TelSmsMsgInfo_t *pSmsMsgInfo, int MoreMsgToSend, int *pRequestId); - - /** - * @brief This function reads a message from SIM card storage. SIM index (index used when storing the SMS) number to be passed to in order - * to read particular SMS message. Total number of messages can be retrieved by #TelTapiSmsGetCount function. - * Access to this API is limited to in-house application and we recommend you use Message Framework API(MAPI). - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] index - * - Index number of the message to be read - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETTEXT_READ_SMS_CNF and the event data is #TelSmsData_t. Asynchronous return status is indicated - * by #TelSmsCause_t. - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. +/** + * @brief Reads a message from the SIM card storage. * - * @code - * #include - * int ret_status = TAPI_API_SUCCESS; - * int RequestId = 0; + * @details The SIM index (index used when storing the SMS) is the number to be passed in order + * to read a particular SMS message. Total number of messages can be retrieved by tel_get_sms_count function. * - * ret_status = tel_read_sms_in_sim(0, &RequestId); //index value which is located in SIM + * Sync (or) Async: This is an Asynchronous API. * - * @endcode + * Prospective Clients: External Apps. * - * @see - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @remarks - * - None. + * @remarks Access to this API is limited to in-house applications and Message Framework API(MAPI) is recommended instead. * + * @param[in] handle The handle from tel_init() + * @param[in] read_index The index number of the message to be read + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) */ -/*================================================================================================*/ - int tel_read_sms_in_sim(TapiHandle *handle, int index, tapi_response_cb callback, void* user_data); +int tel_read_sms_in_sim(TapiHandle *handle, int read_index, tapi_response_cb callback, void* user_data); - /** - * @brief This function writes a message to SIM storage area. - * Access to this API is limited to in-house application and we recommend you use Message Framework API(MAPI). - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] pWriteData - * - SMS message structure. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * TAPI library will send TAPI_EVENT_NETTEXT_SAVE_STATUS_CNF asynchronous event for this request when received from TS. - * The associated data is SIM Index in which the message stored. Asynchronous return status is indicated by #TelSmsCause_t. - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status = TAPI_API_SUCCESS; - * int RequestId = 0; - * TelSmsData_t *pWriteData; - * char *msg = "This is an Test SMS"; - * char *SCA = "821091"; - * - * pWriteData = malloc(sizeof(TelSmsData_t)); +/** + * @brief Writes a message to the SIM storage area. * - * conv_service_center_address(pWriteData->SmsData.Sca, SCA); //convert service center address - * conv_msg_into_tpdu(pWriteData->SmsData.szData, pWriteData->SmsData.MsgLength, msg); // convert message into TPDU - * pWrite->MsgStatus = TAPI_NETTEXT_STATUS_READ; - * pWrite->SimIndex = -1; + * @details Sync (or) Async: This is an Asynchronous API. * - * ret_status = tel_write_sms_in_sim (pWriteData, &RequestId); - * @endcode + * Prospective Clients: External Apps. * - * @see - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @remarks - * - None. + * @remarks Access to this API is limited to in-house applications and Message Framework API(MAPI) is recommended instead. * + * @param[in] handle The handle from tel_init() + * @param[in] pWriteData The SMS message structure + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) */ -/*================================================================================================*/ int tel_write_sms_in_sim(TapiHandle *handle, const TelSmsData_t *pWriteData, tapi_response_cb callback, void* user_data); - /** - * @brief This function deletes a message specified by index (SIM index used when storing the SMS) - * number from the SIM storage area. Access to this API is limited to in-house application and we recommend you use Message Framework API(MAPI). - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] Index - * - Message index to delete. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * The asynchronous event associated is TAPI_EVENT_NETTEXT_DELETE_STATUS_CNF and the event data is SIM index from which - * the message has been deleted. Asynchronous return status is indicated by #TelSmsCause_t. - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t).\n - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status = TAPI_API_SUCCESS; - * int RequestId = 0; +/** + * @brief Deletes the message specified by an index (SIM index used when storing the SMS) + * number from the SIM storage area. * - * ret_status = tel_delete_sms_in_sim(1, &RequestId); //index which is located in SIM + * @details Sync (or) Async: This is an Asynchronous API. * - * @endcode + * Prospective Clients: External Apps. * - * @see - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @remarks - * - None. + * @remarks Access to this API is limited to in-house applications and Message Framework API(MAPI) is recommended instead. * + * @param[in] handle The handle from tel_init() + * @param[in] del_index The message index to delete + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) */ -/*================================================================================================*/ -int tel_delete_sms_in_sim(TapiHandle *handle, int index, tapi_response_cb callback, void* user_data); - - /** - * @brief This function is used to retrieve message count information like Total record count, - * used record count and the indices list for SIM Storage. This is an asynchronous function and - * the response will be sent back by event notification. Access to this API is limited, we recommend you use Message Framework API(MAPI) besides. - * Access to this API is limited to in-house application. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification +int tel_delete_sms_in_sim(TapiHandle *handle, int del_index, tapi_response_cb callback, void* user_data); +/** + * @brief Retrieves message count information like total record count, + * used record count, and indices list for SIM storage. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETTEXT_GET_COUNT_CNF and the event data is #TelSmsStoredMsgCountInfo_t. - * Asynchronous return status is indicated by #TelSmsCause_t. - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * @par Prospective Clients: - * - External Apps.\n - * - * @code - * #include - * - * int ret_status = TAPI_API_SUCCESS; - * int RequestId = 0; + * @details Sync (or) Async: This is an Asynchronous API. * - * ret_status = tel_get_sms_count (&RequestId); //get sms count in SIM - * @endcode + * Prospective Clients: External Apps. * - * @see - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @remarks - * - None. + * @remarks This is an asynchronous function and the response will be sent back in the callback function. + * Access to this API is limited to in-house applications and Message Framework API(MAPI) is recommended instead. * + * @param[in] handle The handle from tel_init() + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) */ -/*================================================================================================*/ int tel_get_sms_count(TapiHandle *handle, tapi_response_cb callback, void* user_data); - /** - * @brief This function is used to set SMS CB Message Identifiers in the appropriate EF-CBMI/EF-CBMIR file in (U)SIM. - * This function also indicates underlying provider to enable or disable CB Channel on which CB messages are received. - * Access to this API is limited to in-house application and we recommend you use Message Framework API(MAPI) besides. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] pCBConfig - * - This structure contains parameters to set SMS CB configuration \n - * (i) Cell broadcast service state. (Enabled/disabled.) \n - * (ii) Cell broadcast message identifier, which denotes whether all cell broadcast message identifiers are selected or only - * some of those.\n - * (iii) The list count of message identifiers to be set.\n - * (iv) The actual list of message identifiers to be set. Each identifier occupies 2 bytes. And the list ranges from 0x00 to 0xff. \n - * These message identifiers denote the source and type of the CB message. Based on the message identifiers set in the SIM, - * the ME receives CB messages with selected message identifiers. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETTEXT_SET_REQUEST_CNF and there is no data associated with this event. - * Asynchronous return status is indicated by #TelSmsCause_t. - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps.\n - * - * @code - * #include - * - * int ret_status = TAPI_API_SUCCESS; - * int RequestId = 0; - * TelSmsCbConfig_t *pCBConfig = NULL; - * - * pCBConfig = (TelSmsCbConfig_t *)malloc(sizeof(TelSmsCbConfig_t)); - * pCBConfig->bCBEnabled = 1; //fill structure appropriately - * pCBConfig->SelectedId = 0x01; - * pCBConfig->MsgIdCount = 0x02; +/** + * @brief Sets SMS CB Message Identifiers in the appropriate EF-CBMI/EF-CBMIR file in the (U)SIM. * - * pCBConfig->MsgIDs[0] = 0x0c; - * pCBConfig->MsgIDs[1] = 0x0c; - * pCBConfig->MsgIDs[2] = 0xdf; - * pCBConfig->MsgIDs[3] = 0x00; + * @details This function also indicates an underlying provider to enable or disable the CB Channel on which CB messages are received. * - * ret_status = tel_set_sms_cb_config(pCBConfig, &RequestId); + * Sync (or) Async: This is an Asynchronous API. * - * @endcode + * Prospective Clients: External Apps. * - * @see - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @remarks - * - None. + * @remarks Access to this API is limited to in-house applications and Message Framework API(MAPI) is recommended instead. + * @a pCBConfig contains parameters to set the SMS CB configuration. + * (i) Cell broadcast service state. (Enabled/disabled.) + * (ii) Cell broadcast message identifier, which denotes whether all cell broadcast message identifiers are selected or only some of them. + * (iii) The list count of message identifiers to be set. + * (iv) The actual list of message identifiers to be set. Each identifier occupies 2 bytes. And the list ranges from 0x00 to 0xff. + * These message identifiers denote the source and type of the CB message. Based on the message identifiers set in the SIM, + * the ME receives CB messages with selected message identifiers. * + * @param[in] handle The handle from tel_init() + * @param[in] pCBConfig The parameters of the SMS CB configuration + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) */ -/*================================================================================================*/ -int tel_set_sms_cb_config(TapiHandle *handle, const TelSmsCbConfig_t *pCBConfig, tapi_response_cb callback, void* user_data); +int tel_set_sms_cb_config(TapiHandle *handle, const TelSmsCbConfig_t *pCBConfig, tapi_response_cb callback, void* user_data); - /** - * @brief This function is used to retrieve SMS CB configuration options from EFcbmi file in the SIM. - * Access to this API is limited to in-house application and we recommend you use Message Framework API(MAPI). - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETTEXT_GET_CB_CONFIG_CNF and the event data is #TelSmsCbConfig_t. - * Asynchronous return status is indicated by #TelSmsCause_t. - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * @par Prospective Clients: - * - External Apps.\n - * - * @code - * #include +/** + * @brief Retrieves the SMS CB configuration parameters from the EFcbmi file in the SIM. * - * int ret_status = TAPI_API_SUCCESS; - * int RequestId = 0; + * @details Sync (or) Async: This is an Asynchronous API. * - * ret_status = tel_get_sms_cb_config (&RequestId); //result will come with async response - * @endcode + * Prospective Clients: External Apps. * - * @see - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @remarks - * - None. + * @remarks Access to this API is limited to in-house applications and Message Framework API(MAPI) is recommended instead. * + * @param[in] handle The handle from tel_init() + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) */ -/*================================================================================================*/ int tel_get_sms_cb_config(TapiHandle *handle, tapi_response_cb callback, void* user_data); - - /** - * @brief This function is used to set SMS preferred bearer on which SMS has to be transmitted. - * Access to this API is limited to in-house application and we recommend you use Message Framework API(MAPI). - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] BearerType - * - Specifies the bearer type. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETTEXT_SET_REQUEST_CNF and there is no data associated with this event. - * Asynchronous return status is indicated by #TelSmsCause_t - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * int ret_status = TAPI_API_SUCCESS; - * int RequestId = 0; - * TelSmsBearerType_t BearerType = TAPI_NETTEXT_BEARER_PS_ONLY; - * - * ret_status = tel_set_sms_preferred_bearer(BearerType, &RequestId); //result will come with async response - * - * @endcode - * - * @see - * - None. - * - * @remarks - * - None. - * - * - */ -/*================================================================================================*/ -int tel_set_sms_preferred_bearer(TapiHandle *handle, TelSmsBearerType_t BearerType, tapi_response_cb callback, void* user_data); - - /** - * @brief This function is used to get SMS preferred bearer on which SMS has to be transmitted. - * This is an asynchronous function. Access to this API is limited to in-house application and , we recommend you use Message Framework API(MAPI). - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETTEXT_GET_SMSBEARER_CNF and the associated event data is #TelSmsBearerType_t. - * Asynchronous return status is indicated by #TelSmsCause_t. - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status = TAPI_API_SUCCESS; - * int RequestId = 0; - * - * ret_status = tel_get_sms_preferred_bearer(&RequestId); //result will come with async response - * - * @endcode - * - * @see - * - None. - * - * @remarks - * - None. - * - * - */ -/*================================================================================================*/ -int tel_get_sms_preferred_bearer(TapiHandle *handle, tapi_response_cb callback, void* user_data); - - /** - * @brief This function is used to get the SMS parameters for a particular SMS (sent/received) - * based on the SIM index where it is stored. This is an asynchronous function. Access to this API is limited to in-house application and we recommend you use Message Framework API(MAPI). - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] index - * - SIM index where the SMS is stored - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETTEXT_GET_PARAM_CNF and the event data is #TelSmsParams_t. Asynchronous return status - * is indicated by #TelSmsCause_t - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status = TAPI_API_SUCCESS; - * int RequestId = 0; +/** + * @brief Gets the SMS parameters for a particular SMS (sent/received) + * based on the SIM index where it is stored. * - * ret_status = tel_get_sms_parameters(1, &RequestId); //result will come with async response + * @details Sync (or) Async: This is an Asynchronous API. * - * @endcode + * Prospective Clients: External Apps. * - * @see - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @remarks - * - None. + * @remarks Access to this API is limited to in-house applications and Message Framework API(MAPI) is recommended instead. * + * @param[in] handle The handle from tel_init() + * @param[in] get_index The SIM index where the SMS is stored + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) */ -/*================================================================================================*/ -int tel_get_sms_parameters(TapiHandle *handle, int index, tapi_response_cb callback, void* user_data); +int tel_get_sms_parameters(TapiHandle *handle, int get_index, tapi_response_cb callback, void* user_data); - /** - * @brief This function is used to set the short message service header parameters which are - * used in the origination of MO messages. Access to this API is limited to in-house application and we recommend you use Message Framework API(MAPI). - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - This API updates/sets SMS Parameters in EFsmsp file in the SIM storage - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] pSmsSetParameters - * - Contains SMS header Parameter information like service center address, destination address, validity period, protocol identifier, - * data coding scheme. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETTEXT_SET_REQUEST_CNF and there is no data associated with this event. Asynchronous - * return status is indicated by #TelSmsCause_t - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * @par Prospective Clients: - * External Apps. - * - * @code - * #include +/** + * @brief Sets the short message service header parameters which are used in the origination of MO messages. * - * int ret_status = TAPI_API_SUCCESS; - * int RequestId = 0; - * TelSmsParams_t SmsSetParameters = {0,}; + * @details Sync (or) Async: This is an Asynchronous API. * - * SmsSetParameters.RecordIndex = 0x01; - * SmsSetParameters.RecordLen = 28; - * memcpy(SmsSetParameters.TpDestAddr.szDiallingNum, "9986529874", 10); - * printf("\ndial no is %s\n", SmsSetParameters.TpDestAddr.szDiallingNum); - * SmsSetParameters.TpDestAddr.DialNumLen = 10; - * SmsSetParameters.TpDestAddr.Ton = TAPI_SIM_TON_NATIONAL;//national no - * SmsSetParameters.TpDestAddr.Npi = TAPI_SIM_NPI_NATIONAL; + * Important Notes: This API updates/sets SMS Parameters in the EFsmsp file in the SIM storage. * - * ret_status = tel_set_sms_parameters(SmsSetParameters, &RequestId); //result will come with async response + * Prospective Clients: External Apps. * - * @endcode + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @see - * - None. + * @remarks Access to this API is limited to in-house applications and Message Framework API(MAPI) is recommended instead. + * @a pSmsSetParameters contains SMS header parameters information like: service center address, + * destination address, validity period, protocol identifier, and data coding scheme. * - * @remarks - * - None. + * @param[in] handle The handle from tel_init() * + * @param[in] pSmsSetParameters The SMS header parameters information + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) */ -/*================================================================================================*/ int tel_set_sms_parameters(TapiHandle *handle, const TelSmsParams_t *pSmsSetParameters, tapi_response_cb callback, void* user_data); - /** - * @brief This function is used to send a delivery report for the received incoming SMS to the network. - * Access to this API is limited to in-house application. - * - * @par Sync (or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] pDataPackage - * - Contains SMS Data package.. - * - * @param [in] RPCause - * - Indicates the reason for SMS-DELIVER failure - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETTEXT_DELIVERY_REPORT_CNF and there is no associated event data. Asynchronous return status - * is indicated by #TelSmsResponse_t - * - * @pre - * - SMS-DELIVER-REPORT message structure should be in TPDU format as specified by 3GPP TS 23.040 SMS TPDU. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status = 0; - * Int requestId = -1; - * TelSmsResponse_t RPCause; - * TelSmsDatapackageInfo_t *del_report = NULL; - * - * del_report = malloc(sizeof(TelSmsDatapackageInfo_t)); - * memset(del_report, 0, sizeof(TelSmsDatapackageInfo_t)); - * //Encode Send Delivery Report here - * //EncodeSmsDeliveryReportTpdu(); +/** + * @brief Sends a delivery report for the received incoming SMS to the network. * - * RPCause = TAPI_NETTEXT_SENDSMS_SUCCESS; - * printf("***receive message (Api:SendDeliverreport)****\n"); + * @details Sync (or) Async: This is an Asynchronous API. * - * ret_status = tel_send_sms_deliver_report(del_report, RPCause, &requestId); + * Prospective Clients: External Apps. * - * @endcode + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @see - * - None. + * @remarks Access to this API is limited to in-house applications. * - * @remarks - * - None. + * @param[in] handle The handle from tel_init() + * @param[in] pDataPackage The SMS Data package + * @param[in] RPCause The reason for SMS-DELIVER failure + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation has completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) * + * @pre The SMS-DELIVER-REPORT message structure should be in the TPDU format as specified by 3GPP TS 23.040 SMS TPDU. */ -/*================================================================================================*/ int tel_send_sms_deliver_report(TapiHandle *handle, const TelSmsDatapackageInfo_t *pDataPackage, TelSmsResponse_t RPCause, tapi_response_cb callback, void* user_data); - /** - * @brief This function is used to set SMS Service Centre Address information in order to send the SMS. - * Access to this API is limited to in-house application and we recommend you use Message Framework API(MAPI). - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - This API updates/sets service center address in EFsmsp file in the SIM storage. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] pSCA - * - Contains the service centre address informations. - * - * @param [in] Index - * - Contains the record index of the Service center address information in the EF. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETTEXT_SET_REQUEST_CNF and there is no data associated with this event. - * Asynchronous return status is indicated by #TelSmsResponse_t. - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t). - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status; - * int RequestId = 0; - * BYTE scabuf[512]; - * char scaNum[TAPI_NETTEXT_SCADDRESS_LEN_MAX]; - * BYTE scaNum_len =0; - * TelSmsAddressInfo_t *sc_addr = NULL; - * BYTE packet[500]; - * int idx = 0; - * int i; +/** + * @brief Sets SMS Service Centre Address information in order to send the SMS. * - * printf("***Setting the SCA(Api:SetSCA)****\n"); - * sc_addr = (TelSmsAddressInfo_t *)malloc(sizeof(TelSmsAddressInfo_t)); - * memset(sc_addr, 0, sizeof(sc_addr)); - * memset(scaNum, 0, sizeof(scaNum)); - * memset(scabuf, 0, sizeof(scabuf)); - * sprintf(scaNum, "821091"); - * scaNum_len = strlen(scaNum); - * scaNum_len = strlen(scaNum); - * scaNum[scaNum_len] = 0; - * scaNum_len = scaNum_len - 1; + * @details Sync (or) Async: This is an Asynchronous API. * - * //idx = SmsUtilEncodeAddrField(packet, scaNum, scaNum_len, 0x01, 0x01); - * //get idx - * sc_addr->DialNumLen = idx ; - * memcpy(sc_addr->szDiallingNum, packet, (unsigned int)idx); - * ret_status = tel_set_sms_sca(sc_addr, 0, &RequestId); //result will come with async response + * Important Notes: This API updates/sets the service center address in the EFsmsp file in the SIM storage. * - * @endcode + * Prospective Clients: External Apps. * - * @see - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @remarks - * - None. + * @remarks Access to this API is limited to in-house applications and Message Framework API(MAPI) is recommended instead. * + * @param[in] handle The handle from tel_init() + * @param[in] pSCA The service centre address information + * @param[in] sca_index The record index of the Service center address information in the EF + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) */ -/*================================================================================================*/ -int tel_set_sms_sca(TapiHandle *handle, const TelSmsAddressInfo_t *pSCA, int index, tapi_response_cb callback, void* user_data); +int tel_set_sms_sca(TapiHandle *handle, const TelSmsAddressInfo_t *pSCA, int sca_index, tapi_response_cb callback, void* user_data); - /** - * @brief This function is used to get current SMS Service Centre Address information. - * Access to this API is limited to in-house application and we recommend you use Message Framework API(MAPI). - * - * @par Sync (or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] Index - * - Contains the record index of the Service center address information in the EF. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETTEXT_GET_SCA_CNF and there is no data associated with this event. - * Asynchronous return status is indicated by #TelSmsResponse_t. - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status = TAPI_API_SUCCESS; - * int RequestId = 0; +/** + * @brief Gets current SMS Service Centre Address information. * - * ret_status = tel_get_sms_sca(0, &RequestId); //result will come with async response + * @details Sync (or) Async: This is an Asynchronous API. * - * @endcode + * Prospective Clients: External Apps. * - * @see - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @remarks - * - None. + * @remarks Access to this API is limited to in-house applications and Message Framework API(MAPI) is recommended instead. * + * @param[in] handle The handle from tel_init() + * @param[in] sca_index The record index of the Service center address information in the SIM EF + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) */ -/*================================================================================================*/ -int tel_get_sms_sca(TapiHandle *handle, int index, tapi_response_cb callback, void* user_data); +int tel_get_sms_sca(TapiHandle *handle, int sca_index, tapi_response_cb callback, void* user_data); - /** - * @brief This function is used by the applications to inform modem about the memory status of PDA (whether FULL or AVAILABLE) so that modem can inform network . - * Access to this API is limited to in-house application. - * - * @par Sync (or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] memoryStatus - * - Contains Memory Status - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETTEXT_SET_REQUEST_CNF and there is no associated event data. Asynchronous return status - * is indicated by #TelSmsResponse_t - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status = TAPI_API_SUCCESS; - * int RequestId = 0; - * int MemoryStatus = TAPI_NETTEXT_PDA_MEMORY_STATUS_AVAILABLE; +/** + * @brief Informs a modem about the memory status of the PDA (whether FULL or AVAILABLE) so that the modem can inform the network. * - * ret_status = tel_set_sms_memory_status(MemoryStatus, &RequestId); //result will come with async response + * @details Sync (or) Async: This is an Asynchronous API. * - * @endcode + * Prospective Clients: External Apps. * - * @see - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @remarks - * - None. + * @remarks Access to this API is limited to in-house applications. * + * @param[in] handle The handle from tel_init() + * @param[in] memoryStatus The Memory Status + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) */ -/*================================================================================================*/ int tel_set_sms_memory_status(TapiHandle *handle, int memoryStatus, tapi_response_cb callback, void* user_data); - /** - * @brief This function is used by the applications to set the message status in the SIM EF. - * Access to this API is limited to in-house application and we recommend you use Message Framework API(MAPI). - * - * @par Sync (or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] Index - * - Index of the message whose status has to be set. - * - * @param [in] msgStatus - * - Status of the message to be set. - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETTEXT_SET_REQUEST_CNF and there is no associated event data. Asynchronous return status - * is indicated by #TelSmsResponse_t - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status = TAPI_API_SUCCESS; - * int RequestId = 0; - * int index = 1; - * int MemoryStatus = TAPI_NETTEXT_PDA_MEMORY_STATUS_AVAILABLE; +/** + * @brief Sets the message status in the SIM EF. * - * ret_status = tel_set_sms_memory_status(index, MemoryStatus, &RequestId); //result will come with async response + * @details Sync (or) Async: This is an Asynchronous API. * - * @endcode + * Prospective Clients: External Apps. * - * @see - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @remarks - * - None. + * @remarks Access to this API is limited to in-house applications and Message Framework API(MAPI) is recommended instead. * + * @param[in] handle The handle from tel_init() + * @param[in] set_index The index of the message whose status has to be set + * @param[in] msgStatus The status of the message to be set + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) */ -/*================================================================================================*/ -int tel_set_sms_message_status(TapiHandle *handle, int index, TelSmsMsgStatus_t msgStatus, tapi_response_cb callback, void* user_data); +int tel_set_sms_message_status(TapiHandle *handle, int set_index, TelSmsMsgStatus_t msgStatus, tapi_response_cb callback, void* user_data); - /** - * @brief This function is used by the applications to get the count of SMS parameter records stored in SIM EF. - * Access to this API is limited to in-house application. - * - * @par Sync (or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init() - * - * @param [in] callback - * - To register callback function for result of this function. - * - * @param [in] user_data - * - user data for user specification - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETTEXT_PARAM_COUNT_IND and there is no associated event data. Asynchronous return status - * is indicated by #TelSmsResponse_t - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * @par Prospective Clients: - * External Apps. - * - * @code - * #include +/** + * @brief Gets the count of the SMS parameter records stored in the SIM EF. * - * int ret_status = TAPI_API_SUCCESS; - * int RequestId = 0; + * @details Sync (or) Async: This is an Asynchronous API. * - * ret_status = tel_get_sms_parameter_count (&RequestId); //result will come with async response - * @endcode + * Prospective Clients: External Apps. * - * @see - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @remarks - * - None. + * @remarks Access to this API is limited to in-house applications. * + * @param[in] handle The handle from tel_init() + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) */ -/*================================================================================================*/ int tel_get_sms_parameter_count(TapiHandle *handle, tapi_response_cb callback, void* user_data); - /** - * @brief This function is used by the applications check the sms ready status (whether ready or not) . - * - * @par Sync (or) Async: - * This is a Synchronous API. - * - * @par Important Notes: - * - None. + * @brief Checks the SMS ready status (whether ready or not). * - * @warning - * - None. + * @details Sync (or) Async: This is a Synchronous API. * - * - * @param [in] handle - * - handle from tel_init() + * Prospective Clients: External Apps. * - * @param [out] pReadyStatus - * - Contains Ready Status + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @par Async Response Message: - * None. - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * @par Prospective Clients: - * External Apps. + * @param[in] handle The handle from tel_init() + * @param[out] pReadyStatus The Ready Status * + * @return The return type (int) + * #TAPI_API_SUCCESS indicates that the operation is completed successfully, + * else it will return failure and an error code (Refer #TapiResult_t) */ int tel_check_sms_device_status(TapiHandle *handle, int *pReadyStatus); -/** - * @brief This function is used by the applications to inform modem about the PDA status(whether PDA is ready to - * recieve messages from network or not). - * - * - * @par Sync (or) Async: - * This is a Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] - * - None - * - * @param [out] - * - None - * - * @par Async Response Message: - * None. - * - * @pre - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) - * @par Prospective Clients: - * External Apps. - * - */ -int tel_set_sms_device_status(void); - #ifdef __cplusplus } #endif @@ -1356,5 +458,5 @@ int tel_set_sms_device_status(void); #endif /* _ITAPI_NETTEXT_H_ */ /** -* @} -*/ + * @} + */ diff --git a/include/ITapiNetwork.h b/include/ITapiNetwork.h index fbdc28f..9b695bc 100644 --- a/include/ITapiNetwork.h +++ b/include/ITapiNetwork.h @@ -1,7 +1,7 @@ /* * libslp-tapi * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Ja-young Gu * @@ -19,23 +19,19 @@ */ /** - * @open - * @ingroup TelephonyAPI - * @addtogroup Network_TAPI NETWORK - * @{ - * * @file ITapiNetwork.h + */ - @brief This file serves as a "C" header file defines functions for Tapi Network\n - It contains a sample set of function prototypes that would be required by applications. +/** + * @internal + * @addtogroup CAPI_TELEPHONY_SERVICE_NETWORK + * @{ */ #ifndef _ITAPI_NETWORK_H_ #define _ITAPI_NETWORK_H_ #include -#include -#include #include #ifdef __cplusplus @@ -44,829 +40,443 @@ extern "C" #endif /** - * @brief This function requests the lower layers to select the network automatically + * @brief Requests the lower layers to select the network automatically. * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @details Sync (or) Async: This is an Asynchronous API. \n * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * Prospective Clients: External Apps.\n * - * @par Important Notes: - * - This function passes the + * This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transferred to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * - * @warning - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @param [in] handle - * - handle from tel_init(). + * @param[in] handle The handle from tel_init() * - * @param [in] callback - * - To register callback function for result. + * @param[in] callback To register a callback function for result * - * @param [in] user_data - * - user_data for user specification. - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETWORK_SELECT_CNF and there is no data associated with this event. Asynchronous return status - * is indicated by #TelNetworkOperationCause_t. - * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code - * - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status; - * int RequestID; - * - * // AUTOMATIC MODE - * ret_status = tel_select_network_automatic(&RequestId); - * @endcode - * - * @see - * - None. - * - * @remarks - * - None. + * @param[in] user_data The user data for user specification * + * @return The return type (int)\n + * #TAPI_API_SUCCESS indicates that the operation is completed successfully\n + * Refer #TapiResult_t for failure and an error code. * + * @pre Initialize the Dbus connection with #tel_init. */ -/*================================================================================================*/ int tel_select_network_automatic(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This function requests the lower layers to select the network (PLMN) which has been selected by the user from the Network List - * displayed to the User. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Important Notes: - * - This function passes the . - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param[in] plmn - * - * @param [in] act - * - * @param [in] callback - * - To register callback function for result. + * @brief Requests the lower layers to select the network (PLMN) which has been selected by the user from the Network List displayed to the user. * - * @param [in] user_data - * - user_data for user specification. + * @details Sync (or) Async: This is an Asynchronous API. \n * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETWORK_SELECT_CNF and there is no data associated with this event. Asynchronous return status - * is indicated by #TelNetworkOperationCause_t. + * Prospective Clients: External Apps.\n * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events + * This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transferred to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * - * @post - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code - * @par Prospective Clients: - * External Apps. + * @param[in] handle The handle from tel_init() * - * @code - * #include + * @param[in] plmn The user selected PLMN * - * int ret_status; - * int RequestID; - * unsigned int plmn = 0; + * @param[in] act The user selected Access Technology * - * // MANUAL MODE - * plmn = 45454; - * ret_status = tel_select_network_manual(Plmn, &RequestId); - * @endcode + * @param[in] callback To register a callback function for result * - * @see - * - None. - * - * @remarks - * - None. + * @param[in] user_data The user data for user specification * + * @return The return type (int)\n + * #TAPI_API_SUCCESS indicates that the operation is completed successfully\n + * Refer #TapiResult_t for failure and an error code. * + * @pre Initialize the Dbus connection with #tel_init. */ -/*================================================================================================*/ int tel_select_network_manual(TapiHandle *handle, const char *plmn, int act, tapi_response_cb callback, void *user_data); /** - * @brief This function sends a request to do manual network selection to search for the available networks and provide the - * Network List to the User/Application. - * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @brief Sends a request to do manual search for the available networks and provides the Network List to the User/Application. * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * @details Sync (or) Async: This is an Asynchronous API. \n * - * @par Important Notes: - * - None. + * Prospective Clients: External Apps.\n * - * @warning - * - None. + * This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transferred to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * - * @param [in] handle - * - handle from tel_init(). + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @param [in] callback - * - To register callback function for result. + * @param[in] handle The handle from tel_init() * - * @param [in] user_data - * - user_data for user specification. + * @param[in] callback To register a callback function for result * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETWORK_SEARCH_CNF and the event data is #TelNetworkPlmnList_t. - * Asynchronous return status is indicated by #TelNetworkOperationCause_t. + * @param[in] user_data The user data for user specification * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - * @post - * - In the available network list, user can select one of the networks successfully. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status; - * int RequestID; - * - * // NETWORK SEARCH - * ret_status = tel_search_network(&RequestId); - * @endcode - * - * @see - * - None. - * - * @remarks - * - None. + * @return The return type (int)\n + * #TAPI_API_SUCCESS indicates that the operation is completed successfully\n + * Refer #TapiResult_t for failure and an error code. * + * @pre Initialize the Dbus connection with #tel_init. * + * @post In the available network list, the user can select one of the networks successfully. */ -/*================================================================================================*/ int tel_search_network(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This function requests for the present network selection mode i.e. automatic or manual. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). + * @brief Gets the present network selection mode i.e. automatic or manual. * - * @param [in] callback - * - To register callback function for result. + * @details Sync (or) Async: This is an Asynchronous API. \n * - * @param [in] user_data - * - user_data for user specification. + * Prospective Clients: External Apps.\n * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETWORK_GETSELECTIONMODE_CNF and the event data is #TelNetworkSelectionMode_t. - * Asynchronous return status is indicated by #TelNetworkOperationCause_t. + * This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transferred to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @post - * - None. + * @param[in] handle The handle from tel_init() * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status; - * int RequestId; - * - * // GET THE SELECTION MODE - * ret_status = tel_get_network_selection_mode (&RequestId); - * @endcode - * - * @see - * - None. - * - * @remarks - * - None. + * @param[in] callback To register a callback function for the result * + * @param[in] user_data The user data for user specification * + * @return The return type (int)\n + * #TAPI_API_SUCCESS indicates that the operation is completed successfully\n + * Refer #TapiResult_t for failure and an error code. * + * @pre Initialize the Dbus connection with #tel_init. */ -/*================================================================================================*/ int tel_get_network_selection_mode(struct tapi_handle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This function is called when User/application wants to configure the service domain to only CS or Only PS or Both. - * This API triggers the underlying protocol stack to do register with Network for only CS services or only PS services - * or both based on the option set using this API. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * @brief Sets the network preferred PLMN. * - * @par Important Notes: - * - None. + * @details Sync (or) Async: This is an Asynchronous API. \n * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init(). - * - * @param[in] ServiceDomain - * - Specifies the type of Service domain (Packet switch, circuit switch,etc) - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETWORK_SET_SVC_DOMAIN_CNF and there is no event data associated with this event - * and asynchronous return status is indicated by #TelNetworkOperationCause_t. - * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code + * Prospective Clients: External Apps. \n * - * @par Prospective Clients: - * External Apps. + * This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transferred to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * - * @code - * #include + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * int ret_status; - * int RequestId; + * @param[in] handle The handle from tel_init() * - * // SET NETWORK SERVICE DOMAIN - * TelNetworkServiceDomain_t ServiceDomain = TAPI_NETWORK_SERVICE_DOMAIN_AUTOMATIC; + * @param[in] operation The operation to be done on the preferred PLMN * - * ret_status = tel_set_network_service_domain (ServiceDomain, &RequestId); - * @endcode + * @param[in] info The PLMN Info * - * @see - * - None. + * @param[in] callback To register a callback function for result * - * @remarks - * - None. + * @param[in] user_data The user data for user specification * + * @return The return type (int)\n + * #TAPI_API_SUCCESS indicates that the operation is completed successfully\n + * Refer #TapiResult_t for failure and an error code. * + * @pre Initialize the Dbus connection with #tel_init. */ -/*================================================================================================*/ -int tel_set_network_service_domain(TapiHandle *handle, TelNetworkServiceDomain_t domain, - tapi_response_cb callback, void *user_data); +int tel_set_network_preferred_plmn(TapiHandle *handle, TelNetworkPreferredPlmnOp_t operation, + TelNetworkPreferredPlmnInfo_t *info, tapi_response_cb callback, void *user_data); /** - * @brief This function requests for the present network service domain i.e. CS or PS or both or automatic. + * @brief Gets the preferred PLMN list. * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @details Sync (or) Async: This is an Asynchronous API. \n * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * Prospective Clients: External Apps. \n * - * @par Important Notes: - * - None. + * This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transferred to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * - * @warning - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @param [in] handle - * - handle from tel_init(). + * @param[in] handle The handle from tel_init() * - * @param [in] callback - * - To register callback function for result. + * @param[in] callback To register a callback function for result * - * @param [in] user_data - * - user_data for user specification. - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETWORK_GET_SVC_DOMAIN_CNF and the event data is #TelNetworkServiceDomain_t. - * Asynchronous return status is indicated by #TelNetworkOperationCause_t. - * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status; - * int RequestId; - * - * // GET NETWORK SERVICE DOMAIN - * ret_status = tel_get_network_service_domain (&RequestId); - * - * @endcode - * - * @see - * - None. - * - * @remarks - * - None. + * @param[in] user_data The user data for user specification * + * @return The return type (int)\n + * #TAPI_API_SUCCESS indicates that the operation is completed successfully\n + * Refer #TapiResult_t for failure and an error code. * + * @pre Initialize the Dbus connection with #tel_init. */ -/*================================================================================================*/ -int tel_get_network_service_domain(TapiHandle *handle, tapi_response_cb callback, void *user_data); - +int tel_get_network_preferred_plmn(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This function is invoked to set the network band and allows the underlying OEM provider to scan the set band. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init(). - * - * @param[in] mode - * - Band preference indicates the band provide to be preferred or select the band. + * @brief Cancels the triggered manual network search. * - * @param[in] band - * - This enumeration defines different network Bands that user can choose. + * @details Sync (or) Async: This is an Asynchronous API. \n * - * @param [in] callback - * - To register callback function for result. + * Prospective Clients: External Apps. * - * @param [in] user_data - * - user_data for user specification. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETWORK_SETNWBAND_CNF and there is no event data associated with this event and asynchronous - * return status is indicated by #TelNetworkOperationCause_t. - * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status; - * int RequestId; - * - * TelNetworkBandPreferred_t BandMode = TAPI_NETWORK_BAND_MODE_PREFERRED; - * TelNetworkBand_t Band = TAPI_NETWORK_BAND_TYPE_GSM_900_1800; - * - * // SET NETWORK BAND - * ret_status = tel_set_network_band (BandMode, Band, &RequestId); - * - * @endcode - * - * @see - * - None. - * - * @remarks - * - None. + * @param[in] handle The handle from tel_init() * + * @param[in] callback To register a callback function for result * + * @param[in] user_data The user data for user specification * + * @return The return type (int)\n + * #TAPI_API_SUCCESS indicates that the operation is completed successfully\n + * Refer #TapiResult_t for failure and an error code. */ -/*================================================================================================*/ -int tel_set_network_band(TapiHandle *handle, TelNetworkBandPreferred_t mode, - TelNetworkBand_t band, tapi_response_cb callback, void *user_data); +int tel_cancel_network_manual_search(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This function requests for the present network band. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * + * @brief Gets network serving information. * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] callback - * - To register callback function for result. + * @details Sync (or) Async: This is an Asynchronous API. \n * - * @param [in] user_data - * - user_data for user specification. + * Prospective Clients: External Apps. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETWORK_GETNWBAND_CNF and the event data is #TelNetworkBand_t. - * Asynchronous return status is indicated by #TelNetworkOperationCause_t. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events + * @param[in] handle The handle from tel_init() * - * @post - * - None. + * @param[in] callback To register a callback function for result * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code - * @par Prospective Clients: - * External Apps. + * @param[in] user_data The user data for user specification * - * @code - * #include + * @return The return type (int)\n + * #TAPI_API_SUCCESS indicates that the operation is completed successfully\n + * Refer #TapiResult_t for failure and an error code. + */ +int tel_get_network_serving(TapiHandle *handle, tapi_response_cb callback, void *user_data); + +/** + * @brief Sets the network mode. * - * int ret_status; - * int RequestId; + * @details Sync (or) Async: This is an Asynchronous API. \n * - * // GET NETWORK BAND - * ret_status = tel_get_network_band(&RequestId); + * Prospective Clients: External Apps. * - * @endcode + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @see - * - None. + * @param[in] handle The handle from tel_init() * - * @remarks - * - None. + * @param[in] mode The network mode (GSM only or WCDMA only or Automatic) * + * @param[in] callback To register a callback function for result * + * @param[in] user_data The user data for user specification * + * @return The return type (int)\n + * #TAPI_API_SUCCESS - indicates that the operation is completed successfully\n + * Refer #TapiResult_t for failure and an error code. */ -/*================================================================================================*/ -int tel_get_network_band(TapiHandle *handle, tapi_response_cb callback, void *user_data); +int tel_set_network_mode(TapiHandle *handle, int mode, tapi_response_cb callback, void *user_data); /** - * @brief This function is invoked to set the network preferred plmn + * @brief Gets the network mode. * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * @details Sync (or) Async: This is an Asynchronous API. \n * - * @par Sync (or) Async: - * This is an Asynchronous API. + * Prospective Clients: External Apps. * - * @par Important Notes: - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @warning - * - None. + * @param[in] handle The handle from tel_init() * + * @param[in] callback To register a callback function for result * - * @param [in] handle - * - handle from tel_init(). - * - * @param[in] operation - * - Operation indicates the operation to be done on preferred plmn . - * - * @param[in] info - * - This gives the plmn Info. - * - * @param [in] callback - * - To register callback function for result. + * @param[in] user_data The user data for user specification * - * @param [in] user_data - * - user_data for user specification. + * @return The return type (int)\n + * #TAPI_API_SUCCESS indicates that the operation is completed successfully\n + * Refer #TapiResult_t for failure and an error code. + */ +int tel_get_network_mode(TapiHandle *handle, tapi_response_cb callback, void *user_data); + +/** + * @brief Gets neighboring cell info. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETWORK_SETPREFFPLMN_CNF and there is no event data associated with this event and asynchronous - * return status is indicated by #TelNetworkOperationCause_t. + * @details Sync (or) Async: This is an Asynchronous API.\n * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events + * Prospective Clients: External Apps. * - * @post - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code - * @par Prospective Clients: - * External Apps. + * @param[in] handle The handle from tel_init() * - * @code - * #include + * @param[in] callback To register a callback function for result * - * int ret_status; - * int RequestId; + * @param[in] user_data The user data for user specification * - * TelNetworkPreferredPlmnOp_t Operation = TAPI_NETWORK_PREF_PLMN_ADD; - * TelNetworkPreferredPlmnInfo_t PrefPlmnInfo; + * @return The return type (int)\n + * #TAPI_API_SUCCESS indicates that the operation is completed successfully\n + * Refer #TapiResult_t for failure and an error code. + */ +int tel_get_network_neighboring_cell_info(TapiHandle *handle, tapi_response_cb callback, void *user_data); + +/** + * @brief Enters or exits the emergency callback mode. * - * memset(&PrefPlmnInfo, 0, sizeof(TelNetworkPreferredPlmnInfo_t)); - * PrefPlmnInfo.Index = 0; - * PrefPlmnInfo.SystemType = TAPI_NETWORK_SYSTEM_GSM; - * unsigned char *plmn = "45454"; - * memcpy(PrefPlmnInfo.Plmn, plmn, strlen(plmn)); + * @details Sync (or) Async: This is an Asynchronous API. \n * - * // SET PREFERRED PLMN - * ret_status = tel_set_network_preferred_plmn(Operation, PrefPlmnInfo, &RequestId); + * Prospective Clients: External Apps. * - * @endcode + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @see - * - None. + * @param[in] handle The handle from tel_init() * - * @remarks - * - None. + * @param[in] mode The emergency callback mode (Enter or Exit) * + * @param[in] callback To register a callback function for result * + * @param[in] user_data The user data for user specification * + * @return The return type (int)\n + * #TAPI_API_SUCCESS indicates that the operation is completed successfully\n + * Refer #TapiResult_t for failure and an error code. */ -/*================================================================================================*/ -int tel_set_network_preferred_plmn(TapiHandle *handle, TelNetworkPreferredPlmnOp_t operation, - TelNetworkPreferredPlmnInfo_t *info, tapi_response_cb callback, void *user_data); +int tel_set_network_emergency_callback_mode(TapiHandle *handle, TelNetworkEmergencyCallbackMode_t mode, + tapi_response_cb callback, void *user_data); /** - * @brief This function is invoked to get the preferred plmn list - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @brief Sets the network roaming preference. * - * @par Important Notes: - * - None. + * @details Sync (or) Async: This is an Asynchronous API. \n * - * @warning - * - None. + * Prospective Clients: External Apps. * - * @param [in] handle - * - handle from tel_init(). + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @param [in] callback - * - To register callback function for result. + * @param[in] handle The handle from tel_init() * - * @param [in] user_data - * - user_data for user specification. + * @param [in] roam_pref The network roaming preference (AUTOMATIC, HOME_ONLY, ROAM_ONLY) * + * @param[in] callback To register a callback function for result * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETWORK_GETPREFFPLMN_CNF and event data associated with this event is #TelNetworkPreferredPlmnList_t - * and asynchronous return status is indicated by #TelNetworkOperationCause_t. + * @param[in] user_data The user data for user specification * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code - * @par Prospective Clients: - * External Apps. - * - * @code - * #include + * @return The return type (int)\n + * #TAPI_API_SUCCESS indicates that the operation is completed successfully\n + * Refer #TapiResult_t for failure and an error code. + */ +int tel_set_network_roaming_preference(TapiHandle *handle, TelNetworkPrefNetType_t roam_pref, tapi_response_cb callback, void *user_data); + +/** + * @brief Gets the network roaming preference. * - * int ret_status; - * int RequestId; + * @details Sync (or) Async: This is an Asynchronous API. \n * - * // GET NETWORK PREFERRED PLMN - * ret_status = tel_get_network_preferred_plmn(&RequestId); + * Prospective Clients: External Apps. * - * @endcode + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @see - * - None. - * - * @remarks - * - None. + * @param[in] handle The handle from tel_init() * + * @param[in] callback To register a callback function for result * + * @param[in] user_data The user data for user specification * + * @return The return type (int)\n + * #TAPI_API_SUCCESS indicates that the operation is completed successfully\n + * Refer #TapiResult_t for failure and an error code. */ -/*================================================================================================*/ -int tel_get_network_preferred_plmn(TapiHandle *handle, tapi_response_cb callback, void *user_data); - +int tel_get_network_roaming_preference(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This function is called to cancel the triggered manual network search. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. + * @brief Sets the Subscription (related to #TapiHandle) as 'default' Data Subscription. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETWORK_CANCELMANUALSEARCH_CNF and there is no event data associated with this event - * and asynchronous return status is indicated by #TelNetworkOperationCause_t. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @pre - * - Manual network search is already triggered. + * @param[in] handle The handle from tel_init() * - * @post - * - None. + * @param[in] callback To register a callback function for result * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code + * @param[in] user_data The user data for user specification * - * @par Prospective Clients: - * External Apps. + * @post None. * + * @return The return type (int)\n + * #TAPI_API_SUCCESS indicates that the operation has completed successfully\n + * Refer #TapiResult_t for failure and an error code. * + * @par Prospective Clients: External Apps. */ -/*================================================================================================*/ -int tel_cancel_network_manual_search(TapiHandle *handle, tapi_response_cb callback, void *user_data); +int tel_set_network_default_data_subscription(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This function is called to get network serving. + * @brief Gets the Subscription which is configured as 'default' Data Subscription. * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @par Important Notes: - * - None. + * @param[in] handle The handle from tel_init() * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). + * @param[out] The default subscription + * - 'default' Data Subscription. + * - Refer #TelNetworkDefaultDataSubs_t for Subscription details. * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. + * @post None. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETWORK_CANCELMANUALSEARCH_CNF and there is no event data associated with this event - * and asynchronous return status is indicated by #TelNetworkOperationCause_t. - * - * @pre - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code - * - * @par Prospective Clients: - * External Apps. + * @return The return type (int)\n + * #TAPI_API_SUCCESS indicates that the operation has completed successfully\n + * Refer #TapiResult_t for failure and an error code. * + * @par Prospective Clients: External Apps. */ -/*================================================================================================*/ -int tel_get_network_serving(TapiHandle *handle, tapi_response_cb callback, void *user_data); +int tel_get_network_default_data_subscription(TapiHandle *handle, TelNetworkDefaultDataSubs_t *default_subscription); /** - * @brief This function is called to set network mode. - * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @brief This function is called to set the Subscription (related to #TapiHandle) as 'default' Subscription for CS (Voice). * - * @par Important Notes: - * - None. - * - * @warning - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * * @param [in] handle * - handle from tel_init(). * - * @param [in] mode - * * @param [in] callback * - To register callback function for result. * * @param [in] user_data * - user_data for user specification. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETWORK_CANCELMANUALSEARCH_CNF and there is no event data associated with this event - * and asynchronous return status is indicated by #TelNetworkOperationCause_t. - * - * @pre - * * @post * - None. * @@ -876,37 +486,22 @@ int tel_get_network_serving(TapiHandle *handle, tapi_response_cb callback, void * * @par Prospective Clients: * External Apps. - * */ -/*================================================================================================*/ -int tel_set_network_mode(TapiHandle *handle, int mode, tapi_response_cb callback, void *user_data); +int tel_set_network_default_subscription(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This function is called to get network mode. - * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @brief This function is called to get the Subscription which is configured as 'default' Subscription for CS (Voice). * - * @par Important Notes: - * - None. - * - * @warning - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * * @param [in] handle * - handle from tel_init(). * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_NETWORK_CANCELMANUALSEARCH_CNF and there is no event data associated with this event - * and asynchronous return status is indicated by #TelNetworkOperationCause_t. - * - * @pre + * @param [out] default_subscription + * - 'default' Subscription for CS (Voice). + * - Refer #TelNetworkDefaultSubs_t for Subscription details * * @post * - None. @@ -917,10 +512,8 @@ int tel_set_network_mode(TapiHandle *handle, int mode, tapi_response_cb callback * * @par Prospective Clients: * External Apps. - * */ -/*================================================================================================*/ -int tel_get_network_mode(TapiHandle *handle, tapi_response_cb callback, void *user_data); +int tel_get_network_default_subscription(TapiHandle *handle, TelNetworkDefaultSubs_t *default_subscription); #ifdef __cplusplus } diff --git a/include/ITapiPS.h b/include/ITapiPS.h deleted file mode 100644 index 4edae8c..0000000 --- a/include/ITapiPS.h +++ /dev/null @@ -1,764 +0,0 @@ -/* - * libslp-tapi - * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: Ja-young Gu - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @open - * @ingroup TelephonyAPI - * @addtogroup GPRS_TAPI GPRS - * @{ - * - * GPRS APIs allow an application to accomplish the following services: @n - * - activate , deactivate PDP service @n - * - */ - -#ifndef _ITAPI_PS_H_ -#define _ITAPI_PS_H_ - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* Defining macros for PSMAN profiles */ -#define TAPI_PDP_ADDR_LEN_MAX 20 -#define TAPI_PDP_APN_LEN_MAX 101 -#define TAPI_PDP_NAME_LEN_MAX 16 -#define TAPI_PDP_MAX_USERNAME_LEN 32 -#define TAPI_PDP_MAX_PASSWORD_LEN 32 -#define TAPI_PDP_MAX_DNS_LEN 16 -#define MAX_PDP_CONTEXTS_ALLOWED 3 -#define MAX_GPRS_PORT_LIST 200 - -typedef enum { - TAPI_GPRS_DEFINE_PDP_CONTEXT=0x01, /* 0x01 : Define PDP Context */ - TAPI_GSM_GPRS_QOS, /* 0x02 : Quality of Service Profile */ - TAPI_GSM_GPRS_PS, /* 0x03 : PS attach or detach */ - TAPI_GSM_GPRS_PDP_CONTEXT, /* 0x04 : PDP context activate or deactivate */ - TAPI_GSM_GPRS_ENTER_DATA, /* 0x05 : Enter data */ - TAPI_GSM_GPRS_SHOW_PDP_ADDR, /* 0x06 : Show PDP address*/ - TAPI_GSM_GPRS_MS_CLASS, /* 0x07 : GPRS mobile station class*/ - TAPI_GSM_GPRS_3G_QUAL_SRVC_PROFILE, /* 0x08 : 3G Quality of service profile */ - TAPI_GSM_GPRS_IP_CONFIGURATION, /* 0x09 : Multiple PDP context IP configuration */ - TAPI_GSM_GPRS_DEFINE_SEC_PDP_CONTEXT, /* 0X0A : AT+CGDSCONT 05.10.07 ky.doo EDIT */ - TAPI_GSM_GPRS_TFT, /* 0X0B : AT+CGTFT 05.10.07 ky.doo EDIT */ - TAPI_GSM_GPRS_HSDPA_STATUS, /* 0x0C : HSDPA status */ - TAPI_GSM_GPRS_CURRENT_SESSION_DATA_COUNTER,/* 0x0D : Current data session tx/rx total bytes */ - TAPI_GSM_GPRS_DATA_DORMANT, /* 0x0E : Force to set Dormant */ - TAPI_GSM_GPRS_DUN_PIN_CTRL , /* 0x0F : Dial up Networking Pin Control Message */ - TAPI_GSM_GPRS_CALL_STATUS, /* 0x10 : DS TE2 Data Call result(Multiple PDP) */ - TAPI_GSM_GPRS_PORT_SEL, /* 0x11 : PORT SEL */ - TAPI_GSM_GPRS_MAX -} tapi_gprs_type_t; - -typedef enum{ - TAPI_PDP_MODE_ADD = 0x01, /*ADD*/ - TAPI_PDP_MODE_DEL = 0x02 /*Delete*/ -} tapi_pdp_mode_type_t; - -typedef enum{ - TAPI_PDP_AUTH_NONE = 0x0, /* No authentication */ - TAPI_PDP_AUTH_PAP = 0x1, /* PAP authentication */ - TAPI_PDP_AUTH_CHAP = 0x2, /* CHAP authentication */ - TAPI_PDP_AUTH_MAX = 0xff - -} tapi_pdp_auth_type_t; - -typedef enum { - GPRS_PDP_TYPE_UNKNOWN = 0x00, - GPRS_PDP_TYPE_X25 = 0x01, - GPRS_PDP_TYPE_IP = 0x02, - GPRS_PDP_TYPE_IHOSP = 0x03, - GPRS_PDP_TYPE_PPP = 0x04, - GPRS_PDP_TYPE_IPV6 = 0x05, -} tapi_pdp_type_t; - -/* HSDPA Status Variable */ -typedef enum { - HSDPA_INACTIVE, - HSDPA_ACTIVE -} tapi_hspda_status_type; - -typedef enum { - GPRS_SIGNAL_DCD = 0x01, - GPRS_DATA_SIGNAL_DTR = 0x04, - GPRS_DATA_SIGNAL_DSR = 0x06, - GPRS_DATA_SIGNAL_RTS = 0x07, - GPRS_DATA_SIGNAL_CTS = 0x08, - GPRS_DATA_SIGNAL_RI = 0x09, -} tapi_ps_btdun_pincontrol_signal; - -typedef enum { - GPRS_SIGNAL_STATUS_OFF = 0x00, - GPRS_SIGNAL_STATUS_ON = 0x01, -} tapi_ps_btdun_pincontrol_status; - -typedef enum { - TAPI_GPRS_PS_STATUS_DETACH = 0x00, - TAPI_GPRS_PS_STATUS_ATTACH = 0x01, - TAPI_GPRS_PS_STATUS_MAX -} tapi_gprs_pdp_status; - -typedef enum { - TAPI_GPRS_MO_SMS_SVC_CIRCUIT = 0x00, - TAPI_GPRS_MO_SMS_SVC_GPRS = 0x01, - TAPI_GPRS_MO_SMS_SVC_CIRCUITPREFERRED = 0x02, - TAPI_GPRS_MO_SMS_SVC_GPRSPREFERRED = 0x03, -} tapi_gprs_pdp_mo_sms_service; - -typedef enum { - TAPI_GPRS_3G_QOS_TYPE_REQUEST = 0x01, - TAPI_GPRS_3G_QOS_TYPE_MIN_ACCEPT = 0x02, - TAPI_GPRS_3G_QOS_TYPE_NEGOTIATE = 0x03, -} tapi_gprs_pdp_3g_qos_type; - -typedef enum { - TAPI_GPRS_3G_QOS_DELI_ORDER_NO = 0x00, - TAPI_GPRS_3G_QOS_DELI_ORDER_YES = 0x01, - TAPI_GPRS_3G_QOS_DELI_ORDER_SUBSCRIBE = 0x02, -} tapi_gprs_pdp_3g_qos_deli_order; - -typedef enum { - DSTATE_OK = 0x00, - DSTATE_CONNECT, - DSTATE_RING, - DSTATE_NO_CARRIER, - DSTATE_ERROR, - DSTATE_NO_DIALTONE, - DSTATE_BUSY, - DSTATE_NO_ANSWER, - DSTATE_RESULT_FDN, - DSTATE_MAX, -} tapi_gprs_data_status; - -typedef enum { - PDP_ACT_FAILURE_CAUSE_NORMAL = 0x00, // 0x00 : Normal Process ( no problem ) - PDP_ACT_FAILURE_CAUSE_REL_BY_USER = 0x01, // Call Released by User - PDP_ACT_FAILURE_CAUSE_REGULAR_DEACTIVATION = 0x02, // Regular deactivation - PDP_ACT_FAILURE_CAUSE_LLC_SNDCP = 0x03, // LLC SNDCP failure - PDP_ACT_FAILURE_CAUSE_INSUFFICIENT_RESOURCE = 0x04, // Insufficient resources - PDP_ACT_FAILURE_CAUSE_UNKNOWN_APN = 0x05, // Missing or unknown apn - PDP_ACT_FAILURE_CAUSE_UNKNOWN_PDP_ADDRESS = 0x06, // Unknown PDP address or type - PDP_ACT_FAILURE_CAUSE_USER_AUTH_FAILED = 0x07, // Unknown PDP address or type - PDP_ACT_FAILURE_CAUSE_ACT_REJ_GGSN = 0x08, // Unknown PDP address or type - PDP_ACT_FAILURE_CAUSE_ACT_REJ_UNSPECIFIED = 0x09, // Unknown PDP address or type - PDP_ACT_FAILURE_CAUSE_SVC_OPTION_NOT_SUPPORTED = 0x0A, // Service option not supported - PDP_ACT_FAILURE_CAUSE_SVC_NOT_SUBSCRIBED = 0x0B, // Requested service option not subscribed - PDP_ACT_FAILURE_CAUSE_SVC_OPT_OUT_ORDER = 0x0C, // Service out of order - PDP_ACT_FAILURE_CAUSE_NSAPI_USED = 0x0D, // NSAPI already used - PDP_ACT_FAILURE_CAUSE_QOS_NOT_ACCEPTED = 0x0E, // QoS not accepted - PDP_ACT_FAILURE_CAUSE_NETWORK_FAILURE = 0x0F, // Network Failure - PDP_ACT_FAILURE_CAUSE_REACT_REQUIRED = 0x10, // Reactivation Required - PDP_ACT_FAILURE_CAUSE_REATURE_NOT_SUPPORTED = 0x11, // Feature not supported - PDP_ACT_FAILURE_CAUSE_TFT_FILTER_ERROR = 0x12, // TFT or filter error - PDP_ACT_FAILURE_CAUSE_UNKOWN_PDP_CONTEXT = 0x13, // Unknown PDP context - PDP_ACT_FAILURE_CAUSE_INVALID_MSG = 0x14, // Invalid MSG - PDP_ACT_FAILURE_CAUSE_PROTOCOL_ERROR = 0x15, // Protocol error - PDP_ACT_FAILURE_CAUSE_MOBILE_FAILURE_ERROR = 0x16, // Mobile failure error - PDP_ACT_FAILURE_CAUSE_TIMEOUT_ERROR = 0x17, // Timeout error - PDP_ACT_FAILURE_CAUSE_UNKNOWN_ERROR = 0x18, // Unknown error - PDP_ACT_FAILURE_CAUSE_MAX , -} tapi_gprs_ds_status_reason; - -typedef enum { - INTERNAL_PS_CALL = 0x00, - EXTERNAL_PS_CALL = 0x01 -} tapi_gprs_external_status; - -typedef enum { - PDP_DEVICE_INFO_GET = 0x00, - PDP_DEVICE_INFO_SET = 0x01 -} tapi_gprs_device_info; - -typedef enum{ - TAPI_GPRS_PORT_LIST_NOT_USE, // 0x00 - TAPI_GPRS_PORT_LIST_WHITE, // 0x01 - TAPI_GPRS_PORT_LIST_BLACK, // 0x02 -} tapi_gprs_port_list_type; - -typedef enum { - TAPI_PDP_STATE_NONE, /* 0x00 Default state for a given PDP context*/ - TAPI_PDP_STATE_ACTIVATING, /* 0x01 TS will be in this state when there is a START PDP Request until it is activated by modem - This state PDP is not yet UP*/ - TAPI_PDP_STATE_ACTIVE, /* 0x02 After PDP activation is completed by modem and sent to PDA - This state PDP is fully UP*/ - TAPI_PDP_STATE_MODIFYING, /* 0x03 This state is reserved for future use - When TS support modifying existing PDP*/ - TAPI_PDP_STATE_DEACTIVATING, /* 0x04 TS will be in this state when there is STOP PDP request from App until it is deactivated by modem */ -} tapi_gprs_state; - -typedef enum { - TAPI_PDP_DATA_DORMANCY_SUCCESS, - TAPI_PDP_DATA_DORMANCY_FAILED -} TelTapiGprsDataDormancy_t; - -/* Suspend Reason Type */ -typedef enum { - TAPI_PDP_SUSPEND_NO_SVC = 0x01, - TAPI_PDP_SUSPEND_RAT_CHANGE = 0x02, - TAPI_PDP_SUSPEND_GPRS_HOLD = 0x03, - TAPI_PDP_SUSPEND_FLOW_CONTROL = 0x04, - TAPI_PDP_SUSPEND_GPRS_SUSPEND = 0x05, - TAPI_PDP_SUSPEND_RAU = 0x06, - TAPI_PDP_SUSPEND_LU = 0x07, - TAPI_PDP_TRANSFER_STATUS_MAX -} tapi_gprs_suspend_type; - -typedef struct { - tapi_gprs_type_t type; - tapi_phone_err_t cause; -} tapi_gprs_error_info_t; - -typedef struct { - int cont_id; - tapi_pdp_err_t err; -} tapi_ps_pdp_info_t; - -typedef struct { - int cont_id; - tapi_pdp_err_t err; -} tapi_ps_net_stop_rsp_t; - -typedef struct { - int cont_id; - tapi_pdp_err_t err; -} tapi_ps_net_activation_rsp_t; - -typedef struct { - int cont_id; - tapi_pdp_err_t err; -} tapi_ps_net_stop_ind_t; - -/* ps attach response */ -typedef struct { - int state; - int transfer_status; -} tapi_ps_attach_response_t; - -/* ps call statistics */ -typedef struct { - unsigned char cid; // call id . for proper bit alignment prefer int than short - unsigned long int rx; // total number of bytes received for this cid - unsigned long int tx; // total number of bytes transmitted for this cid -} tapi_ps_call_statistics_t; - -typedef struct { - tapi_ps_btdun_pincontrol_signal signal; - tapi_ps_btdun_pincontrol_status status; -} tapi_ps_btdun_pincontrol; - -/** - * This structure defines PDP information. - * @see ps_net_info_t - */ -typedef struct { - unsigned short is_primary_cont; /*Primary or secondary*/ - int primary_cont; /*Primary context id, if the is the context is secondary*/ - char apn[TAPI_PDP_APN_LEN_MAX]; - unsigned char pdp_address[TAPI_PDP_ADDR_LEN_MAX]; - unsigned char username[TAPI_PDP_MAX_USERNAME_LEN ]; - unsigned char password[TAPI_PDP_MAX_PASSWORD_LEN ]; - unsigned char dns1[TAPI_PDP_MAX_DNS_LEN ]; // @field Context activation DNS1 - unsigned char dns2[TAPI_PDP_MAX_DNS_LEN ]; // @field Context activation DNS2 - tapi_pdp_auth_type_t auth_type; - tapi_pdp_type_t pdp_type; -} tapi_pdp_info_t; - -typedef struct { - int cont_id; - tapi_pdp_info_t pdp_info; -} tapi_ps_net_start_req_t; - -typedef struct { - unsigned short is_primary_cont; /*Primary or secondary*/ - unsigned char username[TAPI_PDP_MAX_USERNAME_LEN ]; - unsigned char password[TAPI_PDP_MAX_PASSWORD_LEN ]; - unsigned char dns1[TAPI_PDP_MAX_DNS_LEN ]; // @field Context activation DNS1 - unsigned char dns2[TAPI_PDP_MAX_DNS_LEN ]; // @field Context activation DNS2 - tapi_pdp_auth_type_t auth_type; -} tapi_pdpdeact_info_t; - -typedef struct { - int cont_id; - tapi_pdpdeact_info_t pdp_info; -} tapi_ps_net_stop_req_t; - -typedef struct { - unsigned char field_flag; - unsigned char ip_address[4]; - unsigned char primary_dns[4]; - unsigned char secondary_dns[4]; - unsigned char gateway[4]; - unsigned char subnet_mask[4]; -} tapi_pdp_resp_info_t; - -typedef struct { - int cont_id; - tapi_pdp_err_t err; - tapi_pdp_resp_info_t pdp_info; - char devname[TAPI_PDP_NAME_LEN_MAX]; -} tapi_ps_net_start_rsp_t; - -typedef struct tagSetPDPActDeact { - int cid; - unsigned char username[TAPI_PDP_MAX_USERNAME_LEN ]; // @field Context activation user name - unsigned char passwd[TAPI_PDP_MAX_PASSWORD_LEN ]; // @field Context activation password - unsigned char dns1[TAPI_PDP_MAX_DNS_LEN ]; // @field Context activation DNS1 - unsigned char dns2[TAPI_PDP_MAX_DNS_LEN ]; // @field Context activation DNS2 - tapi_pdp_auth_type_t auth; -} tapi_gprs_pdp_act_deact_set; - -typedef struct { - char cid; - tapi_gprs_pdp_status state; -} tapi_gprs_pdp_status_info; - -typedef struct { - char num_act; - tapi_gprs_pdp_status_info info[3]; -} tapi_gprs_pdp_status_res; - -typedef struct { - char cid; - char address[20]; -} tapi_gprs_pdp_address_res; - -typedef struct { - unsigned char cid; - tapi_gprs_data_status status; - tapi_gprs_ds_status_reason reason; - unsigned char external; -} tapi_gprs_pdp_status_reason_info; - -typedef struct { - tapi_gprs_port_list_type type; - unsigned char len; - unsigned short list[MAX_GPRS_PORT_LIST]; -} tapi_gprs_port_list; - -typedef struct { - tapi_gprs_port_list tcp_list; - tapi_gprs_port_list udp_list; -} tapi_gprs_pdp_port_list_setting_info_t; - -/** - * @brief This API is used to request to Telephony Server to set PDP context define info, PDP activation. - * Access to this API is limited, we recommend you use Data Network API - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * -NONE - * - * @warning - * - None. - * - * @param[in] pNet_start_req_info - * - This input has the PDP context define info, PDP activation info #tapi_ps_net_start_req_t - * - * @param [out] pRequestID - * - Unique identifier for a particular request. - * - request_id value can be any value from 0 to 255 if the API is returned successfully - * - -1 (INVALID_REQUEST_ID) will be sent in case of failure. - * - * @par Async Response Message: - * -The event associated is TAPI_EVENT_PS_PDP_ACT_RSP and the event data is #tapi_ps_pdp_info_t. - * - * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status; - * int request_id = 0; - * tapi_ps_net_start_req_t start_req; - * - * start_req.cont_id = CONTEXT_ID; //use proper id regarding upper layer usage - * strcpy(start_req.pdp_info.apn, APN_ADDRESS); - * - * ret_status = tel_activate_gprs_pdp (&start_req, &request_id); - * @endcode - * - * @see - * - None. - * - * @remarks - * - None. - */ -/*================================================================================================*/ -int tel_activate_gprs_pdp(const tapi_ps_net_start_req_t *pNet_start_req_info, int *pRequestID); - -/** - * @brief This API is used to request to Telephony Server to deactivate PDP service - * Access to this API is limited, we recommend you use Data Network API - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * -NONE - * - * @warning - * - None. - * - * @param[in] net_stop_req_info - * - This input has the PDP context define info, PDP activation info #tapi_ps_net_start_req_t - * - * @param [out] pRequestID - * - Unique identifier for a particular request. - * - request_id value can be any value from 0 to 255 if the API is returned successfully - * - -1 (INVALID_REQUEST_ID) will be sent in case of failure. - * - * @par Async Response Message: - * -The event associated is TAPI_EVENT_PS_PDP_DEACT_RSP and the event data is #tapi_ps_pdp_info_t. - * - * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status; - * int request_id = 0; - * tapi_ps_net_stop_req_t end_req; - * - * memset(&end_req, 0, sizeof(tapi_ps_net_stop_req_t)); - * - * end_req.cont_id = CONTEXT_ID; - * - * ret_status = tel_deactivate_gprs_pdp (&end_req, &request_id); //use context id which is used in activate time - * @endcode - * - * @see - * - None. - * - * @remarks - * - None. - */ -/*================================================================================================*/ -int tel_deactivate_gprs_pdp(const tapi_ps_net_stop_req_t *net_stop_req_info, int *pRequestID); - -/** - * @brief This API is used to send modem data channels to dormant state for power saving when there is no data flowing for certain time - * Access to this API is limited, we recommend you use Data Network API - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * -NONE - * - * @warning - * - None. - * - * @param [out] pRequestID - * - Unique identifier for a particular request. - * - request_id value can be any value from 0 to 255 if the API is returned successfully - * - -1 (INVALID_REQUEST_ID) will be sent in case of failure. - * - * @par Async Response Message: - * -The event associated is TAPI_EVENT_PS_DATA_DORMANT_RESP and the event data is #TelTapiGprsDataDormancy_t. - * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status; - * int request_id = 0; - * - * ret_status = tel_set_gprs_dormant(&request_id); //if user want to dormant state - * @endcode - * - * @see - * - None. - * - * @remarks - * - None. - */ -/*================================================================================================*/ -int tel_set_gprs_dormant(int *pRequestID); - -/** - * @brief This API is used to get port list - * Access to this API is limited, we recommend you use Data Network API - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * -NONE - * - * @warning - * - None. - * - * @param [out] pRequestID - * - Unique identifier for a particular request. - * - request_id value can be any value from 0 to 255 if the API is returned successfully - * - -1 (INVALID_REQUEST_ID) will be sent in case of failure. - * - * @par Async Response Message: - * -The event associated is TAPI_EVENT_PS_PDP_GET_PORTLIST_RSP and the event data is #tapi_gprs_pdp_port_list_setting_info_t. - * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_val; - * int requestId = 0; - * - * ret_val = tel_get_gprs_port_list(&requestId); //get port list with async response. current return value means whether request send low layer properly or not - * @endcode - * - * @see - * - None. - * - * @remarks - * - None. - */ -/*================================================================================================*/ -int tel_get_gprs_port_list(int *pRequestID); - -/** - * @brief This API is used to set port list - * Access to this API is limited, we recommend you use Data Network API - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * -NONE - * - * @warning - * - None. - * - * @param[in] info - * - This input has the TCP/UDP port list information info #tapi_gprs_pdp_port_list_setting_info_t - * - * @param [out] pRequestID - * - Unique identifier for a particular request. - * - request_id value can be any value from 0 to 255 if the API is returned successfully - * - -1 (INVALID_REQUEST_ID) will be sent in case of failure. - * - * @par Async Response Message: - * -None - * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_val; - * int requestId = 0; - * tapi_gprs_pdp_port_list_setting_info_t test; - * - * memset(&test, 0, sizeof(tapi_gprs_pdp_port_list_setting_info_t)); - * test.tcp_list.type = TAPI_GPRS_PORT_LIST_NOT_USE; - * test.tcp_list.len = 1; - * test.tcp_list.list[0] = 1004; - * test.udp_list.type = TAPI_GPRS_PORT_LIST_NOT_USE; - * test.udp_list.len = 1; - * test.udp_list.list[i] = 1111; - * - * ret_val = tel_set_gprs_port_list(&test, &requestId); //get operation result with async response. current return value means whether request send low layer properly or not - * - * @endcode - * - * @see - * - None. - * - * @remarks - * - None. - */ -/*================================================================================================*/ -int tel_set_gprs_port_list(tapi_gprs_pdp_port_list_setting_info_t *info, int *pRequestID); - - -/** - * @brief This API is used to request BT Dun enable or disable - * Access to this API is limited, we recommend you use Data Network API - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * -NONE - * - * @warning - * - None. - * - * @param[in] pincontrol - * - This input has the BT Dun pin control information #tapi_ps_btdun_pincontrol - * - * @param [out] pRequestID - * - Unique identifier for a particular request. - * - request_id value can be any value from 0 to 255 if the API is returned successfully - * - -1 (INVALID_REQUEST_ID) will be sent in case of failure. - * - * @par Async Response Message: - * -The event associated is TAPI_EVENT_PS_BTDUN_PINCONTROL_NOTI or TAPI_EVENT_PS_ERROR_IND. - * -In success, the event associated is TAPI_EVENT_PS_BTDUN_PINCONTROL_NOTI and the event data is #tapi_ps_btdun_pincontrol. - * In fail, the event associated is TAPI_EVENT_PS_ERROR_IND and the event data is #tapi_gprs_error_info_t. - * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status; - * int request_id = 0; - * tapi_ps_btdun_pincontrol bt_control; - * - * bt_control.signal = GPRS_SIGNAL_DCD; - * bt_control.status = GPRS_SIGNAL_STATUS_OFF; - * - * ret_status = tel_control_gprs_btdun_pin(bt_control, &request_id); //get control result with async response. current return value means whether request send low layer properly or not - * @endcode - * - * @see - * - None. - * - * @remarks - * - None. - */ -/*================================================================================================*/ - -#ifdef __cplusplus -} -#endif - -#endif //_ITAPI_PS_H_ - -/** - * @} - */ diff --git a/include/ITapiPhonebook.h b/include/ITapiPhonebook.h index 935971a..70e6ef9 100644 --- a/include/ITapiPhonebook.h +++ b/include/ITapiPhonebook.h @@ -1,7 +1,7 @@ /* * libslp-tapi * - * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Ja-young Gu * @@ -19,25 +19,20 @@ */ /** -* @open -* @ingroup TelephonyAPI -* @addtogroup PHONEBOOK_TAPI PHONEBOOK -* @{ -* -* @file ITapiPhonebook.h - - @brief This file serves as a "C" header file defines functions for Tapi SIM phonebook Services.\n - It contains a sample set of function prototypes that would be required by applications. + * @file ITapiPhonebook.h + */ -*/ +/** + * @internal + * @addtogroup CAPI_TELEPHONY_SERVICE_PHONEBOOK + * @{ + */ #ifndef _ITAPI_PHONEBOOK_H_ #define _ITAPI_PHONEBOOK_H_ #include -#include #include -#include #ifdef __cplusplus extern "C" @@ -45,484 +40,248 @@ extern "C" #endif /** - * @brief This function is used to get current inserted SIM phonebook init status, available phonebook list and first valid index in case of FDN, ADN, 3G phonebook. - * Access to this API is limited to in-house application and we recommend you use phonebook-engine APIs. - * - * @par Sync (or) Async: - * This is an synchronous API. - * - * @par Important Notes: - * - We recommend to use phonebook-engine APIs for handling phonebook(including SIM phonebook). - * If user uses SIM phonebook related APIs directly, it can break device phonebook consistency because all phonebook information managed in phonebook-engine. - * pb_list and first_index value are available at init_completed status is '1' only. - * - * @warning - * - None. + * @brief Gets the current inserted SIM phonebook init status, available phonebook list, and first valid index in case of FDN, ADN, and 3G phonebook. * - * @param [in] handle - * - handle from tel_init(). + * @details Access to this API is limited to in-house applications and phonebook-engine APIs are recommended instead. \n * - * @param [out] init_completed - * - phonebook init status. '0' is not init, '1' is init complete to use. + * Sync (or) Async: This is a synchronous API. \n * - * @param [out] pb_list - * - available SIM phonebook list. This value is valid in phonebook init complete case. + * Prospective Clients: External Apps. \n * - * @par Async Response Message: - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @pre - * - None. + * @remarks You must use phonebook-engine APIs to handle a phonebook (including SIM phonebook). + * If a user uses SIM phonebook related APIs directly, it can break device phonebook consistency because of all the phonebook information managed in the phonebook-engine. + * The @a pb_list and @a first_index value are available when the @a init_completed status is '1' only. * - * @post - * - None. + * @param[in] handle The handle from tel_init() * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * @param[out] init_completed The phonebook init status to use - '0' is not init, '1' is init complete * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * #include - * int err_code = 0; - * int valid_index = 0; // usim or sim adn first valid index - * TelSimPbList_t pb_list = {0,}; - * int pPbInitCompleted = 0; // init or not - * - * // GET SIM PHONEBOOK INIT INFORMATION - * err_code = tel_get_sim_pb_init_info(&pPbInitCompleted, &pb_list, &valid_index); - * @endcode - * - * @remarks None + * @param[out] pb_list The available SIM phonebook list; this value is valid in the phonebook init complete case * + * @return The return type (int)\n + * Integer '0' ( same with #TAPI_API_SUCCESS ) - indicates that the operation is completed successfully\n + * Negative integer - It provides an error code (Refer #TapiResult_t). */ -/*================================================================================================*/ int tel_get_sim_pb_init_info(TapiHandle *handle, int *init_completed, TelSimPbList_t *pb_list); - /** - * @brief This API is used to get number of used records and total records in specific SIM phonebook type. - * Access to this API is limited to in-house application and we recommend you use phonebook-engine APIs. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @brief Gets the number of used records and total records of a specific SIM phonebook type. * - * @par Important Notes: - * - We recommend to use phonebook-engine APIs for handling phonebook(including SIM phonebook). - * If user uses SIM phonebook related APIs directly, it can break device phonebook consistency because all phonebook information managed in phonebook-engine. + * @details Access to this API is limited to in-house applications and phonebook-engine APIs are recommended instead. \n + * This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * - * @warning - * - None. + * Sync (or) Async: This is an Asynchronous API. \n * + * Prospective Clients: External Apps. * - * @param [in] handle - * - handle from tel_init(). + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @param[in] pb_type - * -Different storage types to be selected in SIM. #TelSimPbType_t + * @remarks You must use phonebook-engine APIs to handle a phonebook(including SIM phonebook). + * If the user uses SIM phonebook related APIs directly, it can break device phonebook consistency because of all the phonebook information managed in the phonebook-engine. * - * @param [in] callback - * - To register callback function for result. + * @param[in] handle The handle from tel_init() * - * @param [in] user_data - * - user_data for user specification. + * @param[in] pb_type The different storage types to be selected in the SIM; #TelSimPbType_t * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SIM_PB_STORAGE_COUNT_CNF and the event data is #TelSimPbStorageInfo_t. - * Asynchronous return status is indicated by #TelSimPbAccessResult_t. + * @param[in] callback To register a callback function for result * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events + * @param[in] user_data The user data for user specification * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * #include - * int err_code = 0; - * int request_id = 0; - * TelSimPbType_t storage_type = 0x00; - * storage_type = TAPI_SIM_PB_3GSIM; // usim phonebook - * err_code = tel_get_sim_pb_count(storage_type, &request_id); - * @endcode - * - * @remarks None + * @return The return type (int)\n + * Integer '0' ( same with #TAPI_API_SUCCESS ) - indicates that the operation is completed successfully\n + * Negative integer - It provides an error code (Refer #TapiResult_t). * + * @pre Initialize the Dbus connection with #tel_init. */ -/*================================================================================================*/ int tel_get_sim_pb_count(TapiHandle *handle, TelSimPbType_t pb_type, tapi_response_cb callback, void *user_data); - /** - * @brief This API is used to get max text length and max number length supported by SIM phone book elementary file. - * Access to this API is limited to in-house application and we recommend you use phonebook-engine APIs. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * @brief Gets the max text length and max number length supported by the SIM phone book elementary file. * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @details Access to this API is limited to in-house applications and phonebook-engine APIs are recommended instead. \n + * This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is being delivered in the corresponding event asynchronously. * - * @par Important Notes: - * - The max number length includes the storage space provided by the corresponding EXT file for a given Dialling Number file. - * - We recommend to use phonebook-engine APIs for handling phonebook(including SIM phonebook). - * If user uses SIM phonebook related APIs directly, it can break device phonebook consistency because all phonebook information managed in phonebook-engine. + * Sync (or) Async: This is an Asynchronous API. \n * - * @warning - * - None. + * Prospective Clients: External Apps. * - * @param [in] handle - * - handle from tel_init(). + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @param[in] pb_type - * -Different storage types to be selected in SIM. #TelSimPbType_t + * @remarks The max number length includes the storage space provided by the corresponding EXT file for a given Dialling Number file.\n + * You must use phonebook-engine APIs to handle a phonebook(including SIM phonebook). + * If a user uses SIM phonebook related APIs directly, it can break device phonebook consistency because of all the phonebook information managed in the phonebook-engine. * - * @param [in] callback - * - To register callback function for result. + * @param[in] handle The handle from tel_init() * - * @param [in] user_data - * - user_data for user specification. + * @param[in] pb_type The different storage types to be selected in the SIM; #TelSimPbType_t * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SIM_PB_ENTRY_INFO_CNF and the event data is #TelSimPbEntryInfo_t. - * Asynchronous return status is indicated by #TelSimPbAccessResult_t. + * @param[in] callback To register a callback function for result * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events + * @param[in] user_data The user data for user specification * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * #include - * int err_code = 0; - * int request_id = 0; - * TelSimPbType_t storage_type = 0x00; - * storage_type = TAPI_SIM_PB_3GSIM; // usim phonebook - * err_code = tel_get_sim_pb_meta_info(storage_type, &request_id); - * @endcode - * - * @remarks None + * @return The return type (int)\n + * Integer '0' ( same with #TAPI_API_SUCCESS ) - indicates that the operation is completed successfully \n + * Negative integer : It provides an error code (Refer #TapiResult_t). * + * @pre Initialize the Dbus connection with #tel_init. */ -/*================================================================================================*/ int tel_get_sim_pb_meta_info(TapiHandle *handle, TelSimPbType_t pb_type, tapi_response_cb callback, void *user_data); - /** - * @brief This API is used to get SIM 3G phonebook supported EFs like ANR, SNE, GRP, EMAIL etc and corresponding EFs max text length, number length and size. - * Access to this API is limited to in-house application and we recommend you use phonebook-engine APIs. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * @brief Gets SIM 3G phonebook supported EFs like ANR, SNE, GRP, EMAIL and the corresponding EFs max text length, number length, and size. * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @details Access to this API is limited to in-house applications and phonebook-engine APIs are recommended instead. \n + * This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However, it just means that the API request has been transferred to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * - * @par Important Notes: - * - We recommend to use phonebook-engine APIs for handling phonebook(including SIM phonebook). - * If user uses SIM phonebook related APIs directly, it can break device phonebook consistency because all phonebook information managed in phonebook-engine. + * Sync (or) Async: This is an Asynchronous API. \n * - * @warning - * - None. + * Prospective Clients: External Apps. * - * @param [in] handle - * - handle from tel_init(). + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @param [in] callback - * - To register callback function for result. + * @remarks You must use phonebook-engine APIs to handle a phonebook (including SIM phonebook). + * If a user uses SIM phonebook related APIs directly, it can break device phonebook consistency because of all the phonebook information managed in the phonebook-engine. * - * @param [in] user_data - * - user_data for user specification. + * @param[in] handle The handle from tel_init() * - * @par Async Response Message: - * - The event associated is TAPI_SIM_EVENT_PB_3G_CAPABILITY_INFO_CNF and the event data is #TelSimPbCapabilityInfo_t. - * Asynchronous return status is indicated by #TelSimPbAccessResult_t. + * @param[in] callback To register a callback function for result * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events + * @param[in] user_data The user data for user specification * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * #include - * int err_code = 0; - * int request_id = 0; - * err_code = tel_get_sim_pb_3g_meta_info(&request_id); // you can find result by receiving asynch event response - * @endcode - * - * @remarks None + * @return The return type (int)\n + * Integer '0' ( same with #TAPI_API_SUCCESS ) - indicates that the operation is completed successfully\n + * Negative integer : It provides an error code (Refer #TapiResult_t). * + * @pre Initialize Dbus connection with #tel_init\n */ -/*================================================================================================*/ int tel_get_sim_pb_usim_meta_info(TapiHandle *handle, tapi_response_cb callback, void *user_data); - /** - * @brief This API is used to read SIM phone book entry information from given storage type. - * Access to this API is limited to in-house application and we recommend you use phonebook-engine APIs. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * @brief Reads SIM phone book entry information from the given storage type and index. * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @details Access to this API is limited to in-house applications and phonebook-engine APIs are recommended instead. \n + * This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is being delivered in the corresponding event asynchronously. * - * @par Important Notes: - * - The index ranges from 1 through to a maximum of 254 for a Linear fixed file and 255 for a cyclic file. - * - We recommend to use phonebook-engine APIs for handling phonebook(including SIM phonebook). - * If user uses SIM phonebook related APIs directly, it can break device phonebook consistency because all phonebook information managed in phonebook-engine. + * Sync (or) Async: This is an Asynchronous API. \n * - * @warning - * - None. + * Prospective Clients: External Apps. * - * @param [in] handle - * - handle from tel_init(). + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @param[in] pb_type - * -Different storage types to be selected in SIM. #TelSimPbType_t + * @remarks The index ranges from 1 to a maximum of 254 for a Linear fixed file and 255 for a cyclic file.\n + * You must use phonebook-engine APIs to handle a phonebook (including SIM phonebook). + * If a user uses SIM phonebook related APIs directly, it can break device phonebook consistency because of all the phonebook information managed in the phonebook-engine. * - * @param[in] index - * -Index for accessing the SIM data. + * @param[in] handle The handle from tel_init() * - * @param [in] callback - * - To register callback function for result. + * @param[in] pb_type The different storage types to be selected in the SIM; #TelSimPbType_t * - * @param [in] user_data - * - user_data for user specification. + * @param[in] pb_index The index for accessing the SIM data * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SIM_PB_ACCESS_READ_CNF and the event data is #TelSimPbRecordData_t. - * Asynchronous return status is indicated by #TelSimPbAccessResult_t. + * @param[in] callback To register a callback function for result * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events + * @param[in] user_data The user data for user specification * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * #include - * int err_code = 0; - * int request_id = 0; - * unsigned short index = 1; - * TelSimPbType_t storage_type = 0x00; - * storage_type = TAPI_SIM_PB_3GSIM; // usim phonebook - * err_code = tel_read_sim_pb_record(storage_type, index, &request_id); - * @endcode - * - * @remarks None + * @return The return type (int)\n + * Integer '0' ( same with #TAPI_API_SUCCESS ) - indicates that the operation is completed successfully\n + * Negative integer : It provides an error code (Refer #TapiResult_t) * + * @pre Initialize the Dbus connection with #tel_init. */ -/*================================================================================================*/ -int tel_read_sim_pb_record(TapiHandle *handle, TelSimPbType_t pb_type, unsigned short index, tapi_response_cb callback, void *user_data); - +int tel_read_sim_pb_record(TapiHandle *handle, TelSimPbType_t pb_type, unsigned short pb_index, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to add or edit SIM phone book record entry information. - * Access to this API is limited to in-house application and we recommend you use phonebook-engine APIs. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * @brief Adds or edits SIM phone book record entry information. * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @details Access to this API is limited to in-house applications and phonebook-engine APIs are recommended instead. \n + * This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. \n * - * @par Important Notes: - * - We recommend to use phonebook-engine APIs for handling phonebook(including SIM phonebook). - * If user uses SIM phonebook related APIs directly, it can break device phonebook consistency because all phonebook information managed in phonebook-engine. + * Sync (or) Async: This is an Asynchronous API. \n * - * @warning - * - None. + * Prospective Clients: External Apps. \n * + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @param [in] handle - * - handle from tel_init(). + * @remarks You must use phonebook-engine APIs to handle a phonebook (including SIM phonebook). + * If a user uses SIM phonebook related APIs directly, it can break device phonebook consistency because of all the phonebook information managed in the phonebook-engine. * - * @param[in] req_data - * -phonebook data which will be updated or added. #TelSimPbRecordData_t + * @param[in] handle The handle from tel_init() * - * @param [in] callback - * - To register callback function for result. + * @param[in] req_data The phonebook data to be updated or added; #TelSimPbRecord_t * - * @param [in] user_data - * - user_data for user specification. + * @param[in] callback To register a callback function for result * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SIM_PB_UPDATE_CNF and the event data is #TelSimPbUpdateResp_t. - * Asynchronous return status is indicated by #TelSimPbAccessResult_t. + * @param[in] user_data The user data for user specification * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * #include - * int err_code = 0; - * int request_id = 0; - * unsigned short index = 1; - * TelSimPbRecordData_t data; - * data.StorageFileType = TAPI_SIM_PB_3GSIM; // usim phonebook - * data.Index = 1; // index which will be updated - * data.NextIndex = 0; - * //data.ContactInfo will be added - * err_code = tel_update_sim_pb_record(&data, &request_id); - * @endcode - * - * @remarks None + * @return The return type (int)\n + * Integer '0' ( same with #TAPI_API_SUCCESS ) - indicates that the operation is completed successfully\n + * Negative integer : It provides an error code (Refer #TapiResult_t). * + * @pre Initialize the Dbus connection with #tel_init. */ -/*================================================================================================*/ int tel_update_sim_pb_record(TapiHandle *handle, const TelSimPbRecord_t *req_data, tapi_response_cb callback, void *user_data); - /** - * @brief This API is used to delete a SIM phonebook record. - * Access to this API is limited to in-house application and we recommend you use phonebook-engine APIs. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - The index ranges from 1 through to a maximum of 254 for a Linear fixed file and 255 for a cyclic file. - * - We recommend to use phonebook-engine APIs for handling phonebook(including SIM phonebook). - * If user uses SIM phonebook related APIs directly, it can break device phonebook consistency because all phonebook information managed in phonebook-engine. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init(). - * - * @param[in] pb_type - * -Different storage types to be selected in SIM. #TelSimPbType_t + * @brief Deletes a SIM phonebook record. * - * @param[in] index - * -Index of the record to be deleted. + * @details Access to this API is limited to in-house applications and phonebook-engine APIs are recommended instead. \n + * This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * - * @param [in] callback - * - To register callback function for result. + * Sync (or) Async: This is an Asynchronous API. \n * - * @param [in] user_data - * - user_data for user specification. + * Prospective Clients: External Apps. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SIM_PB_DELETE_CNF and the event data is #TelSimPbUpdateResp_t. - * Asynchronous return status is indicated by #TelSimPbAccessResult_t. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events + * @remarks The index ranges from 1 to a maximum of 254 for a Linear fixed file and 255 for a cyclic file.\n + * You must use phonebook-engine APIs to handle a phonebook(including SIM phonebook). + * If the user uses SIM phonebook related APIs directly, it can break device phonebook consistency because of all the phonebook information managed in the phonebook-engine. * - * @post - * - None. + * @param[in] handle The handle from tel_init() * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * @param[in] pb_type The different storage types to be selected in the SIM; #TelSimPbType_t * - * @par Prospective Clients: - * External Apps. + * @param[in] pb_index The index of the record to be deleted * - * @see None + * @param[in] callback To register a callback function for result * - * @code - * #include - * int err_code = 0; - * int request_id = 0; - * unsigned short index = 1; - * TelSimPbType_t storage_type = 0x00; - * storage_type = TAPI_SIM_PB_3GSIM; // usim phonebook - * err_code = tel_delete_sim_pb_record(storage_type, index, &request_id); - * @endcode + * @param[in] user_data The user data for user specification * - * @remarks None + * @return The return type (int)\n + * Integer '0' ( same with #TAPI_API_SUCCESS ) - indicates that the operation is completed successfully\n + * Negative integer : (It provides an error code (Refer #TapiResult_t). * + * @pre Initialize the Dbus connection with #tel_init. */ -/*================================================================================================*/ -int tel_delete_sim_pb_record(TapiHandle *handle, TelSimPbType_t pb_type, unsigned short index, tapi_response_cb callback, void *user_data); +int tel_delete_sim_pb_record(TapiHandle *handle, TelSimPbType_t pb_type, unsigned short pb_index, tapi_response_cb callback, void *user_data); #ifdef __cplusplus } diff --git a/include/ITapiSap.h b/include/ITapiSap.h index c23bd37..a047bb7 100644 --- a/include/ITapiSap.h +++ b/include/ITapiSap.h @@ -1,7 +1,7 @@ /* * libslp-tapi * - * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Ja-young Gu * @@ -19,25 +19,20 @@ */ /** -* @open -* @ingroup TelephonyAPI -* @addtogroup SAP_TAPI SAP -* @{ -* -* @file ITapiSap.h - - @brief This file serves as a "C" header file defines functions for Tapi SAP Services.\n - It contains a sample set of function prototypes that would be required by applications. + * @file ITapiSap.h + */ -*/ +/** + * @internal + * @addtogroup CAPI_TELEPHONY_SERVICE_SAP + * @{ + */ #ifndef _ITAPI_SAP_H_ #define _ITAPI_SAP_H_ #include -#include #include -#include #ifdef __cplusplus extern "C" @@ -45,381 +40,175 @@ extern "C" #endif /** - * @brief This API is used to request to connect sap. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param[in] max_msg_size - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. - * - * @par - * - * @pre + * @brief Requests to connect SAP. * - * @post + * @details Sync (or) Async: This is an Asynchronous API.\n * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * Prospective Clients: External Apps. * - * @par Prospective Clients: - * External Apps. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @see None - * - * @code - * - * @endcode - * - * @remarks None + * @param[in] handle The handle from tel_init() + * @param[in] max_msg_size The maximum message size + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) \n + * Integer '0' ( same with #TAPI_API_SUCCESS ): indicates that the operation has completed successfully \n + * Negative integer : It provides an error code (Refer #TapiResult_t). */ -/*================================================================================================*/ int tel_req_sap_connect(TapiHandle *handle, int max_msg_size, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to request sap to disconnect sap. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. - * - * @par - * - * @pre - * - * @post + * @brief Requests to disconnect SAP. * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * @details Sync (or) Async: This is an Asynchronous API.\n * - * @par Prospective Clients: - * External Apps. + * Prospective Clients: External Apps. * - * @see None + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @code - * - * @endcode - * - * @remarks None + * @param[in] handle The handle from tel_init() + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) \n + * Integer '0' ( same with #TAPI_API_SUCCESS ): indicates that the operation has completed successfully \n + * Negative integer : It provides an error code (Refer #TapiResult_t). */ -/*================================================================================================*/ int tel_req_sap_disconnect(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to request sap connection status. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. - * - * @par - * - * @pre - * - * @post - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * @brief Requests for the SAP connection status. * - * @par Prospective Clients: - * External Apps. + * @details Sync (or) Async: This is an Asynchronous API.\n * - * @see None + * Prospective Clients: External Apps. * - * @code + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @endcode - * - * @remarks None + * @param[in] handle The handle from tel_init() + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) \n + * Integer '0' ( same with #TAPI_API_SUCCESS ): indicates that the operation has completed successfully \n + * Negative integer : It provides an error code (Refer #TapiResult_t). */ -/*================================================================================================*/ int tel_req_sap_connection_status(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to request to get atr. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. - * - * @par - * - * @pre - * - * @post - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. + * @brief Requests to get atr. * - * @see None + * @details Sync (or) Async: This is an Asynchronous API.\n * - * @code + * Prospective Clients: External Apps. * - * @endcode + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @remarks None + * @param[in] handle The handle from tel_init() + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) \n + * Integer '0' ( same with #TAPI_API_SUCCESS ): indicates that the operation has completed successfully \n + * Negative integer : It provides an error code (Refer #TapiResult_t). */ -/*================================================================================================*/ int tel_req_sap_transfer_atr(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to request to transfer apdu. + * @brief Requests to transfer APDU. * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @details Sync (or) Async: This is an Asynchronous API.\n * - * @par Important Notes: - * - None + * Prospective Clients: External Apps. * - * @warning - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] apdu_data - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. - * - * @par - * - * @pre - * - * @post - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * - * @endcode - * - * @remarks None + * @param[in] handle The handle from tel_init() + * @param[in] apdu_data The APDU data + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) \n + * Integer '0' ( same with #TAPI_API_SUCCESS ): indicates that the operation has completed successfully \n + * Negative integer : It provides an error code (Refer #TapiResult_t). */ -/*================================================================================================*/ int tel_req_sap_transfer_apdu(TapiHandle *handle, TelSapApduData_t *apdu_data, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to request to transport protocol. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] protocol - * - SAP transport protocol type - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. - * - * @par - * - * @pre - * - * @post - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. + * @brief Requests to transport protocol. * - * @see None + * @details Sync (or) Async: This is an Asynchronous API.\n * - * @code + * Prospective Clients: External Apps. * - * @endcode + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @remarks None + * @param[in] handle The handle from tel_init() + * @param[in] protocol The SAP transport protocol type + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int)\n + * Integer '0' ( same with #TAPI_API_SUCCESS ): indicates that the operation has completed successfully\n + * Negative integer : It provides an error code (Refer #TapiResult_t). */ -/*================================================================================================*/ int tel_req_sap_transport_protocol(TapiHandle *handle, TelSimSapProtocol_t protocol, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to request to control power_mode. + * @brief Requests to control power mode. * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @details Sync (or) Async: This is an Asynchronous API.\n * - * @par Important Notes: - * - None + * Prospective Clients: External Apps. * - * @warning - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] power_mode - * - enum data for controlling power mode of client - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. - * - * @par - * - * @pre - * - * @post - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * - * @endcode - * - * @remarks None + * @param[in] handle The handle from tel_init() + * @param[in] power_mode The data to control the power mode of client + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) \n + * Integer '0' ( same with TAPI_API_SUCCESS ): indicates that the operation has completed successfully \n + * Negative integer : It provides an error code (Refer #TapiResult_t). */ -/*================================================================================================*/ int tel_req_sap_power_operation(TapiHandle *handle, TelSimSapPowerMode_t power_mode, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to request to get card_reader_status. + * @brief Requests to get the card reader status. * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @details Sync (or) Async: This is an Asynchronous API.\n * - * @par Important Notes: - * - None + * Prospective Clients: External Apps. * - * @warning - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. - * - * @par - * - * @pre - * - * @post - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * - * @endcode - * - * @remarks None + * @param[in] handle The handle from tel_init() + * @param[in] callback To register a callback function for result + * @param[in] user_data The user data for user specification * + * @return The return type (int) \n + * Integer '0' ( same with #TAPI_API_SUCCESS ): indicates that the operation has completed successfully \n + * Negative integer : It provides an error code (Refer #TapiResult_t). */ -/*================================================================================================*/ int tel_req_sap_cardreader_status(TapiHandle *handle, tapi_response_cb callback, void *user_data); #ifdef __cplusplus @@ -429,5 +218,5 @@ int tel_req_sap_cardreader_status(TapiHandle *handle, tapi_response_cb callback, #endif /* _ITAPI_SAP_H_ */ /** -* @} -*/ + * @} + */ diff --git a/include/ITapiSat.h b/include/ITapiSat.h index 2c03a30..b6dc22a 100644 --- a/include/ITapiSat.h +++ b/include/ITapiSat.h @@ -1,7 +1,7 @@ /* * libslp-tapi * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Ja-young Gu * @@ -19,17 +19,13 @@ */ /** -* @open -* @ingroup TelephonyAPI -* @addtogroup SAT_TAPI SAT -* @{ -* -* @file ITapiSat.h - - @brief This file serves as a "C" header file defines functions for Tapi Sat Services.\n - It contains a sample set of function prototypes that would be required by applications. + * @file ITapiSat.h + */ - Note: Telephony SAT functionality is message relaying from USIM application to SAT related applications. +/** + * @internal + * @addtogroup CAPI_TELEPHONY_SERVICE_SAT + * @{ */ #ifndef _ITAPI_SAT_H_ @@ -37,369 +33,226 @@ #include #include -#include #ifdef __cplusplus extern "C" { #endif - /** +/** * @brief Sends the user choice of the main menu options to the USIM. * - * @par Notes: - * A set of possible menu options is supplied by the USIM - * using the proactive command SET UP MENU. Telephony server receives the command - * and publishes this information.SAT UI application should list the menu when it initially launched. - * If the user subsequently chooses an option, then SAT UI application replies - * the command with user's choice using this API. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is delivered with the async response as below. - * - * @par Warning: - * Do not use this function. This function is dedicated to the SAT UI embedded application only. + * @details Notes: + * A set of possible menu options are supplied by the USIM + * using the proactive command SET UP MENU. The telephony server receives the command + * and publishes this information. The SAT UI application should list the menu when it is initially launched. + * If the user subsequently chooses an option, then the SAT UI application replies to + * the command with the user's choice using this API. \n * - * @par Sync (or) Async: - * This is an Asynchronous API. + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered with the async response as below. \n * - * @param [in] handle - * - handle from tel_init(). + * Sync (or) Async: This is an Asynchronous API. \n * - * @param [in] pMenuSelect - * - #TelSatMenuSelectionReqInfo_t contains information like which SAT menu item has been selected or whether Help is required. + * Prospective Clients: SAT-UI. * - * @param [in] callback - * - To register callback function for result. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @param [in] user_data - * - user_data for user specification. + * @remarks You must not use this function. This function is dedicated to the SAT UI embedded application only. * - * @par Async Response Message: - * - The event associated is TAPI_EVENT_SAT_MENU_SELECTION_CNF and the Asynchronous return status is indicated by #TelSatEnvelopeResp_t. + * @param[in] handle The handle from tel_init() * - * @pre - * - This function supposed to be called after getting TAPI_EVENT_SAT_SETUP_MENU_IND event from telephony server\n + * @param[in] pMenuSelect #TelSatMenuSelectionReqInfo_t contains information like which SAT menu item has been selected or whether help is required * - * @post - * - None + * @param[in] callback To register a callback function for result * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) + * @param[in] user_data The user data for user specification * - * @par Prospective Clients: - * SAT-UI - * - * @see tel_get_sat_main_menu_info - * - * @code - * #include - * int ret_status =0; - * int pRequestID=0; - * TelSatMenuSelectionReqInfo_t selected_menu; - * selected_menu.itemIdentifier = '1'; //selected menu num - * selected_menu.bIsHelpRequested = 0; - * ret_status = tel_select_sat_menu(&selected_menu, &pRequestId); - * @endcode - * - * @remarks None + * @return The return type (int)\n + * #TAPI_API_SUCCESS - indicates that the operation has completed successfully,\n + * else it will return failure and an error code (Refer #TapiResult_t). * + * @pre This function is supposed to be called after getting the #TAPI_EVENT_SAT_SETUP_MENU_IND event from the telephony server. * + * @see tel_get_sat_main_menu_info() */ -/*================================================================================================*/ int tel_select_sat_menu(TapiHandle *handle, const TelSatMenuSelectionReqInfo_t* pMenuSelect, tapi_response_cb callback, void *user_data); - /** - * @brief Download SAT events to USIM - * - * @par Notes: - * A set of events for the terminal to monitor can be supplied by the USIM using the proactive command SET UP EVENT - * LIST. If the USIM has sent this command, and an event which is part of the list subsequently occurs, the terminal - * informs the USIM using this function, relevant for that event. - * If USIM commands to monitor a browser termination event, the SAT-UI application has to call this function. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is delivered with the async response as below. - * - * @par Warning: - * Do not use this function. This function is dedicated to the SAT UI embedded application only. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] pEventData - * - #TelSatEventDownloadReqInfo_t contains the necessary parameters like event type and information associated with it. +/** + * @brief Downloads SAT events to the USIM. * - * @param [in] callback - * - To register callback function for result. + * @details Notes: + * A set of events for the terminal to monitor can be supplied by the USIM using the proactive command SET UP EVENT + * LIST. If the USIM has sent this command, and an event which is part of the list subsequently occurs, the terminal + * informs the USIM using this function, relevant for that event. + * If the USIM commands to monitor a browser termination event, the SAT-UI application has to call this function. \n * - * @param [in] user_data - * - user_data for user specification. + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered with the async response as below. \n * - * @par Async Response Message: - * - The event associated is TAPI_EVENT_SAT_EVENT_DOWNLOAD_CNF and the Asynchronous return status is indicated by #TelSatEnvelopeResp_t. + * Sync (or) Async: This is an Asynchronous API. \n * - * @pre - * - A SET UP EVENT LIST proactive command supplies a set of event to monitor. + * Prospective Clients: SAT-UI \n * - * @post - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) + * @remarks You must not use this function. This function is dedicated to the SAT UI embedded application only. * - * @par Prospective Clients: - * SAT-UI + * @param[in] handle The handle from tel_init() * - * @see None + * @param[in] pEventData #TelSatEventDownloadReqInfo_t contains the necessary parameters like event types and information associated with it * - * @code - * #include - * int ret_status =0; - * int pRequestID=0; - * TelSatEventDownloadReqInfo_t pEventData; - * pEventData.eventDownloadType = TAPI_EVENT_SAT_DW_TYPE_IDLE_SCREEN_AVAILABLE; - * pEventData.u.bIdleScreenAvailable = 1; //event occur or not - * ret_status = tel_download_sat_event(&pEventData, &pRequestId); - * @endcode + * @param[in] callback To register a callback function for result * - * @remarks None + * @param[in] user_data The user data for user specification * + * @return The return type (int) \n + * #TAPI_API_SUCCESS - indicates that the operation is completed successfully, \n + * else it will return failure and an error code (Refer #TapiResult_t). * + * @pre A SET UP EVENT LIST proactive command supplies a set of events to monitor. */ -/*================================================================================================*/ int tel_download_sat_event(TapiHandle *handle, const TelSatEventDownloadReqInfo_t* pEventData, tapi_response_cb callback, void *user_data); - /** - * @brief Send the UI display status of the alpha identifier of a specific proactive command to Telephony Server. - * - * When SAT-UI receives a proactive command, SAT-UI should draw a UI for relevant command. - * As it completes , SAT-UI inform USIM with this function. Afterwards, USIM is getting ready to send another commands. - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * - * @par Warning: - * Do not use this function. This function is dedicated to the SAT UI embedded application only. - * - * @par Sync (or) Async: - * This is a Synchronous API. - * - * @param [in] handle - * - handle from tel_init(). +/** + * @brief Sends the UI display status of the alpha identifier of a specific proactive command to the Telephony Server. * - * @param [in] commandId - * - Specific proactive command id from the Application + * @details When SAT-UI receives a proactive command, SAT-UI should draw a UI for the relevant command. + * As it completes, SAT-UI informs the USIM by calling this function. Afterwards, the USIM is getting ready to send another command. \n * - * @param [in] status - * - #TelSatUiDisplayStatusType_t contain display status(SUCCESS/FAIL). + * This function makes a Dbus method call to the Telephony Server and gets an immediate feedback. \n * - * @par Async Response Message: - * - None. + * Sync (or) Async: This is a Synchronous API. \n * - * @pre - * - Display request for the alpha identifier of a Proactive Command should be sent by Telephony Server. + * Prospective Clients: SAT-UI \n * - * @post - * - If the display status is SUCCESS Telephony Server sends a request to application for Proactive Command Execution. - * - If the display status is FAIL Telephony Server sends Terminal Response for the Proactive Command. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) + * @remarks You must not use this function. This function is dedicated to the SAT UI embedded application only. * - * @par Prospective Clients: - * SAT-UI + * @param[in] handle The handle from tel_init() * - * @see None + * @param[in] commandId The proactive command ID from the application * - * @code - * #include - * int commandId = 1; //this value should be server given value - * ret_status = 0; - * ret_status = tel_send_ui_display_status(1, TAPI_SAT_DISPLAY_SUCCESS); - * @endcode + * @param[in] status #TelSatUiDisplayStatusType_t contains the display status(SUCCESS/FAIL) * - * @remarks None + * @return The return type (int)\n + * #TAPI_API_SUCCESS - indicates that the operation has completed successfully,\n + * else it will return failure and an error code (Refer #TapiResult_t). * + * @pre The display request for the alpha identifier of a Proactive Command should be sent by the Telephony Server. * + * @post If the display status is SUCCESS, the Telephony Server sends a request to the application for Proactive Command Execution. + * If the display status is FAIL, the Telephony Server sends a Terminal Response for the Proactive Command. */ -/*================================================================================================*/ int tel_send_sat_ui_display_status(TapiHandle *handle, int commandId, TelSatUiDisplayStatusType_t status); - /** - * @brief This function sends the UI User confirmation data for a specific Proactive Command to the Telephony Server. - * - * In case that the proactive commands need user response, SAT-UI can send it using this function. - * The response can be 'OK', 'Cancel', 'Move Back' and 'End Session'. Upon this response, USIM can send - * a proactive command subsequently to indicate next UI action. - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * - * @par Warning: - * Do not use this function. This function is dedicated to the SAT UI embedded application only. - * - * @par Sync (or) Async: - * This is a synchronous API. - * - * @param [in] handle - * - handle from tel_init(). +/** + * @brief Sends UI User confirmation data for a specific Proactive Command to the Telephony Server. * - *@param [in] pUserConfirmData - * -#TelSatUiUserConfirmInfo_t contains Specific user confirmation data. + * @details In case the proactive commands need user response, SAT-UI can send it using this function. + * The response can be 'OK', 'Cancel', 'Move Back', and 'End Session'. Upon this response, the USIM can send + * a proactive command subsequently to indicate the next UI action. \n * - * @par Async Response Message: - * - None + * This function makes a Dbus method call to the Telephony Server and gets an immediate feedback. \n * - * @pre - * - User Confirmation request for a specific Proactive Command should be sent to application by Telephony Server. + * Sync (or) Async: This is a synchronous API. \n * - * @post - * - If the User Confirmation is positive Telephony Server sends a request to application for Proactive Command Execution. - * - If the User Confirmation is negative Telephony Server sends Terminal Response for the Proactive Command. + * Prospective Clients: SAT-UI. \n * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @par Prospective Clients: - * SAT-UI + * @remarks You must not use this function. This function is dedicated to the SAT UI embedded application only. * - * @see None + * @param[in] handle The handle from tel_init() * - * @code - * #include - * int ret_status =0; - * TelSatUiUserConfirmInfo_t cfm_data; - * cfm_data.commandId = '1'; //this value should be server given value - * cfm_data.commandType = TAPI_SAT_CMD_TYPE_SETUP_CALL; - * cfm_data.keyType = TAPI_SAT_USER_CONFIRM_YES; - * ret_status = tel_send_sat_ui_user_confirm(&cfm_data); - * @endcode + * @param[in] pUserConfirmData #TelSatUiUserConfirmInfo_t contains specific user confirmation data * - * @remarks None + * @return The return type (int)\n + * #TAPI_API_SUCCESS - indicates that the operation has completed successfully,\n + * else it will return failure and an error code (Refer #TapiResult_t). * + * @pre The User Confirmation request for a specific Proactive Command should be sent to the application by the Telephony Server. * + * @post If the User Confirmation is positive, the Telephony Server sends a request to the application for Proactive Command Execution. + * If the User Confirmation is negative, the Telephony Server sends a Terminal Response for the Proactive Command. */ -/*================================================================================================*/ int tel_send_sat_ui_user_confirm(TapiHandle *handle, TelSatUiUserConfirmInfo_t *pUserConfirmData); - /** - * @brief This function provides SAT(Sim Application toolkit) Main Menu information for SAT-UI. - * - * Once the USIM supplies the SET UP MENU proactivae command, telephony server not only publish - * TAPI_EVENT_SAT_SETUP_MENU_IND event but also caches the menu information. - * The SAT-UI applicatoin can get the menu list using this function. - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * - * @par Warning: - * Do not use this function. This function is dedicated to the SAT UI embedded application only. - * - * @par Sync (or) Async: - * This is a Synchronous API. - * - * @param [in] handle - * - handle from tel_init(). +/** + * @brief Provides SAT(Sim Application toolkit) Main Menu information for SAT-UI. * - * @param [out] pMainMenu - * - #TelSatSetupMenuInfo_t contain all menu related information which are required like menu title, icon, item count, etc. + * @details Once the USIM supplies the SET UP MENU proactive command, the telephony server not only publishes the + * #TAPI_EVENT_SAT_SETUP_MENU_IND event but also caches the menu information. + * The SAT-UI application can get the menu list using this function. \n * - * @par Async Response Message: - * - None + * This function makes a Dbus method call to the Telephony Server and gets an immediate feedback. \n * - * @pre - * - When SAT SIM is inserted. we can get meaningful data. without SAT SIM, Null is returned + * Sync (or) Async: This is a Synchronous API. \n * - * @post - * - None. + * Prospective Clients: SAT-UI. * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @par Prospective Clients: - * SAT-UI + * @remarks You must not use this function. This function is dedicated to the SAT UI embedded application only. * - * @see tel_select_sat_menu + * @param[in] handle The handle from tel_init() * - * @code - * #include - * int ret_status =0; - * TelSatSetupMenuInfo_t menu; //this struct will be pull up with SIM menu info - * ret_status = tel_get_sat_main_menu_info(&menu); - * @endcode + * @param[out] pMainMenu #TelSatSetupMenuInfo_t contains all menu related information which is required such as a menu title, an icon, an item count, and so on * - * @remarks None + * @return The return type (int)\n + * #TAPI_API_SUCCESS - indicates that the operation has completed successfully,\n + * else it will return failure and an error code (Refer #TapiResult_t). * + * @pre When SAT SIM is inserted we can get meaningful data. Without SAT SIM, null is returned. * + * @see tel_select_sat_menu() */ -/*================================================================================================*/ int tel_get_sat_main_menu_info(TapiHandle *handle, TelSatSetupMenuInfo_t *pMainMenu); - /** - * @brief This API provides the Operation result(s) for the Proactive Command execution by the Application(s) to the Telephony Server. - * - * The USIM commands the terminal to do some predefined action, such as sending short message, - * making a voice call, launching an Internet browser and so on. Those actions are defined by 3GPP TS31.111. - * Once a application executes the requested action by USIM, it reports the operation result to USIM using this function. - * - * This function makes Dbus method call to Telephony Sever and gets immediate feedback. - * - * @par Warning: - * Do not use this function. This function is dedicated to the SAT UI embedded application only. - ** - * @par Sync (or) Async: - * This is a Synchronous API. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [out] pAppRetInfo - * - #TelSatAppsRetInfo_t contains execution result of a specific proactive command by application. +/** + * @brief Provides the Operation result(s) for Proactive Command execution by the Application(s) to the Telephony Server. * - * @par Async Response Message: - * - None + * @details The USIM commands the terminal to do some predefined action, such as sending a short message, + * making a voice call, launching an Internet browser, and so on. Those actions are defined by 3GPP TS31.111. + * Once an application executes the requested action by USIM, it reports the operation result to the USIM using this function. \n * - * @pre - * - Proactive Command execution request should be sent by Telephony Server to SAT related applications. + * This function makes a Dbus method call to the Telephony Server and gets an immediate feedback. \n * - * @post - * - None. + * Sync (or) Async: This is a Synchronous API. \n * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Else it will return failure and error code (Refer #TapiResult_t) + * Prospective Clients: Embeded applications which are predefined by 3GPP TS31.111. * - * @par Prospective Clients: - * Embeded applications which are predefined by 3GPP TS31.111 + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @see None + * @remarks You must not use this function. This function is dedicated to the SAT UI embedded application only. * - * @code - * #include - * int ret_status =0; - * TelSatAppsRetInfo_t app_ret; - * app_ret.commandType = TAPI_SAT_CMD_TYPE_SETUP_CALL; - * app_ret.commandId = 1; //this value should be server given value - * app_ret.appsRet.setupCall.resp = TAPI_SAT_R_SUCCESS; - * ret_status = tel_send_sat_app_exec_result(&app_ret); - * @endcode + * @param[in] handle The handle from tel_init() * - * @remarks None + * @param[out] pAppRetInfo #TelSatAppsRetInfo_t contains an execution result of a specific proactive command by the application * + * @return The return type (int)\n + * #TAPI_API_SUCCESS - indicates that the operation has completed successfully,\n + * else it will return failure and an error code (Refer #TapiResult_t). * + * @pre The Proactive Command execution request should be sent by the Telephony Server to SAT related applications. */ -/*================================================================================================*/ int tel_send_sat_app_exec_result(TapiHandle *handle, TelSatAppsRetInfo_t *pAppRetInfo); - #ifdef __cplusplus } #endif diff --git a/include/ITapiSim.h b/include/ITapiSim.h index d419563..0b9ae60 100644 --- a/include/ITapiSim.h +++ b/include/ITapiSim.h @@ -1,7 +1,7 @@ /* * libslp-tapi * - * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Ja-young Gu * @@ -18,26 +18,21 @@ * limitations under the License. */ -/** -* @open -* @ingroup TelephonyAPI -* @addtogroup SIM_TAPI SIM -* @{ -* -* @file ITapiSim.h - - @brief This file serves as a "C" header file defines functions for Tapi SIM Services.\n - It contains a sample set of function prototypes that would be required by applications. - -*/ - #ifndef _ITAPI_SIM_H_ #define _ITAPI_SIM_H_ +/** + * @file ITapiSim.h + */ + +/** + * @internal + * @addtogroup CAPI_TELEPHONY_SERVICE_SIM + * @{ + */ + #include -#include #include -#include #ifdef __cplusplus extern "C" @@ -45,1561 +40,877 @@ extern "C" #endif /** -* @brief This API is used to get SIM Card Initialization status and SIM Card Identification. -* Most of modules which require SIM data should check SIM status before using it definitely. - * -* @par Sync (or) Async: -* This is a Synchronous API. -* -* @par Important Notes: -* - Card Identification value is available in TAPI_SIM_STATUS_SIM_INIT_COMPLETED case only. -* -* @warning -* - None. -* - * @param [in] handle - * - handle from tel_init(). - * -* @param [out] sim_status -* - This parameter returns SIM initialization status from Telephony server boot up time. -* First, You can find sim existance if returned value are not in TAPI_SIM_STATUS_CARD_NOT_PRESENT and TAPI_SIM_STATUS_CARD_REMOVED. -* -* @param [out] card_changed -* - This parameter returns sim card identification value when sim_status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED. -* - card_changed value just present whether current inserted SIM card differs with previous SIM or not. -* -* @par Async Response Message: -* - None -* -* @pre -* - None. -* -* @post -* - None. -* -* @return Return Type (int) -* - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n -* - Negative integer : it provides an error code (Refer #TapiResult_t) -* -* @par Prospective Clients: -* External Apps. -* -* @see None -* -* @code -* #include -* -* int err_code = TAPI_API_SUCCESS; -* TelSimCardStatus_t status = 0x00; -* int b_card_changed = 0; -* -* // GET SIM INIT INFORMATION -* err_code = tel_get_sim_init_info(&status, &b_card_changed); -* -* @endcode -* -* @remarks None -* -*/ -/*================================================================================================*/ -int tel_get_sim_init_info(TapiHandle *handle, TelSimCardStatus_t *sim_status, int *card_changed); - -/** - * @brief This function is a synchronous API which gets the Card Type whether Card is a SIM or a USIM. - * - * @par Sync (or) Async: - * This is a synchronous function. - * - * @par Important Notes: - * - None + * @brief Gets SIM card initialization status and SIM card identification. + * @details Most of the modules which require SIM data should definitely check SIM status before using it.\n * - * @warning - * - None. + * Sync (or) Async: This is a Synchronous API.\n * - * @param [in] handle - * - handle from tel_init(). + * Prospective Clients: External Apps. * - * @param [out] card_type - * This parameter returns the SIM card type information like whether it is GSM SIM card or USIM or it is of unknown type. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * - TAPI_SIM_CARD_TYPE_UNKNOWN - * - TAPI_SIM_CARD_TYPE_GSM - * - TAPI_SIM_CARD_TYPE_USIM + * @remarks Card identification value is available in case of #TAPI_SIM_STATUS_SIM_INIT_COMPLETED only. * - * @par Async Response Message: - * - None + * @param[in] handle The handle from tel_init() * - * @pre - * - None. + * @param[out] sim_status The SIM initialization status from the Telephony server boot up time \n + * First, you can find SIM existence if the returned value is not in #TAPI_SIM_STATUS_CARD_NOT_PRESENT and #TAPI_SIM_STATUS_CARD_REMOVED. * - * @post - * - None. + * @param[out] card_changed The SIM card identification value when @a sim_status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED \n + * The @a card_changed value is present when the current inserted SIM card differs from the previous SIM. * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) + */ +int tel_get_sim_init_info(TapiHandle *handle, TelSimCardStatus_t *sim_status, int *card_changed); + +/** + * @brief Gets the card type (SIM/USIM). + * @details Sync (or) Async: This is a Synchronous API.\n * - * @see None + * Prospective Clients: External Apps. * - * @code - * #include - * int err_code = 0; - * TelSimCardType_t cardInfo; //unkwon, sim(normally gsm), usim(normally umts) - * err_code = tel_get_sim_type(&cardInfo); + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @endcode + * @param[in] handle The handle from tel_init() * - * @remarks None + * @param[out] card_type The SIM card type information such as GSM SIM card, USIM, and other unknown types + * TAPI_SIM_CARD_TYPE_UNKNOWN + * TAPI_SIM_CARD_TYPE_GSM + * TAPI_SIM_CARD_TYPE_USIM * + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation is completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code while actual operations (Refer #TelSimAccessResult_t) */ -/*================================================================================================*/ int tel_get_sim_type(TapiHandle *handle, TelSimCardType_t *card_type); /** - * @brief This function is a synchronous API gets the IMSI information. - * - * @par Sync (or) Async: - * This is a synchronous function. + * @brief Gets IMSI information. + * @details Sync (or) Async: This is a Synchronous API.\n * - * @par Important Notes: - * - IMSI value is the value that security needs. + * Prospective Clients: External Apps. * - * @warning - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @param [in] handle - * - handle from tel_init(). - * - * @param [out] imsi - * This parameter returns the IMSI information. Refer #TelSimImsiInfo_t - * - * @par Async Response Message: - * - None - * - * @pre - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. + * @remarks IMSI value is the value that security requires. * - * @see None + * @param[in] handle The handle from tel_init() * - * @code - * #include - * int err_code = 0; - * TelSimImsiInfo_t sim_imsi_info; // mcc, mnc, msisdn - * err_code = tel_get_sim_imsi(&sim_imsi_info); - * @endcode + * @param[out] imsi The IMSI information \n + * Refer #TelSimImsiInfo_t. * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ int tel_get_sim_imsi(TapiHandle *handle, TelSimImsiInfo_t *imsi); /** - * @brief This function is a synchronous API used to get ECC(SIM) or UECC(USIM) data. - * - * @par Sync (or) Async: - * This is a synchronous function. - * - * @par Important Notes: - * - None - * - * @warning - * - None. + * @brief Gets ECC(SIM) or UECC(USIM) data. + * @details Sync (or) Async: This is a Synchronous API.\n * - * @param [in] handle - * - handle from tel_init(). + * Prospective Clients: External Apps. * - * @param [out] ecc - * - This parameter returns - * the SIM emergency call code information like ecc length, service type etc - * and number of ECC records. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @par Async Response Message: - * - None + * @param[in] handle The handle from tel_init() * - * @pre - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). - * - None. + * @param[out] ecc The SIM emergency call code information like ECC length, service type, and the number of ECC records * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * #include - * int ecc_rec_count = 0; // count in sim card - * int err_code = 0; - * TelSimEccData_t ecc_info = {{{0,}}}; - * err_code = tel_get_sim_ecc(&ecc_info, &ecc_rec_count); - * @endcode - * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ int tel_get_sim_ecc(TapiHandle *handle, TelSimEccList_t *ecc); /** - * @brief This function is a synchronous API gets a Unique identification number of the (U)ICC. - * ICC means Integrated Circuit Card. - * - * @par Sync (or) Async: - * This is a synchronous function. - * - * @par Important Notes: - * - IC Card number value is the value that security needs. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). + * @brief Gets the unique identification number of the (U)ICC. + * @details ICC means Integrated Circuit Card.\n * - * @param [in] callback - * - To register callback function for result. + * Sync (or) Async: This is an Asynchronous API.\n * - * @param [in] user_data - * - user_data for user specification. + * Prospective Clients: External Apps. * - * @par Async Response Message: - * - None + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @pre - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). - * - None. + * @remarks ICC number value is the value that security needs. * - * @post - * - None. + * @param[in] handle The handle from tel_init() * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * @param[in] callback To register a callback function for result * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * #include - * int err_code = 0; - * TelSimIccIdInfo_t icc_data; // this struct consists of number length and number. - * err_code = tel_get_sim_iccid(&icc_data); - * @endcode + * @param[in] user_data The user data for user specification * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation is completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ int tel_get_sim_iccid(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to get the language preference(indication) information. - * - * @par Sync (or) Async: - * This is a synchronous function. - * - * @par Important Notes: - * - None - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). + * @brief Gets language preference(indication) information. + * @details Sync (or) Async: This is an Asynchronous API.\n * - * @param [in] callback - * - To register callback function for result. + * Prospective Clients: External Apps. * - * @param [in] user_data - * - user_data for user specification. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @par Async Response Message: - * - None + * @param[in] handle The handle from tel_init() * - * @pre - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). - * - None. + * @param[in] callback To register a callback function for result * - * @post - * - None. + * @param[in] user_data The user data for user specification * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * #include - * int err_code = 0; - * TelSimLanguageInfo_t li_info = {0,}; - * err_code = tel_get_sim_language(&li_info); // you can find language info with li_info variable - * @endcode - * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ int tel_get_sim_language(TapiHandle *handle, tapi_response_cb callback, void *user_data); - /** - * @brief This API is used to update the language preference information to SIM card. + * @brief Updates language preference information to the SIM card. * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * @details This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is being delivered in the corresponding event asynchronously.\n * - * @par Sync (or) Async: - * This is a Asynchronous function. + * Sync (or) Async: This is an Asynchronous API.\n * - * @par Important Notes: - * - This function update SIM Language information directly and can effect device language setting. Use carefully. + * Prospective Clients: External Apps. * - * @warning - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @param [in] handle - * - handle from tel_init(). + * @remarks This function updates SIM Language information directly and can have an effect on the device language setting. Use carefully. * - * @param [in] language - * This parameter returns the language preference information. + * @param[in] handle The handle from tel_init() * - * @param [in] callback - * - To register callback function for result. + * @param[in] language The language preference information * - * @param [in] user_data - * - user_data for user specification. + * @param[in] callback To register a callback function for result * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SIM_SET_LANGUAGE_CNF. - * Asynchronous return status is indicated by #TelSimAccessResult_t. - * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * #include - * int err_code = 0; - * int request_id = 0; - * TelSimLanguagePreferenceCode_t language = 0x00; //init - * language = TAPI_SIM_LP_ENGLISH; //language value - * err_code = tel_set_sim_language(language, &request_id); - * @endcode - * - * @remarks None + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) */ -/*================================================================================================*/ int tel_set_sim_language(TapiHandle *handle, TelSimLanguagePreferenceCode_t language, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to get the SIM Call forwarding indication related data(EF-CFIS and CPHS case). - * this data is required for Call forwarding related functionality in handset. - * - * @par Sync (or) Async: - * This is a synchronous function. - * - * @par Important Notes: - * - None - * - * @warning - * - None + * @brief Gets SIM call forwarding indication related data(EF-CFIS and CPHS case). + * @details This data is required for Call forwarding related functionality in the handset.\n * - * @param [in] handle - * - handle from tel_init(). + * Sync (or) Async: This is an Asynchronous API.\n * - * @param [in] callback - * - To register callback function for result. + * Prospective Clients: External Apps. * - * @param [in] user_data - * - user_data for user specification. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @par Async Response Message: - * - None + * @param[in] handle The handle from tel_init() * - * @pre - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). - * - None + * @param[in] callback To register a callback function for result * - * @post - * - None + * @param[in] user_data The user data for user specification * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps - * - * @see None - * - * @code - * #include - * TelSimCallForwarding_s cf_data; - * TapiResult_t err_code = 0; - * err_code = tel_get_sim_callforwarding_info(&cf_data); - * if(err_code == TAPI_API_SUCCESS) { - * if(cf_data.b_cphs) { //b_cphs means current SIM is for CPHS or not. - * printf("Current SIM is CPHS"); - * } else { - * printf("Current SIM is not CPHS but 3GPP"); - * } - * } else { - * printf("TAPI API FAIL: Error Code [0x%x]",err_code); - * } - * @endcode - * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ int tel_get_sim_callforwarding_info(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to get the SIM message waiting indication related data(EF-MWIS and CPHS case). - * this data is required for Message waiting related functionality in handset. - * - * @par Sync (or) Async: - * This is a synchronous function. + * @brief Sets SIM call forwarding indication related data(EF-CFIS and CPHS case). + * @details This data is required for Call forwarding related functionality in the handset.\n * - * @par Important Notes: - * - None + * Sync (or) Async: This is an Asynchronous API.\n * - * @warning - * - None + * Prospective Clients: External Apps. * - * @param [in] handle - * - handle from tel_init(). + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @param [in] callback - * - To register callback function for result. + * @param[in] handle The handle from tel_init() * - * @param [in] user_data - * - user_data for user specification. + * @param[in] req_cf The data requesting for call forwarding * - * @par Async Response Message: - * - None + * @param[in] callback To register a callback function for result * - * @pre - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). - * - None + * @param[in] user_data The user data for user specification * - * @post - * - None - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps - * - * @see None - * - * @code - * #include - * TelSimMessageWaiting_s mw_data; - * TapiResult_t err_code = 0; - * err_code = tel_get_sim_messagewaiting_info(&mw_data); - * if(err_code == TAPI_API_SUCCESS) { - * if(mw_data.b_cphs) { //b_cphs means current SIM is for CPHS or not. - * printf("Current SIM is CPHS"); - * } else { - * printf("Current SIM is not CPHS but 3GPP"); - * } - * } else { - * printf("TAPI API FAIL: Error Code [0x%x]",err_code); - * } - * @endcode - * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ -int tel_get_sim_messagewaiting_info(TapiHandle *handle, tapi_response_cb callback, void *user_data); +int tel_set_sim_callforwarding_info(TapiHandle *handle, TelSimCallForwardingReq_t *req_cf, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to get the SIM mailbox related data(EF-MBDN, MBDI and CPHS case). - * this data is required for Mailbox related functionality in handset. + * @brief Gets SIM message waiting indication related data(EF-MWIS and CPHS case). + * @details This data is required for Message waiting related functionality in the handset.\n * - * @par Sync (or) Async: - * This is a synchronous function. + * Sync (or) Async: This is an Asynchronous API.\n * - * @par Important Notes: - * - None + * Prospective Clients: External Apps. * - * @warning - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @param [in] handle - * - handle from tel_init(). + * @param[in] handle The handle from tel_init() * - * @param [in] callback - * - To register callback function for result. + * @param[in] callback To register a callback function for result * - * @param [in] user_data - * - user_data for user specification. + * @param[in] user_data The user data for user specification * - * @par Async Response Message: - * - None - * - * @pre - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * #include - * TelSimMailboxNumbers_s mbox; - * TapiResult_t err_code = 0; - * err_code = tel_get_sim_mailbox_info(&mbox); - * if(err_code == TAPI_API_SUCCESS) { - * if(mbox.b_cphs) { //b_cphs means current SIM is for CPHS or not. - * printf("Current SIM is CPHS"); - * } else { - * printf("Current SIM is not CPHS but 3GPP"); - * } - * } else { - * printf("TAPI API FAIL: Error Code [0x%x]",err_code); - * } - * @endcode - * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ -int tel_get_sim_mailbox_info(TapiHandle *handle, tapi_response_cb callback, void *user_data); +int tel_get_sim_messagewaiting_info(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to get the SIM CPHS specific data. - * this data is required for CPHS related functionality in handset. - * - * @par Sync (or) Async: - * This is an Synchronous API. - * - * @par Important Notes: - * - None + * @brief Sets SIM message waiting indication related data(EF-MWIS and CPHS case). + * @details This data is required for Message waiting related functionality in the handset.\n * - * @warning - * - None + * Sync (or) Async: This is an Asynchronous API.\n * - * @param [in] handle - * - handle from tel_init(). + * Prospective Clients: External Apps. * - * @param [in] callback - * - To register callback function for result. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @param [in] user_data - * - user_data for user specification. + * @param[in] handle The handle from tel_init() * - * @par Async Response Message: - * - None + * @param[in] req_mw The data requesting for message waiting * - * @pre - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). + * @param[in] callback To register a callback function for result * - * @post - * - None + * @param[in] user_data The user data for user specification * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps - * - * @see None - * - * @code - * #include - * TelSimCphsLocalInfo_t cphs_data; - * TapiResult_t err_code = 0; - * err_code = tel_get_sim_cphs_info(&cphs_data); - * if(err_code == TAPI_API_SUCCESS) { - * if(cphs_data.b_used) { //b_used means current SIM is for CPHS or not. - * printf("Current SIM is CPHS"); - * } else { - * printf("Current SIM is not CPHS but 3GPP"); - * } - * } else { - * printf("TAPI API FAIL: Error Code [0x%x]",err_code); - * } - * @endcode - * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ -int tel_get_sim_cphs_info(TapiHandle *handle, tapi_response_cb callback, void *user_data); +int tel_set_sim_messagewaiting_info(TapiHandle *handle, TelSimMessageWaitingReq_t *req_mw, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to get the SIM MSISDN data. Regarding 3GPP specification, Current value is optional. - * - * @par Sync (or) Async: - * This is an Synchronous API. + * @brief Gets SIM mailbox related data(EF-MBDN, MBDI, and CPHS case). + * @details This data is required for Mailbox related functionality in the handset.\n * - * @par Important Notes: - * - None + * Sync (or) Async: This is an Asynchronous API.\n * - * @warning - * - None + * Prospective Clients: External Apps. * - * @param [in] handle - * - handle from tel_init(). + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @param [in] callback - * - To register callback function for result. + * @param[in] handle The handle from tel_init() * - * @param [in] user_data - * - user_data for user specification. + * @param[in] callback To register a callback function for result * - * @par Async Response Message: - * - None + * @param[in] user_data The user data for user specification * - * @pre - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). - * - * @post - * - None - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps - * - * @see None - * - * @code - * #include - * TelSimSubscriberInfo_t msisdn; - * TapiResult_t err_code = 0; - * err_code = tel_get_sim_msisdn(&msisdn); - * if(err_code == TAPI_API_SUCCESS) - * { - * printf(" ============================================"); - * printf("name[%s]",msisdn.name); - * printf("num[%s]",msisdn.num); - * if(msisdn.name == '\0';) //If current SIM does not have, Null string will be returned. - * printf("name is null string"); - * - * if(msisdn.num == '\0';) //If current SIM does not have, Null string will be returned. - * printf("number is null string"); - * } - * else - * { - * printf("TAPI API FAIL: Error Code [0x%x]",err_code); - * } - * - * @endcode - * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ -int tel_get_sim_msisdn(TapiHandle *handle, tapi_response_cb callback, void *user_data); +int tel_get_sim_mailbox_info(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to get the SIM OPLMNWACT(Operator controlled PLMN Selector with Access Technology) data. Regarding 3GPP specification, Current value is optional. - * - * @par Sync (or) Async: - * This is an Synchronous API. - * - * @par Important Notes: - * - None - * - * @warning - * - None - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] callback - * - To register callback function for result. + * @brief Sets SIM mailbox related data(EF-MBDN, MBDI and CPHS case). + * @details This data is required for Mailbox related functionality in the handset.\n * - * @param [in] user_data - * - user_data for user specification. + * Sync (or) Async: This is an Asynchronous API.\n * - * @par Async Response Message: - * - None + * Prospective Clients: External Apps. * - * @pre - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @post - * - None + * @param[in] handle The handle from tel_init() * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * @param[in] req_mb The data requesting for mailbox info * - * @par Prospective Clients: - * External Apps - * - * @see None + * @param[in] callback To register a callback function for result * - * @code + * @param[in] user_data The user data for user specification * - * @endcode - * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ -int tel_get_sim_oplmnwact(TapiHandle *handle, tapi_response_cb callback, void *user_data); +int tel_set_sim_mailbox_info(TapiHandle *handle, TelSimMailBoxNumber_t *req_mb, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to get the SIM SPN data. Regarding 3GPP specification, Current value is optional. + * @brief Gets SIM CPHS specific data. + * @details This data is required for CPHS related functionality in the handset.\n * - * @par Sync (or) Async: - * This is an Synchronous API. + * Sync (or) Async: This is an Asynchronous API.\n * - * @par Important Notes: - * - None + * Prospective Clients: External Apps. * - * @warning - * - None + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @param [in] handle - * - handle from tel_init(). + * @param[in] handle The handle from tel_init() * - * @param [in] callback - * - To register callback function for result. + * @param[in] callback To register a callback function for result * - * @param [in] user_data - * - user_data for user specification. + * @param[in] user_data The user data for user specification * - * @par Async Response Message: - * - None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : it provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : it provides an error code during actual operations (Refer #TelSimAccessResult_t) * - * @pre - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). + */ +int tel_get_sim_cphs_info(TapiHandle *handle, tapi_response_cb callback, void *user_data); + +/** + * @brief Gets the SIM Service Table. + * @details This data is required to know which SIM services are enabled or disabled.\n * - * @post - * - None + * Sync (or) Async: This is an Asynchronous API.\n * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * Prospective Clients: External Apps. * - * @par Prospective Clients: - * External Apps + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @see None + * @param[in] handle The handle from tel_init() * - * @code + * @param[in] callback To register a callback function for result * - * @endcode + * @param[in] user_data The user data for user specification * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ -int tel_get_sim_spn(TapiHandle *handle, tapi_response_cb callback, void *user_data); +int tel_get_sim_service_table(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to get the SIM CPHS NETNAME data. + * @brief Gets SIM MSISDN data. + * @details Regarding 3GPP specification, the current value is optional.\n * - * @par Sync (or) Async: - * This is an Synchronous API. + * Sync (or) Async: This is an Asynchronous API.\n * - * @par Important Notes: - * - None + * Prospective Clients: External Apps. * - * @warning - * - None + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @param [in] handle - * - handle from tel_init(). + * @param[in] handle The handle from tel_init() * - * @param [in] callback - * - To register callback function for result. + * @param[in] callback To register a callback function for result * - * @param [in] user_data - * - user_data for user specification. + * @param[in] user_data The user data for user specification * - * @par Async Response Message: - * - None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * - * @pre - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). + */ +int tel_get_sim_msisdn(TapiHandle *handle, tapi_response_cb callback, void *user_data); + +/** + * @brief Gets SIM OPLMNWACT(Operator controlled PLMN Selector with Access Technology) data. + * @details Regarding 3GPP specification, the current value is optional.\n * - * @post - * - None + * Sync (or) Async: This is an Asynchronous API.\n * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * Prospective Clients: External Apps. * - * @par Prospective Clients: - * External Apps + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @see None + * @param[in] handle The handle from tel_init() * - * @code + * @param[in] callback To register a callback function for result * - * @endcode + * @param[in] user_data The user data for user specification * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code while actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ -int tel_get_sim_cphs_netname(TapiHandle *handle, tapi_response_cb callback, void *user_data); +int tel_get_sim_oplmnwact(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to execute the authentication procedure by using SIM. + * @brief Gets SIM SPN data. + * @details Regarding 3GPP specification, the current value is optional.\n * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * This function supports IMS, 3G and GSM authentication. + * Sync (or) Async: This is an Asynchronous API.\n * - * @par Sync (or) Async: - * This is an Asynchronous API. + * Prospective Clients: External Apps. * - * @par Important Notes: - * -NONE + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @warning - * - None. + * @param[in] handle The handle from tel_init() * - * @param [in] handle - * - handle from tel_init(). + * @param[in] callback To register a callback function for result * - * @param[in] authentication_data - * - This input has the authentication code to be validated by ISIM,3G and GSM application in the SIM card. #TelSimAuthenticationData_t + * @param[in] user_data The user data for user specification * - * @param [in] callback - * - To register callback function for result. + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * - * @param [in] user_data - * - user_data for user specification. - * - * @par Async Response Message: - * -The event associated is TAPI_SIM_EVENT_AUTHENTICATION_CNF and the event data is #TelSimAuthenticationResponse_t. - * Asynchronous return status is indicated by #TelSimAccessResult_t. - * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events + * @pre The user can get valid return value or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). + */ +int tel_get_sim_spn(TapiHandle *handle, tapi_response_cb callback, void *user_data); + +/** + * @brief Gets SIM CPHS NETNAME data. + * @details Sync (or) Async: This is an Asynchronous API.\n * - * @post - * - None. + * Prospective Clients: External Apps. * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @par Prospective Clients: - * External Apps. + * @param[in] handle The handle from tel_init() * - * @see None + * @param[in] callback To register a callback function for result * - * @code - * #include - * int err_code = 0; - * int request_id = 0; - * TelSimAuthenticationData_t pAuthenticationData; - * strcpy((char*)pAuthenticationData.rand_data, "username@operator.com"); //access data - * pAuthenticationData.rand_length= strlen("username@operator.com"); - * strcpy((char*)pAuthenticationData.autn_data, "+1-212-555-12345"); // auth data - * pAuthenticationData.autn_length = strlen("+1-212-555-12345"); - * err_code = tel_req_sim_authentication(&pAuthenticationData,&request_id); - * @endcode + * @param[in] user_data The user data for user specification * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ -int tel_req_sim_authentication(TapiHandle *handle, TelSimAuthenticationData_t *authentication_data, tapi_response_cb callback, void *user_data); - - +int tel_get_sim_cphs_netname(TapiHandle *handle, tapi_response_cb callback, void *user_data); /** - * @brief This function performs PIN1/PIN2/SIM LOCK verification. This function performs PIN verification based on the pin type passed along with pin data. - * PIN1 code : The SIM card has its own password is to check access permissions - * SIM Lock code : Between Device and the SIM card using a SIM password is only available on certain handsets to be used to authorize. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - Based on Pin status (PIN/PUK/SIM LOCK) is blocked, an unsolicited event TAPI_EVENT_SIM_STATUS_IND is published to Applications on Device boot time. - * - if pin status is PUK, you should use #tel_verify_sim_puks instead of this API. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). + * @brief Executes an authentication procedure by using SIM. * - * @param[in] pin_data - * -PIN code, entered by the user. you should make all parameters. + * @details This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously.\n + * This function supports IMS, 3G, and GSM authentication.\n * - * @param [in] callback - * - To register callback function for result. + * Sync (or) Async: This is an Asynchronous API.\n * - * @param [in] user_data - * - user_data for user specification. + * Prospective Clients: External Apps. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SIM_VERIFY_SEC_CNF and the event data is #TelSimSecResult_t. - * Asynchronous return status is indicated by #TelSimPinOperationResult_t. - * If returned status is TAPI_SIM_PIN_OPERATION_SUCCESS, Verification successes. - * If returned status is TAPI_SIM_PIN_INCORRECT_PASSWORD, Verification fails and you can check retry count by using event data #TelSimSecResult_t. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - This API is used when #TelSimCardStatus_t is TAPI_SIM_STATUS_SIM_PIN_REQUIRED or TAPI_SIM_STATUS_SIM_LOCK_REQUIRED on boot time. - * - Currently there`s no proper scenario for PIN2 verification by using this API. + * @param[in] handle The handle from tel_init() * - * @post - * - None. + * @param[in] authentication_data The authentication code to be validated by the ISIM, 3G, and GSM application in the SIM card \n + * Refer #TelSimAuthenticationData_t. * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * @param[in] callback To register a callback function for result * - * @par Prospective Clients: - * External Apps. + * @param[in] user_data The user data for user specification * - * @see None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) + */ +int tel_req_sim_authentication(TapiHandle *handle, TelSimAuthenticationData_t *authentication_data, tapi_response_cb callback, void *user_data); + +/** + * @brief Performs PIN1/PIN2/SIM LOCK verification. + * @details This function performs PIN verification based on the PIN type passed along with @a pin_data:\n + * PIN1 code: The SIM card has its own password to check access permissions.\n + * SIM Lock code: Between Device and SIM card using a SIM password is only available on certain handsets to authorize.\n * - * @code - * #include + * This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * - * int request_id = 0; - * err_code = TAPI_API_SUCCESS; // 0 - * int length = TAPI_SIM_PIN_LENGTH+1; - * char init_pin_val[length] ; + * Sync (or) Async: This is an Asynchronous API. * - * strcpy(init_pin_val, PIN1_NORMAL); + * Prospective Clients: External Apps. * - * TelSimSecPw_t pin_data = {0,}; + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * pin_data.type = TAPI_SIM_PTYPE_PIN1; - * pin_data.pw_len = strlen(init_pin_val); + * @remarks If the PIN status (PIN/PUK/SIM LOCK) is blocked, an unsolicited event #TAPI_EVENT_SIM_STATUS_IND will be published to Applications on Device boot time. + * If the PIN status is PUK, you should use #tel_verify_sim_puks instead of this API. * - * printf("pw_len[%d]", pin_data.pw_len); + * @param[in] handle The handle from tel_init() * - * pin_data.pw = (char*)malloc(length); - * memcpy(pin_data.pw,init_pin_val,length); + * @param[in] pin_data The PIN code, entered by the user \n + * You should make all the parameters. * - * err_code = tel_verifiy_sim_pins(&pin_data, &request_id); + * @param[in] callback To register a callback function for result * - * @endcode + * @param[in] user_data The user data for user specification * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation is completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre This API is used when #TelSimCardStatus_t is #TAPI_SIM_STATUS_SIM_PIN_REQUIRED or #TAPI_SIM_STATUS_SIM_LOCK_REQUIRED on boot time. */ -/*================================================================================================*/ int tel_verifiy_sim_pins(TapiHandle *handle, const TelSimSecPw_t *pin_data, tapi_response_cb callback, void *user_data); - /** - * @brief This function performs unblock PIN1/PIN2 operation based on PUK information passed along with - * unblock information entered by the user. - * If you get sim card status(TAPI_SIM_STATUS_SIM_PUK_REQUIRED) by using #tel_get_sim_init_info on boot time - * or (TAPI_SIM_PIN_STATUS_BLOCKED) by using #tel_get_sim_security_status after normal initialization for specific operation, - * you may unblock PIN1/PIN2. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - Based on Pin status (PIN1/PIN2) is blocked, an unsolicited event TAPI_EVENT_SIM_STATUS_IND - * is published to Applications on boot time also. - * - * @warning - * - If you fail to unblock PIN til given retry count, Your SIM card be permanent block status. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param[in] puk_data - * -Specifies unblocking PIN password #TelSimSecPw_t - * - * @param[in] new_pin_data - * -Specifies PIN password which you want to use after unblocking operation #TelSimSecPw_t - * - * @param [in] callback - * - To register callback function for result. + * @brief Performs PIN1/PIN2 unblocking operation based on PUK information passed along with + * unblock information entered by the user. * - * @param [in] user_data - * - user_data for user specification. + * @details If you get the SIM card status (#TAPI_SIM_STATUS_SIM_PUK_REQUIRED) using #tel_get_sim_init_info on boot time + * or (#TAPI_SIM_PIN_STATUS_BLOCKED) using #tel_get_sim_facility after normal initialization for a specific operation, + * you may unblock PIN1/PIN2. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SIM_VERIFY_PUK_CNF and the event data is #TelSimSecResult_t. - * Asynchronous return status is indicated by #TelSimPinOperationResult_t. - * If returned status is TAPI_SIM_PIN_OPERATION_SUCCESS, Verification successes. - * If returned status is TAPI_SIM_PUK_INCORRECT_PASSWORD, Verification fails and you can check retry count by using event data #TelSimSecResult_t. + * This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - PIN1 or PIN2 status should be TAPI_SIM_PIN_STATUS_BLOCKED and Card status should be TAPI_SIM_STATUS_SIM_PUK_REQUIRED on boot time. + * Sync (or) Async: This is an Asynchronous API. * - * @post - * - After Success on unblocking for PIN1 or PIN2, each pin check facility is enabled even if previous facility is disabled. + * Prospective Clients: External Apps. * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * #include + * @remarks If the PIN status (PIN1/PIN2) is blocked, an unsolicited event #TAPI_EVENT_SIM_STATUS_IND + * will be published to Applications on boot time. + * If you exceed the specified number of attempts to unblock PIN, the SIM card will be blocked permanently. * - * int request_id = 0; - * err_code = TAPI_API_SUCCESS; // 0 - * int length = TAPI_SIM_PIN_LENGTH+1; + * @param[in] handle The handle from tel_init() * - * char init_pin_val[length]; - * char init_puk_val[length]; + * @param[in] puk_data The unblocking PIN password #TelSimSecPw_t * - * strcpy(init_pin_val, PIN1_NORMAL); - * strcpy(init_puk_val, PUK1_NORMAL); + * @param[in] new_pin_data The PIN password to use after the unblocking operation #TelSimSecPw_t * - * TelSimSecPw_t puk_data = {0,}; - * TelSimSecPw_t new_pin_data = {0,}; + * @param[in] callback To register a callback function for result * - * puk_data.type = TAPI_SIM_PTYPE_PUK1; // 0x00 - * puk_data.pw_len = length; - * puk_data.pw_len = strlen(init_puk_val); - * printf("pw_len[%d]", puk_data.pw_len); - * memcpy(puk_data.pw,init_pin_val,length); + * @param[in] user_data The user data for user specification * - * new_pin_data.type = TAPI_SIM_PTYPE_PIN1; // 0x00 - * new_pin_data.pw_len = strlen(init_pin_val); - * printf("pw_len[%d]", new_pin_data.pw_len); - * new_pin_data.pw = (char*)malloc(length); - * memcpy(new_pin_data.pw,init_pin_val,length); + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * - * err_code = tel_verify_sim_puks(&puk_data, &new_pin_data, &request_id); - * - * @endcode - * - * @remarks None + * @pre PIN1 or PIN2 status should be #TAPI_SIM_PIN_STATUS_BLOCKED and Card status should be #TAPI_SIM_STATUS_SIM_PUK_REQUIRED on boot time. * + * @post After success on unblocking for PIN1 or PIN2, each pin check facility is enabled even if the previous facility is disabled. */ -/*================================================================================================*/ int tel_verify_sim_puks(TapiHandle *handle, const TelSimSecPw_t *puk_data, const TelSimSecPw_t *new_pin_data, tapi_response_cb callback, void *user_data); - /** - * @brief This function changes PIN1/PIN2 code based on the pin type passed along with old pin data and new pin data. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - User should fill up pin type equally both old_pin and new_pin. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param[in] old_pin - * -Old pin code, entered by the user. #TelSimSecPw_t - * - * @param[in] new_pin - * -New pin code, entered by the user. #TelSimSecPw_t - * - * @param [in] callback - * - To register callback function for result. + * @brief Changes the PIN1/PIN2 code based on the PIN type passed along with old PIN data and new PIN data. * - * @param [in] user_data - * - user_data for user specification. + * @details This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SIM_CHANGE_PINS_CNF and the event data is #TelSimSecResult_t. - * Asynchronous return status is indicated by #TelSimPinOperationResult_t. - * If returned status is TAPI_SIM_PIN_OPERATION_SUCCESS, Change operation finish successfully. - * If returned status is TAPI_SIM_PIN_INCORRECT_PASSWORD, Change operation fails and you can check retry count by using event data #TelSimSecResult_t. + * Sync (or) Async: This is an Asynchronous API. * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). - * - PIN which user want to change check facility should be enabled. + * Prospective Clients: External Apps. * - * @post - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * @remarks The user should set the same PIN type for both @a old_pin and @a new_pin. * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * #include - * - * int request_id = 0; - * err_code = TAPI_API_SUCCESS; // 0 - * int length = TAPI_SIM_PIN_LENGTH+1; - * char init_old_pin_val[length] ; - * char init_new_pin_val[length]; - * - * memset(&init_old_pin_val, 0 , length); - * memset(&init_new_pin_val, 0 , length); - * - * TelSimSecPw_t old_pin = {0,}; - * TelSimSecPw_t new_pin = {0,}; - * - * strcpy(init_old_pin_val, PIN1_ORG); + * @param[in] handle The handle from tel_init() * - * old_pin.type = TAPI_SIM_PTYPE_PIN1; - * old_pin.pw_len = strlen(init_old_pin_val); - * printf("pw_len[%d]", old_pin.pw_len); - * old_pin.pw = (char*)malloc(length); - * memcpy(old_pin.pw,init_old_pin_val,length); + * @param[in] old_pin The old PIN code entered by the user \n + * Refer #TelSimSecPw_t. * - * strcpy(init_new_pin_val, PIN1_NEW); + * @param[in] new_pin The new PIN code entered by the user \n + * Refer #TelSimSecPw_t. * - * new_pin.type = TAPI_SIM_PTYPE_PIN1; - * new_pin.pw_len = strlen(init_new_pin_val); - * printf("pw_len[%d]", new_pin.pw_len); - * new_pin.pw = (char*)malloc(length); - * memcpy(new_pin.pw,init_new_pin_val,length); + * @param[in] callback To register a callback function for result * - * err_code = tel_change_sim_pins(&old_pin, &new_pin, &request_id); + * @param[in] user_data The user data for user specification * - * @endcode - * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation is completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ int tel_change_sim_pins(TapiHandle *handle, const TelSimSecPw_t *old_pin, const TelSimSecPw_t *new_pin, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to disable the SIM facility. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param[in] pw - * - a structure which contains facility type and password. - * - * @param [in] callback - * - To register callback function for result. + * @brief Disables the SIM facility. + * @details Sync (or) Async: This is an Asynchronous API. * - * @param [in] user_data - * - user_data for user specification. + * Prospective Clients: External Apps. * - * @par + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @pre + * @param[in] handle The handle from tel_init() * - * @post + * @param[in] pw A structure which contains the facility type and password * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * @param[in] callback To register a callback function for result * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * - * @endcode - * - * @remarks None + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) */ -/*================================================================================================*/ int tel_disable_sim_facility(TapiHandle *handle, TelSimFacilityPw_t *pw, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to enable the SIM facility. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param[in] pw - * - a structure which contains facility type and password. - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. - * - * @par - * - * @pre + * @brief Enables the SIM facility. + * @details Sync (or) Async: This is an Asynchronous API. * - * @post + * Prospective Clients: External Apps. * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @par Prospective Clients: - * External Apps. + * @param[in] handle The handle from tel_init() * - * @see None + * @param[in] pw A structure which contains the facility type and password * - * @code + * @param[in] callback To register a callback function for result * - * @endcode - * - * @remarks None + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) */ -/*================================================================================================*/ int tel_enable_sim_facility(TapiHandle *handle, TelSimFacilityPw_t *pw, tapi_response_cb callback, void *user_data); - /** - * @brief This API is used to get the SIM facility. + * @brief Gets the SIM facility. + * @details Sync (or) Async: This is an Asynchronous API. * - * @par Sync (or) Async: - * This is an Asynchronous API. + * Prospective Clients: External Apps. * - * @par Important Notes: - * - None + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @warning - * - None. + * @param[in] handle The handle from tel_init() * - * @param [in] handle - * - handle from tel_init(). + * @param[in] type The type of security lock * - * @param[in] type - * - type of security lock type enum values. + * @param[in] callback To register a callback function for result * - * @param [in] callback - * - To register callback function for result. + * @param[in] user_data The user data for user specification * - * @param [in] user_data - * - user_data for user specification. - * - * @par - * - * @pre - * - * @post + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) + */ +int tel_get_sim_facility(TapiHandle *handle, TelSimLockType_t type, tapi_response_cb callback, void *user_data); + +/** + * @brief Gets SIM LOCK TYPE info. + * @details Sync (or) Async: This is an Asynchronous API. * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * Prospective Clients: External Apps. * - * @par Prospective Clients: - * External Apps. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @see None + * @param[in] handle The handle from tel_init() * - * @code + * @param[in] type The type of security lock * - * @endcode + * @param[in] callback To register a callback function for result * - * @remarks None + * @param[in] user_data The user data for user specification * + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) */ -/*================================================================================================*/ -int tel_get_sim_facility(TapiHandle *handle, TelSimLockType_t type, tapi_response_cb callback, void *user_data); +int tel_get_sim_lock_info(TapiHandle *handle, TelSimLockType_t type, tapi_response_cb callback, void *user_data); /** - * @brief This API is used to get the SIM LOCK TYPE info. + * @brief Sets the SIM power state. * - * @par Sync (or) Async: - * This is an Asynchronous API. + * @details Sync (or) Async: This is an Asynchronous API. * - * @par Important Notes: - * - None + * Prospective Clients: External Apps. * - * @warning - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @param [in] handle - * - handle from tel_init(). + * @param [in] handle The handle from tel_init() * - * @param[in] type - * - type of security lock type enum values. + * @param[in] state The state of SIM to be set \n + * It is either ON or OFF. * - * @param [in] callback - * - To register callback function for result. + * @param [in] callback To register a callback function for result * - * @param [in] user_data - * - user_data for user specification. + * @param [in] user_data The user data for user specification * - * @par - * - * @pre - * - * @post - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * @return The return type (int) + * Integer '0' ( same with #TAPI_SIM_POWER_SET_SUCCESS ) - indicates that the operation has completed successfully + * Positive integer : It provides an error code while actual operations (Refer #TelSimPowerSetResult_t) * * @par Prospective Clients: * External Apps. - * - * @see None - * - * @code - * - * @endcode - * - * @remarks None - * */ -/*================================================================================================*/ -int tel_get_sim_lock_info(TapiHandle *handle, TelSimLockType_t type, tapi_response_cb callback, void *user_data); - +int tel_set_sim_power_state(TapiHandle *handle, TelSimPowerState_t state, tapi_response_cb callback, void *user_data); /** - * @brief This function provides common interface for accessing SIM data based on USIM generic command in ETSI TS 102 221 - * and 3GPP TS 31.102 Characteristics of the Universal Subscriber Identity Module (USIM) application. - * This API provides only interface to send APDU. User should know well APDU usage. - * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). + * @brief Provides a common interface for accessing SIM data. * - * @param[in] apdu_data + * @details This function is based on the USIM generic command in ETSI TS 102 221 + * and 3GPP TS 31.102 Characteristics of the Universal Subscriber Identity Module (USIM) application. * - * @param [in] callback - * - To register callback function for result. + * This API provides only an interface to send APDU. The user should know well how to use APDU. * - * @param [in] user_data - * - user_data for user specification. + * This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is being delivered in the corresponding event asynchronously. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SIM_APDU_CNF and the event data is #TelSimApduResp_t. - * Asynchronous return status is indicated by #TelSimAccessResult_t. + * Sync (or) Async: This is an Asynchronous API. * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). - * - None. + * Prospective Clients: External Apps. * - * @post - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) + * @param[in] handle The handle from tel_init() * - * @par Prospective Clients: - * External Apps. + * @param[in] apdu_data The APDU data * - * @see None + * @param[in] callback To register a callback function for result * - * @code - * #include - * int err_code =0; - * int request_id = 0; - * TelSimApdu_t apdu = {0,}; - * int tmp_apdu[5] = {0xa,5,6,7,8}; - * apdu.apdu_len = 5; //user should check - * apdu.apdu = apdu; + * @param[in] user_data The user data for user specification * - * // REQUEST SIM ACCESS - * err_code = tel_req_sim_apdu((const TelSimRSimReq_t*)&rsim, &request_id); - * @endcode - * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ int tel_req_sim_apdu(TapiHandle *handle, TelSimApdu_t* apdu_data, tapi_response_cb callback, void *user_data); - /** - * @brief This function provides common interface to get SIM ATR(Answer To Reset) value. + * @brief Provides a common interface to get the SIM ATR(Answer To Reset) value. * - * This function makes Dbus method call to Telephony Sever and returns immediate value. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered in the corresponding event asynchronously. + * @details This function makes a Dbus method call to the Telephony Server and returns an immediate value. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered in the corresponding event asynchronously. * - * @par Sync (or) Async: - * This is an Asynchronous API. + * Sync (or) Async: This is an Asynchronous API. * - * @par Important Notes: - * - None + * Prospective Clients: External Apps. * - * @warning - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @param [in] handle - * - handle from tel_init(). + * @param[in] handle The handle from tel_init() * - * @param [in] callback - * - To register callback function for result. + * @param[in] callback To register a callback function for result * - * @param [in] user_data - * - user_data for user specification. + * @param[in] user_data The user data for user specification * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SIM_ATR_CNF and the event data is #TelSimAtrResp_t. - * Asynchronous return status is indicated by #TelSimAccessResult_t. - * - * @pre - * - A dbus connection is established with #tel_init - * - The application name is registered with #tel_register_app_name - * - The application is registered events to listen asynchronous response with #tel_register_event - * - A event loop is running to listen events - * - User can get valid return value or make operations after SIM init complete(card status is TAPI_SIM_STATUS_SIM_INIT_COMPLETED). - * - None. - * - * @post - * - None. - * - * @return Return Type (int) \n - * - Integer '0' ( same with TAPI_API_SUCCESS ) - indicating that the operation has completed successfully. \n - * - Negative integer : it provides an error code (Refer #TapiResult_t) - * - * @par Prospective Clients: - * External Apps. - * - * @see None - * - * @code - * #include - * int err_code =0; - * int request_id = 0; - * - * // REQUEST SIM ATR - * err_code = tel_req_sim_atr(&request_id); - * @endcode - * - * @remarks None + * @return The return type (int) + * Integer '0' ( same with #TAPI_API_SUCCESS & #TAPI_SIM_ACCESS_SUCCESS ) - indicates that the operation has completed successfully + * Negative integer : It provides an error code before actual operations (Refer #TapiResult_t) + * Positive integer : It provides an error code during actual operations (Refer #TelSimAccessResult_t) * + * @pre The user can get valid return values or make operations after SIM init completes(card status is #TAPI_SIM_STATUS_SIM_INIT_COMPLETED). */ -/*================================================================================================*/ int tel_req_sim_atr(TapiHandle *handle, tapi_response_cb callback, void *user_data); #ifdef __cplusplus } #endif -#endif /* _ITAPI_SIM_H_ */ +#endif /* _ITAPI_SIM_H_ */ /** -* @} -*/ + * @} + */ diff --git a/include/ITapiSs.h b/include/ITapiSs.h index bcd00c6..41aee06 100644 --- a/include/ITapiSs.h +++ b/include/ITapiSs.h @@ -1,7 +1,7 @@ /* * libslp-tapi * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Ja-young Gu * @@ -19,15 +19,13 @@ */ /** -* @open -* @ingroup TelephonyAPI -* @addtogroup SS_TAPI SS(Supplementary services) -* @{ -* -* @file ITapiSs.h + * @file ITapiSs.h + */ - @brief This file serves as a "C" header file defines functions for Tapi Supplementary services\n - It contains a sample set of function prototypes that would be required by applications. +/** + * @internal + * @addtogroup CAPI_TELEPHONY_SERVICE_SS + * @{ */ #ifndef _ITAPI_SS_H_ @@ -35,961 +33,482 @@ #include #include -#include #ifdef __cplusplus extern "C" { #endif - /** - * @brief This function sends a request to activate/deactivate call barring. - * - * This service makes it possible for a mobile subscriber - * to activate barring of certain categories of outgoing or incoming calls according to a barring program which is selected from a set - * of one or more barring programs chosen at provision time and is valid for all outgoing or incoming calls, or just those associated - * with a specific basic service group. Also this API allows deactivating call barring based on categories set. - * If the user call this function with wrong password 3 times subsequently, the barring service can be blocked. - * If this function is called normally, the asynchronous response comes in a few second from network. The response indicates - * the service request has been granted or not. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is delivered with the async response as below. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] info - * - Contains the information about call barring - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. +/** + * @brief Sends a request to activate/deactivate call barring. * - * @par Async Response Message: - * An asynchronous notification event is returned as a confirmation - * The event associated is TAPI_EVENT_SS_BARRING_CNF and asynchronous return status is indicated by #TelSsCause_t. - * The event data is #TelSsBarringStatusInfo_t. \n + * @details This service allows a mobile subscriber to activate barring of certain categories + * of outgoing or incoming calls according to a barring program which is selected from a set + * of one or more barring programs chosen at provision time and is valid for all outgoing or incoming calls, or just those associated + * with a specific basic service group. Also this API allows deactivating call barring based on categories set. + * If the user calls this function with a wrong password 3 times subsequently, the barring service can be blocked. + * If this function is called normally, the asynchronous response comes in a few seconds from the network. The response indicates + * whether the service request has been granted or not. * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered with the async response as below. * - * @post - * - None. + * Sync (or) Async: This is an Asynchronous API. * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code + * Prospective Clients: External Apps. * - * @par Prospective Clients: - * External Apps. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * \see tel_get_ss_barring_status, tel_change_ss_barring_password + * @param[in] handle The handle from tel_init() * - * @code - * #include + * @param[in] info The information about call barring * - * int ret_status = -1; - * TelSsCallBarringInfo_t pBarringInfo;// = {0,}; - * int pRequestId=0; - * char bar_pwd[5]="0000"; + * @param[in] callback To register a callback function for result * - * pBarringInfo.Mode = TAPI_SS_CALL_BAR_ACTIVATE; - * pBarringInfo.Type = TAPI_CALL_BARRING_ALL_OUTGOING_CALLS; - * pBarringInfo.CallType = TAPI_CALL_TYPE_VOICE_EV; - * strcpy(pBarringInfo.szPassword,bar_pwd); - * ret_status = tel_set_ss_barring (&pBarringInfo,&pRequestId); - * @endcode + * @param[in] user_data The user data for user specification * - * @remarks - * - None + * @return The return type (int) \n + * #TAPI_API_SUCCESS - indicates that the operation is completed successfully. \n + * Refer #TapiResult_t for failure and error code. * + * @pre Initialize the Dbus connection with #tel_init. * + * @see tel_get_ss_barring_status() + * @see tel_change_ss_barring_password() */ - /*================================================================================================*/ int tel_set_ss_barring(TapiHandle *handle, TelSsBarringInfo_t *info, tapi_response_cb callback, void *user_data); /** + * @brief Gets a call barring status. * - * @brief This function gets call barring status. - * - * The mobile subscriber may determine by subscription of a set of one or more unique barring - * programs what kind of outgoing or incoming calls should be barred. - * If this function is called normally, the asynchronous response comes in a few second from network. - * The response indicates the service status. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is delivered with the async response as below. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] ss_class - * - Specifies the type of call i.e. Voice call, Video Call etc. - * - * @param [in] type - * - Specifies barring type i.e. Outgoing international, outgoing all, Incoming all etc. - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. + * @details The mobile subscriber may determine which outgoing or incoming call should be barred + * by subscribing a set of one or more unique barring programs. + * If this function is called normally, the asynchronous response comes in a few seconds from the network. + * The response indicates the service status. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SS_BARRING_QUERYSTATUS_CNF and asynchronous return status is indicated by #TelSsCause_t. - * The event data is #TelSsBarringStatusInfo_t. + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered with the async response as below. * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events + * Sync (or) Async: This is an Asynchronous API. * - * @post - * - None. + * Prospective Clients: External Apps. * - * @return Return Type (#TapiResult_t) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @par Prospective Clients: - * External Apps. + * @param[in] handle The handle from tel_init() * - * \see tel_set_ss_barring, tel_change_ss_barring_password + * @param[in] ss_class The type of call i.e. Voice call, Video Call, and so on * - * @code - * #include + * @param[in] type The barring type i.e. Outgoing international, outgoing all, Incoming all, and so on * - * int ret_status; - * TelSsCallBarType_t BarType =TAPI_CALL_BARRING_ALL_OUTGOING_INTERN_CALL; - * TelSsCallType_t CallType = TAPI_CALL_TYPE_VOICE_EV; - * int pRequestId=0; + * @param[in] callback To register a callback function for result * - * ret_status = tel_get_ss_barring_status(BarType,CallType,&pRequestId); // get barring status - * printf ("The return value is %d\n", ret_status); + * @param[in] user_data The user data for user specification * - * @endcode - * - * - * @remarks - * - None + * @return The return type (#TapiResult_t) \n + * #TAPI_API_SUCCESS - indicates that the operation is completed successfully. \n + * Refer #TapiResult_t for failure and error code. * + * @pre Initialize the Dbus connection with #tel_init. * + * @see tel_set_ss_barring() + * @asee tel_change_ss_barring_password() */ -/*================================================================================================*/ int tel_get_ss_barring_status(TapiHandle *handle, TelSsClass_t ss_class, TelSsBarringType_t type, tapi_response_cb callback, void *user_data); - /** - * - * @brief This function allows changing of the barring password in Network. - * - * User can request network to change his own barring password. If the old password is not same with - * what network knows, it will be rejected by network. Also new password should be same with another new password - * which is to confirm user input. Otherwise the request must be rejected by Telephony Sever. - * If the user call this function with wrong old password 3 times subsequently, the barring service can be blocked. - * If this function is called normally, the asynchronous response comes in a few second from network. - * The response indicates the service request has been granted or not. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is delivered with the async response as below. - * - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - Based on 3GPP TS 22.030 section 6.5.4 Registration of New Password. Only one Change Barring Password request is allowed - * at a time and TS might return TAPI_API_REQUEST_MAX_IN_PROGRESS if another request is received. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] old_password - * - Old password set for Barring in Network. This is Null terminated string - * - * @param [in] new_password - * - New password for Barring to be set in Network. This is Null terminated string. - * - * @param [in] new_password_again - * - New password again. This is Null terminated string. - * - * @param [in] callback - * - To register callback function for result. +/** + * @brief Allows changing of the barring password in the network. * - * @param [in] user_data - * - user_data for user specification. + * @details The user can request the network to change his own barring password. If the old password is not same as + * what the network knows, the request will be rejected by the network. New password should be entered separately twice + * to confirm the correctness of the user input. Otherwise, the request must be rejected by the Telephony Server. + * If the user calls this function with a wrong old password 3 times subsequently, the barring service can be blocked. + * If this function is called normally, the asynchronous response comes in a few seconds from the network. + * The response indicates whether the service request has been granted or not. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SS_BARRING_CHANGEPASS_CNF and asynchronous return status is indicated by #TelSsCause_t. - * There is no event data with this event. + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered with the async response as below. + * Sync (or) Async: This is an Asynchronous API. * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events + * Prospective Clients: External Apps. * - * @post - * - None. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code - * @par Prospective Clients: - * External Apps. + * @remarks Based on 3GPP TS 22.030 section 6.5.4 Registration of New Password. Only one Change Barring Password request is allowed + * at a time and TS might return #TAPI_API_REQUEST_MAX_IN_PROGRESS if another request is received. * - * @see - * - None + * @param[in] handle The handle from tel_init() * - * @code - * #include + * @param[in] old_password The old password set for Barring in the Network \n + * This is a Null terminated string. * - * int ret_status; - * int pRequestId=0; + * @param[in] new_password The new password set for Barring in the Network \n + * This is a Null terminated string * - * ret_status = tel_change_ss_barring_password ("0000","0000","0000",&pRequestId); // change barring password + * @param[in] new_password_again A new password again \n + * This is a Null terminated string * - * @endcode + * @param[in] callback To register a callback function for result * - * @remarks - * - None + * @param[in] user_data The user data for user specification * + * @return The return type (int) \n + * #TAPI_API_SUCCESS - indicates that the operation is completed successfully. \n + * Refer #TapiResult_t for failure and error code. * + * @pre Initialize the Dbus connection with #tel_init. + * An event loop runs to listen to events. */ -/*================================================================================================*/ int tel_change_ss_barring_password(TapiHandle *handle, const char *old_password, const char *new_password, const char *new_password_again, tapi_response_cb callback, void *user_data); - /** - * - * @brief This function allows to set (register/erase/activate/deactivate) call forwarding option at the Network. - * - * This enables to forward the calls to another party. This service permits a called mobile subscriber - * to have the network send all incoming calls, or just those associated with a specific Basic service group, - * addressed to the called mobile subscriber's directory number and which meet - * various call FORWARD condition to another directory number. - * The ability of the served mobile subscriber to originate calls is unaffected. - * If the service is activated, a call is forwarded only if under this call forward condition. - * Application has to call this API in order to explicitly register/erase/activate/deactivate - * the call forwarding. Request will be passed irrespective of whether already - * another SS call forward is ongoing. - * - * If this function is called normally, the asynchronous response comes in a few second from network. The response indicates - * the service request has been granted or not. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is delivered with the async response as below. - * - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] info - * - Contains the Call forward information like forward mode, forward type, etc. - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. +/** * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SS_FORWARD_CNF and asynchronous return status is indicated by #TelSsCause_t. - * The event data will be #TelSsForwardingStatusInfo_t. + * @brief Allows to set the (register/erase/activate/deactivate) call forwarding option at the network. * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events + * @details This enables to forward the calls to another party. This service permits a called mobile subscriber + * to have the network send all incoming calls, or just those associated with a specific Basic service group, + * addressed to the called mobile subscriber's directory number and which meets + * various call FORWARD conditions, to another directory number. + * The ability of the served mobile subscriber to originate calls is unaffected. + * If the service is activated, a call is forwarded only if this call forward condition occurs. + * An application has to call this API in order to explicitly register/erase/activate/deactivate + * call forwarding. Request will be passed irrespective of whether + * another SS call forward is already ongoing or not. * - * @post - * - None. + * If this function is called normally, the asynchronous response comes in a few seconds from the network. The response indicates + * whether the service request has been granted or not. * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code - * @par Prospective Clients: - * External Apps. + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered with the async response as below. * + * Sync (or) Async: This is an Asynchronous API. * - * \image html CallForward.jpg - * \image latex CallForward.jpg + * Prospective Clients: External Apps. * - * \see tel_get_ss_forward_status + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @code - * #include + * @param[in] handle The handle from tel_init() * - * int ret_status =0; - * int pRequestId=0; - * TelSsForwardInfo_t pForwardInfo; - * pForwardInfo.Mode =TAPI_CALL_FORWARD_MODE_ENABLE_EV; - * pForwardInfo.Type = TAPI_CS_FORWARD_TYPE_VOICE_EV; - * pForwardInfo.Condition = TAPI_SS_FORWARD_WHEN_UNCONDITIONAL_EV; - * pForwardInfo.NoReplyConditionTimer = 10; - * int len; - * char cf_number[20]= {"9986529874"};//number to which calles need to be forwarded. + * @param[in] info The Call forward information such as a forward mode, a forward type, and so on * - * len = strlen(cf_number); - * printf("Length of CF number :%d \n",len); - * memcpy(&(pForwardInfo.szPhoneNumber),cf_number,len); + * @param[in] callback To register a callback function for result * - * ret_status = tel_set_ss_forward (&pForwardInfo,&pRequestId); + * @param[in] user_data The user data for user specification * - * @endcode - * @remarks - * - None + * @return The return type (int) \n + * #TAPI_API_SUCCESS - indicates that the operation is completed successfully. \n + * Refer #TapiResult_t for failure and error code. * + * @pre Initialize the Dbus connection with #tel_init. * + * @see tel_get_ss_forward_status() */ -/*================================================================================================*/ int tel_set_ss_forward(TapiHandle *handle, const TelSsForwardInfo_t *info, tapi_response_cb callback, void *user_data); - /** - * - * @brief This function provides option to get the call forwarding status of different calls from Network. - * - * The data request procedure enables the mobile subscriber to obtain information about the data stored in the PLMN. - * After having requested this procedure the network shall return the following information: - * - in response to a general data request the served mobile subscriber should be given a list of all Basic service groups - * to which call forwarding unconditional is registered, including information whether or not it is active and operative, - * and the associated forwarded-to numbers - * - in response to a specific request concerning one particular Basic service group, - * the served mobile subscriber should be informed whether or not call forwarding unconditional is registered, - * including information whether or not it is active and operative for that Basic service group. - * If CFU is registered, the associated forwarded-to number shall be given. - * - * If this function is called normally, the asynchronous response comes in a few second from network. - * The response indicates the service status. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is delivered with the async response as below. - * - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] ss_class - * - Specifying the Forward call type i.e. voice call, Video Call, Data Calls etc. - * - * @param [in] condition - * - Used to specify the forward condition i.e. unconditional, When no reply, when busy, when not reachable etc. +/** + * @brief Provides an option to get the call forwarding status of different calls from the Network. * - * @param [in] callback - * - To register callback function for result. + * @details The data request procedure enables the mobile subscriber to obtain information about the data stored in the PLMN. + * After having requested this procedure the network shall return the following information:\n + * - In response to a general data request the served mobile subscriber should be given a list of all Basic service groups + * to which call forwarding unconditional is registered, including information on whether or not it is active and operative, + * and the associated forwarded-to numbers\n + * - In response to a specific request concerning one particular Basic service group, + * the served mobile subscriber should be informed whether or not call forwarding unconditional is registered, + * including information on whether or not it is active and operative for that Basic service group.\n + * If CFU is registered, the associated forwarded-to number shall be given. * - * @param [in] user_data - * - user_data for user specification. + * If this function is called normally, the asynchronous response comes in a few seconds from the network. + * The response indicates the service status. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SS_FORWARD_QUERYSTATUS_CNF and asynchronous return status is indicated by #TelSsCause_t. - * The event data is #TelSsForwardingStatusInfo_t. + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered with the async response as below. + * Sync (or) Async: This is an Asynchronous API. * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events + * Prospective Clients: External Apps. * - * @post - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code + * @param[in] handle The handle from tel_init() * - * @par Prospective Clients: - * External Apps. + * @param[in] ss_class The Forward call type i.e. voice call, Video Call, Data Calls, and so on * - * \see tel_set_ss_forward + * @param[in] condition The forward condition i.e. unconditional, when no reply, when busy, when not reachable, and so on * - * @code - * #include - * int ret_status = 0; - * TelSsForwardType_t Type =TAPI_CS_FORWARD_TYPE_VOICE_EV; - * TelSsForwardWhen_t Condition = TAPI_SS_FORWARD_WHEN_UNCONDITIONAL_EV; - * int pRequestId=0; + * @param[in] callback To register a callback function for result * - * ret_status = tel_get_ss_forward_status(Type,Condition,&pRequestId); // get forward status + * @param[in] user_data The user data for user specification * - * @endcode - * @remarks - * - None + * @return The return type (int) \n + * #TAPI_API_SUCCESS - indicates that the operation is completed successfully. \n + * Refer #TapiResult_t for failure and error code. * + * @pre Initialize the Dbus connection with #tel_init. * + * @see tel_set_ss_forward() */ -/*================================================================================================*/ int tel_get_ss_forward_status(TapiHandle *handle, TelSsClass_t ss_class, TelSsForwardWhen_t condition, tapi_response_cb callback, void *user_data); - /** - * - * @brief This function activates/deactivates the call waiting service. - * The call waiting service permits a mobile to be notified of an incoming - * call (as per basic call procedures) while the traffic channel (BM or LM) is not available for the incoming call and the mobile subscriber - * is engaged in an active or held call. Subsequently, the subscriber can accept, reject, or ignore the incoming call. - * If this function is called normally, the asynchronous response comes in a few second from network. The response indicates - * the service request has been granted or not. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is delivered with the async response as below. - * - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] info - * - Specifies the status of call-waiting service i.e. On (TRUE) or off (FALSE) - * - * @param [in] callback - * - To register callback function for result. +/** * - * @param [in] user_data - * - user_data for user specification. + * @brief Activates/deactivates the call waiting service. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SS_WAITING_CNF and asynchronous return status is indicated by #TelSsCause_t. - * The event data is #TelSsWaitingStatusInfo_t. + * @details The call waiting service permits a mobile to be notified of an incoming + * call (as per basic call procedures) while the traffic channel (BM or LM) is not available for the incoming call and the mobile subscriber + * is engaged in an active or held call. Subsequently, the subscriber can accept, reject, or ignore the incoming call. + * If this function is called normally, the asynchronous response comes in a few seconds from the network. The response indicates + * whether the service request has been granted or not. * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered with the async response as below. * - * @post - * - None. + * Sync (or) Async: This is an Asynchronous API. * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code + * Prospective Clients: External Apps. * - * @par Prospective Clients: - * External Apps. + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * \see tel_get_ss_waiting_status + * @param[in] handle The handle from tel_init() * - * @code - * #include + * @param[in] info The status of call-waiting service i.e. On (TRUE) or off (FALSE) * - * int ret_status; - * TelSsWaitingInfo_t waitInfo; - * waitInfo.Mode = TAPI_SS_CW_ACTIVATE; - * waitInfo.CallType =TAPI_CALL_TYPE_VOICE_EV; - * int RequestID; + * @param[in] callback To register a callback function for result * - * ret_status = tel_set_ss_waiting (&waitInfo,&RequestID); // set call waiting - * @endcode + * @param[in] user_data The user data for user specification * - * @remarks - * - None + * @return The return type (int) \n + * #TAPI_API_SUCCESS - indicates that the operation is completed successfully. \n + * Refer #TapiResult_t for failure and error code * + * @pre Initialize the Dbus connection with #tel_init. * + * @see tel_get_ss_waiting_status() */ -/*================================================================================================*/ int tel_set_ss_waiting(TapiHandle *handle, const TelSsWaitingInfo_t *info, tapi_response_cb callback, void *user_data); - /** - * - * @brief This function queries the status of call waiting service. - * - * @par Notes: - * The call waiting service permits a mobile to be notified of an incoming call - * (as per basic call procedures) while the traffic channel (BM or LM) is not available for the incoming call and the mobile subscriber - * is engaged in an active or held call. Subsequently, the subscriber can accept, reject, or ignore the incoming call. - * If this function is called normally, the asynchronous response comes in a few second from network. - * The response indicates the service status. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is delivered with the async response as below. - * - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] ss_class - * - enum data defines call type - * - * @param [in] callback - * - To register callback function for result. +/** + * @brief Gets the status of the call waiting service. * - * @param [in] user_data - * - user_data for user specification. + * @details The call waiting service permits a mobile to be notified of an incoming call + * (as per basic call procedures) while the traffic channel (BM or LM) is not available for the incoming call and the mobile subscriber + * is engaged in an active or held call. Subsequently, the subscriber can accept, reject, or ignore the incoming call. + * If this function is called normally, the asynchronous response comes in a few seconds from the network. + * The response indicates the service status. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SS_WAITING_QUERYSTATUS_CNF and asynchronous return status is indicated by #TelSsCause_t. - * The event data is #TelSsWaitingInfo_t. + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered with the async response as below. + * Sync (or) Async: This is an Asynchronous API. * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events + * Prospective Clients: External Apps. * - * @post - * - None. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code - * @par Prospective Clients: - * External Apps. + * @param[in] handle The handle from tel_init() * - * \see tel_set_ss_waiting - * @code - * #include + * @param[in] ss_class The call types * - * int ret_status; - * TelSsCallType_t CallType = TAPI_CALL_TYPE_VOICE_EV; - * int RequestID; + * @param[in] callback To register a callback function for result * - * ret_status = tel_get_ss_waiting_status ( CallType,&RequestID); // get call waiting info - * @endcode + * @param[in] user_data The user data for user specification * - * @remarks - * - None + * @return The return type (int) \n + * #TAPI_API_SUCCESS - indicates that the operation is completed successfully. \n + * Refer #TapiResult_t for failure and error code * + * @pre Initialize the Dbus connection with #tel_init. * + * @see tel_set_ss_waiting() */ -/*================================================================================================*/ int tel_get_ss_waiting_status(TapiHandle *handle, const TelSsClass_t ss_class, tapi_response_cb callback, void *user_data); - /** - * - * @brief This function queries the status of calling line identity service. - * - * @par Notes: - * The group of Line Identification Supplementary Services is divided into the following six Supplementary Services: - * CLIP - Calling line identification presentation - * This Supplementary Service provides for the ability to indicate the line identity of the calling party to the called party. - * The network shall deliver the calling line identity to the called party at call set-up time, - * regardless of the terminal capability to handle the information. - * CLIR - Calling line identification restriction - * the CLIR Supplementary Service is a Supplementary Service offered to the calling party - * to prevent presentation of the calling party's line identity, to the called party. - * COLP - Connected line identification presentation - * This Supplementary Service is not a dialing check but an indication to the calling subscriber - * of the connected line identity in a full ISDN/PLMN environment, - * the connected line identity shall include all the information necessary to unambiguously identify the connected party. - * The network shall deliver the connected line identity to the calling party - * regardless of the terminal capability to handle the information. - * COLR - Connected line identification restriction - * The COLR Supplementary Service is a Supplementary Service offered - * to the connected party to prevent presentation of the connected line identity, to the calling party. - * In the case where the calling party has an override category. - * CDIP - Called line identification presentation - * CNAP - Calling name presentation - * This function queries the service status with #TelSsCliType_t - * - * If this function is called normally, the asynchronous response comes in a few second from network. - * The response indicates the service status. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is delivered with the async response as below. - * - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] type - * - enum data defines Cli service type - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SS_CLI_QUERYSTATUS_CNF and asynchronous return status is indicated by #TelSsCause_t. - * The event data is #TelCliStatusInfo_t. - * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code - * - * @par Prospective Clients: - * External Apps. - * - * @code - * #include - * - * int ret_status = 0; - * TelSsCliType_t CliType =TAPI_SS_CLI_CDIP; - * int pRequestId; - * - * ret_status = tel_get_ss_cli_status(CliType,&pRequestId); // get cli info - * @endcode - * - * @see - * - None - * - * @remarks - * - None - * - * - */ -/*================================================================================================*/ -int tel_get_ss_cli_status(TapiHandle *handle, TelSsCliType_t type, tapi_response_cb callback, void *user_data); - - /** - * - * @brief This function is used to send a USSD string or User response to the Network. - * - * The unstructured supplementary service data (USSD) mechanism allows the Mobile Station (MS) user and - * a PLMN operator defined application to communicate in a way which is transparent - * to the MS and to intermediate network entities. - * The mechanism allows development of PLMN specific supplementary services. - * USSD string is like *109, *109*72348937857623#. - * There are two modes of USSD: MMI-mode and application mode. - * MMI-mode USSD is for the transparent transport of MMI strings entered by the user to the network using this function - * and for the transparent transport of text strings from the network that are displayed - * by the mobile for user information. - * Application mode USSD is for the transparent transport of data between the network and the UE. - * Application mode USSD is intended to be used by applications in the network and their peer applications in the UE. - * The peer application in the UE send response with #tel_send_ss_ussd_response - * - * If this function is called normally, the asynchronous response comes in a few second from the telephony server. - * The response indicates whether the sending request is successfully delivered or not. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is delivered with the async response as below. - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] info - * - Data coding scheme used (GSM 7bit or 8bit default alphabet etc, defined as 3GPP TS 23.038) - * - USSD String data length - * - ANSI string passed by the client - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SS_USSD_CNF and asynchronous return status is indicated by #TelSsCause_t. The event data - * is #TelSsUssdMsgInfo_t. +/** + * @brief Activates/deactivates the status of the calling line identity service. * - * @pre - * - Initialize Dbus connection with #tel_init - * - Register caller's application name with #tel_register_app_name - * - Register telephony events to listen - * - A event loop is running to listen events - * - No SS and USSD Transaction should be ongoing. If there an ongoing transaction, new USSD request will be returned to the Application - * with an error (USSD_BUSY) + * @details The group of Line Identification Supplementary Services is divided into the following six Supplementary Services:\n + * CLIP - Calling line identification presentation\n + * This Supplementary Service provides the ability to indicate the line identity of the calling party to the called party. + * The network shall deliver the calling line identity to the called party at call set-up time, + * regardless of the terminal capability to handle the information.\n + * CLIR - Calling line identification restriction\n + * The CLIR Supplementary Service is a Supplementary Service offered to the calling party + * to prevent presentation of the calling party's line identity, to the called party.\n + * COLP - Connected line identification presentation\n + * This Supplementary Service is not a dialing check but an indication to the calling subscriber + * of the connected line identity in a full ISDN/PLMN environment, + * the connected line identity shall include all the information necessary to unambiguously identify the connected party. + * The network shall deliver the connected line identity to the calling party + * regardless of the terminal capability to handle the information.\n + * COLR - Connected line identification restriction\n + * The COLR Supplementary Service is a Supplementary Service offered + * to the connected party to prevent presentation of the connected line identity, to the calling party. + * In the case where the calling party has an override category.\n + * CDIP - Called line identification presentation\n + * CNAP - Calling name presentation\n + * This function queries the service status with #TelSsCliType_t. * - * @post - * - None. + * If this function is called normally, the asynchronous response comes in a few seconds from the network. + * The response indicates the service status. * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered with the async response as below: * - * @par Prospective Clients: - * External Apps. + * Sync (or) Async: This is an Asynchronous API. * - * \see #tel_send_ss_ussd_response, #tel_send_ss_ussd_cancel + * Prospective Clients: External Apps. * - *\image html ussd.jpg - *\image latex ussd.jpg + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - * @code - * #include + * @param[in] handle The handle from tel_init() * - * char ussdString[TAPI_SS_USSD_DATA_SIZE_MAX]; - * int ret; + * @param[in] type The Cli service type * - * memset(ussdString, 0, TAPI_SS_USSD_DATA_SIZE_MAX); - * strcpy(ussdString , "*124#"); + * @param[in] status The Cli Status * - * ret = tel_send_ss_ussd_request(ussdString, &request_id); // request ussd - * @endcode + * @param[in] callback To register a callback function for result * - * @remarks - * - None + * @param[in] user_data The user data for user specification * + * @return The return type (int) \n + * #TAPI_API_SUCCESS - indicates that the operation is completed successfully. \n + * Refer #TapiResult_t for failure and error code * + * @pre Initialize the Dbus connection with #tel_init. */ -/*================================================================================================*/ -int tel_send_ss_ussd_request(TapiHandle *handle, const TelSsUssdMsgInfo_t *info, tapi_response_cb callback, void *user_data); +int tel_set_ss_cli_status(TapiHandle *handle, TelSsCliType_t type, TelSsCliStatus_t status, tapi_response_cb callback, void *user_data); - /** - * - * @brief This function is used to Read AOC parameter values on the SIM. - * - * @par Notes - * This supplementary service provides the MS with the information to produce an estimate - * of the cost of the service used. Charges are indicated for the call(s) in progress - * when mobile originated or for the roaming leg only when mobile terminated. - * Any charges for non-call related transactions, and for certain supplementary services, - * such as Call Forwarding are not indicated. - * The MS will receive at the beginning of each call (and as necessary during the call) - * a message, the Charge Advice Information. This message contains the elements which together define - * the rate at which the call is to be charged, time dependence, - * data dependence and for unit increments - see TS 22.024 [3]. - * The MS shall still indicate appropriate charges even when roaming, based on Home PLMN units. - * Where applicable, the volume charge for Packet data service, - * in addition to the normal time dependent and incremental charges, shall be indicated. - * To indicate the charge per call the Mobile station shall display the units consumed - * so far during the present call(s) and maintain this value until the MS is switched off or a new call set-up is attempted. - * Where required to indicate the total accumulated charge, the MS shall be able to display, - * and the SIM/USIM shall store in the ACM, the running cumulative unit charge. - * This value must be stored securely, and all reasonable steps shall be taken to ensure that - * the written value cannot be interrupted, reset or corrupted (except resetting under control of the unblocking key). - * This function get the AOC configuration information from PLMN - * - * If this function is called normally, the asynchronous response comes in a few second from Telephony Server. - * The response indicates whether the query is delivered successfully to network or not. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] AocType - * - Specifies which type of Advice of charge information to be read namely Maximum ACM, - * Price per unit currency, Current call meter and Accumulated call meter values. - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. - * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SS_AOC_RSP and asynchronous return status is indicated by #TelSsCause_t. The event data - * is #TelCallAocInfo_t. - * - * @pre - * - Advice of charge depends on the SIM for setting or reading AOC parameters. - * - Setting of AOC needs PIN2 Verification - * - * @post - * - None. - * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code - * - * @par Prospective Clients: - * External Apps. - * - * \see tel_set_ss_aoc_info - * - *\image html ussd.jpg - *\image latex ussd.jpg - * @code - * #include - * - * TelSsAocType_t AocType = TAPI_SS_AOC_TYPE_ACM; - * ret_status = tel_get_ss_aoc_info (AocType,&pRequestId); // get AOC info - * @endcode - * - * @remarks - * - None - * - * +/** + * @brief Gets the status of the calling line identity service. + * + * @details The group of Line Identification Supplementary Services is divided into the following six Supplementary Services:\n + * CLIP - Calling line identification presentation\n + * This Supplementary Service provides the ability to indicate the line identity of the calling party to the called party. + * The network shall deliver the calling line identity to the called party at call set-up time, + * regardless of the terminal capability to handle the information.\n + * CLIR - Calling line identification restriction\n + * The CLIR Supplementary Service is a Supplementary Service offered to the calling party + * to prevent presentation of the calling party's line identity, to the called party.\n + * COLP - Connected line identification presentation\n + * This Supplementary Service is not a dialing check but an indication to the calling subscriber + * of the connected line identity in a full ISDN/PLMN environment, + * the connected line identity shall include all the information necessary to unambiguously identify the connected party. + * The network shall deliver the connected line identity to the calling party + * regardless of the terminal capability to handle the information.\n + * COLR - Connected line identification restriction\n + * The COLR Supplementary Service is a Supplementary Service offered + * to the connected party to prevent presentation of the connected line identity, to the calling party. + * In the case where the calling party has an override category.\n + * CDIP - Called line identification presentation\n + * CNAP - Calling name presentation\n + * This function queries the service status with #TelSsCliType_t. + * + * If this function is called normally, the asynchronous response comes in a few seconds from the network. + * The response indicates the service status. + * + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered with the async response as below: + * + * Sync (or) Async: This is an Asynchronous API. + * + * Prospective Clients: External Apps. + * + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/telephony + * + * @param[in] handle The handle from tel_init() + * + * @param[in] type The Cli service type + * + * @param[in] callback To register a callback function for result + * + * @param[in] user_data The user data for user specification + * + * @return The return type (int) \n + * #TAPI_API_SUCCESS - indicates that the operation is completed successfully. \n + * Refer #TapiResult_t for failure and error code + * + * @pre Initialize the Dbus connection with #tel_init. */ -/*================================================================================================*/ -int tel_get_ss_aoc_info(TapiHandle *handle, TelSsAocType_t AocType, tapi_response_cb callback, void *user_data); +int tel_get_ss_cli_status(TapiHandle *handle, TelSsCliType_t type, tapi_response_cb callback, void *user_data); - /** - * - * @brief This function is used to Read AOC parameter values on the SIM. - * - * @par Notes: - * Refer #tel_get_ss_aoc_info - * - * If this function is called normally, the asynchronous response comes in a few second from Telephony Server. - * The response indicates whether the query is delivered successfully to network or not. - * - * This API makes Dbus method call to Telephony Sever and gets immediate feedback. - * However it just means that the API request has been transfered to the CP successfully. - * The actual operation result is being delivered asynchronously. - * - * @par Sync (or) Async: - * This is an Asynchronous API. - * - * @par Important Notes: - * - None. - * - * @warning - * - None. - * - * - * @param [in] handle - * - handle from tel_init(). - * - * @param [in] AocSetInfo - * - Specifies which type of Advice of charge information to be set namely Maximum ACM, - * Price per unit currency, Current call meter and Accumulated call meter values. - * - * @param [in] callback - * - To register callback function for result. - * - * @param [in] user_data - * - user_data for user specification. +/** + * @brief Sends a USSD string or User response to the Network. * - * @par Async Response Message: - * The event associated is TAPI_EVENT_SS_SET_AOC_CNF and asynchronous return status is indicated by #TelSsCause_t. The event data - * is #TelSsErrorInfo_t. + * @details The unstructured supplementary service data (USSD) mechanism allows the Mobile Station (MS) user and + * a PLMN operator defined application to communicate in a way which is transparent + * to the MS and the intermediate network entities. + * The mechanism allows development of PLMN specific supplementary services. + * A USSD string is like *109, *109*72348937857623#. + * There are two modes of USSD: The MMI-mode and the application mode. + * The MMI-mode USSD is for the transparent transport of MMI strings entered by the user to the network using this function + * and for the transparent transport of text strings from the network that are displayed + * by the mobile for user information. + * The application mode USSD is for the transparent transport of data between the network and the UE. + * The application mode USSD is intended to be used by applications in the network and their peer applications in the UE. * - * @pre - * - Advice of charge depends on the SIM for setting or reading AOC parameters. - * - Setting of AOC needs PIN2 Verification + * If this function is called normally, the asynchronous response comes in a few seconds from the telephony server. + * The response indicates whether the sending request is successfully delivered or not. * - * @post - * - None. + * This API makes a Dbus method call to the Telephony Server and gets an immediate feedback. + * However it just means that the API request has been transfered to the CP successfully. + * The actual operation result is delivered with the async response as below: * - * @return Return Type (int) \n - * - TAPI_API_SUCCESS - indicating that the operation has completed successfully. \n - * - Refer #TapiResult_t for failure and error code + * Sync (or) Async: This is an Asynchronous API. * - * @par Prospective Clients: - * External Apps. + * Prospective Clients: External Apps. * - * \see tel_get_ss_aoc_info + * @since_tizen 2.3 + * @privlevel platform + * @privilege %http://tizen.org/privilege/telephony.admin * - *\image html ussd.jpg - *\image latex ussd.jpg - * @code - * #include + * @param[in] handle The handle from tel_init() * - * TelCallAocInfo_t *pAocSetInfo; - * int request_id=0; - * pAocSetInfo = (TelCallAocInfo_t *)calloc(1,sizeof(TelCallAocInfo_t)); - * pAocSetInfo->AocType = TAPI_SS_AOC_TYPE_RESET; - * int ret_status =0; + * @param[in] info The data coding scheme used (GSM 7bit or 8bit default alphabet etc, defined as 3GPP TS 23.038), USSD String data length, ANSI string passed by the client * - * ret = tel_set_ss_aoc_info (pAocSetInfo,&request_id); // set aoc info - * @endcode + * @param[in] callback To register a callback function for result * + * @param[in] user_data The user data for user specification * - * @remarks - * - None + * @return The return type (int) \n + * #TAPI_API_SUCCESS - indicates that the operation is completed successfully. \n + * Refer #TapiResult_t for failure and error code * + * @pre Initialize the Dbus connection with #tel_init.\n + * Register the telephony event to be listend with #tel_register_noti_event.\n + * An event loop runs to listen to events. + * No SS and USSD transaction should be ongoing. If there is an ongoing transaction, a new USSD request will be returned to the application with an error (USSD_BUSY). * */ -/*================================================================================================*/ -int tel_set_ss_aoc_info(TapiHandle *handle, TelCallAocInfo_t *AocSetInfo, tapi_response_cb callback, void *user_data); +int tel_send_ss_ussd_request(TapiHandle *handle, const TelSsUssdMsgInfo_t *info, tapi_response_cb callback, void *user_data); #ifdef __cplusplus } @@ -998,5 +517,5 @@ int tel_set_ss_aoc_info(TapiHandle *handle, TelCallAocInfo_t *AocSetInfo, tapi_r #endif /* _ITAPI_SS_H_ */ /** -* @} -*/ + * @} + */ diff --git a/include/SLP_TelephonyFW_PG.h b/include/SLP_TelephonyFW_PG.h deleted file mode 100644 index 0d0ea5a..0000000 --- a/include/SLP_TelephonyFW_PG.h +++ /dev/null @@ -1,9600 +0,0 @@ -/* - * libslp-tapi - * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: Ja-young Gu - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @ingroup SLP_PG - * @defgroup TELEPHONY Telephony -@{ - -

Introduction

-

Purpose

-The purpose of this document is to describe how applications can use Telephony Framework APIs. This document gives programming guidelines to application engineers. - -

Scope

-The scope of this document is limited to Samsung Linux platform Telephony Framework API usage. - -

Abbreviations

- - - - - - - - - -
OEMOriginal Equipment Manufacturer
RPCRemote Procedure Call
SAPSim Access Profile
SATSIM Application Toolkit
SIMSubscriber Identity Module
SVCService
TAPITelephony API
EFLEnlightenment Foundation Libraries
- -

Restriction Modules

-CALL, SMS, GPRS, SAT have the permission. Refer to each module API description -@} -@defgroup Telephony_Architecture 1.Architecture -@ingroup TELEPHONY -@{ -

Telephony Framework Architecture

-@image html SLP_TelephonyFW_PG_image001.png - -@image html SLP_TelephonyFW_PG_image002.png System Architecture of Telephony Framework - -Telephony is a middleware component which acts as an interface layer between applications and the OEM. -@n Telephony Framework provides interfaces to applications in the form of a library and to the OEM providers in the form of OEM plug-in. -@n The applications make use of the library of exported APIs, which uses a RPC mechanism for making telephony service requests. -@n On the other side, OEM-Plug-in library is the OEM layer, which is the wireless protocol stack specific implementation. This layer acts as a plug-in giving flexibility for any wireless protocol stack to be used avoiding any changes to be made in the Telephony clients. -@n Telephony has certain synchronous and asynchronous exported APIs. Synchronous APIs provide data as the function parameter passed to Telephony. Asynchronous APIs provide data using an event based mechanism. -@image html SLP_TelephonyFW_PG_image003.png Asynchronous service request (response Use-Case Diagram) -@image html SLP_TelephonyFW_PG_image003.png Synchronous service request (response Use-Case Diagram) -@} -@defgroup Telephony_Feature 2.SubModules & Services -@ingroup TELEPHONY -@{ - -

Telephony Framework SubModules & Services

-

Call & Call-dependent SS

- Also see Use Cases of @ref Use_Cases2_CALL -- Initiate, accept, reject and end calls. -- Call supplementary service ( Hold,CLI, Multiparty, Call Waiting, Forwarding, Barring) -- Get Call Time, Status, Duration, Conference List -- Get and Set Active Line -- Retrieve, swap, and transfer call. -- For CDMA - - Call Flash Information - - Get and Set voice privacy mode - -

SMS

- Also see Use Cases of @ref Use_Cases4_SMS -SMS service in Telephony Framework only provides the interface to the modem and doesn’t handle Transport layer, storing and deleting the SMS in the storage except SIM. We recommend you use MAPI of Message Framework. -- Send, save, receive, read and delete network texts. -- Receive Cell-Broadcast Message. -- Set and Get Cell broadcast configuration. -- Set message status, memory status. -- Set and Get sms parameters - -

Supplementary Service

-- Interrogation and activation for Call Barring, forwarding and waiting. -- USSD services, AOC Services. - -

Network Registration/Configuration

-- Search and Select Network. -- Set and Get Selection Mode, Service Domain, network Mode and Band. -- Get Network information. -- For CDMA - - Get and Set CDMA Hybrid Mode - - Get and Set Roaming Mode, Preferred PLMN - -

SIM

-- Handling SIM security procedure (PIN, PUK). -- Get / Update / Delete SIM EF files. -- Support 2G/3G Phonebook data. -- SIM Lock Personalisation enable or disable -- SIM lock enable or disable -- SAP - -

SAT (SIM Application Tool Kit)

-- Get main menu information from the SIM application -- Send envelope commands to the SIM application -- Send the execution results of which the SIM application requests to applications -- Send UI / User confirmation to the SIM application - -

Sound

-Sound that is related with voice call is used to control modem configuration -- Sound user configuration -- Voice path control -- Volume control -- Mic mute control - -

Common

- -- TAPI initialization & De-initialization -- Register, Deregister event -- TAPI Initialization & De-initialization for Ecore -- Register, Deregister Ecore event -- Request Connection name - -@} - -

Feature Description

-

COMMON

- -@defgroup Use_Cases1_1 TAPI Initialization -@ingroup Use_Cases1_COMMON -@{ -

TAPI Initialization

-This API shall be used to initialize the TAPI library. This API internally performs initialization routines related to Event delivery. -@n This API should be called before any other TAPI APIs. This API should be used by GTK/Glib applications. - -@code -int tel_init (void); -@endcode - -SAMPLE CODE -@code -#include -#include -#include - -void tapiinit() -{ - int api_err; - - api_err = tel_init(); - if (api_err != TAPI_API_SUCCESS) - { - printf ("tel_init Failed - api_err = %d\n", api_err); - } -} -@endcode -@} -@defgroup Use_Cases1_2 TAPI De-initialization -@ingroup Use_Cases1_COMMON -@{ -

TAPI De-initialization

-This API shall be used to de initialize the Tapi library. -@n It shall perform the deinitializing routines related to event delivery. -@n The API shall be called finally, as a part of clean up routines. This API should be used by GTK/Glib applications. - -@code -int tel_deinit (void); -@endcode - -SAMPLE CODE -@code -#include -#include -#include - -void tapideinit() -{ - int api_err; - - api_err = tel_deinit(); - if (api_err != TAPI_API_SUCCESS) - { - printf ("tel_deinit Failed - api_err = %d\n", api_err); - } -} -@endcode -@} -@defgroup Use_Cases1_3 Register Event -@ingroup Use_Cases1_COMMON -@{ - -

Register Event

-API is used to register the callback function for a specific TAPI Event. Upon successful registration of the event, the function shall return a valid subscription id. - -If Application registers multiple callbacks for a specific event, then all the callbacks will be called when an event indication is received. -@n This API should be used by GTK/Glib applications. - -@code -int tel_register_event (int EventType , unsigned int * SubscriptionId, TelAppCallback AppCallBack); -@endcode - -SAMPLE CODE -@code -#include -#include -#include - -void app_callback(TelTapiEvent_t *event); - -// REGISTER EVENT -void registerevent() -{ - unsigned int subscription_id = 0; - int api_err; - - api_err = tel_init(); - if (api_err != TAPI_API_SUCCESS) - { - printf ("tel_init Failed - api_err = %d\n", api_err); - } - - api_err = tel_register_event (TAPI_EVENT_CALL_SETUP_CNF, &subscription_id, (TelAppCallback)&app_callback); - - printf("MISC Event registeration is Done: sub id is %d, api_err is %d\n", subscription_id, api_err); - - tel_register_app_name("com.samsung.appname"); -} - -void app_callback(TelTapiEvent_t *event) -{ - //Callback function to be called -} -@endcode -@} - -@defgroup Use_Cases1_4 Deregister Event -@ingroup Use_Cases1_COMMON -@{ - -

Deregister Event

-API shall de-register the pre-registered TAPI event and the associated application callback, based on the subscription id. -@n This identifier is the same as the subscription identifier returned to the application during the TAPI registration procedure. If the de-register API is called during any service requests, the registered callback will be cleared based on the subscription id. No application callback shall be called when any confirmation/indication events are received after de-registration. -@n This API should be used by GTK/Glib applications. - -@code -int tel_deregister_event ( unsigned int SubscriptionId); -@endcode - -SAMPLE CODE -@code -#include -#include -#include - -void app_callback(TelTapiEvent_t *event); - -void registerevent() -{ - unsigned int subscription_id = 0; - int api_err; - - api_err = tel_init(); - if (api_err != TAPI_API_SUCCESS) - { - printf ("tel_deregister_event Failed - api_err = %d\n", api_err); - } - - // REGISTER EVENT - api_err = tel_register_event (TAPI_EVENT_CALL_SETUP_CNF, &subscription_id, (TelAppCallback)&app_callback); - printf("MISC Event registeration is Done: sub id is %d, api_err is %d\n",subscription_id,api_err); - - tel_register_app_name("com.samsung.appname"); - - // DEREGISTER EVENT - api_err = tel_deregister_event (subscription_id); - if (api_err != TAPI_API_SUCCESS) - { - printf("Event Deregistration Failed\n"); - } -} - -void app_callback(TelTapiEvent_t *event) -{ - // callback function to be called -} -@endcode -@} - - -@defgroup Use_Cases1_5 TAPI Ecore Initialization -@ingroup Use_Cases1_COMMON -@{ - -

TAPI Ecore Initialization

-This API shall be used by Ecore based applications, to initialize TAPI library. This API internally performs event delivery related initialization routines. This API shall be called before any other TAPI APIs. -@n This API is for applications using Ecore library. - -@code -int tel_init_ecore_loop (void); -@endcode - -SAMPLE CODE -@code -#include -#include -#include - -void tapiinitecore() -{ - int api_err; - - api_err = tel_init_ecore_loop(); - if (api_err != TAPI_API_SUCCESS) - { - printf("tel_init_ecore_loop Failed - api_err = %d\n", api_err); - } -} -@endcode - -5

TAPI Ecore De-Initialization

-API shall be used to de-initialize the TAPI library. It shall be used by Ecore based applications. -@n This API shall be called finally, as a part of cleanup routine. This API is for applications using Ecore library. - -@code -int tel_deinit_ecore_loop (void); -@endcode - -SAMPLE CODE -@code -#include -#include -#include - -void tapideinitecore() -{ - int api_err; - - api_err = tel_deinit_ecore_loop(); - if (api_err != TAPI_API_SUCCESS) - { - printf("tel_deinit_ecore_loop Failed - api_err = %d\n", api_err); - } -} -@endcode -@} - -@defgroup Use_Cases1_6 TAPI RegisterEvent Ecore -@ingroup Use_Cases1_COMMON -@{ - -

TAPI RegisterEvent Ecore

-API shall be used to register for TAPI events (for application that use EFL). -@n Upon successful registration of the event, the API shall return a valid subscription id. -@n If Application registers multiple callbacks for a specific event, then all the callbacks will be called when an event indication is received -@n This API is for applications using Ecore library. - -@code -int tel_register_event_at_ecore_loop(int EventType, unsigned int * SubscriptionId, TelAppCallback AppCallBack); -@endcode - -SAMPLE CODE -@code -#include -#include -#include - -void app_callback(TelTapiEvent_t *event); - -void registereventecore() -{ - int api_err; - unsigned int subscription_id = 0; - - api_err = tel_register_event_at_ecore_loop (TAPI_EVENT_CALL_SETUP_CNF, &subscription_id, (TellAppCallback)&app_callback); - if (api_err != TAPI_API_SUCCESS) - { - printf ("tel_register_event_at_ecore_loop Failed - api_err = %d \n", api_err); - } - printf("RegisterEventEcore done with subscription_id:%d and return Status:%d\n", subscription_id, api_err); - - tel_register_app_name("com.samsung.appname"); -} - -void app_callback(TelTapiEvent_t *event) -{ - //Callback function to be called -} -@endcode -@} - - -@defgroup Use_Cases1_7 TAPI DeRegisterEvent Ecore -@ingroup Use_Cases1_COMMON -@{ - -

TAPI DeRegisterEvent Ecore

-API shall de-register the pre-registered TAPI event and the associated application callback, based on the subscription id. -@n This identifier is the same as the subscription identifier returned to the application during the TAPI registration procedure. -@n If the de-register API is called during any service requests, the registered callback will be cleared based on the subscription id. No application callback shall be called when any confirmation/indication events are received after de-registration. -@n This API is for applications based on Ecore library. - -@code -int tel_deregister_event_at_ecore_loop (unsigned int SubscriptionId); -@endcode - -SAMPLE CODE -@code -#include -#include -#include - -Void deregistereventecore() -{ - int api_err; - unsigned int subscription_id = 0; - - // REGISTER EVENT - api_err = tel_register_event_at_ecore_loop (TAPI_EVENT_CALL_SETUP_CNF, &subscription_id, (TellAppCallback)&app_callback); - printf("RegisterEventEcore done with subscription_id:%d and return Status:%d\n", subscription_id, api_err); - - tel_register_app_name("com.samsung.appname"); - - // DEREGISTER EVENT - api_err = tel_deregister_event_at_ecore_loop (subscription_id); - if (api_err != TAPI_API_SUCCESS) - { - printf("tel_deregister_event_at_ecore_loop Failed - api_err = %d\n", api_err); - } -} -@endcode -@} - -@defgroup Use_Cases1_8 Register Application Name -@ingroup Use_Cases1_COMMON -@{ - -

Register Application Name

-This function registers the application name which requests any telephony service. Telephony Server uses this name as the destination name of response message upon the service request. If the name is not set, the request will fails. Before an application invoke this function, it shall initialize a connection to Telephony Sever with #tel_init or #tel_init_ecore_loop. And the application name shall be registered prior to start a event loop. - -@code -int tel_register_app_name(char *name) -@endcode - -SAMPLE CODE -@code -#include -#include -#include - -Void register_app_name() -{ - tel_init(); - //register telephony event - tel_register_event(...); - //... - tel_register_app_name("com.samsung.appname"); - GMainLoop *loop = g_main_loop_new(NULL, false); - g_main_loop_run(loop); -} -@endcode -@} - -@defgroup Use_Cases1_9 Get Application Name -@ingroup Use_Cases1_COMMON -@{ - -

Get Application Name

-This function get the application name which was registered with #tel_register_application_name. - -@code -int tel_get_app_name(tapi_dbus_connection_name *app_name) -@endcode - -SAMPLE CODE -@code -#include -#include - -void get_app_name() -{ - tapi_dbus_connection_name app_name; - tel_get_app_name(&app_name); - printf("app_name = %s\n", app_name.name); -} -@endcode -@} -@defgroup Use_Cases1_10 TAPI Check service ready -@ingroup Use_Cases1_COMMON -@{ - -

TAPI Check service ready

-API is used to get the modem status i.e. whether modem is on or off. - -@code -int tel_check_service_ready (int* bStatus) -@endcode - -SAMPLE CODE: -@code -#include -#include - -void getmodemstatus() -{ - int bStatus = 0; - int err_code; - - err_code = tel_check_service_ready(&bStatus); - if (err_code != TAPI_API_SUCCESS) { - printf("Error Code [%x]\n", err_code); - } - else { - if (bStatus == 0) - printf("Telephony Service Not Ready"; - else if (bStatus == 1) - printf("Telephony Service Ready"; - } -} -@endcode -@} - - -

CALL

- -@defgroup Use_Cases2_1 Event Register and Deregister -@ingroup Use_Cases2_CALL -@{ - -

Event Register and Deregister

-To receive asynchronous event notifications for the call APIs, the registration of related events with their associated call backs is required. After these are registered, when an asynchronous API is called, the confirmation is returned as an asynchronous event notification which invokes the callback function along with the event data. - -SAMPLE CODE: -@code -// REGISTER EVENT -int api_err; -unsigned int subscription_id = 0; - -api_err = tel_init(); -if (api_err != TAPI_API_SUCCESS) -{ - printf("tel_init Failed - api_err = %d \n", api_err); -} - -api_err = tel_register_event (TAPI_EVENT_CALL_CALL_SETUP_CNF, &subscription_id, (TelAppCallback)&app_callback); -printf("VOICE CALL Event registration is Done: sub id is %d, api_err is %d\n",subscription_id,api_err); - -tel_register_app_name("com.samsung.appname"); - -// DEREGISTER EVENT -api_err = tel_deregister_event (subscription_id); -if (api_err != TAPI_API_SUCCESS) -{ - printf("Event Class Unregistration Fail\n"); -} -@endcode -@} - -@defgroup Use_Cases2_2 Call Setup -@ingroup Use_Cases2_CALL -@{ - -

Call Setup

-This API originates an MO call setup. - -@code -int tel_exe_call_mo _t (const TelCallSetupParams_t* const pParams, unsigned int * pCallHandle, int * pRequestID); -@endcode - -On success, this API returns a valid call handle and the request ID as out parameters. -@n The MO call setup procedure continues in background. There are multiple states involved in the call setup procedure. Upon completion of the setup request, the event notifications and associated event data are sent to the client, based on the indication or response received by the Telephony Server. - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void callsetup() -{ - int ret_status; - int pRequestID = 0; - unsigned int pCallHandle; - TelCallSetupParams_t pParams; - char normal[16] = "1234"; //Called party number - - memset(&pParams, 0, sizeof(TelCallSetupParams_t)); - pParams.CallType = TAPI_CALL_TYPE_VOICE; - strcpy(pParams.szNumber, normal); - - ret_status = tel_exe_call_mo (&pParams, &pCallHandle, &pRequestID); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); //WAIT FOR EVENT HERE -} - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - unsigned int temp_handle = 0; - - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d]\n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - switch (eventType) - { - case TAPI_EVENT_CALL_SETUP_CNF: - printf("TAPI_EVENT_CALL_SETUP_CNF"); - memcpy(&temp_handle, EventData, sizeof(unsigned int)); - TEST_DEBUG("Received setup cnf for call Handle [%d]", temp_handle); - - break; - - case TAPI_EVENT_CALL_ALERT_IND: - int index; - TEST_DEBUG("TAPI_EVENT_CALL_ALERT_IND"); - memcpy(&temp_handle, event->pData, sizeof(unsigned int)); - TEST_DEBUG("Received Alert for call Handle [%d]", temp_handle); - break; - - case TAPI_EVENT_CALL_CONNECTED_IND: - int index; - TEST_DEBUG("TAPI_EVENT_CALL_CONNECTED_IND"); - memcpy(&temp_handle, event->pData, sizeof(TS_UINT)); - TEST_DEBUG("Received Connected Event for call Handle [%d]", temp_handle); - break; - } - //... -} -@endcode -@} -@defgroup Use_Cases2_3 Call Answer -@ingroup Use_Cases2_CALL -@{ - -

Call Answer

-This API responds to an incoming call either by accepting or rejecting the call. - -Pre Conditions: -@n Call associated with the call handle should be in TAPI_CALL_STATE_INCOM state. -@n There should be no more than one existing call. - -@code -int tel_answer_call (unsigned int CallHandle,TelCallAnswerType_t AnsType, int * pRequestID); -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - -void callsetup(unsigned int CallHandle) -{ - int ret_status; - int pRequestID = 0; - - ret_status = tel_answer_call (CallHandle, &pRequestID); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); //WAIT FOR EVENT HERE -} - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - //.. - switch (eventType) //REFER Call Setup TO GET eventType - { - //GET CALL HANDLE FROM INCOMING CALL EVENT DATA - case TAPI_EVENT_CALL_INCOM_IND: - unsigned int CallHandle; - TelCallIncomingCallInfo_t IncomingInfo; - memcpy(&IncomingInfo, event->pData, sizeof(TelCallIncomingCallInfo_t)); - CallHandle = IncomingInfo.CallHandle; - break; - - case TAPI_EVENT_CALL_ANSWER_CNF: - memcpy(&CallHandle, event->pData, sizeof(unsigned int)); - printf("TAPI_EVENT_CALL_ANSWER_CNF\n"); - break; - } - //.. -} -@endcode -@} -@defgroup Use_Cases2_4 Call Release -@ingroup Use_Cases2_CALL -@{ - -

Call Release

-This API is used to release the call. -@n The call to be released can be a single call based on the call handle, or all active calls or all calls. - -Pre Conditions: -@n Call handle should be valid and there should be an existing call in Active/hold state. - -@code -int tel_release_call (unsigned int CallHandle, int * pRequestID); -int tel_release_call_all (int * pRequestId); -int tel_release_call_all_active (int *pRequestID); -int tel_release_call_all_held (int *pRequestID); -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - -void callrelease(unsigned int CallHandle) -{ - int ret_status; - int pRequestID = 0; - - ret_status = tel_release_call (CallHandle, &pRequestID); - //OR - ret_status = tel_release_call_all (&pRequestID); - //OR - ret_status = tel_release_call_all_active (&pRequestID); - //OR - ret_status = tel_release_call_all_held (&pRequestID); - - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); -} //WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback(TelTapiEvent_t *event) -{ - //... - switch (eventType) //REFER Call Setup TO GET eventType - { - //GET CALL HANDLE FROM INCOMING CALL EVENT DATA - case TAPI_EVENT_CALL_INCOM_IND: - TelCallIncomingCallInfo_t IncomingInfo; - memcpy(&IncomingInfo, event->pData, sizeof(TelCallIncomingCallInfo_t)); - CallHandle = IncomingInfo.CallHandle; - break; - - case TAPI_EVENT_CALL_RELEASE_CNF: - case TAPI_EVENT_CALL_RELEASE_ALL_CNF: - case TAPI_EVENT_CALL_RELEASE_ALL_ACTIVE_CNF: - case TAPI_EVENT_CALL_RELEASE_ALL_HELD_CNF: - case TAPI_EVENT_CALL_END_IND_IND: - unsigned int handle; - memcpy(&handle, event->pData, sizeof(unsigned int)); - printf("TAPI_EVENT_CALL_RELEASE_CNF\n"); - break; - //... - } -} -@endcode -@} -@defgroup Use_Cases2_5 Call Hold -@ingroup Use_Cases2_CALL -@{ - -

Call Hold

-This API puts the specified call on hold. The call identified by Call Handle should be in the active state. - -@code -int tel_hold_call (unsigned int CallHandle, int * pRequestID); -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void callhold(unsigned int CallHandle) -{ - int ret_status; - int pRequestID = 0; - - ret_status = tel_hold_call(CallHandle, &pRequestID); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); -} //WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - //.. - switch (eventType) //REFER Call Setup TO GET eventType - { - case TAPI_EVENT_CALL_HOLD_CNF: - unsigned int CallHandle; - memcpy(&CallHandle, event->pData, sizeof(unsigned int)); - printf("TAPI_EVENT_CALL_HOLD_CNF\n"); - break; - //... - } - //... -} -@endcode -@} -@defgroup Use_Cases2_6 Call Retrieve -@ingroup Use_Cases2_CALL -@{ - -

Call Retrieve

-This API can be used to retrieve a held call. - -Pre Conditions: -@n Call should be in held state in order to return to the active state, and no other call should be active. - -@code -int tel_retrieve_call (unsigned int CallHandle, int * pRequestID); -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" - - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void callretrieve(unsigned int CallHandle) -{ - int ret_status; - int pRequestID=0; - - ret_status = tel_retrieve_call(CallHandle, &pRequestID); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); -} //WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback(TelTapiEvent_t *event) -{ - //.. - switch (eventType) //REFER Call Setup TO GET eventType - { - case TAPI_EVENT_CALL_HOLD_CNF: - unsigned int CallHandle; - memcpy(&CallHandle, event->pData, sizeof(unsigned int)); - printf("TAPI_EVENT_CALL_HOLD_CNF\n"); - break; - - case TAPI_EVENT_CALL_RETRIEVE_CNF: - unsigned int CallHandle; - memcpy(&CallHandle, event->pData, sizeof(unsigned int)); - printf("TAPI_EVENT_CALL_RETRIEVE_CNF "); - break; - } - //... -} -//... -@endcode -@} -@defgroup Use_Cases2_7 Call Swap -@ingroup Use_Cases2_CALL -@{ - -

Call Swap

-This API can be used to swap calls. This feature is only available for the calls that have been setup and answered using the Telephony service. The swap functionality is only available for voice calls. - -Pre Conditions: -@n Two calls should be present, one of them in the Active state and the other in the held state - -@code -int tel_swap_call (unsigned int CallHandle1, const TS_UINT CallHandle2, int * pRequestID); -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - -void callswap(unsigned int CallHandle1, unsigned int CallHandle2) -{ - int ret_status; - int pRequestID = 0; - - ret_status = tel_swap_call(CallHandle1, CallHandle2, &pRequestID); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - //.. -} //WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - //.. - switch (eventType) //REFER Call Setup TO GET eventType - { - case TAPI_EVENT_CALL_SWAP_CNF: - printf("TAPI_EVENT_CALL_RETRIEVE_CNF\n"); - break; - } - //.. -} -//.. -@endcode -@} -@defgroup Use_Cases2_8 Send DTMF -@ingroup Use_Cases2_CALL -@{ - -

Send DTMF

-This API can be used for sending one or more DTMF digits during the call. - -Pre Conditions: -@n Active call should be present. - -@code -int tel_send_call_dtmf (char const * const pDtmfString, int * pRequestID); -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void senddtmf() -{ - int ret_status; - int pRequestID = 0; - char DtmfString[10]; - - strcpy(DtmfString, "123456789"); //Sample DTMF digits that need to be sent - - ret_status = tel_send_call_dtmf(DtmfString, &pRequestID); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); -} -//WAIT FOR EVENT HERE -static void app_callback(TelTapiEvent_t *event) -{ - //.. - switch (eventType) //REFER Call Setup TO GET eventType - { - case TAPI_EVENT_CALL_SEND_DTMF_CNF: - printf("TAPI_EVENT_CALL_SEND_DTMF_CNF\n"); - break; - } - //.. -} -@endcode -@} -@defgroup Use_Cases2_9 Call Join -@ingroup Use_Cases2_CALL -@{ - -

Call Join

-This API joins the specified two calls (one call which is in the active state and other call which is in the held state) into a conference call. - -Pre Conditions: -@n For a Multiparty call or for joining two calls into conference, there should be one call in active state and another call in held state. - -@code -int tel_join_call (unsigned int CallHandle1, const unsigned int CallHandle2,int * pRequestID); -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void calljoin(unsigned int CallHandle1, unsigned int CallHandle2) -{ - int ret_status; - int pRequestID = 0; - - ret_status= tel_join_call(CallHandle1, CallHandle2, &pRequestID); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); -} //WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - //.. - switch (eventType) //REFER Call Setup TO GET eventType - { - case TAPI_EVENT_CALL_SETUPCONFERENCE_CNF: - unsigned int temp_handle; - memcpy(&temp_handle, event->pData, sizeof(unsigned int)); - printf("TAPI_EVENT_CALL_SETUPCONFERENCE_CNF "); - break; - } - //.. -} -@endcode -@} -@defgroup Use_Cases2_10 Call Split -@ingroup Use_Cases2_CALL -@{ - -

Call Split

-This API triggers the split of a single call from multiparty call. This can be used for creating a private communication with one of remote parties in a multiparty session. -@n TAPI client application has to pass the call handle which should be split from the multiparty call. - -Pre Conditions: -@n Call should be in multiparty conference call. - -Post Conditions: -@n Split call will be the active call and the conference will be held call. - -@code -int tel_split_call (unsigned int CallHandle, int * pRequestID); -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void callsplit(unsigned int CallHandle) -{ - int ret_status; - int pRequestID = 0; - - ret_status = tel_split_call(CallHandle, &pRequestID); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); -}//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - //.. - switch (eventType) //REFER Call Setup TO GET eventType - { - case TAPI TAPI_EVENT_CALL_SPLITCONFERENCE_CNF: - unsigned int temp_handle; - memcpy(&temp_handle, event->pData, sizeof(unsigned int)); - printf("TAPI_EVENT_CALL_SPLITCONFERENCE_CNF "); - break; - } - //.. -} -@endcode -@} -@defgroup Use_Cases2_11 Active Line -@ingroup Use_Cases2_CALL -@{ - -

Active Line

-[Note] Telephony Emulator does not support this feature. -@n Telephony provides APIs for setting and getting the current calling line identification number. - -@code -int tel_set_call_act_line const TelCallActiveLine_t active_line, int * pRequestID); -int tel_get_call_act_line ( int * pRequestID); -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -//SET ACTIVE LINE -void activeline() -{ - int ret_status; - int pRequestID = 0; - TelCallActiveLine_t g_curLine = TAPI_CALL_ACTIVE_LINE1; - TelCallActiveLine_t active_line; - - printf (" Set Active Line with TAPI_ACTIVE_LINE1."); - - ret_status = tel_set_call_act_line (g_curLine, &pRequestID); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - - //GET ACTIVE LINE - ret_status = tel_get_call_act_line (&pRequestID); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - //.. -} - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - //.. - switch (eventType) //REFER Call Setup TO GET eventType - { - case TAPI_EVENT_CALL_SET_LINEID_CNF: - //TEST_DEBUG("Received TAPI_EVENT_CALL_SET_LINEID_CNF"); - //AUTO_LOG("EVENT: SET_LINEID_CNF:"); - break; - - case TAPI_EVENT_CALL_GET_LINEID_CNF: - TelCallActiveLine_t active_line; - memcpy(&active_line, event->pData, sizeof(TelCallActiveLine_t)); - TEST_DEBUG("Received TAPI_EVENT_CALL_GET_LINEID_CNF"); - break; - } - //.. -} -@endcode -@} -@defgroup Use_Cases2_12 Call transfer -@ingroup Use_Cases2_CALL -@{ - -

Call transfer

-This API triggers an explicit call transfer by connecting two parties, one of which is in the active state with the other in the held state. - -Pre Conditions: -@n In order to call transfer, 2 calls should be present. One in the active state and the other in the Held state. - -Post Conditions: -@n When the request has been completed successfully, Call end indication will be sent to both the calls (active and held). - -@code -int tel_exe_call_explicit_transfer (unsigned int CallHandle, int * pRequestID); -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void calltransfer(unsigned int CallHandle) -{ - int ret_status; - int pRequestID = 0; - - ret_status = tel_exe_call_explicit_transfer (CallHandle, &pRequestID); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); -}//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - //.. - switch (eventType) //REFER Call Setup TO GET eventType - { - case TAPI_EVENT_CALL_TRANSFER_CNF: - unsigned int temp_handle = 0; - memcpy(&temp_handle, event->pData, sizeof(unsigned int)); - printf("TAPI_EVENT_CALL_TRANSFER_CNF. "); - break; - } - //.. -} -@endcode -@} -@defgroup Use_Cases2_13 Get Call Status -@ingroup Use_Cases2_CALL -@{ - -

Get Call Status

-When call status is requested by the application, this API gets the status of the call associated with the input Call Handle. Call status information consists of destination number, call direction (MO or MT), call type (voice or data etc), multiparty state (whether the call is in conference state or not) and present call state. -@n Call handle must be valid. - -@code -int tel_get_call_status (unsigned int CallHandle, TelCallStatus_t * pCallStatus) -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -void getcallstatus(unsigned int CallHandle) -{ - int ret_status; - TelCallStatus_t callStatus; - - ret_status = tel_get_call_status(CallHandle, &callStatus); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - printf("CallNumber: %s\n", callStatus.pNumber); - printf("Is Mobile Originated:%d n\t CallType : %d \n\t CallActiveState: %d\n\t CallState : %d\n\t isConferenceState:%d \n", - callStatus.bMoCall, - callStatus.CallType, - callStatus.CallActiveState, - callStatus.CallState, - callStatus.bConferenceState); - } - else { - printf("error=%d\n", ret_status); - } -} -@endcode -@} -@defgroup Use_Cases2_14 Get Call Duration -@ingroup Use_Cases2_CALL -@{ - -

Get Call Duration

-This API gets the duration of the specified call. -@n This is a synchronous API. Duration is timed from the moment the connection is established, i.e. call goes into active state for first time. The total call duration is provided in seconds, from the call connecting time to the current time. - -@code -int tel_get_call_duration unsigned int CallHandle, unsigned int * pDurationInSecs); -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -void getcallduration(unsigned int CallHandle) -{ - int ret_status; - unsigned int duration; - - ret_status = tel_get_call_duration (CallHandle, &duration); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - printf("Call Duration : %d Seconds\n", duration); - } - else { - printf("error=%d\n", ret_status); - } -} -@endcode -@} -@defgroup Use_Cases2_15 Get Call Conference List -@ingroup Use_Cases2_CALL -@{ - -

Get Call Conference List

-This is a synchronous API which returns information about all the call handles and the total number of call handles, within the specified conference call. - -Pre Conditions: -@n Call should be a multi-party conference call in order to return actual number of calls and call handles in the conference call. - -@code -int tel_get_call_conf_list(unsigned int CallHandle, unsigned int * pCallList, int * pNoOfCalls); -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -void getconferencelist(unsigned int CallHandle) -{ - int ret_status ; - unsigned int callList[5]; - int noOfCalls; - - ret_status = tel_get_call_conf_list(CallHandle, callList, &noOfCalls); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - printf("\n No.of Calls %d, \n", noOfCalls); - for (i = 0; i < noOfCalls; i++) - { - printf("\n Call Handle in conference calls %d \n", callList[i]); - } - } - else { - printf("error=%d\n", ret_status); - } -} -@endcode -@} -@defgroup Use_Cases2_16 Voice Privacy Mode -@ingroup Use_Cases2_CALL -@{ - -

Voice Privacy Mode

-Telephony provides two APIs which can be used to set and get the CDMA voice privacy mode . - -@code -int tel_get_call_privacy_mode (TelCallVoicePrivacyInfo_t PrivacyInfo, int *pRequestID); -int tel_set_call_privacy_mode (TelCallPrivacyType_t PrivacyType, int *pRequestID); -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - -//SetVoicePrivacyMode -void setvoiceprivacymode() -{ - int ReqId = -1; - int ret_status = -1; - int api_err; - TelCallPrivacyMode_t PrivacyMode_info; - - pPrivacyMode_info = TAPI_CALL_PRIVACY_MODE_STANDARD; - - ret_status = tel_set_call_privacy_mode (pPrivacyMode_info, &reqId); - if (ret_status == TAPI_API_SUCCESS) - printf("Successful\n"); - else - printf("error:%d\n", ret_status); -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED - -bool call_app_callback (TelTapiEvent_t *Event) -{ - int ret = -1; - int eventClass = Event->EventClass; - int eventType = Event->EventType; - int RequestId = Event->RequestId; - int Status = Event->Status; - - if (eventClass == TAPI_EVENT_CLASS_CALL_VOICE) - { - switch (eventType) { - case TAPI_EVENT_CALL_SET_PRIVACYMODE_CNF: - if (RequestId != reqId) { - printf("Invalid RequestID received %d \n", reqId); - return false; - } - - if (Status != TAPI_CAUSE_SUCCESS) { - printf("Invalid Status value received"); - return false; - } - break; - } - } -} - -//GetVoicePrivacyMode -void getprivacymode() -{ - Int ReqId = -1; - int ret_status = -1; - int api_err; - TelCallPrivacyType_t privacyType; - - privacyType = TAPI_CALL_PRIVACY_TYPE_MS; - - ret_status = tel_get_call_privacy_mode (privacyType, &req_id); - if (ret_status == TAPI_API_SUCCESS) - printf("Successful\n"); - else - printf("error:%d\n", ret_status); -} - -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED - -bool call_app_callback (TelTapiEvent_t *Event) -{ - int ret = -1; - int eventClass = Event->EventClass; - int eventType = Event->EventType; - int RequestId = Event->RequestId; - int Status = Event->Status; - - if (eventClass == TAPI_EVENT_CLASS_CALL_VOICE) - { - switch (eventType) { - case TAPI_EVENT_CALL_GET_PRIVACYMODE_CNF: - TelCallVoicePrivacyInfo_t vp_info; - memcpy(&vp_info, event->pData, sizeof(TelCallVoicePrivacyInfo_t)); - if (Status != TAPI_CAUSE_SUCCESS) - { - printf("Invalid Status value received"); - return false; - } - break; - } - } -} -@endcode -@} -@defgroup Use_Cases2_17 Call FlashInformation -@ingroup Use_Cases2_CALL -@{ - -

Call FlashInformation

-The user makes an additional outgoing call in CDMA, this API is used instead of the CALL Outgoing API because there is no additional voice call transaction in CDMA. So the voice call id is only one in CDMA. The multiparty call is not supported in CDMA. - -@code -int tel_exe_call_flash_info (const char* pDialNumber, int *pRequestID); -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -//CallFlashInfo -void callflashinfo() -{ - int ret_status = -1; - int api_err; - const char *pDialNumber = "9999900000"; - - ret_status = tel_exe_call_flash_info(pDialNumber, &reqId); - if (ret_status == TAPI_API_SUCCESS) - printf("Successful\n"); - else - printf("error:%d\n", ret_status); -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -bool call_app_callback(TelTapiEvent_t *Event) -{ - int ret = -1; - int eventClass = Event->EventClass; - int eventType = Event->EventType; - int RequestId = Event->RequestId; - int Status = Event->Status; - - if (eventClass == TAPI_EVENT_CLASS_CALL_VOICE) - { - switch (eventType) - { - case TAPI_EVENT_CALL_FLASHINFO_CNF: - if (RequestId != reqId) - { - printf("Invalid RequestID received %d \n", reqId); - return false; - } - - if (Status != TAPI_CAUSE_SUCCESS) - { - printf("Invalid Status value received"); - return false; - } - printf("\n Received TAPI_EVENT_CALL_FLASHINFO_CNF \n"); - break; - - } - } - return true; -} -@endcode -@} -@defgroup Use_Cases2_18 Getting Call Time -@ingroup Use_Cases2_CALL -@{ - -

Getting Call Time

-This API is used to query information about a call time and call count. - -@code -int tel_get_call_time (const TS_WORD req_mask, int *pRequestID); -@endcode - -This API is restricted for direct use. Use the Voice call engine API instead. - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -void getcalltime() -{ - int ret_status = -1; - int api_err; - TelCallTimeMaskType_t mask_byte1; - TelCallTimeMaskType_t mask_byte2; - unsigned short mask_type; - - mask_byte1 = TAPI_CALL_TIME_TYPE_TOTAL_CALL_CNT; - mask_byte2 = TAPI_CALL_TIME_TYPE_TOTAL_CALL_TIME; - - mask_type = (mask_byte1 | mask_byte2); - - ret_status = tel_get_call_time(mask_type, &reqId); - if (ret_status == TAPI_API_SUCCESS) - printf("Successful\n"); - else - printf("error:%d\n", ret_status); -} -//WAIT FOR EVENT HERE - -bool call_app_callback(TelTapiEvent_t *Event) -{ - int ret = -1; - int eventClass = Event->EventClass; - int eventType = Event->EventType; - int RequestId = Event->RequestId; - int Status = Event->Status; - - if (eventClass == TAPI_EVENT_CLASS_CALL_VOICE) - { - switch (eventType) - { - case TAPI_EVENT_CALL_SET_PRIVACYMODE_CNF: - if (RequestId != reqId) - { - printf("Invalid RequestID received %d \n", reqId); - return false; - } - - if (Status != TAPI_CAUSE_SUCCESS) - { - printf("Invalid Status value received"); - return false; - } - break; - } - } -} -@endcode -@} - -

SUPPLEMENTARY SERVICE

-@defgroup Use_Cases3_1 Event register and deregister -@ingroup Use_Cases3_SUPPLEMENTARY_SERVICE -@{ -

Event register and deregister

-To receive asynchronous event notifications for the SS APIs, the registration of related events with their associated call backs is required. After these are registered, when an asynchronous API is called, the confirmation is returned as an asynchronous event notification which invokes the callback function along with the event data. - -SAMPLE CODE -@code -// REGISTER EVENT -unsigned int subscription_id = 0; -int api_err; - -api_err = tel_init(); -if (api_err != TAPI_API_SUCCESS) -{ - TEST_DEBUG("tel_init Failed - api_err = %d \n", api_err); -} - -api_err = tel_register_event (TAPI_EVENT_SS_WAITING_CNF, &subscription_id, (TelAppCallback)&app_callback); -printf("SS Event registration is Done: sub id is %d, api_err is %d\n",subscription_id,api_err); - -tel_register_app_name("com.samsung.appname"); - -// DEREGISTER EVENT -api_err = tel_deregister_event(subscription_id); -if (api_err != TAPI_API_SUCCESS) -{ - printf("Event Class Unregisteration Fail\n"); -} -@endcode -@} -@defgroup Use_Cases3_2 Call Barring -@ingroup Use_Cases3_SUPPLEMENTARY_SERVICE -@{ - -

Call Barring

-Telephony provides APIs to activate/deactivate call barring, get the barring status and change the barring password. It also provides APIs for applications to provide barring password requested by network for Call Barring Request or Change barring password request. -@n This service makes it possible for a mobile subscriber to activate barring for certain categories of outgoing or incoming calls. It also allows the deactivation of call barring based on categories set. -@n The mobile subscriber may also determine the type of barring preferrred for incoming/outgoing calls, by subscribing to a set of one or more unique barring programs . - -@code -int tel_set_ss_barring (const TelSsCallBarringInfo_t *pBarringInfo, int * pRequestId); -int tel_get_ss_barring_status (TelSsCallBarType_t BarType, TelSsCallType_t CallType, int * pRequestId ) -int tel_change_ss_barring_password ( const char* pOldPassword,const char* pNewPassword,const char * pNewPasswordAgain, int * pRequestId); -@endcode - -SAMPLE CODE FOR CALL BARRING -@code -#include -#include -#include - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void callbarring() -{ - int ret_status = -1; - TelSsCallBarringInfo_t BarringInfo; - int RequestId = 0; - char *bar_pwd = "0000"; - - BarringInfo.Mode = TAPI_SS_CALL_BAR_ACTIVATE; - BarringInfo.Type = TAPI_CALL_BARRING_ALL_OUTGOING_CALLS; - BarringInfo.CallType = TAPI_CALL_TYPE_VOICE_EV; - strcpy(BarringInfo.szPassword, bar_pwd); - - ret_status = tel_set_ss_barring (&BarringInfo, &RequestId); - if (ret_status == TAPI_API_SUCCESS) { - printf("successful\n"); - } - else { - printf("Error = %d \n", ret_status); - } -} -//WAIT FOR THE EVENT HERE - -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - switch (eventType) - { - case TAPI_EVENT_SS_BARRING_CNF: - TelSsInfo_t SsInfo; - memcpy(&SsInfo, (TelSsInfo_t*)event->pData, sizeof(TelSsInfo_t)); - printf("Received Event :TAPI_EVENT_SS_BARRING_CNF\n"); - break; - } -} -@endcode - -SAMPLE CODE FOR BARRING STATUS -@code -#include -#include -#include - -void callbarringstatus() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - TelSsCallBarType_t BarType = TAPI_CALL_BARRING_ALL_OUTGOING_INTERN_CALL; - TelSsCallType_t CallType = TAPI_CALL_TYPE_VOICE_EV; - int pRequestId = 0; - - ret_status = tel_get_ss_barring_status (BarType, CallType, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("Error = %d \n", ret_status); - } -} -//WAIT FOR THE EVENT HERE - -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId, i; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - switch (eventType) - { - case TAPI_EVENT_SS_BARRING_QUERYSTATUS_CNF: - printf(" Received Event :TAPI_EVENT_SS_BARRING_QUERYSTATUS_CNF \n"); - TelSsInfo_t SsInfo; - memcpy(&SsInfo, (TelSsInfo_t*)EventData, sizeof(TelSsInfo_t)); - - for (i=0; i -#include -#include - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void changebarpwd() -{ - int ret_status; - int pRequestId = 0; - - ret_status = tel_change_ss_barring_password ("0000", "0000", "0000", &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("Error = %d \n", ret_status); - } -} - -//WAIT FOR THE EVENT HERE - -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - //... - switch (eventType) - { - case TAPI_EVENT_SS_BARRING_CHANGEPASS_CNF: - printf("Received Event : TAPI_EVENT_SS_BARRING_CHANGEPASS_CNF\n"); - //check data - // - printf("Call barring Password Changed successfully\n"); - break; - //... - } -} -@endcode -@} -@defgroup Use_Cases3_3 Call Forward -@ingroup Use_Cases3_SUPPLEMENTARY_SERVICE -@{ - - -

Call Forward

-These APIs are used to set (activate/deactivate) the call forwarding option at the Network and to get call forward status. Call forwarding allows a user to forward incoming calls to another party. This service permits a called mobile subscriber to have the network send all incoming calls, or just those associated with a specific Basic service group meeting various call FORWARD conditions, to another directory number. The ability of the served mobile subscriber to originate calls is unaffected. If the service is activated, a call is forwarded only if the enabled forward condition is satisfied. -@n Application has to call this API in order to explicitly register/erase/activate/deactivate the call forwarding. Request will be sent irrespective of whether another SS call forward is already ongoing. - -@code -int tel_set_ss_forward ( const TelSsForwardInfo_t *pForwardInfo, int * pRequestId); -int tel_get_ss_forward_status (TelSsForwardType_t Type, TelSsForwardWhen_t Condition, int * pRequestId); -@endcode - -SAMPLE CODE FOR CALL FORWARD -@code -#include -#include -#include - -//SUBSCRIBE FOR EVENTS AS MENTIONED INEvent Register and Deregister -void callfwd() -{ - int ret_status = 0; - int pRequestId = 0; - TelSsForwardInfo_t pForwardInfo; - - pForwardInfo.Mode = TAPI_CALL_FORWARD_MODE_ENABLE_EV; - pForwardInfo.Type = TAPI_CS_FORWARD_TYPE_VOICE_EV; - pForwardInfo.Condition = TAPI_SS_FORWARD_WHEN_UNCONDITIONAL_EV; - pForwardInfo.NoReplyConditionTimer = 10; - - int len; - char *cf_number = "9986529874"; //number to which calles need to be forwarded. - - len = strlen(cf_number); - printf("Length of CF number :%d \n", len); - memcpy(&(pForwardInfo.szPhoneNumber), cf_number, len); - - ret_status = tel_set_ss_forward (&pForwardInfo, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("Error = %d \n", ret_status); - } -} -//WAIT FOR THE EVENT HERE - -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId,i; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - //REFER Call Barring TO GET eventType AND EventData - switch (eventType) - { - case TAPI_EVENT_SS_FORWARD_CNF: - printf("Received Event :TAPI_EVENT_SS_FORWARD_CNF \n"); - TelSsInfo_t SsInfo; - - if (EventData != NULL) { - memcpy(&SsInfo, (TelSsInfo_t*)EventData, sizeof(TelSsInfo_t)); - printf("Number of records %d\n", SsInfo.NumberOfRecords); - } - - for (i=0; i -#include -#include - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void callfwdstatus() -{ - int ret_status = 0; - TelSsForwardType_t Type = TAPI_CS_FORWARD_TYPE_VOICE_EV; - TelSsForwardWhen_t Condition = TAPI_SS_FORWARD_WHEN_UNCONDITIONAL_EV; - int pRequestId = 0; - - ret_status = tel_get_ss_forward_status(Type, Condition, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("Error = %d \n", ret_status); - } -} - -//WAIT FOR THE EVENT HERE - -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId, i; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - //... - //... - switch (eventType) - { - case TAPI_EVENT_SS_FORWARD_QUERYSTATUS_CNF: - // REFER Call Barring TO GET eventType AND EventData - TelSsInfo_t SsInfo; - - if (EventData != NULL) - memcpy(&SsInfo, (TelSsInfo_t*)EventData, sizeof(TelSsInfo_t)); - - for (i=0; iCall Waiting -These APIs activate/deactivate the call waiting service and provide the status of call wait feature. The call waiting service permits a mobile to be notified of an incoming call (as per basic call procedures) whilst the traffic channel is not available for the incoming call or when the mobile subscriber is engaged in an active or held call. Subsequently, the subscriber can accept, reject, or ignore the incoming call. - -@code -int tel_set_ss_waiting ( const TelSsWaitingInfo_t *waitInfo, int * RequestID); -int tel_get_ss_waiting_status ( const TelSsCallType_t CallType, int * RequestID); -@endcode - -SAMPLE CODE FOR CALL WAITING -@code -#include -#include -#include - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void callwaiting() -{ - int ret_status; - int RequestID; - TelSsWaitingInfo_t waitInfo; - - waitInfo.Mode = TAPI_SS_CW_ACTIVATE; - waitInfo.CallType = TAPI_CALL_TYPE_VOICE_EV; - - ret_status = tel_set_ss_waiting (&waitInfo, &RequestID); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("Error = %d \n", ret_status); - } -} -//WAIT FOR THE EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId, i; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - //... - switch (eventType) - { - case TAPI_EVENT_SS_WAITING_CNF: - printf("Received Event : TAPI_EVENT_SS_WAITING_CNF \n"); - //REFER Call Barring TO GET eventType AND EventData - - TelSsInfo_t SsInfo; - - memcpy(&SsInfo, (TelSsInfo_t*)EventData, sizeof(TelSsInfo_t)); - - for (i=0; i -#include -#include - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void callwaiting() -{ - int ret_status; - TelSsCallType_t CallType = TAPI_CALL_TYPE_VOICE_EV; - int RequestID=0; - - ret_status = tel_get_ss_waiting_status(CallType, &RequestID); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("Error = %d \n", ret_status); - } -} -//WAIT FOR THE EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId, i; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d]\n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - //... - switch (eventType) - { - case TAPI_EVENT_SS_WAITING_QUERYSTATUS_CNF: - printf("Received Event :TAPI_EVENT_SS_WAITING_QUERYSTATUS_CNF\n"); - //REFER Call Barring TO GET eventType AND EventData - - TelSsInfo_t SsInfo; - if (EventData != NULL) - memcpy(&SsInfo, (TelSsInfo_t*)EventData, sizeof(TelSsInfo_t)); - - for (i=0; iCLI Service Status -[Note] Telephony Emulator does not support this feature. - -Telephony provides an API to query the status of calling line identity service. The CLI service permits a mobile to show or hide his identity to the called party. - -@code -int tel_get_ss_cli_status (TelSsCliType_t CliType,int * pRequestId ); -@endcode - -SAMPLE CODE -@code -#include -#include - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void cliservicestatus() -{ - int ret_status; - TelSsCliType_t CliType = TAPI_SS_CLI_CDIP; - int pRequestId; - - ret_status = tel_get_ss_cli_status (CliType, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("Error = %d \n", ret_status); - } -} -//WAIT FOR THE EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - Int requestId; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - // TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d]\n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - //... - switch (eventType) - { - //REFER Call Barring TO GET eventType AND EventData - - case TAPI_EVENT_SS_IDENTIFY_IND: - TelSsInfo_t SsInfo; - memcpy(&SsInfo, (TelSsInfo_t*)EventData, sizeof(TelSsInfo_t)); - printf("Received Event : TAPI_EVENT_SS_IDENTIFY_IND \n"); - printf("Status :%d CLI Service : %d\n", - SsInfo.SsRecord.CliRecord.CliStatus, - SsInfo.SsRecord.CliRecord.IdentificationType); - break; - //... - } -} -@endcode -@} -@defgroup Use_Cases3_6 Send USSD Request -@ingroup Use_Cases3_SUPPLEMENTARY_SERVICE -@{ - - -

Send USSD Request

-This API is used to send a USSD string to the Network. This is an Asynchronous API. - -Pre Conditions: -@n No SS and USSD Transaction should be ongoing. If there an ongoing transaction, new USSD request will be returned to the Application with an error (USSD_BUSY) - -@code -int tel_send_ss_ussd_request( const char* szUssdString, int * pRequestId); -@endcode - -SAMPLE CODE -@code -#include -#include -#include - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void sendussdreq() -{ - char ussdString[TAPI_SS_USSD_DATA_SIZE_MAX]; - int ret; - - memset(ussdString, 0, TAPI_SS_USSD_DATA_SIZE_MAX); - strcpy(ussdString, "*124#"); - - ret = tel_send_ss_ussd_request (ussdString, &request_id); - - ret = tel_send_ss_ussd_request (pAppMsg, &pRequestId); -} -//WAIT FOR THE EVENT HERE - -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - //.. - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d]\n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //.. - - switch (eventType) - { - case TAPI_EVENT_SS_USSD_CNF: - TelSsUssdMsgIndInfo_t UssdRecord; - memcpy(&UssdRecord, (TelSsInfo_t*)EventData, sizeof(TelSsUssdMsgIndInfo_t)); - printf("got event : TAPI_EVENT_SS_USSD_CNF:\n"); - //... - break; - //.. - } -} -@endcode -@} -@defgroup Use_Cases3_7 Send USSD Response -@ingroup Use_Cases3_SUPPLEMENTARY_SERVICE -@{ - - -

Send USSD Response

-This API is used to send a User response to the Network. This is an Asynchronous API. - -Pre Conditions: -No SS and USSD Transaction should be ongoing. If there an ongoing transaction, new USSD request will be returned to the Application with an error (USSD_BUSY) -@code -int tel_send_ss_ussd_response( const TelSsUssdMsgRspInfo_t* ussdRspRecord, int * RequestID); -@endcode - -SAMPLE CODE -@code -#include -#include -#include - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void sendussdresp() -{ - char *ussd_str = "*123*0#"; - int ret = 0; - int pRequestId = 0; - - TelSsUssdMsgRspInfo_t *ussdRspRecord; - - ussdRspRecord = (TelSsUssdMsgRspInfo_t*)malloc(sizeof(TelSsUssdMsgRspInfo_t)); - ussdRspRecord->SsRespType = TAPI_USSD_RES_OK; - ussdRspRecord->IndType = TAPI_USSD_IND_NOTIFY; - ussdRspRecord->UssdInfo.Dcs = 0x0f; - ussdRspRecord->UssdInfo.RequestedBySAT = 0; - strncpy(ussdRspRecord->UssdInfo.szUssdString, ussd_str, TAPI_SS_USSD_DATA_SIZE_MAX); - ussdRspRecord->UssdInfo.szUssdString[strlen(ussdRspRecord->UssdInfo.szUssdString)] = '\0'; - ussdRspRecord->UssdInfo.UssdStringLength = strlen(ussd_str); - - ret = tel_send_ss_ussd_response (ussdRspRecord, &pRequestId); - printf ("The return value is %d\n", ret); -} -//WAIT FOR THE EVENT HERE - -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d]\n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) - { - case TAPI_EVENT_SS_USSD_CNF: - TelSsUssdMsgIndInfo_t UssdRecord; - memcpy(&UssdRecord, (TelSsInfo_t*)EventData, sizeof(TelSsUssdMsgIndInfo_t)); - printf("got event : TAPI_EVENT_SS_USSD_CNF:\n"); - //... - break; - //... - } -} -@endcode -@} -@defgroup Use_Cases3_8 Send USSD Cancel Request -@ingroup Use_Cases3_SUPPLEMENTARY_SERVICE -@{ - - -

Send USSD Cancel Request

-This API sends a USSD cancel request to the Network to release USSD session. - -Pre Conditions: -@n SS and USSD Transaction should be ongoing. - -@code -int tel_send_ss_ussd_cancel ( int * pRequestId); -@endcode - -SAMPLE CODE -@code -#include -#include -#include - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void sendussdcancelreq() -{ - char ussdString[TAPI_SS_USSD_DATA_SIZE_MAX]; - int ret; - int requestId = 0; - - memset(ussdString, 0, TAPI_SS_USSD_DATA_SIZE_MAX); - strcpy(ussdString, "*124#"); - - ret = tel_send_ss_ussd_request(ussdString, &requestId); - printf ("The return value is %d\n", ret); - - ret = tel_send_ss_ussd_cancel(&equestId); - printf ("The return value is %d\n", ret); -} - -//WAIT FOR THE EVENTS HERE - -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) - { - case TAPI_EVENT_SS_USSD_CNF: - printf("got event : TAPI_EVENT_SS_USSD_CNF:\n"); - //... - break; - - case TAPI_EVENT_SS_USSD_CANCEL_CNF: - printf("got event : TAPI_EVENT_SS_USSD_CANCEL_CNF:\n"); - //... - break; - - //... - } -} -@endcode -@} -@defgroup Use_Cases3_9 AOC Info -@ingroup Use_Cases3_SUPPLEMENTARY_SERVICE -@{ - - -

AOC Info

-These APIs set and read AOC parameter values on the SIM. - -Pre Conditions: -@n Advice of charge feature is dependent on the SIM for setting or reading aoc parameters. Setting of AOC requires PIN2 Verification - -@code -int tel_get_ss_aoc_info ( TelSsAocType_t AocType, int * pRequestId); -int tel_set_ss_aoc_info ( TelCallAocInfo_t * pAocSetInfo, int * pRequestId); -@endcode - -SAMPLE CODE -@code -#include -#include -#include - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - -//Complete PIN2verification process as mentioned in SIM -void aocinforeq() -{ - //set aoc - printf(" Resetting Total Cost \n"); - - TelCallAocInfo_t *pAocSetInfo; - int request_id; - int ret_status = 0; - - pAocSetInfo = (TelCallAocInfo_t *)calloc(1, sizeof(TelCallAocInfo_t)); - pAocSetInfo->AocType = TAPI_SS_AOC_TYPE_RESET; - - ret = tel_set_ss_aoc_info (pAocSetInfo, &request_id); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("Error = %d \n", ret_status); - } -} - -//WAIT FOR THE EVENT HERE -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d]\n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - switch (eventType) - { - case TAPI_EVENT_SS_SET_AOC_CNF: - printf("Received Event : SS -- TAPI_EVENT_SS_SET_AOC_CNF\n"); - break; - }//... -} - -//read aoc -void readaoc() -{ - TelSsAocType_t AocType = TAPI_SS_AOC_TYPE_ACM; - - ret_status = tel_get_ss_aoc_info (AocType, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("Error = %d \n", ret_status); - } -} -//WAIT FOR THE EVENT HERE - -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d]\n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - switch (eventType) - { - case TAPI_EVENT_SS_AOC_RSP: - TelCallAocInfo_t aoc_info; - memcpy(&aoc_info, (TelCallAocInfo_t*)EventData, sizeof(TelCallAocInfo_t)); - printf("Received Event : SS -- TAPI_EVENT_SS_AOC_RSP\n"); - printf(" AOC TYPE :%d\n", aoc_info.AocType); - break; - } - -}//... -@endcode -@} - -

SMS

- -@defgroup Use_Cases4_1 Event register and deregister -@ingroup Use_Cases4_SMS -@{ - -

Event register and deregister

-To receive asynchronous event notifications for the SMS APIs, the registration of related events with their associated call backs is required. When an asynchronous API is called, the confirmation is returned as an asynchronous event notification which invokes the callback function along with the event data. -@nSMS in the telephony framework only provides an interface to the modem and doesn’t handle Transport layer, storing and deleting the SMS in the storage except SIM. Because of this we recommend you shouldn’t access this API directly, and should use the MAPI of Message Framework instead. - -Notification Events are as follows. -@code -TAPI_EVENT_NETTEXT_INCOM_IND -TAPI_EVENT_NETTEXT_CB_INCOM_IND -TAPI_EVENT_NETTEXT_INCOM_EX_IND -TAPI_EVENT_NETTEXT_CB_INCOM_EX_IND -TAPI_EVENT_NETTEXT_MEMORY_STATUS_IND -TAPI_EVENT_NETTEXT_DEVICE_READY_IND -@endcode - -SAMPLE CODE -@code -// REGISTER EVENT -unsigned int subscription_id = 0; -int api_err; - -api_err = tel_init(); -if (api_err != TAPI_API_SUCCESS) -{ - TEST_DEBUG("tel_init Failed - api_err = %d \n", api_err); -} -api_err = tel_register_event(TAPI_EVENT_NETTEXT_SENTSTATUS_CNF, &subscription_id, (TelAppCallback)&app_callback); -printf("Nettext Class registration is Done: sub id is %d, api_err is %d\n", subscription_id, api_err); - -tel_register_app_name("com.samsung.appname"); - -// DEREGISTER EVENT -api_err = tel_deregister_event(subscription_id); -if (api_err != TAPI_API_SUCCESS) -{ - printf("Event Class Unregistration Fail\n"); -} - -// SMS notification callback function -void app_callback(void) -{ - int eventClass; - int eventType; - int requestId; - int status; - void *EventData = NULL; - - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - printf(" app _callback is called \n"); - - print_events((int)eventType); - printf("\n event came in power_callback [%d] \n", eventType); - printf("\n expected event is in callback [%d] \n", expected_event); - - switch (eventType) - { - case TAPI_EVENT_NETTEXT_INCOM_IND: - TelSmsDatapackageInfo_t *ptrDataPackage; - printf("SMS Incoming Message\n"); - ptrDataPackage = (TelSmsDatapackageInfo_t *)EventData; - // Decoding Service Center Address - // Decoding TPDU(SMS-DELIVER, SMS-STATUS) - break; - - case TAPI_EVENT_NETTEXT_CB_INCOM_IND: - TelSmsCbMsg_t *ptrCbMsgInfo; - printf("SMS Cell Broadcasting Incoming Message\n"); - ptrCbMsgInfo = (TelSmsCbMsg_t *)EventData; - // Decoding Cell broadcasting Message in szData [Refer to 3GPP TS23.041 9.4.1] - break; - - case TAPI_EVENT_NETTEXT_INCOM_EX_IND: - TelSmsMsgInfo_t *pMsgInfo; - printf("CDMA SMS Incoming Message\n"); - pMsgInfo = (TelSmsMsgInfo_t *)EventData; - // Decoding TPDU(SMS-DELIVER, SMS-STATUS) - break; - - case TAPI_EVENT_NETTEXT_CB_INCOM_EX_IND: - TelSmsMsgInfo_t *pMsgInfo = NULL; - printf("CDMA SMS Incoming Message\n"); - pMsgInfo = (TelSmsMsgInfo_t *)EventData; - // Decoding Cell broadcasting Message in szData - break; - - case TAPI_EVENT_NETTEXT_MEMORY_STATUS_IND: - int *status = NULL; - printf("SIM Memory Status Notification\n"); - status = (TelSmsMemStatusType *)EventData; - if (*status == TAPI_NETTEXT_PHONE_MEMORY_STATUS_AVAILABLE) - printf("SIM Memory Available\n"); - else if (*status == TAPI_NETTEXT_PHONE_MEMORY_STATUS_FULL) - printf("SIM Memory Full\n"); - else - printf("Unknown Type\n"); - break; - - case TAPI_EVENT_NETTEXT_DEVICE_READY_IND: - int *pDeviceReady = NULL; - printf("SMS Device Ready Status Notification\n"); - pDeviceReady = (int*)EventData; - if (pDeviceReady->Result == 1) - printf("Device Ready\n"); - else - printf("Unknown Type\n"); - break; - } - return; -} -@endcode -@} -@defgroup Use_Cases4_2 Send SMS -@ingroup Use_Cases4_SMS -@{ - - -

Send SMS

-Telephony provides an API to send an SMS to the network. This API allows the transmission of an SMS PDU as defined by 3GPP TS 23.040 (SMS-SUBMIT, SMS-COMMAND) to the lower layers. If there is a need to send multiple parts of a concatenated message, this API requests for a dedicated link, through the input parameter MoreMessageToSend, from the lower layers. This will ensure the lower layers do not release the dedicated connection if there are more messages expected. - -@code -int tel_send_sms (const TelSmsDatapackageInfo_t* pDataPackage, int bMoreMsgToSend, int *pRequestId); -@endcode - -This API is restricted for direct use. Use the Message Framework API instead. - -SAMPLE CODE -@code -#include -#include -#include -#include - -void send_sms() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - TelSmsDatapackageInfo_t *pDataPackage; - int ret_status; - int pRequestId = 0; - - pDataPackage = (TelSmsDatapackageInfo_t *)malloc(sizeof(TelSmsDatapackageInfo_t)); - - //fill the structure appropriately - //Sca parameter is optional. If you don't provide Service center address, you should fill "00" in sca array. - //MsgLength is length of szData//fill the szData in TelSmsDatapackageInfo_t with SMS-SUBMIT or SMS-COMMAND TPDU. - - ret_status = tel_send_sms (pDataPackage, 0, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - //WAIT FOR THE EVENT HERE -} - -static void app_callback (TelTapiEvent_t* event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - switch (eventType) { - case TAPI_EVENT_NETTEXT_SENTSTATUS_CNF: - printf("\n***************************************\n"); - printf("\n$$$ TAPI_EVENT_NETTEXT_SENTSTATUS_CNF $$$\n"); - // Extract the Event Data here - - break; - } - //.. -} -@endcode -@} -@defgroup Use_Cases4_3 Send SMS Message -@ingroup Use_Cases4_SMS -@{ - - -

Send SMS Message

-This API is used to send an SMS message to the network. This API allows the transmission of an SMS PDU as defined by 3GPP2 C.S0015 (SMS-SUBMIT, SMS-ACK, SMS-CANCEL) to the lower layers. If there is a need to send multiple parts of a concatenated message, this API requests for a dedicated link, through the input parameter MoreMessageToSend, from the lower layers. This will ensure the lower layers do not release the dedicated connection if there are more messages expected. This is currently supported in CDMA. - -@code -int tel_send_sms_msg (const TelSmsMsgInfo_t* pSmsMsgInfo,unsigned int MoreMsgToSend, int *pRequestId); -@endcode - -This API is restricted for direct use. Use the Message Framework API instead. - -SAMPLE CODE -@code -#include -#include -#include -#include - -void send_sms_ex() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int requestId = 0; - TelSmsMsgInfo_t pMsgInfo; - char* diallingNum; - int dialNumLen; - TelSmsMsgInfo_t *pDataPackage = malloc(sizeof(TelSmsMsgInfo_t)); - - memset(pDataPackage, 0, sizeof(TelSmsMsgInfo_t)); - pDataPackage->MsgType = TAPI_NETTEXT_MESSAGETYPE_SUBMIT; - pDataPackage->ParamMask |= TAPI_NETTEXT_PARAM_TELESERVICE_MASK; - //fill structure appropriately - - ret_status = tel_send_sms_msg (pDataPackage, 0, &requestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } -} -//WAIT FOR EVENT HERE -//CALLBACK FUNTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - switch (eventType) { - case TAPI_EVENT_NETTEXT_SENTSTATUS_EX_CNF: - printf("\n***************************************\n"); - printf("\n$$$ TAPI_EVENT_NETTEXT_SENTSTATUS_EX_CNF $$$\n"); - break; - } - //... -} -@endcode -@} -@defgroup Use_Cases4_4 Read SMS -@ingroup Use_Cases4_SMS -@{ - - -

Read SMS

-This API reads a message from SIM card storage. You should not access this API directly; instead use the Message Framework API. - -@code -int tel_read_sms_in_sim(int Index, int *pRequestId); -@endcode - -This API is restricted for direct use. Use the Message Framework API instead. - -SAMPLE CODE -@code -#include -#include -#include -#include - -void read_sms() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int pRequestId = 0; - - ret_status = tel_read_sms_in_sim(0, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("Error = %d \n", ret_status); - } - //WAIT FOR EVENT HERE -} - -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Send SMS TO GET eventType - { - case TAPI_EVENT_NETTEXT_READ_SMS_CNF: - TelSmsData_t *pReadData; - printf("\n$$Read Msg Notification $$$\n"); - pReadData = (TelSmsData_t *) event->pData; - printf("\n$$Read Msg index = [%d] $$$\n", pReadData->SimIndex); - printf("\n$$Read Msg status = [%d] $$$\n", pReadData->MsgStatus); - // TPDU - // pReadData->SmsData.szData - - break; - } -} -//... -@endcode -@} -@defgroup Use_Cases4_5 Write Sms -@ingroup Use_Cases4_SMS -@{ - - -

Write Sms

-This API writes a message to SIM storage area. -@n The parameter of this API is changed into TelSmsData_t. -@n If SIM index in TelSmsData_t is -1, SMS message is stored at the first empty SIM index . The contents of szData is SMS-SUBMIT, SMS-DELIVER or SMS-STATUS REPORT TPDU. You should not access this API directly; use the Message Framework API. - -@code -int tel_write_sms_in_sim(const TelSmsData_t *pWriteData, int *pRequestId); -@endcode - -This API is restricted for direct use. Use the Message Framework API instead. - -SAMPLE CODE -@code -#include -#include -#include -#include - -void write_sms() -{ - // SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - TelSmsData_t *pWriteData; - int pRequestId = 0; - char *msg = "This is an Test SMS"; - char *SCA = "821091"; - - pWriteData = malloc(sizeof(TelSmsData_t)); - if (pWriteData == NULL) { - printf("Memory Allocation fails\n"); - return; - } - - // conv_service_center_address(pWriteData->SmsData.Sca, SCA); - // conv_msg_into_tpdu(pWriteData->SmsData.szData, pWriteData->SmsData.MsgLength, msg); - pWrite->MsgStatus = TAPI_NETTEXT_STATUS_READ; - pWrite-> SimIndex = -1; - - ret_status = tel_write_sms_in_sim (pWriteData, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - //WAIT FOR EVENT HERE -} -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - //.. - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //.. - switch (eventType) //REFER Send SMS TO GET eventType - { - case TAPI_EVENT_NETTEXT_SAVE_STATUS_CNF: - int *SimIndex = NULL; - printf("\n***************************************\n"); - printf("\n$$Save Status Notification$$\n"); - SimIndex = (int *)EventData; - printf("SIM Index stored SMS is [%d]\n", *SimIndex); - break; - } - //.. -} -@endcode -@} -@defgroup Use_Cases4_6 Delete Sms -@ingroup Use_Cases4_SMS -@{ - - -

Delete Sms

-This API deletes a message specified by the index (SIM index used when storing the sms) number or all the messages in the SIM storage area. If SIM index is -1, all SMS stored in SIM are deleted. You should not access this API directly; use the Message Framework API. - -@code -int tel_delete_sms_in_sim(int Index, int *pRequestId); -@endcode - -This API is restricted for direct use. Use the Message Framework API instead. - -SAMPLE CODE: -@code -#include -#include -#include -#include - -void delete_sms() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int pRequestId = 0; - - ret_status = tel_delete_sms_in_sim(1, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - //WAIT FOR EVENT HERE -} -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - switch (eventType) //REFER Send SMS TO GET eventType - { - case TAPI_EVENT_NETTEXT_DELETE_STATUS_CNF: - printf("\n***************************************\n"); - printf("\n$$Delete Notification$$$\n"); - break; - } - //.. -} -@endcode -@} -@defgroup Use_Cases4_7 Getting Sms Count -@ingroup Use_Cases4_SMS -@{ - - -

Getting Sms Count

-This API is used to retrieve message count information such as Total record count, used record count and the indices list for SIM Storage. You should not access this API directly; use the Message Framework API. - -@code -int tel_get_sms_count (int *pRequestId); -@endcode - -This API is restricted for direct use. Use the Message Framework API instead. - -SAMPLE CODE -@code -#include -#include -#include -#include - -void get_count() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int pRequestId = 0; - - ret_status = tel_get_sms_count (&pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - //WAIT FOR EVENT HERE -} -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //.. - switch (eventType) //REFER Send SMS TO GET eventType - { - case TAPI_EVENT_NETTEXT_GET_COUNT_CNF: - printf("\n***************************************\n"); - printf("\n$$$GetMsgCountNotification$$$$\n"); - MsgCountNotification(tapiEvent.pData); - break; - } - //.. -} -void MsgCountNotification (char *pData) -{ - static TelSmsStoredMsgCountInfo_t *countInfo; - int loop_counter = 0; - int returnStatus; - countInfo = (TelSmsStoredMsgCountInfo_t *)pData; - int requestId = 0; - - if (countInfo->UsedCount != 0x00) - { - fprintf(stderr, "Index LIST..........\n"); - for (loop_counter = 0; loop_counter < countInfo->UsedCount; loop_counter++) - { - fprintf(stderr, "[%02x]", countInfo->IndexList[loop_counter]); - returnStatus = tel_read_sms_in_sim (countInfo->IndexList[loop_counter], &requestId); - printf("After read msg: returnstatus %d request id is %d\n", returnStatus, requestId); - } - printf("In MsgCountNotification total cnt is %d, usedcnt is %dapi_err %d\n", - countInfo->TotalCount, - countInfo->UsedCount, - returnStatus); - } - - printf("In MsgCountNotification total cnt is %d, usedcnt is %d\n", countInfo->TotalCount, countInfo->UsedCount); -} -@endcode -@} -@defgroup Use_Cases4_8 Setting Sms CB message -@ingroup Use_Cases4_SMS -@{ - - -

Setting Sms CB message

-[Note] Telephony Emulator does not support this feature. -@n This API is used to set the SMS CB Message Identifiers in the appropriate EF-CBMI/EF-CBMIR file in (U)SIM. This API also indicates the underlying provider to enable or disable CB Channel on which CB messages are received. You should not access this API directly; use the Message Framework API. - -@code -int tel_set_sms_cb_config(const TelSmsCbConfig_t *pCBConfig, int *pRequestId); -@endcode - -This API is restricted for direct use. Use the Message Framework API instead. - -SAMPLE CODE -@code -#include -#include -#include -#include - -void set_cbconfig() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int pRequestId = 0; - TelSmsCbConfig_t *pCBConfig = NULL; - - pCBConfig = (TelSmsCbConfig_t *)malloc(sizeof(TelSmsCbConfig_t)); - pCBConfig->bCBEnabled = 1; - pCBConfig->SelectedId = 0x01; - pCBConfig->MsgIdCount = 0x02; - - pCBConfig->MsgIDs[0] = 0x0c; - pCBConfig->MsgIDs[1] = 0x0c; - pCBConfig->MsgIDs[2] = 0xdf; - pCBConfig->MsgIDs[3] = 0x00; - - ret_status = tel_set_sms_cb_config(pCBConfig, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - //WAIT FOR EVENT HERE -} - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - //.. - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - switch (eventType) //REFER Send SMS TO GET eventType - { - case TAPI_EVENT_NETTEXT_SET_REQUEST_CNF: - TelSmsSetResponse *RequestType; - printf("\n***************************************\n"); - printf("\n$$$$$$ SET CONFIRMATION $$$$$$ \n"); - RequestType = (TelSmsSetResponse *)EventData; - if (*RequestType == TAPI_NETTEXT_CBSETCONFIG_RSP) { - printf("\n$$$$$$ SET CB CONFIRMATION $$$$$$ \n"); - } - break; - } -} -@endcode -@} -@defgroup Use_Cases4_9 Getting Sms CB configuration -@ingroup Use_Cases4_SMS -@{ - - -

Getting Sms CB configuration

-[Note] Telephony Emulator does not support this feature. -@n This API is used to retrieve SMS CB configuration options from EFcbmi file in the SIM. You should not access this API directly; use the Message Framework API. - -@code -TapiResult_t tel_get_sms_cb_config (int *pRequestId); -@endcode - -This API is restricted for direct use. Use the Message Framework API instead. - -SAMPLE CODE: - -@code -#include -#include -#include -#include - -void get_cbconfig() -{ - int ret_status; - int pRequestId = 0; - - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - ret_status = tel_get_sms_cb_config (&pRequestId); - - printf ("The return value is %d\n", ret_status); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - //WAIT FOR EVENT HERE -} -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - //.. - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //.. - switch (eventType) //REFER Send SMS TO GET eventType - { - case TAPI_EVENT_NETTEXT_GET_CB_CONFIG_CNF: - printf("\n***************************************\n"); - printf("\n$$$GET CB Config$$$\n"); - GetCBNotification(tapiEvent.pData); - break; - } - //.. -} - -void GetCBNotification (char *pData) -{ - TelSmsCbConfig_t *CBConfig; - int i = 0; - - CBConfig = (TelSmsCbConfig_t *) pData; - printf("=========CB Configuration=========\n"); - - // CB Enable/Diable - if (CBConfig->bCBEnabled == 0x01) - printf("Cell Broadcast Msg Enabled...\n"); - else if (CBConfig->bCBEnabled == 0x02) - printf("Cell Broadcast Msg Disabled...\n"); - - // Selected ID - if (CBConfig->SelectedId == 0x01) - printf("All CBMI is selected... \n"); - else if (CBConfig->SelectedId == 0x02) - printf("There are some selected CBMI...\n"); - - // CBMI Count - printf("CBMI Count: %d \n\n", CBConfig->MsgIdCount); - // CBMI List - if (CBConfig->MsgIdCount != 0) - { - printf("----- CBMI List -----\n"); - for (i=0; i < CBConfig->MsgIdCount; i++) - { - printf("No.%d - [0x%04x]\n", i, CBConfig->MsgIDs[i]); - } - } -} -//... -@endcode -@} -@defgroup Use_Cases4_10 Service Center Address -@ingroup Use_Cases4_SMS -@{ - - -

Service Center Address

-This API sets the SMS Service Centre Address information in order to send the SMS. -@n It is also possible to get current SMS Service Centre Address information. Currently Only index 0 is supported in Aquila’s Telephony OEM Plugin. You should not access this API directly; use the Message Framework API. - -@code -int tel_set_sms_sca(const TelSmsAddressInfo_t *pSCA, int Index, int *pRequestId); -int tel_get_sms_sca (int Index, int *pRequestId) -@endcode - -This API is restricted for direct use. Use the Message Framework API instead. - -SAMPLE CODE -@code -#include -#include -#include -#include - -void set_sca() -{ - - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int pRequestId = 0; - BYTE scabuf[512]; - char scaNum[TAPI_NETTEXT_SCADDRESS_LEN_MAX]; - BYTE scaNum_len = 0; - TelSmsAddressInfo_t *sc_addr = NULL; - BYTE packet[500]; - int idx = 0; - int i; - - printf("***Setting the SCA(Api:SetSCA)****\n"); - sc_addr = (TelSmsAddressInfo_t *)malloc(sizeof(TelSmsAddressInfo_t)); - memset(sc_addr, 0, sizeof(sc_addr)); - memset(scaNum, 0, sizeof(scaNum)); - memset(scabuf, 0, sizeof(scabuf)); - sprintf(scaNum, "821091"); - scaNum_len = strlen(scaNum); - scaNum_len = strlen(scaNum); - scaNum[scaNum_len] = 0; - scaNum_len = scaNum_len - 1; - - printf("==========================\n"); - printf("Sca Number :%s\n", scaNum); - printf("sca number length : %d \n", scaNum_len); - printf("==========================\n"); - - //idx = SmsUtilEncodeAddrField( packet, scaNum, scaNum_len, 0x01, 0x01); - //get idx - printf("idx =%d\n", idx); - sc_addr->DialNumLen = idx ; - memcpy(sc_addr->szDiallingNum, packet, (unsigned int)idx); - - ret_status = tel_set_sms_sca(sc_addr, 0, &pRequestId); - //[Note] Telephony Emulator Not Support - - printf("returnstatus after scaddr set is %d requestId:%d \n", ret_status, pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - //WAIT FOR EVENT HERE -} - -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - //.. - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //.. - switch (eventType) //REFER Send SMS TO GET eventType - { - case TAPI_EVENT_NETTEXT_SET_REQUEST_CNF: - TelSmsSetResponse *RequestType; - printf("\n***************************************\n"); - RequestType = (TelSmsSetResponse *)EventData; - if (*RequestType == TAPI_NETTEXT_SETSCADDR_RSP) { - printf("\n$$$TAPI_EVENT_NETTEXT_SET_SCA_CNF$$$\n"); - // service center address decoding - } - break; - } -} -//.. - -//get SCA -#include -#include -#include -#include - -void get_sca() -{ - int ret_status; - int pRequestId = 0; - - ret_status = tel_get_sms_sca(0, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - - //WAIT FOR EVENT HERE -} - -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - //... - switch (eventType) //REFER Send SMS TO GET eventType - { - case TAPI_EVENT_NETTEXT_GET_SCA_CNF: - printf("\n****************************************\n"); - printf("\n$$$ TAPI_EVENT_NETTEXT_GET_SCA_CNF$$$\n"); - // SCA address decoding - printf("\n****************************************\n"); - break; - } - //... -} -@endcode -@} -@defgroup Use_Cases4_11 Sms Preferred Bearer -@ingroup Use_Cases4_SMS -@{ - - -

Sms Preferred Bearer

-[Note] Telephony Emulator and Aquila’s Telephony OEM Plugin do not support this feature. -@n Telephony provides APIs to set SMS preferred bearer on which SMS has to be transmitted. You should not access this API directly; use the Message Framework API. - -@code -int tel_set_sms_preferred_bearer (TelSmsBearerType_t BearerType, int *pRequestId); -int tel_get_sms_preferred_bearer(int *pRequestId); -@endcode - -This API is restricted for direct use. Use the Message Framework API instead. - -SAMPLE CODE: -@code -#include -#include -#include -#include - -void set_pb() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int pRequestId = 0; - TelSmsBearerType_t BearerType = TAPI_NETTEXT_BEARER_PS_ONLY; - - ret_status = tel_set_sms_preferred_bearer(BearerType, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - //WAIT FOR EVENT HERE -} -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Send SMS TO GET eventType - { - case TAPI_EVENT_NETTEXT_SET_REQUEST_CNF: - TelSmsSetResponse *RequestType; - RequestType = (TelSmsSetResponse *)EventData; - if (*RequestType == TAPI_NETTEXT_SETPREFERREDBEARER_RSP) { - printf("\n$$$TAPI_EVENT_NETTEXT_SET_Preferred Bearer_CNF$$$\n"); - } - break; - } - //... -} - -//get preferred bearer -#include -#include -#include -#include -void get_pb() -{ - int ret_status; - int pRequestId = 0; - - ret_status = tel_get_sms_preferred_bearer(&pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - //WAIT FOR EVENT HERE -} - -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - //... - //... - switch (eventType) //REFER Send SMS TO GET eventType - { - case TAPI_EVENT_NETTEXT_GET_SMSBEARER_CNF: - printf("\n****************************************\n"); - printf("\n$$$ GET PREFERRED BEARER$$$\n"); - printf("\n****************************************\n"); - break; - } - //... -} -@endcode -@} -@defgroup Use_Cases4_12 Sms Parameters -@ingroup Use_Cases4_SMS -@{ - - -

Sms Parameters

-[Note] Telephony Emulator does not support this feature. -@n Telephony provides APIs to set the header parameters of SMS, which are used in the origination of MO messages. It also provides API to get the SMS parameters for a particular SMS (sent/received) based on the SIM index where it is stored. You should not access this API directly; use the Message Framework API. - -@code -int tel_set_sms_parameters(const TelSmsParams_t SmsSetParameters, int *pRequestId); -int tel_get_sms_parameters(const int SmsRecordIndex, int *pRequestId); -@endcode - -This API is restricted for direct use. Use the Message Framework API instead. - -SAMPLE CODE: -@code -#include -#include -#include -#include - -void set_param() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int pRequestId = 0; - TelSmsParams_t SmsSetParameters; - - SmsSetParameters.RecordIndex = 0x01; - SmsSetParameters.RecordLen = 28; - memcpy(SmsSetParameters.TpDestAddr.szDiallingNum, "9986529874", 10); - printf("\ndial no is %s\n", SmsSetParameters.TpDestAddr.szDiallingNum); - - SmsSetParameters.TpDestAddr.DialNumLen = 10; - SmsSetParameters.TpDestAddr.Ton = TAPI_SIM_TON_NATIONAL;//national no - SmsSetParameters.TpDestAddr.Npi = TAPI_SIM_NPI_NATIONAL; - - ret_status = tel_set_sms_parameters(SmsSetParameters, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - //WAIT FOR EVENT HERE -} -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Send SMS TO GET eventType - { - case TAPI_EVENT_NETTEXT_SET_REQUEST_CNF: - TelSmsSetResponse *RequestType; - RequestType = (TelSmsSetResponse *)EventData; - if (*RequestType == TAPI_NETTEXT_SETPARAMETERS_RSP) { - printf("\n$$$TAPI_EVENT_NETTEXT_SET_Parameter_CNF$$$\n"); - } - break; - } -} -//... - -//get params -#include -#include -#include -#include - -void get_params() -{ - int ret_status; - int pRequestId = 0; - - ret_status = tel_get_sms_parameters(1, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - //WAIT FOR EVENT HERE -} -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d]\n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Send SMS TO GET eventType - { - case TAPI_EVENT_NETTEXT_GET_PARAM_CNF: - printf("\n***************************************\n"); - printf("\n$$$ GET PARAM NOTI$$$\n"); - // decoding SMS parameter - break; - } - //... -} -@endcode -@} -@defgroup Use_Cases4_13 Sending Delivery Report -@ingroup Use_Cases4_SMS -@{ - - -

Sending Delivery Report

-This API sends a SMS-deliver report to the network, after receiving an incoming SMS. You should not access this API directly. - -@code -int tel_send_sms_deliver_report(const TelSmsDatapackageInfo_t *pDataPackage, TelSmsResponse_t RPCause, int *pRequestId); -@endcode - -This API is restricted for direct use. Use the Message Framework API instead. - -SAMPLE CODE -@code -#include -#include -#include -#include -void send_delivery() -{ - int ret_status; - int requestId = -1; - TelSmsResponse_t RPCause; - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - TelSmsDatapackageInfo_t *del_report = NULL; - - del_report = malloc(sizeof(TelSmsDatapackageInfo_t)); - memset(del_report, 0, sizeof(TelSmsDatapackageInfo_t)); - //Encode Send Delivery Report here - //EncodeSmsDeliveryReportTpdu(); - - RPCause = TAPI_NETTEXT_SENDSMS_SUCCESS; - printf("***receive message (Api:SendDeliverreport)****\n"); - - ret_status = tel_send_sms_deliver_report(del_report, RPCause, &requestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - //WAIT FOR EVENT HERE -} -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d]\n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Send SMS TO GET eventType - { - case TAPI_EVENT_NETTEXT_DELIVERY_REPORT_CNF: - printf("\n***************************************\n"); - printf("\n$$$ DELIVER REPORT NOTI$$$\n"); - printf("\n***************************************\n"); - break; - } - //... -} -@endcode -@} -@defgroup Use_Cases4_14 Setting Memory Status -@ingroup Use_Cases4_SMS -@{ - - -

Setting Memory Status

-[Note] Telephony Emulator does not support this feature. -@n This API is used by applications to inform the modem about the memory status of PDA (whether FULL or AVAILABLE) so that modem can inform network. You should not access this API directly. - -@code -int tel_set_sms_memory_status (int MemoryStatus , int *pRequestId); -@endcode - -This API is restricted for direct use. Use the Message Framework API instead. - -SAMPLE CODE: -@code -#include -#include -#include -#include -void set_memstatus() -{ - - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int pRequestId = 0; - int MemoryStatus = TAPI_NETTEXT_PDA_MEMORY_STATUS_AVAILABLE; - - ret_status = tel_set_sms_memory_status(MemoryStatus, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - //WAIT FOR EVENT HERE -} -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Send SMS TO GET eventType - { - case TAPI_EVENT_NETTEXT_SET_REQUEST_CNF: - TelSmsSetResponse *RequestType; - printf("\n***************************************\n"); - printf("\n$$$$$$ SET CONFIRMATION $$$$$$ \n"); - RequestType = (TelSmsSetResponse *)EventData; - if (*RequestType == TAPI_NETTEXT_SETMEMORYSTATUS_RSP) { - printf("\n$$$$$$ SET Memory Status $$$$$$ \n"); - } - break; - } - //... -} -@endcode -@} -@defgroup Use_Cases4_15 Setting Message Status -@ingroup Use_Cases4_SMS -@{ - - -

Setting Message Status

-[Note] Telephony Emulator does not support this feature. -This API is used by applications to set the message status in the Sim file. You should not access this API directly; use the Message Framework API. - -@code -int tel_set_sms_message_status(int Index, TelSmsMsgStatus_t MsgStatus, int *pRequestId); -@endcode - -This API is restricted for direct use. Use the Message Framework API instead. - -SAMPLE CODE: -@code -#include -#include -#include -#include - -void set_msgstatus() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int Index = 2; - int pRequestId = 0; - TelSmsMsgStatus_t MsgStatus = TAPI_NETTEXT_STATUS_READ; - - ret_status = tel_set_sms_message_status (Index, MsgStatus, &pRequestId); - printf ("The return value is %d\n", ret_status); - printf("RequestId is %d\n", pRequestId); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - //WAIT FOR EVENT HERE -} -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) - { - case TAPI_EVENT_NETTEXT_SET_REQUEST_CNF: - TelSmsSetResponse *RequestType; - printf("\n***************************************\n"); - printf("\n$$$$$$ SET CONFIRMATION $$$$$$ \n"); - RequestType = (TelSmsSetResponse *)EventData; - if (*RequestType == TAPI_NETTEXT_SETMESSAGESTATUS_RSP) { - printf("\n$$$$$$ SET Memory Status $$$$$$ \n"); - } - break; - } - //... -} -@endcode -@} -@defgroup Use_Cases4_16 Getting SMS Parameter Count -@ingroup Use_Cases4_SMS -@{ - - -

Getting SMS Parameter Count

-[Note] Telephony Emulator does not support this feature. -@n This API is used by applications to get the count of sms parameter records stored in Sim EF. You should not access this API directly. - -@code -int tel_get_sms_parameter_count (int *pRequestId); -@endcode - -This API is restricted for direct use. Use the Message Framework API instead. - -SAMPLE CODE: -@code -#include -#include -#include -#include - -void get_paramcount() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int pRequestId = 0; - - ret_status = tel_get_sms_parameter_count (&pRequestId); - printf ("The return value is %d\n", ret_status); - if (ret_status == TAPI_API_SUCCESS) - { - printf("successful\n"); - } - else - { - printf("error = %d\n", ret_status); - } - //WAIT FOR EVENT HERE -} -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Send SMS TO GET eventType - { - case TAPI_EVENT_NETTEXT_PARAM_COUNT_IND: - printf("\n***************************************\n"); - printf("\n$$$ PARAM COUNT NOTI$$$\n"); - printf("\n***************************************\n"); - break; - } - //... -} -@endcode -@} -

NETWORK Registration and Configuration - -@defgroup Use_Cases5_1 Event register and deregister -@ingroup Use_Cases5_NETWORK -@{ - -

Event register and deregister

-To receive asynchronous event notifications for the network APIs, the registration of related events with their associated call backs is required. When an asynchronous API is called, the confirmation is returned as an asynchronous event notification which invokes the callback function along with the event data. - -Network Notification Events -@code -TAPI_EVENT_NETWORK_LOCATIONCELLINFO_IND -TAPI_EVENT_NETWORK_RADIO_INFO_IND -TAPI_EVENT_NETWORK_SPN_INFO -TAPI_EVENT_NETWORK_DISPLAYINFO_IND -@endcode - -SAMPLE CODE: -@code -// REGISTER EVENT -unsigned int subscription_id = 0; -int api_err; - -api_err = tel_init(); -if (api_err != TAPI_API_SUCCESS) -{ - TEST_DEBUG("TelTapiInit Failed - api_err = %d \n", api_err); -} - -api_err = tel_register_event(TAPI_EVENT_NETWORK_GETNWBAND_CNF, &subscription_id, (TelAppCallback)&app_callback); -printf("Network Event registration is Done: sub id is %d, api_err is %d\n", subscription_id, api_err); - -tel_register_app_name("com.samsung.appname"); - -// DEREGISTER EVENT -api_err = tel_deregister_event (subscription_id); -if (api_err != TAPI_API_SUCCESS) -{ - printf("Event Class Unregeration Fail\n"); -} - -// Network notification callback function -void app_callback(void) -{ - int eventClass; - int eventType; - int requestId; - int status; - void *EventData = NULL; - - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - printf(" app _callback is called \n"); - - print_events((int)eventType); - printf("\n event came in power_callback [%d] \n", eventType); - printf("\n expected event is in callback [%d] \n", expected_event); - - switch (eventType) - { - case TAPI_EVENT_NETWORK_LOCATIONCELLINFO_IND: - TelSmsDatapackageInfo_t *ptrDataPackage = NULL; - printf("SMS Incoming Message\n"); - ptrDataPackage = (TelSmsDatapackageInfo_t *)EventData; - // Decoding Service Center Address - // Decoding TPDU(SMS-DELIVER, SMS-STATUS) - break; - - case TAPI_EVENT_NETWORK_RADIO_INFO_IND: - TelSmsDatapackageInfo_t *ptrDataPackage = NULL; - printf("SMS Incoming Message\n"); - ptrDataPackage = (TelSmsDatapackageInfo_t *)EventData; - // Decoding Service Center Address - // Decoding TPDU(SMS-DELIVER, SMS-STATUS) - break; - - case TAPI_EVENT_NETWORK_SPN_INFO: - TelSmsDatapackageInfo_t *ptrDataPackage = NULL; - printf("SMS Incoming Message\n"); - ptrDataPackage = (TelSmsDatapackageInfo_t *)EventData; - // Decoding Service Center Address - // Decoding TPDU(SMS-DELIVER, SMS-STATUS) - break; - - case TAPI_EVENT_NETWORK_DISPLAYINFO_IND: - TelSmsDatapackageInfo_t *ptrDataPackage = NULL; - printf("SMS Incoming Message\n"); - ptrDataPackage = (TelSmsDatapackageInfo_t *)EventData; - // Decoding Service Center Address - // Decoding TPDU(SMS-DELIVER, SMS-STATUS) - break; - } -} -@endcode -@} -@defgroup Use_Cases5_2 Network Selection -@ingroup Use_Cases5_NETWORK -@{ - - -

Network Selection

-Telephony provides APIs which can request the lower layers use the network (PLMN) which has been selected by the user from the Network List displayed to the User. - -@code -int tel_select_network_automatic(int *pRequestId) -int tel_select_network_manual(unsigned int Plmn, int *pRequestId) -@endcode - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" - -void select_nw() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int pRequestID; - unsigned int plmn = 0; - - //CASE 1. MANUAL MODE - plmn = 45454; - ret_status = tel_select_network_manual(Plmn, &pRequestId); - - // CASE 2. AUTOMATIC MODE - // selectionMode = TAPI_NETWORK_SELECTIONMODE_AUTOMATIC; - ret_status = tel_select_network_automatic(&pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - - //WAIT FOR EVENT HERE -} - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) - { - case TAPI_EVENT_NETWORK_SELECT_CNF: - printf("\n$$$$$$ TAPI_EVENT_NETWORK_SELECT_CNF $$$$$$ \n"); - } -} -@endcode -@} -@defgroup Use_Cases5_3 Network Search -@ingroup Use_Cases5_NETWORK -@{ - - -

Network Search

-This API is used to search for the available networks, and to provide the Network List to the User/Application. - -@code -int tel_search_network (int *pRequestId); -@endcode - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" - -void searchnw() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - - ret_status = tel_search_network(&pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - //WAIT FOR EVENT HERE -} -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Network Selection TO GET eventType - { - case TAPI_EVENT_NETWORK_SEARCH_CNF: - int ui_entry_count = 0; - TelNetworkPlmnList_t *pNetSearchCnf; - pNetSearchCnf = (TelNetworkPlmnList_t *)EventData; - while (ui_entry_count < pNetSearchCnf->networks_count) - { - printf("Type_of_plmn[%d] 0:unkwon,1:home,2:available,3:forbidden, NetworkName[%s]", - pNetSearchCnf->network_list[ui_entry_count].type_of_plmn, - pNetSearchCnf->network_list[ui_entry_count].network_name); - printf("ServiceProviderName[%s]", pNetSearchCnf->network_list[ui_entry_count].service_provider_name); - printf("PLMN ID[%lu]", pNetSearchCnf->network_list[ui_entry_count].plmn_id); - ui_entry_count++; - } - break; - } - //... -} -@endcode -@} -@defgroup Use_Cases5_4 Selection Mode -@ingroup Use_Cases5_NETWORK -@{ - - -

Selection Mode

-Telephony provides APIs to set and retrieve the current mode of network selection i.e. automatic or manual. Request for Automatic network selection or Manual network selection will allow OEM provider to do PLMN Selection based on network selection preference. - -@code -int tel_get_network_selection_mode (int *pRequestId); -@endcode - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" -void get_selmode() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int pRequestId; - //GET THE SELECTION MODE - - ret_status = tel_get_network_selection_mode (&pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - //WAIT FOR EVENT HERE -} -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) // REFER Network Selection TO GET eventType - { - case TAPI_EVENT_NETWORK_GETSELECTIONMODE_CNF: - printf("\n$$$$$$ TAPI_EVENT_NETWORK_GETSELECTIONMODE_CNF $$$$$$ \n"); - break; - } - //... -} -@endcode -@} -@defgroup Use_Cases5_5 Service Domain -@ingroup Use_Cases5_NETWORK -@{ - - -

Service Domain

-Telephony provides APIs so that User/application can configure the service domain and also retrieve the present network service domain. - -@code -int tel_set_network_service_domain (TelNetworkServiceDomain_t ServiceDomain, int *pRequestId); -int tel_get_network_service_domain (int *pRequestId); -@endcode - -SAMPLE CODE -@code -#include -#include -#include -#include "TapiCommon.h" - -void set_servicedomain() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int pRequestId; - //SET NETWORK SERVICE DOMAIN - TelNetworkServiceDomain_t ServiceDomain = TAPI_NETWORK_SERVICE_DOMAIN_AUTOMATIC; - - ret_status = tel_set_network_service_domain (ServiceDomain, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - //WAIT FOR EVENT HERE -} -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - unsigned int temp_handle = -1; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Network Selection TO GET eventType - { - case TAPI_EVENT_NETWORK_SET_SVC_DOMAIN_CNF: - printf("\n$$$$$$ TAPI_EVENT_NETWORK_SET_SVC_DOMAIN_CNF $$$$$$ \n"); - break; - } - - //... -} - -//GET NETWORK SERVICE DOMAIN -#include -#include -#include "TapiCommon.h" -void get_servicedomain() -{ - int ret_status; - ret_status = tel_get_network_service_domain (&pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - //WAIT FOR EVENT HERE -} -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Network Selection TO GET eventType - { - case TAPI_EVENT_NETWORK_GET_SVC_DOMAIN_CNF: - printf("\n$$$$$$ TAPI_EVENT_NETWORK_GET_SVC_DOMAIN_CNF $$$$$$ \n"); - break; - //... - } -} -@endcode -@} -@defgroup Use_Cases5_6 Network Mode -@ingroup Use_Cases5_NETWORK -@{ - - -

Network Mode

-[Note] Telephony Emulator does not support this feature. -@n The Network Mode (Automatic, GSM, and WCDMA) can be configured at OEM provider, based on which lower layers can scan only those radio access technologies, to register with network. - -@code -int tel_set_network_mode (TelNetworkMode_t NwMode, int *pRequestId); -int tel_get_network_mode (int *pRequestId); -@endcode - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" -void setnwmode() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int pRequestId; - - ret_status = tel_set_network_mode(NwMode, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - //WAIT FOR EVENT HERE -} -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Network Selection TO GET eventType - { - case TAPI_EVENT_NETWORK_SETNWMODE_CNF: - printf("\n$$$$$$ TAPI_EVENT_NETWORK_SETNWMODE_CNF $$$$$$ \n"); - break; - //... - } -} - -//GET NETWORK MODE -#include -#include -#include "TapiCommon.h" - -void getnwmode() -{ - int ret_status; - int pRequestId; - - ret_status = tel_get_network_mode(&pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - //WAIT FOR EVENT HERE -} -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Network Selection TO GET eventType - { - case TAPI_EVENT_NETWORK_GETNWMODE_CNF: - printf("\n$$$$$$ TAPI_EVENT_NETWORK_GETNWMODE_CNF $$$$$$ \n"); - break; - //... - } -} -@endcode -@} -@defgroup Use_Cases5_7 Network Band -@ingroup Use_Cases5_NETWORK -@{ - - -

Network Band

-Telephony provides APIs to set and retrieve the network band and allows the underlying OEM provider to scan the set band. - -@code -int tel_set_network_band (TelNetworkBandPreferred_t BandMode, TelNetworkBand_t Band, int *pRequestId); -int tel_get_network_band ( int *pRequestId); -@endcode - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" -void setnwband() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int pRequestId; - TelNetworkBandPreferred_t BandMode = TAPI_NETWORK_BAND_MODE_PREFERRED; - TelNetworkBand_t Band = TAPI_NETWORK_BAND_TYPE_GSM_900_1800; - int pRequestId = 0; - - ret_status = tel_set_network_band (BandMode,Band, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - //WAIT FOR EVENT HERE -} -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Network Selection TO GET eventType - { - case TAPI_EVENT_NETWORK_SETNWBAND_CNF: - printf("\n$$$$$$ TAPI_EVENT_NETWORK_SETNWBAND_CNF $$$$$$ \n"); - break; - //... - } -} - -//GET NETWORK BAND -#include -#include -#include "TapiCommon.h" -void getnwband() -{ - int ret_status; - int pRequestId; - ret_status = tel_get_network_band (BandMode, Band, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - //WAIT FOR EVENT HERE -} -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) // REFER Network Selection TO GET eventType - { - case TAPI_EVENT_NETWORK_GETNWBAND_CNF: - printf("\n$$$$$$ TAPI_EVENT_NETWORK_GTNWBAND_CNF $$$$$$ \n"); - break; - //... - } -} -@endcode -@} -@defgroup Use_Cases5_8 Preferred PLMN -@ingroup Use_Cases5_NETWORK -@{ - - -

Preferred PLMN

-[Note] Telephony Emulator does not support this feature. -@n Telephony provides APIs which can be used to set and retrieve the preferred plmn of network. - -@code -int tel_set_network_preferred_plmn (TelNetworkPrefferedPlmnOp_t Operation, TelNetworkPrefferedPlmnInfo_t PreffPlmnInfo, int *pRequestId); -int tel_get_network_preferred_plmn ( int *pRequestId); -@endcode - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" -void set_preferredplmn() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - int ret_status; - int pRequestId; - - //SET PLMN - TelNetworkPrefferedPlmnOp_t Operation = TAPI_NETWORK_PREF_PLMN_ADD; - TelNetworkPrefferedPlmnInfo_t PreffPlmnInfo; - unsigned char *plmn = "45454"; - - memset(&PreffPlmnInfo, 0, sizeof(TelNetworkPrefferedPlmnInfo_t)); - PreffPlmnInfo.Index = 0; - PreffPlmnInfo.SystemType = TAPI_NETWORK_SYSTEM_GSM; - memcpy(PreffPlmnInfo.Plmn, plmn, 6); - - ret_status = tel_set_network_preferred_plmn (Operation,PreffPlmnInfo, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - //WAIT FOR EVENT HERE -} -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - //... - //... - switch (eventType) //REFER Network Selection TO GET eventType - { - case TAPI_EVENT_NETWORK_SETPREFFPLMN_CNF: - printf("\n$$$$$$ TAPI TAPI_EVENT_NETWORK_SETPREFFPLMN_CNF $$$$$$ \n"); - break; - } - //... -} -@endcode - -@code -//GET PLMN -#include -#include -#include "TapiCommon.h" -void get_preferredplmn() -{ - int ret_status; - int pRequestId; - - ret_status = tel_get_network_preferred_plmn (&pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); //WAIT FOR EVENT HERE - //WAIT FOR EVENT HERE -} - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Network Selection TO GET eventType - { - case TAPI_EVENT_NETWORK_GETPREFFPLMN_CNF: - printf("\n$$$$$$ TAPI TAPI_EVENT_NETWORK_GETPREFFPLMN_CNF $$$$$$ \n"); - break; - } -@endcode -@} -@defgroup Use_Cases5_9 Network Roaming Mode -@ingroup Use_Cases5_NETWORK -@{ - - -

Network Roaming Mode

-[Note] Telephony Emulator does not support this feature. -Telephony provides APIs which can be used to set and retrieve the mode of network roaming. This is for CDMA. - -@code -int tel_set_network_roaming (TelNetworkRoamingMode_t *RoamingMode, int *pRequestId); -int tel_get_network_roaming (int *pRequestId); -@endcode - -SAMPLE CODE: -@code -//SetRoamingMode -#include -#include -#include "TapiCommon.h" -void set_roamingmode() -{ - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - - TelNetworkRoamingMode_t roamingMode; - int ret_status; - - roamingMode.pref_net_type = TAPI_NETWORK_PREF_NET_HOME_ONLY; - roamingMode.prl_pref_only = TAPI_NETWORK_PRL_PREF_ONLY_ON; - - ret_status = tel_get_network_roaming (&roamingMode, &requestId); - if (ret_status == TAPI_API_SUCCESS) - printf("Successful\n"); - else - printf("error:%d\n", ret_status); - - //WAIT FOR EVENT HERE -} -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Network Selection TO GET eventType - { - case TAPI_EVENT_NETWORK_SET_ROAMING_MODE_CNF: - printf("$$$$$TAPI_EVENT_NETWORK_SET_ROAMING_MODE_CNF$$$$$\n"); - //.... - break; - } - //... -} -@endcode - -@code -//GetRoamingMode -#include -#include -#include -void set_roamingmode() -{ - int ret_status; - - ret_status = tel_get_network_roaming(&requestId); - if (ret_status == TAPI_API_SUCCESS) - ("Successful\n"); - else - printf("error:%d\n", ret_status); - - //WAIT FOR EVENT HERE -} - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Network Selection TO GET eventType - { - case TAPI_EVENT_NETWORK_GET_ROAMING_MODE_CNF: - printf("$$$$TAPI_EVENT_NETWORK_GET_ROAMING_MODE_CNF$$$$\n"); - //... - break; - } - //... -} -@endcode -@} -@defgroup Use_Cases5_10 Network CDMA Hybrid Mode -@ingroup Use_Cases5_NETWORK -@{ - - -

Network CDMA Hybrid Mode

-[Note] Telephony Emulator does not support this feature. -Telephony provides APIs which can be used to set and get the CDMA Hybrid Mode. This is for CDMA. -Hybrid means 1x only, EVDO only combined. we can set network mode separately also in CDMA network. - -@code -int tel_set_network_hybrid_in_cdma (TelNetworkCDMAHybridMode_t CDMAHybridMode, int *pRequestId); -int tel_get_network_hybrid_in_cdma (int *pRequestId); -@endcode - -SAMPLE CODE: -@code -//Set CDMA Hybrid Mode -#include -#include -#include "TapiCommon.h" -void set_hybridmode() -{ - int ret_status; - - //SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - - TelNetworkCDMAHybridMode_t cdmaHybridMode; - cdmaHybridMode = TAPI_NETWORK_CDMA_HYBRID; // TAPI_NETWORK_CDMA_1X_ONLY, TAPI_NETWORK_CDMA_EVDO_ONLY, TAPI_NETWORK_CDMA_HYBRID(1X + EVDO) - - ret_status = tel_get_network_hybrid_in_cdma(cdmaHybridMode, &requestId); - if (ret_status == TAPI_API_SUCCESS) - printf("Successful\n"); - else - printf("error:%d\n", ret_status); - - //WAIT FOR EVENT HERE -} -//CALLBACK FUNCTION TO BE USED - -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Network Selection TO GET eventType - { - case TAPI_EVENT_NETWORK_SET_CDMA_HYBRID_MODE_CNF: - printf("\n$$$$$$ TAPI_EVENT_NETWORK_SET_CDMA_HYBRID_MODE_CNF $$$$$$ \n"); - break; - //... - } -} -@endcode - -@code -//Get CDMA Hybrid Mode -#include -#include -#include -void get_hybridmode() -{ - int ret_status; - - ret_status = tel_get_network_hybrid_in_cdma (&requestId); - if (ret_status == TAPI_API_SUCCESS) - printf(successful\n); - else - printf(error=%d\n, ret_status); - //WAIT FOR EVENT HERE -} - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - //... - - eventClass = event->EventClass; - - eventType = event->EventType; - - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - //... - //... - switch (eventType) //REFER Network Selection TO GET eventType - { - case TAPI_EVENT_NETWORK_GET_CDMA_HYBRID_MODE_CNF: - printf("$$$$$TAPI_EVENT_NETWORK_GET_CDMA_HYBRID_MODE_CNF$$$$\n"); - //... - break; - } -} -@endcode -@} -@defgroup Use_Cases5_11 SIM -@ingroup Use_Cases5_NETWORK -@{ - - -

SIM

-Event Register and Deregister -To receive asynchronous event notifications for the SIM APIs, the registration of related events with their associated call backs is required. When an asynchronous API is called, the confirmation is returned as an asynchronous event notification which invokes the callback function along with the event data. - -SAMPLE CODE: -@code -// REGISTER EVENT -unsigned int subscription_id = 0; -TapiResult_t api_err; - -api_err = TelTapiInit(); -if (api_err != TAPI_API_SUCCESS) -{ - TEST_DEBUG("TelTapiInit Failed - api_err = %d \n", api_err); -} - -api_err = TelTapiRegisterEvent (TAPI_EVENT_SIM_ENABLE_PERS_CNF, &subscription_id, (TelAppCallback)&app_callback); -printf("VSIM Event registration is Done: sub id is %d, api_err is %d\n",subscription_id,api_err); - - -// DEREGISTER EVENT -api_err = TelTapiDeRegister(subscription_id); -if (api_err != TAPI_API_SUCCESS) -{ - printf("Event Class Unregeration Fail\n"); - -} -@endcode -@} -@defgroup Use_Cases5_12 PIN, SIM Lock operations -@ingroup Use_Cases5_NETWORK -@{ - - -

PIN, SIM Lock operations

-Telephony provides APIs to enable/disable pin, change pin, unblock pin, pin verification and sim lock enable/disable/verification. It is also possible to retrieve the pin/sim lock status. - -@code -int tel_enable_sim_security(TelSimSecPw_t *sec_data, int *req_id); -int tel_disable_sim_security(TelSimSecPw_t *sec_data, int *req_id); -int tel_change_sim_pins(const TelSimSecPw_t *old_pin , const TelSimSecPw_t *new_pin, int *req_id); -int tel_verify_sim_puks(const TelSimSecPw_t *puk_data, const TelSimSecPw_t *new_pin_data, int *req_id) -int tel_verifiy_sim_pins(const TelSimSecPw_t *pin_data, int *req_id) -int tel_get_sim_security_status(TelSimPinType_t type, TelSimPinStatus_t *status) -@endcode - -SAMPLE CODE: PIN1/PIN2/SIM LOCK/PUK1 VERIFICATION AND CHANGE PIN1 -@code -#include -#include -#include "TapiCommon.h" - -// OPERATION REQUEST PIN1 VERIFICATION PART -#define PIN1_NORMAL "0000" //Sample PIN1 code - -Void pin1_verify() -{ - int request_id = 0; - int err_code; - int length = TAPI_SIM_PIN_LENGTH + 1; - char init_pin_val[length] ; - TelSimSecPw_t pin_data; - - strcpy(init_pin_val, PIN1_NORMAL); - - pin_data.type = TAPI_SIM_PTYPE_PIN1; - pin_data.pw_len = strlen(init_pin_val); - - printf("pw_len[%d]", pin_data.pw_len); - - pin_data.pw = (char*)malloc(length); - memcpy(pin_data.pw, init_pin_val, length); - - err_code = tel_verifiy_sim_pins(&pin_data, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT FOR EVENT FROM HERE -} - -// OPERATION REQUEST PIN2 VERIFICATION PART -#define PIN2_NORMAL "0000" //Sample PIN2 code -Void verify_pin2() -{ - int request_id = 0; - int err_code; - int length = TAPI_SIM_PIN_LENGTH+1; - char init_pin_val[length] ; - TelSimSecPw_t pin_data; - - strcpy(init_pin_val, PIN2_NORMAL); - - pin_data.type = TAPI_SIM_PTYPE_PIN2; - pin_data.pw_len = strlen(init_pin_val); - - printf("pw_len[%d]", pin_data.pw_len); - - pin_data.pw = (char*)malloc(length); - memcpy(pin_data.pw, init_pin_val, length); - - err_code = tel_verifiy_sim_pins(&pin_data, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT FOR EVENT FROM HERE -} - -// OPERATION REQUEST CHANGE PIN1 PART -#define PIN1_ORG "0000" //Sample old PIN1 code -#define PIN1_NEW "1111" //Sample new PIN1 code -void change_pins() -{ - int request_id = 0; - int err_code; - int length = TAPI_SIM_PIN_LENGTH+1; - char init_old_pin_val[length] ; - char init_new_pin_val[length]; - TelSimSecPw_t old_pin; - TelSimSecPw_t new_pin; - - memset(&init_old_pin_val, 0, length); - memset(&init_new_pin_val, 0, length); - - strcpy(init_old_pin_val, PIN1_ORG); - - old_pin.type = TAPI_SIM_PTYPE_PIN1; - old_pin.pw_len = strlen(init_old_pin_val); - printf("pw_len[%d]", old_pin.pw_len); - old_pin.pw = (char*)malloc(length); - memcpy(old_pin.pw, init_old_pin_val, length); - - strcpy(init_new_pin_val, PIN1_NEW); - - new_pin.type = TAPI_SIM_PTYPE_PIN1; - new_pin.pw_len = strlen(init_new_pin_val); - printf("pw_len[%d]", new_pin.pw_len); - new_pin.pw = (char*)malloc(length); - memcpy(new_pin.pw, init_new_pin_val, length); - - err_code = tel_change_sim_pins(&old_pin, &new_pin, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT EVENT RESPONSE FROM HERE -} - -// OPERATION REQUEST VERIFICATION PUK1 PART -#define PUK1_NORMAL "00000000" //Sample PUK1 code -#define PIN1_NORMAL "0000" //Sample PIN1 code - -void verify_puks() -{ - int request_id = 0; - int err_code; - int length = TAPI_SIM_PIN_LENGTH + 1; - - char init_pin_val[length]; - char init_puk_val[length]; - - TelSimSecPw_t puk_data; - TelSimSecPw_t new_pin_data; - - strcpy(init_pin_val, PIN1_NORMAL); - strcpy(init_puk_val, PUK1_NORMAL); - - puk_data.type = TAPI_SIM_PTYPE_PUK1; // 0x00 - puk_data.pw_len = length; - puk_data.pw_len = strlen(init_puk_val); - printf("pw_len[%d]", puk_data.pw_len); - memcpy(puk_data.pw, init_pin_val, length); - - new_pin_data.type = TAPI_SIM_PTYPE_PIN1; // 0x00 - new_pin_data.pw_len = strlen(init_pin_val); - printf("pw_len[%d]", new_pin_data.pw_len); - new_pin_data.pw = (char*)malloc(length); - memcpy(new_pin_data.pw, init_pin_val, length); - - err_code = tel_verify_sim_puks(&puk_data, &new_pin_data, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT EVENT RESPONSE FROM HERE -} -// OPERATION REQUEST SIM LOCK VERIFICATION PART -#define SIM_NORMAL "0000" //Sample SIM Lock code -Void verify_sim() -{ - int request_id = 0; - int err_code; - int length = TAPI_SIM_PIN_LENGTH + 1; - char init_pin_val[length] ; - TelSimSecPw_t pin_data; - - strcpy(init_pin_val, SIM_NORMAL); - - pin_data.type = TAPI_SIM_PTYPE_SIM; - pin_data.pw_len = strlen(init_pin_val); - - printf("pw_len[%d]", pin_data.pw_len); - - pin_data.pw = (char*)malloc(length); - memcpy(pin_data.pw, init_pin_val, length); - - err_code = tel_verifiy_sim_pins(&pin_data, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT FOR EVENT FROM HERE -} - -// EVENT RESPONSE PART -//CALLBACK FUNCTION TO BE USED - -static void app_callback(TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*)event; - - unsigned int temp_handle = -1; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - printf("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - switch (EventType) - { - case TAPI_EVENT_SIM_VERIFY_SEC_CNF: - printf("********TAPI_EVENT_SIM_VERIFY_SEC_CNF**********"); - - TelSimSecResult_t *pPinInfo = (TelSimSecResult_t*) EventData; - - if (status == TAPI_SIM_OPERATION_TIMEOUT ) - { - printf("TAPI SIM Operation Timeout!!"); - } - else if (sim_event->Status == TAPI_SIM_PIN_OPERATION_SUCCESS) - { - if (pPinInfo->type == TAPI_SIM_PTYPE_PIN1) - { - printf("PIN1 Verification Success!"); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_SIM) - { - printf("SIM Lock Verification Success!"); - } - else - { - printf("PIN2 Vefication Success!"); - } - } - else - { - if (pPinInfo->type == TAPI_SIM_PTYPE_PIN1) - { - printf("PIN1 Verification Failed! - PIN Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PUK1) - { - printf("PIN1 Verification Failed! - PUK Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PIN2) - { - printf("PIN2 Verification Failed! - PIN2 Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PUK2) - { - printf("PIN2 Verification Failed! - PUK2 Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_SIM) - { - printf("SIM Lock Verification Failed! - SIM Lock code Required"); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - } - printf("********************************************"); - break; - - case TAPI_EVENT_SIM_VERIFY_PUK_CNF: - printf("**********TAPI_EVENT_SIM_VERIFY_PUK_CNF********"); - - TelSimSecResult_t *pPinInfo = (TelSimSecResult_t*)EventData; - - if (status == TAPI_SIM_PIN_OPERATION_SUCCESS) - { - if (pPinInfo->type == TAPI_SIM_PTYPE_PIN1) - { - printf("Unblock PIN1 Success!"); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PIN2) - { - printf("Unblock PIN2 Success!"); - } - } - else - { - if (pPinInfo->type == TAPI_SIM_PTYPE_PUK1) - { - printf("PIN1 Verification Failed! - PUK Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PUK2) - { - printf("PIN2 Verification Failed! - PUK2 Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - } - printf("********************************************"); - break; - - case TAPI_EVENT_SIM_CHANGE_PINS_CNF: - printf("*********TAPI_EVENT_SIM_CHANGE_PINS_CNF*******************"); - - TelSimSecResult_t *pPinInfo = (TelSimSecResult_t*)EventData; - - printf("PinType[%d]", pPinInfo->type); - - if (status == TAPI_SIM_PIN_OPERATION_SUCCESS) - { - if (pPinInfo->type == TAPI_SIM_PTYPE_PIN1) - { - printf("Change PIN1 Success!"); - } - else - { - printf("Change PIN2 Success!"); - } - - } - else - { - if (pPinInfo->type == TAPI_SIM_PTYPE_PIN1) - { - printf("Change PIN1 Failed! - PIN Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PUK1) - { - printf("Change PIN1 Failed! - PUK Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PIN2) - { - printf("Change PIN2 Failed! - PIN2 Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PUK2) - { - printf("Change PIN2 Failed! - PUK2 Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - } - printf("********************************************"); - break; - } - //... -} -@endcode - -SAMPLE CODE: ENABLE/DISABLE PIN1 and SIM LOCK -@code -#include -#include -#include "TapiCommon.h" - -// OPERATION REQUEST DISABLING PIN1 PART -#define PIN1_NORMAL "0000" //Sample PIN1 code -void disable_pin1() -{ - int request_id = 0; - int err_code; - int length = TAPI_SIM_PIN_LENGTH+1; - char init_pin_val[length]; - - strcpy(init_pin_val, PIN1_NORMAL); - - TelSimSecPw_t sec_data; - sec_data.type = TAPI_SIM_PTYPE_PIN1; // 0x00 - sec_data.pw_len = strlen(init_pin_val); - printf("pw_len[%d]", sec_data.pw_len); - - sec_data.pw = (char*)malloc(length); - memcpy(sec_data.pw, init_pin_val, length); - - err_code = tel_disable_sim_security(&sec_data, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT EVENT RESPONSE FROM HERE -} - -// OPERATION REQUEST ENABLING PIN1 PART -#define PIN1_NORMAL "0000" //Sample PIN1 code -void enable_pin1() -{ - int request_id = 0; - int err_code; - int length = TAPI_SIM_PIN_LENGTH+1; - char init_pin_val[length]; - - strcpy(init_pin_val, PIN1_NORMAL); - - TelSimSecPw_t sec_data; - sec_data.type = TAPI_SIM_PTYPE_PIN1; // 0x00 - sec_data.pw_len = strlen(init_pin_val); - printf("pw_len[%d]", sec_data.pw_len); - - sec_data.pw = (char*)malloc(length); - memcpy(sec_data.pw, init_pin_val, length); - - err_code = tel_enable_sim_security(&sec_data, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - //WAIT EVENT RESPONSE FROM HERE -} - -// OPERATION REQUEST DISABLING SIM LOCK PART -#define SIM_NORMAL "0000" //Sample SIM LOCK code -void disable_sim() -{ - int request_id = 0; - int err_code; - int length = TAPI_SIM_PIN_LENGTH+1; - char init_pin_val[length]; - - strcpy(init_pin_val, SIM_NORMAL); - - TelSimSecPw_t sec_data; - sec_data.type = TAPI_SIM_PTYPE_SIM; // 0x00 - sec_data.pw_len = strlen(init_pin_val); - printf("pw_len[%d]", sec_data.pw_len); - - sec_data.pw = (char*)malloc(length); - memcpy(sec_data.pw, init_pin_val, length); - - err_code = tel_disable_sim_security(&sec_data, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - //WAIT EVENT RESPONSE FROM HERE -} - - -// OPERATION REQUEST ENABLING SIM LOCK PART -#define SIM_NORMAL "0000" //Sample SIM LOCK code -void enable_sim() -{ - int request_id = 0; - int err_code; - int length = TAPI_SIM_PIN_LENGTH+1; - char init_pin_val[length]; - - strcpy(init_pin_val, SIM_NORMAL); - - TelSimSecPw_t sec_data; - sec_data.type = TAPI_SIM_PTYPE_SIM; // 0x00 - sec_data.pw_len = strlen(init_pin_val); - printf("pw_len[%d]", sec_data.pw_len); - - sec_data.pw = (char*)malloc(length); - memcpy(sec_data.pw, init_pin_val, length); - - err_code = tel_enable_sim_security(&sec_data, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - //WAIT EVENT RESPONSE FROM HERE -} - - -// EVENT RESPONSE PART -//CALLBACK FUNCTION TO BE USED -static void app_callback(TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event; - - unsigned int temp_handle = -1; - - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - printf("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - - switch (EventType) - { - case TAPI_EVENT_SIM_DISABLE_SEC_CNF: - printf("****************TAPI_EVENT_SIM_DISABLE_SEC_CNF****************"); - - TelSimSecResult_t *pPinInfo = (TelSimSecResult_t*)EventData; - - if (status == TAPI_SIM_PIN_OPERATION_SUCCESS) - { - if (pPinInfo->type == TAPI_SIM_PTYPE_PIN1) - { - printf("Disable PIN1 Success!"); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PIN2) - { - printf("Disable PIN2 Success!"); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_SIM) - { - printf("Disable SIM LOCK Success!"); - } - } - else - { - if (pPinInfo->type == TAPI_SIM_PTYPE_PIN1) - { - printf("Disable PIN1 Failed! - PIN1Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PIN2) - { - printf("Disable PIN2 Failed! - PIN2 Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PUK1) - { - printf("Disable PIN1 Failed! - PUK1 Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PUK2) - { - printf("Disable PIN2 Failed! - PUK2 Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_SIM) - { - printf("Disable SIM LOCK Failed! - SIM LOCK CODE Required "); - } - } - printf("********************************************"); - break; - - case TAPI_EVENT_SIM_ENABLE_SEC_CNF: - printf("*****************TAPI_EVENT_SIM_ENABLE_SEC_CNF****************"); - - TelSimSecResult_t *pPinInfo = (TelSimSecResult_t*)EventData; - - if (status == TAPI_SIM_PIN_OPERATION_SUCCESS) - { - if (pPinInfo->type == TAPI_SIM_PTYPE_PIN1) - { - printf("Enable PIN1 Success!"); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PIN2) - { - printf("Enable PIN2 Success!"); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_SIM) - { - printf("Enable SIM LOCK Success!"); - } - } - else - { - if (pPinInfo->type == TAPI_SIM_PTYPE_PIN1) - { - printf("Enable PIN1 Failed! - PIN1Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PIN2) - { - printf("Enable PIN2 Failed! - PIN2 Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PUK1) - { - printf("Enable PIN1 Failed! - PUK1 Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PUK2) - { - printf("Enable PIN2 Failed! - PUK2 Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - - else if (pPinInfo->type == TAPI_SIM_PTYPE_SIM) - { - printf("Enable SIM LOCK Failed! - SIM LOCK CODE Required "); - } - } - printf("********************************************"); - break; - } - //... -} -@endcode - -SAMPLE CODE: GET PIN1/PIN2/SIM LOCK STATUS -@code -#include -#include -#include "TapiCommon.h" - -// OPERATION REQUEST GET PIN1/PIN2/SIM LOCK STATUS PART -void get_security_status() -{ - int error_code; - TelSimPinType_t type = TAPI_SIM_PTYPE_PIN1 // or TAPI_SIM_PTYPE_PIN2 or TAPI_SIM_PTYPE_SIM; - TelSimPinStatus_t status = -1; - printf("Get Security status"); - - err_code = tel_get_sim_security_status(type, &status); - if (err_code == TAPI_API_SUCCESS) - { - printf(" *****************************************************"); - switch (status) - { - case TAPI_SIM_PIN_STATUS_DISABLED: - printf("TAPI_SIM_PIN_STATUS_DISABLED "); - break; - - case TAPI_SIM_PIN_STATUS_ENABLED: - printf("TAPI_SIM_PIN_STATUS_ENABLED "); - break; - - case TAPI_SIM_PIN_STATUS_BLOCKED: - printf("TAPI_SIM_PIN_STATUS_BLOCKED "); - break; - - case TAPI_SIM_PIN_STATUS_PUK_BLOCKED: - printf("TAPI_SIM_PIN_STATUS_PUK_BLOCKED "); - break; - - case TAPI_SIM_PIN_STATUS_UNKNOWN: - printf("TAPI_SIM_PIN_STATUS_UNKNOWN "); - break; - - default: - printf(" Default case statment: sim_status(%d)", status); - break; - } - } - else - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - printf("*****************************************************"); -} -@endcode -@} -@defgroup Use_Cases5_13 Personalisation Lock -@ingroup Use_Cases5_NETWORK -@{ - - -

Personalisation Lock

-These APIs are used to enable/disable and get the status information about personalisation of network, network subset, corporate, service provider personalisation. - -@code -int tel_enable_sim_personalization(TelSimPersPw_t *pers_data, int *req_id); -int tel_disable_sim_personalization(TelSimPersPw_t *pers_data, int *req_id); -int tel_get_sim_personalization_status(TelSimPersType_t type, int *req_id); -@endcode - -SAMPLE CODE: GET PERSONALIZATION STATUS -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENIONED IN Event Register and Deregister -// OPERATION REQUEST GET NETWORK PERSONALIZATION PART -void get_net_pers() -{ - int request_id = 0; - int err_code; - - TelSimPersType_t type = TAPI_SIM_PERS_NET; - - err_code = tel_get_sim_personalization_status(type, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT EVENT RESPONSE FROM HERE -} - -// EVENT RESPONSE PART -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (eventType) - { - case TAPI_EVENT_SIM_PERS_STATUS_CNF: - int i = 0; - TelSimPersStatus_t* pers_status = (TelSimPersStatus_t*)EventData; - - printf("[SIM APP]*********** TAPI_EVENT_SIM_PERS_STATUS_CNF************\n"); - printf("[SIM APP]SIM lock personalisation event status = [%x]\n", status); - printf("[SIM APP]SIM lock personalisation status - net0-ns1-sp2-cp3 = [%d]\n", pers_status->type); - printf("[SIM APP]SIM lock personalisation status - unlock0-lock1 = [%d]\n", pers_status->mode); - printf("[SIM APP]***************************************************\n"); - break; - } -} -@endcode - -SAMPLE CODE: ENABLE/DISABLE PERSONALIZATION -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENIONED IN Event Register and Deregister -// OPERATION REQUEST ENABLING NETWORK PERSONALIZATION PART -#define NET_ENCODE "54500112345678" //Sample Network Personalization code -void enable_net_pers() -{ - printf("Lock Personalisation MCC+MNC 5\n"); - printf("Plese input Network Lock CODE : length of MCC+MNC, MCC, MNC, NCK\n"); - printf("We need to use this for testing : length of MCC+MNC(5), MCC(450), MNC(01), NCK(12345678) => 54500112345678\n"); - - int request_id = 0; - int err_code; - int length = 14+1; - char init_pin_val[length]; - - strcpy(init_pin_val, NET_ENCODE); - - TelSimPersPw_t lock_pers = {0,}; - lock_pers.type = TAPI_SIM_PERS_NET; - lock_pers.pw_len = 14; - lock_pers.pw = (char*)malloc(length); - memcpy(lock_pers.pw, init_password_val, length); - - err_code = tel_enable_sim_personalization(&lock_pers, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT EVENT RESPONSE FROM HERE -} - -// OPERATION REQUEST DISABLING NETWORK PERSONALIZATION PART -#define NET_DISCODE "12345678" //Sample Network Personalization code -void disable_net_pers() -{ - printf("de Personalisation key is 8 byte \n"); - printf("We need to use this for testing : 12345678\n"); - - int request_id = 0; - int err_code; - int length = 8+1; - char init_pin_val[length]; - - strcpy(init_pin_val, NET_DISCODE); - - TelSimPersPw_t lock_pers = {0,}; - lock_pers.pw_len = 8; //control key - lock_pers.pw = (char*)malloc(length); - memcpy(lock_pers.pw,init_password_val,length); - - err_code = tel_disable_sim_personalization(&lock_pers, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT EVENT RESPONSE FROM HERE -} - -// EVENT RESPONSE PART -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (eventType) - { - case TAPI_EVENT_SIM_DISABLE_PERS_CNF: - TelSimPinOperationResult_t opResult = (TelSimPinOperationResult_t)status; - - printf("[SIM APP]**** *TAPI_EVENT_SIM_DISABLE_PERS_CNF********\n"); - printf("[SIM APP]Eable Personalization event status = [%x]\n", opResult); - - if (opResult == TAPI_SIM_PIN_OPERATION_SUCCESS) - { - ("[SIM APP]Disable Personalization Success!\n"); - } - else - { - printf("[SIM APP]Verification Failed! - Correct Password Required\n"); - } - printf("\n***************************************************************\n"); - break; - - case TAPI_EVENT_SIM_ENABLE_PERS_CNF: - TelSimPinOperationResult_t opResult = (TelSimPinOperationResult_t)status; - - printf("[SIM APP]****** *TAPI_EVENT_SIM_ENABLE_PERS_CNF*********\n"); - printf("[SIM APP]Eable Personalization event status = [%x]\n", opResult); - - if (opResult == TAPI_SIM_PIN_OPERATION_SUCCESS) - { - printf("[SIM APP]Enable Personalization Success!\n"); - } - else - { - printf("[SIM APP]Verification Failed! - Correct Password Required\n"); - } - printf("\n***************************************************************\n"); - break; - } -} -@endcode -@} -@defgroup Use_Cases5_14 FDN -@ingroup Use_Cases5_NETWORK -@{ - - -

FDN

-These APIs are used to enable/disable FDN and to retrieve the current FDN status. - -@code -int tel_enable_sim_fdn(const unsigned char *pin2, int *pin2_len, int *req_id); -int tel_disable_sim_fdn(const unsigned char *pin2, int *pin2_len, int *req_id); -int tel_get_sim_fdn_status(int *fdn_status); -@endcode - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENIONED IN Event Register and Deregister - -// OPERATION REQUEST ENABLE FDN MODE PART -#define PIN2_NORMAL "0000" //Sample PIN2 code -void enable_fdn() -{ - int request_id = 0; - int api_ret; - int length = TAPI_SIM_PIN_LENGTH+1; - char init_pin_val[length] ; - - strcpy(init_pin_val, PIN2_NORMAL); - - TelSimSecPw_t pin_data = {0,}; - - pin_data.type = TAPI_SIM_PTYPE_PIN2; - pin_data.pw_len = strlen(init_pin_val); - - printf("pw_len[%d]", pin_data.pw_len); - - pin_data.pw = (char*)malloc(length); - memcpy(pin_data.pw, init_pin_val, length); - - err_code = tel_enable_sim_fdn(pin_data.pw, &pin_data.pw_len, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT FOR EVENT FROM HERE -} - - -// OPERATION REQUEST DISABLE FDN MODE PART -#define PIN2_NORMAL "0000" //Sample PIN2 code -void disable_fdn() -{ - int request_id = 0; - int api_ret; - int length = TAPI_SIM_PIN_LENGTH+1; - char init_pin_val[length] ; - - strcpy(init_pin_val, PIN2_NORMAL); - - TelSimSecPw_t pin_data = {0,}; - - pin_data.type = TAPI_SIM_PTYPE_PIN2; - pin_data.pw_len = strlen(init_pin_val); - - printf("pw_len[%d]", pin_data.pw_len); - - pin_data.pw = (char*)malloc(length); - memcpy(pin_data.pw, init_pin_val, length); - - err_code = tel_disable_sim_fdn(pin_data.pw, &pin_data.pw_len, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT FOR EVENT FROM HERE - - - // EVENT RESPONSE PART - //CALLBACK FUNCTION TO BE USED - static void app_callback (TelTapiEvent_t *event) - { - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event; - - unsigned int temp_handle = -1; - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (eventType) - { - case TAPI_EVENT_SIM_DISABLE_FDNMODE_CNF: - printf("**********TAPI_EVENT_SIM_DISABLE_FDNMODE_CNF***********"); - - TelSimSecResult_t *pPinInfo = (TelSimSecResult_t*)EventData; - - if (status == TAPI_SIM_PIN_OPERATION_SUCCESS) - { - if (pPinInfo->type == TAPI_SIM_PTYPE_PIN2) - { - printf("Disable FDN Success!"); - } - else - { - printf("Unhandled type[%d]", pPinInfo->type); - } - } - else - { - if (pPinInfo->type == TAPI_SIM_PTYPE_PIN2) - { - printf("Disable FDN Failed! - PIN2 Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PUK2) - { - printf("Disable FDN Failed! - PUK2 Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else - { - printf("Unhandled type[%d]", pPinInfo->type); - } - } - printf("********************************************"); - break; - - case TAPI_EVENT_SIM_ENABLE_FDNMODE_CNF: - printf("*******TAPI_EVENT_SIM_ENABLE_FDNMODE_CNF*******"); - - TelSimSecResult_t *pPinInfo = (TelSimSecResult_t*)EventData; - - if (status == TAPI_SIM_PIN_OPERATION_SUCCESS) - { - if (pPinInfo->type == TAPI_SIM_PTYPE_PIN2) - { - printf("Enable FDN Success!"); - } - else - { - printf("Unhandled type[%d]", pPinInfo->type); - } - } - else - { - if (pPinInfo->type == TAPI_SIM_PTYPE_PIN2) - { - printf("Enable FDN Failed! - PIN2 Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else if (pPinInfo->type == TAPI_SIM_PTYPE_PUK2) - { - printf("Enable FDN Failed! - PUK2 Required "); - printf("Remainint attempts [%d]", pPinInfo->retry_count); - } - else - { - printf("Unhandled type[%d]", pPinInfo->type); - } - } - printf("********************************************"); - break; - } - } - - - // OPERATION REQUEST GET FDN STATUS PART - void get_fdn_status() - { - printf("Get FDN status"); - int fdn_status = 0 ; - - err_code = tel_get_sim_fdn_status(&fdn_status); - if (err_code == TAPI_API_SUCCESS) - { - if (fdn_status == 0) - { - printf("*************************"); - printf("FDN disabled "); - printf("*************************"); - } - else - { - printf("*************************"); - printf("FDN enabled"); - printf("*************************"); - } - } - else - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - - } -@endcode -@} -@defgroup Use_Cases5_15 IMSI Information -@ingroup Use_Cases5_NETWORK -@{ - - -

IMSI Information

-This API retrieves the IMSI (International Mobile Subscriber Identity) information. - -@code -int tel_get_sim_imsi(TelSimImsiInfo_t* imsi); -@endcode - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" - -void getimsiInfo() -{ - int err_code; - TelSimImsiInfo_t sim_imsi_info; - - err_code = tel_get_sim_imsi (&sim_imsi_info); - if (err_code == TAPI_API_SUCCESS) - { - printf("[SIM APP] IMSI [mcc,mnc,msin]= "); - printf(" [%s]",sim_imsi_info.szMcc); - printf(" [%s]",sim_imsi_info.szMnc); - printf(" [%s]",sim_imsi_info.szMsin); - } - else - { - printf("Error Code [%x]\n", err_code); - } -} -@endcode -@} -@defgroup Use_Cases5_16 ECC Information -@ingroup Use_Cases5_NETWORK -@{ - - -

ECC Information

-This API retreieves the ECC (Emergency Call Codes) data. - -@code -int tel_get_sim_ecc(TelSimEccData_t *ecc_data, int *ecc_count); -@endcode - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" - -void geteccinfo() -{ - int err_code; - int ecc_rec_count = 0; - TelSimEccData_t ecc_info = {0,}; - - err_code = tel_get_sim_ecc (&ecc_info, &ecc_rec_count); - printf("The Retrun Status is %d", err_code); - - printf(" ECC count [%d]\n", ecc_rec_count); - printf("ECC1 [%s]\n", ecc_info.EccInfo.szEcc1); - printf("ECC2 [%s]\n", ecc_info.EccInfo.szEcc2); - printf("ECC3 [%s]\n", ecc_info.EccInfo.szEcc3); - printf("ECC4 [%s]\n", ecc_info.EccInfo.szEcc4); - printf("ECC5 [%s]\n", ecc_info.EccInfo.szEcc5); -} - -void get_uecc() -{ - int err_code; - int i = 0; - int uecc_rec_count = 0; - - printf(" Get USIM ECC "); - - TelSimEccData_t uecc_info = {{{0,}}}; - - err_code = tel_get_sim_ecc(&uecc_info, &uecc_rec_count); - if (err_code == TAPI_API_SUCCESS) - { - printf("ECC count [%d]",uecc_rec_count ); - - for (i=0; iLanguage Preference Information

-These APIs are used to get and set the language preference information stored in SIM. - -@code -int tel_get_sim_language(TelSimLanguageInfo_t *sim_language); -int tel_set_sim_language(TelSimLanguagePreferenceCode_t language, int *req_id); -@endcode - -SAMPLE CODE: GET SIM LANGUAGE -@code -#include -#include -#include "TapiCommon.h" - -void getlanguageprefinfo() -{ - int err_code; - TelSimLanguageInfo_t li_info; - int i; - - err_code = tel_get_sim_language (&li_info); - printf("Error Code [%x]\n", err_code); - - for (i =0; i Val [%d]\n", i, li_info.Lp[i]); -} -@endcode - -SAMPLE CODE: UPDATE SIM LANGUAGE -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENIONED IN Event Register and Deregister -// OPERATION REQUEST UPDATE SIM LANGUAGE PART -void get_net_pers() -{ - int err_code; - int request_id = 0; - TelSimLanguagePreferenceCode_t language = 0x00; - - language = TAPI_SIM_LP_ENGLISH; //0x01 - - err_code = tel_set_sim_language(language, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT EVENT RESPONSE FROM HERE -} - - -// EVENT RESPONSE PART -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event; - - unsigned int temp_handle = -1; - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (eventType) - { - case TAPI_EVENT_SIM_SET_LANGUAGE_CNF: - printf("*****TAPI_EVENT_SIM_SET_LANGUAGE_CNF*********"); - printf("update event status = [0x%x]", status); - printf("*********************************************"); - break; - - } -} -@endcode -@} -@defgroup Use_Cases5_18 Getting Card Type -@ingroup Use_Cases5_NETWORK -@{ - - -

Getting Card Type

-This API is a synchronous API which gets the Card Type i.e. whether the SIM Card is a GSM SIM or a 3G SIM. - -@code -int tel_get_sim_type(TelSimCardType_t *card_type); -@endcode - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" - -void getcardtype() -{ - int err_code; - TelSimCardType_t cardInfo; - - printf("Get card type !!!\n"); - err_code = tel_get_sim_type (&cardInfo); - printf("card type is %d\n", cardInfo); -} -@endcode -@} -@defgroup Use_Cases5_19 Getting SIM Card Initialization Status -@ingroup Use_Cases5_NETWORK -@{ - - -

Getting SIM Card Initialization Status

-API is a synchronous API which gets the Card Init status and Identification. - -@code -int tel_get_sim_init_info(TelSimCardStatus_t *sim_status, int *card_changed); -@endcode - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" - -// OPERATION REQUEST GET CARD INIT STATUS PART -void get_sim_init_status() -{ - int err_code; - TelSimCardStatus_t status = 0x00; - int b_card_changed = 0; - - err_code = tel_get_sim_init_info(&status, &b_card_changed); - if (err_code == TAPI_API_SUCCESS) - { - printf("**********************************************"); - printf("CardStatus:[0x%x]",status); - printf("b_card_changed[%d]\n",b_card_changed); - printf("**********************************************"); - } - else - { - printf("TAPI Fail: Error Code [%d]\n", err_code); - } -} -@endcode -@} -@defgroup Use_Cases5_20 SIM ACCESS COMMANDS Interface -@ingroup Use_Cases5_NETWORK -@{ - - -

SIM ACCESS COMMANDS Interface

-This API is used to handle SIM EF data directly according to sim access command (select-file info, read, update command). Use_Cases is defined in the 3GPP or ETSI SIM specifications. - -@code -int tel_req_sim_access(const TelSimRSimReq_t *rsim_data, int *req_id); -@endcode - -SAMPLE CODE: EF HANDLING ( SELECT-FILE INFO) -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENIONED IN Event Register and Deregister -// OPERATION REQUEST GET SIM FILE INFO PART -void get_sim_file_info() -{ - int err_code; - int request_id = 0; - - TelRSimReq_t rsim_data; - rsim_data.file_id = TAPI_SIM_EFILE_SPN; // rsim access : sim file id to access - rsim_data.rsim_cmd = TAPI_SIM_GET_RESPONSE; // rsim access : get response, read, update available - - err_code = tel_req_sim_access(&rsim_data, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT EVENT RESPONSE FROM HERE -} - -// EVENT RESPONSE PART -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - - int status; - - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event; - - unsigned int temp_handle = -1; - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (eventType) - { - case TAPI_EVENT_SIM_RSIM_ACCESS_CNF: - TelSimReadFileRaw_t* rsim_resp = (TelSimReadFileRaw_t*)EventData; - - printf("*******TAPI_EVENT_SIM_RSIM_ACCESS_CNF**********"); - printf("Read event status = [0x%x]", status); - - if ((rsim_resp->sw1 == 0x90 && rsim_resp->sw2 == 0x00) ||rsim_resp->sw1 == 0x91) - { - printf("**********GET FILE INFO************"); - printf("you should parse current data array value properly regarding 3GPP or ETSI TS 102 221 SPEC"); - } - printf("************************************************"); - break; - } -} -@endcode -@} -@defgroup Use_Cases5_21 SIM Mailbox EF management -@ingroup Use_Cases5_NETWORK -@{ - - -

SIM Mailbox EF management

-These APIs are used to get and update the mailbox information stored in SIM. - -@code -int tel_get_sim_mailbox_info(TelSimMsgWaitingGroup_t type, int *req_id); -int tel_set_sim_mailbox_info(TelSimMsgWaitingGroup_t type, const TelSimDialingNumberInfo_t *update_data, int *req_id); -@endcode - -SAMPLE CODE: READ / UPDATE MAILBOX INFO -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENIONED IN Event Register and Deregister - -void get_sim_mailbox() -{ - int err_code; - int request_id = 0; - TelSimMsgWaitingGroup_t type = 0x00; - - type = TAPI_SIM_MWG_VOICE; - - err_code = tel_get_sim_mailbox_info(type, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT EVENT RESPONSE FROM HERE -} -// OPERATION REQUEST UPDATE SIM MAILBOX INFO PART -void update_sim_mailbox() -{ - int err_code; - int request_id = 0; - - TelSimMsgWaitingGroup_t type = 0x00; - TelSimDialingNumberInfo_t update_data; - - type = TAPI_SIM_MWG_VOICE; - - memcpy(update_data.AlphaId, "TestUpdate", 10); - update_data.AlphaIdLength = strlen(update_data.AlphaId); - update_data.CapaConfigId = 1; - memcpy(update_data.DiallingNum, "101020203030", 12); - update_data.DiallingnumLength = strlen(update_data.DiallingNum); - update_data.Ext1RecordId = 1; - update_data.NumberingPlanIdent =2; - update_data.TypeOfNumber = 2; - - err_code = tel_set_sim_mailbox_info(type, &update_data, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT EVENT RESPONSE FROM HERE -} - -// EVENT RESPONSE PART -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event; - - unsigned int temp_handle = -1; - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (eventType) - { - case TAPI_EVENT_SIM_GET_MAILBOX_CNF: - TelSimDialingNumberInfo_t* mailbox = (TelSimDialingNumberInfo_t*)EventData; - - printf("*******TAPI_EVENT_SIM_GET_MAILBOX_CNF*********"); - printf("Read event status = [0x%x]", status); - printf("bUsed[%d]", mailbox->bUsed); - printf("AlphaIDMaxLength[%d]", mailbox->AlphaIDMaxLength); - printf("AlphaIdLength[%d]", mailbox->AlphaIdLength); - printf("AlphaId[%s]", mailbox->AlphaId); - printf("DiallingNumMaxLength[%d]", mailbox->DiallingNumMaxLength); - printf("DiallingnumLength[%d]", mailbox->DiallingnumLength); - printf("TypeOfNumber:0-unknown,1-international,2-national[%d]", mailbox->TypeOfNumber); - printf("NumberingPlanIdent:0-unknown,1-isdn,3-data[%d]", mailbox->NumberingPlanIdent); - printf("DiallingNum[%s]", mailbox->DiallingNum); - printf("CapaConfigId[%c]", mailbox->CapaConfigId); - printf("Ext1RecordId[%c]", mailbox->Ext1RecordId); - printf("**********************************************************"); - break; - - case TAPI_EVENT_SIM_SET_MAILBOX_CNF: - printf("*********NEW*TAPI_EVENT_SIM_SET_MAILBOX_CNF************"); - printf("update event status = [0x%x]", status); - printf("**********************************************************"); - break; - } -} -@endcode -@} -@defgroup Use_Cases5_22 SIM Indication Status EFs management -@ingroup Use_Cases5_NETWORK -@{ - - -

SIM Indication Status EFs management

-These APIs are used to get and set the message indication status stored in SIM. - -@code -int tel_get_sim_indicator_info(TelSimIndicationStatusType_t type, int *req_id); -int tel_set_sim_indicator_info(const TelSimIndicationStatusData_t *update_data, int *req_id); -@endcode - -SAMPLE CODE: READ / UPDATE INDICATION STATUS DATA -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENIONED IN Event Register and Deregister - -// OPERATION REQUEST READ SIM MESSAGE WAITING INDICATION STATUS INFO PART -void read_sim_mwis() -{ - int err_code; - int request_id = 0; - - TelSimIndicationStatusType_t type = 0x00; - - type = TAPI_SIM_INDICATION_MW; - - err_code = tel_get_sim_indicator_info(type, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT EVENT RESPONSE FROM HERE -} - -// OPERATION REQUEST UPDATE SIM MESSAGE WAITING INDICATION STATUS INFO PART -//SUBSCRIBE FOR EVENTS AS MENIONED IN Event Register and Deregister - -void update_sim_mwis() -{ - int err_code; - int request_id = 0; - - TelSimIndicationStatusType_t type = 0x00; - TelSimIndicationStatusData_t update_data; - memset(&update_data, 0x00, sizeof(TelSimIndicationStatusData_t)); - - type = TAPI_SIM_INDICATION_MW; - - update_data.requested_type = type; - update_data.data.Mwis.VoiceMailCount = 1; // VoiceMail Count - update_data.data.Mwis.FaxCount = 2; // Fax Count - update_data.data.Mwis.EmailCount = 3; // Email Count - update_data.data.Mwis.OtherCount = 4; // Other Count - update_data.data.Mwis.VideoMailCount = 5; // VideoMail Count - - err_code = tel_set_sim_indicator_info(&update_data, &request_id); - if (err_code != TAPI_API_SUCCESS) - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } - // WAIT EVENT RESPONSE FROM HERE -} - - -// EVENT RESPONSE PART -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event; - - unsigned int temp_handle = -1; - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (eventType) - { - case TAPI_EVENT_SIM_GET_INDICATION_CNF: - TelSimIndicationStatusData_t* indi_data = (TelSimIndicationStatusData_t*)EventData; - - printf("*******TAPI_EVENT_SIM_GET_INDICATION_CNF**********"); - printf("Read event status = [0x%x]", status); - - if (indi_data->requested_type == TAPI_SIM_INDICATION_MW) - { - printf("**********MWIS************"); - printf("IndicatorType[%d]", indi_data->data.Mwis.IndicatorType); - printf("VoiceMailCount[%d]", indi_data->data.Mwis.VoiceMailCount); - printf("FaxCount[%d]", indi_data->data.Mwis.FaxCount); - printf("EmailCount[%d]", indi_data->data.Mwis.EmailCount); - printf("OtherCount[%d]", indi_data->data.Mwis.OtherCount); - printf("VideoMailCount[%d]", indi_data->data.Mwis.VideoMailCount); - } - else if (indi_data->requested_type == TAPI_SIM_INDICATION_CF) - { - printf("**********CFIS************"); - printf("bUsed[%d]", indi_data->data.Cfis.bUsed); - printf("MspNumber[%d]", indi_data->data.Cfis.MspNumber); - printf("Status[%d]", indi_data->data.Cfis.Status); - printf("DiallingnumLen[%d]", indi_data->data.Cfis.DiallingnumLen); - printf("TypeOfNumber[%d]", indi_data->data.Cfis.TypeOfNumber); - printf("NumberingPlanIdent[%d]", indi_data->data.Cfis.NumberingPlanIdent); - printf("DiallingNum[%s]", indi_data->data.Cfis.DiallingNum); - printf("CapaConfig2Id[%d]", indi_data->data.Cfis.CapaConfig2Id); - printf("Ext7RecordId[%d]", indi_data->data.Cfis.Ext7RecordId); - } - else - { - printf("Unhandled indication status type[%d]",indi_data->requested_type ); - } - printf("************************************************"); - break; - - case TAPI_EVENT_SIM_SET_INDICATION_CNF: - printf("******TAPI_EVENT_SIM_SET_INDICATION_CNF*******"); - printf("update event status = [0x%x]", status); - printf("**********************************************"); - break; - } -} -@endcode -@} -@defgroup Use_Cases5_23 Phone Book -@ingroup Use_Cases5_NETWORK -@{ - - -

Phone Book

-[Note] Telephony Emulator does not support this feature. - -Telephony provides APIs for various phone book related features, such as getting total records in phone book, retrieving phone book entry information, reading, updating and deleting phone book information, getting first valid index. - -@code -int tel_get_sim_pb_count(TelSimPbFileType_t pb_type, int* req_id); -int tel_get_sim_pb_meta_info(TelSimPbFileType_t pb_type, int* req_id); -int tel_read_sim_pb_record(TelSimPbFileType_t pb_type, unsigned short index, int *req_id ); -int tel_update_sim_pb_record(const TelSimPbRecordData_t *req_data, int *req_id ); -int tel_delete_sim_pb_record(TelSimPbFileType_t pb_type, unsigned short index, int *req_id ); -int tel_get_sim_pb_init_info(int *init_completed, TelSimPbList_t *pb_list, int *first_index ); -@endcode - -SAMPLE CODE FOR GETTING STORAGE COUNT -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void getstoragecount() -{ - int ret_status; - TelSimPbFileType_t StorageFileType = TAPI_SIM_PB_LDN; - int pRequestId = 0; - - ret_status = tel_get_sim_pb_count (StorageFileType, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (eventType) - { - case TAPI_EVENT_SIM_PB_STORAGE_COUNT_CNF: - printf("TAPI_EVENT_SIM_PB_STORAGE_COUNT_CNF"); - break; - } -} -@endcode - -SAMPLE CODE TO GET PHONE BOOK ENTRY INFO -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENIONED IN Event Register and Deregister -void getPBEntryInfo() -{ - int ret_status; - TelSimPbFileType_t StorageFileType = TAPI_SIM_PB_FDN; - int pRequestId = 0; - - ret_status = tel_get_sim_pb_meta_info (StorageFileType, &pRequestId); - if (ret _status == TAPI_API_SUCCESS) - printf(successful\n); - else - printf(error=%d\n, ret_status); - //WAIT FOR EVENT HERE -} -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event; - - unsigned int temp_handle = -1; - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (EventType) { - case TAPI_EVENT_SIM_PB_ENTRY_INFO_CNF: - TelSimPbEntryInfo_t *entryInfo = (TelSimPbEntryInfo_t*)sim_event->pData ; - printf("SIM PB entry info event status = [%x]\n", sim_event->Status); - printf("[SIM APP]STORAGE TYPE [%d]\n", entryInfo->StorageFileType); - printf("[SIM APP]PB_INDEX_MIN %d\n", entryInfo->PbIndexMin); - printf("[SIM APP]PB_INDEX_MAX = %d\n", entryInfo->PbIndexMax); - printf("[SIM APP]PB_NUM_LEN_MAX = %d\n", entryInfo->PbNumLenMax); - printf("[SIM APP]PB_TEXT_LEN_MAX = %d\n", entryInfo->PbTextLenMax); - printf("********************************************\n"); - break; - } -} -@endcode - -SAMPLE CODE FOR READING RECORD -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void simreadrecord() -{ - int ret_status; - TelSimPbFileType_t StorageFileType = TAPI_SIM_PB_FDN; - unsigned short Index = 4; - int pRequestId = 0; - - ret_status = tel_read_sim_pb_record (StorageFileType,Index, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf(successful\n); - else - printf(error=%d\n, ret_status); -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (eventType) { - case TAPI TAPI_EVENT_SIM_PB_ACCESS_READ_CNF: - printf("TAPI_EVENT_SIM_PB_ACCESS_READ_CNF"); - //READ DATA - break; - // - } -} -@endcode - -SAMPLE CODE FOR UPDATING RECORD -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void simupdaterecord() -{ - int ret_status; - TelSimPbRecordData_t pb_add; - pb_add.StorageFileType = TAPI_SIM_PB_GAS; - int pRequestId = 0; - - pb_add.Index = 1; - - ret_status = tel_update_sim_pb_record (&pb_add, &pRequestId); -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (EventType) - { - case TAPI_EVENT_SIM_PB_UPDATE_CNF: - printf("TAPI_EVENT_SIM_PB_UPDATE_CNF"); - break; - //... - } -} -@endcode - -SAMPLE CODE FOR DELETING RECORD -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void contactdelete() -{ - int ret_status; - //DELETE RECORD - TelSimPbFileType_t StorageFileType = TAPI_SIM_PB_3GSIM; - unsigned short RecordIndex = 1; - int pRequestId = 0; - - ret_status = tel_delete_sim_pb_record (StorageFileType, RecordIndex, &pRequestId); -}//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (EventType) - { - case TAPI_EVENT_SIM_PB_DELETE_CNF: - printf(TAPI_EVENT_SIM_PB_DELETE_CNF); - // - break; - } -} -@endcode - -SAMPLE CODE FOR GETTING PHONEBOOK INIT INFO -@code -#include -#include -#include "TapiCommon.h" - -// OPERATION REQUEST GET SIM PHONEBOOK INIT STATUS PART -void get_sim_phonebook_init_status() -{ - int valid_index = 0; - TelSimPbList_t pb_list; - int pPbInitCompleted = 0; - - err_code = tel_get_sim_pb_init_info(&pPbInitCompleted, &pb_list, &valid_index); - if (err_code == TAPI_API_SUCCESS) - { - if (pPbInitCompleted == 0) - { - printf(" SIM PB INIT NOT completed "); - } - else - { - printf("SIM PB INIT completed"); - // if no sim records at all then valid_index = 0xFF - printf ("ADN First index is [%d]",valid_index); - printf ("SIM phone book storage list Information "); - printf ("********************************************"); - printf ("pb_list.b_fdn[%d]",pb_list.b_fdn); - printf ("pb_list.b_msisdn[%d]",pb_list.b_msisdn); - printf ("pb_list.b_adn[%d]",pb_list.b_adn); - printf ("pb_list.b_sdn[%d]",pb_list.b_sdn); - printf ("pb_list.b_3g[%d]",pb_list.b_3g); - printf ("pb_list.b_aas[%d]",pb_list.b_aas); - printf ("pb_list.b_gas[%d]",pb_list.b_gas); - } - } - else - { - printf("TAPI API FAIL: Error Code [0x%x]", err_code); - } -} -@endcode -@} -@defgroup Use_Cases5_24 Getting 3G Phone Book Information -@ingroup Use_Cases5_NETWORK -@{ - - -

Getting 3G Phone Book Information

-[Note] Telephony Emulator does not support this feature. - -Telephony provides APIs to retrieve SIM EFs supported by 3G phone , such as ANR, SNE, GRP, EMAIL etc and corresponding EFs max text length, number length and size. - -@code -int tel_get_sim_pb_3g_meta_info(int *req_id); -@endcode - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void get3gcapainfo() -{ - int ret_status; - int req_id = 0; - - ret_status = tel_get_sim_pb_3g_meta_info (&req_id); -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId, i; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (eventType) { - case TAPI_EVENT_SIM_PB_CAPABILITY_INFO_CNF: - printf("[SIM APP]SIM PB Capability Info event status = [%x]\n", sim_event->Status); - TelSimPbCapabilityInfo_t *sim_capability_info = (TelSimPbCapabilityInfo_t*)sim_event->pData; - int i; - for (i=0; iFileTypeCount; i++) - { - printf(" [SIM APP]Filed tag type[%d]", sim_capability_info->FileTypeInfo[i].FileType3G); - printf(" [SIM APP]max index [%d]\n", sim_capability_info->FileTypeInfo[i].PbIndexMax); - printf(" [SIM APP]max text [%d]\n", sim_capability_info->FileTypeInfo[i].PbTextMax); - printf(" [SIM APP]used count [%d]\n", sim_capability_info->FileTypeInfo[i].TotalRecordCount); - } - break; - //... - } -} -@endcode - -@} -@defgroup Use_Cases5_25 SAP (Sim access Profile) features -@ingroup Use_Cases5_NETWORK -@{ - -

SAP (Sim access Profile) features

-[Note] Telephony Emulator does not support this feature. - -The SIM Access Profile defines the protocols and procedures that shall be used to access data and services of GSM SIM card, a UICC card or a R-UIM card via a Bluetooth link. - -The SIM Access Profile specifies the following features: -- Connection Management -- Transfer APDU -- Transfer ATR -- Power SIM off/on -- Transfer Card Reader Status -- Set Transport Protocol - -

Connection Management:

-An established SIM Access Profile connection is the prerequisite for all other features. -Telephony exposes APIs to make a connection request to SIM and to get connection status information. - -@code -int tel_req_sap_connection( TelSimSapConnect_t *req_data, int *req_id); -int tel_req_sap_connection_status( int *req_id); -@endcode - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void sapconnectreq() -{ - int ret_status; - TelSimSapConnect_t pConnectionReq; - int pRequestId = 0; - - pConnectionReq.MsgId = TAPI_SIM_SAP_CONNECT_REQ; - pConnectionReq.MaxMsgSize = 10; //temp for testing only - not clear - - ret_status = tel_req_sap_connection (&pConnectionReq, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (eventType) - { - case TAPI_SIM_EVENT_SAP_CONNECT_CNF: - printf("TAPI_SIM_EVENT_SAP_CONNECT_CNF"); - break; - //... - } -} - -//GET STATUS -void sapconnectstatusreq() -{ - int request_id = 0; - int ret_status = tel_req_sap_connection_status (&request_id); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED - -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (eventType) - { - case TAPI_SIM_EVENT_SAP_CONNECT_STATUS_CNF: - printf("TAPI_SIM_EVENT_SAP_CONNECT_STATUS_CNF"); - break; - //... - } -} -@endcode - -

Transfer APDU:

-The ability to send APDUs (Application Protocol Data Units) over the Bluetooth link -@n Telephony provides API to transfer APDU to sim. - -@code -int tel_req_sap_transfer_apdu(TelSimSapApduData_t *apdu_data, int *req_id); -@endcode - -SAMPLE CODE: -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void saptransferapdu() -{ - int err_code; - int file_id = TAPI_SIM_EFILE_ICCID; - - // for selecting EF ICCID - TelSimSapApduData_t apdu_data; - int pRequestId = 0; - - apdu_data.ApduLength = 7; - apdu_data.Apdu[0] = 0xA0; // class - apdu_data.Apdu[1] = 0xA4; // instruction - apdu_data.Apdu[2] = 0; // p1 = parameter 1 - apdu_data.Apdu[3] = 0; // p2 = parameter 2 - apdu_data.Apdu[4] = 2; // p3 - parameter 3 - - memcpy(&apdu_data.Apdu[5], &file_id, sizeof(unsigned short)); - err_code = tel_req_sap_transfer_apdu (&apdu_data, NULL); - if (err_code == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", err_code); -} -//WAIT FOR EVENT HERE -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (eventType) - { - case TAPI_SIM_EVENT_SAP_TRANSFER_APDU_CNF: - printf("TAPI_SIM_EVENT_SAP_TRANSFER_APDU_CNF"); - break; - }//... -} -@endcode - -

Transfer ATR:

-The ability to send the content of the ATR (Answer to Reset) from the Server to the Client over the Bluetooth link. It contains information about the interface provided by the subscription module and the services on the GSM SIM, the UICC or the R-UIM. - -@code -int tel_req_sap_transfer_atr( int *req_id); -@endcode - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void saptransferatrreq() -{ - int ret_status; - int pRequestId = 0; - - ret_status = tel_req_sap_transfer_atr (&pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (eventType) - { - case TAPI_SIM_EVENT_SAP_TRANSFER_ATR_CNF: - printf("TAPI_SIM_EVENT_SAP_TRANSFER_ATR_CNF"); - break; - //... - } -} -@endcode - -

Power sim on/off:

-The ability to power the subscription module on/off remotely. - -@code -int tel_req_sap_power_operation(TelSimSapMsgId_t req_data, int *req_id ); -@endcode - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void sapsetpower() -{ - int ret_status; - TelSimSapMsgId_t MsgId = TAPI_SIM_SAP_CONNECT_REQ; - int pRequestId = 0; - - ret_status = tel_req_sap_power_operation (MsgId, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - - switch (EventType) - { - case TAPI_SIM_EVENT_SAP_SET_SIM_POWER_CNF: - printf("TAPI_SIM_EVENT_SAP_SET_SIM_POWER_CNF"); - break; - //... - } -} -@endcode - -

Transfer Card Reader Status:

-The card reader status contains some basic information about the Card Reader and the subscription module (e.g. the size of the SIM or if the SIM is removable). - -@code -int tel_req_sap_cardreader_status(int *req_id); -@endcode - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void simsapcardreaderstatus() -{ - int ret_status; - int pRequestId = 0; - - ret_status = tel_req_sap_cardreader_status (&pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - - switch (eventType) - { - case TAPI_SIM_EVENT_SAP_CARD_READER_STATUS_CNF: - printf("TAPI_SIM_EVENT_SAP_CARD_READER_STATUS_CNF"); - break; - //... - } -} -@endcode - -

Set Transport Protocol:

-The server shall reset the subscription module and switch to the desired protocol if supported by subscription module and Server. - -@code -int tel_req_sap_transport_protocol(TelSimSapProtocol_t protocol, int *req_id); -@endcode - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void sapsettransportprotocol() -{ - int ret_status; - TelSimSapProtocol_t Protocol = TAPI_SIM_SAP_PROTOCOL_T0; - int pRequestId = 0; - - ret_status = tel_req_sap_transport_protocol (Protocol, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (EventType) - { - case TAPI_SIM_EVENT_SAP_SET_PROTOCOL_CNF: - printf("TAPI_SIM_EVENT_SAP_SET_PROTOCOL_CNF"); - break; - //... - } -} -@endcode -@} -@defgroup Use_Cases5_26 ISIM Features -@ingroup Use_Cases5_NETWORK -@{ - - -

ISIM Features

-[Note] Telephony Emulator does not support this feature. - -@code -int tel_req_sim_authentication( TelSimAuthenticationData_t *authentication_data, int *req_id); -@endcode - -Application uses this API to send the ISIM authentication request to telephony. - -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister -void isimauthreq() -{ - int ret_status; - TelSimAuthenticationData_t authenticationData; - authenticationData.rand_length = 100; - authenticationData.rand_length = 100; - authenticationData.rand_data = "test data"; - authenticationData.autn_data = "test data"; - int pRequestId = 0; - - ret_status = tel_req_sim_authentication (&authenticationData, &pRequestId); - if (ret_status == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (EventType) - { - case TAPI_EVENT_SIM_AUTHENTICATION_CNF: - printf("TAPI_EVENT_SIM_AUTHENTICATION_CNF"); - break; - //... - } -} -@endcode -@} -@defgroup Use_Cases5_27 SIM NOTIFICATION MESSAGE -@ingroup Use_Cases5_NETWORK -@{ - - -

SIM NOTIFICATION MESSAGE

-These are not APIs, but EVENTs from the low layer. User can receive the following events: -@code -TAPI_EVENT_SIM_STATUS_IND -TAPI_EVENT_SIM_FDN_STATUS_IND -@endcode - -Application uses this event as follows. -SAMPLE CODE -@code -#include -#include -#include "TapiCommon.h" - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - -//CALLBACK FUNCTION TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - TelTapiEvent_t *sim_event = (TelTapiEvent_t*) event ; - - unsigned int temp_handle = -1; - //... - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - switch (EventType) - { - case TAPI_EVENT_SIM_STATUS_IND: - printf("***********TAPI_EVENT_SIM_STATUS_IND**************"); - - if (status == TAPI_SIM_STATUS_CARD_ERROR) - { - printf("SIM CARD ERROR"); - } - else if (status == TAPI_SIM_STATUS_CARD_NOT_PRESENT) - { - printf("SIM CARD NOT INSERTED"); - } - else if (status == TAPI_SIM_STATUS_SIM_INITIALIZING) - { - printf("SIM INITITIALIZING"); - } - else if (status == TAPI_SIM_STATUS_SIM_INIT_COMPLETED) - { - printf("SIM INIT COMPLETED"); - } - else if (status == TAPI_SIM_STATUS_SIM_PIN_REQUIRED) - { - printf("SIM PIN REQUIRED"); - } - else if (status == TAPI_SIM_STATUS_SIM_PUK_REQUIRED) - { - printf("SIM PUK REQUIRED"); - } - else if (status == TAPI_SIM_STATUS_CARD_BLOCKED) - { - printf("SIM CARD BLOCKED"); - } - printf("********************************************"); - break; - - case TAPI_EVENT_SIM_FDN_STATUS_IND: - printf("*********TAPI_EVENT_SIM_FDN_STATUS_IND***********"); - printf("SIM FDN status event status = [0x%x]", status); - printf("********************************************"); - break; - //... - } -} -@endcode -@} - -

SOUND

-[Note] Telephony Emulator does not support this feature. -These APIs provide the interface for configuring sound related parameters. - -@defgroup Use_Cases6_1 Event Register and Deregister -@ingroup Use_Cases6_SOUND -@{ - - -

Event Register and Deregister

-To receive asynchronous event notifications for the Sound APIs, the registration of related events with their associated call backs is required. When an asynchronous API is called, the confirmation is returned as an asynchronous event notification which invokes the callback function along with the event data. - -SAMPLE CODE: -@code -// REGISTER EVENT -unsigned int subscription_id = 0; -int api_err; - -api_err = tel_init (); -if (api_err != TAPI_API_SUCCESS) -{ - TEST_DEBUG("tel_init Failed - api_err = %d \n", api_err); -} - -api_err = tel_register_event (TAPI_EVENT_SOUND_VOLUMECTRL_CNF, &subscription_id, (TelAppCallback)&app_callback); -printf("VSOUND Event registration is Done: sub id is %d, api_err is %d\n",subscription_id,api_err); - -tel_register_app_name("com.samsung.appname"); - -// DEREGISTER EVENT -api_err = tel_deregister_event (subscription_id); -if (api_err != TAPI_API_SUCCESS) -{ - printf("Event Class Deregestration Fail\n"); -} -@endcode - -The main features provided by the Sound APIs include setting the volume,voice path and user configuration such as minute alert,Service change,Connet tone, Disconnect Tone...etc. -@} -@defgroup Use_Cases6_2 Voice path control -@ingroup Use_Cases6_SOUND -@{ - - -

Voice path control

-This API provides an interface for controlling voice path via application. - -@code -int tel_set_sound_path (tapi_sound_audio_path_t vc_path, int *pRequestId); -@endcode - -This API is permitted for Samsung in-house applications only -@} -@defgroup Use_Cases6_3 Volume control -@ingroup Use_Cases6_SOUND -@{ - - -

Volume control

-These APIs provide interfaces for controlling volume via application. - -@code -int tel_set_sound_volume_info (tapi_sound_volume_control_t vol_control, int *pRequestId); -int tel_get_sound_volume_info (tapi_sound_volume_type_t vol_control, int *pRequestId); -@endcode - -This API is permitted for Samsung in-house applications only -@} -@defgroup Use_Cases6_4 Mic mute control -@ingroup Use_Cases6_SOUND -@{ - - -

Mic mute control

-This API provides an interface for mute/unmute mic via application. - -@code -int tel_set_sound_mute_status(tapi_sound_mic_mute_t micmute_set, int * pRequestId); -@endcode - -This API is permitted for Samsung in-house applications only - -SAMPLE CODE -@code -#include -#include -#include - -//SUBSCRIBE FOR EVENTS AS MENTIONED IN Event Register and Deregister - -//VOLUME CONTROL -void vol_controlset() -{ - int ret_val; - int requestId = -1; - tapi_sound_volume_control_t vol_control; - - vol_control.volume = TAPI_SOUND_VOLUME_LEVEL_3; - vol_control.vol_type = TAPI_SOUND_VOL_VOICE; - - ret_val = tel_set_sound_volume_info(vol_control, &requestId); - if (ret_val == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_val); - //WAIT FOR EVENT HERE -} -void vol_controlget() -{ - int ret_val; - int requestId = -1; - api_sound_volume_type_t vol_type; - vol_type = TAPI_SOUND_VOL_VOICE; - - ret_val = tel_get_sound_volume_info (vol_type, &requestId); - if (ret_val == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_val); - //WAIT FOR EVENT HERE -} - -//VOICE PATH AND USER CONFIGURATION -void voicepathset() -{ - int ret_val; - int requestId = -1; - - tapi_sound_audio_path_t vc_path; - //VOICE PATH - vc_path = TAPI_SOUND_HANDSET; - - ret_val = tel_set_sound_path (vc_path, &requestId); - if (ret_val == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - //WAIT FOR EVENT HERE -} - - -//USER CONFIGURATION -void usr_configset() -{ - int ret_val; - Int requestId = -1; - tapi_sound_user_sound_mask_t snd_mask; - tapi_sound_user_sound_value_t snd_value; - - snd_mask = TAPI_SOUND_USER_MASK_ONE_MIN_ALERT; - snd_value = TAPI_SOUND_ON; - printf("tapi_sound_usr_configuration_set\n"); - ret_val = tapi_sound_usr_configuration_set(snd_mask,snd_value, &requestId); - if (ret_val == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - //WAIT FOR EVENT HERE -} - -void usr_configget() -{ - int ret_val; - tapi_sound_user_sound_mask_t snd_mask; - - snd_mask = TAPI_SOUND_USER_MASK_SERVICE_CHANGE_ALERT; - printf("tel_get_sound_mute_status \n"); - ret_val = tel_get_sound_mute_status(snd_mask, &requestId); - if (ret_val == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - //WAIT FOR EVENT HERE -} - -//MIC MUTE CONT\ROL -void micmute_controlset() -{ - int ret_val; - tapi_sound_mic_mute_t set_micmute; - - set_micmute = TAPI_SOUND_MIC_MUTE; - - printf(" tel_set_sound_mute_status \n"); - ret_val = tel_set_sound_mute_status (set_micmute, &requestId); - if (ret_val == TAPI_API_SUCCESS) - printf("successful\n"); - else - printf("error=%d\n", ret_status); - //WAIT FOR EVENT HERE -} - - -//CALL BACK TO BE USED -static void app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void* EventData = NULL; - - unsigned int temp_handle = -1; - // - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d]\n", eventClass, eventType , requestId, status ); - - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - - - switch (eventClass) - { - case TAPI_EVENT_CLASS_SOUND: - switch (eventType) - { - case TAPI_EVENT_SOUND_VOLUMECTRL_RSP : - printf("*** TAPI_EVENT_SOUND_VOLUMECTRL_RSP received : %x ****\n", eventType); - tapi_sound_volumn_ctrl_res vlm_ctrl_info; - int index; - - memcpy(&vlm_ctrl_info, event->pData, - sizeof(tapi_sound_volumn_ctrl_res)); - break; - - case TAPI_EVENT_SOUND_AUDIOPATHCTRL_NOTI: - tapi_sound_audio_path_t AudioPath = 0; - int OldSndOutPath = MM_SOUND_PATH_NONE; - AudioPath = *((tapi_sound_audio_path_t *)(event->pData)); - printf("*** TAPI_EVENT_SOUND_AUDIOPATHCTRL_NOTI received : %x ****\n", eventType); - break; - - case TAPI_EVENT_SOUND_AUDIOSOURCECTRL_NOTI: - tapi_sound_audio_source_type_t *pAudioSrcCtrl = NULL; - pAudioSrcCtrl = (tapi_sound_audio_source_type_t*)(event->pData); - printf("*** TAPI_EVENT_SOUND_AUDIOSOURCECTRL_NOTI received : %x ****\n", eventType); - break; - - case TAPI_EVENT_SOUND_ERROR_IND: - tapi_phone_err_t errorCause; - errorCause = *(( tapi_phone_err_t *)(event->pData)); - printf("*** TAPI_EVENT_SOUND_ERROR_IND received : %x ****\n", eventType); - break; - - case TAPI_EVENT_SOUND_MICMUTECTRL_RSP: - tapi_sound_mic_mute_t *mute_status = NULL; - mute_status = (tapi_sound_audio_source_type_t*)(event->pData); - - printf("*** TAPI_EVENT_SOUND_MICMUTECTRL_RSP received : %x ****\n", eventType); - break; - - default: - printf("*** Default Event %x ****\n", eventType); - break; - } - //... - break; - - default: - printf("*** Other TAPI EVENT received : class : %x ****\n", eventClass); - break; - } -} -@endcode -@} - - -

SAT (SIM Application Toolkit)

-@defgroup Use_Cases7_1 Event register and deregister -@ingroup Use_Cases7_SAT -@{ - -

Event register and deregister

-To receive asynchronous event notifications for SAT APIs, the registration of related events with their associated call backs is required. When an asynchronous API is called, the confirmation is returned as an asynchronous event notification which invokes the callback function along with the event data. - -SAMPLE CODE -@code -// REGISTER EVENT -unsigned int subscription_id = 0; -int api_err; - -api_err = tel_init(); -if (api_err != TAPI_API_SUCCESS) -{ - TEST_DEBUG("tel_init Failed - api_err = %d \n", api_err); -} - -api_err = tel_register_event(TAPI_EVENT_SAT_MENU_SELECTION_CNF, &subscription_id, (TelAppCallback)&app_callback); -printf("SAT Event registration is Done: sub id is %d, api_err is %d\n",subscription_id,api_err); - -tel_register_app_name("com.samsung.appname"); - -// DEREGISTER EVENT -api_err = tel_deregister_event(subscription_id); -if (api_err != TAPI_API_SUCCESS) -{ - printf("Event Class Unregeration Fail\n"); -} - -api_err = tel_deinit(); -if (api_err != TAPI_API_SUCCESS) -{ - printf("tel_deinit Fail\n"); -} - -static void app_callback(TelTapiEvent_t *event) -{ - //CALL BACK FUNTION TO BE CALLED - switch (event->EventType) - { - case TAPI_EVENT_SAT_DISPLAY_TEXT_IND: - TelSatDisplayTextInd_t *event_data; - event_data = (TelSatDisplayTextInd_t*)event->pData; - break; - case TAPI_EVENT_SAT_GET_INKEY_IND: - TelSatGetInkeyIndInfo_t *event_data; - event_data = (TelSatGetInkeyIndInfo_t *)event->pData; - break; - case TAPI_EVENT_SAT_GET_INPUT_IND: - TelSatGetInputInd_t *event_data; - event_data = (TelSatGetInputInd_t *)event->pData; - break; - - case TAPI_EVENT_SAT_UI_PLAY_TONE_IND: - TelSatPlayToneInd_t *event_data; - event_data = (TelSatPlayToneInd_t *)event->pData; - break; - - case TAPI_EVENT_SAT_PLAY_TONE_IND: - TelSatPlayToneInd_t *event_data; - event_data = (TelSatPlayToneInd_t *)event->pData; - break; - - case TAPI_EVENT_SAT_UI_REFRESH_IND: - TelSatRefreshIndUiInfo_t *event_data; - event_data = (TelSatRefreshIndUiInfo_t *)event->pData; - break; - - case TAPI_EVENT_SAT_SETUP_MENU_IND: - TelSatSetupMenuInfo_t *event_data; - event_data = (TelSatSetupMenuInfo_t *)event->pData; - break; - - case TAPI_EVENT_SAT_UI_SETUP_MENU_IND: - TelSatSetupMenuInfo_t *event_data; - event_data = (TelSatSetupMenuInfo_t *)event->pData; - break; - - case TAPI_EVENT_SAT_SELECT_ITEM_IND: - TelSatSelectItemInd_t *event_data; - event_data = (TelSatSelectItemInd_t *)event->pData; - break; - - case TAPI_EVENT_SAT_UI_SEND_SMS_IND: - TelSatSendSmsIndUiInfo_t *event_data; - event_data = (TelSatSendSmsIndUiInfo_t *)event->pData; - break; - - case TAPI_EVENT_SAT_UI_SEND_SS_IND: - TelSatSendSsIndUiInfo_t *event_data; - event_data = (TelSatSendSsIndUiInfo_t *)event->pData; - break; - - case TAPI_EVENT_SAT_UI_SEND_USSD_IND: - TelSatSendUssdIndUiInfo_t *event_data; - event_data = (TelSatSendUssdIndUiInfo_t *)event->pData; - break; - - case TAPI_EVENT_SAT_UI_SETUP_CALL_IND: - TelSatSetupCallIndUiInfo_t *event_data; - event_data = (TelSatSetupCallIndUiInfo_t *)event->pData; - break; - - case TAPI_EVENT_SAT_PROVIDE_LOCAL_INFO_IND: - TelSatProvideLocalInfoInd_t *event_data; - event_data = (TelSatProvideLocalInfoInd_t *)event->pData; - break; - - case TAPI_EVENT_SAT_SETUP_IDLE_MODE_TEXT_IND: - TelSatSetupIdleModeTextInd_t *event_data; - event_data = (TelSatSetupIdleModeTextInd_t *)event->pData; - break; - - case TAPI_EVENT_SAT_UI_SEND_DTMF_IND: - TelSatSendDtmfIndUiInfo_t *event_data; - event_data = (TelSatSendDtmfIndUiInfo_t *)event->pData; - break; - - case TAPI_EVENT_SAT_LANGUAGE_NOTIFICATION_IND: - TelSatLanguageNotiInfoInd_t *event_data; - event_data = (TelSatLanguageNotiInfoInd_t *)event->pData; - break; - - case TAPI_EVENT_SAT_UI_LAUNCH_BROWSER_IND: - TelSatLaunchBrowserIndUiInfo_t *event_data; - event_data = (TelSatLaunchBrowserIndUiInfo_t *)event->pData; - break; - - case TAPI_EVENT_SAT_END_PROACTIVE_SESSION_IND: - TelSatEndProactiveSessionIndInfo_t *event_data; - event_data = (TelSatEndProactiveSessionIndInfo_t *)event->pData; - break; - - case TAPI_EVENT_SAT_MENU_SELECTION_CNF: - TelSatEnvelopeResp_t *event_data; - event_data = (TelSatEnvelopeResp_t *)event->pData; - break; - - case TAPI_EVENT_SAT_CALL_CONTROL_IND: - TelSatCallCtrlIndData_t *event_data; - event_data = (TelSatCallCtrlIndData_t *)event->pData; - break; - - case TAPI_EVENT_SAT_MO_SMS_CONTROL_IND: - TelSatMoSmCtrlIndData_t *event_data; - event_data = (TelSatMoSmCtrlIndData_t *)event->pData; - break; - - case TAPI_EVENT_SAT_EVENT_DOWNLOAD_CNF: - TelSatEnvelopeResp_t *event_data; - event_data = (TelSatEnvelopeResp_t *)event->pData; - break; - - case TAPI_EVENT_SAT_SMS_REFRESH_IND: - case TAPI_EVENT_SAT_PB_REFRESH_IND: - case TAPI_EVENT_SAT_IDLE_REFRESH_IND: - TelSatRefreshInd_t *event_data; - event_data = (TelSatRefreshInd_t *)event->pData; - break; - - case TAPI_EVENT_SAT_SEND_SMS_IND: - TelSatSendSmsIndSmsData_t *event_data; - event_data = (TelSatSendSmsIndSmsData_t *)event->pData; - break; - - case TAPI_EVENT_SAT_SETUP_CALL_IND: - TelSatSetupCallIndCallData_t *event_data; - event_data = (TelSatSetupCallIndCallData_t *)event->pData; - break; - - case TAPI_EVENT_SAT_SEND_SS_IND: - TelSatSendSsIndSsData_t *event_data; - event_data = (TelSatSendSsIndSsData_t *)event->pData; - break; - - case TAPI_EVENT_SAT_SEND_USSD_IND: - TelSatSendUssdIndUssdData_t *event_data; - event_data = (TelSatSendUssdIndUssdData_t *)event->pData; - break; - - case TAPI_EVENT_SAT_SEND_DTMF_IND: - TelSatSendDtmfIndDtmfData_t *event_data; - event_data = (TelSatSendDtmfIndDtmfData_t *)event->pData; - break; - - case TAPI_EVENT_SAT_LAUNCH_BROWSER_IND: - TelSatLaunchBrowserIndBrowserData_t *event_data; - event_data = (TelSatLaunchBrowserIndBrowserData_t *)event->pData; - break; - - case TAPI_EVENT_SAT_END_OF_APP_EXEC_IND: - TelSatProactiveCmdEndIndInfo_t *event_data; - event_data = (TelSatProactiveCmdEndIndInfo_t *)event->pData; - break; - - default: - break; - } -} -@endcode -@} -@defgroup Use_Cases7_2 Main Menu Information -@ingroup Use_Cases7_SAT -@{ - - -

Main Menu Information

-[Note] Telephony Emulator does not support this feature. - -Telephony provides APIs for retreiving SAT Main Menu Information. - -This API is permitted for Samsung in-house applications only - -@code -int tel_get_sat_main_menu_info(TelSatSetupMenuInfo_t* pMainMenu) -@endcode - -SAMPLE CODE: -@code -//SAT MAIN MENU INFORMATION -#include -#include -#include - -void mainmenuinformation() -{ - int i = 0; - int ReturnStatus; - TelSatSetupMenuInfo_t SatMainMenuInfo; - - ReturnStatus = tel_get_sat_main_menu_info(&SatMainMenuInfo); - if (ReturnStatus == TAPI_API_SUCCESS) - { - printf(" SAT Main Menu Information \n"); - printf("Main Menu Title :%s\n", satMainMenuInfo.satMainTitle); - printf("Number of SAT Menu Items :%d\n", satMainMenuNum); - printf("Sat Menu Items are:\n"); - for (i=0; iEnvelope Commands -[Note] Telephony Emulator does not support this feature. - -This API sends a USIM application toolkit command to the USIM, using the envelope mechanism of USIM application toolkit. (See GSM TS 31.111) - -These APIs are permitted for Samsung in-house applications only - -@code -int tel_select_sat_menu(TelSatMenuSelectionReqInfo_t* pMenuSelect, int* pRequestId); -int tel_download_sat_event(TelSatEventDownloadReqInfo_t* pEventData, int* pRequestId); -@endcode - -SAMPLE CODE: -@code -//MENU SELECTION ENVELOPE -#include -#include -#include - -//Precondition -//SUBSCRIBE TO SAT EVENT(TAPI_EVENT_SAT_MENU_SELECTION_CNF) AS MENTIONED IN //Event Register and Deregister - -void satmenuselectionenvelope() -{ - int RequestId = -1; - int ReturnStatus; - TelSatMenuSelectionReqInfo_t SatMenuSelect; - - SatMenuSelect.itemIdentifier = 1; - SatMenuSelect.bIsHelpRequested = FALSE; - - ReturnStatus = tel_select_sat_menu(&SatMenuSelect, &RequestId); - if (ReturnStatus != TAPI_API_SUCCESS) - { - printf("ReturnStatus =%d\n", ReturnStatus); - } - else - { - //WAIT FOR TAPI_EVENT_SAT_MENU_SELECTION_CNF EVENT HERE - } -} - -//CALLBACK FUNCTION TO BE USED -static void SatAppCallback (TelTapiEvent_t *event) -{ - int EventClass = event->EventClass; - int EventType = event->EventType; - int RequestId = event->RequestId; - void* EventData = event->pData; - int Status = event->Status; - - if (EventType == TAPI_EVENT_SAT_MENU_SELECTION_CNF) - { - printf(" TAPI_EVENT_SAT_MENU_SELECTION_CNF Event Received \n"); - } -} -@endcode - -@code -//EVENT DOWNLOAD ENVELOPE -#include -#include -#include - - -//Precondition -//SUBSCRIBE TO SAT EVENT(TAPI_EVENT_SAT_EVENT_DOWNLOAD_CNF) AS MENTIONED IN //Event Register and Deregister -void eventdownloadenvelope() -{ - int RequestId = -1; - int ReturnStatus; - TelSatEventDownloadReqInfo_t SatEventData; - - SatEventData.eventDownloadType = TAPI_EVENT_SAT_DW_TYPE_IDLE_SCREEN_AVAILABLE; - - SatEventData.u.bIdleScreenAvailable = TRUE; - - ReturnStatus = tel_download_sat_event(&SatEventData, &RequestId); - if (ReturnStatus != TAPI_API_SUCCESS) - { - printf("ReturnStatus =%d\n", ReturnStatus); - } - else - { - //WAIT FOR TAPI_EVENT_SAT_EVENT_DOWNLOAD_CNF EVENT HERE - } -} - -//CALLBACK FUNCTION TO BE USED -static void SatAppCallback (TelTapiEvent_t *event) -{ - int EventClass = event->EventClass; - int EventType = event->EventType; - int RequestId = event->RequestId; - void* EventData = event->pData; - int Status = event->Status; - - if (EventType == TAPI_EVENT_SAT_EVENT_DOWNLOAD_CNF) - { - printf("TAPI_EVENT_SAT_EVENT_DOWNLOAD_CNF Event Received \n"); - //Extract Event Data here - } -} -@endcode -@} -@defgroup Use_Cases7_4 Application Execution result -@ingroup Use_Cases7_SAT -@{ - - -

Application Execution result

-[Note] Telephony Emulator does not support this feature. - -Telephony provides this API to get the Application execution result. - -This API is permitted for Samsung in-house applications only - -@code -Int tel_send_sat_app_exec_result(TelSatAppsRetInfo_t* pAppRetInfo); -@endcode - -SAMPLE CODE: -@code -//SAT MAIN MENU TITLE -#include -#include -#include - -void sendappexecutionresult() -{ - int ReturnStatus; - TelSatAppsRetInfo_t SatAppRetInfo; - - SatAppRetInfo.commandType = TAPI_SAT_CMD_TYPE_SETUP_IDLE_MODE_TEXT; - SatAppRetInfo.appsRet.setupIdleModeText.resp = TAPI_SAT_R_SUCCESS; - - ReturnStatus = tel_send_sat_app_exec_result(&SatAppRetInfo); - if (ReturnStatus == TAPI_API_SUCCESS) - { - printf(" Sending Application Execution Result Successful \n"); - } - else - printf("ReturnStatus =%d\n", ReturnStatus); -} -@endcode -@} -@defgroup Use_Cases7_5 UI /User Confirmation -@ingroup Use_Cases7_SAT -@{ - - -

UI /User Confirmation

-[Note] Telephony Emulator does not support this feature. - -Send user’s confirmation message to the USIM application - -These APIs are permitted for Samsung in-house applications only - -@code -int tel_send_sat_ui_display_status(int commandId, TelSatUiDisplayStatusType_t status); -int tel_send_sat_ui_user_confirm(TelSatUiUserConfirmInfo_t * pUserConfirmData) ; -@endcode - -SAMPLE CODE: -@code -//UI DISPLAY STATUS -#include -#include -#include - -void senduidisplaystatus() -{ - int ReturnStatus; - TelSatUiDisplayStatusType_t DisplatStatus; - int CommandId; - - DisplatStatus = TAPI_SAT_DISPLAY_SUCCESS; - CommandId = commandId; //Command Id of the Proactive Command - - ReturnStatus = tel_send_ui_display_status(CommandId, DisplayStatus); - if (ReturnStatus == TAPI_API_SUCCESS) - printf(" Sending UI Display Status Successful \n"); - else - printf("ReturnStatus =%d\n", ReturnStatus); -} -@endcode - -@code -//USER CONFIRMATION -#include -#include -#include - -void senduiuserconfirm() -{ - int ReturnStatus; - TelSatUiUserConfirmInfo_t UserConfirmData; - - UserConfirmData.commandId = commandId ; //Command Id of the Proactive Command - - UserConfirmData.commandType = TAPI_SAT_CMD_TYPE_PLAY_TONE; - UserConfirmData.keyType = TAPI_SAT_USER_CONFIRM_YES; - - UserConfirmData.pAdditionalData = NULL; - UserConfirmData.dataLen = 0; - - ReturnStatus = tel_send_sat_ui_user_confirm(&UserConfirmData); - if (ReturnStatus == TAPI_API_SUCCESS) - printf(" Sending User Confirmation Data Successful \n"); - else - printf("ReturnStatus =%d\n", ReturnStatus); -} -@endcode -@} - - -

GPRS

-@defgroup Use_Cases8_1 Event Register and Deregister -@ingroup Use_Cases8_GPRS -@{ - -

Event Register and Deregister

-To receive asynchronous event notifications for GPRS APIs, the registration of related events with their associated call backs is required. When an asynchronous API is called, the confirmation is returned as an asynchronous event notification which invokes the callback function along with the event data. - -SAMPLE CODE: -@code -// REGISTER EVENT -unsigned int subscription_id = 0; -int api_err; - -api_err = tel_init(); -if (api_err != 0) -{ - printf ("tel_init Failed - api_err = %d \n", api_err); -} - -api_err = tel_register_event(TAPI_EVENT_PS_PDP_ACT_RSP, &subscription_id , (TelAppCallback)&app_callback); -printf("Power Event registeration is Done: sub id is %d, api_err is %d\n", subscription_id, api_err); - -tel_register_app_name("com.samsung.appname"); - -void app_callback(TelTapiEvent_t *event) -{ - //callback function to be called -} -@endcode -@} -@defgroup Use_Cases8_2 Pdp Activation -@ingroup Use_Cases8_GPRS -@{ - - -

Pdp Activation

-This API is used to start a GPRS session successfully. - -@code -int tel_activate_gprs_pdp (const tapi_ps_net_start_req_t *pNet_start_req_info,int * pRequestID); -@endcode - -This API is restricted for direct use. Use the Data Network API instead. - -SAMPLE CODE -@code -#include -#include -#include - -int ret_status; -tapi_ps_net_start_req_t start_req; -int request_id = 0; - -#define CONTEXT_ID 1 -#define APN_ADDRESS "nate.sktelecom.com" - -void gprsstart() -{ - int ret_status; - tapi_ps_net_start_req_t start_req; - int request_id = 0; - - start_req.cont_id = CONTEXT_ID; - strcpy(start_req.pdp_info.apn , APN_ADDRESS); - - ret_status = tel_activate_gprs_pdp (&start_req, &request_id); - if (ret_status == TAPI_API_SUCCESS) - { - printf("/n/ gprs mode Started successfully \\n"); - } - else - { - printf("/n/ gprs mode not started \\n"); - } -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -void ps_app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void *EventData = NULL; - - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - printf(" app _callback is called \n"); - - switch (eventClass) - { - case TAPI_EVENT_CLASS_DATA: - switch (eventType) - { - case TAPI_EVENT_PS_PDP_ACT_RSP: - tapi_ps_net_activation_rsp_t pdp_ip_resp; - memcpy(&pdp_ip_resp, psEvent->pData, sizeof(tapi_ps_net_activation_rsp_t)); - printf("TAPI_EVENT_PS_PDP_ACT_RSP\n"); - break; - - case TAPI_EVENT_PS_PDP_ACT_IPCONFIG_INFO: - tapi_ps_net_start_rsp_t pdp_ip_resp; - memcpy(&pdp_ip_resp, psEvent->pData, sizeof(tapi_ps_net_start_rsp_t)); - - case TAPI_EVENT_PS_STATUS: - tapi_ps_attach_response_t res; - memcpy(&res, psEvent->pData, sizeof(tapi_ps_attach_response_t)); - } - } -} -@endcode -@} -@defgroup Use_Cases8_3 Check PDP Signal line On -@ingroup Use_Cases8_GPRS -@{ - - -

Check PDP Signal line On

-This API is used to check whether the PDP siganl line is on or not. - -Precondition: -@n GPRS session should be started before running this API. - -@code -int tel_control_gprs_btdun_pin (tapi_ps_btdun_pincontrol pincontrol,int * pRequestID); -@endcode - -This API is restricted for direct use. Use the Data Network API instead. - -SAMPLE CODE -@code -#include -#include -#include - -void pdpbtduncontrolget() -{ - int ret_status; - int request_id = 0; - tapi_ps_btdun_pincontrol bt_control; - - bt_control.signal = GPRS_SIGNAL_DCD ; - bt_control.status = GPRS_SIGNAL_STATUS_OFF; - - ret_status = tel_control_gprs_btdun_pin(bt_control, &request_id) ; - if (ret_status == TAPI_API_SUCCESS) - { - printf("/n/ Successful \\n"); - } - else - { - printf("/n/error:%d \n", ret_status); - } -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -void ps_app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void *EventData = NULL; - - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - printf(" app _callback is called \n"); - - switch (eventClass) - { - case TAPI_EVENT_CLASS_DATA: - switch (eventType) - { - case TAPI_EVENT_PS_BTDUN_PINCONTROL_NOTI: - tapi_ps_btdun_pincontrol pincontrol; - memcpy(&pincontrol, psEvent->pData, sizeof(tapi_ps_btdun_pincontrol)); - printf("TAPI_EVENT_PS_BTDUN_PINCONTROL_NOTI\n"); - break; - } - } -} -@endcode -@} -@defgroup Use_Cases8_4 Set PDP deactivation -@ingroup Use_Cases8_GPRS -@{ - - -

Set PDP deactivation

-This API is used to deactivate the PDP service. - -Precondition: -@n GPRS session must be started before executing this API. - -@code -int tel_deactivate_gprs_pdp (const tapi_ps_net_stop_req_t *net_stop_req_info,int * pRequestID); -@endcode - -This API is restricted for direct use. Use the Data Network API instead. - -SAMPLE CODE -@code -#include -#include -#include - -#define CONTEXT_ID 1 - -void setpdpdeactivation() -{ - int ret_status; - tapi_ps_net_stop_req_t end_req; - int request_id = 0; - - memset(&end_req, 0, sizeof(tapi_ps_net_stop_req_t)); - - end_req.cont_id = CONTEXT_ID; - - ret_status = tel_deactivate_gprs_pdp (&end_req, &request_id); - if (ret_status == TAPI_API_SUCCESS) - { - printf("/n/ gprs active session ended successfully \\n"); - } - else - { - printf("/n/ gprs active session not ended \\n"); - } -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -void ps_app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void *EventData = NULL; - - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - printf(" app _callback is called \n"); - - switch (eventClass) - { - case TAPI_EVENT_CLASS_DATA: - switch (eventType) - { - case TAPI_EVENT_PS_PDP_DEACT_IND: - tapi_ps_net_stop_rsp_t* pdp_stop_resp; - memcpy(pdp_stop_resp, psEvent->pData, sizeof(tapi_ps_net_stop_rsp_t)); - printf("TAPI_EVENT_PS_PDP_DEACT_IND\n"); - break; - - case TAPI_EVENT_PS_CALL_STATISTICS: - tapi_ps_call_statistics_t call_stats; - memcpy(&call_stats, psEvent->pData, - sizeof(tapi_ps_call_statistics_t)); - break; - } - break; - } - break; -} -@endcode -@} -@defgroup Use_Cases8_5 DataEnterDormantState -@ingroup Use_Cases8_GPRS -@{ - - -

DataEnterDormantState

-This API is used to set the modem’s data channels to the dormant state for power saving when there is no data flowing for certain time. - -Precondition: -@n GPRS session must be started before executing this API. - -@code -int tel_set_gprs_dormant (int * pRequestID); -@endcode - -This API is restricted for direct use. Use the Data Network API instead. - -SAMPLE CODE -@code -#include -#include -#include - -void enterdormantstate() -{ - int ret_status; - int request_id = 0; - - ret_status = TelTapiDataEnterDormantState(&request_id); - if (ret_status == TAPI_API_SUCCESS) - { - printf("/n/ Entered Dormant State successfully \\n"); - } - else - { - printf("/nerror:%d \\n", ret_status); - } -} -//WAIT FOR EVENT HERE - -//CALLBACK FUNCTION TO BE USED -void ps_app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void *EventData = NULL; - - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - printf(" app _callback is called \n"); - - switch (eventClass) - { - case TAPI_EVENT_CLASS_DATA: - switch (eventType) - { - case TAPI_EVENT_PS_DATA_DORMANT_RESP: - TelTapiGprsDataDormancy_t resp; - memcpy(&resp, psEvent->pData, sizeof(TelTapiGprsDataDormancy_t)); - printf("TAPI_EVENT_PS_DATA_DORMANT_RESP\n"); - break; - } - } -} -@endcode -@} -@defgroup Use_Cases8_6 SetPortlist -@ingroup Use_Cases8_GPRS -@{ - - -

SetPortlist

-This API is used to set white or black port list - -@code -int tel_set_gprs_port_list(int *pRequestID); -@endcode - -This API is restricted for direct use. Use the Data Network API instead. - -SAMPLE CODE -@code -#include -#include -#include - -void setportlist() -{ - int ret_val; - int requestId = 0; - tapi_gprs_pdp_port_list_setting_info_t test; - - memset(&test, 0, sizeof(tapi_gprs_pdp_port_list_setting_info_t)); - test.tcp_list.type = TAPI_GPRS_PORT_LIST_NOT_USE; - test.tcp_list.len = 1; - test.tcp_list.list[0] = 1004; - test.udp_list.type = TAPI_GPRS_PORT_LIST_NOT_USE; - test.udp_list.len = 1; - test.udp_list.list[i] = 1111; - - ret_val = tel_set_gprs_port_list(&test, &requestId); -} -//CALLBACK FUNCTION TO BE USED -void ps_app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void *EventData = NULL; - - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - printf(" app _callback is called \n"); - - switch (eventClass) - { - case TAPI_EVENT_CLASS_DATA: - switch (eventType) - { - case TAPI_EVENT_PS_DATA_DORMANT_RESP: - printf("TAPI_EVENT_PS_DATA_DORMANT_RESP\n"); - break; - } - } -} -@endcode -@} -@defgroup Use_Cases8_7 GetPortlist -@ingroup Use_Cases8_GPRS -@{ - - -

GetPortlist

-This function is used to get white or black port list from modem - -@code -int tel_get_gprs_port_list(int *pRequestID); -@endcode - -This API is restricted for direct use. Use the Data Network API instead. - -SAMPLE CODE -@code -#include -#include -#include - -Void getportlist() -{ - int ret_val; - int requestId = 0; - ret_val = tel_get_gprs_port_list(&requestId); -} - -//CALLBACK FUNCTION TO BE USED -void ps_app_callback (TelTapiEvent_t *event) -{ - int eventClass; - int eventType; - int requestId; - int status; - void *EventData = NULL; - - eventClass = event->EventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - printf(" app _callback is called \n"); - - switch (eventClass) - { - case TAPI_EVENT_CLASS_DATA: - switch (eventType) - { - case TAPI_EVENT_PS_DATA_DORMANT_RESP: - tapi_gprs_pdp_port_list_setting_info_t *info; - memcpy(info, psEvent->pData, sizeof(tapi_gprs_pdp_port_list_setting_info_t)); - printf("TAPI_EVENT_PS_DATA_DORMANT_RESP\n"); - break; - } - } -} -@endcode -@} - -@defgroup Appendixes1 Appendix A. Sample Codes -@ingroup Appendix -@{ -

Appendixes

-

Appendix A. Sample Codes

-Some reference sample code is attached to help the application developer understand the telephony Framework Module - -How to use supplementary service APIs and handle SS events -@code -#include -#include -#include -#include - -GMainLoop *nw_context_loop = NULL; - -typedef struct -{ - int group; - int type; - int len; - void *dst; -} data_t; - -static int SS_Callback(int eventClass, int eventType, void * param2) -{ - int i; - printf ("\n\n\n SS_Callback is called! eventClass : %d\n, eventType : %d\n", eventClass, eventType); - fflush(stdout); - switch (eventType) - { - case TAPI_EVENT_SS_REL_COMP_MSG_NOTIFY: - if (param2 != NULL) { - int x = 0; - TelSsRelCompMsgInfo_t rel_comp_msg; - memcpy(&rel_comp_msg, (TelSsRelCompMsgInfo_t *)param2, - sizeof(TelSsRelCompMsgInfo_t)); - printf("Printing the Release Complete Message \n"); - - for (x=0; xEventClass; - eventType = event->EventType; - requestId = event->RequestId; - status = event->Status; - EventData = event->pData; - //TEST_DEBUG("Class:[%d], Event Type:[%d], RequestId:[%d], Status:[%d] \n", eventClass, eventType , requestId, status ); - if (status != 0) - { - //TEST_DEBUG("******This is nonzero status. ******\n"); - return; - } - SS_Callback((int)eventClass, (int)eventType, EventData); -} - -ss_test_subscribe_tapi_events() -{ - //REGISTER EVENT - unsigned int subscription_id = 0; - TapiResult_t api_err; - - api_err = TelTapiInit(); - if (api_err != TAPI_API_SUCCESS) - { - printf("TelTapiInit Failed - api_err = %d \n", api_err); - } - api_err = TelTapiRegisterEvent(TAPI_EVENT_SS_WAITING_CNF, &subscription_id, (TelAppCallback)&app_callback); - printf("SS Class registeration is Done: sub id is %d, api_err is %d\n",subscription_id,api_err); - fflush(stdout); -} - -noti_finish() -{ - //DEREGISTER EVENT - unsigned int subscription_id = 0; - TapiResult_t api_err; - - api_err = tel_deregister_event(subscription_id); - if (api_err != TAPI_API_SUCCESS) - { - printf("Event Class Unregeration Fail\n"); - } -} - -tapi_ss_call_barr() -{ - TapiResult_t ret_status; - TelSsCallBarringInfo_t pBarringInfo; - int pRequestId = 0; - char *bar_pwd = "0000"; - - printf("Before copying ,,,length is %d\n", strlen(pBarringInfo.szPassword)); - printf("len initially is %d\n", strlen(bar_pwd)); - - pBarringInfo.Mode = TAPI_SS_CALL_BAR_ACTIVATE; - pBarringInfo.Type = TAPI_CALL_BARRING_ALL_OUTGOING_CALLS;//TAPI_CALL_BARRING_ALL_OUTGOING_INTERN_CALL; - pBarringInfo.CallType = TAPI_CALL_TYPE_VOICE_EV; - strcpy(pBarringInfo.szPassword, bar_pwd); - printf("length is %d\n", strlen(pBarringInfo.szPassword)); - ret_status = tel_set_ss_barring(&pBarringInfo, &pRequestId); - if (ret_status != TAPI_API_SUCCESS) { - return; - } - - nw_context_loop = g_main_loop_new(NULL, FALSE); - g_main_loop_run(nw_context_loop); - - - //now , get the status - TelSsCallBarType_t BarType = TAPI_CALL_BARRING_ALL_OUTGOING_INTERN_CALL; - TelSsCallType_t CallType = TAPI_CALL_TYPE_VOICE_EV; - ret_status = tel_get_ss_barring_status(BarType,CallType, &pRequestId); - if (ret_status != TAPI_API_SUCCESS) { - return ; - } - - nw_context_loop = g_main_loop_new(NULL, FALSE); - g_main_loop_run(nw_context_loop); -} - -tapi_ss_call_fwd() -{ - TapiResult_t ret_status; - TelSsForwardInfo_t pForwardInfo; - int len; - int pRequestId = 0; - char *cf_number = "9986529874"; - - pForwardInfo.Mode = TAPI_CALL_FORWARD_MODE_ENABLE_EV; - pForwardInfo.Type = TAPI_CS_FORWARD_TYPE_VOICE_EV; - pForwardInfo.Condition = TAPI_SS_FORWARD_WHEN_UNCONDITIONAL_EV; - pForwardInfo.NoReplyConditionTimer = 10; - - len = strlen(cf_number); - printf("Length of CF number :%d \n", len); - memcpy(&(pForwardInfo.szPhoneNumber), cf_number, len); - ret_status = tel_set_ss_forward(&pForwardInfo, &pRequestId); - if (ret_status != TAPI_API_SUCCESS) { - return ; - } - - nw_context_loop = g_main_loop_new(NULL, FALSE); - g_main_loop_run(nw_context_loop); - - //now , get call forward status - TelSsForwardType_t Type = TAPI_CS_FORWARD_TYPE_VOICE_EV; - TelSsForwardWhen_t Condition = TAPI_SS_FORWARD_WHEN_UNCONDITIONAL_EV; - - // Calling TAPI SS Call Frwd Query Req Status Api - ret_status = tel_get_ss_forward_status(Type,Condition, &pRequestId); - if (ret_status != TAPI_API_SUCCESS) { - return ; - } - - nw_context_loop = g_main_loop_new(NULL, FALSE); - g_main_loop_run(nw_context_loop); -} - -tapi_ss_call_wait() -{ - //set and get call waiting - TapiResult_t ret_status; - TelSsWaitingInfo_t waitInfo; - int RequestID; - - waitInfo.Mode = TAPI_SS_CW_ACTIVATE; - waitInfo.CallType = TAPI_CALL_TYPE_VOICE_EV; - - //set call wait - ret_status = tel_set_ss_waiting(&waitInfo, &RequestID); - if (ret_status != TAPI_API_SUCCESS) { - return; - } - - nw_context_loop = g_main_loop_new(NULL, FALSE); - g_main_loop_run(nw_context_loop); - - sleep(4); - - //now get call wait - TelSsCallType_t CallType = TAPI_CALL_TYPE_VOICE_EV; - ret_status = tel_get_ss_waiting_status(CallType, &RequestID); - if (ret_status != TAPI_API_SUCCESS) { - return; - } - nw_context_loop = g_main_loop_new(NULL, FALSE); - g_main_loop_run(nw_context_loop); -} - -ss_test() -{ - ss_test_subscribe_tapi_events(); - tapi_ss_call_barr(); - tapi_ss_call_fwd(); - tapi_ss_call_wait(); - noti_finish(); -} - -int main(int argc, char *argv[]) -{ - ss_test(); - return 0; -} -@endcode -@} -@defgroup Appendixes2 Appendix B. Error Code -@ingroup Appendix -@{ - -

Appendix B. Error Code

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Error Num.Error CodeError Description
0TAPI_API_SUCCESSNo Error occurred
-1TAPI_API_INVALID_INPUTInput values are not correct in TAPI Library
-2TAPI_API_INVALID_PTRinvalid pointer
-3TAPI_API_NOT_SUPPORTEDThe feature corresponding to requested API is not supported. This may be due to market/network/vendor reasons such as the feature is not available in the network.
-4TAPI_API_DEPRICATED This API is deprecated and will be so in future also
-5TAPI_API_SYSTEM_OUT_OF_MEMOut of memory
-6TAPI_API_SYSTEM_RPC_LINK_DOWNRPC link down
-7TAPI_API_SERVICE_NOT_READY Phone was powered on, but yet to receive the power up completed notification
-8TAPI_API_SERVER_FAILUREerror occurred in Telephony server
-9TAPI_API_OEM_PLUGIN_FAILUREPlug-in layer failure
-10TAPI_API_TRANSPORT_LAYER_FAILURETransport layer Failure
-11TAPI_API_INVALID_DATA_LENInvalid data length
-@} -*/ -/** -* @defgroup TELEPHONY - @{ -* @defgroup Appendix Reference -* @defgroup TELEPHONY_USECASES Use Cases - @{ -* @defgroup Use_Cases1_COMMON COMMON -* @defgroup Use_Cases2_CALL CALL -* @defgroup Use_Cases3_SUPPLEMENTARY_SERVICE SUPPLEMENTARY_SERVICE -* @defgroup Use_Cases4_SMS SMS -* @defgroup Use_Cases5_NETWORK NETWORK_Registration_and_Configuration -* @defgroup Use_Cases6_SOUND SOUND -* @defgroup Use_Cases7_SAT SAT -* @defgroup Use_Cases8_GPRS GPRS - @} - @} -*/ diff --git a/include/TapiUtility.h b/include/TapiUtility.h index c7227c5..292af02 100644 --- a/include/TapiUtility.h +++ b/include/TapiUtility.h @@ -1,7 +1,7 @@ /* * libslp-tapi * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Ja-young Gu * @@ -19,15 +19,13 @@ */ /** - * @open - * @ingroup TelephonyAPI - * @addtogroup COMMON_TAPI COMMON - * @{ - * - * @file TelUtility.h + * @file TapiUtility.h + */ - @brief This file serves as a "C" header file defines structures for Utility Services. \n - It contains a sample set of constants, enums, structs that would be required by applications. +/** + * @internal + * @addtogroup CAPI_TELEPHONY_SERVICE + * @{ */ #ifndef _TEL_UTILITY_H_ @@ -35,84 +33,99 @@ __BEGIN_DECLS -#define INVALID_REQUEST_ID -1 /**< Invalid RequestId Value */ +/** + * @brief Definition for Invalid Request ID value. + */ +#define INVALID_REQUEST_ID -1 #define DBUS_DEFAULT_PATH "/org/tizen/telephony" /** - * @enum TapiResult_t - * Below enumerations are the return codes of TAPI API's + * @brief Definition for negative error value + * @remarks If result is negative value in callback function, it comply below error. + */ +#define TAPI_ERROR_OPERATION_FAILED -1 +#define TAPI_ERROR_ACCESS_DENIED -2 +#define TAPI_ERROR_OPERATION_NOT_SUPPORTED -3 + +/** + * @brief Enumeration for TAPI return codes. */ typedef enum { - TAPI_API_SUCCESS = 0, /**= src_len) { \ @@ -221,29 +232,29 @@ typedef enum { } /** - * Encode a sequence of binary data into its Base-64 stringified representation. + * @brief Encodes a sequence of binary data into its Base-64 stringified representation. * - * data : the binary data to encode. - * len : the length of data. - * Returns : a newly allocated, zero-terminated Base-64 encoded string representing data. - * gchar *g_base64_encode (const guchar *data, gsize len); + * @param[in] data The binary data to encode + * @param[in] len The length of data + * @param[out] encoded_data The encoded data + * @return A newly allocated, zero-terminated Base-64 encoded string representing data */ #define TAPI_BASE64_ENCODE(data, len, encoded_data) \ encoded_data = g_base64_encode((const guchar *)data, (gsize) len); /** - * Decode a sequence of Base-64 encoded text into binary data + * @brief Decodes a sequence of Base-64 encoded text into binary data. * - * text : zero-terminated string with base64 text to decode. - * out_len : The length of the decoded data is written here. - * Returns : a newly allocated buffer containing the binary data that text represents - * guchar *g_base64_decode (const gchar *text, gsize *out_len); + * @param[in] text The zero-terminated string with base64 text to decode + * @param[out] decoded_data The decoded data + * @param[in] ptr_out_len The length of the decoded data + * @return A newly allocated buffer containing the binary data representing text */ #define TAPI_BASE64_DECODE(text, decoded_data, ptr_out_len) \ decoded_data = g_base64_decode((const gchar *)text, (gsize *)ptr_out_len); /** - * Define Macro for calculate the length of SCA in BCD type. + * @brief Calculates the length of SCA in BCD type. */ #define TAPI_GET_LENGTH_FROM_BCD(nLength, rtn) { \ if (nLength <= 0) { \ diff --git a/include/TelCall.h b/include/TelCall.h index e2e3f25..7d38d18 100644 --- a/include/TelCall.h +++ b/include/TelCall.h @@ -1,7 +1,7 @@ /* * libslp-tapi * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Ja-young Gu * @@ -19,64 +19,119 @@ */ /** - * @open - * @ingroup TelephonyAPI - * @addtogroup TAPI_CALL CALL - * @{ - * * @file TelCall.h + */ - @brief This file serves as a "C" header file defines structures for Tapi Call Services. \n - It contains a sample set of constants, enums, structs that would be required by applications. +/** + * @internal + * @addtogroup CAPI_TELEPHONY_SERVICE_CALL + * @{ + * */ #ifndef _TEL_CALL_H_ #define _TEL_CALL_H_ #include -#include #ifdef __cplusplus extern "C" { #endif -#define TAPI_CALLING_NAME_SIZE_MAX 80 /**< The maximum length of the string for calling party name. */ -#define TAPI_CALL_UUS_DATA_LEN_MAX 131 /**< The Maximum length of the user to user singnalling data string. */ -#define TAPI_CALL_DISPLAY_RECORD_MAX 32 /**< The maximum length of the string for display record in CDMA */ -#define MAX_TAPI_CALL_COUNT 6 /**< Maximum number of call can be possible at a time */ -#define MAX_TAPI_CONF_CALL_COUNT 5 /**< Maximum number of Call can be possible in a conference call at a time */ -#define INVALID_CALL_HANDLE 0 /**< TS_UINT is used for call handle */ +/** + * @brief Definition for the maximum length of the string for the calling party name. + * @since_tizen 2.3 + */ +#define TAPI_CALLING_NAME_SIZE_MAX 80 + +/** + * @brief Definition for the maximum length of the user to user signalling data string. + * @since_tizen 2.3 + */ +#define TAPI_CALL_UUS_DATA_LEN_MAX 131 + +/** + * @brief Definition for the maximum length of the string for display record in CDMA. + * @since_tizen 2.3 + */ +#define TAPI_CALL_DISPLAY_RECORD_MAX 32 + +/** + * @brief Definition for the maximum number of calls possible at a time. + * @since_tizen 2.3 + */ +#define MAX_TAPI_CALL_COUNT 6 + +/** + * @brief Definition for the maximum number of calls possible in a conference call at a time. + * @since_tizen 2.3 + */ +#define MAX_TAPI_CONF_CALL_COUNT 5 + +/** + * @brief Definition for the invalid call handle. + * @details TS_UINT is used for the call handle. + * @since_tizen 2.3 + */ +#define INVALID_CALL_HANDLE 0 /* Call */ -#define TAPI_CALL_DIALDIGIT_LEN_MAX 82 /**< Maximum Dialling Digit Length */ -#define TAPI_CALL_SUBADDRESS_LEN_MAX 40 /**< Maximum Call Subaddress Length */ -#define TAPI_CALL_NUMBER_LEN_MAX 7 /**< Dialling Num length */ -#define TAPI_CONTEXT_CALL_SIZE_MAX 6 /**< Maximum Call context */ + +/** + * @brief Definition for the maximum dialling digit length. + * @since_tizen 2.3 + */ +#define TAPI_CALL_DIALDIGIT_LEN_MAX 82 + +/** + * @brief Definition for the maximum call subaddress length. + * @since_tizen 2.3 + */ +#define TAPI_CALL_SUBADDRESS_LEN_MAX 40 + +/** + * @brief Definition for the dialling number length. + * @since_tizen 2.3 + */ +#define TAPI_CALL_NUMBER_LEN_MAX 7 + +/** + * @brief Definition for the maximum call context size. + * @since_tizen 2.3 + */ +#define TAPI_CONTEXT_CALL_SIZE_MAX 6 + +/** + * @brief Definition for the maximum dialling number length. + * @since_tizen 2.3 + */ #define TAPI_CALL_DIAL_NUMBER_LEN_MAX 82 -#define TAPI_INVALID_CONTEXTHANDLE (HTapiContext)-1 -#define TAPI_CLIENT_SIZE_MAX 30 -#define TAPI_CALL_CUSTOM_SERVICE_DATA_MAX 128 +/** + * @brief Definition for the maximum Burst DTMF string length. + * @since_tizen 2.3 + */ +#define TAPI_CALL_BURST_DTMF_STRING_MAX 32 /** - * @enum TelCallCause_t - * This structure defines the values for Call Cause. + * @brief Enumeration for the call cause values. + * @since_tizen 2.3 */ typedef enum { - TAPI_CAUSE_SUCCESS, /**< Success */ - TAPI_CAUSE_ACCESSDISCARD, /**< Access discarded */ - TAPI_CAUSE_BARR_BYOPERATOR, /**< Barred by operator */ + TAPI_CAUSE_SUCCESS, /**< Success */ + TAPI_CAUSE_ACCESSDISCARD, /**< Access discarded */ + TAPI_CAUSE_BARR_BYOPERATOR, /**< Barred by operator */ TAPI_CAUSE_BEARERMODE_NOTIMPL, /**< Bearer mode not implemented */ TAPI_CAUSE_BEARERMODE_RESTRICTED, /**< Bearer mode restricted */ - TAPI_CAUSE_BEARERMODE_UNAUTH, /**< Bearer mode un authorized */ + TAPI_CAUSE_BEARERMODE_UNAUTH, /**< Bearer mode unauthorized */ TAPI_CAUSE_BEARERMODE_UNAVAIL, /**< Bearer mode not available */ TAPI_CAUSE_BUSY, /**< (Network/Server) busy */ TAPI_CAUSE_CALLMETER_EXPIRED, /**< Call meter expired */ TAPI_CAUSE_CALLNO_ERROR, /**< Call number error */ TAPI_CAUSE_CKTUNAVAIL, /**< Circuit channel unavailable */ //10 - TAPI_CAUSE_CONGESTION, /**< Congestion happened */ - TAPI_CAUSE_NO_CIRCUIT_AVAIL, /**< Circuit not available */ - TAPI_CAUSE_DESTIN_INCOMPAT, /**< Destination incompatibility */ + TAPI_CAUSE_CONGESTION, /**< Congestion occurred */ + TAPI_CAUSE_NO_CIRCUIT_AVAIL, /**< Circuit not available */ + TAPI_CAUSE_DESTIN_INCOMPAT, /**< Destination incompatibility */ TAPI_CAUSE_DTMF_NOSPEECH, /**< No speech in DTMF */ TAPI_CAUSE_DTMF_REJECTED, /**< DTMF rejected */ TAPI_CAUSE_FACILITY_NOTIMPL, /**< Facility not implemented */ @@ -84,7 +139,7 @@ typedef enum { TAPI_CAUSE_INCOMINGCUGCALLS_BARRED, /**< Incoming CUG Calls barred */ TAPI_CAUSE_INVALNUM, /**< Invalid number */ TAPI_CAUSE_MPTY_ERROR, /**< Multiparty error */ //20 - TAPI_CAUSE_NOANSWER, /**< No answer */ + TAPI_CAUSE_NOANSWER, /**< No answer */ TAPI_CAUSE_NONCUGMEMBER, /**< Non CUG member */ TAPI_CAUSE_NUMBERCHANGED, /**< Number changed */ TAPI_CAUSE_NUMBER_ERROR, /**< Number error */ @@ -95,138 +150,141 @@ typedef enum { TAPI_CAUSE_QOSUNAVAIL, /**< QOS unavailable */ TAPI_CAUSE_REJECT, /**< Rejected */ //30 TAPI_CAUSE_REJ_FAIL, /**< Rejection failed */ - TAPI_CAUSE_REJ_SRVC_NOT_AVL, /**< Rejection service not available */ + TAPI_CAUSE_REJ_SRVC_NOT_AVL, /**< Rejection service not available */ + TAPI_CAUSE_REJ_SAT_CALL_CTRL, /**< Rejection SAT Call Control */ TAPI_CAUSE_REMOTE_CKTUNAVAIL, /**< Remote Circuit channel unavailable */ - TAPI_CAUSE_RESOURCEUNAVAIL, /**< Resource not available */ - TAPI_CAUSE_SERVICEID_ERROR, /**< Service id error */ - TAPI_CAUSE_SERVICE_NOTIMPL, /**< Service not implemented */ - TAPI_CAUSE_SERVICE_UNAVAIL, /**< Service not available */ + TAPI_CAUSE_RESOURCEUNAVAIL, /**< Resource not available */ + TAPI_CAUSE_SERVICEID_ERROR, /**< Service ID error */ + TAPI_CAUSE_SERVICE_NOTIMPL, /**< Service not implemented */ + TAPI_CAUSE_SERVICE_UNAVAIL, /**< Service not available */ TAPI_CAUSE_MODIFY_SAME_BEARER, /**< Modify same bearer */ TAPI_CAUSE_MODIFY_NOT_PERMITTED, /**< Modification not permitted */ - TAPI_CAUSE_HOLD_FAIL, /**< Call hold fail */ //40 - TAPI_CAUSE_TEMPFAILURE, /**< Temporary failure */ + TAPI_CAUSE_HOLD_FAIL, /**< Call hold failure */ //40 + TAPI_CAUSE_TEMPFAILURE, /**< Temporary failure */ TAPI_CAUSE_WRONGNUM, /**< Wrong number */ TAPI_CAUSE_NORMAL_UNSPECIFIED, /**< Normal but unspecified */ - TAPI_CAUSE_SSERRINVALIDTIVALUE, /**< SS invalid Transaction ID Value */ + TAPI_CAUSE_SSERRINVALIDTIVALUE, /**< SS invalid transaction ID value */ TAPI_CAUSE_SSERRINVALIDTI, /**< SS Invalid transaction ID */ - TAPI_CAUSE_SSINCOMPATIBLESTATE, /**< SS incompatible state */ + TAPI_CAUSE_SSINCOMPATIBLESTATE, /**< SS incompatible state */ TAPI_CAUSE_SSERRSYNTAXERROR, /**< SS syntax error */ - TAPI_CAUSE_SSPROTOCOLERROR, /**< Protocol error */ + TAPI_CAUSE_SSPROTOCOLERROR, /**< Protocol error */ TAPI_CAUSE_SSNEGATIVEPASSWORDCHECK, /**< Negative password check */ TAPI_CAUSE_SSSENTASPHASE1, /**< SS sent as phase1 message */ //50 - TAPI_CAUSE_SSERROR, /**< Supplementary service error */ - TAPI_CAUSE_SS_USSD_BUSY, /**< Second USSD request will be rejected when already USSD transaction is ongoing. */ + TAPI_CAUSE_SSERROR, /**< Supplementary service error */ + TAPI_CAUSE_SS_USSD_BUSY, /**< Second USSD request will be rejected when a USSD transaction is already in progess */ TAPI_CAUSE_IDLE, /**< Idle */ TAPI_CAUSE_NETWORK_SPECIFIC, /**< Network specific error */ - TAPI_CAUSE_FADE, /**< voice call was dropped e.g. because of a loss of signal */ - TAPI_CAUSE_UNKNOWN, /**< unknown no details available */ - TAPI_CAUSE_INCOM_CALL, /**< terminated by incoming call */ - TAPI_CAUSE_ALERT_STOP, /**< terminated by alert stop */ - TAPI_CAUSE_INTERCEPT, /**< voice call was dropped by interception */ - TAPI_CAUSE_REORDER, /**< voice call was dropped by reordering */ //60 - TAPI_CAUSE_CLIENT_END, /**< client ended the call */ - TAPI_CAUSE_ACCESS_CLASS_BLOCKED, /**< access class blocked */ + TAPI_CAUSE_FADE, /**< Voice call is dropped e.g. because of a loss of signal */ + TAPI_CAUSE_UNKNOWN, /**< Unknown and no details available */ + TAPI_CAUSE_INCOM_CALL, /**< Terminated by an incoming call */ + TAPI_CAUSE_ALERT_STOP, /**< Terminated by an alert stop */ + TAPI_CAUSE_INTERCEPT, /**< Voice call is dropped by interception */ + TAPI_CAUSE_REORDER, /**< Voice call is dropped by reordering */ //60 + TAPI_CAUSE_CLIENT_END, /**< Client ended the call */ + TAPI_CAUSE_ACCESS_CLASS_BLOCKED, /**< Access class blocked */ TAPI_CAUSE_MEMCAPEXCEEDED, /**< Memory capacity exceeded */ TAPI_CAUSE_TYPENOTSUPPORTED, /**< Type not supported */ - TAPI_CAUSE_REPLACENOTSUPPORTED, /**< Replace not supported */ - TAPI_CAUSE_PROTOCOLID_ERROR, /**< Protocol id error */ + TAPI_CAUSE_REPLACENOTSUPPORTED, /**< Replace not supported */ + TAPI_CAUSE_PROTOCOLID_ERROR, /**< Protocol ID error */ TAPI_CAUSE_CLASSNOTSUPPORTED, /**< Class not supported */ TAPI_CAUSE_DATACODING_ERROR, /**< Data coding error */ TAPI_CAUSE_INVAL_MSG, /**< Invalid message */ - TAPI_CAUSE_CALL_BARRED, /**< Call barred */ //70 + TAPI_CAUSE_CALL_BARRED, /**< Call barred */ //70 TAPI_CAUSE_SIM_CALL_CONTROL_CHANGED_TO_SS, /**< Sim call control changed to SS */ TAPI_CAUSE_SIM_CALL_CONTROL_CHANGED_TO_CALL, /**< SIM Call control changed to call */ - TAPI_CAUSE_SIM_ERROR, /**< SIM error */ + TAPI_CAUSE_SIM_ERROR, /**< SIM error */ TAPI_CAUSE_SIM_CALL_CONTROL_MODIFIED, /**< SIM call control modified */ - TAPI_CAUSE_RANDOM_ACCESS_FAILURE, /**< Random access error */ - TAPI_CAUSE_LOWER_LAYER_FAILURE, /**< Lower layer error */ - TAPI_CAUSE_ACCESS_REJECTED, /**< Access rejected */ - TAPI_CAUSE_RESET_NOT_ALLOWED, /**< Reset not allowed */ + TAPI_CAUSE_RANDOM_ACCESS_FAILURE, /**< Random access error */ + TAPI_CAUSE_LOWER_LAYER_FAILURE, /**< Lower layer error */ + TAPI_CAUSE_ACCESS_REJECTED, /**< Access rejected */ + TAPI_CAUSE_RESET_NOT_ALLOWED, /**< Reset not allowed */ TAPI_CAUSE_EMERGENCY_CALL_NOT_ALLOWED, /**< Emergency call not allowed */ - TAPI_CAUSE_ACCESS_NOT_ALLOWED, /**< Access not allowed */ //80 - TAPI_CAUSE_RADIO_LINK_FAILURE, /**< Radio link failure */ - TAPI_CAUSE_INVALID_IDENTITY, /**< Invalid identity */ - TAPI_CAUSE_UNKNOWN_IDENTITY, /**< Unknown identity */ - TAPI_CAUSE_UNACCEPTABLE_IDENTITY, /**< Un acceptable identity */ - TAPI_CAUSE_NO_SERVICE_HERE, /**< No service here */ - TAPI_CAUSE_SERVICE_NOT_ALLOWED, /**< Service not allowed */ - TAPI_CAUSE_SERVICE_NOT_AVAIL, /**< Service not available */ - TAPI_CAUSE_SERVICE_NOT_WORKING, /**< Service not working */ - TAPI_CAUSE_CANNOT_IDENTIFY_CALL, /**< Cannot identify the call */ - TAPI_CAUSE_DEACTIVATION, /**< Deactivation */ //90 - TAPI_CAUSE_FATAL_ERROR, /**< Fatal error */ - TAPI_CAUSE_SEND_DTMF_SUCCESS, /**< Sending DTMF Success */ - TAPI_CAUSE_SEND_DTMF_FAIL, /**< Sending DTMF Failed */ - TAPI_CAUSE_TIMER_EXPIRED, /**< Call Timer Expired */ + TAPI_CAUSE_ACCESS_NOT_ALLOWED, /**< Access not allowed */ //80 + TAPI_CAUSE_RADIO_LINK_FAILURE, /**< Radio link failure */ + TAPI_CAUSE_INVALID_IDENTITY, /**< Invalid identity */ + TAPI_CAUSE_UNKNOWN_IDENTITY, /**< Unknown identity */ + TAPI_CAUSE_UNACCEPTABLE_IDENTITY, /**< Unacceptable identity */ + TAPI_CAUSE_NO_SERVICE_HERE, /**< No service here */ + TAPI_CAUSE_SERVICE_NOT_ALLOWED, /**< Service not allowed */ + TAPI_CAUSE_SERVICE_NOT_AVAIL, /**< Service not available */ + TAPI_CAUSE_SERVICE_NOT_WORKING, /**< Service not working */ + TAPI_CAUSE_CANNOT_IDENTIFY_CALL, /**< Cannot identify the call */ + TAPI_CAUSE_DEACTIVATION, /**< Deactivation */ //90 + TAPI_CAUSE_FATAL_ERROR, /**< Fatal error */ + TAPI_CAUSE_SEND_DTMF_SUCCESS, /**< Sending DTMF succeeded */ + TAPI_CAUSE_SEND_DTMF_FAIL, /**< Sending DTMF failed */ + TAPI_CAUSE_FIXED_DIALING_NUMBER_ONLY, /**< Fixed Dialing Number Only */ + TAPI_CAUSE_TIMER_EXPIRED, /**< Call Timer Expired */ } TelCallCause_t; /** - * @enum TelTapiEndCause_t - * When a call is ended, this end cause is given with the CALL END notification to the application. This end cause can be originated - * from different elements in the communication path or different modules in the same element. + * @brief Enumeration when a call is ended, this end cause is given with the CALL END notification to the application. + * @details This end cause can be originated from different elements in the communication path or different modules in the same element. + * @since_tizen 2.3 */ typedef enum { TAPI_CALL_END_NO_CAUSE = 0x00, /**< No Cause */ TAPI_CC_CAUSE_UNASSIGNED_NUMBER, /**< Unassigned Number */ - TAPI_CC_CAUSE_NO_ROUTE_TO_DEST, /**< No Route to Destination */ - TAPI_CC_CAUSE_CHANNEL_UNACCEPTABLE, /**< Channel Unacceptable */ + TAPI_CC_CAUSE_NO_ROUTE_TO_DEST, /**< No Route to Destination */ + TAPI_CC_CAUSE_CHANNEL_UNACCEPTABLE, /**< Channel Unacceptable */ TAPI_CC_CAUSE_OPERATOR_DETERMINED_BARRING, /**< Operator Determined Barring */ - TAPI_CC_CAUSE_NORMAL_CALL_CLEARING, /**< Normal Call Clearing */ + TAPI_CC_CAUSE_NORMAL_CALL_CLEARING, /**< Normal Call Clearing */ TAPI_CC_CAUSE_USER_BUSY, /**< User Busy */ - TAPI_CC_CAUSE_NO_USER_RESPONDING, /**< No user Responding */ + TAPI_CC_CAUSE_NO_USER_RESPONDING, /**< No user responding */ TAPI_CC_CAUSE_USER_ALERTING_NO_ANSWER, /**< User Alerting no Answer */ TAPI_CC_CAUSE_CALL_REJECTED, /**< Call Rejected */ TAPI_CC_CAUSE_NUMBER_CHANGED, /**< Number Changed */ TAPI_CC_CAUSE_NON_SELECTED_USER_CLEARING, /**< Non Selected User Clearing */ - TAPI_CC_CAUSE_DESTINATION_OUT_OF_ORDER, /**< Destination out of Order */ + TAPI_CC_CAUSE_DESTINATION_OUT_OF_ORDER, /**< Destination out of Order */ TAPI_CC_CAUSE_INVALID_NUMBER_FORMAT, /**< Invalid Number Format */ TAPI_CC_CAUSE_FACILITY_REJECTED, /**< Facility Rejected */ TAPI_CC_CAUSE_RESPONSE_TO_STATUS_ENQUIRY, /**< Response to Status Enquiry */ TAPI_CC_CAUSE_NORMAL_UNSPECIFIED, /**< Normal Unspecified */ - TAPI_CC_CAUSE_NO_CIRCUIT_CHANNEL_AVAILABLE, /**< No Circuit Channel Available */ - TAPI_CC_CAUSE_NETWORK_OUT_OF_ORDER, /**< Network out of Order */ + TAPI_CC_CAUSE_NO_CIRCUIT_CHANNEL_AVAILABLE, /**< No Circuit Channel Available */ + TAPI_CC_CAUSE_NETWORK_OUT_OF_ORDER, /**< Network out of Order */ TAPI_CC_CAUSE_TEMPORARY_FAILURE, /**< Temporary Failure */ TAPI_CC_CAUSE_SWITCHING_EQUIPMENT_CONGESTION, /**< Switching Equipment Congestion */ - TAPI_CC_CAUSE_ACCESS_INFORMATION_DISCARDED, /**< Access Information Discarded */ + TAPI_CC_CAUSE_ACCESS_INFORMATION_DISCARDED, /**< Access Information Discarded */ TAPI_CC_CAUSE_REQUESTED_CIRCUIT_CHANNEL_NOT_AVAILABLE, /**< Requested Circuit channel not available */ - TAPI_CC_CAUSE_RESOURCES_UNAVAILABLE_UNSPECIFIED, /**< Resources unavailable unspecified */ + TAPI_CC_CAUSE_RESOURCES_UNAVAILABLE_UNSPECIFIED, /**< Resources unavailable and unspecified */ TAPI_CC_CAUSE_QUALITY_OF_SERVICE_UNAVAILABLE, /**< Quality of service unavailable */ TAPI_CC_CAUSE_REQUESTED_FACILITY_NOT_SUBSCRIBED, /**< Requested facility not subscribed */ - TAPI_CC_CAUSE_INCOMING_CALL_BARRED_WITHIN_CUG, /**< incomming call barred within CUG */ - TAPI_CC_CAUSE_BEARER_CAPABILITY_NOT_AUTHORISED, /**< Bearer Capability not Authorised */ + TAPI_CC_CAUSE_INCOMING_CALL_BARRED_WITHIN_CUG, /**< Incoming call barred within CUG */ + TAPI_CC_CAUSE_BEARER_CAPABILITY_NOT_AUTHORISED, /**< Bearer capability not Authorised */ TAPI_CC_CAUSE_BEARER_CAPABILITY_NOT_PRESENTLY_AVAILABLE,/**< Bearer capability not presently Available */ TAPI_CC_CAUSE_SERVICE_OR_OPTION_NOT_AVAILABLE, /**< Service or Option not available */ TAPI_CC_CAUSE_BEARER_SERVICE_NOT_IMPLEMENTED, /**< Service not implemented */ TAPI_CC_CAUSE_ACM_GEQ_ACMMAX, /**< ACM GEQ ACMAX */ TAPI_CC_CAUSE_REQUESTED_FACILITY_NOT_IMPLEMENTED, /**< Requested facility not implemented */ - TAPI_CC_CAUSE_ONLY_RESTRICTED_DIGITAL_INFO_BC_AVAILABLE,/**< Resticted digital info BC not available */ - TAPI_CC_CAUSE_SERVICE_OR_OPTION_NOT_IMPLEMENTED, /**< Service or Option not Implemented */ - TAPI_CC_CAUSE_INVALID_TRANSACTION_ID_VALUE, /**< Transaction ID value */ + TAPI_CC_CAUSE_ONLY_RESTRICTED_DIGITAL_INFO_BC_AVAILABLE,/**< Restricted digital info BC not available */ + TAPI_CC_CAUSE_SERVICE_OR_OPTION_NOT_IMPLEMENTED, /**< Service or Option not Implemented */ + TAPI_CC_CAUSE_INVALID_TRANSACTION_ID_VALUE, /**< Transaction ID value */ - TAPI_CC_CAUSE_USER_NOT_MEMBER_OF_CUG, /**< Not member of CUG */ - TAPI_CC_CAUSE_INCOMPATIBLE_DESTINATION, /**< Incompatible Destination */ - TAPI_CC_CAUSE_INVALID_TRANSIT_NETWORK_SELECTION, /**< Transit Network selection */ - TAPI_CC_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE, /**< Semantically Incorrect message */ - TAPI_CC_CAUSE_INVALID_MANDATORY_INFORMATION, /**< Invalid Mandatory Message */ + TAPI_CC_CAUSE_USER_NOT_MEMBER_OF_CUG, /**< Not a member of CUG */ + TAPI_CC_CAUSE_INCOMPATIBLE_DESTINATION, /**< Incompatible Destination */ + TAPI_CC_CAUSE_INVALID_TRANSIT_NETWORK_SELECTION, /**< Transit Network selection */ + TAPI_CC_CAUSE_SEMANTICALLY_INCORRECT_MESSAGE, /**< Semantically Incorrect message */ + TAPI_CC_CAUSE_INVALID_MANDATORY_INFORMATION, /**< Invalid Mandatory Message */ TAPI_CC_CAUSE_MESSAGE_TYPE_NON_EXISTENT, /**< Message Type Non Existent */ TAPI_CC_CAUSE_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROT_STATE, /**< Message type not compatible with Prot state */ TAPI_CC_CAUSE_IE_NON_EXISTENT_OR_NOT_IMPLEMENTED, /**< IE non exitent or not implemented */ - TAPI_CC_CAUSE_CONDITIONAL_IE_ERROR, /**< Conditional IE error */ + TAPI_CC_CAUSE_CONDITIONAL_IE_ERROR, /**< Conditional IE error */ TAPI_CC_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE, /**< Not Compatible with protocol state */ - TAPI_CC_CAUSE_RECOVERY_ON_TIMER_EXPIRY, /**< Recovery on timer expiry */ + TAPI_CC_CAUSE_RECOVERY_ON_TIMER_EXPIRY, /**< Recovery on timer expiry */ TAPI_CC_CAUSE_PROTOCOL_ERROR_UNSPECIFIED, /**< Protocol error unspecified */ TAPI_CC_CAUSE_INTERWORKING_UNSPECIFIED, /**< Interworking unspecified */ + TAPI_CC_CAUSE_REORDER, /**< Reorder */ - TAPI_CC_CAUSE_END = 128, + TAPI_CC_CAUSE_END = 128, /**< End unspecified */ /* Reject causes*/ TAPI_REJECT_CAUSE_IMSI_UNKNOWN_IN_HLR, /**< IMSI unknown in HLR */ @@ -237,19 +295,19 @@ typedef enum { TAPI_REJECT_CAUSE_GPRS_SERVICES_NOT_ALLOWED, /**< GPRS service not allowed */ TAPI_REJECT_CAUSE_GPRS_SERVICES_AND_NON_GPRS_SERVICES_NOT_ALLOWED, /**< GPRS services and Non-GPRS services not allowed */ - TAPI_REJECT_CAUSE_MS_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK, /**< MS device cannot be derived by the network */ + TAPI_REJECT_CAUSE_MS_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK, /**< MS device cannot be derived by the network */ TAPI_REJECT_CAUSE_IMPLICITLY_DETACHED, /**< Implicitly detached */ - TAPI_REJECT_CAUSE_PLMN_NOT_ALLOWED, /**< PLMN not allowed */ + TAPI_REJECT_CAUSE_PLMN_NOT_ALLOWED, /**< PLMN not allowed */ TAPI_REJECT_CAUSE_LA_NOT_ALLOWED, /**< LA not allowed */ - TAPI_REJECT_CAUSE_NATIONAL_ROAMING_NOT_ALLOWED, /**< National roaming not allowed */ + TAPI_REJECT_CAUSE_NATIONAL_ROAMING_NOT_ALLOWED, /**< National roaming not allowed */ TAPI_REJECT_CAUSE_GPRS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN, /**< GPRS services not allowed in this PLMN */ TAPI_REJECT_CAUSE_NO_SUITABLE_CELLS_IN_LA, /**< No suitable cells in the LA */ TAPI_REJECT_CAUSE_MSC_TEMPORARILY_NOT_REACHABLE, /**< MSC temporarily not reachable */ TAPI_REJECT_CAUSE_NETWORK_FAILURE, /**< Network unavailable */ TAPI_REJECT_CAUSE_MAC_FAILURE, /**< MAC failure */ - TAPI_REJECT_CAUSE_SYNCH_FAILURE, /**< SYNCh failure */ + TAPI_REJECT_CAUSE_SYNCH_FAILURE, /**< SYNCH failure */ TAPI_REJECT_CAUSE_CONGESTTION, /**< Congestion */ TAPI_REJECT_CAUSE_GSM_AUTH_UNACCEPTED, /**< GSM Auth unaccepted */ @@ -257,7 +315,7 @@ typedef enum { TAPI_REJECT_CAUSE_REQ_SERV_OPT_NOT_SUBSCRIBED, /**< REQ_SERV option not suscribed */ TAPI_REJECT_CAUSE_SERVICE_OPT__OUT_OF_ORDER, /**< Service OPT out of order */ TAPI_REJECT_CAUSE_CALL_CANNOT_BE_IDENTIFIED, /**< Call cannot be identified */ - TAPI_REJECT_CAUSE_NO_PDP_CONTEXT_ACTIVATED, /**< No PDP context Activated */ + TAPI_REJECT_CAUSE_NO_PDP_CONTEXT_ACTIVATED, /**< No PDP context Activated */ TAPI_REJECT_CAUSE_RETRY_UPON_ENTRY_INTO_A_NEW_CELL_MIN_VALUE, /**< Retry upon entry into a new call min value */ TAPI_REJECT_CAUSE_RETRY_UPON_ENTRY_INTO_A_NEW_CELL_MAX_VALUE, /**< Retry upon entry into a new call max value */ @@ -265,86 +323,87 @@ typedef enum { TAPI_REJECT_CAUSE_INVALID_MANDATORY_INFO, /**< Invalid mandatory information */ TAPI_REJECT_CAUSE_MESSAGE_TYPE_NON_EXISTANT, /**< Message type non-existant */ - TAPI_REJECT_CAUSE_MESSAGE_TYPE_NOT_COMP_PRT_ST, /**< Message type not COMP PRT ST */ - TAPI_REJECT_CAUSE_IE_NON_EXISTANT, /**< IE not existant */ + TAPI_REJECT_CAUSE_MESSAGE_TYPE_NOT_COMP_PRT_ST, /**< Message type not COMP PRT ST */ + TAPI_REJECT_CAUSE_IE_NON_EXISTANT, /**< IE non existent */ TAPI_REJECT_CAUSE_MSG_NOT_COMPATIBLE_PROTOCOL_STATE, /**< MSG not compatible protocol state */ /* Connection Management establishment rejection cause */ - TAPI_REJECT_CAUSE_REJ_UNSPECIFIED, /**< rej unspecified */ + TAPI_REJECT_CAUSE_REJ_UNSPECIFIED, /**< REJ unspecified */ /* AS reject causes */ TAPI_REJECT_CAUSE_AS_REJ_RR_REL_IND, /**< RR release indication */ TAPI_REJECT_CAUSE_AS_REJ_RR_RANDOM_ACCESS_FAILURE, /**< Random Access Failure */ TAPI_REJECT_CAUSE_AS_REJ_RRC_REL_IND, /**< RRC release indication */ - TAPI_REJECT_CAUSE_AS_REJ_RRC_CLOSE_SESSION_IND, /**< RRC close session indication */ + TAPI_REJECT_CAUSE_AS_REJ_RRC_CLOSE_SESSION_IND, /**< RRC close session indication */ TAPI_REJECT_CAUSE_AS_REJ_RRC_OPEN_SESSION_FAILURE, /**< RRC open session failure */ TAPI_REJECT_CAUSE_AS_REJ_LOW_LEVEL_FAIL, /**< Low level failure */ TAPI_REJECT_CAUSE_AS_REJ_LOW_LEVEL_FAIL_REDIAL_NOT_ALLOWED, /**< Low level failure redial not alowed */ - TAPI_REJECT_CAUSE_AS_REJ_LOW_LEVEL_IMMED_RETRY, /**< low level immediate retry */ + TAPI_REJECT_CAUSE_AS_REJ_LOW_LEVEL_IMMED_RETRY, /**< Low level immediate retry */ /* MM reject causes */ - TAPI_REJECT_CAUSE_MM_REJ_INVALID_SIM, /**< invalid Sim */ + TAPI_REJECT_CAUSE_MM_REJ_INVALID_SIM, /**< Invalid SIM */ TAPI_REJECT_CAUSE_MM_REJ_NO_SERVICE, /**< No service */ - TAPI_REJECT_CAUSE_MM_REJ_TIMER_T3230_EXP, /**< Timer T3230 expire */ - TAPI_REJECT_CAUSE_MM_REJ_NO_CELL_AVAILABLE, /**< No call available */ - TAPI_REJECT_CAUSE_MM_REJ_WRONG_STATE, /**< wrong state */ + TAPI_REJECT_CAUSE_MM_REJ_TIMER_T3230_EXP, /**< Timer T3230 expiry */ + TAPI_REJECT_CAUSE_MM_REJ_NO_CELL_AVAILABLE, /**< No call available */ + TAPI_REJECT_CAUSE_MM_REJ_WRONG_STATE, /**< Wrong state */ TAPI_REJECT_CAUSE_MM_REJ_ACCESS_CLASS_BLOCKED, /**< Access class blocked */ - /* Definitions for release ind causes between MM and CNM*/ + /* Definitions for release ind causes between MM and CNM */ TAPI_REJECT_CAUSE_ABORT_MSG_RECEIVED, /**< Abort Message received */ - TAPI_REJECT_CAUSE_OTHER_CAUSE, /**< Other cause */ + TAPI_REJECT_CAUSE_OTHER_CAUSE, /**< Other cause */ /* CNM reject causes */ TAPI_REJECT_CAUSE_CNM_REJ_TIMER_T303_EXP, /**< Timer T303 expiry */ - TAPI_REJECT_CAUSE_CNM_REJ_NO_RESOURCES, /**< Rejected due to unavailibilty of resources */ + TAPI_REJECT_CAUSE_CNM_REJ_NO_RESOURCES, /**< Rejected due to unavailibilty of resources */ TAPI_REJECT_CAUSE_CNM_MM_REL_PENDING, /**< MM release pending */ TAPI_REJECT_CAUSE_CNM_INVALID_USER_DATA, /**< Invalid user data */ - TAPI_CALL_END_CAUSE_MAX = 255, /**< Maximum End Cause limit for gsm/wcdma */ + TAPI_CALL_END_CAUSE_MAX = 255, /**< Maximum End Cause limit for GSM/WCDMA */ /* CDMA CALL END CAUSE */ TAPI_CDMA_END_CAUSE_REL_BY_USER = 0x1001, /**< Call Released by User */ - TAPI_CDMA_END_CAUSE_REL_BY_NET, /**< Call Released by Network */ - TAPI_CDMA_END_CAUSE_REL_NET_BUSY, /**< Call Released because of Network busy */ - TAPI_CDMA_END_CAUSE_NO_SVC, /**< Call Released because of No Service area */ - TAPI_CDMA_END_CAUSE_FADING, /**< Call Released because of Fading */ - TAPI_CDMA_END_CAUSE_RELEASE_BY_REORDER, /**< Call Released because of reorder */ + TAPI_CDMA_END_CAUSE_REL_BY_NET, /**< Call Released by Network */ + TAPI_CDMA_END_CAUSE_REL_NET_BUSY, /**< Call Released because the network is busy */ + TAPI_CDMA_END_CAUSE_NO_SVC, /**< Call Released because of No Service area */ + TAPI_CDMA_END_CAUSE_FADING, /**< Call Released because of Fading */ + TAPI_CDMA_END_CAUSE_RELEASE_BY_REORDER, /**< Call Released because of reorder */ TAPI_CDMA_END_CAUSE_RELEASE_BY_INTERCEPT, /**< Call Released because of intercept */ TAPI_CDMA_END_CAUSE_SILENT_ZONE_RETRY, /**< Call Released because of silent zone retry */ - TAPI_CDMA_END_CAUSE_OTA_CALL_FAIL, /**< Call Released because of OTA cal failure */ - TAPI_CDMA_END_CAUSE_PHONE_OFFLINE, /**< Call Released because of phone offline */ - TAPI_CDMA_END_CAUSE_PHONE_IS_CDMA_LOCKED, /**< Call Released because of CDMA locked */ - TAPI_CDMA_END_CAUSE_FLASH_IS_IN_PROGRESS_ERR, /**< Call Released because of flash-is-in-progress error */ - TAPI_CDMA_END_CAUSE_E911_MODE_ERR, /**< Call Released because of e911 mode */ - TAPI_CDMA_END_CAUSE_OTHERS, /**< Call Released by Others */ - TAPI_CDMA_END_CAUSE_MAX /**< Maximum End Cause limit for cdma */ + TAPI_CDMA_END_CAUSE_OTA_CALL_FAIL, /**< Call Released because of OTA call failure */ + TAPI_CDMA_END_CAUSE_PHONE_OFFLINE, /**< Call Released because phone is offline */ + TAPI_CDMA_END_CAUSE_PHONE_IS_CDMA_LOCKED, /**< Call Released because CDMA is locked */ + TAPI_CDMA_END_CAUSE_FLASH_IS_IN_PROGRESS_ERR, /**< Call Released because of the flash-is-in-progress error */ + TAPI_CDMA_END_CAUSE_E911_MODE_ERR, /**< Call Released because of the e911 mode */ + TAPI_CDMA_END_CAUSE_OTHERS, /**< Call Released by Others */ + TAPI_CDMA_END_CAUSE_MAX /**< Maximum End Cause limit for CDMA */ } TelTapiEndCause_t; /** - * @enum TelConferenceCallState_t - * This enum defines the call conference states + * @brief Enumeration for the call conference states. + * @since_tizen 2.3 */ typedef enum { - TAPI_CALL_CONFERENCE_IDLE, /**< idle */ - TAPI_CALL_CONFERENCE_ACTIVE /**< active */ + TAPI_CALL_CONFERENCE_IDLE, /**< Idle */ + TAPI_CALL_CONFERENCE_ACTIVE /**< Active */ } TelConferenceCallState_t; /** - * @enum TelCallStates_t - * Applications can use these sates or can have their own states. + * @brief Enumeration for application usable states. Applications can have their own states as well. + * @since_tizen 2.3 */ typedef enum { - TAPI_CALL_STATE_IDLE, /**< Call is in idle state - i.e. no call */ - TAPI_CALL_STATE_ACTIVE, /**< Call is in connected and conversation state */ - TAPI_CALL_STATE_HELD, /**< Call is in held state */ - TAPI_CALL_STATE_DIALING, /**< Call is in dialing state */ - TAPI_CALL_STATE_ALERT, /**< Call is in alerting state */ - TAPI_CALL_STATE_INCOMING, /**< Call is in incoming state */ - TAPI_CALL_STATE_WAITING, /**< Call is in answered state, and waiting for connected indication event */ - TAPI_CALL_STATE_MAX + TAPI_CALL_STATE_IDLE, /**< Call is in the idle state - i.e. no call */ + TAPI_CALL_STATE_ACTIVE, /**< Call is in the connected and conversation state */ + TAPI_CALL_STATE_HELD, /**< Call is in the held state */ + TAPI_CALL_STATE_DIALING, /**< Call is in the dialing state */ + TAPI_CALL_STATE_ALERT, /**< Call is in the alerting state */ + TAPI_CALL_STATE_INCOMING, /**< Call is in the incoming state */ + TAPI_CALL_STATE_WAITING, /**< Call is in the answered state, and waiting for connected indication event */ + TAPI_CALL_STATE_MAX /**< Call state unknown */ } TelCallStates_t; /** - * IN GSM ONLY: call identification number. + * @brief IN GSM ONLY: call identification number. + * @since_tizen 2.3 */ typedef enum { TAPI_CALL_ACTIVE_LINE1, /**< Line 1 */ @@ -357,59 +416,54 @@ typedef enum { } TelCallUusType_t; /** - * The Incoming call indication could have be one of the following SS info messages in it. + * @brief Enumeration for SS info messages of an incoming call indication. + * @since_tizen 2.3 */ typedef enum { - /* Number details are present in the "char number" of call info struct. if number is not present - then "no cli cause" member in mt_ss_info is set accordingly. */ - TAPI_CALL_MT_CLI_PRESENT = 0x31, - - /* Calling Name Info presnet, TelCallingNameInfo_t of call info struct contains this info. */ - TAPI_CALL_MT_CNA_PRESENT = 0x32, - - /* Undefined ss indication. Ignore mt_ss_info */ - TAPI_CALL_MT_SS_UNDEFINED = 0x00, + TAPI_CALL_MT_CLI_PRESENT = 0x31, /**< Number details are present in the "char number" of the call info struct. If the number is not present then the "no cli cause" member in mt_ss_info is set accordingly */ + TAPI_CALL_MT_CNA_PRESENT = 0x32, /**< Calling Name Info present, #TelCallingNameInfo_t of the call info struct contains this info */ + TAPI_CALL_MT_SS_UNDEFINED = 0x00, /**< Undefined SS indication. Ignore mt_ss_info */ } TelCallMtSSInfo_t; /** - * @enum TelCallAnswerType_t - * Answer type used as in parameter in the answer call API. + * @brief Enumeration for the answer type used as a parameter in the answer call API. + * @since_tizen 2.3 */ typedef enum { - TAPI_CALL_ANSWER_ACCEPT = 0, /**< Used to answer an incoming call when there are no current active calls. */ + TAPI_CALL_ANSWER_ACCEPT = 0, /**< Used to answer an incoming call when there are no current active calls */ TAPI_CALL_ANSWER_REJECT, /**< Used to reject the incoming call */ - TAPI_CALL_ANSWER_REPLACE, /**< Release current active call and accept the */ - TAPI_CALL_ANSWER_HOLD_AND_ACCEPT, /**< Hold the current active call, and accept the wating call */ + TAPI_CALL_ANSWER_REPLACE, /**< Release current active call and accept the waiting call */ + TAPI_CALL_ANSWER_HOLD_AND_ACCEPT, /**< Hold the current active call, and accept the waiting call */ } TelCallAnswerType_t; /** - * @enum TelCallEndType_t - * End type used as in parameter in the end call API. + * @brief Enumeration for the end type used as a parameter in the end call API. + * @since_tizen 2.3 */ typedef enum { - TAPI_CALL_END = 0, - TAPI_CALL_END_ALL, - TAPI_CALL_END_ACTIVE_ALL, - TAPI_CALL_END_HOLD_ALL, + TAPI_CALL_END = 0, /**< End Specific Call */ + TAPI_CALL_END_ALL, /**< End All Calls */ + TAPI_CALL_END_ACTIVE_ALL, /**< End All Active Calls */ + TAPI_CALL_END_HOLD_ALL, /**< End All Held Calls */ } TelCallEndType_t; /** - * @enum TelCallType_t - * Applications needs to use this call type while using the setup call API. Like the requested call is a voice call or video call. + * @brief Enumeration for call type to be used by applications while using the setup call API. Like the requested call is a voice call or video call. + * @since_tizen 2.3 */ typedef enum { - TAPI_CALL_TYPE_VOICE, /**< Voice call type. */// in ipcv4, 0x0100 - TAPI_CALL_TYPE_DATA, /**< Data call type - (for modem, fax, packet, etc. calls). */// in ipcv4, 0x0200 - TAPI_CALL_TYPE_E911 /**< Emergency call type. */// in ipcv4, 0x0700 + TAPI_CALL_TYPE_VOICE, /**< Voice call type */// in ipcv4, 0x0100 + TAPI_CALL_TYPE_DATA, /**< Data call type - (for modem, fax, packet, and other such calls) */// in ipcv4, 0x0200 + TAPI_CALL_TYPE_E911 /**< Emergency call type */// in ipcv4, 0x0700 } TelCallType_t; /** - * @enum TelCallAlertingPattern_t - * This enumeration defines the different alerting patterns available. + * @brief Enumeration for the various alerting patterns available. + * @since_tizen 2.3 */ typedef enum { TAPI_CALL_ALERTING_PATTERN_1 = 0x00, /**< Pattern 1 */ @@ -424,140 +478,198 @@ typedef enum { } TelCallAlertingPattern_t; /** - * @enum TelCallActiveState_t - * State of the current call. + * @brief Enumeration for state of the current call. + * @since_tizen 2.3 */ typedef enum { - TAPI_CALL_CONNECT_IDLE, /**< Call is in Idle state. */ - TAPI_CALL_CONNECT_ACTIVE, /**< Call is in Active state.*/ - TAPI_CALL_CONNECT_HELD /**< Call is in Held state. */ + TAPI_CALL_CONNECT_IDLE, /**< Call is in the Idle state */ + TAPI_CALL_CONNECT_ACTIVE, /**< Call is in the Active state */ + TAPI_CALL_CONNECT_HELD /**< Call is in the Held state */ } TelCallActiveState_t; /** - * @enum TelCallCugOptions_t - * This enumeration defines the closed user group options + * @brief Enumeration for closed user group options. + * @since_tizen 2.3 */ typedef enum { TAPI_CALL_CUG_NO_INFO = 0x00, /**< No information */ - TAPI_CALL_CUG_SUPRESS_OA, /**< suppress OA */ - TAPI_CALL_CUG_SUPRESS_PRF_CUG, /**< suppress preferential CUG */ - TAPI_CALL_CUG_SUPRESS_OA_AND_CUG /**< suppress OA and preferential CUG */ + TAPI_CALL_CUG_SUPRESS_OA, /**< Suppress OA */ + TAPI_CALL_CUG_SUPRESS_PRF_CUG, /**< Suppress preferential CUG */ + TAPI_CALL_CUG_SUPRESS_OA_AND_CUG /**< Suppress OA and preferential CUG */ } TelCallCugOptions_t; /** - * @enum TelCallUusProtocolType_t - * This enumeration defines the tapi call uus protocol types + * @brief Enumeration for tapi call UUS protocol types. + * @since_tizen 2.3 */ typedef enum { - TAPI_CALL_UUS_PROTO_SPECIFIC = 0, /**< The user information is structured according to user needs. */ + TAPI_CALL_UUS_PROTO_SPECIFIC = 0, /**< The user information is structured according to user needs */ TAPI_CALL_UUS_PROTO_OSI_HIGHER_LAYER = 1, /**< OSI high layer protocols */ - TAPI_CALL_UUS_PROTO_IA5_CHARS = 4, /**< user information consists of IA5 characters */ - TAPI_CALL_UUS_PROTO_V120 = 7, /**< rate adaptation */ - TAPI_CALL_UUS_PROTO_Q931 = 8 /**< user-network call control messages */ + TAPI_CALL_UUS_PROTO_IA5_CHARS = 4, /**< User information consists of IA5 characters */ + TAPI_CALL_UUS_PROTO_V120 = 7, /**< Rate adaptation */ + TAPI_CALL_UUS_PROTO_Q931 = 8 /**< User-network call control messages */ } TelCallUusProtocolType_t; /** - * @enum TelCallNameMode_t - * This enumeration defines the call name mode + * @brief Enumeration for the call name mode. + * @since_tizen 2.3 */ typedef enum { - TAPI_CALL_NAME_AVAIL = 0, /**< This identifier refers to the presentation of the calling party's name identity to the called party. */ - TAPI_CALL_NAME_RESTRICTED = 1, /**< This identifier refers to the restriction of presentation of the name identity of the calling party to the called party. */ - TAPI_CALL_NAME_UNAVAIL = 2, /**< This identifier refers to the unavailability of the calling party's name identity to be offered to the called party. */ - TAPI_CALL_NAME_AVAIL_RESTRICTED = 3 /**< This identifier refers to the calling party's name identity to be offered to the called party with which presentation restriction is overridden. */ + TAPI_CALL_NAME_AVAIL = 0, /**< This identifier refers to presenting the calling party's name identity to the called party */ + TAPI_CALL_NAME_RESTRICTED = 1, /**< This identifier refers to restricting the name identity of the calling party from being presented to the called party */ + TAPI_CALL_NAME_UNAVAIL = 2, /**< This identifier refers to the unavailability of the calling party's name identity from being offered to the called party */ + TAPI_CALL_NAME_AVAIL_RESTRICTED = 3 /**< This identifier refers to offering the calling party's name identity to the called party with which the presentation restriction is overridden */ } TelCallNameMode_t; /** - * @enum TelCallSSNocliCause_t - * This enumeration defines the value for "No Cli cause". + * @brief Enumeration for the "No Cli cause" value. + * @since_tizen 2.3 + */ +typedef enum { + TAPI_CALL_NO_CLI_CAUSE_NONE = -1, /**< None */ + TAPI_CALL_NO_CLI_CAUSE_UNAVAILABLE = 0x00, /**< Unavailable */ + TAPI_CALL_NO_CLI_CAUSE_REJECTBY_USER = 0x01, /**< Rejected by User */ + TAPI_CALL_NO_CLI_CAUSE_INTERACTION_OTHERSERVICES = 0x02, /**< Other services */ + TAPI_CALL_NO_CLI_CAUSE_COINLINE_PAYPHONE = 0x03, /**< Coin line phone */ +} TelCallNoCliCause_t; + +/** + * @brief Enumeration for the "Cli mode" value. + * @since_tizen 2.3 */ typedef enum { - TAPI_SS_NO_CLI_CAUSE_UNAVAILABLE = 0x00, /**< Unavailable */ - TAPI_SS_NO_CLI_CAUSE_REJECTBY_USER = 0x01, /**< Rejected by User */ - TAPI_SS_NO_CLI_CAUSE_INTERACTION_OTHERSERVICES = 0x02, /**< Other services */ - TAPI_SS_NO_CLI_CAUSE_COINLINE_PAYPHONE = 0x03, /**< Coin line phone */ - TAPI_SS_NO_CLI_CAUSE_MAX /**< maximum usage */ -} TelCallSSNocliCause_t; + TAPI_CALL_PRES_AVAIL, /**< Presentation Allowed */ + TAPI_CALL_PRES_RESTRICTED, /**< Presentation Restricted */ + TAPI_CALL_NUM_UNAVAIL, /**< Number Not Available */ +}TelCallCliMode_t; /** - * Fwded Ind Type used for MO and Mt from SS Noti Info + * @brief Enumeration for the the fwded ind type used for MO and Mt from SS Noti Info. + * @since_tizen 2.3 */ typedef enum { - TAPI_CALL_OUTGOING_FWDED = 0x00, /* Outgoing call forwarded */ - TAPI_CALL_INCOMMING_FWDED = 0x01, /* Incoming call forwarded */ + TAPI_CALL_OUTGOING_FWDED = 0x00, /**< Outgoing call forwarded */ + TAPI_CALL_INCOMMING_FWDED = 0x01, /**< Incoming call forwarded */ } TelCallForwardType_t; /** - * @enum TelCallPrivacyMode_t - * This structure contains the voice privacy option mode(CDMA only). + * @brief Enumeration for the voice privacy option mode. (CDMA only) + * @since_tizen 2.3 */ typedef enum { TAPI_CALL_PRIVACY_MODE_STANDARD = 0x00, /**< Standard mode */ - TAPI_CALL_PRIVACY_MODE_ENHANCED /**< Enhanced mode */ + TAPI_CALL_PRIVACY_MODE_ENHANCED /**< Enhanced mode */ } TelCallPrivacyMode_t; /** - * @enum TelCallPrivacyType_t - * This structure contains the voice privacy request type(CDMA only). + * @brief Enumeration for the OTASP Status. (CDMA only) + * @since_tizen 2.3 + */ +typedef enum { + TAPI_CALL_OTASP_OK_SPL_UNLOCKED = 0x01, /**< OTASP : SPL unlocked ok */ + TAPI_CALL_OTASP_OK_AKEY_EXCESS, /**< OTASP : A-Key excess ok */ + TAPI_CALL_OTASP_OK_SSD_UPDATE, /**< OTASP : SSD update ok */ + TAPI_CALL_OTASP_OK_NAM_DWNLD, /**< OTASP : NAM download ok */ + TAPI_CALL_OTASP_OK_MDN_DWNLD, /**< OTASP : MDN download ok */ + TAPI_CALL_OTASP_OK_IMSI_DWNLD, /**< OTASP : IMSI download ok */ + TAPI_CALL_OTASP_OK_PRL_DWNLD, /**< OTASP : PRL download ok */ + TAPI_CALL_OTASP_OK_COMMIT, /**< OTASP : commit ok */ + TAPI_CALL_OTASP_OK_PROGRAMMING, /**< OTASP : programming ok */ + TAPI_CALL_OTASP_SUCCESS, /**< OTASP : success */ + TAPI_CALL_OTASP_UNSUCCESS, /**< OTASP : unsuccess */ + TAPI_CALL_OTASP_OK_OTAPA_VERIFY, /**< OTASP : verify ok */ + TAPI_CALL_OTASP_PROGRESS, /**< OTASP : progress */ + TAPI_CALL_OTASP_FAILURES_EXCESS_SPC, /**< OTASP : SPC excess failure */ + TAPI_CALL_OTASP_LOCK_CODE_PW_SET, /**< OTASP : lock code password set */ +} TelCallOtaspStatus_t; + +/** + * @brief Enumeration for the OTAPA Status. (CDMA only) + * @since_tizen 2.3 */ typedef enum { - TAPI_CALL_PRIVACY_TYPE_MS = 0x01, /**< Mobile Station Voice Privacy Mode */ - TAPI_CALL_PRIVACY_TYPE_BS, /**< Base Station Voice Privacy Mode */ - TAPI_CALL_PRIVACY_TYPE_CURRENT /**< Current Serving Privacy Mode */ -} TelCallPrivacyType_t; + TAPI_CALL_OTAPA_STOP = 0x00, /**< OTAPA : stop */ + TAPI_CALL_OTAPA_START, /**< OTAPA : start */ +} TelCallOtapaStatus_t; /** - * @enum TelCallEmergecyMode_t - * This structure contains the emergency callback mode(CDMA only). + * @brief Enumeration for the Alert Signal Type. (CDMA only) + * @since_tizen 2.3 */ typedef enum { - TAPI_CALL_EMERGENCY_MODE_EXIT, /**< Emergency CB Exit mode */ - TAPI_CALL_EMERGENCY_MODE_ENTER /**< Emergency CB Enter mode */ -} TelCallEmergecyMode_t; + TAPI_CALL_SIGNAL_TYPE_TONE = 0x00, + TAPI_CALL_SIGNAL_TYPE_ISDN_ALERTING, + TAPI_CALL_SIGNAL_TYPE_IS54B_ALERTING, + TAPI_CALL_SIGNAL_TYPE_RESERVED +} TelCallAlertSignalType_t; /** - * @enum TelCallOtaType_t - * This structure contains the OTA type(CDMA only). + * @brief Enumeration for the Alert Pitch Type. (CDMA only) + * @since_tizen 2.3 */ typedef enum { - TAPI_CALL_OTATYPE_OTASP = 0x01, /**< OTASP : mobile initiated OTA*/ - TAPI_CALL_OTATYPE_OTAPA, /**< OTAPA : network initiated OTA */ -} TelCallOtaType_t; + TAPI_CALL_ALERT_PITCH_MED = 0x00, + TAPI_CALL_ALERT_PITCH_HIGH, + TAPI_CALL_ALERT_PITCH_LOW, + TAPI_CALL_ALERT_PITCH_RESERVED +} TelCallAlertPitchType_t; /** - * @enum TelCallOtaspStatus_t - * This structure contains the OTASP Status(CDMA only). + * @brief Enumeration for the signals specific to the alert signal type TAPI_CALL_SIGNAL_TYPE_TONE. (CDMA only) + * @since_tizen 2.3 */ typedef enum { - TAPI_CALL_OTASP_OK_SPL_UNLOCKED = 0x01, /**< OTASP : SPL unlocked ok*/ - TAPI_CALL_OTASP_OK_AKEY_EXCESS, /**< OTASP : A-Key excess ok*/ - TAPI_CALL_OTASP_OK_SSD_UPDATE, /**< OTASP : SSD update ok */ - TAPI_CALL_OTASP_OK_NAM_DWNLD, /**< OTASP : NAM download ok */ - TAPI_CALL_OTASP_OK_MDN_DWNLD, /**< OTASP : MDN download ok */ - TAPI_CALL_OTASP_OK_IMSI_DWNLD, /**< OTASP : IMSI download ok*/ - TAPI_CALL_OTASP_OK_PRL_DWNLD, /**< OTASP : PRL download ok */ - TAPI_CALL_OTASP_OK_COMMIT, /**< OTASP : commit ok */ - TAPI_CALL_OTASP_OK_PROGRAMMING, /**< OTASP : programming ok */ - TAPI_CALL_OTASP_SUCCESS, /**< OTASP : success */ - TAPI_CALL_OTASP_UNSUCCESS, /**< OTASP : unsuccess */ - TAPI_CALL_OTASP_OK_OTAPA_VERIFY, /**< OTASP : verify ok */ - TAPI_CALL_OTASP_PROGRESS, /**< OTASP : progress */ - TAPI_CALL_OTASP_FAILURES_EXCESS_SPC, /**< OTASP : SPC excess failure */ - TAPI_CALL_OTASP_LOCK_CODE_PW_SET, /**< OTASP : lock code password set*/ -} TelCallOtaspStatus_t; + TAPI_CALL_SIGNAL_TONE_DIAL = 0x00, + TAPI_CALL_SIGNAL_TONE_RINGBACK_TONE_ON, + TAPI_CALL_SIGNAL_TONE_INTERCEPT_TONE_ON, + TAPI_CALL_SIGNAL_TONE_ABBREV_TONE, + TAPI_CALL_SIGNAL_TONE_NETWORK_CONGESTION_TONE_ON, + TAPI_CALL_SIGNAL_TONE_ABBREV_NETWORK_CONGESTION, + TAPI_CALL_SIGNAL_TONE_BUSY_TONE_ON, + TAPI_CALL_SIGNAL_TONE_CFRM_TONE_ON, + TAPI_CALL_SIGNAL_TONE_ANSWER_TONE_ON, + TAPI_CALL_SIGNAL_TONE_CALL_WAITING_TONE_ON, + TAPI_CALL_SINGNAL_TONE_PIPE_TONE_ON, + TAPI_CALL_SIGNAL_TONE_OFF +} TelCallToneSignal_t; /** - * @enum TelCallOtapaStatus_t - * This structure contains the OTAPA Status(CDMA only). + * @brief Enumeration for the signals specific to the alert signal type TAPI_CALL_SIGNAL_TYPE_ISDN_ALERTING. (CDMA only) */ typedef enum { - TAPI_CALL_OTAPA_STOP = 0x00, /**< OTAPA : stop */ - TAPI_CALL_OTAPA_START, /**< OTAPA : start */ -} TelCallOtapaStatus_t; + TAPI_CALL_SIGNAL_ISDN_ALERT_NORMAL = 0x00, + TAPI_CALL_SIGNAL_ISDN_ALERT_INTER_GROUP, + TAPI_CALL_SIGNAL_ISDN_ALERT_SPECIAL_PRIORITY, + TAPI_CALL_SIGNAL_ISDN_ALERT_ISDN_RESERVED1, + TAPI_CALL_SIGNAL_ISDN_ALERT_PING_RING, + TAPI_CALL_SIGNAL_ISDN_ALERT_ISDN_RESERVED2, + TAPI_CALL_SIGNAL_ISDN_ALERT_ISDN_RESERVED3, + TAPI_CALL_SIGNAL_ISDN_ALERT_ISDN_RESERVED4, + TAPI_CALL_SIGNAL_ISDN_ALERT_OFF +} TelCallIsdnAlertSignal_t; /** - * @enum TelCallTimeMaskType_t - * This structure contains call time request mask type. + * @brief Enumeration for the signals specific to the alert signal type TAPI_CALL_SIGNAL_TYPE_IS54B_ALERTING. (CDMA only) + */ +typedef enum { + TAPI_CALL_SIGNAL_IS54B_ALERT_NOTONE = 0x00, + TAPI_CALL_SIGNAL_IS54B_ALERT_LONG, + TAPI_CALL_SIGNAL_IS54B_ALERT_SHORT_SHORT, + TAPI_CALL_SIGNAL_IS54B_ALERT_SHORT_SHORT_LONG, + TAPI_CALL_SIGNAL_IS54B_ALERT_SHORT_SHORT_2, + TAPI_CALL_SIGNAL_IS54B_ALERT_SHORT_LONG_SHORT, + TAPI_CALL_SIGNAL_IS54B_ALERT_SHORT_SHORT_SHORT_SHORT, + TAPI_CALL_SIGNAL_IS54B_ALERT_PBX_LONG, + TAPI_CALL_SIGNAL_IS54B_ALERT_PBX_SHORT_SHORT, + TAPI_CALL_SIGNAL_IS54B_ALERT_PBX_SHORT_SHORT_LONG, + TAPI_CALL_SIGNAL_IS54B_ALERT_PBX_SHORT_LONG_SHORT, + TAPI_CALL_SIGNAL_IS54B_ALERT_PBX_SHORT_SHORT_SHORT_SHORT, + TAPI_CALL_SIGNAL_IS54B_ALERT_PIP_PIP_PIP_PIP +} TelCallIs54bAlertSignal_t; + +/** + * @brief Enumeration for the call time request mask type. + * @since_tizen 2.3 */ typedef enum { TAPI_CALL_TIME_TYPE_TOTAL_CALL_CNT = 0x01, /**< Total Call Count Mask */ @@ -566,111 +678,170 @@ typedef enum { } TelCallTimeMaskType_t; /** - * @enum TelCallToneDuration_t - * This structure contains dtmf tone length. + * @brief Enumeration for the DTMF tone length. + * @since_tizen 2.3 */ typedef enum { - TAPI_CALL_TONE_DURATION_SHORT = 0x01, - TAPI_CALL_TONE_DURATION_LONG + TAPI_CALL_TONE_DURATION_SHORT = 0x01, /**< Tone Duration Short */ + TAPI_CALL_TONE_DURATION_LONG /**< Tone Duration Long */ } TelCallToneDuration_t; /** - * @enum TelCallEmergencyCategory_t - * This structure contains emergency category type + * @brief Enumeration for the emergency category type. + * @since_tizen 2.3 */ typedef enum { - TAPI_CALL_ECC_DEFAULT = 0x00, - TAPI_CALL_ECC_POLICE = 0x01, - TAPI_CALL_ECC_AMBULANCE = 0x02, - TAPI_CALL_ECC_FIREBRIGADE = 0x04, - TAPI_CALL_ECC_MARINEGUARD = 0x08, - TAPI_CALL_ECC_MOUNTAINRESCUE = 0x10, - TAPI_CALL_ECC_MANUAL_ECALL = 0x20, - TAPI_CALL_ECCY_AUTO_ECALL = 0x40 + TAPI_CALL_ECC_DEFAULT = 0x00, /**< Default case */ + TAPI_CALL_ECC_POLICE = 0x01, /**< Police emergency */ + TAPI_CALL_ECC_AMBULANCE = 0x02, /**< Ambulance emergency */ + TAPI_CALL_ECC_FIREBRIGADE = 0x04, /**< Firebrigade emergency */ + TAPI_CALL_ECC_MARINEGUARD = 0x08, /**< Marineguard emergency */ + TAPI_CALL_ECC_MOUNTAINRESCUE = 0x10, /**< Mountain rescue emergency */ + TAPI_CALL_ECC_MANUAL_ECALL = 0x20, /**< Manual emergency call */ + TAPI_CALL_ECC_AUTO_ECALL = 0x40, /**< Automatic emergency call */ + TAPI_CALL_ECC_NONE = 0xff, /**< Unspecified emergency */ } TelCallEmergencyCategory_t; typedef enum { - TAPI_CALL_IDENTITY_DEFAULT, /**< Calling line identity will be sent. Based on network setting, Line identity will presented to the called party. */ - TAPI_CALL_IDENTITY_SHOW, /**< Display calling line identity */ - TAPI_CALL_IDENTITY_HIDE /**< Hide the display of Calling line identity */ + TAPI_CALL_IDENTITY_DEFAULT, /**< Calling line identity will be sent. Based on the network setting, the line identity will be presented to the called party */ + TAPI_CALL_IDENTITY_SHOW, /**< Display the calling line identity */ + TAPI_CALL_IDENTITY_HIDE /**< Hide the display of the calling line identity */ } TelCallIdentityMode_t; - /** - * context type + * @brief Enumeration for the context type. + * @since_tizen 2.3 */ typedef enum { - TAPI_CONTEXT_TYPE_NONE = 0x00, - TAPI_CONTEXT_TYPE_VOICE_CALL = 0x01, - TAPI_CONTEXT_TYPE_DATA_CALL = 0x2, - TAPI_CONTEXT_TYPE_VIDEO_CALL = 0x3, - TAPI_CONTEXT_TYPE_NETTEXT, - TAPI_CONTEXT_TYPE_E911, + TAPI_CONTEXT_TYPE_NONE = 0x00, /**< Unspecified context */ + TAPI_CONTEXT_TYPE_VOICE_CALL = 0x01, /**< Voice call context */ + TAPI_CONTEXT_TYPE_DATA_CALL = 0x2, /**< Data call context */ + TAPI_CONTEXT_TYPE_VIDEO_CALL = 0x3, /**< Video call context */ + TAPI_CONTEXT_TYPE_NETTEXT, /**< Network text context */ + TAPI_CONTEXT_TYPE_E911, /**< Emergency context */ } TapiContextType; - /** - * Timer State and or Call Timer ID + * @brief Enumeration for the timer state and/or call timer ID. + * @since_tizen 2.3 */ typedef enum { TAPI_CALL_TSTATE_IDLE = 0x00, /**< No timer running */ - TAPI_CALL_TSTATE_SETUP_PENDING, /**< Setup Timer */ - TAPI_CALL_TSTATE_CONNECT_PENDING, /**< Connected Timer */ + TAPI_CALL_TSTATE_SETUP_PENDING, /**< Setup Timer */ + TAPI_CALL_TSTATE_CONNECT_PENDING, /**< Connect Timer */ TAPI_CALL_TSTATE_END_PENDING, /**< Release Timer */ TAPI_CALL_TSTATE_HOLD_PENDING, /**< Hold Timer */ TAPI_CALL_TSTATE_RETRIEVE_PENDING, /**< Retrieve Timer */ TAPI_CALL_TSTATE_JOIN_PENDING, /**< Join Timer */ - TAPI_CALL_TSTATE_SPLIT_PENDING, /**< Split Timer */ + TAPI_CALL_TSTATE_SPLIT_PENDING, /**< Split Timer */ TAPI_CALL_TSTATE_ECT_PENDING, /**< ECT Timer */ TAPI_CALL_TSTATE_DTMF_PENDING, /**< DTMF Timer */ } TelTapiCallTimerState; +/** + * @brief Enumeration for the offlength to send DTMF. + * @since_tizen 2.3 + */ +typedef enum { + TAPI_CALL_DTMF_OFFLENGTH_60MS, + TAPI_CALL_DTMF_OFFLENGTH_100MS, + TAPI_CALL_DTMF_OFFLENGTH_150MS, + TAPI_CALL_DTMF_OFFLENGTH_200MS, +} TelCallDtmfInterDigitInterval_t; + +/** + * @brief Enumeration for the onlength to send DTMF. + * @since_tizen 2.3 + */ +typedef enum { + TAPI_CALL_DTMF_ONLENGTH_95MS, + TAPI_CALL_DTMF_ONLENGTH_150MS, + TAPI_CALL_DTMF_ONLENGTH_200MS, + TAPI_CALL_DTMF_ONLENGTH_250MS, + TAPI_CALL_DTMF_ONLENGTH_300MS, + TAPI_CALL_DTMF_ONLENGTH_350MS, + TAPI_CALL_DTMF_ONLENGTH_SMS +}TelCallDtmfPulseWidth_t; + +/** + * @brief Enumeration for the Call Record Info Type + * @since_tizen 2.3 + */ +typedef enum { + TAPI_CALL_REC_INFO_TYPE_NAME, + TAPI_CALL_REC_INFO_TYPE_NUMBER, +}TelCallRecordInfoType_t; + +/** + * @brief TelCallPreferredVoiceSubs_t + * This enumeration defines possible 'preferred' Voice Subscriptions + * @since_tizen 2.3 + */ +typedef enum { + TAPI_CALL_PREFERRED_VOICE_SUBS_UNKNOWN = -1, /**< Unknown status **/ + TAPI_CALL_PREFERRED_VOICE_SUBS_CURRENT_NETWORK = 0, /**< Current network **/ + TAPI_CALL_PREFERRED_VOICE_SUBS_ASK_ALWAYS, /**< ASK Always **/ + TAPI_CALL_PREFERRED_VOICE_SUBS_SIM1, /**< SIM 1 **/ + TAPI_CALL_PREFERRED_VOICE_SUBS_SIM2 /**< SIM 2 **/ +} TelCallPreferredVoiceSubs_t; + + typedef struct { - TS_BOOL bRequestedBySAT; /** This flag is to indicate whether the request has been initiated by SAT or not.Possible values are 0 and 1. This flag should be updated only when originating a setup request */ - TelCallIdentityMode_t IdentityMode; /**< Sets Calling Line Identity mode. If default value TAPI_IDENTITY_DEFAULT is set, OEM will set the default value. */ + int bRequestedBySAT; /**< This flag is to indicate whether the request has been initiated by SAT. Possible values are @c 0 and @c 1. This flag should be updated only when initiating a setup request */ + TelCallIdentityMode_t IdentityMode; /**< Sets the Calling Line Identity mode. If the default value #TAPI_IDENTITY_DEFAULT is set, OEM will set the default value */ TelCallEmergencyCategory_t ecc; } tel_set_call_satflag_identiymode; /** - * This structure contains information about the redirect destination information. + * @brief The structure type to redirect destination information. + * @since_tizen 2.3 */ typedef struct { unsigned char number[TAPI_CALL_DIAL_NUMBER_LEN_MAX + 1]; /**< Redirect destination number */ } TelCallDeflectDstInfo_t; /** - * This structure defines the calling name information + * @brief The structure type for calling name information. + * @since_tizen 2.3 */ typedef struct { - TelCallNameMode_t NameMode; /**< Display mode of the szNameData. */ - char szNameData[TAPI_CALLING_NAME_SIZE_MAX]; /**< Calling party name string. */ + TelCallNameMode_t NameMode; /**< Display mode of @a szNameData */ + char szNameData[TAPI_CALLING_NAME_SIZE_MAX]; /**< Calling party name string */ } TelCallingNameInfo_t; /** - * This structure contains information about an outgoing call. + * @brief The structure type for information about an outgoing call. + * @since_tizen 2.3 */ typedef struct { - TelCallType_t CallType; /**< sets type of call (voice, data, video, emergency) */ - char szNumber[TAPI_CALL_DIALDIGIT_LEN_MAX + 1]; /**< A string containing the destination phone number. This follows the dial number format.*/ + TelCallType_t CallType; /**< Sets type of call (voice, data, video, emergency) */ + TelCallEmergencyCategory_t Ecc; + char szNumber[TAPI_CALL_DIALDIGIT_LEN_MAX + 1]; /**< A string containing the destination phone number. This follows the dial number format */ } TelCallDial_t; /** - * This structure contains information about call status. + * @brief The structure type for information about call status. + * @since_tizen 2.3 */ typedef struct { int CallHandle; - int bMoCall; /**< Status will be yes for MO Call. If MT call, then FALSE*/ + int bMoCall; /**< Status will be yes for MO Calls. If MT call, then FALSE */ char pNumber[TAPI_CALL_DIALDIGIT_LEN_MAX + 1]; /**< Mobile Number */ - TelCallType_t CallType; /**< Specifies type of call (voice, data, emergency) */ + TelCallType_t CallType; /**< Type of call (voice, data, emergency) */ TelCallStates_t CallState; /**< Current Call state */ - int bConferenceState; /**< Whether Call is in Conference or not*/ + int bConferenceState; /**< Whether Call is in Conference */ } TelCallStatus_t; +/** + * @brief Called to get the call status. + * @since_tizen 2.3 + */ typedef void (*TelCallStatusCallback)( TelCallStatus_t *out, void *user_data ); /** - * This structure contains information about call redirection details. + * @brief The structure type for information about call redirection details. + * @since_tizen 2.3 */ typedef struct { char szRedirectedNumber[TAPI_CALL_DIALDIGIT_LEN_MAX + 1]; /**< Redirected party number */ @@ -678,337 +849,370 @@ typedef struct { } TelCallRedirectionInfo_t; /** - * This structure contains the incoming call information. + * @brief The structure type for incoming call information. + * @since_tizen 2.3 */ typedef struct { - unsigned int CallHandle; /**< At Foundation API Level, Call handle indicates the Handle of the Call for the Application . At Framework API Level, call handle indicates the Call identifier used for call by the OEM Adaptation Layer Plug-in */ - TelCallType_t CallType; /**< Call type */ + unsigned int CallHandle; /**< At the Foundation API Level, call handle indicates the handle of the call for the application. At the Framework API Level, call handle indicates the call identifier used for a call by the OEM Adaptation Layer Plug-in */ + TelCallType_t CallType; /**< Call type */ TelSsLineIdentificationType_t CliPresentationIndicator; /**< Calling Party presentation indicator */ - char szCallingPartyNumber[TAPI_CALL_DIALDIGIT_LEN_MAX + 1]; /**< caller number,null terminated ASCII */ - TelCallingNameInfo_t CallingNameInfo; /**< Call name info. If there is no information from network, this information will be NULL.*/ - TelCallRedirectionInfo_t RedirectInfo; /**< The data for the Call Redirect information. If there is no information from network, this information will be NULL. */ - TelCallSSNocliCause_t CliCause; /**< No of CLI cause */ - int fwded; /**< True or false. If Incoming call is a forwarded call, then true else false. */ - TelCallActiveLine_t ActiveLine; /**< Current Active Line */ + char szCallingPartyNumber[TAPI_CALL_DIALDIGIT_LEN_MAX + 1]; /**< Caller number, null terminated ASCII */ + TelCallingNameInfo_t CallingNameInfo; /**< Call name info. If there is no information from the network, this information will be @c NULL */ + TelCallRedirectionInfo_t RedirectInfo; /**< The data for the Call Redirect information. If there is no information from the network, this information will be @c NULL */ + TelCallCliMode_t CliMode; /**< CLI mode */ + TelCallNoCliCause_t CliCause; /**< No CLI cause */ + int fwded; /**< True or false. If the incoming call is a forwarded call, then @c true else @c false */ + TelCallActiveLine_t ActiveLine; /**< Current Active Line */ } TelCallIncomingCallInfo_t; /** - *SS Info message. + * @brief The structure type for SS Info message. + * @since_tizen 2.3 */ typedef struct { - TelCallMtSSInfo_t type; /* Type of the SS Info presnet. */ - TelCallSSNocliCause_t no_cli_cause; + TelCallMtSSInfo_t type; /**< Type of SS Info present */ + TelCallCliMode_t CliMode; /**< CLI mode */ + TelCallNoCliCause_t no_cli_cause; /**< TBD */ } TelCallMtSsInfo_t; // not used typedef struct { - int isMobileOriginated; /* Is this call Mobile Originated? */ - TelCallNameMode_t nameMode; /* Calling Party Name availability mode */ - char callNumber[TAPI_CALL_DIALDIGIT_LEN_MAX + 1]; /* A character array of the destination address. This follows the dial callNumber format. */ - unsigned int startTime; /* Time when a call is started */ - unsigned int endTime; /* Time when a call is ended */ - TelCallType_t callType; /* Type of a call */ - TelCallStates_t callState; /* State of a call */ - TelCallActiveState_t activeState; /* Status of a call */ - TelConferenceCallState_t conferenceState; /* State of a conference call */ - TelCallingNameInfo_t callingNameInfo; /* Calling name information of a call */ - TelCallActiveLine_t current_line; /* Line information of a call */ - TelCallCause_t cause; /* End type of a call when a call is ended */ - TelTapiEndCause_t endCause; /* EndCause */ + int isMobileOriginated; /**< Is this call Mobile Originated? */ + TelCallNameMode_t nameMode; /**< Calling Party Name availability mode */ + char callNumber[TAPI_CALL_DIALDIGIT_LEN_MAX + 1]; /**< A character array of the destination address. This follows the dial @a callNumber format */ + unsigned int startTime; /**< Time when a call is started */ + unsigned int endTime; /**< Time when a call is ended */ + TelCallType_t callType; /**< Type of a call */ + TelCallStates_t callState; /**< State of a call */ + TelCallActiveState_t activeState; /**< Status of a call */ + TelConferenceCallState_t conferenceState; /**< State of a conference call */ + TelCallingNameInfo_t callingNameInfo; /**< Calling name information of a call */ + TelCallActiveLine_t current_line; /**< Line information of a call */ + TelCallCause_t cause; /**< End type of a call when a call is ended */ + TelTapiEndCause_t endCause; /**< End Cause */ } TelTapiCallInfo_t; /** - * This structure contains the connected number information. + * @brief The structure type for the connected number information. + * @since_tizen 2.3 */ typedef struct { - TelCallSSNocliCause_t no_cli_cause; /**< Cause when no CLI number. */ + TelCallCliMode_t CliMode; /**< CLI mode */ + TelCallNoCliCause_t no_cli_cause; /**< Cause when no CLI number */ unsigned char dcs; /**< DCS */ unsigned char number_type; /**< Number type */ - TelCallNameMode_t name_mode; /**< Display mode of the name. */ + TelCallNameMode_t name_mode; /**< Display mode of the name */ char number[TAPI_CALL_DIALDIGIT_LEN_MAX + 1]; /**< Caller number, null terminated ASCII */ char sub_address[TAPI_CALL_SUBADDRESS_LEN_MAX + 1]; /**< Called sub-address, null terminated ASCII */ } TelCallConnectedNumberInfo_t; /** - * This structure contains the voice privacy info(CDMA only). + * @brief The structure type for information about call time and call count. + * @since_tizen 2.3 */ typedef struct { - TelCallPrivacyType_t PrivacyType; /**< Voice Privacy Request Type */ - TelCallPrivacyMode_t PrivacyMode; /**< Voice Privacy Mode */ -} TelCallVoicePrivacyInfo_t; + unsigned short req_type_mask; /**< Call time request type */ + unsigned long TotalCallCnt; /**< Total Call Count */ + unsigned long OutgoingCallCnt; /**< Outgoing Call Count */ + unsigned long IncomingCallCnt; /**< Incoming Call Count */ + unsigned long TotalCallTime; /**< Overall Call Time(Outgoing + Incoming, in seconds) */ + unsigned long OutgoingCallTime; /**< Overall Outgoing Call Time(in seconds) */ + unsigned long IncomingCallTime; /**< Overall Incoming Call Time(in seconds) */ + unsigned long LastCallTime; /**< Last Call Time(in seconds) */ +} TelCallTimeInfo_t; /** - * This structure contains the OTA progress indication information(CDMA only). + * @brief The structure type for information about display record in CDMA. + * @since_tizen 2.3 */ typedef struct { - TelCallOtaType_t OtaType; /**< OTA type */ - TelCallOtaspStatus_t OtaspStatus; /**< OTASP status : if OTA type is OTASP, it is valid */ - TelCallOtapaStatus_t OtapaStatus; /**< OTAPA status : if OTA type is OTAPA, it is valid */ -} TelCallOtaProgressInfo_t; + unsigned char Record[TAPI_CALL_DISPLAY_RECORD_MAX + 1]; /**< Display record */ +} TelCallDisplayRecordInfo_t; /** - * This structure contains information about a call time and call count. + * @brief The structure type for information about burst DTMF in CDMA. + * @since_tizen 2.3 */ typedef struct { - unsigned short req_type_mask; /**< call time request type */ - unsigned long TotalCallCnt; /**< Total Call Count */ - unsigned long OutgoingCallCnt; /**< Outgoing Call Count */ - unsigned long IncomingCallCnt; /**< Incoming Call Count */ - unsigned long TotalCallTime; /**< Overall Call Time(Outgoing + Incoming, in second) */ - unsigned long OutgoingCallTime; /**< Overall Outgoing Call Time(in second) */ - unsigned long IncomingCallTime; /**< Overall Incoming Call Time(in second) */ - unsigned long LastCallTime; /**< Last Call Time(in second) */ -} TelCallTimeInfo_t; + char dtmf_string[TAPI_CALL_BURST_DTMF_STRING_MAX + 1]; /** Burst DTMF string NULL terminated */ + TelCallDtmfPulseWidth_t pulse_width; + TelCallDtmfInterDigitInterval_t inter_digit_interval; +} TelCallBurstDtmf_t; /** - * This structure contains information about display record in CDMA. + * @brief Structure type for the information about records in CDMA. + * @since_tizen 2.3 */ typedef struct { - unsigned char Record[TAPI_CALL_DISPLAY_RECORD_MAX + 1]; /**< display record */ -} TelCallDisplayRecordInfo_t; - -// New Struct for New API -typedef enum { - TAPI_SOUND_MUTE =0x00, /** - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @ingroup TelephonyAPI - * @addtogroup COMMON_TAPI COMMON - * @{ - * - * @file TelDefines.h - * @brief This file provides #defines required for Telephony server and TAPI Client Library - */ - -#ifndef _TEL_DEFINES_H_ -#define _TEL_DEFINES_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Machine independence */ -typedef long TS_INT32; -typedef unsigned long TS_UINT32; - -typedef int TS_INT; -typedef unsigned int TS_UINT; -typedef double TS_DOUBLE; - -typedef int TS_BOOL; - -/* Programming concept */ -typedef unsigned char TS_BYTE; -typedef unsigned short TS_WORD; -typedef unsigned long TS_DWORD; -typedef unsigned char TS_UINT8; -typedef char TS_INT8; -typedef unsigned short TS_UINT16; -typedef unsigned long TS_ULONG; -typedef unsigned long long TS_UINT64; -typedef unsigned short TS_USHORT; - -#ifndef TRUE -#define TRUE 1 -#endif - -#ifndef FALSE -#define FALSE 0 -#endif - -#ifndef DEPRECATED -#define DEPRECATED __attribute__((deprecated)) -#endif - -typedef int HObj; - -#ifdef __cplusplus -} -#endif - -#endif /* _TEL_DEFINES_H_ */ - -/** - * @} - */ diff --git a/include/TelDisplay.h b/include/TelDisplay.h deleted file mode 100644 index 82eeda1..0000000 --- a/include/TelDisplay.h +++ /dev/null @@ -1,200 +0,0 @@ -/* - * libslp-tapi - * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: Ja-young Gu - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @internal - * @ingroup TelephonyAPI - * @addtogroup DISPLAY_TAPI DISPLAY - * @{ - * - * These APIs allow an application to accomplish the following services: @n - * - Get the Display Icon Information. @n - */ - -#ifndef _TEL_DISPLAY_H_ -#define _TEL_DISPLAY_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define TAPI_MAX_DISP_O2_HOMEZONE_TAG_LEN 13 /** Maximum number of bytes Home Zone Tag name */ -#define TAPI_MAX_DISP_ROAM_INFO_LEN 49 /* Roaming location information Maximum length is 32 bytes, But, 49 bytes in Modem code*/ -#define TAPI_MAX_DISP_PHONE_FATAL_ERR_MSG_LEN 64 /* Phone fatal error message length */ - -/** - * This defines the RSSI levels. - * In GSM, this field represent the radio signal strength in dBm , but in the CDMA this field represents - * the number of the antenna bar as follows - */ -typedef enum { - TAPI_DISPLAY_RSSI_0 = 0x00, - TAPI_DISPLAY_RSSI_1 = 0x01, - TAPI_DISPLAY_RSSI_2 = 0x02, - TAPI_DISPLAY_RSSI_3 = 0x03, - TAPI_DISPLAY_RSSI_4 = 0x04, - TAPI_DISPLAY_RSSI_5 = 0x05, - TAPI_DISPLAY_RSSI_6 = 0x06 -} tapi_display_rssi_level_t; - -/** - * This enum defines the strength of the battery in levels - */ -typedef enum { - TAPI_POWER_PHONE_BATT_LEVEL0 = 0x00, /**< BLANK(Critical Low) */ - TAPI_POWER_PHONE_BATT_LEVEL1 = 0x01, /**< bar1 */ - TAPI_POWER_PHONE_BATT_LEVEL2 = 0x02, /**< bar2 */ - TAPI_POWER_PHONE_BATT_LEVEL3 = 0x03, /**< bar3 */ - TAPI_POWER_PHONE_BATT_LEVEL4 = 0x04, /**< bar4 */ - TAPI_POWER_PHONE_BATT_LEVEL5 = 0x05, /**< bar5 */ - TAPI_POWER_PHONE_BATT_LEVEL_INIT = 0x06 /**< init value */ -} tapi_phone_battery_level_t; - -/** - * Home Zone UI Icon Indiction Type - */ -typedef enum { - TAPI_DISPLAY_HMZ_O2_ZONE_INDI_NONE = 0x00, /**< None */ - TAPI_DISPLAY_HMZ_O2_ZONE_INDI_IND = 0x01, /**< Ind */ - TAPI_DISPLAY_HMZ_O2_ZONE_INDI_CLEAR = 0x02 /**< Clear */ -} tapi_display_hmz_02_zone_ind_t; - -/** - * Home Zone Type - */ -typedef enum { - TAPI_DISPLAY_HMZ_O2_ZONE_TYPE_NONE = 0x00, /**< None */ - TAPI_DISPLAY_HMZ_O2_ZONE_TYPE_HOME = 0x01, /**< Home Zone */ - TAPI_DISPLAY_HMZ_O2_ZONE_TYPE_CITY = 0x02 /**< City Zone */ -} tapi_display_hmz_02_zone_type_t; - -/** - * ZONE_TAG_PRESENT - */ -typedef enum { - TAPI_DISPLAY_HMZ_O2_ZONE_TAG_NONE = 0x00, /**< None */ - TAPI_DISPLAY_HMZ_O2_ZONE_TAG_PRESENT = 0x01, /**< Present */ - TAPI_DISPLAY_HMZ_O2_ZONE_TAG_ABSENT = 0x02 /**< Absent */ -} tapi_display_hmz_02_zone_tag_t; - -/** - * This enumeration is used to identify what icon info the client is interested in.. - */ -typedef enum { - TAPI_DISPLAY_GET_ICON_RSSI = 0x01, /**< Signal Strength */ - TAPI_DISPLAY_GET_ICON_BATT = 0x02, /**< Battery Level */ - TAPI_DISPLAY_GET_ICON_HDR_RSSI = 0x04, /**< HDR(High Data Rate RSSI - CDMA */ - TAPI_DISPLAY_GET_ICON_ALL = 0xFF /**< All Values Request */ -} tapi_display_get_icon_req_type_t; - -/** - * roam info Control Indication Type - */ -typedef enum { - TAPI_DISPLAY_ROAM_INDI_NONE = 0x00, /**< None */ - TAPI_DISPLAY_ROAM_TEXT_OFF = 0x01, /**< Roam Text Off */ - TAPI_DISPLAY_ROAM_TEXT_ON = 0x02 /**< Roam Text On */ -} tapi_display_roam_control_ind_t; - -/** - * roam info data roam guard Indication Type - */ -typedef enum { - TAPI_DISPLAY_DATA_ROAM_GUARD_NONE = 0x00, /**< None */ - TAPI_DISPLAY_DATA_ROAM_GUARD_OFF = 0x01, /**< Data Roam Guard Off */ - TAPI_DISPLAY_DATA_ROAM_GUARD_ON = 0x02 /**< Data Roam Guard On */ -} tapi_display_data_roam_guard_ind_t; - -/** - * roam info data roam guard Indication Type - */ -typedef enum { - TAPI_DISPLAY_USER_IND_NORMAL_MODE = 0x01, /**< Normal Mode */ - TAPI_DISPLAY_USER_IND_INITIAL_PROGRAMMING = 0x02, /**< Initial Programming needed */ - TAPI_DISPLAY_USER_IND_MAINTENANCE_REQUIRED = 0x03, /**< Maintenance Required */ - TAPI_DISPLAY_USER_IND_AUTHENTICATION_REQUIRED = 0x04 /**< Authentication Required */ -} tapi_display_user_ind_message_t; - -/** - * This structure defines the display icon information - */ -typedef struct { - tapi_display_rssi_level_t rssi; /**< RSSI Levels */ - tapi_display_rssi_level_t hdrRssi; /**< HDR(High Data Rate) RSSI Levels -CDMA */ - tapi_phone_battery_level_t batt; /**< Battery Level */ -} tapi_display_icon_info_t; - -/** - * HomeZone Information Notification Message - * - * This service specifies the implementation of o2 DE's HomeZone Indication (HZI) service - * in 3G or 2G handsets. The HZI service consists of displaying a text and, optionally depending - * on the zone, an icon in the handset (UE) when the UE is located within a zone which is defined - * individually for each customer. The zone is defined by a set of cells, i. e. for each cell the - * indication is either displayed or not. If the display of a MS is too small to display the complete - * operator name together with the complete tag, it will be allowed to display the operator - * name and the HomeZone/CityZone-tag in the same line ('o2 - de city' or 'o2 - de home'). - * - * Reference O2 Home Zone spec. - */ -typedef struct { - tapi_display_hmz_02_zone_ind_t ind; - tapi_display_hmz_02_zone_type_t type; - tapi_display_hmz_02_zone_tag_t tag_presnet; - - /** - * The coding is 12-character string coded in the short message alphabet given - * In GSM 03.38 with bit 8 set to zero. Default FF. FF indicates no display. - * If ZONE_TAG_PRESENT, then this is 13 bytes. - * If ZONE_TAG_ABSENT, then this is zero byte. - */ - unsigned char tag_name[TAPI_MAX_DISP_O2_HOMEZONE_TAG_LEN]; -} tapi_display_hmz_o2_ind_t; - -/** - * Notify the TS of the occurrence of the phone fatal in the phone - */ -typedef struct { - unsigned char Msg_len; - unsigned char Message[TAPI_MAX_DISP_PHONE_FATAL_ERR_MSG_LEN]; -} tapi_display_phone_fatal_info_noti_t; - -/** - * Notify the TS of the occurrence of the ext roam info in the phone - */ -typedef struct { - tapi_display_roam_control_ind_t control; - tapi_display_data_roam_guard_ind_t data_roam_guard; - unsigned char txt_len; - unsigned char text[TAPI_MAX_DISP_ROAM_INFO_LEN]; -} tapi_display_ext_roam_info_noti_t; - -#ifdef __cplusplus -} -#endif - -#endif /* _TEL_DISPLAY_H_ */ - -/** - * @} - */ diff --git a/include/TelErr.h b/include/TelErr.h deleted file mode 100644 index 0b25164..0000000 --- a/include/TelErr.h +++ /dev/null @@ -1,186 +0,0 @@ -/* - * libslp-tapi - * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: Ja-young Gu - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @open - * @ingroup TelephonyAPI - * @addtogroup COMMON_TAPI COMMON - * @{ - * These error codes are used by Applications. - */ - - -#ifndef _TEL_ERR_H_ -#define _TEL_ERR_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -/************************************************************ -** Errors defined in "+CME ERROR" , -** - see 3GPP TS 27.007 -** - ranges are 0x00 ~ 0x7FFF -************************************************************/ -/** - Error codes sent by the modem in response to the above operations. -*/ -typedef enum -{ - /* GENERAL ERRORS */ - TAPI_OP_GEN_ERR_PHONE_FAILURE = 0, /* 0 */ - TAPI_OP_GEN_ERR_NO_CONNECTION_TO_PHONE, /* 1 */ - TAPI_OP_GEN_ERR_PHONE_ADAPTOR_LINK_RESERVED, /* 2 */ - TAPI_OP_GEN_ERR_OPER_NOT_ALLOWED, /* 3 */ - TAPI_OP_GEN_ERR_OPER_NOT_SUPPORTED, /* 4 */ - TAPI_OP_GEN_ERR_PH_SIM_PIN_REQU, /* 5 */ - TAPI_OP_GEN_ERR_PH_FSIM_PIN_REQU, /* 6 */ - TAPI_OP_GEN_ERR_PH_FSIM_PUK_REQU, /* 7 */ - TAPI_OP_GEN_ERR_SIM_NOT_INSERTED =10, /* 10 */ - TAPI_OP_GEN_ERR_SIM_PIN_REQU, /* 11 */ - TAPI_OP_GEN_ERR_SIM_PUK_REQU, /* 12 */ - TAPI_OP_GEN_ERR_SIM_FAILURE, /* 13 */ - TAPI_OP_GEN_ERR_SIM_BUSY, /* 14 */ - TAPI_OP_GEN_ERR_SIM_WRONG, /* 15 */ - TAPI_OP_GEN_ERR_INCORRECT_PW, /* 16 */ - TAPI_OP_GEN_ERR_SIM_PIN2_REQU, /* 17 */ - TAPI_OP_GEN_ERR_SIM_PUK2_REQU, /* 18 */ - TAPI_OP_GEN_ERR_MEM_FULL = 20, /* 20 */ - TAPI_OP_GEN_ERR_INVALID_INDEX, /* 21 */ - TAPI_OP_GEN_ERR_NOT_FOUND, /* 22 */ - TAPI_OP_GEN_ERR_MEM_FAILURE, /* 23 */ - TAPI_OP_GEN_ERR_TEXT_STR_TOO_LONG, /* 24 */ - TAPI_OP_GEN_ERR_INVALID_CHARACTERS_IN_TEXT_STR, /* 25 */ - TAPI_OP_GEN_ERR_DIAL_STR_TOO_LONG, /* 26 */ - TAPI_OP_GEN_ERR_INVALID_CHARACTERS_IN_DIAL_STR, /* 27 */ - TAPI_OP_GEN_ERR_NO_NET_SVC = 30, /* 30 */ - TAPI_OP_GEN_ERR_NET_TIMEOUT, /* 31 */ - TAPI_OP_GEN_ERR_NET_NOT_ALLOWED_EMERGENCY_CALLS_ONLY, /* 32 */ - TAPI_OP_GEN_ERR_NET_PERS_PIN_REQU = 40, /* 40 */ - TAPI_OP_GEN_ERR_NET_PERS_PUK_REQU, /* 41 */ - TAPI_OP_GEN_ERR_NET_SUBSET_PERS_PIN_REQU, /* 42 */ - TAPI_OP_GEN_ERR_NET_SUBSET_PERS_PUK_REQU, /* 43 */ - TAPI_OP_GEN_ERR_SVC_PROVIDER_PERS_PIN_REQU, /* 44 */ - TAPI_OP_GEN_ERR_SVC_PROVIDER_PERS_PUK_REQU, /* 45 */ - TAPI_OP_GEN_ERR_CORPORATE_PERS_PIN_REQU, /* 46 */ - TAPI_OP_GEN_ERR_CORPORATE_PERS_PUK_REQU, /* 47 */ - TAPI_OP_GEN_ERR_HIDDEN_KEY_REQU, /* 48 */ - TAPI_OP_GEN_ERR_UNKNOWN = 100, /* 100 */ - - /* Errors related to a failure to perform an Attach */ - TAPI_OP_GEN_ERR_ILLEGAL_MS = 103, /* 103 */ - TAPI_OP_GEN_ERR_ILLEGAL_ME = 106, /* 106 */ - TAPI_OP_GEN_ERR_GPRS_SVC_NOT_ALLOWED, /* 107 */ - TAPI_OP_GEN_ERR_PLMN_NOT_ALLOWED = 111, /* 111 */ - TAPI_OP_GEN_ERR_LOCATION_AREA_NOT_ALLOWED, /* 112 */ - TAPI_OP_GEN_ERR_ROAMING_NOT_ALLOWED_IN_THIS_LOCATION_AREA,/* 113 */ - - /* Errors related to a failure to Activate a Context */ - TAPI_OP_GEN_ERR_SVC_OPT_NOT_SUPPORTED = 132, /* 132 */ - TAPI_OP_GEN_ERR_REQ_SVC_OPT_NOT_SUBSCRIBED, /* 133 */ - TAPI_OP_GEN_ERR_SVC_OPT_TEMPORARILY_OUT_OF_ORDER, /* 134 */ - TAPI_OP_GEN_ERR_UNSPECIFIED_GPRS_ERR = 148, /* 148 */ - TAPI_OP_GEN_ERR_PDP_AUTHENTICATION_FAILURE, /* 149 */ - TAPI_OP_GEN_ERR_INVALID_MOBILE_CLASS, /* 150 */ - - /* VBS / VGCS and eMLPP -related errors */ - TAPI_OP_GEN_ERR_VBS_VGCS_NOT_SUPPORTED_BY_THE_NET = 151, /* 151 */ - TAPI_OP_GEN_ERR_NO_SVC_SUBSCRIPTION_ON_SIM, /* 152 */ - TAPI_OP_GEN_ERR_NO_SUBSCRIPTION_FOR_GROUP_ID, /* 153 */ - TAPI_OP_GEN_ERR_GROUP_ID_NOT_ACTIVATED_ON_SIM, /* 154 */ - TAPI_OP_GEN_ERR_NO_MATCHING_NOTI = 155, /* 155 */ - TAPI_OP_GEN_ERR_VBS_VGCS_CALL_ALREADY_PRESENT, /* 156 */ - TAPI_OP_GEN_ERR_CONGESTION, /* 157 */ - TAPI_OP_GEN_ERR_NET_FAILURE, /* 158 */ - TAPI_OP_GEN_ERR_UPLINK_BUSY, /* 159 */ - TAPI_OP_GEN_ERR_NO_ACCESS_RIGHTS_FOR_SIM_FILE = 160, /* 160 */ - TAPI_OP_GEN_ERR_NO_SUBSCRIPTION_FOR_PRIORITY, /* 161 */ - TAPI_OP_GEN_ERR_OPER_NOT_APPLICABLE_OR_NOT_POSSIBLE, /* 162 */ - - - TAPI_OP_GEN_ERR_NONE = 0x8000, /* 0x8000 : No Errors */ - - /* General Common Errors : 0x8000 - 0x80FF */ - TAPI_OP_GEN_ERR_INVALID_IPC, /* 0x8001 : Invalid IPC_GSM Parameter or Format */ - TAPI_OP_GEN_ERR_PHONE_OFFLINE, /* 0x8002 : */ - TAPI_OP_GEN_ERR_CMD_NOT_ALLOWED, /* 0x8003 : */ - TAPI_OP_GEN_ERR_PHONE_IS_INUSE, /* 0x8004 : */ - TAPI_OP_GEN_ERR_INVALID_STATE = 0x8005, /* 0x8005 : */ - - TAPI_OP_GEN_ERR_NO_BUFFER, /* 0x8006 : No internal free buffers */ - TAPI_OP_GEN_ERR_OPER_REJ, /* 0x8007 : Operation Rejected */ - TAPI_OP_GEN_ERR_INSUFFICIENT_RESOURCE, /* 0x8008 : insufficient resource */ - TAPI_OP_GEN_ERR_NET_NOT_RESPOND, /* 0x8009 : Network not responding */ - TAPI_OP_GEN_ERR_SIM_PIN_ENABLE_REQ = 0x800A, /* 0x800A : SIM Pin Enable Required */ - TAPI_OP_GEN_ERR_SIM_PERM_BLOCKED, /* 0x800B : SIM Permanent Blocked */ - TAPI_OP_GEN_ERR_SIM_PHONEBOOK_RESTRICTED, /*0x800C: SIM Phonebook Restricted*/ - TAPI_OP_GEM_ERR_FIXED_DIALING_NUMBER_ONLY, /*0x800D: Restricted By FDN Mode */ - - /* Reserved : 0x800E ~ 0x80FF */ - TAPI_OP_GEN_ERR_800E_RESERVED_START = 0x800E, /* 0x800E */ - - TAPI_OP_GEN_ERR_80FF_RESERVED_END = 0x80ff, /* 0x80FF */ - - /* the other errors */ - TAPI_OP_GEN_ERR_OTHERS = 0xFFFE, /* 0xFFFE */ - - TAPI_OP_GEN_ERR_MAX = 0xFFFF - -}tapi_phone_err_t; - -typedef enum { - TAPI_PDP_FAILURE_CAUSE_NORMAL = 0x00, // 0x00 : Normal Process ( no problem ) - TAPI_PDP_FAILURE_CAUSE_REL_BY_USER = 0x01, // Call Released by User - TAPI_PDP_FAILURE_CAUSE_REGULAR_DEACTIVATION = 0x02, // Regular de-activation - TAPI_PDP_FAILURE_CAUSE_LLC_SNDCP = 0x03, // LLC SNDCP failure - TAPI_PDP_FAILURE_CAUSE_INSUFFICIENT_RESOURCE = 0x04, // Insufficient resources - TAPI_PDP_FAILURE_CAUSE_UNKNOWN_APN = 0x05, // Missing or unknown APN - TAPI_PDP_FAILURE_CAUSE_UNKNOWN_PDP_ADDRESS = 0x06, // Unknown PDP address or type - TAPI_PDP_FAILURE_CAUSE_USER_AUTH_FAILED = 0x07, // Unknown PDP address or type - TAPI_PDP_FAILURE_CAUSE_ACT_REJ_GGSN = 0x08, // Unknown PDP address or type - TAPI_PDP_FAILURE_CAUSE_ACT_REJ_UNSPECIFIED = 0x09, // Unknown PDP address or type - TAPI_PDP_FAILURE_CAUSE_SVC_OPTION_NOT_SUPPORTED = 0x0A, // Service option not supported - TAPI_PDP_FAILURE_CAUSE_SVC_NOT_SUBSCRIBED = 0x0B, // Requested service option not subscribed - TAPI_PDP_FAILURE_CAUSE_SVC_OPT_OUT_ORDER = 0x0C, // Service out of order - TAPI_PDP_FAILURE_CAUSE_NSAPI_USED = 0x0D, // NSAPI already used - TAPI_PDP_FAILURE_CAUSE_QOS_NOT_ACCEPTED = 0x0E, // QoS not accepted - TAPI_PDP_FAILURE_CAUSE_NETWORK_FAILURE = 0x0F, // Network Failure - TAPI_PDP_FAILURE_CAUSE_REACT_REQUIRED = 0x10, // Reactivation Required - TAPI_PDP_FAILURE_CAUSE_FEATURE_NOT_SUPPORTED = 0x11, // Feature not supported - TAPI_PDP_FAILURE_CAUSE_TFT_FILTER_ERROR = 0x12, // TFT or filter error - TAPI_PDP_FAILURE_CAUSE_UNKOWN_PDP_CONTEXT = 0x13, // Unknown PDP context - TAPI_PDP_FAILURE_CAUSE_INVALID_MSG = 0x14, // Invalid MSG - TAPI_PDP_FAILURE_CAUSE_PROTOCOL_ERROR = 0x15, // Protocol error - TAPI_PDP_FAILURE_CAUSE_MOBILE_FAILURE_ERROR = 0x16, // Mobile failure error - TAPI_PDP_FAILURE_CAUSE_TIMEOUT_ERROR = 0x17, // Timeout error - TAPI_PDP_FAILURE_CAUSE_UNKNOWN_ERROR = 0x18, // Unknown error - TAPI_PDP_FAILURE_CAUSE_MAX , -} tapi_pdp_err_t; - -#ifdef __cplusplus -} -#endif - -#endif // _TEL_ERR_H_ - -/** -* @} -*/ diff --git a/include/TelMisc.h b/include/TelMisc.h index 8e4a8c4..d564d35 100644 --- a/include/TelMisc.h +++ b/include/TelMisc.h @@ -1,7 +1,7 @@ /* * libslp-tapi * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Ja-young Gu * @@ -19,30 +19,26 @@ */ /** - * @internal - * @ingroup TelephonyAPI - * @addtogroup MISC_TAPI MISC - * @{ - * * @file TelMisc.h + */ - @brief This file serves as a "C" header file defines structures for Tapi Misc Services. \n - It contains a sample set of constants, enums, structs that would be required by applications. - +/** + * @internal + * @addtogroup CAPI_TELEPHONY_SERVICE_MODEM + * @{ */ #ifndef _TEL_MISC_H_ #define _TEL_MISC_H_ #include -#include #ifdef __cplusplus extern "C" { #endif #define MAX_VERSION_LEN 32 /**< Maximum version length *///sw version, hw version, rf cal date, me sn -#define FUS_DUMMY_DATA_SIZE 2 /**< Data Size*/ +#define FUS_DUMMY_DATA_SIZE 2 /**< Data Size */ #define MMICHECK_CALL_RELEASE_NOTI "User.LauncherUi.RequestTermination" #define MMICHECK_END_ALL_NOTI "User.LauncherUi.RequestTermination" @@ -61,150 +57,152 @@ extern "C" { #define TAPI_MISC_NAME_LEN_MAX 17 /** - * @enum TelMiscApplicationKey_t - * This enumeration defines mmi check key values + * @brief Enumeration for the MMI check key values. + * @since_tizen 2.3 */ typedef enum { - MMI_CHECK_DIAL_STAR = 0x2A, // 20 00 2A AF 4B 7E - MMI_CHECK_DIAL_SHARP = 0x23, // 20 00 23 6E D6 7E - MMI_CHECK_DIAL_0 = 0x30, // 20 00 30 74 F4 7E - MMI_CHECK_DIAL_1, // 20 00 31 FD E5 7E - MMI_CHECK_DIAL_2, // 20 00 32 66 D7 7E - MMI_CHECK_DIAL_3, // 20 00 33 EF C6 7E - MMI_CHECK_DIAL_4, // 20 00 34 50 B2 7E - MMI_CHECK_DIAL_5, // 20 00 35 D9 A3 7E - MMI_CHECK_DIAL_6, // 20 00 36 42 91 7E - MMI_CHECK_DIAL_7, // 20 00 37 CB 80 7E - MMI_CHECK_DIAL_8, // 20 00 38 3C 78 7E - MMI_CHECK_DIAL_9, // 20 00 39 B5 69 7E - - MMI_CHECK_END_ALL = 0x41, // - - MMI_CHECK_CALL = 0x50, // 20 00 50 72 97 7E - MMI_CHECK_END = 0x51, // 20 00 51 FB 86 7E - MMI_CHECK_CANCEL = 0x52, // 20 00 52 60 B4 7E - MMI_CHECK_RIGHT = 0x53, // 20 00 5C 1E 5D 7E - MMI_CHECK_SIDE_UP = 0x54, // 20 00 54 56 D1 7E - MMI_CHECK_SIDE_DOWN = 0x55, // 20 00 55 DF C0 7E - - MMI_CHECK_LEFT = 0x5B, // 20 00 5B A1 29 7E - MMI_CHECK_ARROW_UP = 0x63, // 20 00 63 6A 94 7E - MMI_CHECK_ARROW_DOWN = 0x64, // 20 00 64 D5 E0 7E - MMI_CHECK_ARROW_LEFT = 0x65, // 20 00 65 5C F1 7E - MMI_CHECK_ARROW_RIGHT = 0x66, // 20 00 66 C7 C3 7E - - MMI_CHECK_WAP = 0x8C, // 20 00 53 E9 A5 7E - MMI_CHECK_CAMERA = 0x8D, // 20 01 8D C2 83 7E - MMI_CHECK_MP3 = 0xDD, // 20 00 DD 9F C8 7E - MMI_CHECK_POWER = 0x95, // 20 00 95 D3 06 7E - MMI_CHECK_LONG_PRESS = 0xFF + MMI_CHECK_DIAL_STAR = 0x2A, /**< 20 00 2A AF 4B 7E */ + MMI_CHECK_DIAL_SHARP = 0x23, /**< 20 00 23 6E D6 7E */ + MMI_CHECK_DIAL_0 = 0x30, /**< 20 00 30 74 F4 7E */ + MMI_CHECK_DIAL_1, /**< 20 00 31 FD E5 7E */ + MMI_CHECK_DIAL_2, /**< 20 00 32 66 D7 7E */ + MMI_CHECK_DIAL_3, /**< 20 00 33 EF C6 7E */ + MMI_CHECK_DIAL_4, /**< 20 00 34 50 B2 7E */ + MMI_CHECK_DIAL_5, /**< 20 00 35 D9 A3 7E */ + MMI_CHECK_DIAL_6, /**< 20 00 36 42 91 7E */ + MMI_CHECK_DIAL_7, /**< 20 00 37 CB 80 7E */ + MMI_CHECK_DIAL_8, /**< 20 00 38 3C 78 7E */ + MMI_CHECK_DIAL_9, /**< 20 00 39 B5 69 7E */ + + MMI_CHECK_END_ALL = 0x41, /**< TBD */ + + MMI_CHECK_CALL = 0x50, /**< 20 00 50 72 97 7E */ + MMI_CHECK_END = 0x51, /**< 20 00 51 FB 86 7E */ + MMI_CHECK_CANCEL = 0x52, /**< 20 00 52 60 B4 7E */ + MMI_CHECK_RIGHT = 0x53, /**< 20 00 5C 1E 5D 7E */ + MMI_CHECK_SIDE_UP = 0x54, /**< 20 00 54 56 D1 7E */ + MMI_CHECK_SIDE_DOWN = 0x55, /**< 20 00 55 DF C0 7E */ + + MMI_CHECK_LEFT = 0x5B, /**< 20 00 5B A1 29 7E */ + MMI_CHECK_ARROW_UP = 0x63, /**< 20 00 63 6A 94 7E */ + MMI_CHECK_ARROW_DOWN = 0x64, /**< 20 00 64 D5 E0 7E */ + MMI_CHECK_ARROW_LEFT = 0x65, /**< 20 00 65 5C F1 7E */ + MMI_CHECK_ARROW_RIGHT = 0x66, /**< 20 00 66 C7 C3 7E */ + + MMI_CHECK_WAP = 0x8C, /**< 20 00 53 E9 A5 7E */ + MMI_CHECK_CAMERA = 0x8D, /**< 20 01 8D C2 83 7E */ + MMI_CHECK_MP3 = 0xDD, /**< 20 00 DD 9F C8 7E */ + MMI_CHECK_POWER = 0x95, /**< 20 00 95 D3 06 7E */ + MMI_CHECK_LONG_PRESS = 0xFF /**< TBD */ } TelMiscMMICHECK_t; /** - * @enum TelMiscApplicationKey_t - * This enumeration defines application key type + * @brief Enumeration for the application key types. + * @since_tizen 2.3 */ typedef enum { - KEY_EXT_DIAL_0 = 0, - KEY_EXT_DIAL_1, - KEY_EXT_DIAL_2, - KEY_EXT_DIAL_3, - KEY_EXT_DIAL_4, - KEY_EXT_DIAL_5, - KEY_EXT_DIAL_6, - KEY_EXT_DIAL_7, - KEY_EXT_DIAL_8, - KEY_EXT_DIAL_9, - KEY_EXT_DIAL_STAR, // 10 : * - KEY_EXT_DIAL_SHARP, // 11 : # - - KEY_EXT_DIAL_BACK, // 12 : <- (backkey) - KEY_EXT_DIAL_HIDE, // 13 :�� (hidekey) - KEY_EXT_DIAL_P, // 14 : p - KEY_EXT_DIAL_PLUS, // 15 : + - KEY_EXT_DIAL_MUTE, // 16 : mute - - KEY_EXT_DIAL_CALL = 100, // 100 : BTN1 (call) - KEY_EXT_DIAL_MESSAGE, // 101 : BTN2 (message) - KEY_EXT_DIAL_VIDEO_CALL, // 102 : BTN3 (video call) - KEY_EXT_DIAL_SAVE, // 103 : BTN4 (save) - KEY_EXT_DIAL_CALL_END, // noti publish - KEY_EXT_TERMINATE_ALL, - - KEY_EXT_PAGEDOWN = 114, // Volume down - KEY_EXT_PAGEUP = 115, // Volume up - KEY_EXT_POWER = 116, // Power short - KEY_EXT_PEOPLE_VIEW = 132, // People view - KEY_EXT_TIMELINE = 169, // Lifedrive - KEY_EXT_PREPARE_CAMERA = 171, // Prepare Camera - KEY_EXT_ACTIVITY_VIEW = 174, // Activity view - KEY_EXT_CAMERA = 212, // Camera - KEY_EXT_SEARCH = 217, // Phone Search - KEY_EXT_POWER_LONG = 356, // Power off - - KEY_EXT_INVALID_KEY = 500 + KEY_EXT_DIAL_0 = 0, /**< TBD */ + KEY_EXT_DIAL_1, /**< TBD */ + KEY_EXT_DIAL_2, /**< TBD */ + KEY_EXT_DIAL_3, /**< TBD */ + KEY_EXT_DIAL_4, /**< TBD */ + KEY_EXT_DIAL_5, /**< TBD */ + KEY_EXT_DIAL_6, /**< TBD */ + KEY_EXT_DIAL_7, /**< TBD */ + KEY_EXT_DIAL_8, /**< TBD */ + KEY_EXT_DIAL_9, /**< TBD */ + KEY_EXT_DIAL_STAR, /**< 10 : * */ + KEY_EXT_DIAL_SHARP, /**< 11 : # */ + + KEY_EXT_DIAL_BACK, /**< 12 : <- (backkey) */ + KEY_EXT_DIAL_HIDE, /**< 13 :�� (hidekey) */ + KEY_EXT_DIAL_P, /**< 14 : p */ + KEY_EXT_DIAL_PLUS, /**< 15 : + */ + KEY_EXT_DIAL_MUTE, /**< 16 : mute */ + + KEY_EXT_DIAL_CALL = 100, /**< 100 : BTN1 (call) */ + KEY_EXT_DIAL_MESSAGE, /**< 101 : BTN2 (message) */ + KEY_EXT_DIAL_VIDEO_CALL, /**< 102 : BTN3 (video call) */ + KEY_EXT_DIAL_SAVE, /**< 103 : BTN4 (save) */ + KEY_EXT_DIAL_CALL_END, /**< noti publish */ + KEY_EXT_TERMINATE_ALL, /**< TBD */ + + KEY_EXT_PAGEDOWN = 114, /**< Volume down */ + KEY_EXT_PAGEUP = 115, /**< Volume up */ + KEY_EXT_POWER = 116, /**< Power short */ + KEY_EXT_PEOPLE_VIEW = 132, /**< People view */ + KEY_EXT_TIMELINE = 169, /**< Lifedrive */ + KEY_EXT_PREPARE_CAMERA = 171, /**< Prepare Camera */ + KEY_EXT_ACTIVITY_VIEW = 174, /**< Activity view */ + KEY_EXT_CAMERA = 212, /**< Camera */ + KEY_EXT_SEARCH = 217, /**< Phone Search */ + KEY_EXT_POWER_LONG = 356, /**< Power off */ + + KEY_EXT_INVALID_KEY = 500 /**< TBD */ } TelMiscApplicationKey_t; /** - * @enum TelMiscDiagTouchEventType_t - * This enumeration defines the touch event type + * @brief Enumeration for the touch event types. + * @since_tizen 2.3 */ typedef enum { TAPI_DIAG_TOUCH_CLICK_DOWN = 0x000F, /**< 0x0F00: Click Down */ - TAPI_DIAG_TOUCH_MOVE = 0x0010, /**< 0x1000: Move */ - TAPI_DIAG_TOUCH_CLICK_UP = 0x0011, /**< 0x1100: Click Up */ - TAPI_DIAG_TOUCH_HOLD = 0x0012 /**< 0x1200: Hold */ + TAPI_DIAG_TOUCH_MOVE = 0x0010, /**< 0x1000: Move */ + TAPI_DIAG_TOUCH_CLICK_UP = 0x0011, /**< 0x1100: Click Up */ + TAPI_DIAG_TOUCH_HOLD = 0x0012 /**< 0x1200: Hold */ } TelMiscDiagTouchEventType_t; /** - * @enum TelMiscAlarmMode_t - * Enum type for Validity of the Alarm booting + * @brief Enumeration for the validity of alarm booting. + * @since_tizen 2.3 */ typedef enum { - TAPI_MISC_ALARMBOOT_INACTIVATE, /**< 0x00: Inactivated */ - TAPI_MISC_ALARMBOOT_ACTIVATE /**< 0x00: Activated */ + TAPI_MISC_ALARMBOOT_INACTIVATE, /**< 0x00: Inactivate */ + TAPI_MISC_ALARMBOOT_ACTIVATE /**< 0x00: Activate */ } TelMiscAlarmMode_t; typedef enum { TAPI_MISC_ME_IMEI = 0x00, /**< 0x00: IMEI, GSM/UMTS device */ - TAPI_MISC_ME_ESN = 0x01, /**< 0x01: ESN(Electronic Serial Number), It`s essentially run out. CDMA device */ - TAPI_MISC_ME_MEID = 0x02, /**< 0x02: MEID, This value can have hexa decimal digits. CDMA device */ - TAPI_MISC_ME_MAX = 0xff /**< 0xff: reserved */ + TAPI_MISC_ME_ESN = 0x01, /**< 0x01: ESN(Electronic Serial Number), it has essentially run out. CDMA device */ + TAPI_MISC_ME_MEID = 0x02, /**< 0x02: MEID, this value can have hexa decimal digits. CDMA device */ + TAPI_MISC_ME_MAX = 0xff /**< 0xff: Reserved */ } TelMiscSNIndexType_t; /** - * NAM Information MASK fiel + * @brief Enumeration for the NAM Information MASK field. + * @since_tizen 2.3 */ typedef enum { - TAPI_MISC_NAM_INFO_MASK_TOTAL = 0x0001, - TAPI_MISC_NAM_INFO_MASK_CURRENT_INDEX = 0x0002, - TAPI_MISC_NAM_INFO_MASK_REQUEST_INDEX = 0x0004, - TAPI_MISC_NAM_INFO_MASK_AUTONAM = 0x0008, - TAPI_MISC_NAM_INFO_MASK_MCC = 0x0010, - TAPI_MISC_NAM_INFO_MASK_MNC = 0x0020, - TAPI_MISC_NAM_INFO_MASK_MIN = 0x0040, - TAPI_MISC_NAM_INFO_MASK_MDN = 0x0080, - TAPI_MISC_NAM_INFO_MASK_NAM_NAME = 0x0100, - TAPI_MISC_NAM_INFO_MASK_NAM_CHANGE = 0x0200, - TAPI_MISC_NAM_INFO_MASK_NAM_NUM = 0x0400, - TAPI_MISC_NAM_INFO_MASK_ALL = 0x8000 + TAPI_MISC_NAM_INFO_MASK_TOTAL = 0x0001, /**< TBD */ + TAPI_MISC_NAM_INFO_MASK_CURRENT_INDEX = 0x0002, /**< TBD */ + TAPI_MISC_NAM_INFO_MASK_REQUEST_INDEX = 0x0004, /**< TBD */ + TAPI_MISC_NAM_INFO_MASK_AUTONAM = 0x0008, /**< TBD */ + TAPI_MISC_NAM_INFO_MASK_MCC = 0x0010, /**< TBD */ + TAPI_MISC_NAM_INFO_MASK_MNC = 0x0020, /**< TBD */ + TAPI_MISC_NAM_INFO_MASK_MIN = 0x0040, /**< TBD */ + TAPI_MISC_NAM_INFO_MASK_MDN = 0x0080, /**< TBD */ + TAPI_MISC_NAM_INFO_MASK_NAM_NAME = 0x0100, /**< TBD */ + TAPI_MISC_NAM_INFO_MASK_NAM_CHANGE = 0x0200, /**< TBD */ + TAPI_MISC_NAM_INFO_MASK_NAM_NUM = 0x0400, /**< TBD */ + TAPI_MISC_NAM_INFO_MASK_ALL = 0x8000 /**< TBD */ } TelMiscNamInfoMaskType_t; /** - * NAMIndex Field + * @brief Enumeration for the NAMIndex field. + * @since_tizen 2.3 */ typedef enum { - TAPI_MISC_NAM_1 = 0x00, - TAPI_MISC_NAM_2, - TAPI_MISC_NAM_3, - TAPI_MISC_NAM_4, - TAPI_MISC_NAM_5 + TAPI_MISC_NAM_1 = 0x00, /**< TBD */ + TAPI_MISC_NAM_2, /**< TBD */ + TAPI_MISC_NAM_3, /**< TBD */ + TAPI_MISC_NAM_4, /**< TBD */ + TAPI_MISC_NAM_5 /**< TBD */ } TelMiscNamIndex_t; /** - * @enum tapi_misc_nitz_dayofweek_t - * Enum type for day of week + * @brief Enumeration for the day of the week. + * @since_tizen 2.3 */ typedef enum { TAPI_MISC_NITZ_DOW_SUN = 0x00, /**< Sunday */ @@ -217,18 +215,18 @@ typedef enum { } tapi_misc_nitz_dayofweek_t; /** - * @enum tapi_misc_nitz_daylight_t - * Enum type for daylight + * @brief Enumeration for daylight adjustment. + * @since_tizen 2.3 */ typedef enum { TAPI_MISC_NITZ_NOADJUST = 0x00, /**< No daylight adjustment */ - TAPI_MISC_NITZ_ONE_HR = 0x01, /**< One hour */ - TAPI_MISC_NITZ_TW0_HR = 0x02 /**< two hours */ + TAPI_MISC_NITZ_ONE_HR = 0x01, /**< One hour */ + TAPI_MISC_NITZ_TW0_HR = 0x02 /**< Two hours */ } tapi_misc_nitz_daylight_t; /** - * @enum tapi_misc_nitz_timeinfo_t - * Enum type for types of data + * @brief Enumeration for the types of data. + * @since_tizen 2.3 */ typedef enum { TAPI_MISC_NITZ_INVALID = 0x00, /**< Invalid */ @@ -236,36 +234,40 @@ typedef enum { TAPI_MISC_NITZ_TIMEINFO_NW_GSM = 0x02, /**< Time info network */ TAPI_MISC_NITZ_RTC_INFO_LINE = 0x03, /**< RTC Info line */ TAPI_MISC_NITZ_RTC_BKUP_PHONE = 0x04, /**< RTC Backup phone */ - TAPI_MISC_NITZ_NO_TIME_INFO = 0x05 /**< No time info */ + TAPI_MISC_NITZ_NO_TIME_INFO = 0x05 /**< No time info */ } tapi_misc_nitz_timeinfo_t; /** - * Mobile Equipment Version Information + * @brief The structure type for Mobile Equipment Version Information. + * @since_tizen 2.3 */ typedef struct { - unsigned char ver_mask; /**< version mask - 0x01:SW_ver, 0x02:HW_ver, 0x04:RF_CAL_date, 0x08:Product_code, 0x10:Model_ID, 0x20:PRL, 0x04:ERI, 0xff:all */ + unsigned char ver_mask; /**< Version mask - 0x01:SW_ver, 0x02:HW_ver, 0x04:RF_CAL_date, 0x08:Product_code, 0x10:Model_ID, 0x20:PRL, 0x04:ERI, 0xff:all */ unsigned char szSwVersion[MAX_VERSION_LEN]; /**< Software version, null termination */ unsigned char szHwVersion[MAX_VERSION_LEN]; /**< Hardware version, null termination */ unsigned char szRfCalDate[MAX_VERSION_LEN]; /**< Calculation Date, null termination */ - unsigned char szProductCode[TAPI_MISC_PRODUCT_CODE_LEN_MAX]; /**< product code, null termination */ - unsigned char szModelId[TAPI_MISC_MODEL_ID_LEN_MAX]; /**< model id (only for CDMA), null termination */ - unsigned char prl_nam_num; /**< number of PRL NAM fields */ - unsigned char szPrlVersion[TAPI_MISC_PRL_ERI_VER_LEN_MAX * 3];/**< prl version (only for CDMA), null termination */ - unsigned char eri_nam_num; /**< number of PRL NAM fields */ - unsigned char szEriVersion[TAPI_MISC_PRL_ERI_VER_LEN_MAX * 3];/**< eri version (only for CDMA), null termination */ + unsigned char szProductCode[TAPI_MISC_PRODUCT_CODE_LEN_MAX]; /**< Product code, null termination */ + unsigned char szModelId[TAPI_MISC_MODEL_ID_LEN_MAX]; /**< Model ID (only for CDMA), null termination */ + unsigned char prl_nam_num; /**< Number of PRL NAM fields */ + unsigned char szPrlVersion[TAPI_MISC_PRL_ERI_VER_LEN_MAX * 3];/**< PRL version (only for CDMA), null termination */ + unsigned char eri_nam_num; /**< Number of PRL NAM fields */ + unsigned char szEriVersion[TAPI_MISC_PRL_ERI_VER_LEN_MAX * 3];/**< ERI version (only for CDMA), null termination */ } TelMiscVersionInformation; /** - * Mobile Equipment Serial Number Information + * @brief The structure type for Mobile Equipment Serial Number Information. + * @since_tizen 2.3 */ typedef struct { - TelMiscSNIndexType_t sn_index; /**< serial number index */ - int sn_len; /**< Length */ - unsigned char szNumber[TAPI_MISC_ME_SN_LEN_MAX]; /**< Number */ + unsigned char szEsn[TAPI_MISC_ME_SN_LEN_MAX]; /**< Number */ + unsigned char szMeid[TAPI_MISC_ME_SN_LEN_MAX]; /**< Number */ + unsigned char szImei[TAPI_MISC_ME_SN_LEN_MAX]; /**< Number */ + unsigned char szImeiSv[TAPI_MISC_ME_SN_LEN_MAX]; /**< Number */ } TelMiscSNInformation; /** - * Event delivery - event type + * @brief The structure type for the event delivery - event type. + * @since_tizen 2.3 */ typedef struct { struct timeval time; /**< Time information */ @@ -275,7 +277,8 @@ typedef struct { } input_event_t; /** - * Diagnostic Key Code Information + * @brief The structure type for Diagnostic Key Code Information. + * @since_tizen 2.3 */ typedef struct { unsigned char keycode; /**< Key Code */ @@ -283,60 +286,63 @@ typedef struct { } TelMiscDiagKeyCodeInfomation; /** - * Struct for alarm info + * @brief The structure type for alarm info. + * @since_tizen 2.3 */ typedef struct { - unsigned char year; /**< year */ - unsigned char month; /**< month */ - unsigned char day; /**< day */ - unsigned char hour; /**< hour */ - unsigned char minute; /**< minute */ - unsigned char second; /**< second */ - unsigned char time_zone; /**< time zone */ - tapi_misc_nitz_dayofweek_t day_of_week; /**< day of week */ + unsigned char year; /**< Year */ + unsigned char month; /**< Month */ + unsigned char day; /**< Day */ + unsigned char hour; /**< Hour */ + unsigned char minute; /**< Minute */ + unsigned char second; /**< Second */ + unsigned char time_zone; /**< Time zone */ + tapi_misc_nitz_dayofweek_t day_of_week; /**< Day of the week */ } TelMiscAlarmInfo_t; /** - * Struct for alarm response + * @brief The structure type for the alarm response. + * @since_tizen 2.3 */ typedef struct { - TelMiscAlarmMode_t validity; /**< validity */ - TelMiscAlarmInfo_t alarm_info; /**< alarm info */ + TelMiscAlarmMode_t validity; /**< Validity */ + TelMiscAlarmInfo_t alarm_info; /**< Alarm info */ } TelMiscAlarmStatus_t; /** - * @struct TelMiscNamInfo_t - * struct type for nam info + * @brief The structure type for nam info. + * @since_tizen 2.3 */ typedef struct { - unsigned short nam_info_mask; - unsigned char nam_total; // this field is not used in case of nam set req. - unsigned char nam_current_index; - unsigned char nam_req_index; - unsigned char nam_auto; - unsigned char nam_mcc[TAPI_MISC_MCC_LEN_MAX+1]; - unsigned char nam_mnc[TAPI_MISC_MCC_LEN_MAX+1]; - unsigned char nam_min[TAPI_MISC_MIN_LEN_MAX+1]; - unsigned char nam_mdn[TAPI_MISC_MDN_LEN_MAX+1]; - unsigned char nam_name[TAPI_MISC_NAME_LEN_MAX+1]; + unsigned short nam_info_mask; /**< TBD */ + unsigned char nam_total; /**< TBD */ // this field is not used in case of nam set req. + unsigned char nam_current_index; /**< TBD */ + unsigned char nam_req_index; /**< TBD */ + unsigned char nam_auto; /**< TBD */ + unsigned char nam_mcc[TAPI_MISC_MCC_LEN_MAX+1]; /**< TBD */ + unsigned char nam_mnc[TAPI_MISC_MCC_LEN_MAX+1]; /**< TBD */ + unsigned char nam_min[TAPI_MISC_MIN_LEN_MAX+1]; /**< TBD */ + unsigned char nam_mdn[TAPI_MISC_MDN_LEN_MAX+1]; /**< TBD */ + unsigned char nam_name[TAPI_MISC_NAME_LEN_MAX+1]; /**< TBD */ } TelMiscNamInfo_t; /** - * Struct for time info + * @brief The structure type for time info. + * @since_tizen 2.3 */ typedef struct { - tapi_misc_nitz_timeinfo_t time_zone_valid; /**< time zone */ - int bDaylight_valid; /**< day light */ - unsigned char year; /**< year */ - unsigned char month; /**< month */ - unsigned char day; /**< day */ - unsigned char hour; /**< hour */ - unsigned char minute; /**< minute */ - unsigned char second; /**< second */ - unsigned char time_zone; /**< time zone */ - tapi_misc_nitz_daylight_t daylight_adjust; /**< day light adjust */ - tapi_misc_nitz_dayofweek_t day_of_week; /**< day of week */ - unsigned long plmn; /**< day of week */ + tapi_misc_nitz_timeinfo_t time_zone_valid; /**< Time zone */ + int bDaylight_valid; /**< Day light */ + unsigned char year; /**< Year */ + unsigned char month; /**< Month */ + unsigned char day; /**< Day */ + unsigned char hour; /**< Hour */ + unsigned char minute; /**< Minute */ + unsigned char second; /**< Second */ + unsigned char time_zone; /**< Time zone */ + tapi_misc_nitz_daylight_t daylight_adjust; /**< Day light adjust */ + tapi_misc_nitz_dayofweek_t day_of_week; /**< Day of the week */ + unsigned long plmn; /**< Day of the week */ } tapi_misc_time_zone_info_type; #ifdef __cplusplus @@ -344,6 +350,7 @@ typedef struct { #endif #endif // _TEL_MISC_H_ + /** - * @} + * @} */ diff --git a/include/TelNetwork.h b/include/TelNetwork.h index c527dc1..90a3076 100644 --- a/include/TelNetwork.h +++ b/include/TelNetwork.h @@ -1,7 +1,7 @@ /* * libslp-tapi * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Ja-young Gu * @@ -19,15 +19,13 @@ */ /** -* @open -* @ingroup TelephonyAPI -* @addtogroup Network_TAPI Network -* @{ -* -* @file TelNetwork.h + * @file TelNetwork.h + */ - @brief This file serves as a "C" header file and defines structures for Tapi Network Services\n - It contains a sample set of constants, enums, structs that would be required by applications. +/** + * @internal + * @addtogroup CAPI_TELEPHONY_SERVICE_NETWORK + * @{ */ #ifndef _TEL_NETWORK_H_ @@ -38,60 +36,171 @@ extern "C" { #endif -#define TAPI_NETWORK_ORDER_MAX 5 /**< Maximum network order */ -#define TAPI_NETWORK_LIST_MAX 15 /**< Maximum network list */ -#define TAPI_NETWORK_NAME_LEN_MAX 40 /**< Maximum network name or PLMN name length*/ -#define TAPI_NETWORK_SPN_LEN_MAX 20 /**< Maximum network service provider name length */ -#define TAPI_PREFERRED_PLMN_RECORDS_MAX 150 /**< Maximum record length for preferred plmn list*/ -#define TAPI_NETWORK_DISPLAY_INFO_ELEMENTS 4 /**< Maximum network Display info element length */ -#define TAPI_NETWORK_HOMEZONE_TAG_MAX_LEN 13 /**< Maximum Network Home zone tag length */ -#define TAPI_NETWORK_CS_DISP_INDEX 0 /**< Maximum Network CS display index length */ -#define TAPI_NETWORK_PS_DISP_INDEX 1 /**< Maximum Network PS display index length */ -#define TAPI_NETWORK_SVC_DISP_INDEX 2 /**< Maximum Network SVC display index length */ -#define TAPI_NETWORK_ROAM_DISP_INDEX 3 /**< Maximum Network roaming display index length */ -#define TAPI_NETWORK_SUBS_SVC_NUM_MAX 6 /**< Maximum number of the Subscriber's services */ -#define TAPI_NETWORK_SUBS_NUM_LEN_MAX 40 /**< Maximum Subscriber Number Length */ -#define TAPI_NETWORK_SUBS_ALPHA_LEN_MAX 16 /**< Maximum Subscriber Name Length */ - -/** - * @enum TelNetworkSelectionMode_t - * This enumeration defines the network selection modes. +/** + * @brief Definition for the maximum network order. + * @since_tizen 2.3 */ -typedef enum { - TAPI_NETWORK_SELECTIONMODE_AUTOMATIC, /**< Network selection is in Automatic selection mode*/ - TAPI_NETWORK_SELECTIONMODE_MANUAL, /**< Network selection is in Manual selection mode */ - TAPI_NETWORK_SELECTIONMODE_GLOBAL_AUTOMAITIC, /** * @@ -19,64 +19,73 @@ */ /** + * @file TelPower.h + */ + +/** * @internal - * @ingroup TelephonyAPI - * @addtogroup POWER_TAPI POWER + * @addtogroup CAPI_TELEPHONY_SERVICE_MODEM * @{ - * - * These APIs allow an application to accomplish the following services: @n - * - Get current phone power status, @n - * - Reset the phone power (on / off), @n - * - Get the Display Icon Information. @n */ #ifndef _TEL_POWER_H_ #define _TEL_POWER_H_ -#include - #ifdef __cplusplus extern "C" { #endif /** - * This defines the phone power reset commands. + * @brief Enumeration for the phone power reset commands. + * @since_tizen 2.3 */ typedef enum { - TAPI_PHONE_POWER_OFF = 0, TAPI_PHONE_POWER_ON, TAPI_PHONE_POWER_RESET, + TAPI_PHONE_POWER_ON = 0, + TAPI_PHONE_POWER_OFF, + TAPI_PHONE_POWER_RESET, + TAPI_PHONE_POWER_LOW, + TAPI_PHONE_POWER_MAX = TAPI_PHONE_POWER_LOW } tapi_power_phone_cmd_t; /** - * This defines the phone power status values. + * @brief Enumeration for the phone power status values. + * @since_tizen 2.3 */ typedef enum { - TAPI_PHONE_POWER_STATUS_ON = 0, TAPI_PHONE_POWER_STATUS_OFF, TAPI_PHONE_POWER_STATUS_ERROR, + TAPI_PHONE_POWER_STATUS_UNKNOWN = -1, + TAPI_PHONE_POWER_STATUS_ON, + TAPI_PHONE_POWER_STATUS_OFF, + TAPI_PHONE_POWER_STATUS_RESET, + TAPI_PHONE_POWER_STATUS_LOW, + TAPI_PHONE_POWER_STATUS_ERROR } tapi_power_phone_power_status_t; /** - * Use to Enter or Leave Flight Mode. - * + * @details Enumeration for flight modes. + * @since_tizen 2.3 */ typedef enum { TAPI_POWER_FLIGHT_MODE_ENTER = 0x01, /**< ONLINE OFF */ TAPI_POWER_FLIGHT_MODE_LEAVE, /**< ONLINE ON */ - TAPI_POWER_FLIGHT_MODE_MAX + TAPI_POWER_FLIGHT_MODE_MAX /**< TBD */ } tapi_power_flight_mode_type_t; typedef enum { TAPI_POWER_FLIGHT_MODE_RESP_ON = 0x01, /**< Flight Mode On Success */ TAPI_POWER_FLIGHT_MODE_RESP_OFF, /**< Flight Mode Off Success */ TAPI_POWER_FLIGHT_MODE_RESP_FAIL, /**< Flight Mode Request Fail */ - TAPI_POWER_FLIGHT_MODE_RESP_MAX + TAPI_POWER_FLIGHT_MODE_RESP_MAX /**< TBD */ } tapi_power_flight_mode_resp_type_t; /** - * This enum defines the phone battery status levels. + * @brief Enumeration for the phone battery status levels. * + * @details * 0x01 : Power Off Level => PhoneLevel = power off * 0x02 : Critical-Low Battery Level => PhoneLevel = 0 * 0x03 : Low Battery Level => PhoneLevel = 1 * 0x04 : Normal Level => PhoneLevel = 2,3,4 + * @since_tizen 2.3 */ typedef enum { TAPI_POWER_BATT_STAT_POWER_OFF_LEVEL = 0x01, /**< Power Off Level */ diff --git a/include/TelSat.h b/include/TelSat.h index cd81362..e88dcb5 100644 --- a/include/TelSat.h +++ b/include/TelSat.h @@ -1,7 +1,7 @@ /* * libslp-tapi * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: Ja-young Gu * @@ -19,23 +19,18 @@ */ /** -* @open -* @ingroup TelephonyAPI -* @addtogroup SAT_TAPI SAT -* @{ -* -* @file TelSat.h - - @brief This file serves as a "C" header file defines structures for Telephony SAT Services. \n - It contains a sample set of constants, enums, structs that would be required by applications. - + * @file TelSat.h + */ +/** + * @internal + * @addtogroup CAPI_TELEPHONY_SERVICE_SAT + * @{ */ #ifndef _TEL_SAT_H_ #define _TEL_SAT_H_ -#include #include #include #include @@ -48,660 +43,743 @@ extern "C" { #endif -#define TAPI_SAT_DEF_TITLE_LEN_MAX 50 /**< max length for Menu Title */ -#define TAPI_SAT_DEF_ITEM_STR_LEN_MAX 50 /**< max length for Menu Item */ -#define TAPI_SAT_DEF_TEXT_STRING_LEN_MAX 500 /**< max length for Text String */ -#define TAPI_SAT_DEF_BIT_MASK_CONTACT 0x01 /**< Bit Mask for Contact */ -#define TAPI_SAT_DEF_BIT_MASK_MSG 0x02 /**< Bit Mask for Msg */ -#define TAPI_SAT_DEF_BIT_MASK_OTHER 0x04 /**< Bit Mask for Psh */ -#define TAPI_SAT_REFRESH_FILE_LIST 20 /**< Refresh File List*/ +/** + * @brief Definition for the maximum length of a menu title. + * @since_tizen 2.3 + */ +#define TAPI_SAT_DEF_TITLE_LEN_MAX 255 + +/** + * @brief Definition for the maximum length of a menu item. + * @since_tizen 2.3 + */ +#define TAPI_SAT_DEF_ITEM_STR_LEN_MAX 50 + +/** + * @brief Definition for the maximum length of a text string. + * @since_tizen 2.3 + */ +#define TAPI_SAT_DEF_TEXT_STRING_LEN_MAX 500 + +/** + * @brief Definition for the bit mask of a contact. + * @since_tizen 2.3 + */ +#define TAPI_SAT_DEF_BIT_MASK_CONTACT 0x01 + +/** + * @brief Definition for the bit mask of a message. + * @since_tizen 2.3 + */ +#define TAPI_SAT_DEF_BIT_MASK_MSG 0x02 + +/** + * @brief Definition for the bit mask of others. + * @since_tizen 2.3 + */ +#define TAPI_SAT_DEF_BIT_MASK_OTHER 0x04 + +/** + * @brief Definition for the refresh file list. + * @since_tizen 2.3 + */ +#define TAPI_SAT_REFRESH_FILE_LIST 20 #define TAPI_SAT_DEF_SS_LEN_MAX 250 #define TAPI_SAT_DEF_USSD_LEN_MAX 250 // Telephony UI USER CONFIRM TYPE /** - * @enum TelSatUiUserConfirmType_t - * This enumeration defines the UI User Confirm Type. + * @brief Enumeration for the UI user confirm type. + * @since_tizen 2.3 */ typedef enum { - TAPI_SAT_USER_CONFIRM_YES, /**