求解释
staticintbattery_calculate_capacity(structbattery*bat,intbattery_voltage){intvbat=battery_voltage;structcapacity*tables=bat->params->cap.tables;inthigh=bat->params->cap-1;intlow=0;intoffset=0;intcap=0;intv0=0;intc0=0;intc1=0;intv1=0;intdeviation=0;intcompensated=bat->pros.state==POWER_SUPPLY_STATUS_DISCHARGING?false:true;if(!tables){pr_err(“capacityconverttablesisnotpresent!\n”);return-EINVAL;}while(high>=low){mid=(high+low)/2;offset=(compensated?tables[mid].offset:0);if((vbat+offset)<tables[mid].min)high=mid-1;elseif((vbat+offset)>tables[mid].max)low=mid+1;elsebreak;}cap=tables[mid].capacity;if(0<mid)&&(mid<bat->params->cap.size-1){v0=tables[mid].min;c0=tables[mid].capacity;v1=tables[mid+1].min;c1=tables[mid+1].capacity;deviation=((c1-c0)*(vbat-v0)*10)/(v1-v0);cap=c0+(deviation/10+((deviation%10)>=5?1:0));if(cap<c0)cap=c0;elseif(cap>c1)cap=c1;}returncap;}
staticintbattery_calculate_capacity(structbattery*bat,intbattery_voltage){intvbat=battery_voltage;structcapacity*tables=bat->params->cap.tables;inthigh=bat->params->cap-1;intlow=0;intoffset=0;intcap=0;intv0=0;intc0=0;intc1=0;intv1=0;intdeviation=0;intcompensated=bat->pros.state==POWER_SUPPLY_STATUS_DISCHARGING?false:true;if(!tables){pr_err(“capacityconverttablesisnotpresent!\n”);return-EINVAL;}while(high>=low){mid=(high+low)/2;offset=(compensated?tables[mid].offset:0);if((vbat+offset)<tables[mid].min)high=mid-1;elseif((vbat+offset)>tables[mid].max)low=mid+1;elsebreak;}cap=tables[mid].capacity;if(0<mid)&&(mid<bat->params->cap.size-1){v0=tables[mid].min;c0=tables[mid].capacity;v1=tables[mid+1].min;c1=tables[mid+1].capacity;deviation=((c1-c0)*(vbat-v0)*10)/(v1-v0);cap=c0+(deviation/10+((deviation%10)>=5?1:0));if(cap<c0)cap=c0;elseif(cap>c1)cap=c1;}returncap;}