qcloud_iot_export_gateway.h 4.1 KB
Newer Older
D
daishengdong 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150

/*
 * Tencent is pleased to support the open source community by making IoT Hub available.
 * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved.

 * Licensed under the MIT License (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://opensource.org/licenses/MIT

 * Unless required by applicable law or agreed to in writing, software distributed under the License is
 * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

#ifndef QCLOUD_IOT_EXPORT_GATEWAY_H_
#define QCLOUD_IOT_EXPORT_GATEWAY_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "qcloud_iot_export_mqtt.h"

/* Gateway and sub-device parameter */
typedef struct {
    /*gateway device info */
    char 						*product_id;
    char 						*device_name;
	/*sub-device device info */
	char 						*subdev_product_id;
	char 						*subdev_device_name;

} GatewayParam;

#define DEFAULT_GATEWAY_PARAMS {NULL, NULL, NULL, NULL}

/**
 * @brief Define a callback to be invoked when gatway event happen
 *
 * @param context, the program context
 * @param client, the gateway client
 * @param msg, the event message.
 *
 * @return none
 */
typedef void (*GatewayEventHandleFun)(void *client, void *context, void *msg);


/* The structure of gateway init param */
typedef struct {
    MQTTInitParams 		init_param; 	/* MQTT params */
    void 			*event_context; /* the user context */
    GatewayEventHandleFun 	event_handler; 	/* event handler for gateway user*/
} GatewayInitParam;

#define DEFAULT_GATEWAY_INIT_PARAMS { DEFAULT_MQTTINIT_PARAMS, NULL, NULL}


/**
 * @brief Create gateway client and connect to MQTT server
 *
 * @param init_param Gateway MQTT init parameters
 *
 * @return a valid gateway client handle when success, or NULL otherwise
 */
void *IOT_Gateway_Construct(GatewayInitParam* init_param);

/**
 * @brief Close connection and destroy gateway client
 *
 * @param client    handle to gateway client
 *
 * @return QCLOUD_RET_SUCCESS for success, or err code for failure
 */
int IOT_Gateway_Destroy(void *client);

/**
 * @brief Make sub-device online
 *
 * @param client    handle to gateway client
 * @param param     sub-device parameters
 *
 * @return QCLOUD_RET_SUCCESS for success, or err code for failure
 */
int IOT_Gateway_Subdev_Online(void *client, GatewayParam* param);

/**
 * @brief Make sub-device offline 
 *
 * @param client    handle to gateway client
 * @param param     sub-device parameters
 *
 * @return QCLOUD_RET_SUCCESS for success, or err code for failure
 */
int IOT_Gateway_Subdev_Offline(void *client, GatewayParam* param);


/**
 * @brief Publish gateway MQTT message
 *
 * @param client        handle to gateway client 
 * @param topic_name    MQTT topic name
 * @param params        publish parameters
 *
 * @return packet id (>=0) when success, or err code (<0) for failure
 */
int IOT_Gateway_Publish(void *client, char *topic_name, PublishParams *params);


/**
 * @brief Subscribe gateway MQTT topic
 *
 * @param client        handle to gateway client 
 * @param topic_filter  MQTT topic filter
 * @param params subscribe parameters
 *
 * @return packet id (>=0) when success, or err code (<0) for failure
 */
int IOT_Gateway_Subscribe(void *client, char *topic_filter, SubscribeParams *params);


/**
 * @brief unsubscribe gateway MQTT topic
 *
 * @param client        handle to gateway client 
 * @param topic_filter  MQTT topic filter 
 *
 * @return packet id (>=0) when success, or err code (<0) for failure
 */
int IOT_Gateway_Unsubscribe(void *client, char *topic_filter);


/**
 * @brief Check connection and keep alive state, read/handle MQTT message in synchronized way
 *
 * @param client        handle to gateway client
 * @param timeout_ms timeout value (unit: ms) for this operation
 *
 * @return QCLOUD_RET_SUCCESS when success, or err code for failure
 */
int IOT_Gateway_Yield(void *client, uint32_t timeout_ms);


#ifdef __cplusplus
}
#endif

#endif /* QCLOUD_IOT_EXPORT_GATEWAY_H_ */