/*
  MidiMan - driver management for midi support

  drivers.h
  ---------
  3/4/23
*/

#ifndef drivers_h
#define drivers_h

#define DRIVER_LIMIT 32

typedef struct driver_s
{
  int number; // 1..limit
  char *name;
  int version;
  char *date;
  char *product; // null pointer or additional product name supplied by usbmidi which could be a null string
  int flags; // bitfield, see MIDISupport Driver flags
  unsigned int *map;
  int limit;
  int module; // index
} driver_t;

extern driver_t driver[DRIVER_LIMIT];
extern menu_t sources_menu;
extern menu_t destinations_menu;

extern int drivers; // number of installed drivers
extern int senders; // drivers that can send
extern int receivers; // drivers that can receive
extern unsigned char snd[DRIVER_LIMIT]; // driver numbers of senders
extern unsigned char rcv[DRIVER_LIMIT]; // driver number of receivers
extern int in_win; // true if mouse is in the drivers window visible area
extern int redeye_icon; // driver info icon that is red, or 0 if none
extern int cream_driver_icon; // driver title icon that is cream, or 0 if none

#define CNT_READ    0 // )
#define CNT_CONNECT 1 // ) connect(), actions
#define CNT_REMOVE  2 // )
void connect(int action, int src, int dst);

char *name_or_product(driver_t *dr);
void init_driver_info(void);
void update_connection_totals(void);
void update_info_icons(int *blk, int parent, driver_t *d);
int drivers_mouse_click(int *blk, int *icon, int state);
int drivers_menu_selection(int *blk, int *b);
void hotspots(int *blk);

#endif
