#include "sr_net.h"
#include "sr_shell.h"
#include "sr_config.h"
#include "sr_log.h"


#include "string.h"



int SR_NetMqttcInit(SR_NET_ADP_T *adapter, SR_MQTT_CLIENT_T *mqttc,SR_MQTT_INIT_PARAMS_T *initParams);
int SR_NetMqttcDeinit(SR_MQTT_CLIENT_T *mqttc);
int SR_NetMqttcConnect(SR_MQTT_CLIENT_T *mqttc, SR_MQTT_CONN_PARAMS_T *connParams);
int SR_NetMqttcDisconnect(SR_MQTT_CLIENT_T *mqttc);
int SR_NetMqttcPublish(SR_MQTT_CLIENT_T *mqttc, SR_MQTT_QOS_E qos,char *topic, char *msg,uint16_t msgLen);
int SR_NetMqttcSubscribe(SR_MQTT_CLIENT_T *mqttc, char *topic, SR_MQTT_QOS_E qos);
int SR_NetMqttcUnsub(SR_MQTT_CLIENT_T *mqttc,  char *topic); 
int SR_NetMqttcSetSubTable(SR_MQTT_CLIENT_T *mqttc, SR_SUB_CB_TABLE_T  *table,uint8_t tableSize);
int SR_NetMqttcSetEvtCb(SR_MQTT_CLIENT_T *mqttc,MqttEventCb cb);




#define SERVER_ADDR  "mqtt.xiot.senthink.com"
#define SERVER_PORT  1883
#define CLIENT_ID    "8C7E7F277361448A9E84CE734EAAAE83"
#define USERNAME     "902028A4-AD1B3F1B-om0001"
#define PASSWARD     "02FD5D808837917E9953EA017E908DBA"


#define PUBLISH_TOPIC   "/standard/pub/902028A4/AD1B3F1B/om0001/custom/uplink"
#define SUBSCRIBE_TOPIC "/standard/sub/902028A4/AD1B3F1B/om0001/custom/downlink"



static SR_MQTT_CLIENT_T mqttc={0};


static void _MqttEventCallback(SR_MQTT_CLIENT_T *mqttc,SR_MQTT_EVENT_E event,SR_MQTT_MSG_T *mqttMsg)
{
  switch(event)
  {
    
      case SR_MQTT_EVENT_RECV_PUBLISH:     /*!< 收到平台下行PUBLISH数据 */
	  	
	  SR_PRINTF("[TEST]mqtt recive: \r\n");	  
	  
	  SR_PRINTF("pub_topic: %.*s\r\n",mqttMsg->topicLen,mqttMsg->topic);
	  SR_PRINTF("pub_msg: %.*s\r\n",mqttMsg->payloadLen,mqttMsg->payload);

	  break;

  }


}



//mqtt_init
static int mqtt_init_testcase(int argc, char *argv[])
{ 
    SR_NET_ADP_T *adapter = SR_NULL; 
	SR_MQTT_INIT_PARAMS_T initParams = {0};
    int ret;


		
    adapter = SR_NetAdpFind("luat");

    initParams.serverIP = SERVER_ADDR;
	initParams.serverPort = SERVER_PORT;


	SR_NetMqttcSetEvtCb(&mqttc,_MqttEventCallback); 
	ret = SR_NetMqttcInit(adapter, &mqttc,&initParams);
	

	SR_PRINTF("mqtt init ,ret=%d\r\n",ret);

	return 0;

}
SR_SHELL_CMD_EXPORT(mqtt_init, mqtt_init_testcase);


//mqtt_deinit
static int mqtt_deinit_testcase(int argc, char *argv[])
{ 
    SR_NET_ADP_T *adapter = SR_NULL; 

    int ret;

    
	ret = SR_NetMqttcDeinit( &mqttc);
	

	SR_PRINTF("mqtt deinit ,ret=%d\r\n",ret);	

	return 0;

}
SR_SHELL_CMD_EXPORT(mqtt_deinit, mqtt_deinit_testcase);



//mqtt_connect
static int mqtt_connect_testcase(int argc, char *argv[])
{ 
	SR_MQTT_CONN_PARAMS_T connParams = MQTT_CONNECT_DATA_INIT;
    int ret;

    connParams.clientID = CLIENT_ID;
    connParams.username = USERNAME;
	connParams.password = PASSWARD;
	
	ret =  SR_NetMqttcConnect(&mqttc, &connParams);
	
	SR_PRINTF("[TEST]mqtt connect ,ret=%d\r\n",ret);	

    return 0;
}
SR_SHELL_CMD_EXPORT(mqtt_connect, mqtt_connect_testcase);


static int mqtt_disconnect_testcase(int argc, char *argv[])
{ 
    int ret;
	
	ret =  SR_NetMqttcDisconnect(&mqttc);

	SR_PRINTF("mqtt disconnect ,ret=%d\r\n",ret);	

	return 0;

}
SR_SHELL_CMD_EXPORT(mqtt_disconnect, mqtt_disconnect_testcase);


static int mqtt_publish_testcase(int argc, char *argv[])
{ 
    int ret;

    
	ret = SR_NetMqttcPublish(&mqttc, QOS0,PUBLISH_TOPIC, "hello sunrise123",16);

	SR_PRINTF("mqtt publish ,ret=%d\r\n",ret);	

	return 0;

}
SR_SHELL_CMD_EXPORT(mqtt_publish, mqtt_publish_testcase);


static int mqtt_subscribe_testcase(int argc, char *argv[])
{ 
    int ret;

    
	ret =  SR_NetMqttcSubscribe(&mqttc, SUBSCRIBE_TOPIC, QOS0);

	SR_PRINTF("mqtt subscribe ,ret=%d\r\n",ret);	

	return 0;

}
SR_SHELL_CMD_EXPORT(mqtt_subscribe, mqtt_subscribe_testcase);







