第三方设备SDK-API函数接口 (v1.2.0)

System

该接口为SDK 用户API函数接口,用户调用函数完成系统设置。

init()

//函数定义
void System.init(void)

描述

完成SDK初始化, 用户需在设备启动后先运行该函数完成SDK的初始化工作。

参数

返回

loop()

//函数定义
void System.loop(void)

描述 loop()函数用于驱动SDK内部处理,必须在 main 函数中while(1)里面调用,且不能阻塞。

参数

返回

setDeviceInfo()

//函数声明
void System.setDeviceInfo(char *deviceId, char *deviceSecret, char *productID, char *productSecret, char *hardwareVersion, char *softwareVersion);

//示例
#define DEVICE_ID_DEF                    "0dvo0bdoy00000000000068f"         //设备标识
#define DEVICE_SECRET_DEF                "c08e66a8b08fd8436dac0dce9cc3bca9" //设备密钥
#define PRODUCT_ID                       "QgpRSvbxKTyqf297"                 //产品ID
#define PRODUCT_SECRET                   "71c464c02ba03141d6eb0b681f30d126" //产品密钥
#define HARDWARE_VERSION                 "1.0.0"                            //硬件版本号
#define SOFTWARE_VERSION                 "1.0.0"                            //软件版本号

System.setDeviceInfo(DEVICE_ID_DEF, DEVICE_SECRET_DEF, PRODUCT_ID_DEF, PRODUCT_SECRET_DEF, HARDWARE_VERSION_DEF, SOFTWARE_VERSION_DEF);

描述

设置设备安全和版本信息

参数

  • deviceId: 设备标识,该标识为设备的唯一标识。
  • deviceSecret: 设备密钥,设备标识和设备密钥是连入网络的凭证信息。
  • productID: 产品标识,设备归属产品的标识。
  • productSecret: 产品密钥。通过产品密钥可以完成设备的自动注册。产品密钥在任何时候不传输。产品密钥属于绝密信息,请防止泄露
  • hardwareVersion: 设备硬件版本号。
  • softwareVersion: 设备软件版本号。

返回

setEventCallback()

//函数定义
typedef void (*event_handler_t)(int event, int param, uint8_t *data, uint32_t len);
void System.setEventCallback(event_handler_t handler);

//示例
void eventProcess(int event, int param, uint8_t *data, uint32_t datalen)
{
}

System.setEventCallback(eventProcess);

描述

设置设备事件通知回调函数

参数

  • event: 系统事件类型
    • event_network_status: 网络连接状态事件。
    • event_cloud_status: 云平台连接状态事件。
    • event_cloud_comm: 云平台通讯事件。
  • param: 系统事件参数
    • ep_network_status_disconnected: event_network_status事件参数,指示网络连接断开
    • ep_network_status_connected: event_network_status事件参数,指示网络连接成功
    • ep_cloud_status_disconnected: event_cloud_status事件参数,指示云平台连接断开
    • ep_cloud_status_connected: event_cloud_status事件参数,指示云平台连接成功
    • ep_cloud_comm_data: event_cloud_comm事件参数,指示接收到云端数据通知
    • ep_cloud_comm_ota: event_cloud_comm事件参数,指示接收到云端ota升级通知
  • data: 接收云端数据指针
  • datalen: 接收云端数据长度

返回

setDatapointControl()

//函数定义
void System.setDatapointControl(dp_transmit_mode_t mode, uint32_t lapse);

//示例
System.setDatapointControl(DP_TRANSMIT_MODE_AUTOMATIC, 6000); //自动发送  间隔时间6000秒

描述

控制数据点发送方式

参数

  • mode: 设置数据点发送数据处理方式
    • DP_TRANSMIT_MODE_AUTOMATIC: 数据点发送由系统自动控制,当数据点发生变化或者发送间隔大于lapse设置的间隔值. 该方式为默认方式, 间隔时间默认为600秒(10分钟)
    • DP_TRANSMIT_MODE_MANUAL: 由用户控制数据点数据发送. 通过调用Cloud.sendDatapoint()和Cloud.sendDatapointAll()接口.
  • lapse: 设置数据点自动发送时间间隔, 单位:秒. 只有当mode设置为DP_TRANSMIT_MODE_AUTOMATIC, 该参数有效. 最小值为600s(10分钟).

返回

返回

Cloud

云平台相关功能函数,负责设备与云平台数据交互。

connect()

//函数定义
void Cloud.connect(void);

描述

设备连接云平台。

参数

返回

connected()

//函数定义
bool Cloud.connected();

描述

  • 设备是否连接云平台。

参数

返回

  • true : 已连接平台
  • false : 未连接平台

disconnect()

//函数定义
void Cloud.disconnect();

描述

  • 设备断开云平台连接。

参数

返回

sendCustomData()

//函数声明
int Cloud.sendCustomData(const uint8_t *buffer, uint16_t length);

描述

发送自定义数据发送至云平台。

参数

  • buffer: 发送数据缓冲区
  • length: 发送数据缓冲区大小

返回

  • 0: 成功
  • 1: 发送中
  • -1: 发送失败

defineDatapointBool()

//函数声明
void Cloud.defineDatapointBool(const uint16_t dpID, const char *permission, const bool value)

//函数调用
Cloud.defineDatapointBool(1, DP_PERMISSION_UP_DOWN, false);

描述

定义bool型数据点

参数

  • dpID: 产品数据点id
  • permission: 数据点数据传输类型,值可为:
    • DP_PERMISSION_UP_DOWN: 数据可上送也可下发,即设备可上送此数据点的数据到云平台,云平台也可下发此数据点的数据到设备
    • DP_PERMISSION_UP_ONLY: 数据只可上送,即只能是设备将此数据点的数据上送到云平台
    • DP_PERMISSION_DOWN_ONLY: 数据只可下发,即只能是云平台下发此数据点的数据到设备
  • value: 数据点默认值, 默认为0

返回

defineDatapointNumber()

//函数声明
void Cloud.defineDatapointNumber(const uint16_t dpID, const char *permission, const double minValue, const double maxValue, const int resolution, const double value)

//函数调用
Cloud.defineDatapointNumber(1, DP_PERMISSION_UP_ONLY, -100, 100, 0);

描述

定义数值型数据点

参数

  • dpID: 产品数据点id
  • permission: 数据点数据传输类型, 值可为:
    • DP_PERMISSION_UP_DOWN: 数据可上送也可下发,即设备可上送此数据点的数据到云平台,云平台也可下发此数据点的数据到设备
    • DP_PERMISSION_UP_ONLY: 数据只可上送,即只能是设备将此数据点的数据上送到云平台
    • DP_PERMISSION_DOWN_ONLY: 数据只可下发,即只能是云平台下发此数据点的数据到设备
  • minValue: 数据点数据最小值
  • maxValue: 数据点数据最大值
  • resolution: 数据点数据分辨率, 即小数点的位数。可为0-4。例如:0表示整型数据; 1表示小数点个数为1
  • value: 数据点默认值, 默认为0

返回

defineDatapointEnum()

//函数声明
void Cloud.defineDatapointEnum(const uint16_t dpID, const char *permission, const int value)

//函数调用
Cloud.defineDatapointEnum(3, DP_PERMISSION_UP_DOWN, 0);

描述

定义枚举型数据点。

参数

  • dpID: 产品数据点id.
  • permission: 数据点数据传输类型, 值可为:
    • DP_PERMISSION_UP_DOWN: 数据可上送也可下发,即设备可上送此数据点的数据到云平台,云平台也可下发此数据点的数据到设备
    • DP_PERMISSION_UP_ONLY: 数据只可上送,即只能是设备将此数据点的数据上送到云平台
    • DP_PERMISSION_DOWN_ONLY: 数据只可下发,即只能是云平台下发此数据点的数据到设备
  • value: 数据点默认值, 默认为0

返回

defineDatapointString()

//函数声明
void Cloud.defineDatapointString(const uint16_t dpID, const char *permission, const char *value)

//函数调用
Cloud.defineDatapointString(1, DP_PERMISSION_UP_DOWN, "oh yeah!");

描述

定义字符串型数据点。

参数

  • dpID: 产品数据点id.
  • permission: 数据点数据传输类型, 值可为:
    • DP_PERMISSION_UP_DOWN: 数据可上送也可下发,即设备可上送此数据点的数据到云平台,云平台也可下发此数据点的数据到设备
    • DP_PERMISSION_UP_ONLY: 数据只可上送,即只能是设备将此数据点的数据上送到云平台
    • DP_PERMISSION_DOWN_ONLY: 数据只可下发,即只能是云平台下发此数据点的数据到设备
  • maxLen: 字符串数据点的最大长度
  • value: 数据点默认值, 默认为0

返回

defineDatapointBinary()

//函数声明
void Cloud.defineDatapointBinary(const uint16_t dpID, const char *permission, const uint8_t *value, const uint16_t len)

//函数调用
Cloud.defineDatapointBinary(1, DP_PERMISSION_UP_DOWN, "\x30\x31\x32", 3);

描述

定义扩展型数据点。

参数

  • dpID: 产品数据点id.
  • permission: 数据点数据传输类型, 值可为:
    • DP_PERMISSION_UP_DOWN: 数据可上送也可下发,即设备可上送此数据点的数据到云平台,云平台也可下发此数据点的数据到设备
    • DP_PERMISSION_UP_ONLY: 数据只可上送,即只能是设备将此数据点的数据上送到云平台
    • DP_PERMISSION_DOWN_ONLY: 数据只可下发,即只能是云平台下发此数据点的数据到设备
  • maxLen: 二进制数据的最大长度
  • value: 数据点数据缓冲区指针, 默认为NULL
  • len: 数据点数据缓冲区长度, 默认为0

返回

readDatapointBool()

//函数声明
read_datapoint_result_t Cloud.readDatapointBool(const uint16_t dpID, bool *value);

//应用实例
bool LightSwitch;

void Initialize(void)
{
    Cloud.defineDatapointBool(1, DP_PERMISSION_UP_DOWN, false, DP_POLICY_NONE, 0);//灯泡开关
}

void main(void)
{
    Initialize();
    while(1)
    {
        if (RESULT_DATAPOINT_NEW == Cloud.readDatapoint(1, LightSwitch))
        {
            if(true == LightSwitch)
            {
                // 打开灯泡
            }
            else
            {
                // 关闭灯泡
            }
            Cloud.sendDatapoint(1, LightSwitch);
        }
    }
}

描述

读取布尔型数据点的值

参数

  • dpID: 产品数据点id.
  • value: 读取数据点缓存区数据,并存储至变量

返回

  • RESULT_DATAPOINT_OLD: 获取的数据为旧数据
  • RESULT_DATAPOINT_NEW: 获取的数据为新收取数据, 即平台刚下发的数据。读取数据后,缓冲区数据变成旧数据
  • RESULT_DATAPOINT_NONE: 数据点不存在

readDatapointNumberInt32()

//函数声明
read_datapoint_result_t Cloud.readDatapointNumberInt32(const uint16_t dpID, int32_t *value);

描述

读取数值型(整型)数据点的值。

参数

  • dpID: 产品数据点id.
  • value: 读取数据点缓存区数据,并存储至变量

返回

  • RESULT_DATAPOINT_OLD: 获取的数据为旧数据
  • RESULT_DATAPOINT_NEW: 获取的数据为新收取数据, 即平台刚下发的数据。读取数据后,缓冲区数据变成旧数据
  • RESULT_DATAPOINT_NONE: 数据点不存在

readDatapointNumberDouble()

//函数声明
read_datapoint_result_t Cloud.readDatapointNumberDouble(const uint16_t dpID, double *value);

描述

读取数值值(浮点型)数据点的值。

参数

  • dpID: 产品数据点id.
  • value: 读取数据点缓存区数据,并存储至变量

返回

  • RESULT_DATAPOINT_OLD: 获取的数据为旧数据
  • RESULT_DATAPOINT_NEW: 获取的数据为新收取数据, 即平台刚下发的数据。读取数据后,缓冲区数据变成旧数据
  • RESULT_DATAPOINT_NONE: 数据点不存在

readDatapointEnum()

//函数声明
read_datapoint_result_t Cloud.readDatapointEnum(const uint16_t dpID, int *value);

描述

读取枚举型数据点的值。

参数

  • dpID: 产品数据点id.
  • value: 读取数据点缓存区数据,并存储至变量

返回

  • RESULT_DATAPOINT_OLD: 获取的数据为旧数据
  • RESULT_DATAPOINT_NEW: 获取的数据为新收取数据, 即平台刚下发的数据。读取数据后,缓冲区数据变成旧数据
  • RESULT_DATAPOINT_NONE: 数据点不存在

readDatapointString()

//函数声明
read_datapoint_result_t Cloud.readDatapointString(const uint16_t dpID, const char **value);

描述

读取字符串型数据点的值。

参数

  • dpID: 产品数据点id.
  • value: 内部字符串数据点缓存区指针

返回

  • RESULT_DATAPOINT_OLD: 获取的数据为旧数据
  • RESULT_DATAPOINT_NEW: 获取的数据为新收取数据, 即平台刚下发的数据。读取数据后,缓冲区数据变成旧数据
  • RESULT_DATAPOINT_NONE: 数据点不存在

readDatapointBinary()

//函数声明
read_datapoint_result_t Cloud.readDatapointBinary(const uint16_t dpID, uint8_t **value, uint16_t *len);

描述

读取字符串型数据点的值。

参数

  • dpID: 产品数据点id.
  • value: 内部二进制数据点缓存区指针
  • len: 长度变量指针

返回

  • RESULT_DATAPOINT_OLD: 获取的数据为旧数据
  • RESULT_DATAPOINT_NEW: 获取的数据为新收取数据, 即平台刚下发的数据。读取数据后,缓冲区数据变成旧数据
  • RESULT_DATAPOINT_NONE: 数据点不存在

writeDatapointBool()

//函数声明
void Cloud.writeDatapointBool(const uint16_t dpID, bool value)

//应用实例
void Initialize(void)
{
    Cloud.defineDatapointBool(1, DP_PERMISSION_UP_DOWN, false, DP_POLICY_NONE, 0);
}

void main(void)
{
    Initialize();
    while(1)
    {
        Cloud.writeDatapointBool(1, true);
        Cloud.sendDatapointAll();
    }
}

描述

往数据点的缓存区发送数据(布尔型), 数据不上到云平台,只有调用相对应的Cloud.sendDataPointBool()或者Cloud.sendDatapointAll()才会上送到云平台。

参数

  • dpID: 产品数据点id.
  • value: 变量数据存储至数据点缓存区

返回

writeDatapointNumberInt32()

//函数声明
void Cloud.writeDatapointNumberInt32(const uint16_t dpID, int32_t value)

//应用实例
void Initialize(void)
{
    Cloud.defineDatapointNumber(1, DP_PERMISSION_UP_ONLY, 0, 100, 0, 0, DP_POLICY_NONE, 0);   //湿度
}

void main(void)
{
    Initialize();
    while(1)
    {
        Cloud.writeDatapoint(1, 30);
        Cloud.sendDatapointAll();
    }
}

描述

往数据点的缓存区发送数据(数值型), 数据不上到云平台,只有调用相对应的sendDataPointNumberInt32()或者sendDatapointAll()才会上送到云平台。

参数

  • dpID: 产品数据点id.
  • value: 变量数据存储至数据点缓存区

返回

writeDatapointNumberDouble()

//函数声明
void Cloud.writeDatapointNumberDouble(const uint16_t dpID, double value)

//应用实例
void Initialize(void)
{
    Cloud.defineDatapointNumber(1, DP_PERMISSION_UP_ONLY, -100, 100, 2, 0, DP_POLICY_NONE, 0);   //温度
}

void main()
{
    Initialize();
    while(1)
    {
        Cloud.writeDatapointNumberDouble(1, 30.23);
        Cloud.sendDatapointAll();
    }
}

描述

往数据点的缓存区发送数据(浮点数值型), 数据不上到云平台,只有调用相对应的sendDataPointNumberDouble()或者sendDatapointAll()才会上送到云平台。

参数

  • dpID: 产品数据点id.
  • value: 变量数据存储至数据点缓存区

返回

writeDatapointEnum()

//函数声明
void Cloud.writeDatapointEnum(const uint16_t dpID, int value)

//应用实例
void Initialize(void)
{
    Cloud.defineDatapointEnum(1, DP_PERMISSION_UP_ONLY, 0, DP_POLICY_NONE, 0);   //模式
}

void main(void)
{
    Initialize();
    while(1)
    {
        Cloud.writeDatapointEnum(1, 3);
        Cloud.sendDatapointAll();
    }
}

描述

往数据点的缓存区发送数据(枚举型数据点), 数据不上到云平台,只有调用相对应的sendDataPointEnum()或者sendDatapointAll()才会上送到云平台。

参数

  • dpID: 产品数据点id.
  • value: 变量数据存储至数据点缓存区

返回

writeDatapointString()

//函数声明
void Cloud.writeDatapointString(const uint16_t dpID, const char *value)

//应用实例
char str[64] = "intoyun";

void Initialize(void)
{
    Cloud.defineDatapointString(1, DP_PERMISSION_UP_ONLY, "hello", DP_POLICY_NONE, 0);
}

void main(void)
{
    Initialize();
    while(1)
    {
        Cloud.writeDatapointString(1, str);
        Cloud.sendDatapointAll();
    }
}

描述

往数据点的缓存区发送数据(字符串型数据点), 数据不上到云平台,只有调用相对应的sendDataPointString()或者sendDatapointAll()才会上送到云平台。

参数

  • dpID: 产品数据点id.
  • value: 变量数据存储至数据点缓存区

返回

writeDatapointBinary()

//函数声明
void Cloud.writeDatapointBinary(const uint16_t dpID, const uint8_t *value, uint16_t len)

//应用实例
uint8_t dat[4] = {0x1,0x2,0x3,0x4};

void Initialize(void)
{
    Cloud.defineDatapointBinary(1, DP_PERMISSION_UP_ONLY, 0, 4, DP_POLICY_NONE, 0);   //温度
}

void main()
{
    Initialize();
    while(1)
    {
        Cloud.writeDatapointBinary(1,dat,4);
        Cloud.sendDatapointAll();
    }
}

描述

往缓存区发送数据(二进制型数据点), 数据不上到云平台,只有调用相对应的sendDataPointBinary()或者sendDatapointAll()才会上送到云平台。

参数

  • dpID: 产品数据点id.
  • value: 变量数据存储至数据点缓存区
  • len: 写入的数据大小

返回

sendDatapointBool()

//函数声明
int Cloud.sendDatapointBool(const uint16_t dpID, bool value)

//应用实例
void Initialize(void)
{
    Cloud.defineDatapointBool(1, DP_PERMISSION_UP_ONLY, 0);
}

void main(void)
{
    Initialize();
    while(1)
    {
        Cloud.sendDatapointBool(1, true);
    }
}

描述

往数据缓存区发送数据(布尔型), 并传输数据至云平台。

参数

  • dpID: 产品数据点id.
  • value: 变量数据存储至数据点缓存区, 并根据数据点上送策略上送数据

返回

  • 0: 成功
  • 1: 发送中
  • -1: 发送失败

sendDatapointNumberInt32()

//函数声明
int Cloud.sendDatapointNumberInt32(const uint16_t dpID, int32_t value)

描述

往数据缓存区发送数据(数值型), 并传输数据至云平台。

参数

  • dpID: 产品数据点id.
  • value: 变量数据存储至数据点缓存区, 并根据数据点上送策略上送数据

返回

  • 0: 成功
  • 1: 发送中
  • -1: 发送失败

sendDatapointNumberDouble()

//函数声明
int Cloud.sendDatapointNumberDouble(const uint16_t dpID, double value)

描述

往数据缓存区发送数据(数值浮点型), 并传输数据至云平台。

参数

  • dpID: 产品数据点id.
  • value: 变量数据存储至数据点缓存区, 并根据数据点上送策略上送数据

返回

  • 0: 成功
  • 1: 发送中
  • -1: 发送失败

sendDatapointEnum()

//函数声明
int Cloud.sendDatapointEnum(const uint16_t dpID, int value)

描述

往数据缓存区发送数据(枚举型), 并传输数据至云平台。

参数

  • dpID: 产品数据点id.
  • value: 变量数据存储至数据点缓存区, 并根据数据点上送策略上送数据

返回

  • 0: 成功
  • 1: 发送中
  • -1: 发送失败

sendDatapointString()

//函数声明
int Cloud.sendDatapointString(const uint16_t dpID, const char *value)

描述

往数据缓存区发送数据(字符串型), 并传输数据至云平台。

参数

  • dpID: 产品数据点id.
  • value: 变量数据存储至数据点缓存区, 并根据数据点上送策略上送数据

返回

  • 0: 成功
  • 1: 发送中
  • -1: 发送失败

sendDatapointBinary()

//函数声明
int Cloud.sendDatapointBinary(const uint16_t dpID, const uint8_t *value, uint16_t len)

描述

往数据缓存区发送数据(字符串型), 并传输数据至云平台。

参数

  • dpID: 产品数据点id.
  • value: 变量数据存储至数据点缓存区, 并根据数据点上送策略上送数据
  • len: 表示写入的数据大小

返回

  • 0: 成功
  • 1: 发送中
  • -1: 发送失败

sendDatapointAll()

//函数声明
int Cloud.sendDatapointAll(void)

//应用实例
void Initialize(void)
{
    Cloud.defineDatapointNumber(1, DP_PERMISSION_UP_ONLY, -100, 100, 2, ,DP_POLICY_NONE, 0);   //温度
    Cloud.defineDatapointNumber(2, DP_PERMISSION_UP_ONLY, 0, 100, 0, DP_POLICY_NONE, 0);      //湿度
}

void main(void)
{
    Initialize();
    System.init();
    while(1)
    {
        Cloud.writeDatapointNumberDouble(1, 30.23);
        Cloud.writeDatapointNumberInt32(2, 30);
        Cloud.sendDatapointAll();
    }
}

描述

根据数据点上送策略把数据点缓存区数据传输至云平台。

参数

返回

  • 0: 成功
  • 1: 发送中
  • -1: 发送失败

Time

时间相关函数

delay()

//函数声明
void delay(uint32_t ms);

描述

程序延时时间,单位ms。

参数

  • ms: 延时时间值

返回

millis()

//函数声明
uint32_t millis(void);

描述

获取运行毫秒计数,单位:毫秒。

参数

返回

  • 设备运行毫秒计数

timerGetId()

//函数声明
uint32_t timerGetId(void);

//示例
uint32_t timeId = timerGetId();

描述

获取当前时间计数,单位是ms。

参数

返回

  • 时间ID

timerIsEnd()

//函数声明
bool timerIsEnd(uint32_t timerID, uint32_t time);

//示例
uint32_t timeId = timerGetId();

while (1)
{
    if (timerIsEnd(timeId,10000))
    {
        break;
    }
}

描述

判断设定的时间是否超时。

参数

  • timerID: 设定起始时间(ms)
  • time: 设定的超时时间(ms)

返回

  • true: 超时
  • false: 未超时

Log

log调试日志打印

setLogLevel()

//函数声明
void Log.setLogLevel(const char* tag, molmc_log_level_t level);

//示例
Log.setLogLevel("*", MOLMC_LOG_VERBOSE);

描述

设置日志打印级别。

参数

  • tag: 需设置打印级别的TAG值。"*"表示所有的TAG。
  • level: 打印级别
    • MOLMC_LOG_NONE: 无日志信息
    • MOLMC_LOG_ERROR: 错误日志
    • MOLMC_LOG_WARN: 警告日志
    • MOLMC_LOG_INFO: 信息日志
    • MOLMC_LOG_DEBUG: 调试日志
    • MOLMC_LOG_VERBOSE: 详细日志

返回

setLogLevel()

//函数声明
typedef void (*log_output_fn_t)(const char *);
log_output_fn_t Log.setLogOutput(log_output_fn_t func);

//示例
void log_output(const char *)
{

}

log_output_fn_t Log.setLogOutput(log_output);

描述

设置日志输出实现

参数

  • func: 日志输出函数指针

返回

  • 之前的日志输出函数指针

MOLMC_LOGV()

//函数声明
MOLMC_LOGV(tag, format, ...)

//示例
const static char *TAG = "user:project";

MOLMC_LOGV(TAG, "a = %d", a);

描述

打印详细日志信息。

参数

  • tag: tag名称
  • format: 日志格式
  • ...: 日志参数

返回

MOLMC_LOGD()

//函数声明
MOLMC_LOGD(tag, format, ...)

//示例
const static char *TAG = "user:project";

MOLMC_LOGD(TAG, "a = %d", a);

描述

打印调试日志信息。

参数

  • tag: tag名称
  • format: 日志格式
  • ...: 日志参数

返回

MOLMC_LOGI()

//函数声明
MOLMC_LOGI(tag, format, ...)

//示例
const static char *TAG = "user:project";

MOLMC_LOGI(TAG, "a = %d", a);

描述

打印描述日志信息。

参数

  • tag: tag名称
  • format: 日志格式
  • ...: 日志参数

返回

MOLMC_LOGW()

//函数声明
MOLMC_LOGW(tag, format, ...)

//示例
const static char *TAG = "user:project";

MOLMC_LOGW(TAG, "a = %d", a);

描述

打印警告日志信息。

参数

  • tag: tag名称
  • format: 日志格式
  • ...: 日志参数

返回

MOLMC_LOGE()

//函数声明
MOLMC_LOGE(tag, format, ...)

//示例
const static char *TAG = "user:project";

MOLMC_LOGE(TAG, "a = %d", a);

描述

打印错误日志信息。

参数

  • tag: tag名称
  • format: 日志格式
  • ...: 日志参数

返回

MOLMC_LOG_BUFFER_HEXDUMP()

//函数声明
MOLMC_LOG_BUFFER_HEXDUMP( tag, buffer, buff_len, level )

//示例
const static char *TAG = "user:project";

MOLMC_LOG_BUFFER_HEXDUMP( TAG, buffer, buff_len, MOLMC_LOG_VERBOSE )

描述

打印缓冲区,带地址和16进制显示。

参数

  • tag: tag名称
  • buffer: 缓冲区数据指针
  • buff_len: 缓冲区数据长度
  • level: 日志级别
    • MOLMC_LOG_NONE: 无日志信息
    • MOLMC_LOG_ERROR: 错误日志
    • MOLMC_LOG_WARN: 警告日志
    • MOLMC_LOG_INFO: 信息日志
    • MOLMC_LOG_DEBUG: 调试日志
    • MOLMC_LOG_VERBOSE: 详细日志

返回

MOLMC_LOG_BUFFER_HEX()

//函数声明
MOLMC_LOG_BUFFER_HEX(tag, buffer, buff_len) \

//示例
const static char *TAG = "user:project";

MOLMC_LOG_BUFFER_HEX( TAG, buffer, buff_len )

描述

打印缓冲区,16进制显示。

参数

  • tag: tag名称
  • buffer: 缓冲区数据指针
  • buff_len: 缓冲区数据长度

返回

MOLMC_LOG_BUFFER_CHAR()

//函数声明
MOLMC_LOG_BUFFER_CHAR(tag, buffer, buff_len) \

//示例
const static char *TAG = "user:project";

MOLMC_LOG_BUFFER_CHAR( TAG, buffer, buff_len)

描述

打印缓冲区,16进制显示。

参数

  • tag: tag名称
  • buffer: 缓冲区数据指针
  • buff_len: 缓冲区数据长度

返回

Key

init()

//语法
void Key.init(void);

描述

初始化按键IO口设置。

参数

返回

setParams()

//语法
void Key.setParams(bool invert, uint32_t debounceTime, uint32_t clickTime, uint32_t pressTime);

//示例
Key.setParams(0, 25, 800, 3000);

描述

设置按键参数,如双击时间,有效电平信号等。多个按键时这些参数共用。

参数

  • invert: 按键按下有效电平信号,默认为低电平有效
  • debounceTime: 按键消抖时间,默认20ms
  • clickTime: 按键双击时间,即多长时间内连击2次算双击,默认600ms
  • pressTime: 长按键时间,默认1000ms

返回

keyRegister()

//语法
void Key.keyRegister(uint8_t num, cbInitFunc initFunc, cbGetValueFunc getValFunc);

//示例
#define MODE_KEY_NUM    1
#define VOL_KEY_NUM     2

void ModeKeyPinInit(void)
{
    //初始化IO
}

uint16_t ModeKeyGetValue(void)
{
    //获取按键电平信号值
}

void VolKeyPinInit(void)
{
    //初始化IO
}

uint16_t VolKeyGetValue(void)
{
    //获取按键电平信号值
}

int main(void)
{
    Key.setParams(0, 25, 800, 3000);
    Key.keyRegister(1, ModeKeyPinInit, ModeKeyGetValue);
    Key.keyRegister(2, VolKeyPinInit, VolKeyGetValue);
    Key.init();
    while(1)
    {
    }
}

描述

按键注册接口。

参数

  • num: 按键编号,建议从1开始,最大到255。
  • initFunc: 按键IO口初始化回调
  • getValFunc: 获取按键电平值回调

返回

attachClick()

//语法
void Key.attachClick(uint8_t num, cbClickFunc cbFunc);

//示例
#define MODE_KEY_NUM    1

void KeyClickHandle(void)
{

}

Key.attachClick(MODE_KEY_NUM, KeyClickHandle);

描述

注册单击(短按键)处理回调函数

参数

  • num: 之前注册的按键编号
  • cbFunc: 处理回调函数

返回

attachDoubleClick()

//语法
void Key.attachDoubleClick(uint8_t num, cbClickFunc cbFunc);

//示例
#define MODE_KEY_NUM    1

void KeyDoubleClickHandle(void)
{

}

Key.attachDoubleClick(MODE_KEY_NUM, KeyDoubleClickHandle);

描述

注册双击处理回调函数

参数

  • num: 之前注册的按键编号
  • cbFunc: 处理回调函数

返回

attachLongPressStart()

//语法
void Key.attachLongPressStart(uint8_t num, cbPressFunc cbFunc);

cbPressFunc 定义
typedef void (*cbPressFunc)(uint32_t ms);

//示例
#define MODE_KEY_NUM    1

void KeyPressStartHandle(uint32_t ms)
{
}

Key.attachLongPressStart(MODE_KEY_NUM, KeyPressStartHandle);

描述

注册按键按下时的处理回调函数

参数

  • num: 之前注册的按键编号
  • cbFunc: 处理回调函数

返回

attachLongPressStop()

//语法
void Key.attachLongPressStop(uint8_t num, cbPressFunc cbFunc);

//示例
#define MODE_KEY_NUM    1

void KeyPressStopHandle(uint32_t ms)
{
}

Key.attachLongPressStop(MODE_KEY_NUM, KeyPressStopHandle);

描述

注册按键松开时的处理回调函数

参数

  • num: 之前注册的按键编号
  • cbFunc: 处理回调函数

返回

attachDuringLongPress()

//语法
void Key.attachDuringLongPress(uint8_t num, cbPressFunc cbFunc);

//示例
#define MODE_KEY_NUM    1

void KeyLongPressHandle(uint32_t ms)
{
    if(ms >= 9000) //按键时间大于9s
    {
        //代码
    }
    else if(ms >= 6000)//按键时间大于6s
    {
        //代码
    }
    else if(ms >= 3000)//按键时间大于3s
    {
        //代码
    }
}

Key.attachDuringLongPress(MODE_KEY_NUM,KeyLongPressHandle);

描述

注册长按键一直按下回调函数,在回调函数里面可根据按键按下的时间做不同的处理

参数

  • num: 之前注册的按键编号
  • cbFunc: 处理回调函数

返回

loop()

//语法
void Key.loop(void);

//示例
#define MODE_KEY_NUM    1

void ModeKeyPinInit(void)
{
    //初始化IO
}

uint16_t ModeKeyGetValue(void)
{
    //获取按键电平信号值
}

void KeyClickHandle(void)
{

}

void KeyLongPressHandle(uint32_t ms)
{
    if(ms >= 9000) //按键时间大于9s
    {
        //代码
    }
    else if(ms >= 6000)//按键时间大于6s
    {
        //代码
    }
    else if(ms >= 3000)//按键时间大于3s
    {
        //代码
    }
}

int main(void)
{
    Key.setParams(0, 25, 800, 3000);
    Key.keyRegister(MODE_KEY_NUM, ModeKeyPinInit, ModeKeyGetValue);
    Key.attachClick(MODE_KEY_NUM, KeyClickHandle);
    Key.attachDuringLongPress(MODE_KEY_NUM,KeyLongPressHandle);
    Key.init();

    while(1)
    {
    }
}

//硬件定时器中断 定时周期为1ms
void TimerIRQHandle(void)
{
    Key.loop();
}

描述

按键检测和处理。此函数最好是放在一个1ms定时周期的中断里面,比如STM32的滴答定时器。

参数

返回

Timer

此定时接口不是启动一个硬件定时器,只是将注册的功能函数在硬件定时器里面运行。

timerRegister()

//语法
void Timer.timerRegister(uint8_t num, uint32_t period, bool oneShot, cbTimerFunc cbFunc);

//示例
#define LED1_BLINK_TIMER_NUM    1
#define LED2_BLINK_TIMER_NUM    2

void Led1Blink(void)
{

}

void Led2Blink(void)
{

}


int main(void)
{
    Timer.timerRegister(LED1_BLINK_TIMER_NUM, 500, false, Led1Blink);
    Timer.timerRegister(LED2_BLINK_TIMER_NUM, 1000, false, Led2Blink);
    while(1)
    {

    }
}

描述

注册一个定时功能函数。

参数

  • num: 定时功能函数编号
  • period: 定时周期,当硬件定时器定时周期为1ms时,功能函数执行的周期是1ms
  • oneShot: true函数只执行一次,false永久执行
    • true: 函数只执行一次
    • false: 永久执行
  • cbFunc: 定时功能函数回调

返回

changePeriod()

//语法
void Timer.changePeriod(uint8_t num, uint32_t period);

描述

改变定时函数的执行周期。

参数

  • num: 之前注册的函数编号
  • period: 新的周期值

返回

start()

//语法
void Timer.start(uint8_t num);

描述

启动定时功能函数执行。

参数

  • num: 之前注册的函数编号

返回

stop()

//语法
void Timer.stop(uint8_t num);

描述

停止定时功能函数执行。

参数

  • num: 之前注册的函数编号

返回

reset()

//语法
void Timer.reset(uint8_t num);

描述

复位定时功能函数。

参数

  • num: 之前注册的函数编号

返回

loop()

//语法
void Timer.loop(void);

//示例
#define LED1_BLINK_TIMER_NUM    1
#define LED2_BLINK_TIMER_NUM    2

void Led1Blink(void)
{

}

void Led2Blink(void)
{

}

int main(void)
{
    Timer.timerRegister(LED1_BLINK_TIMER_NUM, 500, false, Led1Blink);
    Timer.timerRegister(LED2_BLINK_TIMER_NUM, 1000, false, Led2Blink);
    Timer.start(LED1_BLINK_TIMER_NUM);
    Timer.start(LED2_BLINK_TIMER_NUM);
    while(1)
    {

    }
}

//硬件定时器中断 定时周期为1ms
void TimerIRQHandle(void)
{
    Timer.loop();
}

描述

此loop应放在一个硬件定时器里面,如果硬件定时周期为1ms那么注册的函数执行周期为1*periodms, 如果硬件定时器周期为10ms,那么注册的函数执行周期为10*periodms。

参数

返回