diff --git a/Makefile b/Makefile
index 6f0fdd7adf04217583edcc60ca931aa8974cb4ab..afd6488eb3e87ac2fb369dbaecc764c70b33b500 100644
--- a/Makefile
+++ b/Makefile
@@ -1,23 +1,35 @@
-CC		= gcc
+CC			= gcc
+XMLFLAG		= "-I$(STAGING_DIR)/usr/include/libxml2/"
 CFLAGS		= -g -Wall
-LIBS		= -ljson-c -lubox -lubus -lcurl -lmobile_zte -lblobmsg_json
+LIBS		= -ljson-c -lubox -lubus -lcurl -lmobile_zte -lmobile_hilink -lblobmsg_json
 
-all: libmobile1_zte libmobile2_zte common stack dongle_apn dongle_pin dongle_network dongle_infrastructure dongle
+all: libmobile1_zte libmobile2_zte  libmobile1_hilink libmobile2_hilink common stack dongle_apn dongle_pin dongle_network dongle_infrastructure dongle
 
-MOBJS		= libmobile_zte.o
-MSRCS		= libmobile_zte.c
-libmobile1_zte: ${MOBJS}
-	${CC} -c -fPIC ${MSRCS} -o ${MOBJS}
+ZOBJS		= libmobile_zte.o
+ZSRCS		= libmobile_zte.c
+libmobile1_zte: ${ZOBJS}
+	${CC} -c -fPIC ${ZSRCS} -o ${ZOBJS}
 
-MOBJS		= libmobile_zte.o
-MSRCS		= libmobile_zte.c
-libmobile2_zte: ${MOBJS}
+libmobile2_zte: ${ZOBJS}
 	${CC} ${MOBJS} -shared -o libmobile_zte.so
 
-COBJS		= common.o
-CSRCS		= common.c
-common: ${COBJS}
-	${CC} -c ${CSRCS} -o ${COBJS}
+HOBJS		= common_hilink.o
+HSRCS		= common_hilink.c
+common_hilink: ${HOBJS}
+	${CC} -c ${HSRCS} -o ${HOBJS} ${XMLFLAG}
+
+HLOBJS		= libmobile_hilink.o
+HLSRCS		= libmobile_hilink.c
+libmobile1_hilink: ${HLOBJS}
+	${CC} -c -fPIC ${HLSRCS} -o ${HLOBJS}
+
+libmobile2_hilink: ${HLOBJS}
+	${CC} ${HLOBJS} -shared -o libmobile_hilink.so
+
+ZCOBJS		= common_zte.o
+ZCSRCS		= common_zte.c
+common_zte: ${ZCOBJS}
+	${CC} -c ${ZCSRCS} -o ${ZCOBJS}
 
 STOBJS		= stack.o
 STSRCS		= stack.c
diff --git a/common_hilink.c b/common_hilink.c
new file mode 100644
index 0000000000000000000000000000000000000000..f68439654f20a414f8b59af2289ff7f660feff5a
--- /dev/null
+++ b/common_hilink.c
@@ -0,0 +1,104 @@
+#include "common.h"
+
+//need to free tag content..
+char *xml_parser(struct write_result *result, char *tag)
+{
+	char *tag_content;
+
+	tag_content = malloc(TAG_CONTENT_SIZE);
+	if (!tag_content)
+		goto leave;
+
+	xmlDocPtr doc_ptr = NULL;
+	xmlXPathContextPtr xpathctx_ptr;
+	xmlXPathObjectPtr xpathobj_ptr;
+
+	doc_ptr = xmlParseMemory(result->data, result->pos);
+	xpathctx_ptr = doc_ptr ? xmlXPathNewContext(doc_ptr) : NULL;
+
+	xpathobj_ptr = xpathctx_ptr ? xmlXPathEvalExpression((xmlChar *)tag, xpathctx_ptr) : NULL;
+	if (xpathobj_ptr) {
+		int n;
+		xmlNodeSetPtr nodeset_ptr = xpathobj_ptr->nodesetval;
+		for (n = 0; nodeset_ptr && n < xmlXPathNodeSetGetLength(nodeset_ptr); n++) {
+			//if (DEBUG)
+			//printf("n value: %d\n", n);
+			xmlNodePtr node_ptr = nodeset_ptr->nodeTab[n];
+			if (node_ptr->type != XML_ATTRIBUTE_NODE && node_ptr->type != XML_ELEMENT_NODE && node_ptr->type != XML_CDATA_SECTION_NODE)
+				continue;
+			if (node_ptr->children)	{
+				//tag_content = (char*) node_ptr->children->content;
+				strcpy(tag_content, (char *)node_ptr->children->content);
+				if (DEBUG)
+					printf("tag content: %s\n", tag_content);
+				break;
+			}
+
+		}
+	}
+
+	if (xpathobj_ptr)
+		xmlXPathFreeObject(xpathobj_ptr);
+	if (xpathctx_ptr)
+		xmlXPathFreeContext(xpathctx_ptr);
+	if (doc_ptr)
+		xmlFreeDoc(doc_ptr);
+
+	return tag_content;
+
+leave:
+	return NULL;
+
+}
+
+void xml_to_json(xmlNode *anode, json_object *jobj)
+{
+	xmlNodePtr cur_node = NULL;
+	json_object *cur_jstr = NULL;
+
+	for (cur_node = anode; cur_node; cur_node = cur_node->next) {
+		if (DEBUG_COMMON) {
+			printf("child address: %p\n", cur_node);
+			printf("next addres: %p\n", cur_node->next);
+			printf("root child content: %s\n", (uint8_t *)xmlNodeGetContent(cur_node));
+		}
+
+		if (cur_node->type == XML_ELEMENT_NODE)	{
+			if (xmlChildElementCount(cur_node) == 0) {
+				cur_jstr = json_object_new_string((char *)xmlNodeGetContent(cur_node));
+				if (DEBUG_COMMON) {
+					printf ("xmlNodeGet name: %sn", (char *)cur_node->name);
+					printf ("xmlNodeGetContent: %sn", (char *)xmlNodeGetContent(cur_node));
+				}
+
+				json_object_object_add(jobj, (char *)cur_node->name, cur_jstr);
+			}
+		}
+
+		xml_to_json(cur_node->children, jobj);
+	}
+}
+
+
+
+void xml_to_json_converter(struct write_result *result)
+{
+	json_object *jobj;
+	xmlDocPtr doc_ptr = NULL;
+	xmlNode *origin_node = NULL;
+
+	jobj = json_object_new_object();
+
+	doc_ptr = xmlParseMemory(result->data, result->pos);
+	origin_node = doc_ptr ? xmlDocGetRootElement(doc_ptr) : NULL;
+
+	jobj = json_object_new_object();
+	xml_to_json(origin_node, jobj);
+	if (DEBUG_COMMON) {
+		printf ("The json object created: %s\n",json_object_to_json_string(jobj));
+	}
+
+}
+
+
+
diff --git a/common_hilink.h b/common_hilink.h
new file mode 100644
index 0000000000000000000000000000000000000000..78f68396e88ea08ff275e5a82f94be05c2340b0e
--- /dev/null
+++ b/common_hilink.h
@@ -0,0 +1,20 @@
+#ifndef COMMON_H
+#define COMMON_H
+
+#include "libmobile.h"
+
+
+#include <libxml2/libxml/parser.h>
+#include <libxml/xpath.h>
+#include <libxml/xpathInternals.h>
+
+#include <json-c/json.h>
+
+#define DEBUG_COMMON 0
+
+char *xml_parser(struct write_result *result, char *tag);
+void xml_to_json_converter(struct write_result *result);
+
+
+
+#endif
diff --git a/common.c b/common_zte.c
similarity index 100%
rename from common.c
rename to common_zte.c
diff --git a/common.h b/common_zte.h
similarity index 100%
rename from common.h
rename to common_zte.h
diff --git a/libmobile_hilink.c b/libmobile_hilink.c
new file mode 100644
index 0000000000000000000000000000000000000000..d6f41922128df07f0ace6a50bab84e6df8170f98
--- /dev/null
+++ b/libmobile_hilink.c
@@ -0,0 +1,527 @@
+/***************************************************************************
+ *
+ *	Project: dongle
+ *
+ *
+ ***************************************************************************/
+
+#include "libmobile.h"
+
+
+//global varibales
+char *home_url = "http://192.168.8.1/html/index.html";
+char *sess_tok_url = "http://192.168.8.1/api/webserver/SesTokInfo";
+
+//free mem.
+char *parser(char *data, char *keyword)
+{
+	char *session_token;
+	char *ptr = NULL;
+
+	session_token = (char *)calloc(1024, sizeof(char));
+	if (!session_token)
+		goto leave_token;
+
+	//parse keyword..
+	ptr = strstr(data, keyword);
+	if (ptr == NULL)
+	{
+		goto leave_not_found;
+	}
+
+	int strl = strlen(keyword);
+	ptr += strl;
+	sscanf(ptr, "%[^<]", session_token);
+
+	return session_token;
+
+leave_not_found:
+	free(session_token);
+leave_token:
+
+	return NULL;
+}
+
+
+static size_t write_response(void *ptr, size_t size, size_t nmemb, void *stream)
+{
+	size_t total_size = size * nmemb;
+
+	struct write_result *result = (struct write_result *)stream;
+
+	if (result->pos + total_size >= BUFFER_SIZE - 1) {
+		fprintf(stderr, "error: too small buffer\n");
+		return 0;
+	}
+
+	memcpy(result->data + result->pos, ptr, total_size);
+	result->pos += total_size;
+
+	return total_size;
+}
+
+
+
+struct write_result *memalloc_write_result(void)
+{
+	struct write_result *wr = (struct write_result *) calloc(1, sizeof(struct write_result));
+	if (!wr)
+		goto leave;
+
+	wr->data = calloc(BUFFER_SIZE, sizeof(char));
+	if (!wr->data)
+		goto leave;
+
+	wr->pos = 0;
+
+	return wr;
+
+leave:
+	if (wr)
+		free(wr);
+
+	if (wr->data)
+		free(wr->data);
+
+	return NULL;
+}
+
+
+void free_write_result(struct write_result *result)
+{
+	if (result) {
+		free(result);
+	}
+}
+
+
+
+int check_cookie_status(CURLcode status, CURL *curl)
+{
+	long code;
+
+	if (status != 0) {
+		if (DEBUG)
+			printf(": %s\n", curl_easy_strerror(status));
+		return 1;
+	}
+
+	curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code);
+	if (code != 200) {
+		if (DEBUG)
+			printf("error: server responded with code %ld\n", code);
+		return 1;
+	}
+
+	return 0;
+}
+
+
+void prepare_curl_write_callback(CURL *curl, const char *url, struct write_result *result)
+{
+	curl_easy_setopt(curl, CURLOPT_URL, url);
+	curl_easy_setopt(curl, CURLOPT_WRITEDATA, result);
+	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_response);
+}
+
+
+
+//free mem
+static struct write_result *get_request(const char *url, const char *api_url)
+{
+	CURL *curl = NULL;
+	CURLcode status;
+	struct write_result *result;
+
+	curl = curl_easy_init();
+	if (!curl)
+		goto leave;
+
+	result = memalloc_write_result();
+	if (!result)
+		goto leave;
+
+	prepare_curl_write_callback(curl, url, result);
+	curl_easy_setopt(curl, CURLOPT_COOKIEFILE, ""); //start the cookie engine ..
+	curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt"); //Save the cookie from the server to cookie.txt
+
+	status = curl_easy_perform(curl);
+	if (check_cookie_status(status, curl))
+		goto leave;
+
+	//Prepare result struct to get next http response.
+	memset(result->data, 0, BUFFER_SIZE);
+	result->pos = 0;
+
+	prepare_curl_write_callback(curl, api_url, result);
+	curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookies.txt"); //Read locally stored cookies
+
+	status = curl_easy_perform(curl);
+	if (check_cookie_status(status, curl))
+		goto leave;
+
+
+	result->data[result->pos] = '\0';
+	if (DEBUG_RESULT)
+		printf("Http get request data is: %s\n", result->data);
+
+	curl_easy_cleanup(curl);
+
+	return result;
+
+leave:
+	if (curl) {
+		printf("error occured: easy cleanup curl");
+		curl_easy_cleanup(curl);
+	}
+	if (result)
+		free_write_result(result);
+
+	return NULL;
+}
+
+
+//free mem
+static struct write_result *post_request(const char *url, const char *api_url, char *post_query)
+{
+	char token[1024] = {0};
+	char session[1024] = {0};
+	char *token_text = "__RequestVerificationToken:";
+	char *session_text = "Cookie:SessionID=";
+	struct curl_slist *headers = NULL;
+	struct write_result *result;
+	CURL *curl = NULL;
+	CURLcode status;
+
+	curl = curl_easy_init();
+	if (!curl)
+		goto leave;
+
+	result = memalloc_write_result();
+	if (!result)
+		goto leave;
+
+	prepare_curl_write_callback(curl, url, result);
+
+	status = curl_easy_perform(curl);
+	if (check_cookie_status(status, curl))
+		goto leave;
+
+	result->data[result->pos] = '\0';
+
+
+	char *session_id = parser(result->data, "SessionID=");
+	if (DEBUG)
+		printf("Session id is: %s\n", session_id);
+	char *token_id = parser(result->data, "<TokInfo>");
+	if (DEBUG)
+		printf("Token is: %s\n", token_id);
+
+
+	//clean the memory to prepare write operation for next http response..
+	memset(result->data, 0, BUFFER_SIZE);
+	result->pos = 0;
+
+	//prepare http header with token & session.
+	sprintf(token, "%s%s", token_text, token_id);
+	sprintf(session, "%s%s", session_text, session_id);
+
+	headers = curl_slist_append(headers, token);
+	headers = curl_slist_append(headers, session);
+	headers = curl_slist_append(headers, "Content-Type: application/x-www-form-urlencoded; charset=UTF-8");
+	curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
+	prepare_curl_write_callback(curl, api_url, result);
+	curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post_query);
+
+	status = curl_easy_perform(curl);
+	if (check_cookie_status(status, curl))
+		goto leave;
+
+
+	curl_easy_cleanup(curl);
+
+	result->data[result->pos] = '\0';
+	if (DEBUG_RESULT)
+		printf("http post request data is: %s\n", result->data);
+
+	//free the parser memeory..
+	if (token_id)
+	{
+		free(token_id);
+		token_id = NULL;
+	}
+
+	if (session_id)
+	{
+		free(session_id);
+		session_id = NULL;
+	}
+
+	return result;
+
+leave:
+	if (curl) {
+		printf("error occured: easy cleanup curl\n");
+		curl_easy_cleanup(curl);
+	}
+
+	if (result)
+		free_write_result(result);
+
+	if (headers)
+		curl_slist_free_all(headers);
+
+	if (token_id)
+		free(token_id);
+
+	if (session_id)
+		free(session_id);
+
+	return NULL;
+}
+
+
+struct write_result *mobile_get_device_info()
+{
+	char *api_url = "http://192.168.8.1/api/device/information";
+
+	return get_request(home_url, api_url);
+}
+
+
+struct write_result *mobile_get_monitoring_status()
+{
+	char *api_url = "http://192.168.8.1/api/monitoring/status";
+
+	return get_request(home_url, api_url);
+}
+
+
+struct write_result *mobile_get_trafficstatistics()
+{
+	char *api_url = "http://192.168.8.1/api/monitoring/traffic-statistics";
+
+	return get_request(home_url, api_url);
+}
+
+
+struct write_result *mobile_get_provider()
+{
+	char *api_url = "http://192.168.8.1/api/net/current-plmn";
+
+	return get_request(home_url, api_url);
+}
+
+
+struct write_result *mobile_get_pin_status()
+{
+	char *api_url = "http://192.168.8.1/api/pin/status";
+
+	return get_request(home_url, api_url);
+}
+
+
+struct write_result *mobile_get_connection_status()
+{
+	char *api_url = "http://192.168.8.1/api/dialup/connection";
+
+	return get_request(home_url, api_url);
+}
+
+
+struct write_result *mobile_get_apn_profiles()
+{
+	char *api_url = "http://192.168.8.1/api/dialup/profiles";
+
+	return get_request(home_url, api_url);
+}
+
+
+struct write_result *mobile_get_notification()
+{
+	char *api_url = "http://192.168.8.1/api/monitoring/check-notifications";
+
+	return get_request(home_url, api_url);
+}
+
+
+struct write_result *mobile_get_sms_count()
+{
+	char *api_url = "http://192.168.8.1/api/sms/sms-count";
+
+	return get_request(home_url, api_url);
+}
+
+
+struct write_result *mobile_get_language()
+{
+	char *api_url = "http://192.168.8.1/api/language/current-language";
+
+	return get_request(home_url, api_url);
+}
+
+       /*     post calls */
+struct write_result *mobile_create_apn_profile(char *name, char *apn_name, char *username, char *password)
+{
+	char *api_url = "http://192.168.8.1/api/dialup/profiles";
+	char post_query[1024];
+
+	snprintf(post_query, 1023, "<request><Delete>0</Delete><SetDefault>0</SetDefault><Modify>1</Modify><Profile><Index></Index><IsValid>1</IsValid><Name>%s</Name><ApnIsStatic>1</ApnIsStatic><ApnName>%s</ApnName><DialupNum>*99#</DialupNum><Username>%s</Username><Password>%s</Password><AuthMode>0</AuthMode><IpIsStatic></IpIsStatic><IpAddress></IpAddress><DnsIsStatic></DnsIsStatic><PrimaryDns></PrimaryDns><SecondaryDns></SecondaryDns><ReadOnly>0</ReadOnly><iptype>2</iptype></Profile></request>", name, apn_name, username, password);
+
+	return post_request(sess_tok_url, api_url, post_query);
+}
+
+
+struct write_result *mobile_set_apn_profile_default(char *name, char *apn_name, char *username, char *password)
+{
+	char *api_url = "http://192.168.8.1/api/dialup/profiles";
+	char post_query[1024];
+
+	snprintf(post_query, 1023, "<request><Delete>0</Delete><SetDefault>3</SetDefault><Modify>2</Modify><Profile><Index>3</Index><IsValid>1</IsValid><Name>%s</Name><ApnIsStatic>1</ApnIsStatic><ApnName>%s</ApnName><DialupNum>*99#</DialupNum><Username>%s</Username><Password>%s</Password><AuthMode>0</AuthMode><IpIsStatic>0</IpIsStatic><IpAddress></IpAddress><DnsIsStatic>0</DnsIsStatic><PrimaryDns></PrimaryDns><SecondaryDns></SecondaryDns><ReadOnly>0</ReadOnly><iptype>0</iptype></Profile></request>", name, apn_name, username, password);
+
+	return post_request(sess_tok_url, api_url, post_query);
+}
+
+
+struct write_result *mobile_delete_apn_profile(int profile_name_location)
+{
+	char *api_url = "http://192.168.8.1/api/dialup/profiles";
+	char post_query[512];
+
+	sprintf(post_query, "<request><Delete>%d</Delete><SetDefault>1</SetDefault><Modify>0</Modify></request>", profile_name_location);
+
+	return post_request(sess_tok_url, api_url, post_query);
+}
+
+
+struct write_result *mobile_sms_read(int sms_location)
+{
+	char *api_url = "http://192.168.8.1/api/sms/set-read";
+	char post_query[256];
+
+	sprintf(post_query, "<request><Index>%d</Index></request>", sms_location);
+
+	return post_request(sess_tok_url, api_url, post_query);
+}
+
+
+struct write_result *mobile_sms_delete(int sms_location)
+{
+	char *api_url = "http://192.168.8.1/api/sms/delete-sms";
+	char post_query[256];
+
+	sprintf(post_query, "<request><Index>%d</Index></request>", sms_location);
+
+	return post_request(sess_tok_url, api_url, post_query);
+}
+
+
+struct write_result *mobile_reset_traffic()
+{
+	char *api_url = "http://192.168.8.1/api/monitoring/clear-traffic";
+	char *post_query = "<request><ClearTraffic>1</ClearTraffic></request>";
+
+	return post_request(sess_tok_url, api_url, post_query);
+}
+
+  /*   mobile_LTE_register has to be called to enbale or disable LTE   */
+struct write_result *mobile_LTE_register()
+{
+	char *api_url = "http://192.168.8.1/api/net/register";
+	char *post_query = "<request><Mode>0</Mode><Plmn></Plmn><Rat></Rat></request>";
+
+	return post_request(sess_tok_url, api_url, post_query);
+}
+
+
+struct write_result *mobile_LTE_enable()
+{
+	char *api_url = "http://192.168.8.1/api/net/net-mode";
+	char *post_query = "<request><NetworkMode>00</NetworkMode><NetworkBand>3FFFFFFF</NetworkBand><LTEBand>7FFFFFFFFFFFFFFF</LTEBand></request>";
+
+	return post_request(sess_tok_url, api_url, post_query);
+}
+
+
+struct write_result *mobile_LTE_disable()
+{
+	char *api_url = "http://192.168.8.1/api/net/net-mode";
+	char *post_query = "<NetworkMode>0201</NetworkMode><NetworkBand>3FFFFFFF</NetworkBand><LTEBand>7FFFFFFFFFFFFFFF</LTEBand></request>";
+
+	return post_request(sess_tok_url, api_url, post_query);
+}
+
+
+/*   00 - default- 4g,   01 - 2g, 02 - 3g    */
+struct write_result *mobile_set_connection_type(int connection_type)
+{
+	char *api_url = "http://192.168.8.1/api/dialup/connection";
+	char post_query[256];
+
+	sprintf(post_query, "<request><NetworkMode>%d</NetworkMode><NetworkBand>3FFFFFFF</NetworkBand><LTEBand>7FFFFFFFFFFFFFFF</LTEBand></request>", connection_type);
+
+	return post_request(sess_tok_url, api_url, post_query);
+}
+
+
+struct write_result *data_roaming(int action)
+{
+	char *api_url = "http://192.168.8.1/api/dialup/connection";
+	char post_query[256];
+
+	sprintf(post_query, "<request><RoamAutoConnectEnable>%d</RoamAutoConnectEnable><MaxIdelTime>600</MaxIdelTime><ConnectMode>0</ConnectMode><MTU>1500</MTU><auto_dial_switch>1</auto_dial_switch><pdp_always_on>0</pdp_always_on></request>", action);
+
+	return post_request(sess_tok_url, api_url, post_query);
+}
+
+
+struct write_result *mobile_data_roaming_enable()
+{
+	return data_roaming(ENABLE);
+}
+
+
+struct write_result *mobile_data_roaming_disable()
+{
+	return data_roaming(DISABLE);
+}
+
+/* 00 -> enter pin, 01 -> activate pin, 02 ->disable pin, 03 -> change pin, 04 -> enter puk */
+struct write_result *pin_action(char *type, char *current_pin, char *new_pin, char *puk)
+{
+	char *api_url = "http://192.168.8.1/api/pin/operate";
+	char post_query[256];
+
+	sprintf(post_query, "<request><OperateType>%s</OperateType><CurrentPin>%s</CurrentPin><NewPin>%s</NewPin><PukCode>%s</PukCode></request>", type, current_pin, new_pin, puk);
+
+	return post_request(sess_tok_url, api_url, post_query);
+}
+
+
+struct write_result *mobile_pin_enable(char *current_pin)
+{
+	return pin_action("01", current_pin, "", "");
+}
+
+
+struct write_result *mobile_pin_disable(char *current_pin)
+{
+	return pin_action("02", current_pin, "", "");
+}
+
+
+struct write_result *mobile_pin_set(char *current_pin, char *new_pin)
+{
+	return pin_action("03", current_pin, new_pin, "");
+}
+
+
+struct write_result *mobile_set_language(char *language_name)
+{
+	char *api_url = "http://192.168.8.1/api/language/current-language";
+	char post_query[128];
+
+	snprintf(post_query, 128, "<request><CurrentLanguage>%s</CurrentLanguage></request>", language_name);
+
+	return post_request(sess_tok_url, api_url, post_query);
+}
diff --git a/libmobile_hilink.h b/libmobile_hilink.h
new file mode 100644
index 0000000000000000000000000000000000000000..5892cfffa580c1a9bc4a3ef89d775ca9ce05b1de
--- /dev/null
+++ b/libmobile_hilink.h
@@ -0,0 +1,105 @@
+#ifndef LIBMOBILE_H
+#define LIBMOBILE_H
+
+
+#include <stdio.h>
+#include <curl/curl.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+
+#define BUFFER_SIZE  (256 * 1024)   //256kb
+#define TAG_CONTENT_SIZE   100
+#define DEBUG 1
+#define DEBUG_RESULT 0
+#define ENABLE 1
+#define DISABLE 0
+
+
+
+struct write_result {
+	char *data;
+	int pos;
+};
+
+
+
+
+
+//DeviceName, SerialNumber, Imei, Imsi, Iccid, Msisdn, HardwareVersion, SoftwareVersion,
+//WebUIVersion, MacAddress1, MacAddress2, ProductFamily, Classify, supportmode, workmode
+struct write_result *mobile_get_device_info();
+
+//ConnectionStatus, WifiConnectionStatus, SignalStrength, SignalIcon, CurrentNetworkType, CurrentServiceDomain, RoamingStatus, BatteryStatus
+//BatteryLevel, BatteryPercent, simlockStatus, WanIPAddress, WanIPv6Address, PrimaryDns, SecondaryDns, PrimaryIPv6Dns, SecondaryIPv6Dns,
+//CurrentWifiUser, TotalWifiUser, currenttotalwifiuser, ServiceStatus, SimStatus, WifiStatus, CurrentNetworkTypeEx, maxsignal, wifiindooronly, wififrequence,
+//classify, flymode, cellroam
+struct write_result *mobile_get_monitoring_status();
+
+//CurrentConnectTime, currentUpload, CurrentDownload, CurrentDownloadRate, CurrentUploadRate, TotalUpload, TotalDownload, TotalConnectTime, showtraffic
+struct write_result *mobile_get_trafficstatistics();
+
+
+//State, FullName, ShortName, Numeric, Rat
+struct write_result *mobile_get_provider();
+
+
+///SimState, PinOptState, SimPinTimes
+struct write_result *mobile_get_pin_status();
+
+//RoamAutoConnectEnable, MaxIdelTime, ConnectMode, MTU, auto_dial_switch, pdp_always_on
+struct write_result *mobile_get_connection_status();
+
+
+struct write_result *mobile_get_apn_profiles();
+
+
+//UnreadMessage, SmsStorageFull, OnlineUpdateStatus
+struct write_result *mobile_get_notification();
+
+
+//LocalUnread, LocalInbox, LocalOutbox, LocalDraft, LocalDeleted, SimUnread, SimInbox, SimOutbox
+//SimDraft, LocalMax, SimMax, SimUsed, NewMsg
+struct write_result *mobile_get_sms_count();
+
+struct write_result *mobile_get_language();
+
+struct write_result *mobile_create_apn_profile(char *name, char *apn_name, char *username, char *password);
+
+struct write_result *mobile_set_apn_profile_default(char *name, char *apn_name, char *username, char *password);
+
+struct write_result *mobile_delete_apn_profile(int profile_name_location);
+
+struct write_result *mobile_sms_read(int sms_location);
+
+struct write_result *mobile_sms_delete(int sms_location);
+
+struct write_result *mobile_reset_traffic();
+
+  /*   mobile_LTE_register has to be called to enbale or disable LTE   */
+struct write_result *mobile_LTE_register();
+
+struct write_result *mobile_LTE_enable();
+
+struct write_result *mobile_LTE_disable();
+
+/*   00 - default- 4g,   01 - 2g, 02 - 3g    */
+struct write_result *mobile_set_connection_type(int connection_type);
+
+struct write_result *mobile_data_roaming_enable();
+
+struct write_result *mobile_data_roaming_disable();
+
+/* 00 -> enter pin, 01 -> activate pin, 02 ->disable pin, 03 -> change pin, 04 -> enter puk */
+struct write_result *mobile_pin_enable(char *current_pin);
+
+struct write_result *mobile_pin_disable(char *current_pin);
+
+struct write_result *mobile_pin_set(char *current_pin, char *new_pin);
+
+struct write_result *mobile_set_language(char *language_name);
+
+
+#endif
+