硬件开发指南


1. 简介

1.1 硬件开发完成设备的接入,如下图所示(MQTT):

设备接入

1.2 准备工作

项目的开发需要平台的支持,平台完成以下工作(具体操作参考应用开发指南):

由于平台众多,下文中以Linux平台为例介绍; 设备模型以照明设备(light)为例说明

2. 目录结构

glodon.iot.sdk/
├── configs
│   └── linux.mk
├── doc
│   ├── get-started.md
│   ├── hardware-dev-guide.md
│   └── images
│       ├── dev_control.png
│       ├── dev_debug_control.png
│       ├── dev_debug_key.jpg
│       ├── dev_debug_read.png
│       ├── dev_debug_write.png
│       ├── device-to-cloud.png
│       ├── dev_log.png
│       ├── dev_model.png
│       ├── dev_sdk_dowload.png
│       ├── esp8266-12f.jpg
│       ├── vxworks-eclipse-settting-0.jpg
│       ├── vxworks-eclipse-settting-1.jpg
│       ├── vxworks-eclipse-settting-2.jpg
│       └── vxworks-eclipse-settting-3.jpg
├── include
│   ├── glodon_iot_client.h
│   ├── glodon_iot_error.h
│   ├── glodon_iot_httpc.h
│   ├── glodon_iot_httpc_request.h
│   └── glodon_iot_log.h
├── lib
│   └── linux
│       ├── libglodoniot.a
│       └── libplatform.a
└── samples
    └── linux
        └── src
            ├── app_data.c
            ├── app_data.h
            ├── main.c
            ├── Makefile
            ├── model
            │   ├── cJSON.c
            │   ├── cJSON.h
            │   ├── dm_light_data.c
            │   ├── dm_light_data.h
            │   ├── glodon_iot_data_def.h
            │   ├── glodon_iot_data_internal.c
            │   └── glodon_iot_data_internal.h
            └── README.md

3. 编译运行

项目使用Makefile的方式编译, 编译器默认使用gcc。

在编译前,请确保系统的编译环境已经可以正确使用。

特殊的编译选项参考下一章节。

4. 编译选项

4.1 configs/linux.mk

# compile toolchain, link arm-elf-
TOOLCHAIN =

# processor ENABLE_BIG_ENDIAN ?= 0
#ENABLE_BIG_ENDIAN = 0

# thread ENABLE_THREAD_SUPPORT ?= 0
ENABLE_THREAD_SUPPORT = 1

# function session #ASSIGN_FUCTION_SESSION ?=
#ASSIGN_FUCTION_SESSION =

# critical printf, for default or trace log #CRITICAL_PRINTF_FUN ?= printf
#CRITICAL_PRINTF_FUN =

# extra complie flags
PLATFORM_CFLAG =

# system tools
RM = rm -rf
CP = cp -rf
MV = mv -f
MKDIR = mkdir -p

CC = $(TOOLCHAIN)gcc
CXX = $(TOOLCHAIN)g++
LD = $(TOOLCHAIN)ld
AR = $(TOOLCHAIN)ar
STRIP = $(TOOLCHAIN)strip
SIZE = $(TOOLCHAIN)size

主要选项:

CC = $(TOOLCHAIN)gcc
CXX = $(TOOLCHAIN)g++
LD = $(TOOLCHAIN)ld
AR = $(TOOLCHAIN)ar
STRIP = $(TOOLCHAIN)strip
SIZE = $(TOOLCHAIN)size

默认不用修改。如果不是使用gcc系列编译器,可以相应修改。

RM = rm -rf
CP = cp -rf
MV = mv -f
MKDIR = mkdir -p

默认不用修改。如果是非Linux家族系统,可以相应修改。

4.2 samples/linux/src/Makefile

...
CFLAGS += -DENABLE_IOT_DEBUG
CFLAGS += -DENABLE_IOT_INFO
CFLAGS += -DENABLE_IOT_WARN
CFLAGS += -DENABLE_IOT_ERROR
...

该文件只需关心以上部分编译选项,它们的作用是选项日志输出级别,影响include/glodon_iot_log.h文件编译。

5. 接口说明

5.1 客户端接口 include/glodon_iot_client.h

5.1.2 const char* glodon_iot_get_version(void);

5.1.3 GlodonIotClient glodon_iot_init(GlodonIotInitParams *pParams);

5.1.4 void glodon_iot_destory(GlodonIotClient pClient);

5.1.5 int glodon_iot_register_parser(GlodonIotClient pClient, const char *device_model_id, const void *parser, GlodonIotOnMessageCallback callback);

5.1.6 IoTError glodon_iot_connect(GlodonIotClient pClient);

5.1.7 void glodon_iot_yield(GlodonIotClient pClient, uint32_t timeout); // ms

5.1.8 bool glodon_iot_is_client_connected(GlodonIotClient pClient);

5.1.9 IoTError glodon_iot_send(GlodonIotClient pClient, void *pData);

5.1.10 IoTError glodon_iot_send_ex(GlodonIotClient pClient, void *pData, uint32_t timeout);

5.1.11 void* glodon_iot_get_userdata(GlodonIotClient pClient);

5.2 日志接口 include/glodon_iot_log.h

目前的日志输出到两个地方: 终端和网络

接口主要使用四个宏完成日志输出的功能, 它们的开关受编译选项的配置:

5.3 数据访问接口 samples/linux/src/model/dm_light_data.h

该头文件由不同设备模型自动生成,所以有所差异,但是使用方式一致。

5.3.1 DMLight dm_light_alloc(void);

5.3.2 void dm_light_free(DMLight data);

6. 开发参考

代码结构已经在samples/linux/src/app_data.c

6.1 void on_light_message(GlodonIotClient pClient, IotMetaData_t *metadata, int evt, int argc, void *argv[]);

处理所有下行数据, 数据的获取方式已经在代码中生成。

6.2 void dm_light_report(GlodonIotClient pClient);

采集数据部分,代码中有示例。

7. 调试指南

7.1 设备日志

通过查看设备日志是最基本的调试手段,可以通过平台订阅设备日志,查看设备的运行状态。

示图如下:

设备日志

7.2 设备控制

可以通过平台向在线设备发送控制命令,调试下行通信及对应业务处理。

示图如下:

设备控制

更多内容参见应用开发指南

特别说明

由于vxworks没有Linux下的编译工具链, 目前使用Windows下的编译工具链。

vxworks目前提供的sample是使用Makefile的方式,对于一般开发,应该对应建立ecplise的vxworks工程。

在建立eclipse的vxworks工程时,请参考如下设置(目前的库是vxworks for arm):

设置参考
设置参考
设置参考
设置参考