VS2013编译libhackrf以及测试

        接触hackrf快一个月了,在我的印象里,hackrf的程序大多都是在linux下编译,win用户不是很方便(其实个人觉得ubuntu比win还方便),外加最近需要matlab操作hackrf,所以脑子一热就用VS编译了一下libhackrf,首先看一下hackrf-info运行的效果。


        以上图片是host\hackrf-tools\src\hackrf_info.c 移植过来的程序。我使用的是win7 x64,IDE是VS2013。编译hackrflib和测试分为两个工程,Libhackrf和HackRFLibTest。下面还是老流程,一步步说一下编译过程。

        1)下载安装pthread-win32。hackrflib的其中一个依赖库,可以到这里下载。

                (1)打开压缩包,里面有三个文件夹,将Pre-built.2解压到D:\Program Files (x86)\pthreads-w32-2-9-1-release 如图(路径可以自己改变,这里只是建议路径)


                (2)将D:\Program Files (x86)\pthreads-w32-2-9-1-release\Pre-built.2\dll\x64\pthreadVC2.dll 拷贝到C:\Windows\System32 如图



        2)下载安装libusbx-1.0.18-win,可以到这里下载。解压到如图位置



        3)编译libhackrf

                (1)打开VS创建Libhackrf工程(Win32项目),配置如下


                (2)添加hackrf.c和hackrf.h如图,这两个文件在hackrf source的host\libhackrf\src (hackrf source的获取方法参考hackrf.net,可以直接到Github搜索hackrf)


                (3)配置头文件和依赖库的路径以及输入输出,项目右键-》属性






               (4)配置编译器


               (5)编译生成Libhackrf.lib。为了方便调用,我将hackrf.h和libhackrf.lib拷贝到如下地址,方便其他程序调用


               至此Libhackrf编译结束

        4)编译HackRFLibTest

               (1)创建win32 console工程,并输入如下代码

// HackRFLibTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

//include libhack
#include "hackrf.h"

#include <stdio.h>
#include <stdlib.h>

int _tmain(int argc, _TCHAR* argv[])
{
	hackrf_device* device = NULL;
	int result = HACKRF_SUCCESS;
	uint8_t board_id = BOARD_ID_INVALID;
	char version[255 + 1];
	read_partid_serialno_t read_partid_serialno;

	result = hackrf_init();
	if (result != HACKRF_SUCCESS) {
		fprintf(stderr, "hackrf_init() failed: %s (%d)\n",
			hackrf_error_name((hackrf_error)result), result);
		getchar();
		return EXIT_FAILURE;
	}

	result = hackrf_open(&device);
	if (result != HACKRF_SUCCESS) {
		fprintf(stderr, "hackrf_open() failed: %s (%d)\n",
			hackrf_error_name((hackrf_error)result), result);
		getchar();
		return EXIT_FAILURE;
	}

	printf("Found HackRF board.\n");

	result = hackrf_board_id_read(device, &board_id);
	if (result != HACKRF_SUCCESS) {
		fprintf(stderr, "hackrf_board_id_read() failed: %s (%d)\n",
			hackrf_error_name((hackrf_error)result), result);
		getchar();
		return EXIT_FAILURE;
	}
	printf("Board ID Number: %d (%s)\n", board_id,
		hackrf_board_id_name((hackrf_board_id)board_id));

	result = hackrf_version_string_read(device, &version[0], 255);
	if (result != HACKRF_SUCCESS) {
		fprintf(stderr, "hackrf_version_string_read() failed: %s (%d)\n",
			hackrf_error_name((hackrf_error)result), result);
		getchar();
		return EXIT_FAILURE;
	}
	printf("Firmware Version: %s\n", version);

	result = hackrf_board_partid_serialno_read(device, &read_partid_serialno);
	if (result != HACKRF_SUCCESS) {
		fprintf(stderr, "hackrf_board_partid_serialno_read() failed: %s (%d)\n",
			hackrf_error_name((hackrf_error)result), result);
		getchar();
		return EXIT_FAILURE;
	}
	printf("Part ID Number: 0x%08x 0x%08x\n",
		read_partid_serialno.part_id[0],
		read_partid_serialno.part_id[1]);
	printf("Serial Number: 0x%08x 0x%08x 0x%08x 0x%08x\n",
		read_partid_serialno.serial_no[0],
		read_partid_serialno.serial_no[1],
		read_partid_serialno.serial_no[2],
		read_partid_serialno.serial_no[3]);

	result = hackrf_close(device);
	if (result != HACKRF_SUCCESS) {
		fprintf(stderr, "hackrf_close() failed: %s (%d)\n",
			hackrf_error_name((hackrf_error)result), result);
		getchar();
		return EXIT_FAILURE;
	}

	hackrf_exit();
	printf("input ENTER to quite.\n");
	getchar(); 
	return 0;
}

               (2)配置过程中,库目录设置和包含目录设置与上面类似,但是注意这次要加入Libhackrf,一共三个库。




               (3)x64编译运行即可得到本章开头的演示效果。(注意要用zadig_2.1.0安装好hackrf驱动)


        5)编译结束,编译过程中使用的代码我迟些会上传到我的code。

        

        下一步,是完成hackrf的matlab接口,然后FFT。


参考文献

        暂无

©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值