174 lines
4.4 KiB
C
174 lines
4.4 KiB
C
/***************************************************************************
|
|
*
|
|
* Copyright 2015-2019 BES.
|
|
* All rights reserved. All unpublished rights reserved.
|
|
*
|
|
* No part of this work may be used or reproduced in any form or by any
|
|
* means, or stored in a database or retrieval system, without prior written
|
|
* permission of BES.
|
|
*
|
|
* Use of this work is governed by a license granted by BES.
|
|
* This work contains confidential and proprietary information of
|
|
* BES. which is protected by copyright, trade secret,
|
|
* trademark and other intellectual property rights.
|
|
*
|
|
****************************************************************************/
|
|
#ifndef __HAL_USB_H__
|
|
#define __HAL_USB_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "stdint.h"
|
|
#include "stdbool.h"
|
|
|
|
#ifdef USB_HIGH_SPEED
|
|
#define MAX_USBHOST_PACKET_SIZE 512
|
|
#else
|
|
#define MAX_USBHOST_PACKET_SIZE 64
|
|
#endif
|
|
|
|
#define USBHOST_EPNUM 6
|
|
|
|
#define HAL_USBHOST_CHAN_NONE 0xFF
|
|
|
|
enum HAL_USBHOST_EP_TYPE_T {
|
|
HAL_USBHOST_EP_CTRL,
|
|
HAL_USBHOST_EP_ISO,
|
|
HAL_USBHOST_EP_BULK,
|
|
HAL_USBHOST_EP_INT,
|
|
|
|
HAL_USBHOST_EP_QTY
|
|
};
|
|
|
|
enum HAL_USBHOST_PID_TYPE_T {
|
|
HAL_USBHOST_PID_DATA0 = 0,
|
|
HAL_USBHOST_PID_DATA2 = 1,
|
|
HAL_USBHOST_PID_DATA1 = 2,
|
|
HAL_USBHOST_PID_MDATA = 3,
|
|
HAL_USBHOST_PID_SETUP = 3,
|
|
|
|
HAL_USBHOST_PID_QTY,
|
|
HAL_USBHOST_PID_AUTO = 0xFF,
|
|
};
|
|
|
|
enum HAL_USBHOST_PORT_EVENT_T {
|
|
HAL_USBHOST_PORT_CONN,
|
|
HAL_USBHOST_PORT_EN_LS,
|
|
HAL_USBHOST_PORT_EN_FS,
|
|
HAL_USBHOST_PORT_EN_HS,
|
|
HAL_USBHOST_PORT_EN_BAD,
|
|
HAL_USBHOST_PORT_DISCONN,
|
|
|
|
HAL_USBHOST_PORT_QTY
|
|
};
|
|
|
|
enum HAL_USBHOST_SETUP_STAGE_T {
|
|
HAL_USBHOST_SETUP_DATA_IN,
|
|
HAL_USBHOST_SETUP_DATA_OUT,
|
|
HAL_USBHOST_SETUP_STATUS_IN,
|
|
HAL_USBHOST_SETUP_STATUS_OUT,
|
|
HAL_USBHOST_SETUP_DONE,
|
|
HAL_USBHOST_SETUP_ERROR,
|
|
|
|
HAL_USBHOST_SETUP_STAGE_QTY
|
|
};
|
|
|
|
enum HAL_USBHOST_XFER_ERR_T {
|
|
HAL_USBHOST_XFER_ERR_NONE,
|
|
HAL_USBHOST_XFER_ERR_AHB,
|
|
HAL_USBHOST_XFER_ERR_STALL,
|
|
HAL_USBHOST_XFER_ERR_TRANSACTION,
|
|
HAL_USBHOST_XFER_ERR_BABBLE,
|
|
HAL_USBHOST_XFER_ERR_FRAME_OVERRUN,
|
|
HAL_USBHOST_XFER_ERR_DATA_TOGGLE,
|
|
HAL_USBHOST_XFER_ERR_TIMEOUT,
|
|
HAL_USBHOST_XFER_ERR_DISCONN,
|
|
|
|
HAL_USBHOST_XFER_ERR_QTY
|
|
};
|
|
|
|
struct HAL_USBHOST_SETUP_XFER_T;
|
|
|
|
typedef void (*HAL_USBHOST_DELAY_FUNC)(uint32_t ms);
|
|
typedef void (*HAL_USBHOST_PORT_HANDLER)(enum HAL_USBHOST_PORT_EVENT_T evt);
|
|
typedef void (*HAL_USBHOST_XFER_COMPL_HANDLER)(uint8_t chan, uint8_t *buf, uint32_t len, enum HAL_USBHOST_XFER_ERR_T error);
|
|
typedef void (*HAL_USBHOST_SETUP_COMPL_HANDLER)(struct HAL_USBHOST_SETUP_XFER_T *setup, int error);
|
|
|
|
enum HAL_USBHOST_PLUG_STATUS_T {
|
|
HAL_USBHOST_PLUG_UNKNOWN,
|
|
HAL_USBHOST_PLUG_IN,
|
|
HAL_USBHOST_PLUG_OUT,
|
|
};
|
|
|
|
typedef void (*HAL_USBHOST_PLUG_HANDLER)(enum HAL_USBHOST_PLUG_STATUS_T status);
|
|
|
|
struct HAL_USBHOST_CHAN_TYPE_T {
|
|
uint16_t mps;
|
|
uint8_t ep_num;
|
|
uint8_t ep_in;
|
|
enum HAL_USBHOST_EP_TYPE_T ep_type;
|
|
uint8_t dev_addr;
|
|
};
|
|
|
|
struct HAL_USBHOST_XFER_T {
|
|
uint8_t *buf;
|
|
uint32_t size;
|
|
uint8_t multi_cnt;
|
|
enum HAL_USBHOST_PID_TYPE_T pid;
|
|
HAL_USBHOST_XFER_COMPL_HANDLER handler;
|
|
};
|
|
|
|
struct HAL_USBHOST_SETUP_PKT_T {
|
|
uint8_t bmRequestType;
|
|
uint8_t bRequest;
|
|
uint16_t wValue;
|
|
uint16_t wIndex;
|
|
uint16_t wLength;
|
|
};
|
|
|
|
struct HAL_USBHOST_SETUP_XFER_T {
|
|
struct HAL_USBHOST_SETUP_PKT_T setup_pkt;
|
|
enum HAL_USBHOST_SETUP_STAGE_T next_stage;
|
|
HAL_USBHOST_SETUP_COMPL_HANDLER handler;
|
|
uint8_t *data_buf;
|
|
uint8_t chan_out;
|
|
uint8_t chan_in;
|
|
};
|
|
|
|
int hal_usbhost_open(HAL_USBHOST_PORT_HANDLER port_cb, HAL_USBHOST_DELAY_FUNC delay_fn);
|
|
|
|
void hal_usbhost_close(void);
|
|
|
|
void hal_usbhost_halt_chan(uint8_t chan);
|
|
|
|
void hal_usbhost_port_reset(uint32_t ms);
|
|
|
|
int hal_usbhost_get_chan(uint8_t *chan);
|
|
|
|
int hal_usbhost_free_chan(uint8_t chan);
|
|
|
|
int hal_usbhost_init_chan(uint8_t chan, const struct HAL_USBHOST_CHAN_TYPE_T *type);
|
|
|
|
int hal_usbhost_update_chan_dev_addr(uint8_t chan, uint8_t dev_addr);
|
|
|
|
int hal_usbhost_update_chan_mps(uint8_t chan, uint16_t mps);
|
|
|
|
int hal_usbhost_start_xfer(uint8_t chan, const struct HAL_USBHOST_XFER_T *xfer);
|
|
|
|
int hal_usbhost_start_setup_xfer(const struct HAL_USBHOST_SETUP_XFER_T *setup, uint32_t *recv_len);
|
|
|
|
void hal_usbhost_detect(enum HAL_USBHOST_PLUG_STATUS_T status, HAL_USBHOST_PLUG_HANDLER handler);
|
|
|
|
void hal_usbhost_sleep(void);
|
|
|
|
void hal_usbhost_wakeup(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|