[Feature] add GA346 baseline version
Change-Id: Ic62933698569507dcf98240cdf5d9931ae34348f
diff --git a/src/lynq/lib/liblynq-protcl/lynq_mqtt/lynq_mqtt.c b/src/lynq/lib/liblynq-protcl/lynq_mqtt/lynq_mqtt.c
new file mode 100644
index 0000000..a7380ae
--- /dev/null
+++ b/src/lynq/lib/liblynq-protcl/lynq_mqtt/lynq_mqtt.c
@@ -0,0 +1,227 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "lynq_mqtt/lynq_mqtt.h"
+#include "liblog/lynq_deflog.h"
+
+#define HOST "58.246.1.50" // IP
+#define PORT 63743
+
+#define KEEP_ALIVE 60
+
+
+static int mqtt_session = 0;
+
+
+void my_message_callback(struct mosquitto *mosq, void *userdata, const struct mosquitto_message *message)
+{
+ char *str_payload = NULL;
+ if(message->payloadlen){
+ LYVERBLOG("+[mqtt][message%d]: topic:%s---data:%s\n",mqtt_session,message->topic, (char *)message->payload);//lt mod @2021.7.13 for mqtt_session
+ str_payload = malloc(message->payloadlen);
+ memset(str_payload,0,message->payloadlen);
+ memcpy(str_payload,message->payload,message->payloadlen);
+printf("0x:");//lt add @2021.7.13 for debug
+for(int i = 0; i < (message->payloadlen); i++)
+{
+printf(" %02x",str_payload[i]);
+}
+printf("\n");
+ free(str_payload);
+ str_payload = NULL;
+ }else{
+ LYVERBLOG("+[mqtt][message%d]: %s (null)\n",mqtt_session,message->topic); //lt mod @2021.7.13 for mqtt_session
+ }
+}
+
+void my_connect_callback(struct mosquitto *mosq, void *userdata, int result)
+{
+ int i;
+ if(!result){
+ LYVERBLOG("+[mqtt][connect][session%d]: ok!!\n", mqtt_session);
+ }else{
+ LYVERBLOG("+[mqtt][connect][session%d]: error num = %d\n", mqtt_session,MQTT_CONNECT_FAIL);
+ }
+}
+
+void my_disconnect_callback(struct mosquitto *mosq, void *userdata, int result)
+{
+ int i;
+ if(!result){
+ LYVERBLOG("+[mqtt][disconnect][session%d]: ok!!\n", mqtt_session);
+ }else{
+ LYVERBLOG("+[mqtt][disconnect][session%d]: error num = %d\n", mqtt_session,MQTT_DISCONNECT_FAIL);
+ }
+}
+
+void my_subscribe_callback(struct mosquitto *mosq, void *userdata, int mid, int qos_count, const int *granted_qos)
+{
+ LYVERBLOG("+[mqtt][subscribe][session%d]: ok!!\n", mqtt_session);
+}
+
+void my_unsubscribe_callback(struct mosquitto *mosq, void *obj, int mid)//lt add @2021.7.13 for unsubscribe callback function
+{
+ LYVERBLOG("+[mqtt][unsubscribe][session%d]: ok!!\n", mqtt_session);
+}
+
+void my_publish_callback(struct mosquitto *mosq, void *obj, int mid)
+{
+ LYVERBLOG("+[mqtt][publish][session%d]: ok!!\n", mqtt_session);
+}
+
+struct mosquitto *mosq = NULL;
+
+void lynq_mosquitto_set_message_callback(void (*message_callback)(struct mosquitto *mosq, void *userdata, const struct mosquitto_message *message))
+{
+ mosquitto_message_callback_set(mosq, message_callback);
+}
+
+
+void lynq_mosquitto_set_connect_callback(void (*connect_callback)(struct mosquitto *mosq, void *userdata, int result))
+{
+ mosquitto_connect_callback_set(mosq, connect_callback);
+}
+void lynq_mosquitto_set_subscribe_callback(void (*subscribe_callback)(struct mosquitto *mosq, void *userdata, int mid, int qos_count, const int *granted_qos))
+{
+ mosquitto_subscribe_callback_set(mosq, subscribe_callback); //lt mod @2021.7.13 for deleate my_subscribe_callback add subscribe_callback
+}
+
+void lynq_mosquitto_set_unsubscribe_callback(void (*on_unsubscribe)(struct mosquitto *mosq, void *obj, int mid)) //lt add @2021.7.13 for set unsubscribe callback function
+{
+ mosquitto_unsubscribe_callback_set(mosq,on_unsubscribe);
+}
+
+void lynq_mosquitto_set_publish_callback(void (*on_publish)(struct mosquitto *mosq, void *obj, int mid))
+{
+ mosquitto_publish_callback_set(mosq,on_publish);
+}
+
+void lynq_mosquitto_set_disconnect_callback( void (*disconnect_callback)( struct mosquitto *mosq,void *obj, int rc))
+{
+ mosquitto_disconnect_callback_set(mosq,disconnect_callback);
+}
+int lynq_mqtt_connect_init(struct mqtt_set_parament mqtt_message)
+{
+
+ int ret;
+ //libmosquitto ¿â³õʼ»¯
+ mosquitto_lib_init();
+
+ if(mqtt_message.client_id != NULL)
+ {
+ mosq = mosquitto_new(mqtt_message.client_id,mqtt_message.clean_session,NULL);//´´½¨mosquitto¿Í»§¶Ë
+ }else{
+ mosq = mosquitto_new(NULL,true,NULL);//´´½¨mosquitto¿Í»§¶Ë
+ }
+
+ if(!mosq){
+ LYVERBLOG("+[mqtt][init][session%d]: error num = %d\n", mqtt_message.session,CREATE_LIENT_ERROR);
+ mosquitto_lib_cleanup();
+ return CREATE_LIENT_ERROR;
+ }
+
+
+ lynq_mosquitto_set_connect_callback(my_connect_callback);
+ lynq_mosquitto_set_message_callback(my_message_callback);
+ lynq_mosquitto_set_subscribe_callback(my_subscribe_callback);
+ lynq_mosquitto_set_unsubscribe_callback(my_unsubscribe_callback); //lt add @2021.7.13 for set unsubscribe callback
+ lynq_mosquitto_set_disconnect_callback(my_disconnect_callback);
+ lynq_mosquitto_set_publish_callback(my_publish_callback);
+
+ // ÉèÖÃÁ¬½ÓµÄÓû§ÃûÓëÃÜÂë:£¬
+ // ²ÎÊý£º¾ä±ú¡¢Óû§Ãû¡¢ÃÜÂë
+ ret = mosquitto_username_pw_set(mosq, mqtt_message.usrname, mqtt_message.pwd);
+ if(ret){
+// LYVERBLOG("+[mqtt][init]: set username and password error!\n");
+ LYVERBLOG("+[mqtt][init][session%d]: error num = %d\n", mqtt_message.session,USER_PWD_ERROR);
+ mosquitto_destroy(mosq);
+ mosquitto_lib_cleanup();
+ return USER_PWD_ERROR;
+ }
+
+ if(mqtt_message.set_will.will_flag == 1)
+ {
+ mosquitto_will_set( mosq,mqtt_message.set_will.will_topic,mqtt_message.set_will.will_payloadlen,mqtt_message.set_will.will_payload,mqtt_message.set_will.will_qos,mqtt_message.set_will.retain);
+ }
+ //Á¬½Ó·þÎñÆ÷
+ if(mosquitto_connect(mosq, mqtt_message.ip_addr, mqtt_message.port, mqtt_message.keep_time)){
+// LYVERBLOG("+[mqtt][init]: unable to connect!\n");
+ LYVERBLOG("+[mqtt][init][session%d]: error num = %d\n", mqtt_message.session,CONNECT_FAIL);
+ return CONNECT_FAIL;
+ }
+ //¿ªÆôÒ»¸öỊ̈߳¬ÔÚÏß³ÌÀﲻͣµÄµ÷Óà mosquitto_loop() À´´¦ÀíÍøÂçÐÅÏ¢
+ int loop = mosquitto_loop_start(mosq);
+ if(loop != MOSQ_ERR_SUCCESS)
+ {
+// LYVERBLOG("+[mqtt][init]: mosquitto loop error\n");
+ LYVERBLOG("+[mqtt][init][session%d]: error num = %d\n", mqtt_message.session,CREATE_LOOP_FAIL);
+ return CREATE_LOOP_FAIL;
+ }
+ return NO_ERROR;
+}
+
+void lynq_mosquitto_publish_message(char *pub_topic,int pub_buf_len,char *pub_buf,int qos)
+{
+ mosquitto_publish(mosq,NULL,pub_topic,pub_buf_len,pub_buf,qos,0);
+}
+
+void lynq_mosquitto_subscribe_message(char *sub_topic,int sub_qos)
+{
+ mosquitto_subscribe(mosq, NULL, sub_topic, sub_qos);
+}
+
+void lynq_mosquitto_unsubscribe_message(char *unsub_topic) //lt add @2021.7.13 for unsubscribe function
+{
+ mosquitto_unsubscribe(mosq,NULL,unsub_topic);
+}
+
+void lynq_mosquitto_disconnect(void)
+{
+ mosquitto_disconnect(mosq);
+}
+
+#if 1
+struct mqtt_set_parament mqtt_set_data;
+void factory_mqtt_test(void)
+{
+ char buff[10] = {"123456789"};
+ buff[10] = '\0';
+
+ mqtt_set_data.usrname = "admin";
+ mqtt_set_data.pwd = "password";
+ mqtt_set_data.ip_addr = HOST;
+ mqtt_set_data.port = PORT;
+ mqtt_set_data.keep_time = KEEP_ALIVE;
+
+
+ lynq_mqtt_connect_init(mqtt_set_data);
+
+ lynq_mosquitto_set_connect_callback(my_connect_callback);
+ lynq_mosquitto_set_message_callback(my_message_callback);
+ lynq_mosquitto_set_subscribe_callback(my_subscribe_callback);
+ lynq_mosquitto_set_disconnect_callback(my_disconnect_callback);
+ lynq_mosquitto_set_publish_callback(my_publish_callback);
+
+ lynq_mosquitto_subscribe_message("/S2C/DATA ",2);
+
+ for(int i = 1000; i > 1; i--)
+ {
+ if((i % 10) == 0)
+ {
+ /*·¢²¼ÏûÏ¢*/
+ lynq_mosquitto_publish_message("/S2C/DATA ",10,buff,0);
+ }
+ sleep(1);
+ memset(buff,0,10);
+ }
+}
+#endif
+
+
+int lynq_mqtt_login(struct mqtt_set_parament mqtt_message)
+{
+ mqtt_session = mqtt_message.session;
+ lynq_mqtt_connect_init(mqtt_message);
+}
+