| /* |
| * Copyright (c) 2022 Nordic Semiconductor ASA |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef ZEPHYR_INCLUDE_USBD_CH9_H |
| #define ZEPHYR_INCLUDE_USBD_CH9_H |
| |
| #include <zephyr/usb/usbd.h> |
| |
| /** |
| * @brief Check whether USB device is in default state. |
| * |
| * @param[in] node Pointer to a device context |
| * |
| * @return true if USB device is in default state, false otherwise |
| */ |
| static inline bool usbd_state_is_default(const struct usbd_contex *const uds_ctx) |
| { |
| return (uds_ctx->ch9_data.state == USBD_STATE_DEFAULT) ? true : false; |
| } |
| |
| /** |
| * @brief Check whether USB device is in address state. |
| * |
| * @param[in] node Pointer to a device context |
| * |
| * @return true if USB device is in address state, false otherwise |
| */ |
| static inline bool usbd_state_is_address(const struct usbd_contex *const uds_ctx) |
| { |
| return (uds_ctx->ch9_data.state == USBD_STATE_ADDRESS) ? true : false; |
| } |
| |
| /** |
| * @brief Check whether USB device is in configured state. |
| * |
| * @param[in] node Pointer to a device context |
| * |
| * @return true if USB device is in configured state, false otherwise |
| */ |
| static inline bool usbd_state_is_configured(const struct usbd_contex *const uds_ctx) |
| { |
| return (uds_ctx->ch9_data.state == USBD_STATE_CONFIGURED) ? true : false; |
| } |
| |
| /** |
| * @brief Get current configuration value |
| * |
| * @param[in] uds_ctx Pointer to a device context |
| * |
| * @return current configuration value |
| */ |
| static inline uint8_t usbd_get_config_value(const struct usbd_contex *const uds_ctx) |
| { |
| return uds_ctx->ch9_data.configuration; |
| } |
| |
| /** |
| * @brief Set current configuration value |
| * |
| * @param[in] uds_ctx Pointer to a device context |
| * @param[in] value New configuration value |
| */ |
| static inline void usbd_set_config_value(struct usbd_contex *const uds_ctx, |
| const uint8_t value) |
| { |
| uds_ctx->ch9_data.configuration = value; |
| } |
| |
| /** |
| * @brief Get interface alternate value |
| * |
| * @param[in] uds_ctx Pointer to a device context |
| * @param[in] iface Interface number |
| * @param[out] alt Alternate value |
| * |
| * @return 0 on success, other values on fail. |
| */ |
| static inline int usbd_get_alt_value(const struct usbd_contex *const uds_ctx, |
| const uint8_t iface, |
| uint8_t *const alt) |
| { |
| if (iface >= USBD_NUMOF_INTERFACES_MAX) { |
| return -ENOENT; |
| } |
| |
| *alt = uds_ctx->ch9_data.alternate[iface]; |
| |
| return 0; |
| } |
| |
| /** |
| * @brief Set interface alternate value |
| * |
| * @param[in] uds_ctx Pointer to a device context |
| * @param[in] iface Interface number |
| * @param[out] alt Alternate value |
| * |
| * @return 0 on success, other values on fail. |
| */ |
| static inline int usbd_set_alt_value(struct usbd_contex *const uds_ctx, |
| const uint8_t iface, |
| const uint8_t alt) |
| { |
| if (iface >= USBD_NUMOF_INTERFACES_MAX) { |
| return -ENOENT; |
| } |
| |
| uds_ctx->ch9_data.alternate[iface] = alt; |
| |
| return 0; |
| } |
| |
| /** |
| * @brief Get pointer to last received setup packet |
| * |
| * @param[in] uds_ctx Pointer to a device context |
| * |
| * @return Pointer to last received setup packet |
| */ |
| static inline struct usb_setup_packet * |
| usbd_get_setup_pkt(struct usbd_contex *const uds_ctx) |
| { |
| return &uds_ctx->ch9_data.setup; |
| } |
| |
| /** |
| * @brief Handle control endpoint transfer result |
| * |
| * @param[in] uds_ctx Pointer to a device context |
| * @param[in] buf Pointer to UDC request buffer |
| * @param[in] err Transfer status |
| * |
| * @return 0 on success, other values on fail. |
| */ |
| int usbd_handle_ctrl_xfer(struct usbd_contex *uds_ctx, |
| struct net_buf *buf, int err); |
| |
| /** |
| * @brief Initialize control pipe to default values |
| * |
| * @param[in] uds_ctx Pointer to a device context |
| * |
| * @return 0 on success, other values on fail. |
| */ |
| int usbd_init_control_pipe(struct usbd_contex *uds_ctx); |
| |
| |
| #endif /* ZEPHYR_INCLUDE_USBD_CH9_H */ |