- bugfix and extention in handle_charge_info
This commit is contained in:
parent
ce5ee3199d
commit
962a83ec04
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* $Id: capiconn.c,v 1.4 2001/01/25 14:45:41 calle Exp $
|
||||
* $Id: capiconn.c,v 1.5 2001/01/30 17:21:46 calle Exp $
|
||||
*
|
||||
* Copyright 2000 Carsten Paeth (calle@calle.in-berlin.de)
|
||||
* Copyright 2000 AVM GmbH Berlin (info@avm.de)
|
||||
|
@ -10,6 +10,9 @@
|
|||
* 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* $Log: capiconn.c,v $
|
||||
* Revision 1.5 2001/01/30 17:21:46 calle
|
||||
* - bugfix and extention in handle_charge_info
|
||||
*
|
||||
* Revision 1.4 2001/01/25 14:45:41 calle
|
||||
* - listen always (for info messages)
|
||||
* - show versions on startup
|
||||
|
@ -30,7 +33,7 @@
|
|||
#include <string.h>
|
||||
#include "capiconn.h"
|
||||
|
||||
static char *revision = "$Revision: 1.4 $";
|
||||
static char *revision = "$Revision: 1.5 $";
|
||||
|
||||
/* xxxxxxxxxxxxxxxxxx */
|
||||
static _cmsg cmdcmsg;
|
||||
|
@ -1049,34 +1052,45 @@ static int handle_charge_info(capi_connection *plcip, _cmsg *cmsg)
|
|||
|
||||
if ((cmsg->InfoNumber & 0x4000) && p[0] == 4) {
|
||||
unsigned char *p = &cmsg->InfoElement[1];
|
||||
charge |= ((unsigned)p[1]);
|
||||
charge |= ((unsigned)p[2]) << 8;
|
||||
charge |= ((unsigned)p[3]) << 16;
|
||||
charge |= ((unsigned)p[4]) << 24;
|
||||
charge |= ((unsigned)p[0]);
|
||||
charge |= ((unsigned)p[1]) << 8;
|
||||
charge |= ((unsigned)p[2]) << 16;
|
||||
charge |= ((unsigned)p[3]) << 24;
|
||||
if (cb->chargeinfo) {
|
||||
if (cmsg->InfoNumber & 0x1)
|
||||
(*cb->chargeinfo)(plcip, charge, 0);
|
||||
else (*cb->chargeinfo)(plcip, charge, 1);
|
||||
}
|
||||
return 1;
|
||||
} else if (p[0] > 10 && memcmp("*AOC2*12*", p+1, 9) == 0) {
|
||||
int i, len = p[0]-10;
|
||||
if (len > 8) len = 8;
|
||||
for (i=0; i < len; i++)
|
||||
charge = charge * 10 + (p[10+i] - '0');
|
||||
if (cb->chargeinfo)
|
||||
(*cb->chargeinfo)(plcip, charge, 0);
|
||||
return 1;
|
||||
} else if (p[0] > 7 && memcmp("FR.", p+1, 3) == 0) {
|
||||
int i, len = p[0]-3;
|
||||
for (i=0; p[3+i] != '.' && i < len; i++)
|
||||
charge = charge * 10 + (p[3+i] - '0');
|
||||
charge = charge * 10;
|
||||
if (p[3+i] == '.' && i+1 < len)
|
||||
charge += (p[3+i+1] - '0');
|
||||
if (cb->chargeinfo)
|
||||
(*cb->chargeinfo)(plcip, charge, 0);
|
||||
return 1;
|
||||
} else if (cmsg->InfoNumber == 0x28) {
|
||||
if (p[0] > 10 && memcmp("*AOC2*12*", p+1, 9) == 0) {
|
||||
int i, len = p[0]-10;
|
||||
if (len > 8) len = 8;
|
||||
for (i=0; i < len; i++)
|
||||
charge = charge * 10 + (p[10+i] - '0');
|
||||
if (cb->chargeinfo)
|
||||
(*cb->chargeinfo)(plcip, charge, 0);
|
||||
return 1;
|
||||
} else if (p[0] > 7 && memcmp("FR.", p+1, 3) == 0) {
|
||||
int i, len = p[0]-3;
|
||||
for (i=0; p[3+i] != '.' && i < len; i++)
|
||||
charge = charge * 10 + (p[3+i] - '0');
|
||||
charge = charge * 10;
|
||||
if (p[3+i] == '.' && i+1 < len)
|
||||
charge += (p[3+i+1] - '0');
|
||||
if (cb->chargeinfo)
|
||||
(*cb->chargeinfo)(plcip, charge, 0);
|
||||
return 1;
|
||||
}
|
||||
} else if (cmsg->InfoNumber == 0x602) {
|
||||
if (p[0] > 1 && p[1] == 0x01) {
|
||||
int i, len = p[0]-1;
|
||||
for (i=0; i < len; i++)
|
||||
charge = charge * 10 + (p[1+i] - '0');
|
||||
if (cb->chargeinfo)
|
||||
(*cb->chargeinfo)(plcip, charge, 0);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue