extern char* devices[];
extern int Ndevices;
enum family_t {PIC12=0,PIC16,PIC18,PIC24,PIC32,AVR,I2CEE,SPIEE,UWEE,OWEE,UNIOEE,NUM_FAMILIES};
enum group_t {G_PIC_10_12=0,G_PIC_16,G_PIC_18,G_PIC_24,G_PIC_30_33,G_ATMEL,G_EEPROM,NUM_GROUPS};
// This struct stores information about how to program a set of devices
struct DEVICES {
char *device; //comma-separated list of device names which share the same method of programming
enum family_t family; //architecture type
double HV; //High voltage value (-1= turn off HV)
int V33; //3.3V regulator required (0=not required)
void (*ReadPtr)(); //Read function pointer
int ReadParam[4]; //Read function parameters; -10 = NU
int ResArea; //reserved area size
void (*WritePtr)(); //Write function pointer
int WriteParam[6]; //Write function parameters; -10 = NU
double WriteParamD; //Write function parameter, double
};
// This struct stores information about a specific device
struct DevInfo{
char *device; //device name
enum group_t group; //device group (used for selection in GUI only) - see nameToGroup()
enum family_t family; //architecture type
// int type; //type
double HV; //High voltage value (-1= turn off HV)
int V33; //3.3V regulator required (0=not required)
int size; //memory size
int sizeEE; //EE memory size
char *features; //device features string
};
extern int NDEVLIST;
extern struct DEVICES DEVLIST[];
/// Determine the group of a specific device
enum group_t nameToGroup(const char *devName);
/// Copies the device info from the passed devlist entry into the passed DevInfo
/// Does NOT populate fields 'device' and 'group' as these are device-specific
void populateDevInfo(struct DevInfo *info, const struct DEVICES *devlistEntry);
///Search and return device info. Uses strtok (so don't call inside a strtok loop)
struct DevInfo GetDevInfo(const char* dev);
void AddDevices();
char* ListDevices();
int GetDevType(const char* device);
struct DevInfo GetDevInfo(const char* dev);
void Write(char* dev,int ee);
void Read(char* dev,int ee,int r);