版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PahoMQTT库移植程序代码1.MQTTLiteOS.h代码如下:#if!defined(MQTTLiteOS_H)#defineMQTTLiteOS_H#include<sys/types.h>#if!defined(SOCKET_ERROR)
/**errorinsocketoperation*/#defineSOCKET_ERROR(-1)#endif#defineINVALID_SOCKETSOCKET_ERROR#include<sys/socket.h>#include<sys/param.h>#include<sys/time.h>#include<netinet/in.h>#include<netinet/tcp.h>#include<arpa/inet.h>#include<netdb.h>#include<stdio.h>#include<unistd.h>#include<errno.h>#include<fcntl.h>#include<string.h>#include<stdlib.h>#include<sys/ioctl.h>#include<net/if.h>#include"ohos_init.h"#include"cmsis_os2.h"#include"lwip/ip_addr.h"#include"lwip/netifapi.h"#include"lwip/sockets.h"#defineMQTT_TASKtypedefstructThread{
osThreadId_ttask;}Thread;intThreadStart(Thread*thread,void(*fn)(void*),void*arg);typedefstructTimer{
structtimevalend_time;}Timer;voidTimerInit(Timer*timer);charTimerIsExpired(Timer*timer);voidTimerCountdownMS(Timer*timer,unsignedint);voidTimerCountdown(Timer*timer,unsignedint);intTimerLeftMS(Timer*timer);typedefstructNetwork{
intmy_socket;
int(*mqttread)(structNetwork*,unsignedchar*,int,int);
int(*mqttwrite)(structNetwork*,unsignedchar*,int,int);}Network;intohos_read(Network*n,unsignedchar*,int,int);intohos_write(Network*n,unsignedchar*,int,int);voidNetworkInit(Network*n);intNetworkConnect(Network*n,char*,int);voidNetworkDisconnect(Network*n);#endif2.MQTTLiteOS.c代码如下:#include"MQTTLiteOS.h"//用来创建线程intThreadStart(Thread*thread,void(*fn)(void*),void*arg){ intrc=0; thread=thread; osThreadAttr_tattr;="MQTTTask";attr.attr_bits=0U;attr.cb_mem=NULL;attr.cb_size=0U;attr.stack_mem=NULL;attr.stack_size=2048;attr.priority=osThreadGetPriority(osThreadGetId());rc=(int)osThreadNew((osThreadFunc_t)fn,arg,&attr); returnrc;}//定时器初始化voidTimerInit(Timer*timer){ timer->end_time=(structtimeval){0,0};}charTimerIsExpired(Timer*timer){ structtimevalnow,res; gettimeofday(&now,NULL); timersub(&timer->end_time,&now,&res); returnres.tv_sec<0||(res.tv_sec==0&&res.tv_usec<=0);}voidTimerCountdownMS(Timer*timer,unsignedinttimeout){ structtimevalnow; gettimeofday(&now,NULL); structtimevalinterval={timeout/1000,(timeout%1000)*1000}; timeradd(&now,&interval,&timer->end_time);}voidTimerCountdown(Timer*timer,unsignedinttimeout){ structtimevalnow; gettimeofday(&now,NULL); structtimevalinterval={timeout,0}; timeradd(&now,&interval,&timer->end_time);}intTimerLeftMS(Timer*timer){ structtimevalnow,res; gettimeofday(&now,NULL); timersub(&timer->end_time,&now,&res); //printf("left%dms\n",(res.tv_sec<0)?0:res.tv_sec*1000+res.tv_usec/1000); return(res.tv_sec<0)?0:res.tv_sec*1000+res.tv_usec/1000;}//接收数据intohos_read(Network*n,unsignedchar*buffer,intlen,inttimeout_ms){ structtimevalinterval={timeout_ms/1000,(timeout_ms%1000)*1000}; if(interval.tv_sec<0||(interval.tv_sec==0&&interval.tv_usec<=0)) { interval.tv_sec=0; interval.tv_usec=100; } setsockopt(n->my_socket,SOL_SOCKET,SO_RCVTIMEO,(char*)&interval,sizeof(structtimeval)); intbytes=0; while(bytes<len) { intrc=recv(n->my_socket,&buffer[bytes],(size_t)(len-bytes),0); if(rc==-1) { if(errno!=EAGAIN&&errno!=EWOULDBLOCK) bytes=-1; break; } elseif(rc==0) { bytes=0; break; } else bytes+=rc; } returnbytes;}//写数据intohos_write(Network*n,unsignedchar*buffer,intlen,inttimeout_ms){ structtimevaltv; tv.tv_sec=0;/*30SecsTimeout*/ tv.tv_usec=timeout_ms*1000;//Notinit'ingthiscancausestrangeerrors setsockopt(n->my_socket,SOL_SOCKET,SO_SNDTIMEO,(char*)&tv,sizeof(structtimeval)); int rc=send(n->my_socket,buffer,len,0); returnrc;}//网络初始化voidNetworkInit(Network*n){ n->my_socket=0; n->mqttread=ohos_read; n->mqttwrite=ohos_write;}//网络连接intNetworkConnect(Network*n,char*addr,intport){ inttype=SOCK_STREAM; structsockaddr_inaddress; intrc=-1; sa_family_tfamily=AF_INET; structaddrinfo*result=NULL; structaddrinfohints={0,AF_UNSPEC,SOCK_STREAM,IPPROTO_TCP,0,NULL,NULL,NULL}; if((rc=getaddrinfo(addr,NULL,&hints,&result))==0) { structaddrinfo*res=result; /*preferip4addresses*/ while(res) { if(res->ai_family==AF_INET) { result=res; break; } res=res->ai_next; } if(result->ai_family==AF_INET) { address.sin_port=htons(port); address.sin_family=family=AF_INET; address.sin_addr=((structsockaddr_in*)(result->ai_addr))->sin_addr; } else rc=-1; freeaddrinfo(result); } if(rc==0) { n->my_socket=socket(family,type,0); if(n->my_socket!=-1) rc=connect(n->my_socket,(structsockaddr*)&address,sizeof(address)); else rc=-1; } returnrc;}voidNetworkDisconnect(Network*n){ close(n->my_socket);}3.在pahomqtt目录下新建BUILD.gn文件,代码如下:import("//build/lite/config/component/lite_component.gni")import("//build/lite/ndk/ndk.gni")config("pahomqtt_config"){include_dirs=["MQTTPacket/src","MQTTClient-C/src","MQTTClient-C/src/liteOS",#"//vendor/hisi/hi3861/hi3861/third_party/lwip_sack/include","//kernel/liteos_m/kal/cmsis","//third_party/lwip/src/include/lwip","//third_party/lwip/src/include/lwip/apps","//third_party/musl/porting/liteos_m_iccarm/kernel/include/netinet",]}pahomqtt_sources=["MQTTClient-C/src/liteOS/MQTTLiteOS.c","MQTTClient-C/src/MQTTClient.c","MQTTPacket/src/MQTTConnectClient.c","MQTTPacket/src/MQTTConnectServer.c","MQTTPacket/src/MQTTDeserializePublish.c","MQTTPacket/src/MQTTFormat.c","MQTTPacket/src/MQTTPacket.c","MQTTPacket/src/MQTTSerializePublish.c","MQTTPacket/src/MQTTSubscribeClient.c","MQTTPacket/src/MQTTSubscribeServ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年火电年度考核试题及答案
- (2026年)固原市彭阳县公益性岗位考试题库及答案
- RCS-931系列超高压线路成套保护装置技术和使用说明书
- 2026年网络安全基础知识防护模拟试卷及答案
- 2025 年医院输血前评估与输血后评价方案
- 2026年洪涝灾害抢险救援处置模拟试卷及答案
- GBT 47980-2026 泵系统能耗实时监控技术要求标准立项发展报告
- GBZ 179-2026 恒定湿热(含空气的未饱和高压蒸汽)标准立项发展报告
- 2026-2027学年浙教版八年级数学上学期第一次月考测试卷(第1-2.3章)(含答案)
- 2025年静脉输液的护理
- 泸州兴泸水务集团营业员笔试题库
- 2026年国企党建考试核心知识点复习题及参考答案
- 广元市公开招募2026年养老服务管理专员政策性岗位工作人员的(67 )考试备考题库及答案详解
- 旁站监理工作监理实施细则
- 2026年江苏压力容器考试试题及答案
- (2026年)重症后管理专家共识应用经验分享学习与解读课件
- 上海八年级数学上册-一元二次方程的应用-实际问题(同步练习)
- 2026年全市统计基本单位名录库题库
- 大学新教师入职培训
- 科室内部投诉管理制度
- 羊水栓塞案例分析
评论
0/150
提交评论