rk3399_arm_lvds/usb/inc/usbdevice.h

57 lines
2.0 KiB
C
Raw Permalink Normal View History

2024-03-05 03:46:18 +00:00
#pragma once
#include <stdint.h>
#include <thread>
#include <functional>
#include <memory>
#include "camtp.h"
#include "buildconf.h"
#include "usb_gadget.h"
class UsbDevice
{
public:
UsbDevice(std::function<bool(int, struct usb_ctrlrequest*, unsigned char*)> handler = std::function<bool(int, struct usb_ctrlrequest*, unsigned char*)>(),
std::function<void(bool)> call_back = std::function<void(bool)>());
virtual ~UsbDevice();
int read_bulk(void* data, int size);
int write_bulk(void* data, int size);
int write_int(void* data, unsigned char size);
void abort_int();
bool is_connected()
{
return b_connected;
}
private:
void usb_main();
usb_gadget * init_usb_camtp_gadget(camtp_ctx * ctx);
void deinit_usb_camtp_gadget(usb_gadget * usbctx);
int handle_ffs_ep0(usb_gadget * ctx);
int handle_ep0(usb_gadget * ctx);
int add_usb_string(usb_gadget * usbctx, int id, char * string);
void fill_ep_descriptor(camtp_ctx * ctx, usb_gadget * usbctx,struct usb_endpoint_descriptor_no_audio * desc,int index,unsigned int flags);
void fill_if_descriptor(camtp_ctx * ctx, usb_gadget * usbctx, struct usb_interface_descriptor * desc);
void fill_config_descriptor(camtp_ctx * ctx , usb_gadget * usbctx,struct usb_config_descriptor * desc,int total_size, int hs);
void fill_dev_descriptor(camtp_ctx * ctx, usb_gadget * usbctx,struct usb_device_descriptor * desc);
void handle_setup_request(usb_gadget * ctx, struct usb_ctrlrequest* setup);
int init_eps(usb_gadget * ctx, int ffs_mode);
int init_ep(usb_gadget * ctx,int index,int ffs_mode);
int write(int fd, void* data, size_t size);
int read(int fd, void* data, size_t size);
static const int cacheSize;
std::shared_ptr<camtp_ctx> camtp_context;
usb_gadget gadget;
std::function<bool(int, struct usb_ctrlrequest*, unsigned char*)> ctrl_handler;
std::function<void(bool)> connect_call;
std::thread thread_main;
usb_gadget *usb_ctx;
volatile bool b_connected;
};