Skip to content

LWC 裸系统(MCU)SDK接入

BigBang-Core edited this page Dec 4, 2020 · 1 revision

概述

区块链模组作为扩展接入MCU主控时,模组需要借助MCU提供的通讯能力与LWS进行通讯,MCU主控的固件在编译时需要引入两个源码文件,以支持LWS协议报文的生成与解析,这两个文件分别是——lws_protocol.clws_protocol.h,项目地址:lws-protocol-sdk-c

MCU主控向上与LWS同步交易状态,向下通过硬件接口与区块链模组合作产生交易数据。其中与硬件交互的方法请参阅 安全硬件操作接口。本文将着重阐述MCU主控与LWS通讯的过程与方法。

接口说明

回调接口与对应注册函数

  1. NonceGet

    SDK初始化时,需要注册一个产生uint32_t类型随机数的函数,SDK运行时会调用该函数来获取随机数。

typedef unsigned int (*NonceGet)(const void *ctx);
int hook_nonce_get(const NonceGet callback, void *ctx);

实现示例:

// 实现
unsigned int lwsiot_nonce_get(const void *ctx) { return lwsiot_rand(); }

// 注册
hook_nonce_get(lwsiot_nonce_get, lws_client);
  1. DatetimeGet

    SDK初始化时,注册一个产生uint32_t类型时间戳的函数,SDK运行期间调用该函数获得时间戳。

typedef unsigned int (*DatetimeGet)(const void *ctx);
int hook_datetime_get(const DatetimeGet callback, void *ctx);

实现示例:

// 实现
unsigned int lwsiot_datetime_get(const void *ctx)
{
    time_t now_time;
    time(&now_time);
    return now_time;
}

// 注册
hook_datetime_get(lwsiot_datetime_get, lws_client);
  1. DeviceIDGet

    注册一个获得设备id的函数,SDK运行期间调用该函数获得id。

typedef int (*DeviceIDGet)(const void *ctx, char *id);
int hook_device_id_get(const DeviceIDGet callback, void *ctx);

实现示例:

// 实现
static int lwsiot_device_id_get(const void *ctx, char *id)
{
    if (NULL != id) {
        strncpy(id, "12345", 5);
        return 0;
    }
    return -1;
}

// 注册
hook_device_id_get(lwsiot_device_id_get, lws_client);
typedef int (*ForkGet)(const void *ctx, big_num fork_out);
int hook_fork_get(const ForkGet callback, void *ctx);
typedef int (*PublicKeyGet)(const void *ctx, ed25519_public_key pk_out);
int hook_public_key_get(const PublicKeyGet callback, void *ctx);
typedef int (*SharedKeyGet)(const void *ctx, const key_seed seed, const unsigned char *data, const size_t size, shared_key key);
int hook_shared_key_get(const SharedKeyGet callback, void *ctx);
typedef int (*Blake2bGet)(const void *ctx, const unsigned char *data, const size_t len, blake2b_hash hash);
int hook_blake2b_get(const Blake2bGet callback, void *ctx);
typedef int (*SignEd25519)(const void *ctx, const unsigned char *data, const size_t len, ed25519_signature signature);
int hook_public_sign_ed25519(const SignEd25519 callback, void *ctx);