File: microdowell.h

package info (click to toggle)
nut 2.7.2-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 10,220 kB
  • ctags: 8,034
  • sloc: ansic: 66,197; sh: 12,738; python: 2,196; cpp: 1,710; makefile: 1,335; perl: 702; xml: 10
file content (327 lines) | stat: -rw-r--r-- 18,083 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
#ifndef MICRODOWELL_H
#define MICRODOWELL_H

#ifdef ENTERPRISE_PROTOCOL

#include <ctype.h>


#define STX_CHAR					'['
#define ERR_COM_NO_CHARS      -999  // nessun carattere dalla porta seriale
#define ERR_MSG_TOO_SHORT     -998  // messaggio troppo breve: non arriva sino al Checksum
#define ERR_MSG_CHECKSUM      -997  // checksum non valido
#define ERR_COM_TIMEOUT       -996  // timeout in lettura
#define ERR_CLR_RX_BUFF			-900  // bisogna cancellare il buffer (non è un errore!)
#define COMMAND_NOT_VALID     -50   // comando non valido
#define PARAMETER_NOT_VALID   -51   // parametro non valido
#define ERR_UPS_NOT_FOUND     -10   // non trovo un UPS
#define ERR_COM_PORT_OPEN     -11   // impossibile aprire la porta di comunicazione
#define ERR_COM_SET_PORT      -12   // impossibile configurare la porta di comunicazione
#define ERR_COM_UNDEF_PORT    -20   // porta non valida o non esistente
#define ERR_USB_DRIVER        -13   // impossibile aprire il driver USB
#define ERR_USB_COMM_KO       -14   // interfaccia USB OK: gruppo spento o guasto
#define ERR_UPS_UNKNOWN       -30   // impossibile identificare l'UPS
#define ERR_PRG_THREAD        -40   // impossibile creare uno thread
#define ERR_PRG_INVALID_DATA  -60   // dati non validi

#define ERR_NO_ERROR				0x00  // no errors
#define ERR_I2C_BUSY       	0x01	// I2C bus busy (e2prom)
#define ERR_CMD_CHECKSUM      0x10	// Checksum not valid
#define ERR_CMD_UNRECOG       0x11	// unrecognized command
#define ERR_EEP_NOBLOCK    	0x08	// WRITE: eeprom address not multiple of 8
#define ERR_EEP_OOBOUND    	0x09	// READ: eeprom address out of bound (with size)
#define ERR_EEP_WADDR1     	0x28	// error writing e2prom address
#define ERR_EEP_WSADDR1    	0x29	// error writing e2prom subaddress
#define ERR_EEP_RDATA      	0x2A	// error reading e2prom data
#define ERR_EEP_WADDR2     	0x50	// error writing e2prom address
#define ERR_EEP_WSADDR2    	0x51	// error reading e2prom subaddress
#define ERR_EEP_WDATA      	0x52	// error writing e2prom data
#define ERR_EEP_WADDRVER   	0x53	// error writing e2prom address during data verification
#define ERR_EEP_WDATAVER   	0x54	// error verification e2prom data
#define ERR_EEP_VERIFY     	0x55	// e2prom data are different from those in the write buffer
#define ERR_EEP_CHECKSUM   	0x90	// e2prom checksum error



#define  CMD_ACK              0x06  // ACK
#define  CMD_NACK             0x15  // NACK

#define  CMD_GET_STATUS       0x00  // comando di acquisizione STATUS
#define  CMD_GET_MEASURES     0x01  // comando di acquisizione MISURE
#define  CMD_GET_CONFIG       0x02  // comando di acquisizione CONFIGURAZIONE
#define  CMD_GET_BATT_STAT    0x03  // comando di acquisizione Battery+Load Status
#define  CMD_GET_BAT_LD       0x03  // comando di acquisizione Battery+Load Status
#define  CMD_GET_MASK         0x07  // comando di acquisizione MASCHERA PUNTI
#define  CMD_SET_TIMER        0x20  // comando di CONFIGURAZIONE TIMER
#define  CMD_BATT_TEST        0x21  // comando di CONFIGURAZIONE TEST BATTERIA
#define  CMD_GET_BATT_TEST    0x22  // comando di       LETTURA  TEST BATTERIA
#define  CMD_SD_ONESHOT       0x40  // comando di SCRITTURA SHUTDOWN ONESHOT
#define  CMD_GET_SD_ONESHOT   0x41  // comando di  LETTURA  SHUTDOWN ONESHOT
#define  CMD_SET_SCHEDULE     0x42  // comando di SCRITTURA SCHEDULE
#define  CMD_GET_SCHEDULE     0x43  // comando di  LETTURA  SCHEDULE
#define  CMD_GET_EEP_BLOCK    0x50  // comando di  LETTURA  BLOCCO EEPROM
#define  CMD_SET_EEP_BLOCK    0x51  // comando di SCRITTURA BLOCCO EEPROM
#define  CMD_GET_EEP_SEED     0x52  // comando di acquisizione SEME PROGR. EEPROM
#define  CMD_INIT             0xF0  // comando di REINIZIALIZZAZIONE UPS


#define  LEN_ACK              1  // ACK
#define  LEN_NACK             2  // NACK

#define  LEN_GET_STATUS       1  // comando di acquisizione STATUS
#define  LEN_GET_MEASURES     1  // comando di acquisizione MISURE
#define  LEN_GET_CONFIG       1  // comando di acquisizione CONFIGURAZIONE
#define  LEN_GET_BATT_STAT    1  // comando di acquisizione Battery+Load Status
#define  LEN_GET_BAT_LD       1  // comando di acquisizione Battery+Load Status
#define  LEN_GET_MASK         1  // comando di acquisizione MASCHERA PUNTI
#define  LEN_SET_TIMER        5  // comando di CONFIGURAZIONE TIMER
#define  LEN_BATT_TEST        4  // comando di CONFIGURAZIONE TEST BATTERIA
#define  LEN_GET_BATT_TEST    1  // comando di       LETTURA  TEST BATTERIA
#define  LEN_SD_ONESHOT       8  // comando di SCRITTURA SHUTDOWN ONESHOT
#define  LEN_GET_SD_ONESHOT   1  // comando di  LETTURA  SHUTDOWN ONESHOT
#define  LEN_SET_SCHEDULE     8  // comando di SCRITTURA SCHEDULE
#define  LEN_GET_SCHEDULE     2  // comando di  LETTURA  SCHEDULE
#define  LEN_GET_EEP_BLOCK    3  // comando di SCRITTURA BLOCCO EEPROM
#define  LEN_SET_EEP_BLOCK    12 // comando di SCRITTURA BLOCCO EEPROM
#define  LEN_GET_EEP_SEED     1  // comando di acquisizione SEME PROGR. EEPROM
#define  LEN_INIT             1  // comando di REINIZIALIZZAZIONE UPS


// non completamente definiti!
#define  RET_GET_STATUS       10  // comando di acquisizione STATUS
#define  RET_GET_MEASURES     15  // comando di acquisizione MISURE
#define  RET_GET_CONFIG       11  // comando di acquisizione CONFIGURAZIONE
#define  RET_GET_BATT_STAT    10  // comando di acquisizione Battery+Load Status
#define  RET_GET_BAT_LD       10  // comando di acquisizione Battery+Load Status
#define  RET_GET_MASK         1  // comando di acquisizione MASCHERA PUNTI
#define  RET_SET_TIMER        5  // comando di CONFIGURAZIONE TIMER
#define  RET_BATT_TEST        4  // comando di CONFIGURAZIONE TEST BATTERIA
#define  RET_GET_BATT_TEST    1  // comando di       LETTURA  TEST BATTERIA
#define  RET_SD_ONESHOT       8  // comando di SCRITTURA SHUTDOWN ONESHOT
#define  RET_GET_SD_ONESHOT   1  // comando di  LETTURA  SHUTDOWN ONESHOT
#define  RET_SET_SCHEDULE     8  // comando di SCRITTURA SCHEDULE
#define  RET_GET_SCHEDULE     8  // comando di  LETTURA  SCHEDULE
#define  RET_GET_EEP_BLOCK    11  // comando di SCRITTURA BLOCCO EEPROM
#define  RET_SET_EEP_BLOCK    12 // comando di SCRITTURA BLOCCO EEPROM
#define  RET_GET_EEP_SEED     1  // comando di acquisizione SEME PROGR. EEPROM
#define  RET_INIT             1  // comando di REINIZIALIZZAZIONE UPS


//=======================================================
// Indirizzi delle variabili memorizzate nella EEPROM: //
//=======================================================
#define  EEP_OPT_BYTE_BLK 0x00 // Option Bytes block
#define  EEP_MAGIC        0x00 // magic number: deve essere a 0xAA
#define  EEP_CHECKSUM     0x01 // XOR longitudinale da 0x?? a 0x??
#define  EEP_OUT_CONFIG   0x02 // vedi documentazione
#define  EEP_OPT_BYTE_0   0x02 // vedi documentazione
#define  EEP_OPT_BYTE_1   0x03 // vedi documentazione
#define  EEP_STATUS       0x04 // Status UPS

#define  EEP_THRESHOLD_0  0x08 // Blocco 0 con gli threshold
#define  EEP_MEAN_MIN     0x08 // UPS minimum AC voltage intervention point
#define  EEP_MEAN_MAX     0x0A // UPS maximum AC voltage intervention point
#define  EEP_AVR_MIN      0x0C // AVR minimum AC voltage intervention point
#define  EEP_AVR_MAX      0x0E // AVR maximum AC voltage intervention point

#define  EEP_THRESHOLD_1  0x10 // Blocco 1 con gli threshold
#define  EEP_BLOW_VALUE   0x10 // Battery LOW threshold voltage
#define  EEP_BEND_VALUE   0x12 // Battery END threshold voltage
#define  EEP_VMETER_0     0x14 // Led 0 Voltage indicator threshold
#define  EEP_VMETER_1     0x16 // Led 1 Voltage indicator threshold

#define  EEP_THRESHOLD_2  0x18 // Blocco 2 con gli threshold
#define  EEP_VMETER_2     0x18 // Led 2 Voltage indicator threshold
#define  EEP_VMETER_3     0x1A // Led 3 Voltage indicator threshold
#define  EEP_VMETER_4     0x1C // Led 4 Voltage indicator threshold

#define  EEP_FAULT_POINTS 0x20 // number of fault points (in an half sine wave) after which USP enter battery mode
#define  EEP_CHARGER_MIN  0x21 // Threshold voltage for battery charger

#define  EEP_TEMP_MAX     0x28 // Maximum temperature: over this value an alarm will be generated
#define  EEP_TEMP_FAULT   0x2A // Fault temperature: over this value, UPS will shut down immediately
#define  EEP_FANSPEED_0   0x2C // Temperature for fan activation (low speed)
#define  EEP_FANSPEED_1   0x2E // Temperature for fan activation (medium speed)

#define  EEP_FANSPEED_2   0x30 // Temperature for fan activation (high speed)

#define  EEP_IOUT         0x38 //
#define  EEP_IOUT_OVRLD   0x38 // Maximum current: over this value an alarm will be generated
#define  EEP_IOUT_FAULT   0x3A // Fault current: over this value, UPS will shut down immediately
#define  EEP_PWRMTR_0     0x3C // Led 0 Power indicator threshold
#define  EEP_PWRMTR_1     0x3E // Led 1 Power indicator threshold

#define  EEP_PWRMTR_2     0x40 // Led 2 Power indicator threshold
#define  EEP_PWRMTR_3     0x42 // Led 3 Power indicator threshold
#define  EEP_PWRMTR_4     0x44 // Led 4 Power indicator threshold
#define  EEP_PWRMTR_5     0x46 // Between "Full power" and "Overload" Power indicator level

#define  EEP_INPUT_MASK_0 0x48 // Half sine input mask (0-7 of 10 points)
#define  EEP_INPUT_MASK_8 0x50 // Half sine input mask (8-9 of 10 points)

#define  EEP_MIN_VBATT    0x60 // Minimum battery voltaged reached from the last power-on
#define  EEP_RUNTIME_H    0x62 // Working time in minutes (max ~=32 years) (MSB first)
#define  EEP_BAT_TIME_M   0x65 // Time in Battery mode: seconds*2 (max ~=390 days). (MSB first)


#define  EEP_UPS_MODEL    0x80 // Model of the UPS in ASCII. For the Enterprise line, the structure is:
                               //    ENTxxyyy
                               // where:	 xx = Power rating in watts/100 (zero padded at left)
                               //          yyy = model variants (if not defined, space padded to the right)

#define  EEP_NETWRK_ID    0x88 // Network ID in ASCII (not used) - space padded
#define  EEP_NETWRK_NAME  0x90 // Network Name in ASCII (not used) - space padded
#define  EEP_SERIAL_NUM   0x98 // Serial Number in ASCII - zero padded (at left)

#define  EEP_PROD_DATE    0xA0 //
#define  EEP_PROD_YEAR    0xA0 // Year of production (add 2000)
#define  EEP_PROD_WEEK    0xA1 // Week of production [0-51]
#define  EEP_PROD_HW_VER  0xA2 // Hardware version: 2 nibbles ?  Major and Minor number.
#define  EEP_PROD_BRD_VER 0xA3 // Board version: 2 nibbles ?  Major and Minor number.
#define  EEP_PROD_FW_VER  0xA4 // Firmware version: 2 nibbles ?  Major and Minor number.
#define  EEP_PROD_FW_SVER 0xA5 // Firmware SUBversion: 2 nibbles ?  Major and Minor number.
#define  EEP_PROD_BTTRS   0xA6 // number of batteries installed in the UPS


#define  EEP_BATT_SUBST   0xA8 // battery replacement block
#define  EEP_BATT_YEAR_0  0xA8 // Year of 1st battery replacement (add 2000)
#define  EEP_BATT_WEEK_0  0xA9 // Week of 1st battery replacement
#define  EEP_BATT_YEAR_1  0xAA // Year of 2nd battery replacement (add 2000)
#define  EEP_BATT_WEEK_1  0xAB // Week of 2nd battery replacement
#define  EEP_BATT_YEAR_2  0xAC // Year of 3rd battery replacement (add 2000)
#define  EEP_BATT_WEEK_2  0xAD // Week of 3rd battery replacement
#define  EEP_BATT_YEAR_3  0xAE // Year of 4th battery replacement (add 2000)
#define  EEP_BATT_WEEK_3  0xAF // Week of 4th battery replacement


#define  EEP_SCHEDULE     0xC8 // Start of SCHEDULING table
#define  EEP_SCHEDULE_0   0xC8 // 1st Scheduling slot
#define  EEP_SCHEDULE_1   0xD0 // 2nd Scheduling slot
#define  EEP_SCHEDULE_2   0xD8 // 3rd Scheduling slot
#define  EEP_SCHEDULE_3   0xE0 // 4th Scheduling slot
#define  EEP_SCHEDULE_4   0xE8 // 5th Scheduling slot
#define  EEP_SCHEDULE_5   0xF0 // 6th Scheduling slot


#define 	BIT_NO_COMM_UPS 			0x0001	// Event  2 - communications with the UPS lost
#define	BIT_COMM_OK 				0x0002	// Event  3 - communications with the UPS reestablished
#define	BIT_BATTERY_MODE 			0x0004	// Event  5 - the UPS is in Battery mode
#define	BIT_BATTERY_LOW   		0x0008	// Event  6 - the UPS has a LOW battery level
#define	BIT_MAINS_OK 				0x0010	// Event  7 - return of the mains
#define	BIT_OVERLOAD 				0x0020	// Event  8 - the UPS is overloaded
#define	BIT_HIGH_TEMPERATURE		0x0040	// Event  9 - the UPS is in overtemperature
#define	BIT_GENERIC_FAULT 		0x0080	// Event 11 - there is a generic fault
#define	BIT_SYSTEM_SHUTDOWN 		0x0100	// Event 14 - the UPS will shut down IMMEDIATELY
#define	BIT_STANDBY			 		0x0200	// Event 32 - the UPS went in STANDBY MODE
#define	BIT_BATTERY_END   		0x0400	// Event 33 - the UPS went in battery END
#define	BIT_EVENT_0					0x1000	// evento ??
#define	BIT_EVENT_1					0x2000	// evento ??
#define	BIT_FIRST_TIME				0x4000	// se è la prima volta che chiamo la funzione
#define	BIT_POLL_RESTART			0x8000	// se riesco ad identificare l'UPS dopo lo scollegamento, reinvio i dati



typedef struct
   {
   int Port ;       // porta a cui è collegato l' UPS:
                     //    0 = USB
                     //    n = COMn
   char Opened ;    // BOOL flag che identifica se la porta è aperta
   int ErrCode ;		// ultimo codice di errore in fase di lettura
   int ErrCount ; 	// conteggio degli errori
   unsigned char PollFlag ;	// identifica se posso accedere all'UPS
   									// 0x01: se TRUE, polling abilitato
   									// 0x02: se TRUE, la routine di polling dati è attiva: devo attendere
   									// 0x04: se TRUE, bisogna rileggere la configurazione del gruppo
   //------------------------------------------------------------------------
   unsigned long Counter ;    // contatore: viene incrementato ad ogni nuovo POLL
	unsigned char CommStatus ;	// stato delle comunicazioni
	unsigned char FramePointer ; // puntatore al carattere di START dei dati ricevuti
   //------------------------------------------------------------------------
   char UpsModel[9] ;		// modello UPS (8 caratteri)
	unsigned char ge_2kVA ;	// if more or equal to 2KVA
   char SerialNumber[9] ;	// numero di serie dell'UPS

   unsigned short int  YearOfProd ;	// anno di produzione dell'UPS
   unsigned char MonthOfProd ;		// Mese di produzione dell'UPS
   unsigned char DayOfProd ;			// Giorno di produzione dell'UPS
   unsigned char HW_MajorVersion ;	// Hardware: Major version
   unsigned char HW_MinorVersion ;	// Hardware: Minor version
   unsigned char BR_MajorVersion ;	// BoardHardware: Major version
   unsigned char BR_MinorVersion ;	// BoardHardware: Minor version
   unsigned char FW_MajorVersion ;	// Firmware: Major version
   unsigned char FW_MinorVersion ;	// Firmware: Minor version
   unsigned char FW_SubVersion ;		// Firmware: SUBVERSION (special releases
												//					for particular customers)

   unsigned char BatteryNumber ;		// number of batteries in UPS
   //------------------------------------------------------------------------
   unsigned long StatusUPS ;	// flag di stato dell'UPS 4 byte): 1=TRUE
									//		bit  0 => BATTERY_MODE
									//		bit  1 => BATTERY_LOW
									//		bit  2 => BATTERY_END
									//		bit  3 => ONLINE (funzionamento in rete)
									//		bit  4 => MAINS_ON (rete di ingresso presente)
									//		bit  5 => STANDBY (UPS in modo Standby)
									//		bit  6 => WAIT_MAINS	(UPS in fase di INIT + attesa rete)
									//		bit  7 => INIT (UPS in fase di inizializzazione)
									//		------
									//		bit  8 => MASK_OK (semionda OK)
									//		bit  9 => MEAN_OK (media tensione di ingresso OK)
									//		bit 10 => SYNC_OK (sincronizzazione semionda OK)
									//		bit 11 => FAULT (generico)
									//		bit 12 => TEMP_MAX (superato livello critico di temperatura)
									//		bit 13 => TEMP_FAULT (Fault da temperatura: UPS si spegne)
									//		bit 14 => LOAD_MAX (soglia overload superata)
									//		bit 15 => LOAD_FAULT (Fault da carico: UPS si spegne)
									//		------
									//		bit 16 => INV_FAULT (Fault dell'inverter)
									//		bit 17 => IINV_MAX (eccessiva corrente sull'inverter)
									//		bit 18 => IINV_FAULT (Fault sulla corrente inverter: l'UPS si spegne)
									//		bit 19 => 50_60Hz (1=60Hz)
									//		bit 20 => EEP_FAULT (problemi con la EEPROM)
									//		bit 21 => VOUT_FAULT (tensione uscita troppo bassa)
									//		bit 22 => - non definito -
									//		bit 23 => - non definito -
									//		------
									//		bit 24 to 31 => - NON DEFINITI -

   unsigned short int  ShortStatus ;   // the LSB 2 bytes of the status
   unsigned char OutConfig  ; // stato uscite UPS
   float Vinput     ; // tensione di INPUT in 1/10 di Volt
   float Voutput    ; // tensione di OUTPUT in 1/10 di Volt
   float Temp       ; // temperatura in 1/10 di grado
   float InpFreq    ; // Frequenza di INPUT in 1/10 di Hz
   float OutFreq    ; // Frequenza di OUTPUT in 1/10 di Hz
   float OutCurrent ; // Corrente di Output in 1/10 di A
   unsigned char LoadPerc   ; // Percentuale di carico
   unsigned short int  LoadVA     ; // Carico in VA
   float ChgCurrent ; // corrente carica batterie

   float Vbatt     ; // tensione delle batterie in 1/10 di Volt
   unsigned char PercBatt  ; // percentuale di carica della batteria
   unsigned short int  RtimeEmpty; // minuti alla scarica della batteria
   unsigned char PercEmpty ; // percentuale alla scarica: 0%=scarica, 100%=carica
   unsigned char OutStatus ; // stato delle uscite

   unsigned char Year      ; //
   unsigned char Month     ; //
   unsigned char Day       ; //
   unsigned char WeekDay   ; // Giorno della settimana
   unsigned char Hour      ; // Ora
   unsigned char Min       ; // minuti
   unsigned char Sec       ; // secondi

	unsigned char BattLowPerc ; // percentuale carica batteria quando va in BLOW
   unsigned long Rtime     ; // numero di minuti di accensione dell'UPS
   unsigned long RtimeBatt ; // numero di secondi*2 in modalità batteria dall'accensione
   //------------------------------------------------------------------------
	unsigned int ShutdownDelay ;	// Shutdown delay in seconds
	unsigned int WakeUpDelay ;		// WakeUp delay in seconds
   } ENT_STRUCT ;



#endif	// ENTERPRISE_PROTOCOL

#endif