嵌入式linux连接onenet平台edp简单示例

嵌入式linux连接onenet平台edp简单示例

这里分享一个基于onenet edp协议上传系统时间的示例,这里用的野火的imx6ull和原子的兼容

main.c

#include "edp.h"
#include "tcp.h"
#include <unistd.h>
#include <stdio.h>
#include<time.h> //C语言的头文件  

int main()
{
    
    

	unsigned char buff[100] = {
    
    0},sendbuff[100] = {
    
    0},send_len = 0;

	time_t now; //实例化time_t结构    

	struct tm *timenow; //实例化tm结构指针    

	
	Edp_Init();		//edpЭÒé³õÊŒ»¯

	tcp_init();		//tcp³õÊŒ»¯



	//Ɯ̚ŒøÈšÉÏÏß

	send_len = edp_conect(sendbuff);

	tcp_send(sendbuff, send_len);

	

	while(1)

	{
    
    

		time(&now);   

		timenow = localtime(&now);  

		printf("get time:%s \n",asctime(timenow));

		memset(buff,0,100);

		//sprintf(buff,"time,%d",timenow->tm_sec);//Ìî³äЭÒé

		sprintf(buff,"time,%s",asctime(timenow));//Ìî³äЭÒé

		memset(sendbuff,0,100);

		send_len = edp_updata(sendbuff, buff, sizeof(buff));

		tcp_send(sendbuff, send_len);

		sleep(2);

	}

}

tcp.c

```c
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



																		Í·ÎÄŒþÇø



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

//-------tcpÏà¹ØÍ·ÎÄŒþ------

#include <stdio.h>

#include <sys/socket.h>

#include <sys/types.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <unistd.h> //close()

#include <string.h> //strcmp()µÈ×Ö·ûŽ®²Ù×÷º¯Êý

#include <stdlib.h> //atoi() ×Ö·ûŽ®×ªint







static int socket_fd = -1;





/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



																		º¯Êý¶šÒåÇø



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

//¹Ø±ÕtcpÅäÖóõÊŒ»¯º¯Êý

//²ÎÊý void

//·µ»Ø void

int tcp_init(void)

{


	socket_fd = socket(AF_INET, SOCK_STREAM, 0);

	if(socket_fd == -1)

	{

		perror("socket failed!\n");

		return -1;

	}

	

	struct sockaddr_in server_addr = {0};

	//·þÎñÆ÷µÄµØÖ·ÐÅÏ¢	

	server_addr.sin_family = AF_INET;//IPv4ЭÒé	

	server_addr.sin_port = htons(876);//·þÎñÆ÷¶Ë¿ÚºÅ	

	server_addr.sin_addr.s_addr = inet_addr("183.230.40.39");//ÉèÖ÷þÎñÆ÷

	


	int ret = connect(socket_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));	

	if(ret == -1)	

	{		

		perror("connect failed!\n");

		return -1;

	}	

	else	

	{		

		printf("connect server successful!\n");

	}

	

	return 0;

}


int tcp_send(char *buf,int len)
{

	write(socket_fd, buf, len);//·¢ËÍÏûÏ¢	

}




int tcp_rcv(char *buf,int len)
{

	int ret = 0;

	ret = recv(socket_fd, buf, len, 0);      

	if(ret < 0)      

	{         

		perror("recv\n");          

		close(socket_fd);          

		return -1;      

	}

	return ret;

}



//¹Ø±ÕtcpÁ¬œÓº¯Êý

//²ÎÊý void



void close_tcp(void)
{

	close(socket_fd);

	socket_fd = -1;

}

edp.c

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



																		Í·ÎÄŒþÇø



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/







/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



																		œÓ¿Ú¶šÒåÇø



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

volatile unsigned char DEVIES_NUM[15] = "578347916";

volatile unsigned char API_KEY[40] = "imVyC=oCPlM1Tw9od=h4f5PrlMY=";//





/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



																		±äÁ¿¶šÒåÇø



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

static unsigned char EDP_CONENCT_BUF[100];

static unsigned char EDP_SEND_BUF[200];





/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



																		º¯Êý¶šÒåÇø



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

static unsigned char str_cnt(char *s)

{
    
    

		unsigned char len = 0;

		

		while((*s) != 0)

		{
    
    

				s++;

				len++;

		}

		return len;

}



static void str_cpy(unsigned char *s1,unsigned char *s2,unsigned char len)

{
    
    

		unsigned char i = 0;

		

		while(i < len)

		{
    
    

				s1[i] = s2[i];

				i++;

		}

}





void Edp_Init(void)

{
    
    

		unsigned char apikey_len,deviesnum_len,tmp;



		//Á¬œÓÏûÏ¢buf³õÊŒ»¯

		EDP_CONENCT_BUF[0] = 0X10;//Á¬œÓÔÆÏûÏ¢ÀàÐÍ

		apikey_len = str_cnt(API_KEY);

		deviesnum_len = str_cnt(DEVIES_NUM);

		EDP_CONENCT_BUF[1] = apikey_len + deviesnum_len + 13;

		EDP_CONENCT_BUF[2] = 0X00;

		EDP_CONENCT_BUF[3] = 0X03;

		EDP_CONENCT_BUF[4] = 0X45;

		EDP_CONENCT_BUF[5] = 0X44;

		EDP_CONENCT_BUF[6] = 0X50;

		EDP_CONENCT_BUF[7] = 0X01;

		EDP_CONENCT_BUF[8] = 0X40;

		EDP_CONENCT_BUF[9] = 0X01;

		EDP_CONENCT_BUF[10] = 0X2C;

		EDP_CONENCT_BUF[11] = 0X00;

		EDP_CONENCT_BUF[12] = deviesnum_len;

		str_cpy(&EDP_CONENCT_BUF[13], DEVIES_NUM, deviesnum_len);

		EDP_CONENCT_BUF[(13+deviesnum_len)] = 0x00;

		EDP_CONENCT_BUF[(13+deviesnum_len+1)] = apikey_len;

		str_cpy(&EDP_CONENCT_BUF[(13+deviesnum_len+2)], API_KEY, apikey_len);

		//ÉÏŽ«ÊýŸÝÏûÏ¢³õÊŒ»¯

		EDP_SEND_BUF[0] = 0x80;

		EDP_SEND_BUF[1] = 0x00;//ÏûÏ¢³€¶È ×Ö·ûŽ®ÏûÏ¢³€¶È+5

		EDP_SEND_BUF[2] = 0x00;

		EDP_SEND_BUF[3] = 0x05;

		EDP_SEND_BUF[4] = 0x00; //×ÖœÚ×Ö·ûŽ®ÏûÏ¢³€¶È

		EDP_SEND_BUF[5] = 0x00;

		EDP_SEND_BUF[6] = 0x2c;//×Ô¶šÒå×ÖœÚ2žö ,;

		EDP_SEND_BUF[7] = 0x3B;

		//ºóÃæÊÇ×Ö·ûŽ®ÏûÏ¢

		//---

}





unsigned int  edp_conect(unsigned char *buf)

{
    
    		

		unsigned int len = 0;



		Edp_Init();

		len = EDP_CONENCT_BUF[1] + 2;

		str_cpy(buf, EDP_CONENCT_BUF, len);

		

		return len;

}





unsigned int  edp_updata(unsigned char *s,unsigned char *buf,unsigned int len)

{
    
    

		unsigned char i = 0;

		unsigned int len1 = 0;

		

		while(i < len)

		{
    
    

				EDP_SEND_BUF[(i+8)] = buf[i];

				i++;

		}

		EDP_SEND_BUF[5] = len + 2;

		EDP_SEND_BUF[1] = len + 6;

		len1 = (EDP_SEND_BUF[1] + 2);

		str_cpy(s,EDP_SEND_BUF,len1);

		

		return len1;

}



unsigned int edp_ping(unsigned char *s)

{
    
    

	s[0] = 0xc0;

	s[1] = 0x00;

	

	return 2;

}



int edp_Issue_command_parsing(unsigned char *buf,unsigned char *cmdid,unsigned char *cmd_msg)

{
    
    

	int i;

	unsigned char *tmp_p;

	unsigned int cmdid_len;

	unsigned long cmd_msg_len;

	

	if(buf[0] != 0xa0)

		return -1;

	tmp_p = &buf[2];

	cmdid_len = (tmp_p[0] << 8) + tmp_p[1];

	str_cpy(cmdid, &buf[4], cmdid_len);

	

	tmp_p = &buf[(cmdid_len + 4)];

	cmd_msg_len = buf[0] << 24;

	cmd_msg_len += (buf[1] << 16);

	cmd_msg_len += (buf[2] << 8);

	cmd_msg_len += (buf[3] << 0);

	

	str_cpy(cmdid, &tmp_p[4], cmd_msg_len);

	

	return 0;

}



int edp_pushdata( unsigned char *buf, unsigned char *targetID, unsigned char *senddata, unsigned long len)

{
    
    

	unsigned char *tmp_p;

	unsigned int targetID_len = 0;

	int rtn_len = 0;

	

	targetID_len = str_cnt(targetID);

	buf[0] = 0x30;	

	buf[1] = len + targetID_len + 3;

	

	tmp_p = &buf[2];

	tmp_p[0] = targetID_len >> 8;

	tmp_p[1] = targetID_len & 0xff;

	

	tmp_p += 2;

	str_cpy(tmp_p, targetID, targetID_len);

	

	tmp_p += targetID_len;

	str_cpy(tmp_p, senddata, len);

	

	rtn_len = targetID_len + len + 4;

	return rtn_len;

}



int edp_pushdata_parsing( unsigned char *buf, unsigned char *targetID, unsigned char *senddata, unsigned long len)

{
    
    

	unsigned char *tmp_p;

	unsigned int targetID_len = 0;

	int rtn_len = 0;

	

	if(buf[0] != 0xa0)

		return -1;



	return rtn_len;

}

tcp.h

#ifndef __TCP_H

#define __TCP_H



int tcp_init(void);

int tcp_send(char *buf,int len);

int tcp_rcv(char *buf,int len);

void close_tcp(void);





#endif

edp.h

#ifndef __EDP_H
#define __EDP_H

void Edp_Init(void);
unsigned int  edp_conect(unsigned char *buf);
unsigned int  edp_updata(unsigned char *s,unsigned char *buf,unsigned int len);

#endif

makefile
#交叉编译工具链

CC=arm-linux-gnueabihf-gcc

#链接库

CFLAGS=-lm -lpthread

#获取.cpp文件
SrcFiles=$(wildcard *.c)
#使用替换函数获取.o文件
OBJS=$(patsubst %.c,%.o,$(SrcFiles))	

all:main
main:$(OBJS)
	$(CC) -o $@ $^ $(CFLAGS)

%.o:%.c
	$(CC) -c  $< $(CFLAGS)

.PHONY:clean all
clean:
	rm -rf  $(OBJS)
	rm -rf main

猜你喜欢

转载自blog.csdn.net/u010835747/article/details/108485136