#ifndef ARDUINO 
#define ARDUINO

#include <libusb-1.0/libusb.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>

#define ID_VENDOR 0x2341
#define ID_PRODUCT 0x01
#define ENDPOINTS_NUMBER 4
#define TIMEOUT 10
#define MAX_DATA 50

void init(libusb_context **context, libusb_device ***devices, ssize_t *devices_count);
libusb_device* searchArduino(libusb_device **devices, ssize_t devices_count);
void openConnection(libusb_device *arduino, libusb_device_handle **handle, struct libusb_config_descriptor **config_desc);
void getEndpoints(struct libusb_config_descriptor *config_desc, struct libusb_endpoint_descriptor *endpoint_desc_list);
void start(libusb_context **context, libusb_device ***devices, libusb_device_handle **handle, struct libusb_config_descriptor **config_desc, struct libusb_endpoint_descriptor *endpoint_desc_list);
void stop(struct libusb_config_descriptor *config_desc, libusb_device_handle *handle, libusb_device **devices, libusb_context *context);
void sendData(int endpoint_id, uint8_t data, libusb_device_handle *handle, struct libusb_endpoint_descriptor *endpoint_desc_list);
void receiveData(int endpoint_id, uint8_t *data, libusb_device_handle *handle, struct libusb_endpoint_descriptor *endpoint_desc_list);

#endif
