📄 bat4fsc.c
字号:
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x04);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa4);
if(RET==EC_TIMEOUT) return;
RET=ReadEC(DATA_H);
if(RET==EC_TIMEOUT) return;
/* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
CHARGE_VOLTAGE=*DATA_H*pow(2,8)+*DATA_L;
textcolor(9);
cprintf("Current Battery I/O Voltage : ",CHARGE_VOLTAGE);
textcolor(10);
cprintf("%.0f ",CHARGE_VOLTAGE);
cprintf("mV \r\n");
delay(10);
*DATA_L=0;*DATA_H=0;
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x32);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa3);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x04);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa4);
if(RET==EC_TIMEOUT) return;
RET=ReadEC(DATA_L);
if(RET==EC_TIMEOUT) return;
delay(10);
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x33);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa3);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x04);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa4);
if(RET==EC_TIMEOUT) return;
RET=ReadEC(DATA_H);
if(RET==EC_TIMEOUT) return;
/* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
CHARGE_State=*DATA_H*pow(2,8)+*DATA_L;
textcolor(9);
cprintf("Current Battery Charge State : ",CHARGE_State);
textcolor(10);
cprintf("0%.0f ",CHARGE_State);
printf("[");
if(CHARGE_State==1){textcolor(12+128);cprintf("%c",31);}
else if(CHARGE_State==2){textcolor(10+128);cprintf("%c",30);}
else if(CHARGE_State==0){textcolor(07);cprintf("Standing-By");}
printf("]\r\n");
textcolor(WHITE);
delay(10);
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0xaf);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa3);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x04);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa4);
if(RET==EC_TIMEOUT) return;
RET=ReadEC(DATA_H);
if(RET==EC_TIMEOUT) return;
/* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
h=*DATA_H;
delay(10);
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0xae);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa3);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x04);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa4);
if(RET==EC_TIMEOUT) return;
RET=ReadEC(DATA_H);
if(RET==EC_TIMEOUT) return;
/* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
m=*DATA_H;
delay(10);
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0xad);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa3);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x04);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa4);
if(RET==EC_TIMEOUT) return;
RET=ReadEC(DATA_H);
if(RET==EC_TIMEOUT) return;
/* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
s=*DATA_H;
textcolor(9);
cprintf("Battery Total Charge Time : ");
textcolor(10);
cprintf("%02i:%02i:%02i\r\n",h,m,s);
delay(10);
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0xa6);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa3);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x04);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa4);
if(RET==EC_TIMEOUT) return;
RET=ReadEC(DATA_L);
if(RET==EC_TIMEOUT) return;
/* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
C1=*DATA_L;
delay(10);
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0xa7);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa3);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x04);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa4);
if(RET==EC_TIMEOUT) return;
RET=ReadEC(DATA_H);
if(RET==EC_TIMEOUT) return;
/* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
C2=*DATA_H;
textcolor(9);
cprintf("Battery Cycle Count Number : ");
textcolor(10);
cprintf("%i\r\n",C2*0x100+C1);
delay(10);
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x3c);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa3);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x04);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa4);
if(RET==EC_TIMEOUT) return;
RET=ReadEC(DATA_H);
if(RET==EC_TIMEOUT) return;
/* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
s=*DATA_H;
textcolor(9);
cprintf("System Power Source : ");
textcolor(10);
switch(s)
{
case 5:
cprintf("AC On-Line with Battery\r\n");
break;
case 4:
cprintf("AC Off-Line with Battery\r\n");
break;
case 1:
cprintf("AC On-Line without Battery\r\n");
break;
default:
cprintf("Unknow mode\r\n");
break;
}
delay(10);
*DATA_L=0;*DATA_H=0;
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0xc8);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa3);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x06);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa4);
if(RET==EC_TIMEOUT) return;
/*RET=ReadEC(DATA_L);*/
RET=ReadEC(DATA_L);
if(RET==EC_TIMEOUT) return;
LCD_Brightness_AC=*DATA_L;
delay(10);
*DATA_L=0;*DATA_H=0;
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0xc9);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa3);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x06);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa4);
if(RET==EC_TIMEOUT) return;
/*RET=ReadEC(DATA_L);*/
RET=ReadEC(DATA_L);
if(RET==EC_TIMEOUT) return;
LCD_Brightness_DC=*DATA_L;
textcolor(9);
cprintf("CURRENT Brightness Level (AC): ");
textcolor(10);
cprintf("%02X\r\n",(int)LCD_Brightness_AC&0x0f);
textcolor(9);
cprintf("CURRENT Brightness Level (DC): ");
textcolor(10);
cprintf("%02X\r\n",(int)LCD_Brightness_DC&0x0f);
delay(10);
*DATA_L=0;*DATA_H=0;
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x3e);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa3);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x04);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa4);
if(RET==EC_TIMEOUT) return;
/*RET=ReadEC(DATA_L);*/
RET=ReadEC(DATA_L);
if(RET==EC_TIMEOUT) return;
SM_TEMP=*DATA_L;
textcolor(9);
cprintf("CURRENT CPU TEMPERATURE : ",SM_TEMP);
textcolor(10);
cprintf("%.1f%cC\r\n",SM_TEMP,248);
delay(10);
*DATA_L=0;*DATA_H=0;
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x3f);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa3);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x04);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa4);
if(RET==EC_TIMEOUT) return;
/*RET=ReadEC(DATA_L);*/
RET=ReadEC(DATA_L);
if(RET==EC_TIMEOUT) return;
CPU_TEMP=*DATA_L;
textcolor(9);
cprintf("CURRENT SYSTEM TEMPERATURE : ",CPU_TEMP);
textcolor(10);
cprintf("%.1f%cC\r\n",CPU_TEMP,248);
delay(10);
*DATA_L=0;*DATA_H=0;
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa3);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x04);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa4);
if(RET==EC_TIMEOUT) return;
RET=ReadEC(DATA_L);
if(RET==EC_TIMEOUT) return;
delay(10);
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0xa3);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa3);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x04);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa4);
if(RET==EC_TIMEOUT) return;
RET=ReadEC(DATA_H);
if(RET==EC_TIMEOUT) return;
/* printf("FCC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
Bat_Temp=(*DATA_H*pow(2,8)+*DATA_L)*0.1-273;
textcolor(9);
cprintf("Current Battery TEMPERATURE : ",Bat_Temp);
textcolor(10);
cprintf("%.1f%cC\r\n",Bat_Temp,248);
outportb(0x60,0x00);
/*0xAE enable keyboard (resets bit 4 of command byte)*/
if(SendKBCCmd(0xAE)!=0)
return 1;
if(cycle==0)
{
textcolor(10);
cprintf("Battery Cell Date is normal.\r\n");
}else if(cycle==1)
{
textcolor(RED);
cprintf("Warning : ");
textcolor(YELLOW+128);
cprintf("Cell Date is nearly out of date,please put label on t/r card !\r\n");
sound(800);
getch();
getch();
nosound();
}else if(cycle==2)
{
textcolor(RED+128);
cprintf("Battery Cell is out of date!\r\n");
while(1);
getch();
}
if(ERROR!=0)
{
textcolor(12);
cprintf("Warning : Battery FCC is ullage , return %i",ERROR);
return ERROR;
}else
printf("Return dos error code %i ",ERROR);
return ERROR;
}
/*
*Title: WaitECOBFReady
*Input: None
*Output:
* 1 Time out
* 0 OK
*Function: Wait EC OBF(output buffer full) is full.
*/
/* int WaitECOBFReady() /* Voss(.01)b */ */
int WaitECOBFReady (void) /* Voss(.01)m */
{
int ret = EC_TIMEOUT;
WORD num;
register BYTE now, last;
now = last = 0;
asm pushf
asm cli
num=EC_TIMER;
while(num)
{
if((inportb(ec_sc)&1) == 1) /* When bit0 = 1, the OBF is full. */
{
ret = EC_OK;
break;
}
now = inportb(PPI); /* port 61H is 8255(PPI) */
now = now & 0x10; /* every 15us, the PB4 changes once. */
if (now!=last)
{
num--;
last = now;
}
}
asm popf
return ret;
}
/*
*Title: WaitECIBFReady
*Input: None
*Output:
* 1 Time out
* 0 OK
*Function: Wait EC IBF(input buffer full) is empty.
*/
/* int WaitECIBFReady() /* Voss(.01)b */ */
int WaitECIBFReady (void) /* Voss(.01)m */
{
int ret = EC_TIMEOUT;
WORD num;
register BYTE now, last;
now = last = 0;
asm pushf
asm cli
num=EC_TIMER;
while(num)
{
if((inportb(ec_sc)&2) == 0) /* When bit1 = 1, the IBF is empty */
{
ret = EC_OK;
break;
}
now = inportb(PPI);
now = now & 0x10;
/* if (num!=last) /* Voss(.01)b */ */
if (now!=last) /* Voss(.01)m */
{
num--;
last = now;
}
}
asm popf
return ret;
}
/*
*Title: WriteEC
*Input: ECPORT port, BYTE cmd
*Output:
2 Parameter error(Only is 64H/60H)
1 Time out
* 0 OK
*Function: Send command to EC
*/
int WriteEC(ECIOPORT port, BYTE cmd)
{
int ret = EC_TIMEOUT;
asm pushf
asm cli
if((port==ec_sc)||(port==ec_data))
{
ret = WaitECIBFReady();
if (ret==EC_OK)
outportb(port, cmd);
}
else ret = EC_INVALID_PORT; /* Voss(.01):: If return this value, In caller side no handler to cover this... */
asm popf
return ret;
}
/*
*Title: ReadEC
*Input: BYTE * const data
*Output:
* 1 Time out
* 0 OK
*Function: Read data from EC
*/
int ReadEC(BYTE * const data)
{
WORD ret = EC_TIMEOUT;
asm pushf
asm cli
ret = WaitECOBFReady();
if (ret==EC_OK)
*data = inportb(ec_data);
asm popf
return ret;
}
/* Voss(.01)++ */
/* ============================================== */
/* clear system keyboard buffer by reset KBD queue pointer */
/* ============================================== */
void ClearKBDBuf (void)
{
asm push ds
asm mov ax,0000h
asm mov ds,ax
asm mov ax,ds:[041Ah]
asm mov ds:[041Ch], ax
asm pop ds
}
/* Voss(.01)-- */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -