From 493fdd5c6249fad322561bb1d9af19b8116e23e2 Mon Sep 17 00:00:00 2001 From: Kyoungyoup Park Date: Wed, 22 Aug 2012 15:29:30 +0900 Subject: [PATCH] Tizen 2.0 beta Release Change-Id: I36ada55a843965b821029611753a1e3877808a50 --- AUTHORS | 6 + CMakeLists.txt | 47 +++ README | 1 + debian/changelog | 7 + debian/compat | 1 + debian/control | 21 ++ debian/copyright | 7 + debian/dirs | 2 + debian/docs | 0 debian/rules | 118 ++++++++ debian/tel-plugin-imcmodem.install.in | 1 + include/vnet.h | 54 ++++ packaging/tel-plugin-imcmodem.spec | 38 +++ src/desc-imcmodem.c | 395 ++++++++++++++++++++++++++ src/vnet.c | 150 ++++++++++ tool/Makefile | 20 ++ tool/main.c | 41 +++ 17 files changed, 909 insertions(+) create mode 100755 AUTHORS create mode 100755 CMakeLists.txt create mode 100755 README create mode 100755 debian/changelog create mode 100755 debian/compat create mode 100755 debian/control create mode 100755 debian/copyright create mode 100755 debian/dirs create mode 100755 debian/docs create mode 100755 debian/rules create mode 100755 debian/tel-plugin-imcmodem.install.in create mode 100755 include/vnet.h create mode 100755 packaging/tel-plugin-imcmodem.spec create mode 100755 src/desc-imcmodem.c create mode 100755 src/vnet.c create mode 100755 tool/Makefile create mode 100755 tool/main.c diff --git a/AUTHORS b/AUTHORS new file mode 100755 index 0000000..0e9faa9 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,6 @@ +Jongman Park +Ja-young Gu +Kyeongchul Kim +DongHoo Park +Youngman Park +Inho Oh diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..3e7b83b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,47 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(imcmodem-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 gthread-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} -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=\"IMCMODEM\"") + +MESSAGE(${CMAKE_C_FLAGS}) +MESSAGE(${CMAKE_EXE_LINKER_FLAGS}) + +SET(SRCS + src/desc-imcmodem.c + src/vnet.c +) + + +# library build +ADD_LIBRARY(imcmodem-plugin SHARED ${SRCS}) +TARGET_LINK_LIBRARIES(imcmodem-plugin ${pkgs_LDFLAGS}) +SET_TARGET_PROPERTIES(imcmodem-plugin PROPERTIES PREFIX "" OUTPUT_NAME imcmodem-plugin) + + + +# install +INSTALL(TARGETS imcmodem-plugin + LIBRARY DESTINATION lib/telephony/plugins) diff --git a/README b/README new file mode 100755 index 0000000..bbbc313 --- /dev/null +++ b/README @@ -0,0 +1 @@ +svnet plugin diff --git a/debian/changelog b/debian/changelog new file mode 100755 index 0000000..e9c50bb --- /dev/null +++ b/debian/changelog @@ -0,0 +1,7 @@ +tel-plugin-imcmodem (0.1.0) unstable; urgency=low + + * Initial + * Git: slp/pkgs/t/tel-plugin-imcmodem + * Tag: tel-plugin-imcmodem_0.1.0 + + -- Kyoungyoup Park Mon, 06 August 2012 22:37:29 +0900 diff --git a/debian/compat b/debian/compat new file mode 100755 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100755 index 0000000..cd3fb6f --- /dev/null +++ b/debian/control @@ -0,0 +1,21 @@ +Source: tel-plugin-imcmodem +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-imcmodem +Section: libs +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, +Description: telephony plugin library for AT communication with IMC modem (Shared Object) + +Package: tel-plugin-imcmodem-dbg +Section: debug +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, tel-plugin-imcmodem (= ${Source-Version}) +Description: telephony plugin library for AT communication with IMC modem (dbg package) + diff --git a/debian/copyright b/debian/copyright new file mode 100755 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 100755 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 100755 index 0000000..e69de29 diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..ab30b7c --- /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-imcmodem-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-imcmodem.install.in b/debian/tel-plugin-imcmodem.install.in new file mode 100755 index 0000000..f5b1d25 --- /dev/null +++ b/debian/tel-plugin-imcmodem.install.in @@ -0,0 +1 @@ +/usr/lib/* diff --git a/include/vnet.h b/include/vnet.h new file mode 100755 index 0000000..5689f76 --- /dev/null +++ b/include/vnet.h @@ -0,0 +1,54 @@ +/* + * tel-plugin-imcmodem + * + * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Kyoungyoup Park + * + * 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 _VNET_H_ +#define _VNET_H_ + + +#ifdef __cplusplus +extern "C" { +#endif + +enum vnet_cp_state { + VNET_CP_STATE_OFFLINE, + VNET_CP_STATE_CRASH_RESET, + VNET_CP_STATE_CRASH_EXIT, + VNET_CP_STATE_BOOTING, + VNET_CP_STATE_ONLINE, + VNET_CP_STATE_NV_REBUILDING, + VNET_CP_STATE_LOADER_DONE, +}; + +void vnet_start_cp_ramdump( void ); +void vnet_start_cp_reset( void ); +int vnet_get_cp_state( int fd ); + +int vnet_rfs0_open( void ); +int vnet_ipc0_open( void ); + + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif + diff --git a/packaging/tel-plugin-imcmodem.spec b/packaging/tel-plugin-imcmodem.spec new file mode 100755 index 0000000..f155973 --- /dev/null +++ b/packaging/tel-plugin-imcmodem.spec @@ -0,0 +1,38 @@ +#sbs-git:slp/pkgs/t/tel-plugin-imcmodem +Name: tel-plugin-imcmodem +Summary: telephony plugin library for AT communication with IMC modem +Version: 0.1.0 +Release: 1 +Group: System/Libraries +License: Apache +Source0: tel-plugin-imcmodem-%{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 +imcmodem plugin for telephony + +%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/* diff --git a/src/desc-imcmodem.c b/src/desc-imcmodem.c new file mode 100755 index 0000000..168f87d --- /dev/null +++ b/src/desc-imcmodem.c @@ -0,0 +1,395 @@ +/* + * tel-plugin-imcmodem + * + * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Kyoungyoup Park + * + * 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 "vnet.h" + +struct vnet_channel { + int fd; + guint watch_id; + gboolean on; +}; + +struct custom_data { + struct vnet_channel ipc0; +}; + +typedef gboolean(*cb_func)(GIOChannel *channel, GIOCondition condition, gpointer data); + +static gboolean on_recv_ipc_message(GIOChannel *channel, GIOCondition condition, gpointer data); + +static guint register_gio_watch(TcoreHal *p, int fd, void *callback); + +static TReturn hal_power(TcoreHal *h, gboolean flag); + +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; ifd ) { + g_source_remove( ch->watch_id ); + close( ch->fd ); + } + + ch->fd = vnet_ipc0_open(); + if ( ch->fd < 0 ) { + dbg("[ error ] vnet_ipc0_open()"); + return FALSE; + } + + ch->watch_id = register_gio_watch(h, ch->fd, recv_message); + + ch->on = TRUE; + + return ch->on; +} + +static void _ipc0_deinit( struct vnet_channel *ch ) +{ + g_source_remove( ch->watch_id ); + close( ch->fd ); + + ch->watch_id = 0; + ch->fd = 0; + ch->on = FALSE; +} + + +static gboolean _silent_reset( TcoreHal *h ) +{ + dbg("[ error ] cp crash : strat silent reset"); + tcore_hal_set_power_state(h, FALSE); + + dbg("[ error ] do nothing."); +#if 0 // this is not applicable code, now silent reset is not guaranteed ( 2012, 04, 19 ) + + vnet_start_cp_reset(); + + if ( !hal_power( h, TRUE ) ) { + dbg("[ check ] cp crash : silent reset done"); + return TRUE; + } + +#endif + + return FALSE; +} + +static gboolean _do_exception_operation( TcoreHal *h, int fd, GIOCondition con ) +{ + int state = -1; + struct custom_data *user_data = tcore_hal_ref_user_data( h ); + + dbg("entrance"); + + switch ( con ) { + case G_IO_HUP: { + state = vnet_get_cp_state( fd ); + if ( state < 0 ) { + dbg("[ error ] vnet_get_cp_state()"); + break; + } + + switch ( (enum vnet_cp_state)state ) { + case VNET_CP_STATE_CRASH_EXIT: { + dbg("[ error ] cp crash : strat ramdump"); + _ipc0_deinit( &user_data->ipc0 ); + vnet_start_cp_ramdump(); + + state = VNET_CP_STATE_CRASH_RESET; + + + } break; + + case VNET_CP_STATE_CRASH_RESET: { + + _ipc0_deinit( &user_data->ipc0 ); + + if (tcore_hal_get_power_state( h )) { + + state = VNET_CP_STATE_CRASH_RESET; + + if ( !_silent_reset( h ) ) { + dbg("[ error ] _silent_reset()"); + break; + } + } + + /* + * if current hal power state is FALSE, 'cp_reset' mean normal power off + * ( it's because of kernel concept ) + */ + state = VNET_CP_STATE_OFFLINE; + + } break; + + default: + dbg("useless state, state : (0x%x)", state); + return TRUE; + } + + } break; + + case G_IO_IN: + case G_IO_OUT: + case G_IO_PRI: + case G_IO_ERR: + case G_IO_NVAL: + dbg("[ error ] unknown problem, con : (0x%x)", con); + break; + + } + + tcore_hal_emit_recv_callback(h, sizeof(int), &state); + + dbg("done"); + + return TRUE; +} + +static TReturn hal_power(TcoreHal *h, gboolean flag) +{ + //TcorePlugin *p = 0; + struct custom_data *user_data = 0; + + gboolean ret = 0; + + user_data = tcore_hal_ref_user_data(h); + if (!user_data) + return TCORE_RETURN_FAILURE; + + if (flag == FALSE) { + /* power off not support */ + return TCORE_RETURN_FAILURE; + } + + ret = _ipc0_init( h, &user_data->ipc0, on_recv_ipc_message ); + if ( !ret ) + dbg("[ error ] _ipc0_init()"); + + tcore_hal_set_power_state(h, TRUE); + + return TCORE_RETURN_SUCCESS; +} + +static TReturn hal_send(TcoreHal *h, unsigned int data_len, void *data) +{ + int ret; + struct custom_data *user_data; + + if (tcore_hal_get_power_state(h) == FALSE) + return TCORE_RETURN_FAILURE; + + user_data = tcore_hal_ref_user_data(h); + if (!user_data) + return TCORE_RETURN_FAILURE; + + dbg("write (fd=%d, len=%d)", user_data->ipc0.fd, data_len); + + ret = write( user_data->ipc0.fd, (guchar *) data, data_len ); + if (ret < 0) + return TCORE_RETURN_FAILURE; + + return TCORE_RETURN_SUCCESS;; +} + +static struct tcore_hal_operations hops = +{ + .power = hal_power, + .send = hal_send, +}; + +static gboolean on_recv_ipc_message(GIOChannel *channel, GIOCondition condition, gpointer data) +{ + TcoreHal *h = data; + struct custom_data *custom; + + #define BUF_LEN_MAX 4096 + char buf[BUF_LEN_MAX]; + int n = 0; + + custom = tcore_hal_ref_user_data(h); + + if ( condition != G_IO_IN ) { + dbg("[ error ] svnet has a problem"); + return _do_exception_operation( h, custom->ipc0.fd, condition ); + } + + memset(buf, 0, BUF_LEN_MAX); + + n = read(custom->ipc0.fd, (guchar *) buf, BUF_LEN_MAX); + if (n < 0) { + err("read error. return_valute = %d", n); + return TRUE; + } + + msg("--[RECV]-------------------------"); + dbg("recv (len = %d)", n); + + tcore_hal_emit_recv_callback(h, n, buf); + msg("--[RECV FINISH]------------------\n"); + + /* Notice: Mode of any HAL is TCORE_HAL_MODE_AT as default. */ + tcore_hal_dispatch_response_data(h, 0, n, buf); + + return TRUE; +} + +static guint register_gio_watch(TcoreHal *h, 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 | G_IO_HUP, (GIOFunc) callback, h); + g_io_channel_unref(channel); + channel = NULL; + + return source; +} + +static gboolean on_load() +{ + struct utsname u; + char *vnet_models[] = { "SMDK4410", "SMDK4212", "SLP_PQ", "SLP_PQ_LTE", "SLP_NAPLES", "REDWOOD", "TRATS", NULL }; + int i = 0; + + memset(&u, 0, sizeof(struct utsname)); + uname(&u); + + dbg("u.nodename: [%s]", u.nodename); + + for (i = 0; vnet_models[i]; i++ ) { + if (!g_strcmp0(u.nodename, vnet_models[i])) { + return TRUE; + } + } + + /* + * Not supported model + * - unload this plugin. + */ + + return FALSE; +} + +static gboolean on_init(TcorePlugin *p) +{ + TcoreHal *h; + struct custom_data *data; + + if (!p) + return FALSE; + + dbg("i'm init!"); + + data = calloc(sizeof(struct custom_data), 1); + memset(data, 0, sizeof(struct custom_data)); + + + /* + * HAL init + */ + h = tcore_hal_new(p, "6262", &hops, TCORE_HAL_MODE_AT); + tcore_hal_link_user_data(h, data); + + return TRUE; +} + +static void on_unload(TcorePlugin *p) +{ + if (!p) + return; + + dbg("i'm unload"); +} + +struct tcore_plugin_define_desc plugin_define_desc = +{ + .name = "imcmodem", + .priority = TCORE_PLUGIN_PRIORITY_HIGH, + .version = 1, + .load = on_load, + .init = on_init, + .unload = on_unload +}; diff --git a/src/vnet.c b/src/vnet.c new file mode 100755 index 0000000..09f9d50 --- /dev/null +++ b/src/vnet.c @@ -0,0 +1,150 @@ +/* + * tel-plugin-imcmodem + * + * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: Kyoungyoup Park + * + * 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 + +#include + +#include "vnet.h" + +#ifndef __USE_GNU +#define __USE_GNU +#endif + + +#define MODEM_IMAGE_PATH "/boot/modem.bin" +#define NV_DIR_PATH "/csa/nv" +#define NV_FILE_PATH NV_DIR_PATH"/nvdata.bin" + +#define VNET_CH_PATH_BOOT0 "/dev/umts_boot0" +#define VNET_CH_PATH_IPC0 "/dev/umts_ipc0" + +#define IOCTL_MODEM_STATUS _IO('o', 0x27) + +void vnet_start_cp_ramdump() +{ + int ret; + ret = system("/usr/bin/xmm6262-boot -o u &"); + dbg("system(/usr/bin/xmm6262-boot -o u &) ret[%d]",ret) +} + +void vnet_start_cp_reset() +{ + int ret; + ret = system("/usr/bin/xmm6262-boot &"); + dbg("system(/usr/bin/xmm6262-boot &) ret[%d]",ret) +} + +int vnet_get_cp_state( int fd ) +{ + enum vnet_cp_state state = VNET_CP_STATE_ONLINE; + + state = ioctl( fd, IOCTL_MODEM_STATUS ); + + switch ( state ) { + case VNET_CP_STATE_OFFLINE: + dbg("cp state : offline"); + break; + + case VNET_CP_STATE_CRASH_RESET: + dbg("cp state : crash_reset"); + break; + + case VNET_CP_STATE_CRASH_EXIT: + dbg("cp state : crash_exit"); + break; + + case VNET_CP_STATE_BOOTING: + dbg("cp state : boot"); + break; + + case VNET_CP_STATE_ONLINE: + dbg("cp state : online"); + break; + + case VNET_CP_STATE_NV_REBUILDING: + dbg("cp state : nv rebuild"); + break; + + case VNET_CP_STATE_LOADER_DONE: + dbg("cp state : loader done"); + break; + + default: + dbg("cp state : unknown state"); + return -1; + } + + return (int)state; +} + +int vnet_ipc0_open() +{ + int state; + int fd = 0, cnt = 0; + + fd = open ( VNET_CH_PATH_BOOT0, O_RDWR ); + if ( fd < 0 ) { + dbg("error : open [ %s ] [ %s ]", VNET_CH_PATH_BOOT0, strerror(errno)); + return -1; + } + + while ( 1 ) { + + state = vnet_get_cp_state( fd ); + + if ( (enum vnet_cp_state)state != VNET_CP_STATE_ONLINE ) { + usleep(500000); + + } else { + fd = open ( VNET_CH_PATH_IPC0, O_RDWR ); + if ( fd < 0 ) { + dbg("error : open [ %s ] [ %s ]", VNET_CH_PATH_IPC0, strerror(errno)); + return -1; + } + + break ; + } + + if ( ++cnt > 1000 ) + return -1; + } + + return fd; +} diff --git a/tool/Makefile b/tool/Makefile new file mode 100755 index 0000000..0a81701 --- /dev/null +++ b/tool/Makefile @@ -0,0 +1,20 @@ +TARGET = nv_validation_test + +SRCS = main.c ../src/nvdata.c +OBJS = $(SRCS:.c=.o) +PKGS = tcore glib-2.0 gobject-2.0 + +CC = gcc +CFLAGS = -Wall -g `pkg-config --cflags $(PKGS)` -I../include +LIBS = `pkg-config --libs $(PKGS)` + +all: $(TARGET) + +$(TARGET): $(OBJS) + $(CC) $(OBJS) $(LIBS) -o $(TARGET) + +.c.o: $(SRCS) + $(CC) $(CFLAGS) -c $^ -o $@ + +clean: + rm -f $(OBJS) $(TARGET) diff --git a/tool/main.c b/tool/main.c new file mode 100755 index 0000000..670785a --- /dev/null +++ b/tool/main.c @@ -0,0 +1,41 @@ +/** + * tel-plugin-imcmodem + * + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved + * + * Contact: Ja-young Gu + * + * PROPRIETARY/CONFIDENTIAL + * + * This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). + * You shall not disclose such Confidential Information and shall + * use it only in accordance with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. + * SAMSUNG make no representations or warranties about the suitability + * of the software, either express or implied, including but not + * limited to the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. + * SAMSUNG shall not be liable for any damages suffered by licensee as + * a result of using, modifying or distributing this software or its derivatives. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "../include/nvdata.h" + +int main(int arg, char **argv) +{ + + imcmodem_nvdata_init(); + + printf("update!\n"); + + imcmodem_nvdata_update_validation(); + + return 0; +} + -- 2.34.1