嵌入式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
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值