框架接口
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 */
可以通过配置对应的功能裁剪项来裁剪或打开对应的功能。