From: Kim Kibum Date: Sun, 29 Apr 2012 08:02:04 +0000 (+0900) Subject: upload tizen1.0 source X-Git-Tag: 2.0_alpha~2 X-Git-Url: http://review.tizen.org/git/?p=framework%2Ftelephony%2Ftel-plugin-vmodem.git;a=commitdiff_plain;h=d983607ecc98fb6e98413dcbdca607fd05d0a034 upload tizen1.0 source --- diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..19aadbb --- /dev/null +++ b/AUTHORS @@ -0,0 +1,10 @@ +Jongman Park +Ja-young Gu +Kyeongchul Kim +DongHoo Park +Youngman Park +Inho Oh +Hayoon Ko +Junhwan An +Kyoungyoup Park +Jinyup Kim diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..d39fc40 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,46 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(vmodem-plugin C) + +### Global setting ### +SET(PREFIX ${CMAKE_INSTALL_PREFIX}) +SET(EXEC_PREFIX "\${prefix}") +SET(LIBDIR "\${prefix}/lib") +SET(INCLUDEDIR "\${prefix}/include") +SET(PKGCONFIGDIR "${PREFIX}/lib/pkgconfig" CACHE PATH PKGCONFIGDIR) +SET(CMAKE_INSTALL_PREFIX "${PREFIX}") + +# Set required packages +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs REQUIRED glib-2.0 tcore dlog) + +FOREACH(flag ${pkgs_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include/) + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Werror -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wdeclaration-after-statement -Wmissing-declarations -Wredundant-decls -Wcast-align") + +ADD_DEFINITIONS("-DFEATURE_DLOG_DEBUG") +ADD_DEFINITIONS("-DTCORE_LOG_TAG=\"VMODEM\"") + +MESSAGE(${CMAKE_C_FLAGS}) +MESSAGE(${CMAKE_EXE_LINKER_FLAGS}) + +SET(SRCS + src/desc-vmodem.c + src/vdpram.c + src/vdpram_dump.c +) + + + +# library build +ADD_LIBRARY(vmodem-plugin SHARED ${SRCS}) +TARGET_LINK_LIBRARIES(vmodem-plugin ${pkgs_LDFLAGS}) +SET_TARGET_PROPERTIES(vmodem-plugin PROPERTIES PREFIX "" OUTPUT_NAME vmodem-plugin) + + +# install +INSTALL(TARGETS vmodem-plugin + LIBRARY DESTINATION lib/telephony/plugins) diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..bae7f54 --- /dev/null +++ b/LICENSE @@ -0,0 +1,204 @@ +Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + diff --git a/README b/README new file mode 100644 index 0000000..b3ad87b --- /dev/null +++ b/README @@ -0,0 +1 @@ +AT based virtual modem plugin diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..ff28f39 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,31 @@ +tel-plugin-vmodem (0.1.3) unstable; urgency=low + + * Fix prefix (TAPI_ to TCORE_) + * Git: slp/pkgs/t/tel-plugin-vmodem + * Tag: tel-plugin-vmodem_0.1.3 + + -- Inho Oh Tue, 27 Mar 2012 22:11:38 +0900 + +tel-plugin-vmodem (0.1.2) unstable; urgency=low + + * Fix build break and Add .spec file for OBS + * Git: slp/pkgs/t/tel-plugin-vmodem + * Tag: tel-plugin-vmodem_0.1.2 + + -- DongHoo Park Sat, 17 Mar 2012 02:30:20 +0900 + +tel-plugin-vmodem (0.1.1) unstable; urgency=low + + * Remove unused header + * Git: slp/pkgs/t/tel-plugin-vmodem + * Tag: tel-plugin-vmodem_0.1.1 + + -- Inho Oh Fri, 16 Mar 2012 02:39:47 +0900 + +tel-plugin-vmodem (0.1.0) unstable; urgency=low + + * Initial + * Git: slp/pkgs/t/tel-plugin-vmodem + * Tag: tel-plugin-vmodem_0.1.0 + + -- Inho Oh Thu, 27 Mar 2012 20:50:00 +0900 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..c23e189 --- /dev/null +++ b/debian/control @@ -0,0 +1,20 @@ +Source: tel-plugin-vmodem +Section: libs +Priority: extra +Maintainer: Jongman Park +Uploaders: Jayoung Gu , Kyeongchul Kim , Youngman Park , Inho Oh , DongHoo Park +Build-Depends: debhelper (>= 5), libglib2.0-dev, libtcore-dev, dlog-dev +Standards-Version: 0.0.0 + +Package: tel-plugin-vmodem +Section: libs +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, +Description: telephony client API library (Shared Object) + +Package: tel-plugin-vmodem-dbg +Section: debug +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, tel-plugin-vmodem (= ${Source-Version}) +Description: telephony client API library (dbg package) + diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..d5a0cca --- /dev/null +++ b/debian/copyright @@ -0,0 +1,7 @@ +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License version 2.1. + +The full text of the LGPL 2.1 can be found in +/usr/share/common-licenses. diff --git a/debian/dirs b/debian/dirs new file mode 100644 index 0000000..ca882bb --- /dev/null +++ b/debian/dirs @@ -0,0 +1,2 @@ +usr/bin +usr/sbin diff --git a/debian/docs b/debian/docs new file mode 100644 index 0000000..e69de29 diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..f379803 --- /dev/null +++ b/debian/rules @@ -0,0 +1,118 @@ +#!/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 +CFLAGS += -fvisibility=default -fPIC +LDFLAGS += -rdynamic -fPIC -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=tel-plugin-vmodem-dbg + dh_compress + dh_fixperms +# dh_perl + dh_makeshlibs + dh_installdeb + dh_shlibdeps --dpkg-shlibdeps-params="-v" + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/debian/tel-plugin-vmodem.install.in b/debian/tel-plugin-vmodem.install.in new file mode 100644 index 0000000..112242d --- /dev/null +++ b/debian/tel-plugin-vmodem.install.in @@ -0,0 +1 @@ +@PREFIX@/lib/* diff --git a/include/legacy/TelUtility.h b/include/legacy/TelUtility.h new file mode 100644 index 0000000..eb056e2 --- /dev/null +++ b/include/legacy/TelUtility.h @@ -0,0 +1,165 @@ +/* + * libslp-tapi + * + * Copyright (c) 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Kyeongchul Kim + * + * 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 +* @{ +* +* @file TelUtility.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. + */ + +#ifndef _TEL_UTILITY_H_ +#define _TEL_UTILITY_H_ +/*================================================================================================== + INCLUDE FILES +==================================================================================================*/ +#ifdef __cplusplus +extern "C" +{ +#endif + +/*================================================================================================== + CONSTANTS +==================================================================================================*/ + + +/*================================================================================================== + MACROS +==================================================================================================*/ +#define INVALID_REQUEST_ID -1 /**< Invalid RequestId Value */ + + +/*================================================================================================== + ENUMS +==================================================================================================*/ +/** +* @enum TapiResult_t +* Below enumerations are the return codes of TAPI API's +*/ +typedef enum +{ + TAPI_API_SUCCESS = 0, /** + * + * 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 __VDPRAM_H__ +#define __VDPRAM_H__ + +int vdpram_close(int fd); +int vdpram_open (void); +int vdpramerr_open(void); +int vdpram_poweron(int fd); +int vdpram_poweroff(int fd); + +int vdpram_tty_read(int nFd, void* buf, size_t nbytes); +int vdpram_tty_write(int nFd, void* buf, size_t nbytes); + +#endif diff --git a/include/vdpram_dump.h b/include/vdpram_dump.h new file mode 100644 index 0000000..e98a275 --- /dev/null +++ b/include/vdpram_dump.h @@ -0,0 +1,30 @@ +/* + * tel-plugin-vmodem + * + * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Junhwan An + * + * 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 __VDPRAM_DUMP_H__ +#define __VDPRAM_DUMP_H__ + +#define IPC_TX 0 +#define IPC_RX 1 + +void vdpram_hex_dump(int dir, unsigned short data_len, void *data); + +#endif + diff --git a/packaging/tel-plugin-vmodem.spec b/packaging/tel-plugin-vmodem.spec new file mode 100644 index 0000000..72adf28 --- /dev/null +++ b/packaging/tel-plugin-vmodem.spec @@ -0,0 +1,38 @@ +#sbs-git:slp/pkgs/t/tel-plugin-vmodem +Name: tel-plugin-vmodem +Summary: Telephony AT Virtual Modem library +Version: 0.1.2 +Release: 1 +Group: System/Libraries +License: Apache +Source0: tel-plugin-vmodem-%{version}.tar.gz +Requires(post): /sbin/ldconfig +Requires(postun): /sbin/ldconfig +BuildRequires: cmake +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(dlog) +BuildRequires: pkgconfig(tcore) + +%description +Telephony AT Modem library + +%prep +%setup -q + +%build +cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} +make %{?jobs:-j%jobs} + +%post +/sbin/ldconfig + +%postun -p /sbin/ldconfig + +%install +rm -rf %{buildroot} +%make_install + +%files +%defattr(-,root,root,-) +#%doc COPYING +%{_libdir}/telephony/plugins/vmodem-plugin* diff --git a/packaging/unused b/packaging/unused new file mode 100644 index 0000000..5364927 --- /dev/null +++ b/packaging/unused @@ -0,0 +1 @@ +this package is not used in OBS diff --git a/src/desc-vmodem.c b/src/desc-vmodem.c new file mode 100644 index 0000000..d240de8 --- /dev/null +++ b/src/desc-vmodem.c @@ -0,0 +1,212 @@ +/* + * tel-plugin-vmodem + * + * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Junhwan An + * + * 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. + */ + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include + +#include "vdpram.h" + +struct custom_data { + int vdpram_fd; + guint watch_id_vdpram; +}; + +static TReturn hal_power(TcoreHal *hal, gboolean flag) +{ + struct custom_data *user_data; + + user_data = tcore_hal_ref_user_data(hal); + if (!user_data) + return TCORE_RETURN_FAILURE; + + /* power on */ + if (flag == TRUE) { + if (FALSE == vdpram_poweron(user_data->vdpram_fd)) { + err("vdpram_poweron failed"); + return TCORE_RETURN_FAILURE; + } + tcore_hal_set_power_state(hal, TRUE); + } + /* power off */ + else { + if (FALSE == vdpram_poweroff(user_data->vdpram_fd)) { + err("vdpram_poweroff failed"); + return TCORE_RETURN_FAILURE; + } + tcore_hal_set_power_state(hal, FALSE); + } + + return TCORE_RETURN_SUCCESS; +} + + +static TReturn hal_send(TcoreHal *hal, unsigned int data_len, void *data) +{ + int ret; + struct custom_data *user_data; + + if (tcore_hal_get_power_state(hal) == FALSE) + return TCORE_RETURN_FAILURE; + + user_data = tcore_hal_ref_user_data(hal); + if (!user_data) + return TCORE_RETURN_FAILURE; + + ret = vdpram_tty_write(user_data->vdpram_fd, data, data_len); + if(ret < 0) { + err("vdpram_tty_write failed"); + return TCORE_RETURN_FAILURE; + } + else { + dbg("vdpram_tty_write success ret=%d (fd=%d, len=%d)", ret, user_data->vdpram_fd, data_len); + return TCORE_RETURN_SUCCESS; + } +} + + +static struct tcore_hal_operations hops = +{ + .power = hal_power, + .send = hal_send, +}; + +static gboolean on_recv_vdpram_message(GIOChannel *channel, GIOCondition condition, gpointer data) +{ + TcorePlugin *plugin = data; + TcoreHal *hal; + struct custom_data *custom; + + #define BUF_LEN_MAX 512 + char buf[BUF_LEN_MAX]; + int n = 0; + + hal = tcore_plugin_ref_hal(plugin); + custom = tcore_hal_ref_user_data(hal); + memset(buf, 0, BUF_LEN_MAX); + n = vdpram_tty_read(custom->vdpram_fd, buf, BUF_LEN_MAX); + if (n < 0) { + err("tty_read error. return_valute = %d", n); + return TRUE; + } + + dbg("vdpram recv (ret = %d)", n); + tcore_hal_emit_recv_callback(hal, n, buf); + + return TRUE; +} + +static guint register_gio_watch(TcorePlugin *plugin, int fd, void *callback) +{ + GIOChannel *channel = NULL; + guint source; + + if (fd < 0 || !callback) + return 0; + + channel = g_io_channel_unix_new(fd); + source = g_io_add_watch(channel, G_IO_IN, (GIOFunc) callback, plugin); + g_io_channel_unref(channel); + channel = NULL; + + return source; +} + + +/*static int power_tx_pwr_on_exec(int nFd) +{ + Not implement yet + return 0; +}*/ + +static gboolean on_load() +{ + dbg("i'm load!"); + + return TRUE; +} + +static gboolean on_init(TcorePlugin *plugin) +{ + TcoreHal *hal; + struct custom_data *data; + + if (!plugin) + return FALSE; + + dbg("i'm init!"); + + /* + * Phonet init + */ + data = calloc(sizeof(struct custom_data), 1); + memset(data, 0, sizeof(struct custom_data)); + + data->vdpram_fd = vdpram_open(); + + /* + * HAL init + */ + hal = tcore_hal_new(plugin, "vmodem", &hops); + tcore_hal_link_user_data(hal, data); + + data->watch_id_vdpram= register_gio_watch(plugin, data->vdpram_fd, on_recv_vdpram_message); + + dbg("vdpram_fd = %d, watch_id_vdpram=%d ", data->vdpram_fd, data->watch_id_vdpram); + + if (!vdpram_poweron(data->vdpram_fd)) + err("vdpram_poweron Failed"); + +// power_tx_pwr_on_exec(data->vdpram_fd); + + return TRUE; +} + +static void on_unload(TcorePlugin *plugin) +{ + if (!plugin) + return; + + dbg("i'm unload"); +} + +struct tcore_plugin_define_desc plugin_define_desc = +{ + .name = "VMODEM", + .priority = TCORE_PLUGIN_PRIORITY_HIGH, + .version = 1, + .load = on_load, + .init = on_init, + .unload = on_unload +}; diff --git a/src/vdpram.c b/src/vdpram.c new file mode 100644 index 0000000..7613b59 --- /dev/null +++ b/src/vdpram.c @@ -0,0 +1,520 @@ +/* + * tel-plugin-vmodem + * + * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Junhwan An + * + * 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. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "legacy/TelUtility.h" +#include "vdpram.h" +#include "vdpram_dump.h" + +#ifndef TIOCMODG +# ifdef TIOCMGET +# define TIOCMODG TIOCMGET +# else +# ifdef MCGETA +# define TIOCMODG MCGETA +# endif +# endif +#endif + +#ifndef TIOCMODS +# ifdef TIOCMSET +# define TIOCMODS TIOCMSET +# else +# ifdef MCSETA +# define TIOCMODS MCSETA +# endif +# endif +#endif + +typedef struct _tty_old_setting_t{ + int fd; + struct termios termiosVal; + struct _tty_old_setting_t *next; + struct _tty_old_setting_t *prev; +} tty_old_setting_t; + +#define VDPRAM_OPEN_PATH "/dev/dpram/0" + +/* DPRAM ioctls for DPRAM tty devices */ +#define IOC_MZ_MAGIC ('h') +#define HN_DPRAM_PHONE_ON _IO (IOC_MZ_MAGIC, 0xd0) +#define HN_DPRAM_PHONE_OFF _IO (IOC_MZ_MAGIC, 0xd1) +#define HN_DPRAM_PHONE_GETSTATUS _IOR(IOC_MZ_MAGIC, 0xd2, unsigned int) + +static tty_old_setting_t *ttyold_head = NULL; + +/* static functions */ +static void __insert_tty_oldsetting(tty_old_setting_t *me) +{ + dbg("Function Enterence."); + + if (me == NULL) + return; + + if (ttyold_head) + ttyold_head->prev = me; + + me->next = ttyold_head; + me->prev = 0; + ttyold_head = me; +} + +static tty_old_setting_t *__search_tty_oldsetting(int fd) +{ + tty_old_setting_t *tty = NULL; + + dbg("Function Enterence."); + + if (ttyold_head == NULL) + return NULL; + + tty = ttyold_head; + + do{ + if (tty->fd == fd) { + dbg("oldsetting for inputted fd is found"); + break; + } + else { + if (tty->next == NULL) { + dbg("No oldsetting is found"); + tty = NULL; + break; + } + tty = tty->next; + } + }while(1); + + return tty; +} + +static void __remove_tty_oldsetting(tty_old_setting_t *me) +{ + dbg( "Function Enterence."); + + if (me == NULL) + return; + + if (me->prev) + me->prev->next = me->next; + else + ttyold_head = me->next; + + if (me->next) + me->next->prev = me->prev; +} + +/* Set hardware flow control. +*/ +static void __tty_sethwf(int fd, int on) +{ + struct termios tty; + + dbg("Function Enterence."); + + if (tcgetattr(fd, &tty)) + err("__tty_sethwf: tcgetattr:"); + + if (on) + tty.c_cflag |= CRTSCTS; + else + tty.c_cflag &= ~CRTSCTS; + + if (tcsetattr(fd, TCSANOW, &tty)) + err("__tty_sethwf: tcsetattr:"); +} + +/* +* Set RTS line. Sometimes dropped. Linux specific? +*/ +static int __tty_setrts(int fd) +{ + int mcs; + + dbg("Function Enterence."); + + if (-1 == ioctl(fd, TIOCMODG, &mcs)) + err("icotl: TIOCMODG"); + + mcs |= TIOCM_RTS; + + if (-1 == ioctl(fd, TIOCMODS, &mcs)) + err("icotl: TIOCMODS"); + + return 0; +} + +/* + * Set baudrate, parity and number of bits. + */ +static int __tty_setparms(int fd, char* baudr, char* par, char* bits, char* stop, int hwf, int swf) +{ + int spd = -1; + int newbaud; + int bit = bits[0]; + int stop_bit = stop[0]; + + struct termios tty; + tty_old_setting_t *old_setting = NULL; + + dbg("Function Enterence."); + + old_setting = calloc(sizeof(tty_old_setting_t), 1); + + if (old_setting == NULL) + return TAPI_API_SYSTEM_OUT_OF_MEM; + + old_setting->fd = fd; + + if (tcgetattr(fd, &tty) < 0) { + free(old_setting); + return TAPI_API_TRANSPORT_LAYER_FAILURE; + } + + if (tcgetattr(fd, &old_setting->termiosVal) < 0) { + free(old_setting); + return TAPI_API_TRANSPORT_LAYER_FAILURE; + } + + __insert_tty_oldsetting(old_setting); + + fflush(stdout); + + /* We generate mark and space parity ourself. */ + if (bit == '7' && (par[0] == 'M' || par[0] == 'S')) + bit = '8'; + + /* Check if 'baudr' is really a number */ + if ((newbaud = (atol(baudr) / 100)) == 0 && baudr[0] != '0') + newbaud = -1; + + switch(newbaud) + { + case 0: + spd = 0; + break; + + case 3: + spd = B300; + break; + + case 6: + spd = B600; + break; + + case 12: + spd = B1200; + break; + + case 24: + spd = B2400; + break; + + case 48: + spd = B4800; + break; + + case 96: + spd = B9600; + break; + + case 192: + spd = B19200; + break; + + case 384: + spd = B38400; + break; + + case 576: + spd = B57600; + break; + + case 1152: + spd = B115200; + break; + + default: + err("invaid baud rate"); + break; + } + + if (spd != -1) { + cfsetospeed(&tty, (speed_t) spd); + cfsetispeed(&tty, (speed_t) spd); + } + + switch(bit) + { + case '5': + tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS5; + break; + + case '6': + tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS6; + break; + + case '7': + tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS7; + break; + + case '8': + default: + tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8; + break; + } + + switch(stop_bit) + { + case '1': + tty.c_cflag &= ~CSTOPB; + break; + + case '2': + default: + tty.c_cflag |= CSTOPB; + break; + } + + /* Set into raw, no echo mode */ + tty.c_iflag = IGNBRK; + tty.c_lflag = 0; + tty.c_oflag = 0; + tty.c_cflag |= CLOCAL | CREAD; + tty.c_cc[VMIN] = 1; + tty.c_cc[VTIME] = 1; + + if (swf) + tty.c_iflag |= IXON | IXOFF; + else + tty.c_iflag &= ~(IXON | IXOFF | IXANY); + + tty.c_cflag &= ~(PARENB | PARODD); + + if (par[0] == 'E') + tty.c_cflag |= PARENB; + else if (par[0] == 'O') + tty.c_cflag |= (PARENB | PARODD); + + if (tcsetattr(fd, TCSANOW, &tty) < 0) { + free(old_setting); + return TAPI_API_TRANSPORT_LAYER_FAILURE; + } + + __tty_setrts(fd); + __tty_sethwf(fd, hwf); + + return TAPI_API_SUCCESS; + +} + +static int __tty_close(int fd) +{ + tty_old_setting_t *old_setting = NULL; + + dbg("Function Enterence."); + + old_setting = __search_tty_oldsetting(fd); + if (old_setting == NULL) + return TAPI_API_SUCCESS; + + if (tcsetattr(fd, TCSAFLUSH, &old_setting->termiosVal) < 0) { + err("close failed"); + return TAPI_API_TRANSPORT_LAYER_FAILURE; + } + + __remove_tty_oldsetting(old_setting); + + free(old_setting); + + close(fd); + + return TAPI_API_SUCCESS; +} + +/* +* restore the old settings before close. +*/ +int vdpram_close(int fd) +{ + int ret = TAPI_API_SUCCESS; + + dbg("Function Enterence."); + + ret = __tty_close(fd); + + return ret; +} + +/* +* Open the vdpram fd. +*/ +int vdpram_open (void) +{ + int rv = -1; + int fd = -1; + int val = 0; + unsigned int cmd =0; + + fd = open(VDPRAM_OPEN_PATH, O_RDWR); + + if (fd < 0) { + err("#### Failed to open vdpram file: error no hex %x", errno); + return rv; + } + else + dbg("#### Success to open vdpram file. fd:%d, path:%s", fd, VDPRAM_OPEN_PATH); + + + if (__tty_setparms(fd, "115200", "N", "8", "1", 0, 0) != TAPI_API_SUCCESS) { + vdpram_close(fd); + return rv; + } + else + dbg("#### Success set tty vdpram params. fd:%d", fd); + + /*TODO: No need to check Status. Delete*/ + cmd = HN_DPRAM_PHONE_GETSTATUS; + + if (ioctl(fd, cmd, &val) < 0) { + err("#### ioctl failed fd:%d, cmd:%lu, val:%d", fd,cmd,val); + vdpram_close(fd); + return rv; + } + else + dbg("#### ioctl Success fd:%d, cmd:%lu, val:%d", fd,cmd,val); + + return fd; + +} + +/* +* power on the phone. +*/ +int vdpram_poweron(int fd) +{ + int rv = -1; + + if (ioctl(fd, HN_DPRAM_PHONE_ON, NULL) < 0) { + err("Phone Power On failed (fd:%d)", fd); + rv = 0; + } + else { + dbg("Phone Power On success (fd:%d)", fd); + rv = 1; + } + return rv; +} + + /* + * Power Off the Phone. + */ +int vdpram_poweroff(int fd) +{ + int rv; + + if (ioctl(fd, HN_DPRAM_PHONE_OFF, NULL) < 0) { + err("Phone Power Off failed."); + rv = -1; + } + else { + dbg("Phone Power Off success."); + rv = 1; + } + + return rv; +} + +/* +* Read data from vdpram. +*/ + +int vdpram_tty_read(int nFd, void* buf, size_t nbytes) +{ + int actual = 0; + + if ((actual = read(nFd, buf, nbytes)) < 0) { + dbg("[TRANSPORT DPRAM]read failed."); + } + vdpram_hex_dump(IPC_RX, actual, buf); + + return actual; +} + +static void __selectsleep(int sec,int msec) +{ + struct timeval tv; + tv.tv_sec=sec; + tv.tv_usec=msec; + select(0,NULL,NULL,NULL,&tv); + return; +} + +/* +* Write data to vdpram. +*/ +int vdpram_tty_write(int nFd, void* buf, size_t nbytes) +{ + int ret; + size_t actual = 0; + int retry = 0; + + do { + vdpram_hex_dump(IPC_TX, nbytes, buf); + ret = write(nFd, (unsigned char* )buf, nbytes - actual); + + if ((ret < 0 && errno == EAGAIN) || (ret < 0 && errno == EBUSY)) { + err("write failed. retry.. ret[%d] with errno[%d] ",ret, errno); + __selectsleep(0,50); + + if (retry == 10) + return 0; + + retry = retry + 1; + continue; + } + + if (ret < 0) { + if (actual != nbytes) + err("write failed.ret[%d]",ret); + + err("errno [%d]",errno); + return actual; + } + + actual += ret; + buf += ret; + + } while(actual < nbytes); + + return actual; +} +/* EOF */ diff --git a/src/vdpram_dump.c b/src/vdpram_dump.c new file mode 100644 index 0000000..d2992e8 --- /dev/null +++ b/src/vdpram_dump.c @@ -0,0 +1,80 @@ +/* + * tel-plugin-vmodem + * + * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Junhwan An + * + * 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. + */ + +#include +#include +#include +#include + +#include "vdpram_dump.h" + +static void hex_dump(char *pad, int size, const void *data) +{ + char buf[255] = {0, }; + char hex[4] = {0, }; + int i; + unsigned char *p; + + if (size <= 0) { + msg("%sno data", pad); + return; + } + + p = (unsigned char *)data; + + snprintf(buf, 255, "%s%04X: ", pad, 0); + for (i = 0; i