📄 bat4fsc.c
字号:
now_year=atoi(buffer);
outportb(0x70,0x08);
temp=inportb(0x71)&0xff;
sprintf(buffer,"%02X",temp);
now_month=atoi(buffer);
outportb(0x70,0x07);
temp=inportb(0x71)&0xff;
sprintf(buffer,"%02X",temp);
now_day=atoi(buffer);
per = atof(argv[1]);
maxcur = atof(argv[2]);
mincur = atof(argv[3]);
rs.h.ah=1;
rs.h.ch=0xfe;
rs.h.cl=0xfe;
int86(0x10,&rs,&rs);
FindSMBIOS();
if ((szmy=(szType*)malloc(sizeof(szType)))==NULL)
{
printf("Not enough memory!\n");
return 0x40;
}
if ((stpType16=(TYPE16*)malloc(sizeof(TYPE16)))==NULL)
{
printf("Not enough memory!\n");
return 0x40;
}
if ((buf=(BYTE *)malloc(SMBIOSLen*sizeof(BYTE)))==NULL)
{
printf("Not enough memory!\n");
return 0x40;
}
ReadRAM((DWORD)SMBIOSEntry,(BYTE *)buf,(WORD)SMBIOSLen);
if(GetStructureTable(szmy,buf,0x16)!=1)
{
printf("This SMBIOS does not support Type 16 !\r\n");
return 1;
}
GetType16(stpType16, buf ,szmy);
P1=inportb(0x62);
P1=inportb(0x66);
/*
while((inportb(0x66)&0x01)==0x01)
{
P1=inportb(0x66);
P1=P1&0xfe;
printf("Write 0x%02X to port 0x66...\r",P1);
outportb(0x66,0x28);
}
*/
/*0xAD disable keyboard (sets bit 4 of commmand byte) */
ClearKBDBuf();
printf("Wait for KBC not busy....\r\n");
if(SendKBCCmd(0xAD)!=0)
return 1;
printf("Keyboard disabled....\r\n");
clrscr();
textcolor(12);
cprintf("Battchrg for FSC w/ ITE Embedded Controller Ver: 3.044 Faintsnow@msn.com");
/*outportb(0x60,0xF3);*/
delay(10);
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x97);
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;
textcolor(9);
cprintf("Battery Type[Smart/Dumb] : ");
textcolor(10);
if(((*DATA_H)&0x01)==1)
{
dumb=1;
cprintf("Dumb battery\r\n");
}else
{
smart=1;
cprintf("Smart battery\r\n");
}
textcolor(9);
/* cprintf("Battery Model Name : "); */
for(i=0;i<0x0f;i++)
{
*DATA_L=0;*DATA_H=0;
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x12+i);
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;
j=(int)*DATA_L;
if(j==0x00){break;}
textcolor(10);
/* cprintf("%c",j); */
}
/* printf("\r\n"); */
textcolor(9);
cprintf("Battery Cell Serial number : ");
textcolor(10);
sprintf(buffer,"%s",stpType16->szString[stpType16->dbSerialNumber-1]);
cprintf("%s\r\n",buffer);
switch (buffer[5])
{
case '1':
textcolor(9);
cprintf("Battery Packer manufacturer : ");
textcolor(10);
cprintf("Simplo\r\n");
break;
case '2':
textcolor(9);
cprintf("Battery Packer manufacturer : ");
textcolor(10);
cprintf("Gallopwire\r\n");
break;
case '3':
textcolor(9);
cprintf("Battery Packer manufacturer : ");
textcolor(10);
cprintf("Foxlink\r\n");
break;
case '4':
textcolor(9);
cprintf("Battery Packer manufacturer : ");
textcolor(10);
cprintf("Dynapack\r\n");
break;
case '5':
textcolor(9);
cprintf("Battery Packer manufacturer : ");
textcolor(10);
cprintf("Celxpert\r\n");
break;
case '6':
textcolor(9);
cprintf("Battery Packer manufacturer : ");
textcolor(10);
cprintf("Sanyo\r\n");
break;
default:
break;
}
switch (buffer[6])
{
case '1':
textcolor(9);
cprintf("Battery Cell manufacturer : ");
textcolor(10);
cprintf("Sanyo\r\n");
break;
case '2':
textcolor(9);
cprintf("Battery Cell manufacturer : ");
textcolor(10);
cprintf("Sony\r\n");
break;
case '3':
textcolor(9);
cprintf("Battery Cell manufacturer : ");
textcolor(10);
cprintf("Panasonic\r\n");
break;
case '4':
textcolor(9);
cprintf("Battery Cell manufacturer : ");
textcolor(10);
cprintf("Samsung\r\n");
break;
case '5':
textcolor(9);
cprintf("Battery Cell manufacturer : ");
textcolor(10);
cprintf("LG\r\n");
break;
default:
break;
}
switch (buffer[12])
{
case 'A':
year=2006;
break;
case 'B':
year=2007;
break;
case 'C':
year=2008;
break;
case 'D':
year=2009;
break;
default:
break;
}
week=(buffer[13]-48)*10+buffer[14]-48;
delay(10);
*DATA_L=0;*DATA_H=0;
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0xa8);
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,0xa9);
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); */
Date=*DATA_H*pow(2,8)+*DATA_L;
pack_year =1980+(Date/0x200);
pack_month =(Date/0x20)&0x0f;
pack_day =Date&0x1f;
textcolor(9);
cprintf("Battery Packed Date : ");
textcolor(10);
cprintf("%i/%i/%i\r\n",pack_year,pack_month,pack_day);
E1=week*7;
E2=(now_year-year)*365+(now_month-1)*30+now_day;
textcolor(9);
cprintf("Battery Cell Date : ");
textcolor(10);
cprintf("Year:%i,Week:%i ",year,week);
if((E2-E1<=162)&&(E2-E1>0))
{
cycle=0;
textcolor(10);
cprintf("[%i days]\r\n",E2-E1);
}else if((E2-E1<=355)&&(E2-E1>162))
{
cycle=1;
textcolor(YELLOW);
cprintf("[%i days]\r\n",E2-E1);
}else if(E2-E1>355)
{
cycle=2;
textcolor(RED);
cprintf("[%i days]\r\n",E2-E1);
}else
printf("\r\n");
*DATA_L=0;*DATA_H=0;
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x02);
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,0x03);
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;
Designed_FCC=*DATA_H*pow(2,8)+*DATA_L;
textcolor(9);
cprintf("Battery Designed Capacity : ");
textcolor(10);
cprintf("%.0f ",Designed_FCC);
cprintf("mAH\r\n");
*DATA_L=0;*DATA_H=0;
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x04);
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,0x05);
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); */
BAT1_FCC=*DATA_H*pow(2,8)+*DATA_L;
textcolor(9);
cprintf("Battery Total Capacity : ");
if(Designed_FCC-BAT1_FCC>0)
{
PER=Designed_FCC-BAT1_FCC;
}else
{
PER=BAT1_FCC-Designed_FCC;
}
if(smart==1)
per=0.10;
else
per=0.15;
if(PER<=(Designed_FCC)*per)
{
ERROR+=0;
textcolor(10);
}else if(PER>(Designed_FCC)*per)
{
ERROR+=1;
textcolor(12);
}
cprintf("%.0f ",BAT1_FCC);
cprintf("mAH\r\n");
delay(10);
*DATA_L=0;*DATA_H=0;
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x36);
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,0x37);
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("RC DATA_H DATAT_L %X %X \n",DATA_H,DATA_L); */
j=(int)*DATA_L;
i=(int)*DATA_H;
if((j==0xff)&&(j==0xff))
{
BAT1_RC=0;
}else
{
BAT1_RC=*DATA_H*pow(2,8)+*DATA_L;
}
textcolor(9);
cprintf("Battery Remain Capacity :");
textcolor(10);
cprintf(" %.0f ",BAT1_RC);
cprintf("mAH\r\n");
textcolor(9);
cprintf("Current Capacity Rate : ");
textcolor(10);
cprintf("%.1f",(BAT1_RC/BAT1_FCC)*100);
cprintf("\%\r\n");
delay(10);
*DATA_L=0;*DATA_H=0;
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x34);
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,0x35);
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_CURRENT=*DATA_H*pow(2,8)+*DATA_L;
textcolor(9);
cprintf("Current Battery I/O Current : ");
textcolor(10);
/*
if((CHARGE_CURRENT<=maxcur)&&(CHARGE_CURRENT>=mincur))
{
textcolor(10);
ERROR+=0;
}else
{
textcolor(12);
ERROR+=1;
}
*/
cprintf("%.0f ",CHARGE_CURRENT);
cprintf("mA\r\n");
delay(10);
*DATA_L=0;*DATA_H=0;
RET=WriteEC(0x66,0xa2);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x62,0x38);
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,0x39);
if(RET==EC_TIMEOUT) return;
RET=WriteEC(0x66,0xa3);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -