JZsdk_network.c
4.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <termios.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "BaseConfig.h"
#include "version_choose.h"
#include "JZsdkLib.h"
#include "./JZsdk_network.h"
#define LINUX_CMD_STR_MAX_SIZE (128)
#define LINUX_NETWORK_DEV "eth0"
#define UDP_SERVER_PORT (23003)
#define MAX_SEND_FRAME_LENTH (60000)
#define JZSDK_UTIL_MIN(a, b) (((a) < (b)) ? (a) : (b))
static int udp_socket = 0;
static struct sockaddr_in udp_server_addr;
static int NetworkMode = JZ_FLAGCODE_OFF; //网络模式
T_JZsdkReturnCode JZsdk_NetWork_Init()
{
T_JZsdkReturnCode ret;
char cmdStr[LINUX_CMD_STR_MAX_SIZE];
if (NET_WORK_IPADDR == NULL || NET_WORK_NETMASK == NULL)
{
JZSDK_LOG_ERROR("无网络参数配置");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//1、打开网卡设备
memset(cmdStr, 0, sizeof(cmdStr));
snprintf(cmdStr, sizeof(cmdStr), "ifconfig %s up", LINUX_NETWORK_DEV);
ret = system(cmdStr);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
JZSDK_LOG_ERROR("Can't open the network."
"Probably the program not execute with root permission."
"Please use the root permission to execute the program.");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//2、打开网络
memset(cmdStr, 0, sizeof(cmdStr));
snprintf(cmdStr, sizeof(cmdStr), "ifconfig %s %s netmask %s", LINUX_NETWORK_DEV, NET_WORK_IPADDR, NET_WORK_NETMASK);
ret = system(cmdStr);
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) {
JZSDK_LOG_ERROR("Can't config the ip address of network."
"Probably the program not execute with root permission."
"Please use the root permission to execute the program.");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//3、创建UDP socket 套接字
udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
if (udp_socket == -1) {
JZSDK_LOG_ERROR("网口套接字注册失败");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//4、配置udp服务器地址
memset(&udp_server_addr, 0, sizeof(udp_server_addr));
udp_server_addr.sin_family = AF_INET;
udp_server_addr.sin_port = htons(UDP_SERVER_PORT);
if(inet_aton(NET_WORK_TARGET_IPADDR, &udp_server_addr.sin_addr) == 0)
{
JZSDK_LOG_ERROR("udp服务器配置失败");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
NetworkMode = JZ_FLAGCODE_ON;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
T_JZsdkReturnCode JZsdk_NetWork_DeInit()
{
NetworkMode = JZ_FLAGCODE_OFF;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
static T_JZsdkReturnCode JZsdk_NetWork_Sent(const unsigned char *data, const int data_len)
{
int bytes_sent = sendto(udp_socket, data, data_len, 0,
(struct sockaddr *) &udp_server_addr, sizeof(udp_server_addr));
if (bytes_sent == -1)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
else
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
}
T_JZsdkReturnCode JZsdk_NetWork_SentData(const unsigned char *data, const int data_len)
{
if (NetworkMode != JZ_FLAGCODE_ON)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
T_JZsdkReturnCode returnCode;
int lengthOfDataHaveBeenSent = 0;
int lengthOfDataToBeSent = 0;
while (data_len - lengthOfDataHaveBeenSent)
{
lengthOfDataToBeSent = JZSDK_UTIL_MIN(MAX_SEND_FRAME_LENTH,
data_len - lengthOfDataHaveBeenSent);
returnCode = JZsdk_NetWork_Sent((const uint8_t *) data + lengthOfDataHaveBeenSent,
lengthOfDataToBeSent);
if (JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
JZSDK_LOG_ERROR("网口发送错误");
}
lengthOfDataHaveBeenSent += lengthOfDataToBeSent;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}