Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
7f96cc8e3This file is pinned to the selected release. Download the original to open it in your design tool.
/*
* Copyright 2012-2022 Great Scott Gadgets <info@greatscottgadgets.com>
* Copyright 2012 Jared Boone
*
* This file is part of HackRF.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/
#pragma once
#include <stdbool.h>
#include <stdint.h>
// TODO: Refactor to support high performance operations without having to
// expose usb_transfer_descriptor_t. Or usb_endpoint_prime(). Or, or, or...
#include <libopencm3/lpc43xx/usb.h>
#include "usb_type.h"
usb_queue_head_t* usb_queue_head(const uint_fast8_t endpoint_address);
void usb_peripheral_reset(void);
void usb_phy_enable(void);
void usb_device_init(const uint_fast8_t device_ordinal, usb_device_t* const device);
void usb_run(usb_device_t* const device);
void usb_run_tasks(const usb_device_t* const device);
usb_speed_t usb_speed(const usb_device_t* const device);
void usb_set_address_immediate(
const usb_device_t* const device,
const uint_fast8_t address);
void usb_set_address_deferred(
const usb_device_t* const device,
const uint_fast8_t address);
usb_endpoint_t* usb_endpoint_from_address(const uint_fast8_t endpoint_address);
void usb_endpoint_init(const usb_endpoint_t* const endpoint, const bool enable_zlp);
void usb_endpoint_stall(const usb_endpoint_t* const endpoint);
void usb_endpoint_disable(const usb_endpoint_t* const endpoint);
void usb_endpoint_reset_data_toggle(const usb_endpoint_t* const endpoint);
void usb_endpoint_flush(const usb_endpoint_t* const endpoint);
bool usb_endpoint_is_ready(const usb_endpoint_t* const endpoint);
void usb_endpoint_prime(
const usb_endpoint_t* const endpoint,
usb_transfer_descriptor_t* const first_td);
void usb_endpoint_schedule_wait(
const usb_endpoint_t* const endpoint,
usb_transfer_descriptor_t* const td);
void usb_endpoint_schedule_append(
const usb_endpoint_t* const endpoint,
usb_transfer_descriptor_t* const tail_td,
usb_transfer_descriptor_t* const new_td);