3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * Licensed under the Apache License, Version 2.0 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
26 #include <vconf-keys.h>
27 /*#include "package-manager.h"*/
30 #include <sync_agent.h>
32 #include "plugin_slp_device_ctrl.h"
34 #ifndef OMADM_AGENT_LOG
36 #define LOG_TAG "PLUGIN_DEVICE_SLP_DM"
39 #define RB_ERR_CODE_MAX_COUNT 16
41 typedef struct _type_Redbend_OMADM_Table {
46 } type_redbend_omadm_table_s;
48 type_redbend_omadm_table_s redbend_omadm_table[RB_ERR_CODE_MAX_COUNT] = {
49 {200, "Successful", "0", "S_RB_SUCCESS"},
50 {410, "Firmware Update Failed", "1", "E_RB_*"}, // juhaki.park
51 {402, "Corrupted Firmware Update Package", "8000000D", "E_RB_PKG_CORRUPTED"},
52 {403, "Firmware Update Package - Device Mismatch", "80000002", "E_RB_BAD_PARAMS"},
53 {403, "Firmware Update Package - Device Mismatch", "80000011", "E_RB_WRONG_UPI_VER"},
54 {403, "Firmware Update Package - Device Mismatch", "80000012", "E_RB_WRONG_UPI_UPDATE"},
55 {403, "Firmware Update Package - Device Mismatch", "80000013", "E_RB_UPDATE_SECTOR_SIG"},
56 {404, "Failed Firmware Update Package Validation", "8001001A", "E_RB_NON_DP_FORMAT_NOT_SUPPORTED"},
57 {404, "Failed Firmware Update Package Validation", "80010025", "E_RB_INVALID_DP_HEADER"},
58 {404, "Failed Firmware Update Package Validation", "80010026", "E_RB_INVALID_DP_WRONG_SIGNATURE"},
59 {404, "Failed Firmware Update Package Validation", "80010027", "E_RB_INVALID_DP"},
60 {405, "Firmware Update Package Not Acceptable", "8000000B", "E_RB_PKG_TOO_SHORT"},
61 {405, "Firmware Update Package Not Acceptable", "8000000C", "E_RB_PKG_TOO_LONG"},
62 {405, "Firmware Update Package Not Acceptable", "8000000E", "E_RB_PKG_NOT_AUTHORIZED"},
63 {410, "Firmware Update Failed", "**", "E_RB_*"},
64 {502, "Firmware update fails due to device out of memory", "8000001E", "E_RB_NOT_ENOUGH_RAM"},
66 /*{0, NULL, NULL, NULL},*/
69 static int _system_command(const char *command);
70 /*static int __get_mobile_tracker_status();*/
71 /*static int __return_pkgmgr_cb(pkg_request_id req_id, const char *pkg_type, const char *pkg_name, const char *key, const char *val, const void *pmsg, void *data);*/
73 int slp_device_ctrl_set_fota_flag()
78 2010.09.08 document base
79 ("echo fota_enable > /sys/devices/platform/s3c_samsung_fota/samsung_fota_config");
80 _DEBUG_INFO("echo fota_enable > /sys/devices/platform/s3c_samsung_fota/samsung_fota_config \n");
81 2011.03.23 document base
82 ("/bin/change-booting-mode.sh --fota /opt/data/fota");
85 _DEBUG_INFO("/bin/change-booting-mode.sh --fota /opt/data/fota/save \n");
86 int ret = _system_command("/bin/change-booting-mode.sh --fota /opt/data/fota/save");
98 int slp_device_ctrl_get_fota_update_result()
102 int update_result = 400;
104 long lSize = 0; /*prevent */
106 file_des = fopen("/opt/result", "rb");
108 bool match_found = false;
109 if (file_des == NULL) {
110 _DEBUG_INFO("fopen fail - result file \n");
114 fseek(file_des, 0, SEEK_END);
115 lSize = ftell(file_des);
117 _DEBUG_INFO("ftell nagative return ");
118 if (file_des != NULL)
124 char *str_result = NULL;
125 str_result = (char *)calloc(1, lSize + 1);
126 if (str_result == NULL) {
127 if (file_des != NULL)
129 _DEBUG_INFO("malloc fail \n");
134 result = fread(str_result, 1, lSize, file_des);
135 if ((result != lSize) || (str_result == NULL)) {
136 if (file_des != NULL)
138 _DEBUG_INFO("read fail or str_result == NULL \n");
140 if (str_result != NULL)
146 if (str_result[lSize - 1] == '\n')
147 str_result[lSize - 1] = 0;
149 for (j = 0; j < RB_ERR_CODE_MAX_COUNT; j++) {
150 if (strlen(str_result) == strlen(redbend_omadm_table[j].result_redbend)) {
151 if ((strcmp(str_result, redbend_omadm_table[j].result_redbend) == 0)) {
152 update_result = redbend_omadm_table[j].result_code;
154 _DEBUG_INFO("Redbend[%s] \n", redbend_omadm_table[j].str_redbend);
155 break; /* If existing error code, break-out from the for-loop. */
162 if (str_result != NULL)
165 if (file_des != NULL)
168 _DEBUG_INFO("update_result - %d \n", update_result);
170 return update_result;
173 int slp_device_ctrl_reboot()
177 int ret = _system_command("/sbin/reboot");
183 /*will be insert.. // tel_process_power_command(TAPI_PHONE_POWER_RESET); ?? */
188 int slp_device_ctrl_fully_lock()
192 /*if (__get_mobile_tracker_status() == 0 ) {
193 _DEBUG_INFO("mobile tracker status OFF \n");
197 ("/opt/apps/deb.com.samsung.pwlock/bin/pwlock 1 &");
204 int slp_device_ctrl_partially_lock()
208 /*if (__get_mobile_tracker_status() == 0 ) {
209 _DEBUG_INFO("mobile tracker status OFF \n");
213 ("/opt/apps/deb.com.samsung.pwlock/bin/pwlock 1 &");
220 int slp_device_ctrl_unlock()
224 /*if (__get_mobile_tracker_status() == 0 ) {
225 _DEBUG_INFO("mobile tracker status OFF \n");
229 ("killall -9 pwlock");
235 int slp_device_ctrl_factory_reset()
239 /*if (__get_mobile_tracker_status() == 0 ) {
240 _DEBUG_INFO("mobile tracker status OFF \n");
243 ("/usr/bin/factory-reset.sh"); // */
249 /* static function */
250 static int _system_command(const char *command)
254 int pid = 0, status = 0;
255 char *const environ[] = { NULL };
257 retvm_if((command) == NULL, -1, "command is NULL!!");
261 _DEBUG_TRACE("ERROR : fork failed to create a process\n");
265 } else if (pid == 0) {
269 argv[2] = (char *)command;
272 execve("/bin/sh", argv, environ);
276 if (waitpid(pid, &status, 0) == -1) {
277 if (errno != EINTR) {
292 /* TODO : holding ( wait until the MDM module is completed ) */
293 /*int Execute_Dev_App_Install(char *file_name, char *application_id)
295 if( file_name == NULL )
298 _DEBUG_INFO("file_name[%s] \n", file_name);
302 char *descriptor = NULL;
303 char abs_setup_file[256] = {0,};
305 snprintf(abs_setup_file,sizeof(abs_setup_file),"%s", file_name );
306 _DEBUG_INFO("[%s] , [%s] \n", abs_setup_file, file_name );
307 result = package_manager_install_application(&req_id, descriptor, abs_setup_file, PKG_QUIET PKG_DEFAULT, 0, NULL);
308 LOGTRACE("package_manager_install_application result[%d]\n", result);
309 if( result < PKG_COMMON_OK) {
310 LOGTRACE("Install failed! result[%d] \n", result );
311 snprintf(app_ID, PKG_TYPE_STRING_LEN_MAX+PKG_NAME_STRING_LEN_MAX+PKG_VERSION_STRING_LEN_MAX +2 , "%s" , pFile_name );
312 //pthread_mutex_unlock(&wait_mutex);
316 ecore_main_loop_begin();
317 snprintf(app_ID, PKG_TYPE_STRING_LEN_MAX+PKG_NAME_STRING_LEN_MAX+PKG_VERSION_STRING_LEN_MAX +2, "%s" , g_pkg_info.pkg_name );
322 if( result == PKG_COMMON_OK ) {
323 _DEBUG_INFO("package_manager_install_application() Success !!\n");
327 _DEBUG_INFO("package_manager_install_application() Success !!\n");
331 return result ; // 1(OK),0(FAIL)
334 /*int Execute_Dev_App_UnInstall(char *application_id)
339 return 0 ; // 1(OK),0(FAIL)
340 LOGTRACE("app_ID[%s] \n", app_ID);
342 if( strlen(app_ID) >= 256 ) // Prevent defect
344 LOGTRACE("strlen[app_ID] >= 256 \n");
345 return 0 ; // 1(OK),0(FAIL)
348 #if defined(_D_SLP_PKGMGR_)
350 char *descriptor = NULL;
351 char pkg_type[16] = {0,};
352 memcpy(pkg_type,app_ID,3);
355 result = package_manager_uninstall_application(&req_id, pkg_type, app_ID , PKG_QUIET PKG_DEFAULT, return_pkgmgr_cb, NULL);
356 if( result < PKG_COMMON_OK)
358 LOGTRACE("Uninstall failed! result[%d] \n", result);
362 ecore_main_loop_begin();
367 if( result == PKG_COMMON_OK ) {
368 char return_char[512] = {0,};
369 snprintf(return_char,510,"%s,success,%s", (char*)_D_APP_UNINSTALL_,app_ID ); // Prevent defect
370 QUEUE_sendto ( _D_SYNCML_DM_SERVICE_SOCKET_PATH , (void*) return_char , strlen(return_char) );
373 char return_char[512] = {0,};
374 snprintf(return_char,510,"%s,fail,%s", (char*)_D_APP_UNINSTALL_,app_ID ); // Prevent defect
375 QUEUE_sendto ( _D_SYNCML_DM_SERVICE_SOCKET_PATH , (void*) return_char , strlen(return_char) );
378 return result ; // 1(OK),0(FAIL)
381 /*int Execute_Dev_App_Activate(char *applicaton_id, int activate_status)
386 return 0 ; // 1(OK),0(FAIL)
387 LOGTRACE("appID[%s] activate[%d] \n", app_ID, activate);
389 if( strlen(app_ID) >= 256 ) // Prevent defect
391 LOGTRACE("strlen[app_ID] >= 256 \n");
392 return 0 ; // 1(OK),0(FAIL)
395 #if defined(_D_SLP_PKGMGR_)
397 char *descriptor = NULL;
398 char pkg_type[16] = {0,};
399 memcpy(pkg_type,app_ID,3);
402 result = package_manager_activate_application(&req_id, pkg_type, app_ID , activate, return_pkgmgr_cb, NULL);
403 if( result < PKG_COMMON_OK)
405 LOGTRACE("Uninstall failed! result[%d] \n", result);
409 ecore_main_loop_begin();
414 if( result == PKG_COMMON_OK ) {
415 char return_char[512] = {0,};
417 snprintf(return_char,510,"%s,success,%s", (char*)_D_APP_ACTIVE_,app_ID ); // prevent defect
420 snprintf(return_char,510,"%s,success,%s", (char*)_D_APP_INACTIVE_,app_ID ); // prevent defect
423 QUEUE_sendto ( _D_SYNCML_DM_SERVICE_SOCKET_PATH , (void*) return_char , strlen(return_char) );
426 char return_char[512] = {0,};
428 snprintf(return_char,510,"%s,fail,%s", (char*)_D_APP_ACTIVE_,app_ID ); // prevent defect
431 snprintf(return_char,510,"%s,fail,%s", (char*)_D_APP_INACTIVE_,app_ID ); // prevent defect
433 QUEUE_sendto ( _D_SYNCML_DM_SERVICE_SOCKET_PATH , (void*) return_char , strlen(return_char) );
436 return result ; // 1(OK),0(FAIL)
439 /*static int __return_pkgmgr_cb(pkg_request_id req_id, const char *pkg_type, const char *pkg_name, const char *key, const char *val, const void *pmsg, void *data)
441 LOGTRACE("return_cb req_id[%d] pkg_type[%s] pkg_name[%s] key[%s] val[%s]\n", req_id, pkg_type, pkg_name, key, val);
442 // printf("return_cb req_id[%d] pkg_type[%s] pkg_name[%s] key[%s] val[%s]\n", req_id, pkg_type, pkg_name, key, val);
444 if( strncmp(key, "end", strlen("end") ) == 0) {
445 snprintf(g_pkg_info.pkg_type, PKG_TYPE_STRING_LEN_MAX, "%s", pkg_type);
446 snprintf(g_pkg_info.pkg_name, PKG_NAME_STRING_LEN_MAX, "%s", pkg_name);
447 //snprintf(g_pkg_info.pkg_version, PKG_VERSION_STRING_LEN_MAX, "%s", val);
448 //exit(0); ==> exit ���� �׳� process ��ü�� �� ����..
449 ecore_main_loop_quit(); // ==> ecore_main_loop_begin() ���� ��� ����
450 //pthread_cond_signal(&wait_cond); // sending signal
452 else if( strncmp(key, "install_percent", strlen("install_percent") ) == 0) {
453 LOGTRACE("install_percent[%s] \n", val);
455 return 0; // Prevent defect 25315
458 /*static int __get_mobile_tracker_status()
460 char str_key_name[128] = { 0, };
463 memset(str_key_name, 0, sizeof(str_key_name));
464 snprintf(str_key_name, sizeof(str_key_name), "%s", VCONFKEY_SETAPPL_STATE_MOBILE_TRACKER_BOOL); //db/setting/mobile_tracker
466 if (!vconf_get_bool(str_key_name, &int_key)) {
467 _DEBUG_VERBOSE("%s success , int_key : %d \n", VCONFKEY_SETAPPL_STATE_MOBILE_TRACKER_BOOL, int_key);
469 _DEBUG_VERBOSE("%s failed \n", VCONFKEY_SETAPPL_STATE_MOBILE_TRACKER_BOOL);
472 _DEBUG_VERBOSE(" %s vconf %d value \n", VCONFKEY_SETAPPL_STATE_MOBILE_TRACKER_BOOL, int_key);