This is the mail archive of the ecos-discuss@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Getting battery status on ipaq



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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]