diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2017-10-09 18:53:29 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2017-10-09 18:53:29 +0100 |
commit | 4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch) | |
tree | ba5f07bf3f9d22d82e54a462313f5d244036c768 /sys-power/acpitool |
reinit the tree, so we can have metadata
Diffstat (limited to 'sys-power/acpitool')
-rw-r--r-- | sys-power/acpitool/Manifest | 9 | ||||
-rw-r--r-- | sys-power/acpitool/acpitool-0.5.1-r1.ebuild | 24 | ||||
-rw-r--r-- | sys-power/acpitool/files/acpitool-0.5.1-ac_adapter.patch | 73 | ||||
-rw-r--r-- | sys-power/acpitool/files/acpitool-0.5.1-battery.patch | 484 | ||||
-rw-r--r-- | sys-power/acpitool/files/acpitool-0.5.1-kernel3.patch | 14 | ||||
-rw-r--r-- | sys-power/acpitool/files/acpitool-0.5.1-wakeup.patch | 70 | ||||
-rw-r--r-- | sys-power/acpitool/metadata.xml | 5 |
7 files changed, 679 insertions, 0 deletions
diff --git a/sys-power/acpitool/Manifest b/sys-power/acpitool/Manifest new file mode 100644 index 000000000000..ba38f99e0153 --- /dev/null +++ b/sys-power/acpitool/Manifest @@ -0,0 +1,9 @@ +AUX acpitool-0.5.1-ac_adapter.patch 2259 SHA256 8761325c90dd4d10faeefd662f419ad5c4bc85aefc408506800596b49abef680 SHA512 b00dc0785a4773cb917b35287b92d95d480486dfe51ebf73269b6d95e33201200b88c8a628c56bbef694ac0446633042f486d70b79525621782a26f08b3e901f WHIRLPOOL b35f3f9dde2d238f8ff35d71420d8cd6da175d0fb732071ed73635c30e866b606216be1556640e605a8101f95eaabd58823a3de1dd847ac086e443ecf121ef6b +AUX acpitool-0.5.1-battery.patch 17336 SHA256 37190bbc61732809aea917c4568311b681b03808a7340da35df20690d1bbc5cb SHA512 3fcfc91947cfd4e37e26524044673886c2ca999f8626ab141683b51f7d56e2e3f97465cca99277a5b4d6afdf195477ae56560215d5bfa958e585ae7ab634ee2f WHIRLPOOL f87b829fb62c2bd8a52ce9fbb1b03d0963609ff1352d741a0985052a5dc5bd88d922f8e56bd86be3553bd956b4658fe98323c9c3c65aef1faecdb49c6527db63 +AUX acpitool-0.5.1-kernel3.patch 250 SHA256 fd9e112dfdf9ea4390d6da6df841542b98434a3d681f4efe5092d33a97826037 SHA512 64b53ac77dd61a6ab88c6d933840382e62cc650fa7cffd58ea21b76ea91766673242c5c85114486c19d86d680d90cbdd0009bf4c22543cfba8fd6744f2936cbd WHIRLPOOL 63ef13b1b3a237ff8d94cc7c36dd70e8f9f3a1ed7c08bc791de79b66c1c13a7db106eecacef7e8e14a299cc896f5faeca1ffe2b4c41205ae716a8537a895797d +AUX acpitool-0.5.1-wakeup.patch 2570 SHA256 e9d30451fe203c0392a8e4efac349aed83cff8f5cfc373fe5aaf68355b9f3c48 SHA512 792c1356b1b67853383b4c79cc234cd352b1ac88911960f4a48ecdac130f8d23478bc36506613420912539a40bcdd4f92f65ac594b6c7a9c59bd69243a619f18 WHIRLPOOL 6d883f2db11c5cf1b33813db0c61d49d71c4a65777887ce6ee3f4d1617de7955f97c26d87c2304bffd39ff289e3a5d8feddec4cc2852096925a5c6fcd15d6f73 +DIST acpitool-0.5.1.tar.bz2 109584 SHA256 004fb6cd43102918b6302cf537a2db7ceadda04aef2e0906ddf230f820dad34f SHA512 3e8684525b3dbe165b30507943beb975881a374ac3171fcfdf88098721fa3f751bfc161c3ac84180df1ae455673e0c0bc24fd06f0786911f15502effeeaab86b WHIRLPOOL bad79e2513d9c9c8225e6962e172e57eefe9bff35fc40ed2419e5c06e8ce8479363159c3b4c0f11ab671f2b4464afc855c67fee799ee1c70d669009f95c25b83 +EBUILD acpitool-0.5.1-r1.ebuild 585 SHA256 06a127ad344aed5be593aca30c5b8975ce1c8c1eadc27eb80945670563c75cce SHA512 4ec5eae9b5c99ea222879e8eb987da70d1d2211ee11555bbf756c838468ef4836c79e1bcf6698343dab868ef8bd7d941f6d8b27684d0db7a29e69a8acd921af7 WHIRLPOOL b4f0c2b520b1f245add1f36c376f7d3d8017a1bc11f942821670346f132837dd42310d986e429e832024a27dc6f5ca4cba4ee262b1e19db90704242ddd56e59d +MISC ChangeLog 2686 SHA256 5fa275d166aef4ad517c97056ecdc169afbc98d5798da095d743418b34af905a SHA512 067dfb8042601bf2cdf036d3e7834d647a85ff88f2b54eb96efe11beebaad707babd3583b08e5ecc7ea90fdf340c2fc24ff0a87b4bda648697694e3b1219c822 WHIRLPOOL 66508ee5ec491a8d93b5ddeef840b2111c01f63613fd96b0b5ab709b6f89c190b4efcf58489f88d4d9a0ba86e358799a73a5aa8f99527ff18ae0ba7d9c7467a9 +MISC ChangeLog-2015 5158 SHA256 a5fd2159adc572a8d2e2204cdd55f1940002ca912fd816ec4ad97e169c3ccc8d SHA512 0c3dbf239a0babb95b3029cb597bbe1de03c63bbdc14d66822f9432508e31ef2f194f12dcb6f9ddf7c10934096786f19ed35737fdbf5c705f856980ed2c38891 WHIRLPOOL 5a0ff6a1a21dd9d8ad47d502c2851ed93a4a1c9320d74f71b9f4c9ab85b73ecad944bcc60a155e2b379cdac1d8993def26dab195db9a64e4ab044e8a996e2593 +MISC metadata.xml 166 SHA256 2caff447f5bd2701d8456ada5cc633c41ef4373fa4bfeabeb73599d40bcc941b SHA512 a56648c974a1d14dd4c18237532773c72057a13ab90c58b5da04f185e3c12a8bd8d5c21fb06053507f31766291a82dc7d87b34cd65fd94cfe2af7295c813ef84 WHIRLPOOL 1ff70497eca6531f0e0614c72a19f4b8e5ff486a58d369f4f0b36308d1d6b01168f9da887740e3b9f536236be251d3fe05f904d27a9233a7cf613416ba882968 diff --git a/sys-power/acpitool/acpitool-0.5.1-r1.ebuild b/sys-power/acpitool/acpitool-0.5.1-r1.ebuild new file mode 100644 index 000000000000..825fc55d48e3 --- /dev/null +++ b/sys-power/acpitool/acpitool-0.5.1-r1.ebuild @@ -0,0 +1,24 @@ +# Copyright 1999-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=5 +inherit eutils + +DESCRIPTION="A small command line application, intended to be a replacement for the apm tool" +HOMEPAGE="http://packages.debian.org/sid/acpitool" +SRC_URI="mirror://gentoo/${P}.tar.bz2" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="amd64 x86" +IUSE="" + +DOCS="AUTHORS ChangeLog README TODO" + +src_prepare() { + epatch \ + "${FILESDIR}"/${P}-ac_adapter.patch \ + "${FILESDIR}"/${P}-battery.patch \ + "${FILESDIR}"/${P}-kernel3.patch \ + "${FILESDIR}"/${P}-wakeup.patch +} diff --git a/sys-power/acpitool/files/acpitool-0.5.1-ac_adapter.patch b/sys-power/acpitool/files/acpitool-0.5.1-ac_adapter.patch new file mode 100644 index 000000000000..070fdf9de1b7 --- /dev/null +++ b/sys-power/acpitool/files/acpitool-0.5.1-ac_adapter.patch @@ -0,0 +1,73 @@ +Author: Michael Meskes <meskes@debian.org> +Description: Fix reading of ac_adapter information. + +--- src/ac_adapter.cpp ++++ src/ac_adapter.cpp +@@ -149,7 +149,7 @@ + int Do_AC_Info_Sys() + { + ifstream file_in; +- char filename[2][65], str[100], temp[100]; ++ char filename[2][65], str[100], temp[100], attr[100]; + int ac_count = 0, start = 0, findex = 0; + DIR *ac_dir; + char *name, *dirname; +@@ -206,31 +206,40 @@ + + if(ac_count>0) + { +- for(int i=0; i<ac_count; i++) /* I don't expect to find > 1, but you never know */ ++ for(int i=0, t=0; i<ac_count; i++) /* I don't expect to find > 1, but you never know */ + { + FILE *power_fp = fopen(filename[i], "r"); + if(power_fp) + { +- for(int t=0; t<5; t++) +- fgets(str, 100, power_fp); /* just skip the first 5 lines */ +- +- memset(str, '\0', 100); +- fgets(str, 100, power_fp); ++ // see linux-2.6/drivers/power/power_supply_sysfs.c ++ // there can be different number of lines, so read up to 40 lines ++ for(; t<40; t++) ++ { ++ memset(str, '\0', 100); ++ fgets(str, 100, power_fp); + +- if (strlen(str)!=0) +- { +- memset(temp, '\0', 100); +- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); ++ if (strlen(str)!=0) ++ { ++ memset(temp, '\0', 100); ++ memset(attr, '\0', 100); ++ sscanf(str, "%[^=]s %*s %[^\n]", attr); ++ sscanf(str, "%*[^=] %*c %s %[^\n]",temp); + +- /* keep this for debugging */ +- /* printf(" from Do_AC_SYS: temp = %s \n", temp);*/ +- +- if(strncmp(temp,"1",1)==0) +- printf(" AC adapter : online \n"); +- else +- printf(" AC adapter : off-line \n"); ++ /* keep this for debugging */ ++ /* printf(" from Do_AC_SYS: temp = %s \n", temp);*/ ++ ++ if (strcmp(attr, "POWER_SUPPLY_ONLINE") == 0) ++ { ++ if(strncmp(temp,"1",1)==0) ++ printf(" AC adapter : online \n"); ++ else ++ printf(" AC adapter : off-line \n"); ++ ++ break; ++ } ++ } + } +- else ++ if (t == 40) + printf(" AC adapter : <info not available> \n"); + } + else diff --git a/sys-power/acpitool/files/acpitool-0.5.1-battery.patch b/sys-power/acpitool/files/acpitool-0.5.1-battery.patch new file mode 100644 index 000000000000..76428ca7d970 --- /dev/null +++ b/sys-power/acpitool/files/acpitool-0.5.1-battery.patch @@ -0,0 +1,484 @@ +Author: Evgeni Golov <evgeni@debian.org>, Michael Meskes <meskes@debian.org> +Description: Fix reading of battery information. + +--- src/acpitool.h ++++ src/acpitool.h +@@ -39,6 +39,9 @@ + char Serial[13]; + char Bat_Type[13]; + char Voltage_Now[13]; ++ char Charge_Now[13]; ++ char Charge_Full[13]; ++ char Charge_Full_Design[13]; + }; + + +--- src/battery.cpp ++++ src/battery.cpp +@@ -107,6 +107,9 @@ + memset(Batt_Info[i]->Serial, '\0', 13); + memset(Batt_Info[i]->Bat_Type, '\0', 13); + memset(Batt_Info[i]->Voltage_Now, '\0', 13); ++ memset(Batt_Info[i]->Charge_Now, '\0', 13); ++ memset(Batt_Info[i]->Charge_Full, '\0', 13); ++ memset(Batt_Info[i]->Charge_Full_Design, '\0', 13); + + // initialize all struct members to blanks --> avoid rubbish in output // + +@@ -139,7 +142,12 @@ + case 1 : + { + Present_Batteries++; +- Remaining_Percentage = float(atoi(Batt_Info[i]->Remaining_Cap)) / float(atoi(Batt_Info[i]->LastFull_Cap)) * 100.0; ++ ++ if (strcmp(Batt_Info[i]->Charge_Now,"")!=0 && ++ strcmp(Batt_Info[i]->Charge_Now,"unknown")!=0) ++ Remaining_Percentage = float(atoi(Batt_Info[i]->Charge_Now)) / float(atoi(Batt_Info[i]->Charge_Full)) * 100.0; ++ else ++ Remaining_Percentage = float(atoi(Batt_Info[i]->Remaining_Cap)) / float(atoi(Batt_Info[i]->LastFull_Cap)) * 100.0; + + /* from Alan Pope : some broken Dell batteries report a remaining capacity bigger + than their last full capacity or their design capacity. This led acpitool to report +@@ -153,19 +161,24 @@ + else + Precision = 4; + +- if( strncmp(Batt_Info[i]->Charging_State,"char",4)==0 ) ++ if(strncasecmp(Batt_Info[i]->Charging_State,"char",4)==0) + { + Is_Charging = 1; + } + else + { +- if(strncmp(Batt_Info[i]->Charging_State,"disch",5)==0) Is_Discharging = 1; ++ if(strncasecmp(Batt_Info[i]->Charging_State,"disch",5)==0) Is_Discharging = 1; + } + + if(Show_Time) // calculate remaining or charging time only if present battery rate != 0 // + { +- if(Is_Charging) +- Remaining_Time = (float(atoi(Batt_Info[i]->LastFull_Cap)) - float(atoi(Batt_Info[i]->Remaining_Cap))) / float(atoi(Batt_Info[i]->Present_Rate)); ++ if(Is_Charging) { ++ if (strcmp(Batt_Info[i]->Charge_Now,"")!=0 && ++ strcmp(Batt_Info[i]->Charge_Now,"unknown")!=0) ++ Remaining_Time = (float(atoi(Batt_Info[i]->Charge_Full)) - float(atoi(Batt_Info[i]->Charge_Now))) / float(atoi(Batt_Info[i]->Present_Rate)); ++ else ++ Remaining_Time = (float(atoi(Batt_Info[i]->LastFull_Cap)) - float(atoi(Batt_Info[i]->Remaining_Cap))) / float(atoi(Batt_Info[i]->Present_Rate)); ++ } + else + Remaining_Time = float(atoi(Batt_Info[i]->Remaining_Cap)) / float(atoi(Batt_Info[i]->Present_Rate)); + // this represents hours // +@@ -180,9 +193,11 @@ + Minutes = Time_In_Seconds / 60; + Time_In_Seconds = Time_In_Seconds - (Minutes * 60); + } +- ++ + if(atoi(Batt_Info[i]->Design_Cap) > 0) + Battery_Left_Percent = float(atoi(Batt_Info[i]->LastFull_Cap)) / float(atoi(Batt_Info[i]->Design_Cap)) * 100.0; ++ else if(atoi(Batt_Info[i]->Charge_Full_Design) > 0) ++ Battery_Left_Percent = float(atoi(Batt_Info[i]->Charge_Full)) / float(atoi(Batt_Info[i]->Charge_Full_Design)) * 100.0; + else + Battery_Left_Percent = -1.0; + +@@ -207,8 +222,15 @@ + <<setfill('0')<<setw(2)<<Time_In_Seconds; + cout<<endl; + +- cout<<" Design capacity : "<<Batt_Info[i]->Design_Cap<<endl; +- cout<<" Last full capacity : "<<Batt_Info[i]->LastFull_Cap; ++ if(atoi(Batt_Info[i]->Design_Cap) > 0) ++ cout<<" Design capacity : "<<Batt_Info[i]->Design_Cap<<endl; ++ else if(atoi(Batt_Info[i]->Charge_Full_Design) > 0) ++ cout<<" Design capacity : "<<Batt_Info[i]->Charge_Full_Design<<endl; ++ ++ if(atoi(Batt_Info[i]->LastFull_Cap) > 0) ++ cout<<" Last full capacity : "<<Batt_Info[i]->LastFull_Cap; ++ else if(atoi(Batt_Info[i]->Charge_Full) > 0) ++ cout<<" Last full capacity : "<<Batt_Info[i]->Charge_Full; + + if(Battery_Left_Percent<100.0) + { +@@ -327,7 +349,7 @@ + + + +-int Get_Battery_Info_from_Proc(const int bat_nr, Battery_Info *bat_info, int verbose) ++int Get_Battery_Info_from_Proc(const int bat_nr, Battery_Info *batt_info, int verbose) + { + ifstream file_in; + char filename[4][65], str[100], temp[100]; +@@ -378,7 +400,7 @@ + { + if(!verbose) + { +- bat_info->Battery_Present = 2; // 2 represents error value // ++ batt_info->Battery_Present = 2; // 2 represents error value // + return 0; + } + else +@@ -422,24 +444,24 @@ + file_in.getline(str, 100); + strncpy(temp, str+25, 4); + if(strncmp(temp,"yes",3)==0) +- bat_info->Battery_Present = 1; //yes, we have a battery // ++ batt_info->Battery_Present = 1; //yes, we have a battery // + else + { +- bat_info->Battery_Present = 0; ++ batt_info->Battery_Present = 0; + return 0; //bail out if battery is not present // + } + + // then get the design capacity // + file_in.getline(str, 100); +- strncpy(bat_info->Design_Cap, str+25, 9); ++ strncpy(batt_info->Design_Cap, str+25, 9); + + // then get the last full capacity // + file_in.getline(str, 100); +- strncpy(bat_info->LastFull_Cap, str+25, 9); ++ strncpy(batt_info->LastFull_Cap, str+25, 9); + +- if (strncmp(bat_info->LastFull_Cap,"unknown",7)==0) ++ if (strncmp(batt_info->LastFull_Cap,"unknown",7)==0) + { +- bat_info->Battery_Present = 0; ++ batt_info->Battery_Present = 0; + return 0; //bail out if battery is not present // + } + /* some Dell laptops seem to report a 2nd battery as being present, while it is NOT, but then report the +@@ -449,21 +471,21 @@ + + // then get the technology // + file_in.getline(str, 100); +- strncpy(bat_info->Technology, str+25, 12); ++ strncpy(batt_info->Technology, str+25, 12); + + // then get the model number // + for(int t=0; t<5; t++) + file_in.getline(str, 100); //skip 5 lines // + file_in.getline(str, 100); +- strncpy(bat_info->Model, str+25, 12); ++ strncpy(batt_info->Model, str+25, 12); + + // then get the serial number // + file_in.getline(str, 100); +- strncpy(bat_info->Serial, str+25, 12); ++ strncpy(batt_info->Serial, str+25, 12); + + // then get the battery type // + file_in.getline(str, 100); +- strncpy(bat_info->Bat_Type, str+25, 12); ++ strncpy(batt_info->Bat_Type, str+25, 12); + + file_in.close(); + +@@ -480,17 +502,17 @@ + // then get the charging state // + file_in.getline(str, 100); file_in.getline(str, 100); // skip first 2 lines // + file_in.getline(str, 100); +- strncpy(bat_info->Charging_State, str+25, 12); +- if (strncmp(bat_info->Charging_State,"unknown",7)==0) strncpy(bat_info->Charging_State, "charged",7); ++ strncpy(batt_info->Charging_State, str+25, 12); ++ if (strncmp(batt_info->Charging_State,"unknown",7)==0) strncpy(batt_info->Charging_State, "charged",7); + /* on older kernels, like 2.4.22, the charging state is reported as "unknown", whereas in recent kernels + this was changed to "charged". */ + + // then get the charging rate // + file_in.getline(str, 100); +- strncpy(bat_info->Present_Rate, str+25, 9); +- if (strncmp(bat_info->Charging_State,"charged",7)==0) ++ strncpy(batt_info->Present_Rate, str+25, 9); ++ if (strncmp(batt_info->Charging_State,"charged",7)==0) + { +- if (strncmp(bat_info->Present_Rate, "unknown",7)==0) strncpy(bat_info->Present_Rate, "0 ",7); ++ if (strncmp(batt_info->Present_Rate, "unknown",7)==0) strncpy(batt_info->Present_Rate, "0 ",7); + } + /* some batteries report the present rate as "unknown", even when they report the battery as being charged. + If the battery is charged, the rate should be 0 */ +@@ -498,12 +520,12 @@ + + // then get the remaining capacity // + file_in.getline(str, 100); +- strncpy(bat_info->Remaining_Cap, str+25, 9); ++ strncpy(batt_info->Remaining_Cap, str+25, 9); + + file_in.close(); + } + else // battery dir is readable but empty : only . and .. at most // +- bat_info->Battery_Present = 3; ++ batt_info->Battery_Present = 3; + + return 0; + } +@@ -513,8 +535,8 @@ + int Get_Battery_Info_from_Sys(const int bat_nr, Battery_Info *batt_info, int verbose) + { + ifstream file_in; +- char filename[6][65], str[100], temp[100]; +- int bat_count = 0, start = 0, findex = 0; ++ char filename[6][65], str[100], temp[100], attr[100]; ++ int bat_count = 0, start = 0, findex = 0, value = 0; + DIR *battery_dir; + char *name, *dirname; + +@@ -613,165 +635,104 @@ + return -1; + } + +- memset(str, '\0', 100); +- for(int t=0; t<5; t++) +- fgets(str, 100, power_fp); /* skip first 5 lines */ +- +- /* get battery status (full, charging, ...) */ +- memset(str, '\0', 100); +- fgets(str, 100, power_fp); +- if (strlen(str)>0) +- { +- memset(temp, '\0', 100); +- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); +- strncpy(batt_info->Charging_State, temp, 12); +- } +- +- +- /* get battery presence (0 or 1) */ +- memset(str, '\0', 100); +- fgets(str, 100, power_fp); +- if (strlen(str)>0) +- { +- memset(temp, '\0', 100); +- strncpy(temp, str+21, 1); +- if(strncmp(temp,"1",1)==0) +- batt_info->Battery_Present = 1; /* yes, we have a battery */ +- else +- { +- batt_info->Battery_Present = 0; +- printf(" Battery is not present, bailing out. \n"); +- return 0; /* bail out if battery is not present */ +- } +- } +- +- +- /* get technology */ +- memset(str, '\0', 100); +- fgets(str, 100, power_fp); +- if (strlen(str)>0) +- { +- memset(temp, '\0', 100); +- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); +- strncpy(batt_info->Technology, temp, 12); +- } +- else +- strncpy(batt_info->Technology, "unknown", 7); +- +- +- +- //printf(" \n bat_info_tech = %s \n\n ", batt_info->Technology); +- +- +- +- fgets(str, 100, power_fp); /* skip 1 line */ +- +- +- /* get voltage_now */ +- memset(str, '\0', 100); +- fgets(str, 100, power_fp); +- if (strlen(str)>0) +- { +- memset(temp, '\0', 100); +- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); +- strncpy(batt_info->Voltage_Now, temp, 12); +- } +- else +- strncpy(batt_info->Voltage_Now, "unknown", 7); +- +- +- /* get current_now, which I believe is the charging rate ? */ +- memset(str, '\0', 100); +- fgets(str, 100, power_fp); +- if (strlen(str)>0) +- { +- memset(temp, '\0', 100); +- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); +- strncpy(batt_info->Present_Rate, temp, 12); +- } +- else +- strncpy(batt_info->Present_Rate, "unknown", 7); +- +- +- /* get charge_full_design */ +- memset(str, '\0', 100); +- fgets(str, 100, power_fp); +- if (strlen(str)>0) +- { +- memset(temp, '\0', 100); +- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); +- strncpy(batt_info->Design_Cap, temp, 12); +- } +- else +- strncpy(batt_info->Design_Cap, "unknown", 7); +- +- +- //printf(" \n bat_info_design_cap = %s \n ", batt_info->Design_Cap); +- +- +- /* get charge_full, which is the last full capacity I guess ? */ +- memset(str, '\0', 100); +- fgets(str, 100, power_fp); +- if (strlen(str)>0) +- { +- memset(temp, '\0', 100); +- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); +- strncpy(batt_info->LastFull_Cap, temp, 12); +- } +- else +- strncpy(batt_info->LastFull_Cap, "unknown", 7); +- +- +- //printf(" \n bat_info_lastfull_cap = %s \n\n ", batt_info->LastFull_Cap); +- +- +- /* get charge_now */ +- memset(str, '\0', 100); +- fgets(str, 100, power_fp); +- if (strlen(str)>0) +- { +- memset(temp, '\0', 100); +- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); +- strncpy(batt_info->Remaining_Cap, temp, 12); +- } +- else +- strncpy(batt_info->Remaining_Cap, "unknown", 7); +- +- //printf(" \n bat_info_remaining_cap = %s \n\n ", batt_info->Remaining_Cap); +- +- +- /* get model_name */ +- memset(str, '\0', 100); +- fgets(str, 100, power_fp); +- if (strlen(str)>0) +- { +- memset(temp, '\0', 100); +- strncpy(temp, str+24, 12); // use strncpy here because sscanf chokes on blanks in this one ? // +- +- memset(str, '\0', 100); +- sscanf(temp, "%[^\n]", str); // strip trailing \n, fucks up output // +- +- strncpy(batt_info->Model, str, 12); ++ strncpy(batt_info->Technology, "unknown", 7); ++ strncpy(batt_info->Voltage_Now, "unknown", 7); ++ strncpy(batt_info->Charge_Now, "unknown", 7); ++ strncpy(batt_info->Charge_Full, "unknown", 7); ++ strncpy(batt_info->Charge_Full_Design, "unknown", 7); ++ strncpy(batt_info->Present_Rate, "unknown", 7); ++ strncpy(batt_info->Design_Cap, "unknown", 7); ++ strncpy(batt_info->LastFull_Cap, "unknown", 7); ++ strncpy(batt_info->Remaining_Cap, "unknown", 7); ++ strncpy(batt_info->Model, "unknown", 7); ++ strncpy(batt_info->Serial, "unknown", 7); ++ ++ // see linux-2.6/drivers/power/power_supply_sysfs.c ++ // there can be different number of lines, so read up to 40 lines ++ for(int t=0; t<40; t++) { ++ memset(str, '\0', 100); ++ memset(attr, '\0', 100); ++ memset(temp, '\0', 100); ++ fgets(str, 100, power_fp); ++ sscanf(str, "%[^=]s %*s %*[^\n]", attr); ++ sscanf(str, "%*[^=] %*c %s %*[^\n]",temp); ++ if (strcmp(attr,"POWER_SUPPLY_STATUS")==0) { ++ strncpy(batt_info->Charging_State, temp, 12); ++ } ++ else if (strcmp(attr,"POWER_SUPPLY_TYPE")==0) { ++ strncpy(batt_info->Bat_Type, temp, 12); ++ } ++ else if (strcmp(attr,"POWER_SUPPLY_TECHNOLOGY")==0) { ++ strncpy(batt_info->Technology, temp, 12); ++ } ++ else if (strcmp(attr,"POWER_SUPPLY_VOLTAGE_NOW")==0) { ++ value = atoi(temp) / 1000; ++ snprintf(temp, sizeof(temp), "%i mV", value); ++ strncpy(batt_info->Voltage_Now, temp, 12); ++ } ++ else if (strcmp(attr,"POWER_SUPPLY_CURRENT_NOW")==0 || ++ strcmp(attr,"POWER_SUPPLY_POWER_NOW")==0) { ++ value = atoi(temp) / 1000; ++ snprintf(temp, sizeof(temp), "%i", value); ++ strncpy(batt_info->Present_Rate, temp, 9); ++ } ++ else if (strcmp(attr,"POWER_SUPPLY_CHARGE_NOW")==0) { ++ value = atoi(temp) / 1000; ++ snprintf(temp, sizeof(temp), "%i mA", value); ++ strncpy(batt_info->Charge_Now, temp, 12); ++ } ++ else if (strcmp(attr,"POWER_SUPPLY_CHARGE_FULL_DESIGN")==0) { ++ value = atoi(temp) / 1000; ++ snprintf(temp, sizeof(temp), "%i mA", value); ++ strncpy(batt_info->Charge_Full_Design, temp, 12); ++ } ++ else if (strcmp(attr,"POWER_SUPPLY_CHARGE_FULL")==0) { ++ value = atoi(temp) / 1000; ++ snprintf(temp, sizeof(temp), "%i mA", value); ++ strncpy(batt_info->Charge_Full, temp, 12); ++ } ++ else if (strcmp(attr,"POWER_SUPPLY_ENERGY_FULL_DESIGN")==0) { ++ value = atoi(temp) / 1000; ++ snprintf(temp, sizeof(temp), "%i mWh", value); ++ strncpy(batt_info->Design_Cap, temp, 9); ++ } ++ else if (strcmp(attr,"POWER_SUPPLY_ENERGY_FULL")==0) { ++ value = atoi(temp) / 1000; ++ snprintf(temp, sizeof(temp), "%i mWh", value); ++ strncpy(batt_info->LastFull_Cap, temp, 9); ++ } ++ else if (strcmp(attr,"POWER_SUPPLY_ENERGY_NOW")==0) { ++ value = atoi(temp) / 1000; ++ snprintf(temp, sizeof(temp), "%i mWh", value); ++ strncpy(batt_info->Remaining_Cap, temp, 9); ++ } ++ else if (strcmp(attr,"POWER_SUPPLY_MODEL_NAME")==0) { ++ strncpy(batt_info->Model, temp, 12); ++ } ++ else if (strcmp(attr,"POWER_SUPPLY_SERIAL_NUMBER")==0) { ++ strncpy(batt_info->Serial, temp, 12); ++ } ++ else if (strcmp(attr,"POWER_SUPPLY_PRESENT")==0) { ++ if(strncmp(temp,"1",1)==0) { ++ batt_info->Battery_Present = 1; ++ } ++ else { ++ batt_info->Battery_Present = 0; ++ printf(" Battery is not present, bailing out. \n"); ++ return 0; ++ } ++ } + } ++ if (strcmp(batt_info->Charge_Now,"")!=0 && ++ strcmp(batt_info->Charge_Now,"unknown")!=0) ++ snprintf(temp, sizeof(temp), "%s mA", batt_info->Present_Rate); + else +- strncpy(batt_info->Model, "unknown", 7); ++ snprintf(temp, sizeof(temp), "%s mW", batt_info->Present_Rate); + +- fgets(str, 100, power_fp); ++ strncpy(batt_info->Present_Rate, temp, 9); + +- /* get serial */ +- memset(str, '\0', 100); +- fgets(str, 100, power_fp); +- if (strlen(str)!=0) +- { +- memset(temp, '\0', 100); +- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); +- strncpy(batt_info->Serial, temp, 12); +- } +- else +- strncpy(batt_info->Serial, "unknown", 7); +- + fclose(power_fp); +- } ++ } + else // battery dir is readable but empty : only . and .. at most // + batt_info->Battery_Present = 3; + return 0; diff --git a/sys-power/acpitool/files/acpitool-0.5.1-kernel3.patch b/sys-power/acpitool/files/acpitool-0.5.1-kernel3.patch new file mode 100644 index 000000000000..cd793d2e1e67 --- /dev/null +++ b/sys-power/acpitool/files/acpitool-0.5.1-kernel3.patch @@ -0,0 +1,14 @@ +http://bugs.gentoo.org/377355 + +--- src/acpitool.cpp ++++ src/acpitool.cpp +@@ -205,8 +205,7 @@ + Kernel_24 = 1; + Kernel_26 = 0; + } +- +- if(strncmp(str,"2.6",3)==0) ++ else + { + Kernel_24 = 0; + Kernel_26 = 1; diff --git a/sys-power/acpitool/files/acpitool-0.5.1-wakeup.patch b/sys-power/acpitool/files/acpitool-0.5.1-wakeup.patch new file mode 100644 index 000000000000..b36d7306bddf --- /dev/null +++ b/sys-power/acpitool/files/acpitool-0.5.1-wakeup.patch @@ -0,0 +1,70 @@ +From 3a87a4132667f78fc85c54ad89992bbdd02d1e55 Mon Sep 17 00:00:00 2001 +From: Carlos Alberto Lopez Perez <clopez@igalia.com> +Date: Thu, 6 Oct 2011 03:12:55 +0200 +Subject: [PATCH] Use dynamic structures instead of predefined ones + + * The file /proc/acpi/wakeup can have much more than 25 entries. + In my computer (Dell E6420) I have 27 entries. + So instead of using an array of [x] entries better use dynamic + vectors and push the new entries when a new line from the file + is read. + + * The name of the device is not ever 4 characters. For example I + have a device called "LID" which is 3 characters long. + Instead of using a fixed size for the device we split the line + on the first tab (\t) and use the first part. +--- + src/acpitool.cpp | 23 +++++++++++------------ + 1 files changed, 11 insertions(+), 12 deletions(-) + +diff --git a/src/acpitool.cpp b/src/acpitool.cpp +index 2a610a5..71e01d7 100644 +--- a/src/acpitool.cpp ++++ b/src/acpitool.cpp +@@ -460,16 +460,14 @@ int Show_WakeUp_Devices(int verbose) + + int Toggle_WakeUp_Device(const int Device, int verbose) + { +- ifstream file_in; + ofstream file_out; +- char *filename, str[50]; +- int index = 1; +- char Name[25][5]; // 25 should be enough I guess, I have only 9 so far // +- ++ char *filename; string str; ++ int index = 1; int charindex = 0; ++ std::vector <std::string> Name(index); // Never is enough, use dynamic structures // + filename = "/proc/acpi/wakeup"; + +- file_in.open(filename); +- if (!file_in) ++ ifstream file_in(filename, ifstream::in); ++ if (!file_in.good()) // if opening is not successful + { + if(!verbose) + { +@@ -484,14 +482,15 @@ int Toggle_WakeUp_Device(const int Device, int verbose) + } + } + +- file_in.getline(str, 50); // first line are just headers // ++ getline(file_in, str); // first line are just headers // + while(!file_in.eof()) // count all devices and store their names// + { +- file_in.getline(str, 50); +- if(strlen(str)!=0) // avoid empty last line // ++ getline(file_in, str); ++ if( str.length() != 0 ) // avoid empty last line // + { +- memset(Name[index], '\0', 5); +- strncpy(Name[index], str, 4); ++ charindex = 0; // reset to zero ++ while ( (str[++charindex]!='\t') ); // stop on first tab and get the array index ++ Name.push_back(str.substr(0,charindex)); // Push the name into the vector + index++; + } + } +-- +1.7.5.4 + + diff --git a/sys-power/acpitool/metadata.xml b/sys-power/acpitool/metadata.xml new file mode 100644 index 000000000000..6f49eba8f496 --- /dev/null +++ b/sys-power/acpitool/metadata.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> +<!-- maintainer-needed --> +</pkgmetadata> |