This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
Getting battery status on ipaq
- To: ecos-discuss at sourceware dot cygnus dot com
- Subject: [ECOS] Getting battery status on ipaq
- From: Cristiano Ligieri Pereira <cpereira at ics dot uci dot edu>
- Date: Wed, 3 Oct 2001 15:43:13 -0700 (PDT)
Hi folks,
I'm attaching my code to get battery status from amtel controller in the
compaq ipaq. The code seems to work fine when there is no
cyg_thread_delay() called in thread code. When there is a function call to
cyg_thread_delay() it only works once and I don't get any answer from the
controller and the system seems to freeze after that.
The code seems correct to me. Can anyone guess what's the problem if I
call cyg_thread_delay()?
-----------------------------------------------------------------------------
static unsigned char *data;
static volatile cyg_uint8 received = 0;
static void batt_status_ack(atmel_pkt *pkt)
{
int i;
data = &pkt->data[1];
received = 1;
}
cyg_uint8 get_batt_status(batt_device_t *batt_dev)
{
static int count;
atmel_register(ATMEL_CMD_BATTERY, batt_status_ack);
atmel_interrupt_mode(1);
atmel_send(ATMEL_CMD_BATTERY, NULL, 0);
count = 0;
while ( !received && count < 100 ) {
count++;
hal_delay_us(10);
}
if (received) {
batt_dev->ac_status = (enum ipaq_battery_ac_status)data[0];
batt_dev->batt1_chemistry = (enum ipaq_battery_chemistry)data[1];
batt_dev->batt1_voltage = ((short)((data[3] << 8) | data[2]));
batt_dev->batt1_status = (enum ipaq_battery_status)data[4];
batt_dev->batt2_chemistry = 0;
batt_dev->batt2_voltage = 0;
batt_dev->batt2_status = 0;
received = 0;
return 1;
return 1;
}
else {
return 0;
}
}
-----------------------------------------------------------------------------
thanks,
Cristiano.
------------------------------------------------------------
Cristiano Ligieri Pereira - http://www.ics.uci.edu/~cpereira