小编Tom*_*ken的帖子

如何在 Linux 上通过 GPIO 获取边缘事件而不需要繁忙循环?

我正在使用嵌入式 Linux(内核 2.6.31)的系统。

内部是一颗AT91SAM9G20芯片,部分Pin转发到外部。

现在我想将它们用作 GPIO 输入。

我阅读了有关通过文件系统使用 GPIO 的 gpio.txt 文档,直到这里为止它都运行良好。我将一些开关连接到 gpio 引脚,我可以在/sys/class/gpio/gpioX/value. 但现在我想对更改做出反应,而不是在循环中忙等待。(即回显“Switch1 被按下”)。

我想我在这里需要中断,但是如果不编写自己的内核驱动程序,我无法找到如何使用它们。我对 Linux 和 C 比较陌生(我通常用 Java 编程),所以我也想通过 sysfs 处理中断。但我的问题是,我的 GPIO 目录中没有“edge”文件(我猜是因为这只是从内核版本 2.6.33+ 开始)。是对的吗?我在那里有一个uevent文件,而不是“edge”,该文件在gpio.txt.

在 gpio.txt 文档中提到了一个标准内核驱动程序:“gpio_keys”。可以用这个来解决我的问题吗?

我想使用这个驱动程序比允许用户空间程序操纵内核任务更好。我找到了很多用于编写自己的驱动程序的代码片段,但我什至无法找出gpio.h要包含的 600 个文件中的哪些,以及如何引用该库(交叉编译器找不到 gpio.h 文件) 。

新手问题请多多指教,希望大家多多指教。

提前致谢

linux gpio

5
推荐指数
1
解决办法
9395
查看次数

Android - 与蓝牙子系统通信(BlueZ)

我正在寻找一种从我的Android智能手机(HTC Desire with Android 4.0.1)定期进行蓝牙查询的方法.设备已植根,并且是安装的自定义Rom,因此我具有完全权限.我已经编写了一个shellcript,它使用hcitool,hciconfig和hcidump来进行查询.到目前为止工作正常,但对我来说这有点慢.我想这是因为我使用android-app从linux执行一个shellcript的肮脏的解决方法.虽然通过我的应用程序杀死执行的进程我遇到了问题.

所以我想找到一种从Android API查询BT设备的方法.我发现现在没有可能做到这一点,但我读到了可能符合我要求的bluez API.有没有人对我有任何链接,提示或建议?

我没有找到任何有用的东西:/

提前致谢.


编辑(2012-09-28):

好的,我想我现在离解决方案更近一些了.我从bluez.org下载了blueZ库的源代码 然后我将重要文件(hci.h,bluetooth.h,hcilib.h及其源文件)放入我的android项目的jni文件夹中,并将它们编译到我的共享库中.我在函数周围编写了一个JNI Wrapper

hci_inquiry(int dev_id, int len, int nrsp, const uint8_t *lap,inquiry_info **ii, long flags)
Run Code Online (Sandbox Code Playgroud)

并遵循建议的本书做我的询问.一切都很好,直到这里.

但是当我开始查询时,功能

 dev_id = hci_get_route(NULL);
Run Code Online (Sandbox Code Playgroud)

总是返回-1,我无法继续.

蓝牙已激活,我已尝试授予对我的应用程序的root访问权限.不是更好:(

我到底做错了什么?是不是允许从Android应用程序使用BlueZ HCI命令?我的意思是JBlueZ什么都不做呢?

我的本机代码如下所示:

inquiry_info *ii = NULL;
int max_rsp, num_rsp;
int dev_id, sock, len, flags;
int i;
char addr[19] = { 0 };
char name[248] = { 0 };

dev_id = hci_get_route(NULL);
if (dev_id < 0 ) {
    LOGI("ERROR ON finding Device ID"); …
Run Code Online (Sandbox Code Playgroud)

android bluetooth android-ndk core-bluetooth

5
推荐指数
0
解决办法
3970
查看次数

覆盖枚举类的 c++20 太空船运算符

我正在努力为枚举类提供新的宇宙飞船运算符。让我们看下面的例子:

#include <cstdio>
#include <iostream>
#include <compare>
#include <cstdint>

enum class Animals : uint8_t
{
  Bird = 27, //those values are just for making a point
  Tiger = 5,
  Ant = 100,
  Snake = 45,
  Wale = 17
};

//auto operator<=(const Animals& lhs, const Animals& rhs) = delete;
//auto operator>=(const Animals& lhs, const Animals& rhs) = delete;
//auto operator<(const Animals& lhs, const Animals& rhs) = delete;
//auto operator>(const Animals& lhs, const Animals& rhs) = delete;

auto operator<=>(const Animals& lhs, const …
Run Code Online (Sandbox Code Playgroud)

c++ enums operator-overloading spaceship-operator c++20

2
推荐指数
1
解决办法
311
查看次数