Files
TencentOS-tiny/components/connectivity/iotkit-embedded-3.0.1/3rdparty/tools/misc/linkkit_example_auto.c
dcxajichu 8c24d921b0 support aliyun sdk on TencentOS tiny
sample: examples\aliyun_iotkit_csdk_mqtt
project: board\TencentOS_tiny_EVB_MX_Plus\KEIL\aliyun_iotkit_csdk_mqtt
2019-10-31 16:36:28 +08:00

223 lines
6.8 KiB
C

/*
* Copyright (C) 2015-2018 Alibaba Group Holding Limited
*/
#include <stdio.h>
#include <string.h>
#include "infra_types.h"
#include "infra_defs.h"
#include "infra_compat.h"
#include "infra_compat.h"
#include "dev_model_api.h"
#include "dm_wrapper.h"
#include "cJSON.h"
#ifdef ATM_ENABLED
#include "at_api.h"
#endif
void HAL_Printf(const char *fmt, ...);
int HAL_SetProductKey(char *product_key);
int HAL_SetDeviceName(char *device_name);
int HAL_SetProductSecret(char *product_secret);
int HAL_SetDeviceSecret(char *device_secret);
/* Fill in your device info here */
#define PRODUCT_KEY " ###DEVICE_PK### "
#define PRODUCT_SECRET "0HxtPRZjwr14bi7K"
#define DEVICE_NAME "auto_example1"
#define DEVICE_SECRET "L1xQk7AntumkNNc8wvHwMJsh9PBoexN0"
/* This time interval will be given to SDK for receiving packets from network */
#define USER_EXAMPLE_YIELD_TIMEOUT_MS (200)
#define EXAMPLE_TRACE(...) \
do { \
HAL_Printf("\033[1;32;40m%s.%d: ", __func__, __LINE__); \
HAL_Printf(__VA_ARGS__); \
HAL_Printf("\033[0m\r\n"); \
} while (0)
typedef struct {
int cloud_connected;
int master_devid;
int master_initialized;
} user_example_ctx_t;
static user_example_ctx_t g_user_example_ctx;
static user_example_ctx_t *user_example_get_ctx(void)
{
return &g_user_example_ctx;
}
static int user_connected_event_handler(void)
{
user_example_ctx_t *user_example_ctx = user_example_get_ctx();
EXAMPLE_TRACE("Alibaba Cloud Connected Successfully!");
user_example_ctx->cloud_connected = 1;
return 0;
}
static int user_master_dev_available(void)
{
user_example_ctx_t *user_example_ctx = user_example_get_ctx();
if (user_example_ctx->cloud_connected && user_example_ctx->master_initialized) {
return 1;
}
return 0;
}
static int user_disconnected_event_handler(void)
{
user_example_ctx_t *user_example_ctx = user_example_get_ctx();
EXAMPLE_TRACE("Cloud Disconnected Event Arrived!");
user_example_ctx->cloud_connected = 0;
return 0;
}
static int user_property_set_event_handler(const int devid, const char *request, const int request_len)
{
int res = 0;
user_example_ctx_t *user_example_ctx = user_example_get_ctx();
EXAMPLE_TRACE("Property Set Received, Devid: %d, Request: %s", devid, request);
res = IOT_Linkkit_Report(user_example_ctx->master_devid,
ITM_MSG_POST_PROPERTY,
(unsigned char *)request,
request_len);
EXAMPLE_TRACE("Post Property Message ID: %d", res);
return 0;
}
static int user_initialized(const int devid)
{
user_example_ctx_t *user_example_ctx = user_example_get_ctx();
EXAMPLE_TRACE("Device Initialized, Devid: %d", devid);
if (user_example_ctx->master_devid == devid) {
user_example_ctx->master_initialized = 1;
}
return 0;
}
void user_post_property(void)
{
int res = 0;
user_example_ctx_t *user_example_ctx = user_example_get_ctx();
char *property_payload = "NULL";
/* Normal Example */
property_payload = "{\" ###DM_PROP_ID### \":0}";
res = IOT_Linkkit_Report(user_example_ctx->master_devid,
ITM_MSG_POST_PROPERTY,
(unsigned char *)property_payload,
strlen(property_payload));
EXAMPLE_TRACE("Post Property Message ID: %d", res);
}
void user_post_event(void)
{
int res = 0;
user_example_ctx_t *user_example_ctx = user_example_get_ctx();
char *event_id = " ###DM_EVT_ID### ";
char *event_payload = "NULL";
/* Normal Example */
event_payload = "{\" ###DM_EVT_OU_KEY### \":0}";
res = IOT_Linkkit_TriggerEvent(user_example_ctx->master_devid,
event_id,
strlen(event_id),
event_payload,
strlen(event_payload));
EXAMPLE_TRACE("Post Event Message ID: %d", res);
}
void set_iotx_info()
{
HAL_SetProductKey(PRODUCT_KEY);
HAL_SetProductSecret(PRODUCT_SECRET);
HAL_SetDeviceName(DEVICE_NAME);
HAL_SetDeviceSecret(DEVICE_SECRET);
}
int main(void)
{
unsigned int loop_cnt = 0;
int res = 0;
iotx_linkkit_dev_meta_info_t master_meta_info;
user_example_ctx_t *user_example_ctx = user_example_get_ctx();
#ifdef ATM_ENABLED
if (IOT_ATM_Init() < 0) {
EXAMPLE_TRACE("IOT ATM init failed!\n");
return -1;
}
#endif
IOT_SetLogLevel(IOT_LOG_DEBUG);
set_iotx_info();
/* Register Callback to Listen What You Interested inside SDK */
IOT_RegisterCallback(ITE_CONNECT_SUCC, user_connected_event_handler);
IOT_RegisterCallback(ITE_INITIALIZE_COMPLETED, user_initialized);
IOT_RegisterCallback(ITE_PROPERTY_SET, user_property_set_event_handler);
IOT_RegisterCallback(ITE_DISCONNECTED, user_disconnected_event_handler);
/* Create Meta Information Struct for IOT_Linkkit_Open() */
memset(&master_meta_info, 0, sizeof(iotx_linkkit_dev_meta_info_t));
memcpy(master_meta_info.product_key, PRODUCT_KEY, strlen(PRODUCT_KEY));
memcpy(master_meta_info.product_secret, PRODUCT_SECRET, strlen(PRODUCT_SECRET));
memcpy(master_meta_info.device_name, DEVICE_NAME, strlen(DEVICE_NAME));
memcpy(master_meta_info.device_secret, DEVICE_SECRET, strlen(DEVICE_SECRET));
/* Create Master Device Resources by IOT_Linkkit_Open() */
memset(user_example_ctx, 0, sizeof(user_example_ctx_t));
user_example_ctx->master_devid = IOT_Linkkit_Open(IOTX_LINKKIT_DEV_TYPE_MASTER, &master_meta_info);
if (user_example_ctx->master_devid < 0) {
EXAMPLE_TRACE("IOT_Linkkit_Open() Failed\n");
return -1;
}
EXAMPLE_TRACE("IOT_Linkkit_Open() Success!\n");
/* Start Connectting Alibaba Cloud */
res = IOT_Linkkit_Connect(user_example_ctx->master_devid);
if (res < 0) {
EXAMPLE_TRACE("IOT_Linkkit_Connect() Failed\n");
return -1;
}
EXAMPLE_TRACE("IOT_Linkkit_Connect() Success! res = IOT_Linkkit_Connect() = %d\n", res);
/* Infinite Loop of Processing Command Received from Cloud */
while (1) {
IOT_Linkkit_Yield(USER_EXAMPLE_YIELD_TIMEOUT_MS);
/* Post Proprety Example */
if (loop_cnt % 100 == 0 && user_master_dev_available()) {
EXAMPLE_TRACE("loop_cnt = %d, going to post property\n", loop_cnt);
user_post_property();
}
/* Post Event Example */
if (loop_cnt % 180 == 0 && user_master_dev_available()) {
EXAMPLE_TRACE("loop_cnt = %d, going to post event\n", loop_cnt);
user_post_event();
}
++ loop_cnt;
}
IOT_Linkkit_Close(user_example_ctx->master_devid);
IOT_DumpMemoryStats(IOT_LOG_DEBUG);
IOT_SetLogLevel(IOT_LOG_NONE);
return 0;
}