Paho MQTT库移植程序代码_第1页
Paho MQTT库移植程序代码_第2页
Paho MQTT库移植程序代码_第3页
Paho MQTT库移植程序代码_第4页
Paho MQTT库移植程序代码_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论