[Feature] add GA346 baseline version

Change-Id: Ic62933698569507dcf98240cdf5d9931ae34348f
diff --git a/src/apps/atom-base/progs/property/libprop/LICENSE b/src/apps/atom-base/progs/property/libprop/LICENSE
new file mode 100644
index 0000000..77f59ed
--- /dev/null
+++ b/src/apps/atom-base/progs/property/libprop/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MediaTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+the prior written permission of MediaTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MediaTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MediaTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
diff --git a/src/apps/atom-base/progs/property/libprop/Makefile.am b/src/apps/atom-base/progs/property/libprop/Makefile.am
new file mode 100644
index 0000000..0f20ded
--- /dev/null
+++ b/src/apps/atom-base/progs/property/libprop/Makefile.am
@@ -0,0 +1,14 @@
+AUTOMAKE_OPTIONS=foreign subdir-objects
+
+lib_LTLIBRARIES = libprop.la
+libprop_la_SOURCES = ./prop_api.c \
+	./prop_debug.c \
+	./request.c \
+	./utility.c
+include_HEADERS = ./prop_api.h \
+	./request.h \
+	./utility.h \
+	./cutils/properties.h
+
+libprop_la_LDFLAGS = -weak -shared
+libprop_la_LIBADD = -lm -lrt -lpthread -lc
diff --git a/src/apps/atom-base/progs/property/libprop/configure.ac b/src/apps/atom-base/progs/property/libprop/configure.ac
new file mode 100644
index 0000000..0322a7e
--- /dev/null
+++ b/src/apps/atom-base/progs/property/libprop/configure.ac
@@ -0,0 +1,8 @@
+AC_INIT([gpshal], [1.0])

+AM_INIT_AUTOMAKE([foreign])

+AC_CONFIG_HEADER(defines.h)

+AC_PROG_CC

+AC_DISABLE_STATIC

+LT_INIT

+AC_CONFIG_FILES([Makefile])

+AC_OUTPUT

diff --git a/src/apps/atom-base/progs/property/libprop/cutils/properties.h b/src/apps/atom-base/progs/property/libprop/cutils/properties.h
new file mode 100644
index 0000000..d46e90c
--- /dev/null
+++ b/src/apps/atom-base/progs/property/libprop/cutils/properties.h
@@ -0,0 +1,87 @@
+/* Copyright Statement:

+

+ * This software/firmware and related documentation ("MediaTek Software") are

+ * protected under relevant copyright laws. The information contained herein is

+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without

+ * the prior written permission of MediaTek inc. and/or its licensors, any

+ * reproduction, modification, use or disclosure of MediaTek Software, and

+ * information contained herein, in whole or in part, shall be strictly

+ * prohibited.

+

+ * MediaTek Inc. (C) 2015. All rights reserved.

+

+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES

+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")

+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER

+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL

+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED

+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR

+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH

+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,

+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES

+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.

+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO

+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK

+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE

+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR

+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S

+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE

+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE

+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE

+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.

+ */

+

+#ifndef __CUTILS_PROPERTIES_H

+#define __CUTILS_PROPERTIES_H

+

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+/* System properties are *small* name value pairs managed by the

+** property service.  If your data doesn't fit in the provided

+** space it is not appropriate for a system property.

+**

+** WARNING: system/bionic/include/sys/system_properties.h also defines

+**          these, but with different names.  (TODO: fix that)

+*/

+#define PROPERTY_KEY_MAX   64

+#define PROPERTY_VALUE_MAX  92

+

+/* property_get: returns the length of the value which will never be

+** greater than PROPERTY_VALUE_MAX - 1 and will always be zero terminated.

+** (the length does not include the terminating zero).

+**

+** If the property read fails or returns an empty value, the default

+** value is used (if nonnull).

+*/

+int property_get(const char *key, char *value, const char *default_value);

+

+/* property_set: returns 0 on success, < 0 on failure

+*/

+int property_set(const char *key, const char *value);

+

+int property_list(void (*propfn)(const char *key, const char *value, void *cookie), void *cookie);    

+

+

+#ifdef HAVE_SYSTEM_PROPERTY_SERVER

+/*

+ * We have an external property server instead of built-in libc support.

+ * Used by the simulator.

+ */

+#define SYSTEM_PROPERTY_PIPE_NAME       "/tmp/android-sysprop"

+

+enum {

+    kSystemPropertyUnknown = 0,

+    kSystemPropertyGet,

+    kSystemPropertySet,

+    kSystemPropertyList

+};

+#endif /*HAVE_SYSTEM_PROPERTY_SERVER*/

+

+

+#ifdef __cplusplus

+}

+#endif

+

+#endif

diff --git a/src/apps/atom-base/progs/property/libprop/prop_api.c b/src/apps/atom-base/progs/property/libprop/prop_api.c
new file mode 100644
index 0000000..7fa2b08
--- /dev/null
+++ b/src/apps/atom-base/progs/property/libprop/prop_api.c
@@ -0,0 +1,182 @@
+/* Copyright Statement:
+
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+
+ * MediaTek Inc. (C) 2015. All rights reserved.
+
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "cutils/properties.h"
+#include "request.h"
+#include "prop_debug.h"
+
+/*******************************************************************************/
+/* LIBSNCFG functions for Android Property Mechanism                           */
+/*******************************************************************************/
+int _property_check(const char *key, const char *value)
+{
+    if (key == 0) {
+		 PROP_DEBUG_PRINT(PROP_DEBUG_ERROR, "[PropSet] key==0 return directly\n");
+		 return -1;
+	}
+
+    if (strlen(key) >= PROPERTY_KEY_MAX) {
+		PROP_DEBUG_PRINT(PROP_DEBUG_ERROR, "[PropSet] key=%s size:%zd >= max:%d\n",
+				                            key, strlen(key), PROPERTY_KEY_MAX);
+		 return -1;
+	}
+
+    if (strlen(value) >= PROPERTY_VALUE_MAX) {
+		PROP_DEBUG_PRINT(PROP_DEBUG_ERROR, "[PropSet] value=%s size:%zd >= max:%d\n",
+				                            value, strlen(value), PROPERTY_VALUE_MAX);
+		return -1;
+	}
+	
+    return  0;
+}
+
+int property_get(const char *key, char *value, const char *default_value)
+{
+	struct  sncfg_request request;
+    int     ret_len = 1;
+
+    /*check validaty*/
+    if ((key == 0) || (value == 0)) {
+		 PROP_DEBUG_PRINT(PROP_DEBUG_ERROR, "[PropSet] key==0 return directly\n");
+		 return -1;
+	}
+
+	if (strlen(key) >= PROPERTY_KEY_MAX) {
+		PROP_DEBUG_PRINT(PROP_DEBUG_ERROR, "[PropSet] key=%s size:%zd >= max:%d\n",
+											key, strlen(key), PROPERTY_KEY_MAX);
+		 return -1;
+	}
+
+    /*send socket to get the value*/
+	bzero(&request, sizeof(struct sncfg_request));
+	request.magic = SNCFG_REQUEST_MAGIC;
+	request.type = SNCFG_REQUEST_TYPE_PROP_GET;
+	request.key = (char *)key;
+	if (request_for_sncfg(&request) < 0) {
+        ret_len = 0;        
+	} else if (NULL == request.value) {
+        ret_len = 0;
+    }
+
+    /*
+    *  1. normal case: use db's value.
+    *  2. other case: use default value.
+    */
+    if (ret_len>0) {
+        ret_len = strlen(request.value);
+        if (ret_len >= PROPERTY_VALUE_MAX)  {
+            ret_len = PROPERTY_VALUE_MAX - 1;
+        }
+        strncpy(value, request.value, ret_len);
+        value[ret_len] = '\0';
+    } else {
+        if (default_value) {
+            ret_len = strlen(default_value);
+            if (ret_len >= PROPERTY_VALUE_MAX) {
+                ret_len = PROPERTY_VALUE_MAX - 1;
+            }
+            memcpy(value, default_value, ret_len);
+            value[ret_len] = '\0';
+        } else {
+            value[0] = '\0';
+        }
+    }
+
+	return  ret_len;	
+}
+
+int property_set(const char *key, const char *in_value)
+{
+	struct 	sncfg_request request;
+	char	*value = "";
+
+	if (in_value != NULL)
+		value = in_value;
+	
+    if (_property_check(key, value) < 0) {
+        return  -1;
+    }
+
+	bzero(&request, sizeof(struct sncfg_request));
+	request.magic = SNCFG_REQUEST_MAGIC;
+	request.type = SNCFG_REQUEST_TYPE_PROP_SET;
+	request.key = (char *)key;
+	request.value = (char *)value;
+	if (request_for_sncfg(&request) < 0) {
+		return -1;
+	}
+	
+	return 0;
+}
+
+int property_reload(void)
+{
+	struct sncfg_request request;
+	
+	bzero(&request, sizeof(struct sncfg_request));
+	
+	request.magic = SNCFG_REQUEST_MAGIC;
+	request.type = SNCFG_REQUEST_TYPE_PROP_RELOAD;	
+	if (request_for_sncfg(&request) < 0) {
+		return -1;
+	}
+	
+	return 0;		
+}
+
+int property_debug(char *key, char *in_value)
+{
+	struct sncfg_request request;
+	char	*value = "";
+
+	if (in_value != NULL)
+		value = in_value;
+
+    if (_property_check(key, value) < 0) {
+        return  -1;
+    }
+    
+	bzero(&request, sizeof(struct sncfg_request));
+	request.magic = SNCFG_REQUEST_MAGIC;
+	request.type = SNCFG_REQUEST_TYPE_PROP_DEBUG;
+	request.key = key;
+	request.value = value;
+	if (request_for_sncfg(&request) < 0) {
+		return -1;
+	}
+
+	return 0;	
+}
diff --git a/src/apps/atom-base/progs/property/libprop/prop_api.h b/src/apps/atom-base/progs/property/libprop/prop_api.h
new file mode 100644
index 0000000..60756f7
--- /dev/null
+++ b/src/apps/atom-base/progs/property/libprop/prop_api.h
@@ -0,0 +1,43 @@
+/* Copyright Statement:

+

+ * This software/firmware and related documentation ("MediaTek Software") are

+ * protected under relevant copyright laws. The information contained herein is

+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without

+ * the prior written permission of MediaTek inc. and/or its licensors, any

+ * reproduction, modification, use or disclosure of MediaTek Software, and

+ * information contained herein, in whole or in part, shall be strictly

+ * prohibited.

+

+ * MediaTek Inc. (C) 2015. All rights reserved.

+

+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES

+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")

+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER

+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL

+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED

+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR

+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH

+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,

+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES

+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.

+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO

+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK

+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE

+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR

+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S

+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE

+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE

+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE

+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.

+ */

+

+#ifdef SNCFG_PROPERTY

+

+#ifndef _PROP_API_H

+#define _PROP_API_H

+

+

+

+#endif

+

+#endif

diff --git a/src/apps/atom-base/progs/property/libprop/prop_debug.c b/src/apps/atom-base/progs/property/libprop/prop_debug.c
new file mode 100644
index 0000000..35bbc68
--- /dev/null
+++ b/src/apps/atom-base/progs/property/libprop/prop_debug.c
@@ -0,0 +1,62 @@
+/* Copyright Statement:
+
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+
+ * MediaTek Inc. (C) 2015. All rights reserved.
+
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ */
+
+#include <stdio.h>
+#include "prop_debug.h"
+
+unsigned int prop_debug_level = PROP_DEBUG_ERROR;
+
+char *prop_debug_name[] =
+	{
+		"",
+		"TEST! ",
+		"FAIL! ",
+		"WARN! ",
+		"TRACE! ",
+		"INFO! ",
+		"LOUD! ",
+	};
+
+int prop_debug_set(unsigned int level)
+{
+    if ((level>=PROP_DEBUG_OFF) && (level <=PROP_DEBUG_LOUD)) {
+        prop_debug_level = level;
+    }
+
+    return  0;
+}
+
+int prop_debug_get(void)
+{
+    return  prop_debug_level;
+}
diff --git a/src/apps/atom-base/progs/property/libprop/prop_debug.h b/src/apps/atom-base/progs/property/libprop/prop_debug.h
new file mode 100644
index 0000000..d66d55b
--- /dev/null
+++ b/src/apps/atom-base/progs/property/libprop/prop_debug.h
@@ -0,0 +1,90 @@
+/* Copyright Statement:
+
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+
+ * MediaTek Inc. (C) 2015. All rights reserved.
+
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ */
+
+#ifndef __PROP_DEBUG_H
+#define __PROP_DEBUG_H
+#include <syslog.h>
+
+#define PROP_DEBUG_OFF                  0
+#define PROP_DEBUG_TEST                 1
+#define PROP_DEBUG_ERROR                2
+#define PROP_DEBUG_WARN                 3
+#define PROP_DEBUG_TRACE                4
+#define PROP_DEBUG_INFO                 5
+#define PROP_DEBUG_LOUD                 6
+
+extern unsigned int  prop_debug_level;
+extern char *prop_debug_name[];
+int prop_debug_set(unsigned int level);
+int prop_debug_get(void);
+
+#if 0
+
+#define PROP_DEBUG_PRINT(level, str, args...)               \
+	do {                                                    \
+        if(level<=prop_debug_level)                         \
+        {   												\
+			printf("\n\r[SNCFGD-PROP] %s - %s ", __FUNCTION__, prop_debug_name[level]); 		\
+    		printf(str, ##args);                            \
+        }                                                   \
+	} while(0)
+
+#define PROP_DEBUG_LOG(level, str, args...)                 \
+	do {                                                    \
+        if(level<=prop_debug_level)                         \
+        {   												\
+			printf("\n\r[SNCFGD-PROP] %s - %s ", __FUNCTION__, prop_debug_name[level]); 		\
+    		printf(str, ##args);                            \
+        }                                                   \
+	} while(0)
+#else
+
+#define PROP_DEBUG_PRINT(level, str, args...)               \
+	do {                                                    \
+        if(level<=prop_debug_level)                         \
+        { 													\
+			syslog(LOG_DEBUG, "[PROP][%s:%d]: " str "\n", __FUNCTION__, __LINE__,  ## args);\
+        }      									            \
+	} while(0)
+
+#define PROP_DEBUG_LOG(level, str, args...)                 \
+	do {                                                    \
+        if(level<=prop_debug_level)                         \
+        {   												\
+			syslog(LOG_DEBUG, "[PROP][%s:%d]: " str "\n", __FUNCTION__, __LINE__,  ## args);\
+        }                                                   \
+	} while(0)
+
+#endif
+
+#endif
diff --git a/src/apps/atom-base/progs/property/libprop/request.c b/src/apps/atom-base/progs/property/libprop/request.c
new file mode 100644
index 0000000..d72531d
--- /dev/null
+++ b/src/apps/atom-base/progs/property/libprop/request.c
@@ -0,0 +1,264 @@
+/* Copyright Statement:
+
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+
+ * MediaTek Inc. (C) 2015. All rights reserved.
+
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <time.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <syslog.h>
+#include "utility.h"
+#include "request.h"
+
+/*******************************************************************************/
+/* REQUEST local definitions                                                   */
+/*******************************************************************************/
+
+/*******************************************************************************/
+/* REQUEST local prototypes                                                    */
+/*******************************************************************************/
+
+/*******************************************************************************/
+/* REQUEST local variables                                                     */
+/*******************************************************************************/
+
+/*******************************************************************************/
+/* REQUEST local functions                                                     */
+/*******************************************************************************/
+static int pack_request_string(char **p, char **next, const char *roof)
+{
+	if (*p == NULL) {
+		return 0;
+	} else {
+		size_t len = strlen(*p) + 1;
+
+		if ((roof - *next) < (ptrdiff_t)len) {
+			return -1;
+		} else {
+			strcpy(*next, *p);
+			*next += len;
+			*p = (char *)0x12345678;
+			return 0;
+		}
+	}	
+}
+
+static int unpack_request_string(char **p, char **next, const char *roof)
+{
+	if (*p == NULL) {
+		return 0;
+	} else if (*p == (char *)0x12345678) {
+		char *end = memchr(*next, '\0', roof - *next);
+		
+		if (end == NULL) {
+			return -1;
+		} else {
+			*p = *next;
+			*next = end + 1;
+			return 0;
+		}
+	}
+	return -1;
+}
+
+/*******************************************************************************/
+/* REQUEST functions                                                           */
+/*******************************************************************************/
+int pack_request(struct sncfg_request *request)
+{
+	int size;
+	char *next, *roof;
+	
+    next = request->string + request->reservedLen;
+    roof = next + sizeof(request->string);
+    
+	if (request->magic != SNCFG_REQUEST_MAGIC) {
+		return -1;
+	}
+
+	if (request->type >= SNCFG_REQUEST_TYPE_RESERVED) {
+		return -1;
+	}
+					
+	if (pack_request_string(&request->key, &next, roof) < 0 ||
+		pack_request_string(&request->value, &next, roof) < 0) {
+		return -1;
+	}
+
+	size = next - (char *)request;
+	return size;
+}
+
+int unpack_request(struct sncfg_request *request, int size)
+{
+	char *next, *roof;
+	
+	next = request->string + request->reservedLen;
+	roof = (char *)request + size;
+
+	if (roof < next) {
+		return -1;
+	}
+	
+	if (request->magic != SNCFG_REQUEST_MAGIC) {
+		return -1;
+	}
+
+	if (request->type >= SNCFG_REQUEST_TYPE_RESERVED) {
+		return -1;
+	}
+
+	if (unpack_request_string(&request->key, &next, roof) < 0 ||
+		unpack_request_string(&request->value, &next, roof) < 0) {
+		return -1;
+	}
+
+	return 0;
+}
+
+int connect_request(void)
+{
+	int sock;
+	struct sockaddr_un addr = { AF_UNIX, SNCFG_REQUEST_UNIX_SOCKET };
+
+	if (access(addr.sun_path, R_OK | W_OK) < 0) {
+		return -1;
+	}
+
+	sock = socket(AF_UNIX, SOCK_STREAM, 0);
+	if (sock == -1) {
+		return -1;
+	}
+					
+	struct timeval tm;
+	tm.tv_sec = 8;  /* 8 Secs Timeout */
+	tm.tv_usec = 0;
+		
+	if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (const void *)&tm, sizeof(tm)) < 0) {
+		fprintf(stderr, "[LIBSNCFG][%d] Can't setsockopt SO_SNDTIMEO 8 seconds for connect ... %s !!\r\n", getpid(), strerror(errno));
+		syslog(LOG_WARNING, "[LIBSNCFG][%d] Can't setsockopt SO_SNDTIMEO 8 seconds for connect ... %s !!", getpid(), strerror(errno));
+		close(sock);
+		return -1;
+	}
+	if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (const void *)&tm, sizeof(tm)) < 0) {
+		fprintf(stderr, "[LIBSNCFG][%d] Can't setsockopt SO_RCVTIMEO 8 seconds for connect ... %s !!\r\n", getpid(), strerror(errno));
+		syslog(LOG_WARNING, "[LIBSNCFG][%d] Can't setsockopt SO_RCVTIMEO 8 seconds for connect ... %s !!", getpid(), strerror(errno));
+		close(sock);
+		return -1;
+	}
+					
+	if (connect(sock, (struct sockaddr *)&addr, 
+				offsetof(struct sockaddr_un, sun_path) + strlen(addr.sun_path)) < 0) {
+		close(sock);
+		return -1;
+	}
+			
+	return sock;
+}
+
+int accept_request(int sockfd)
+{
+	int sock;
+	socklen_t addrlen;
+	struct sockaddr_un addr;
+
+	addrlen = sizeof(addr);
+	sock = accept(sockfd, (struct sockaddr *)&addr, &addrlen);
+	if (sock == -1) {
+		return -1;
+	}
+
+	if (fcntl(sock, F_SETFD, FD_CLOEXEC) < 0) {
+		close(sock);
+		return -1;
+    }	
+
+	struct timeval tm;
+	tm.tv_sec = 8;  /* 8 Secs Timeout */
+	tm.tv_usec = 0;
+		
+	if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (const void *)&tm, sizeof(tm)) < 0) {
+		fprintf(stderr, "[LIBSNCFG][%d] Can't setsockopt SO_SNDTIMEO 8 seconds for accept ... %s !!\r\n", getpid(), strerror(errno));
+		syslog(LOG_WARNING, "[LIBSNCFG][%d] Can't setsockopt SO_SNDTIMEO 8 seconds for accept ... %s !!", getpid(), strerror(errno));
+		close(sock);
+		return -1;
+	}
+	if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (const void *)&tm, sizeof(tm)) < 0) {
+		fprintf(stderr, "[LIBSNCFG][%d] Can't setsockopt SO_RCVTIMEO 8 seconds for accept ... %s !!\r\n", getpid(), strerror(errno));
+		syslog(LOG_WARNING, "[LIBSNCFG][%d] Can't setsockopt SO_RCVTIMEO 8 seconds for accept ... %s !!", getpid(), strerror(errno));
+		close(sock);
+		return -1;
+	}
+
+	return sock;
+}
+
+int request_for_sncfg(struct sncfg_request *request)
+{
+	int sock, size;
+
+	size = pack_request(request);
+	if (size < 0) {
+		return -1;
+	}
+	
+	sock = connect_request();
+	if (sock < 0) {
+		return -1;
+	}
+	
+	if (safe_write(sock, request, size) != size) {
+		close(sock);
+		return -1;
+	}
+
+	size = safe_read(sock, request, sizeof(struct sncfg_request));
+
+	if (size < 0 ||
+		unpack_request(request, size) < 0 ||
+		request->status < 0) {
+		/* request processing failed */
+		close(sock);
+		return -1;
+	}
+	
+	close(sock);
+	return 0;
+}
diff --git a/src/apps/atom-base/progs/property/libprop/request.h b/src/apps/atom-base/progs/property/libprop/request.h
new file mode 100644
index 0000000..87eec5c
--- /dev/null
+++ b/src/apps/atom-base/progs/property/libprop/request.h
@@ -0,0 +1,102 @@
+/* Copyright Statement:
+
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+
+ * MediaTek Inc. (C) 2015. All rights reserved.
+
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ */
+
+#ifndef __REQUEST_H__
+#define __REQUEST_H__
+
+
+/*******************************************************************************/
+/* REQUEST definitions                                                         */
+/*******************************************************************************/
+#define SNCFG_REQUEST_MAGIC			0x2287
+#define SNCFG_REQUEST_UNIX_SOCKET	"/var/run/sncfg.socket"
+
+#ifdef __MEM_COSTDOWN__
+#define SNCFG_REQUEST_MAX_SIZE		512
+#else
+#define SNCFG_REQUEST_MAX_SIZE		4096
+#endif
+
+
+/*******************************************************************************/
+/* REQUEST prototypes                                                          */
+/*******************************************************************************/
+enum {
+	SNCFG_REQUEST_TYPE_PROP_SET,
+	SNCFG_REQUEST_TYPE_PROP_GET,
+	SNCFG_REQUEST_TYPE_PROP_RELOAD,
+	SNCFG_REQUEST_TYPE_PROP_DEBUG,
+	SNCFG_REQUEST_TYPE_PROP_CTRLSTOP_SIGNAL,
+	SNCFG_REQUEST_TYPE_PROP_TEST,
+
+	SNCFG_REQUEST_TYPE_RESERVED
+};
+	
+
+struct sncfg_request {
+	unsigned short magic;
+	unsigned short type;
+	int status;
+	int reservedLen;
+	char *key;
+	char *value;
+	char string[SNCFG_REQUEST_MAX_SIZE];	/* enough ?? */
+};
+
+struct request_list {
+	struct request_list *prev, *next;
+};
+
+struct req {
+	struct request_list	next;
+	int	sock;
+    int child_pid;
+	struct sncfg_request request;
+};
+
+
+/*******************************************************************************/
+/* REQUEST variables                                                           */
+/*******************************************************************************/
+
+
+/*******************************************************************************/
+/* REQUEST functions                                                           */
+/*******************************************************************************/
+extern int pack_request(struct sncfg_request *request);
+extern int unpack_request(struct sncfg_request *request, int size);
+extern int connect_request(void);
+extern int accept_request(int sockfd);
+extern int request_for_sncfg(struct sncfg_request *request);
+
+#endif	// __REQUEST_H__
diff --git a/src/apps/atom-base/progs/property/libprop/utility.c b/src/apps/atom-base/progs/property/libprop/utility.c
new file mode 100644
index 0000000..265aa28
--- /dev/null
+++ b/src/apps/atom-base/progs/property/libprop/utility.c
@@ -0,0 +1,186 @@
+/* Copyright Statement:
+
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+
+ * MediaTek Inc. (C) 2015. All rights reserved.
+
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sched.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <syslog.h>
+#include "utility.h"
+
+/*******************************************************************************/
+/* UTILITY local definitions                                                   */
+/*******************************************************************************/
+
+/*******************************************************************************/
+/* UTILITY local prototypes                                                    */
+/*******************************************************************************/
+
+/*******************************************************************************/
+/* UTILITY local variables                                                     */
+/*******************************************************************************/
+int libsncfg_rw_block = 1;
+
+/*******************************************************************************/
+/* UTILITY local functions                                                     */
+/*******************************************************************************/
+
+/*******************************************************************************/
+/* UTILITY functions                                                           */
+/*******************************************************************************/
+int safe_close(int fd)
+{
+	int ret;
+	
+	do {
+		ret = close(fd);
+	} while (ret < 0 && errno == EINTR);
+
+	if (ret < 0) {
+		int errnoTmp = errno;
+
+		fprintf(stderr, "[LIBSNCFG][%d] close(%d) @ safe_close() failed : %s !!\n", getpid(), fd, strerror(errnoTmp));
+		syslog(LOG_WARNING, "[LIBSNCFG][%d] close(%d) @ safe_close() failed : %s !!", getpid(), fd, strerror(errnoTmp));
+	}
+	return ret;
+}
+
+
+ssize_t safe_read(int fd, void *buf, size_t count)
+{
+	ssize_t n;
+                                                                                
+again:                                                                                
+	do {
+		n = read(fd, buf, count);
+	} while (n < 0 && errno == EINTR);
+
+	if (n < 0) {
+		int errnoTmp = errno;
+
+		fprintf(stderr, "[LIBSNCFG][%d] read(%d) @ safe_read() failed : %s !!\n", getpid(), fd, strerror(errnoTmp));
+		syslog(LOG_WARNING, "[LIBSNCFG][%d] read(%d) @ safe_read() failed : %s !!", getpid(), fd, strerror(errnoTmp));
+		if ((errnoTmp == EWOULDBLOCK || errnoTmp == EAGAIN) && libsncfg_rw_block) {
+			goto again;
+		}	
+	}
+	return n;
+}
+                                                                                
+
+ssize_t safe_write(int fd, const void *buf, size_t count)
+{
+	ssize_t n;
+                                                                                
+again:
+	do {
+		n = write(fd, buf, count);
+		if (n == 0) {
+			fprintf(stderr, "[LIBSNCFG][%d] write(%d) @ safe_write : write zero byte !!\n", getpid(), fd);
+			syslog(LOG_WARNING, "[LIBSNCFG][%d] write(%d) @ safe_write : write zero byte !!", getpid(), fd);
+		}
+	} while (n < 0 && errno == EINTR);
+
+	if (n < 0) {
+		int errnoTmp = errno;
+
+		fprintf(stderr, "[LIBSNCFG][%d] write(%d) @ safe_write() failed : %s !!\n", getpid(), fd, strerror(errnoTmp));
+		syslog(LOG_WARNING, "[LIBSNCFG][%d] write(%d) @ safe_write() failed : %s !!", getpid(), fd, strerror(errnoTmp));
+		if ((errno == EWOULDBLOCK || errno == EAGAIN) && libsncfg_rw_block) {
+			goto again;
+		}	
+	}
+	return n;
+}
+
+char *dupstr(char* s)
+{
+    char *r;
+    
+    r = malloc (strlen (s) + 1);
+    if (r)
+    	strcpy (r, s);
+    return (r);
+}
+
+int nonrt_system(const char *cmd)
+{
+	int wait_val, pid;
+	sig_t save_quit, save_int, save_chld;
+	struct sched_param sched;
+
+	if (cmd == 0) {
+		return 1;
+	}
+
+	save_quit = signal(SIGQUIT, SIG_IGN);
+	save_int = signal(SIGINT, SIG_IGN);
+	save_chld = signal(SIGCHLD, SIG_DFL);
+
+	if ((pid = vfork()) < 0) {
+		signal(SIGQUIT, save_quit);
+		signal(SIGINT, save_int);
+		signal(SIGCHLD, save_chld);
+		return -1;
+	}
+	if (pid == 0) {
+		signal(SIGQUIT, SIG_DFL);
+		signal(SIGINT, SIG_DFL);
+		signal(SIGCHLD, SIG_DFL);
+
+		/* child, can only call thread safe functions before exec ... */
+		sched.sched_priority = 0;
+		if (sched_setscheduler(0, SCHED_OTHER, &sched) == -1) {
+			exit(127);
+		}
+		execl("/bin/sh", "sh", "-c", cmd, (char *) 0);
+		exit(127);
+	}
+	/* Signals are not absolutly guarenteed with vfork */
+	signal(SIGQUIT, SIG_IGN);
+	signal(SIGINT, SIG_IGN);
+
+	if (wait4(pid, &wait_val, 0, 0) == -1) {
+		wait_val = -1;
+	}
+
+	signal(SIGQUIT, save_quit);
+	signal(SIGINT, save_int);
+	signal(SIGCHLD, save_chld);
+	return wait_val;
+}	
diff --git a/src/apps/atom-base/progs/property/libprop/utility.h b/src/apps/atom-base/progs/property/libprop/utility.h
new file mode 100644
index 0000000..5495171
--- /dev/null
+++ b/src/apps/atom-base/progs/property/libprop/utility.h
@@ -0,0 +1,63 @@
+/* Copyright Statement:
+
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+
+ * MediaTek Inc. (C) 2015. All rights reserved.
+
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ */
+
+#ifndef __UTILITY_H__
+#define __UTILITY_H__
+
+
+/*******************************************************************************/
+/* UTILITY definitions                                                         */
+/*******************************************************************************/
+
+
+/*******************************************************************************/
+/* UTILITY prototypes                                                          */
+/*******************************************************************************/
+
+
+/*******************************************************************************/
+/* UTILITY variables                                                           */
+/*******************************************************************************/
+
+
+/*******************************************************************************/
+/* UTILITY functions                                                           */
+/*******************************************************************************/
+extern int safe_close(int fd);
+extern ssize_t safe_read(int fd, void *buf, size_t count);
+extern ssize_t safe_write(int fd, const void *buf, size_t count);
+extern char *dupstr(char* s);
+extern int nonrt_system(const char *cmd);
+
+
+#endif	// __UTILITY_H__