【XR806开发板试用】TCP通信测试 Ping 命令测试

1.工程准备

由于要使用wifi功能,直接从wlan_demo复制一份出来,然后修改。
源文件只留下 main.c 就可以了。

BUILD.gn文件

import("//device/xradio/xr806/liteos_m/config.gni")static_library("app_mying") {configs = []sources = ["main.c",]cflags = board_cflagsinclude_dirs = board_include_dirsinclude_dirs += ["//kernel/liteos_m/kernel/arch/include","//utils/native/lite/include","//foundation/communication/wifi_lite/interfaces/wifiservice",]
}

2. XR806 SDK

仔细看下xr806工程库的结构,
xr806的xr_skylark路径下属于芯片原生驱动库!
该路径下面有各种功能参考示例,如trustzone、net、ping、json等。
因此,直接参考xr_skylark\include下的内容,来实现一些简单的功能。

在这里插入图片描述

3.实现的功能

0)连接WiFi;

根据自己的SSID和PSK修改,代码直接copy原来的。

1)ping服务器,进行联通性测试;

ping一下自己的服务器,根据需要进行修改。include下面有ping/ping.h文件。很简单的一个结构体(如下所示),看情况就是给个地址,设置一下参数,然后就可以实现ping命令的功能了。
struct ping_data {ip_addr_t sin_addr; /* server addr */u32_t count;        /* number of ping */u32_t data_long;    /* the ping packet data long */u32_t interval;     /* Wait interval seconds between sending each packet, default 1s */u32_t timeout;      /* Time to wait for a response, in seconds */u32_t deadline;     /* Specify a timeout, in seconds, ping thread will stop if timeout */u32_t ttl;          /* ttl ping only. Set the IP Time to Live. */int run_flag;       /* run flag, 0:stop 1:start */
};s32_t ping(struct ping_data *data);

2)作为TCP客户端,连接server,发数据;

通过TCP连接服务器,发数据。
设置服务器信息
【地址】(比如:192.168.1.100)
【端口号】(比如5679)

net路径下面有lwip库,借此实现网络通信功能。
代码里,通过宏定义的方式,将lwip_xxx改成了与linux下的soket API一样的接口。
参考正常的TCP_Client程序就行了。
在这里插入图片描述

3)读取一下xr_skylark里的cjson版本信息。

发现有cjson库,然后就随便测试一下。    

4.程序示例

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "ohos_init.h"
#include "driver/chip/hal_gpio.h"
#include "kernel/os/os.h"
#include "wifi_device.h"
#include "cjson/cJSON.h"
#include "net/ping/ping.h"
#include "net/lwip-2.1.2/lwip/sockets.h"
#include "net/lwip-2.1.2/lwip/tcp.h"
#include "net/lwip-2.1.2/lwip/inet.h"
#include "net/lwip-2.1.2/lwip/ip_addr.h"#define WIFI_DEVICE_CONNECT_AP_SSID "ChinaNet-111"
#define WIFI_DEVICE_CONNECT_AP_PSK "111666111"#define GPIO_OUTPUT_PORT           GPIO_PORT_Astatic OS_Thread_t g_main_thread;static void gpio_output_init(void)
{GPIO_InitParam param;param.driving = GPIO_DRIVING_LEVEL_1;param.mode = GPIOx_Pn_F1_OUTPUT;param.pull = GPIO_PULL_NONE;HAL_GPIO_Init(GPIO_OUTPUT_PORT, GPIO_PIN_21, &param);//led灯对应IO
}static void gpio_output_ctl(uint8_t level)
{HAL_GPIO_WritePin(GPIO_OUTPUT_PORT, GPIO_PIN_21, level ? GPIO_PIN_HIGH : GPIO_PIN_LOW);
}void wifi_connect(void)
{const char ssid_want_connect[] = WIFI_DEVICE_CONNECT_AP_SSID;const char psk[] = WIFI_DEVICE_CONNECT_AP_PSK;printf("\n=========== Connect Test Start ===========\n");if (WIFI_SUCCESS != EnableWifi()) {printf("Error: EnableWifi fail.\n");return;}printf("EnableWifi Success.\n");if (WIFI_STA_ACTIVE == IsWifiActive())printf("Wifi is active.\n");OS_Sleep(1);if (WIFI_SUCCESS != Scan()) {printf("Error: Scan fail.\n");return;}printf("Wifi Scan Success.\n");OS_Sleep(1);WifiScanInfo scan_results[30];unsigned int scan_num = 30;if (WIFI_SUCCESS != GetScanInfoList(scan_results, &scan_num)) {printf("Error: GetScanInfoList fail.\n");return;}WifiDeviceConfig config = { 0 };int netId = 0;int i;for (i = 0; i < scan_num; i++) {if (0 == strcmp(scan_results[i].ssid, ssid_want_connect)) {memcpy(config.ssid, scan_results[i].ssid,WIFI_MAX_SSID_LEN);memcpy(config.bssid, scan_results[i].bssid,WIFI_MAC_LEN);strcpy(config.preSharedKey, psk);config.securityType = scan_results[i].securityType;config.wapiPskType = WIFI_PSK_TYPE_ASCII;config.freq = scan_results[i].frequency;break;}}if (i >= scan_num) {printf("Error: No found ssid in scan_results\n");return;}printf("GetScanInfoList Success.\n");if (WIFI_SUCCESS != AddDeviceConfig(&config, &netId)) {printf("Error: AddDeviceConfig Fail\n");return;}printf("AddDeviceConfig Success.\n");if (WIFI_SUCCESS != ConnectTo(netId)) {printf("Error: ConnectTo Fail\n");return;}printf("ConnectTo Success\n");OS_Sleep(3);WifiLinkedInfo get_linked_res;if (WIFI_SUCCESS != GetLinkedInfo(&get_linked_res)) {printf("Error: GetLinkedInfo Fail\n");return;}printf("GetLinkedInfo Success.\n");printf("ssid: %s\n", get_linked_res.ssid);printf("bssid: ");for (int j = 0; j < WIFI_MAC_LEN; j++) {printf("%02X", get_linked_res.bssid[j]);}printf("\n");printf("rssi: %d\n", get_linked_res.rssi);unsigned char get_mac_res[WIFI_MAC_LEN];if (WIFI_SUCCESS != GetDeviceMacAddress(get_mac_res)) {printf("Error: GetDeviceMacAddress Fail\n");return;}printf("GetDeviceMacAddress Success.\n");for (int j = 0; j < WIFI_MAC_LEN - 1; j++) {printf("%02X:", get_mac_res[j]);}printf("%02X\n", get_mac_res[WIFI_MAC_LEN - 1]);
}
struct ping_data ping_t;
//ping命令参数设置
void ping_init()
{ip_addr_t server_ip;inet_aton("129.204.63.27", &server_ip);ping_t.sin_addr = server_ip;ping_t.count = 0xF;ping_t.data_long = 512;ping_t.timeout = 30;ping_t.run_flag = 1;
}//TCP SOCKET
int s;
void tcp_test_init()
{
//socket create!s  = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//address info!struct sockaddr_in server_addr;memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(5679);inet_pton(AF_INET, "192.168.1.100", &server_addr.sin_addr);//connect!if(connect(s,(void *)&server_addr,sizeof(server_addr)) < 0) {printf("connect tcp_server failed! \r\n");} else {printf("connect tcp_server successfuly! \r\n");}
// send datasend(s, "xr806\n", 7, 0);
}
static void MainThread(void *arg)
{gpio_output_init();wifi_connect();ping_init();ping(&ping_t);tcp_test_init();char buf[32];int cnt = 0;while(1) {sprintf(buf,"XR806:%s : %d \r\n",cJSON_Version(), cnt++);//向服务器发送数据send(s,buf, sizeof(buf), 0);printf("%s:Hello XR806 \r\n",__func__);gpio_output_ctl(1);OS_Sleep(1);gpio_output_ctl(0);OS_Sleep(1);}
}void WifiTestMain(void)
{printf("Wifi Test Start\r\n");if (OS_ThreadCreate(&g_main_thread, "MainThread", MainThread, NULL,OS_THREAD_PRIO_APP, 4 * 1024) != OS_OK) {printf("[ERR] Create MainThread Failed\n");}
}SYS_RUN(WifiTestMain);

5.结果展示

通过网络调试工具,建立TCP服务器,接收到了xr806发来的数据。
在这里插入图片描述

串口打印信息

[net INF] netif (IPv4) is up
[net INF] address: 192.168.1.110
[net INF] gateway: 192.168.1.1
[net INF] netmask: 255.255.255.0
[net INF] msg <network IPv6 state>
GetLinkedInfo Success.
ssid: ChinaNet-111
bssid: 5475956E3374
rssi: 110
GetDeviceMacAddress Success.
9C:9E:49:BA:5B:01
PING 129.204.63.27 520 bytes of data.
Request timeout for icmp_seq=1
512 bytes from 129.204.63.27: icmp_seq=2    time=43 ms
512 bytes from 129.204.63.27: icmp_seq=3    time=43 ms
512 bytes from 129.204.63.27: icmp_seq=4    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=5    time=43 ms
512 bytes from 129.204.63.27: icmp_seq=6    time=45 ms
512 bytes from 129.204.63.27: icmp_seq=7    time=46 ms
512 bytes from 129.204.63.27: icmp_seq=8    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=9    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=10    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=11    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=12    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=13    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=14    time=44 ms
512 bytes from 129.204.63.27: icmp_seq=15    time=43 ms--- 129.204.63.27 ping statistics ---
15 packets transmitted, 14 received, 6% packet loss, time 672ms
rtt min/avg/max/mdev = 43/43/46/3 ms
connect tcp_server successfuly! 
MainThread:Hello XR806 
MainThread:Hello XR806 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/451394.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 热题 100 | 链表(中下)

目录 1 19. 删除链表的倒数第 N 个节点 2 24. 两两交换链表中的节点 3 25. K 个一组翻转链表 4 138. 随机链表的复制 菜鸟做题第三周&#xff0c;语言是 C 1 19. 删除链表的倒数第 N 个节点 到底是节点还是结点。。。 解题思路&#xff1a; 设置双指针 left 和 ri…

堪称灾难级攻击的 UDP FLOOD洪水攻击,应该如何防护?

DDOS又称为分布式拒绝服务&#xff0c;全称是Distributed Denial of Service。DDOS本是利用合理的请求造成资源过载&#xff0c;导致服务不可用&#xff0c;从而造成服务器拒绝正常流量服务。就如酒店里的房间是有固定的数量的&#xff0c;比如一个酒店有50个房间&#xff0c;当…

列式数据库、行式数据库简介

列式数据库、行式数据库简介 1、数据准备2、行式数据库3、列式数据库4、行式、列式存储对比 常见的行式数据库有Mysql&#xff0c;DB2&#xff0c;Oracle&#xff0c;Sql-server等&#xff1b;列数据库&#xff08;Column-Based&#xff09;数据存储方式按列存储&#xff0c;常…

ESU毅速丨3D打印技术引领模具制造创新革命

随着科技的飞速发展&#xff0c;3D打印技术已经成为制造业的新宠。而在模具制造领域&#xff0c;3D打印技术更是带来了巨大的创新价值&#xff0c;引领着模具制造的革命性变革。 传统模具制造过程中&#xff0c;需要经过多道繁琐工序&#xff0c;而3D打印技术简化了这一过程。3…

MySQL进阶45讲【13】为什么表数据删掉一半,表文件大小不变?

1 前言 有些小伙伴在删数据库数据时&#xff0c;会产生一个疑问&#xff0c;我的数据库占用空间大&#xff0c;我把一个最大的表删掉了一半的数据&#xff0c;怎么表文件的大小还是没变&#xff1f; 那么这篇文章&#xff0c;就介绍一下数据库表的空间回收&#xff0c;看看如…

【实证分析】地级市-资本存量测算结果数据集(含计算公式及原始数据)( 2003-2021年)

该数据为地级市资本存量测算&#xff08;2003-2021年&#xff09;&#xff0c;提供了中国地级市在该期间内资本存量的详细测算结果&#xff0c;包括两种基于2011年和2006年基期的测算方式。该数据集利用了从城市统计年鉴和中国统计年鉴获取的固定资产投资数据及其增速&#xff…

【React】react组件传参、redux状态管理

【React】react组件传参、redux状态管理 一、props&#xff1a;父组件向子组件传参1、将普通的参数作为props传递2、将jsx作为props传递&#xff08;组件插槽&#xff09;&#xff08;1&#xff09;基础功能示例&#xff08;2&#xff09;进阶示例 二、自定义事件&#xff1a;子…

geoserver发布tif影像,关于黑边的问题

一、tif格式 支持发布GeoTIFF格式的发布的tif格式&#xff0c;无法去除tif的黑边发布的tif格式文件不能过大 二、ImageMosaic 可以发布比较大的tif文件可以去除黑边 设置后图层&#xff0c;进行访问就发现没有黑边了 三、可以直接到图层模块&#xff0c;通过图层名称进入图层…

批量注册与自动下单:探索速卖通跨境智能系统的操作方法

速卖通跨境智能系统是一款功能强大的软件&#xff0c;可以帮助用户批量注册速卖通买家号、绑定地址、加购加心愿单以及自动下单等任务。 该软件具有以下优势&#xff1a; 强大的指纹系统&#xff1a;采用最新的反指纹技术&#xff0c;可以设置与代理IP相对应的语言和时区&…

何以穿越产业周期?解读蓝思科技2023年增长密码

1月30日晚&#xff0c;蓝思科技发布了2023年业绩预告&#xff0c;2023年预计实现归母净利润29.38亿元-30.60亿元&#xff0c;同比增长20%-25%。 松果财经注意到&#xff0c;蓝思科技通过垂直整合&#xff0c;构筑了更具竞争力的产业链条。一方面&#xff0c;公司打造了包含ODM…

【Transformer 】 Hugging Face手册-推理管道 (04/10)

一、说明 这里是Hugging Face手册第四部分&#xff0c;如何使用推理管道&#xff1b;即使您没有特定模式的经验或不熟悉模型背后的底层代码&#xff0c;您仍然可以使用它们通过 pipeline ()进行推理&#xff01; 二、推理管道 pipeline ()可以轻松使用Hub中的任何模型来推理任…

今日arXiv最热NLP大模型论文:引入噪声,可提升RAG检索效果超30%??

检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;简称RAG&#xff09;系统的出现&#xff0c;提高了LLMs回答生成的准确性。它分为两个部分:检索与生成。检索即利用检索器从海量文档中检索出与查询最相关或者最相似的段落&#xff0c;而生成则是LLMs针对混…