C / c++:如何在没有root权限的情况下检查硬件实时时钟模块电池状态?



我正在建一个"自助售货亭";应用程序在BeagleBone Black运行Debian 10使用wxWidgets和c++。

我已经在它上面安装了一个电池支持的RTC模块,并使用DT覆盖,它运行良好。
这是一个Adafruit PCF8523,但我想找到更多的"通用";解决方案,作为内核已经处理它,我已经看到了"低电压"。日志错误)

现在我需要我的应用
  1. 检查模块是否安装
  2. 检查电池状态

1。我认为只是获得设备名称就足够了:与板载设备不同的一切都意味着安装了一个RTC模块。
约2。我不知道:生产者使用i2c通信显示了一些代码,但由于设备由他的驱动程序处理,他的i2c很忙。此外,如果可能的话,我希望保持"通用"。

我在网上搜索并发现了几个代码样本来访问rtc和另一个可能的问题发生在我身上:他们都访问/dev/stc,所以需要root权限,我的应用程序没有。

所以:我怎么能检查电池状态的模块使用C或c++从二进制没有根权限?

<标题>

编辑根据请求,cat /proc/driver/rtc

的输出
rtc_time        : 11:59:37
rtc_date        : 2023-04-05
24hr            : yes

PCF8523的RTC驱动可能支持ioctlRTC_VL_READ

通过使用,你可以从RTC读取相关的状态位:

#define RTC_VL_DATA_INVALID _BITUL(0) /* Voltage too low, RTC data is invalid */
#define RTC_VL_BACKUP_LOW   _BITUL(1) /* Backup voltage is low */
#define RTC_VL_BACKUP_EMPTY _BITUL(2) /* Backup empty or not present */
#define RTC_VL_ACCURACY_LOW _BITUL(3) /* Voltage is low, RTC accuracy is reduced */
#define RTC_VL_BACKUP_SWITCH    _BITUL(4) /* Backup switchover happened */

非root用户至少需要访问设备文件。

详细信息请参见pcf8523_rtc_ioctl()的源代码。

相关内容

最新更新