框架接口

Oasisnet的代码实现参考lora-sdk\net目录,Oasisnet层分控制面和数据面,控制面提供对该层提供的功能的控制接口并反馈结果,数据面即提供数据收发的接口。

系统运行

Oasisnet层提供初始化功能,功能运行需要上层调度驱动运转。

  • 初始化

初始化接口定义如下:

void OASISNET_Init(
    OASISNET_HANDLER_S *pstNetHandler,   /* 回调注册 */
    uint8_t ucCacheCnt                    /* 报文缓存队列个数 */
)

OASISNET_HANDLER_S定义如下:

typedef struct tagOASISNETHandler
{
    float ( *pfOasisNet_GetTemperatureLevel)(void);        /* MAC层获取设备温度接口 */
    uint8_t ( *pfOasisNet_BoardGetBatteryLevel)( void );     /* MAC层获取电池电量 */

    void ( *pfOasisNet_JOINProcess )(   /* 入网探测结果回调处理 */
        bool bJoined         /* true:入网成功, false:入网失败 */
    );
}OASISNET_HANDLER_S;
  • 驱动运行

Oasisnet层运行需要上层应用驱动运转,系统需要不停的轮询调用,否则功能将不可用。接口如下:

void OASISNET_Run(void)

Oasisnet数据面

数据面提供在终端入网后发送报文和接收报文处理。

  • 发送报文

报文发送接口定义如下:

OASIS_NETPKT_HANDLER OASISNET_SendPkt(
    OASIS_NETPKT_TYPE_E enConfirmType, /* 报文类型,包含需要确认报文和不需要确认报文*/
    uint8_t ucFPort,        /* 发包使用的端口号 */
    char *pData,           /* 发送的数据内容 */
    uint8_t ucDataSize      /* 发送的数据内容长度 */
)

参数说明:不需要确认的报文即发送使用unconfirm类型发送,需要确认的报文即发送使用confirm类型发送。

返回值:报文缓存成功则返回对应的报文缓存地址,失败则返回OASIS_NETPKT_HANDLER_INVALID

报文发送成功后会通过回调返回,回调函数定义如下结构体中指针函数pfOasis_ProcMcpsConfirm定义。

typedef struct tagOasisNetPktHandler
{
    void ( *pfOasis_ProcFRMPktReceive )( char *pcData, uint8_t ucDataLen);
    /**
     * 发送报文处理结果回调函数
     */
    void ( *pfOasis_ProcMcpsConfirm )( 
        OASIS_NETPKT_HANDLER hPktHandler,  /* 发送报文缓存地址 */
        uint8_t ucResult                     /* 报文发送结果 */
    );
}OASISNET_PKT_HANDLER_S;
  • 接收报文

接收报文通过注册回调的方式,上层应用通过注册接口向Oasisnet层注册报文处理函数,注册接口如下

uint8_t OASISNET_RegisterFRMPktProc(
    uint8_t ucFPort,                          /* 接收报文使用的端口 */
    OASISNET_PKT_HANDLER_S *pstPKtHandler   /* 报文处理函数 */
)

接收报文回调函数如下结构体中函数指针pfOasis_ProcFRMPktReceive定义。

typedef struct tagOasisNetPktHandler
{
    /**
     * 处理接收数据回调函数
     */ 
    void ( *pfOasis_ProcFRMPktReceive )( 
        char *pcData,        /* 接收的数据内容 */
        uint8_t ucDataLen    /* 接收的数据长度 */
    );
    void ( *pfOasis_ProcMcpsConfirm )( OASIS_NETPKT_HANDLER hPktHandler, uint8_t ucResult);
}OASISNET_PKT_HANDLER_S;

Oasisnet控制面

控制面包括入网探测、设置最低速率、设置信道组、ADR开关、保活拉取请求和智能调速开关。

  • 入网探测
uint8_t OASISNET_Join(void)

上层应用通过该接口来驱动入网发包,如果正在入网或已经入网成功则返回ERROR_SUCCESS,否则触发入网探测状态机,入网探测结果通过回调函数来告诉上层应用。

  • 设置最低速率
void OASISNET_SetNetBaseDR(
    LADAPTER_DR_E enBaseDR   /* 速率DR值 */
)

提供上层应用控制最低速率的配置。

  • 设置信道组
void OASISNET_SetChannelGrp(
    uint8_t ucChnlGrp     /* 设置信道组,1~12 */
)

提供上层应用控制信道组设置,信道组参考表: CN470-510MHz上行信道组划分,如果设置为0,则默认为信道组1,如果设置大于12,则默认为信道组12。

入网探测会以设置的信道组为起始信道组开始轮询,轮询一圈后则轮询结束。

  • ADR开关
uint8_t OASISNET_SetADR(
    bool bADROn     /* true:开, false:关*/
)

提供上层开关MAC层ADR功能,如果需要开启智能调速,请先关闭ADR功能。

  • 保活拉取请求
void OASISNET_SendPullDataReq(
    OASIS_NETPKT_TYPE_E enPktType     /* confrim或unconfrim报文类型 */
)

保活拉取请求是网络层保活功能,目前开放由上层应用控制,可以是confrim类型或unconfirm类型,同时在网络层收到携带FPending标记的下行报文时,会自动触发拉取报文,拉取平台上缓存的报文。

应用层自己有保活功能,可以忽略使用。

注:保活拉取报文使用FPort为3的端口,所以该端口网络层保留使用。

  • 智能调速开关
void OASISNET_SetIntelligentDR(
    bool bOn      /* true:开, false:关*/
)

智能调速可以通过调用该接口来进行开关控制,开启智能调速前请先关闭ADR功能,如果关闭智能调速功能,则会回复最低速率进行发包。

功能定制

Oasisnet层提供的控制面功能,部分功能可以编译裁剪,编译前通过编辑lora-sdk\include目录下的sdk-config.h文件来进行定制裁剪。

/** 智能调速 */
#define OASIS_SDK_INTELIGENCE_DATARATE   1    /* 0:close, 1:open */

/** 自适应速率开关 */
#define OASIS_SDK_ADR                    0    /* 0:close, 1:open */

/** 链路检测 */
#define OASIS_SDK_LINK_CHECK             0    /* 0:close, 1:open */

可以通过配置对应的功能裁剪项来裁剪或打开对应的功能。

© H3C IoT all right reserved,powered by Gitbook更新时间: 2021-11-24 17:53:45

results matching ""

    No results matching ""