您的位置:首页 > 其它

VS2013编译libhackrf以及测试

2014-07-29 19:45 561 查看
接触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。

参考文献

暂无
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: