我正在建一个"自助售货亭";应用程序在BeagleBone Black运行Debian 10使用wxWidgets和c++。
我已经在它上面安装了一个电池支持的RTC模块,并使用DT覆盖,它运行良好。
这是一个Adafruit PCF8523,但我想找到更多的"通用";解决方案,作为内核已经处理它,我已经看到了"低电压"。日志错误)
- 检查模块是否安装
- 检查电池状态
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驱动可能支持ioctl
RTC_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()的源代码。