GPIO_V2_GET_LINE_IOCTL¶
名稱¶
GPIO_V2_GET_LINE_IOCTL - 從核心請求一個或多個線路。
概要¶
-
GPIO_V2_GET_LINE_IOCTL¶
int ioctl(int chip_fd, GPIO_V2_GET_LINE_IOCTL, struct gpio_v2_line_request *request)
引數¶
chip_fd由 open() 返回的 GPIO 字元裝置的檔案描述符。
request指定要請求的線路及其配置的
line_request。
描述¶
成功後,請求程序將被授予對線路值的獨佔訪問權,對線路配置的寫入訪問權,並且可以線上路上檢測到邊沿時接收事件,所有這些都在 線路請求 中進行了更詳細的描述。
可以在一個線路請求中請求多個線路,並且核心儘可能原子地對請求的線路執行請求操作。例如,GPIO_V2_LINE_GET_VALUES_IOCTL 將一次讀取所有請求的線路。
線路的狀態,包括輸出線路的值,保證保持在請求的狀態,直到返回的檔案描述符被關閉。一旦檔案描述符被關閉,從使用者空間的視角來看,線路的狀態變得不受控制,並且可能恢復到其預設狀態。
請求已在使用的線路是一個錯誤 (EBUSY)。
關閉 chip_fd 對現有線路請求沒有影響。
配置規則¶
對於任何給定的請求線路,以下配置規則適用
方向標誌 GPIO_V2_LINE_FLAG_INPUT 和 GPIO_V2_LINE_FLAG_OUTPUT 不能組合。如果兩者都沒有設定,則唯一可以設定的另一個標誌是 GPIO_V2_LINE_FLAG_ACTIVE_LOW,並且線路被請求為“原樣”,以便允許讀取線路值而不改變電氣配置。
驅動標誌 GPIO_V2_LINE_FLAG_OPEN_xxx 要求設定 GPIO_V2_LINE_FLAG_OUTPUT。只能設定一個驅動標誌。如果未設定任何標誌,則假定線路為推輓。
只能設定一個偏置標誌 GPIO_V2_LINE_FLAG_BIAS_xxx,並且它需要同時設定一個方向標誌。如果未設定任何偏置標誌,則偏置配置不會更改。
邊沿標誌 GPIO_V2_LINE_FLAG_EDGE_xxx 要求設定 GPIO_V2_LINE_FLAG_INPUT,並且可以組合以檢測上升沿和下降沿。從不支援的線路上請求邊沿檢測是一個錯誤 (ENXIO)。
只能設定一個事件時鐘標誌 GPIO_V2_LINE_FLAG_EVENT_CLOCK_xxx。如果未設定任何標誌,則事件時鐘預設為 CLOCK_MONOTONIC。GPIO_V2_LINE_FLAG_EVENT_CLOCK_HTE 標誌需要支援的硬體和設定了 CONFIG_HTE 的核心。從不支援它的裝置請求 HTE 是一個錯誤 (EOPNOTSUPP)。
debounce_period_us 屬性只能應用於設定了 GPIO_V2_LINE_FLAG_INPUT 的線路。設定後,消抖適用於 GPIO_V2_LINE_GET_VALUES_IOCTL 返回的值和 GPIO_V2_LINE_EVENT_READ 返回的邊沿。如果硬體不支援直接消抖,則核心會在軟體中模擬消抖。在硬體不支援消抖或軟體模擬所需的硬體中斷的線路上請求消抖是一個錯誤 (ENXIO)。
請求無效配置是一個錯誤 (EINVAL)。
配置支援¶
如果底層硬體和驅動程式不直接支援請求的配置,則核心會應用以下方法之一
拒絕請求
在軟體中模擬該功能
將該功能視為盡力而為
應用的方法取決於是否可以在軟體中合理地模擬該功能,以及如果不支援該功能對硬體和使用者空間的影響。 應用於每個功能的方法如下
功能 |
方法 |
|---|---|
偏置 |
盡力而為 |
消抖 |
模擬 |
方向 |
拒絕 |
驅動 |
模擬 |
邊沿檢測 |
拒絕 |
偏置被視為盡力而為,以允許使用者空間為支援內部偏置的平臺應用與需要外部偏置的平臺相同的配置。最壞的情況是線路浮動,而不是按預期偏置。
透過將濾波器應用於線路上的硬體中斷來模擬消抖。在檢測到邊沿並且線路在消抖期間保持穩定後,會生成一個邊沿事件。事件時間戳對應於消抖期間的結束。
透過在不應主動驅動線路時將線路切換到輸入來模擬驅動。
邊沿檢測需要中斷支援,如果不支援則拒絕。仍然可以從使用者空間執行輪詢模擬。
在所有情況下,GPIO_V2_GET_LINEINFO_IOCTL 報告的配置都是請求的配置,而不是生成的硬體配置。使用者空間無法確定硬體是否支援該功能,是模擬的,還是盡力而為的。
返回值¶
成功時返回 0,並且 request.fd 包含請求的檔案描述符。
出錯時返回 -1,並且 errno 變數被適當地設定。 常見的錯誤程式碼在 GPIO 錯誤程式碼 中描述。