GPIO_V2_LINEINFO_CHANGED_READ

名稱

GPIO_V2_LINEINFO_CHANGED_READ - 從晶片讀取已監控行的行資訊更改事件。

概要

int read(int chip_fd, void *buf, size_t count)

引數

chip_fd

open() 返回的 GPIO 字元裝置的檔案描述符。

buf

包含 events 的緩衝區。

count

buf 中可用的位元組數,其大小必須至少為一個 gpio_v2_line_info_changed 事件的大小。

描述

從晶片讀取已監控行的行資訊更改事件。

注意

通常不需要監控行資訊更改,這通常只由系統監控元件執行。

這些事件與行的請求狀態或配置更改相關,而非其值更改。當行值更改時,使用 GPIO_V2_LINE_EVENT_READ 接收事件。

必須使用 GPIO_V2_GET_LINEINFO_WATCH_IOCTL 監控行才能生成資訊更改事件。隨後,對行的請求、釋放或重新配置都將生成資訊更改事件。

核心在事件發生時對其進行時間戳標記,並將其儲存在緩衝區中,使用者空間可以方便地使用 read() 從中讀取這些事件。

每個 chip_fd 的核心事件緩衝區大小固定為 32 個事件。

如果事件爆發的速度快於使用者空間讀取的速度,緩衝區可能會溢位。如果發生溢位,則最近的事件將被丟棄。使用者空間無法檢測到溢位。

從緩衝區讀取的事件始終與核心檢測到的順序相同,即使當一個 chip_fd 監控多條線時也是如此。

為了最大程度地減少將事件從核心複製到使用者空間所需的呼叫次數,read() 支援複製多個事件。複製的事件數量是核心緩衝區中可用數量和使用者空間緩衝區(buf)中可容納數量中的較小值。

如果沒有可用事件且 chip_fd 未設定為 O_NONBLOCK,則 read() 將阻塞。

可以透過使用 poll() 或等效函式檢查 chip_fd 是否可讀來測試事件的存在。

返回值

成功時返回讀取的位元組數,該位元組數將是 gpio_v2_line_info_changed 事件大小的倍數。

發生錯誤時返回 -1,並相應設定 errno 變數。常見錯誤程式碼在 GPIO 錯誤程式碼 中描述。