Active Topics

 



Notices


Reply
Thread Tools
Posts: 1,994 | Thanked: 3,342 times | Joined on Jun 2010 @ N900: Battery low. N950: torx 4 re-used once and fine; SIM port torn apart
#81
Originally Posted by speedonwilliam View Post
I really dont understand why it doesnt work for me. I'v searched the forum and its like i'm d only one having this problem. When i type 'bnf' in xterm, I get the message
.Error: Read failed
usr/sbin/bnf-i2c: line 45: syntax error: * 3570 / 20 / 1000
sudo bnf does nothing.
Try:
$ sudo gainroot
# bnf

You need to have rootsh package installed :-)
http://wiki.maemo.org/Root

Best wishes.
~~~~~~~~~~~~~~~~~
Per aspera ad astra...
 

The Following User Says Thank You to Wikiwide For This Useful Post:
Posts: 16 | Thanked: 7 times | Joined on Oct 2012
#82
Originally Posted by Wikiwide View Post
Try:
$ sudo gainroot
# bnf
same error. I dont knw wot d problem is. Could it be a hardware problem?
 

The Following User Says Thank You to speedonwilliam For This Useful Post:
Posts: 1,994 | Thanked: 3,342 times | Joined on Jun 2010 @ N900: Battery low. N950: torx 4 re-used once and fine; SIM port torn apart
#83
Originally Posted by speedonwilliam View Post
same error. I don't know what the problem is. Could it be a hardware problem?
No, it looks like a misprint in the /usr/sbin/bnf-i2c file.
Like 45 for me:
NAC=$( $NAC * 3570 / $RS / 1000 ) # NAC Nominal available capacity, mAh.
No idea what's wrong with your file.

Best wishes.
 

The Following User Says Thank You to Wikiwide For This Useful Post:
Posts: 2,225 | Thanked: 3,822 times | Joined on Jun 2010 @ Florida
#84
Ugh, initially I wrote: "Not bothering to look inside the script itself, but some comments which may help the next person to look zero in on the problem"... but then nooo... I just had to go digging.

Anyway, I looked at this and it looked wrong, so I figured it was a someone-wrote-out-what-they-thought-they-saw-instead-of-copy-pasting style of error. And sure enough, this is wrong, that is not what line 45 looks like:
Code:
NAC=$( $NAC * 3570 / $RS / 1000 )
^ Unless $NAC at that moment is defined as the name of a valid command, that's going to be a command-not-found error anyway...

Looking at the line as quoted, I would imagine you meant arithmetic expansion rather than command substition? If so, it would look like this:
Code:
NAC=$(($NAC * 3570 / $RS / 1000))
^ I went ahead and looked into the source code, and indeed, that's what it looks like. (Note the double '((' and '))' symbols.)

As a sidenote, this assumes $NAC and $RS will never have whitespace inside them (or be blank). I habitually double-quote any usage of $VAR_NAME unless I expressly know it's guaranteed to be unnecessary. So it would look like so:
Code:
NAC=$(("$NAC" * 3570 / "$RS" / 1000))
..though it's not a big deal because either way you'd get a syntax error if there's whitespace in either of those variables.

However, while we're at it, the dollar signs (and thus doublequotes) are actually redundant. Since this is an arithmetic expansion we're working with, we can just write:
Code:
NAC=$((NAC * 3570 / RS / 1000))
..because Bourne/POSIX shell syntax expects all non-number tokens inside the arithmetic expansion to be variable names anyway. (I suspect that this would be a miniscule bit more efficient, because this way the shell does not have to stop to expand the $VAR_NAMEs into text first, before proceeding with parsing the result of that expansion as part of the arithmetic expansion, and instead can do just the arithmetic expansion - one expansion instead of two, where the two expansions probably forces it to shuffle/rewrite some buffer contents.)

Anyway, back to the syntax error:
usr/sbin/bnf-i2c: line 45: syntax error: * 3570 / 20 / 1000
This is happening because "$NAC" is an empty string (or just completely unset, which for this purpose is the same thing).

Here is an example test command replicating that kind of syntax error:
Code:
$ A= B=1; echo $(($A * $B))
sh: syntax error:  * 1
NOTE, this error is produced by the stock busybox ash shell.

The busybox-power ash shell will instead print:
Code:
-sh: arithmetic syntax error
Which is both surprising, and amusing (because I'd expect busybox-power to have the more informative error message, and I find the lack of error-causing-string to be less informative...).

Anyway, point is, we see that $NAC is defined on line 16 (of the same file, obviously) with the command:
Code:
i2cget -y 2 0x55 0x0c w
..since bnf-i2c is ran as root (because bnf itself is ran as root), you'd need to run the above command as root, and see what it returns.

So, speedonwilliam, try running the following and let us know what the result is:

Code:
sudo i2cget -y 2 0x55 0x0c w
__________________
If you want to donate in support of anything that I do, you can do so with either of these options:
PayPal | Bitcoin: 1J4XG2z97iFEKNZXThHdFHq6AeyWEHs8BJ | [Will add other donation options eventually]

Last edited by Mentalist Traceur; 2014-12-01 at 06:28. Reason: s/whitespace inside them/whitespace inside them (or be blank)/
 

The Following 3 Users Say Thank You to Mentalist Traceur For This Useful Post:
Posts: 2,225 | Thanked: 3,822 times | Joined on Jun 2010 @ Florida
#85
Originally Posted by Mentalist Traceur View Post
[...]
However, while we're at it, the dollar signs (and thus doublequotes) are actually redundant. Since this is an arithmetic expansion we're working with, we can just write:
Code:
NAC=$((NAC * 3570 / RS / 1000))
[...]
Note, however, that if you do this change, the shell will swallow the syntax error of having a blank/unset value in any of the variables, instead of erroring out. To be honest though, I would be checking the return values of i2cget and returning out as soon as one returned an error value. Manpages online for i2cget seem to oh-so-helpfully not report what the return value will be in the event of a failure, but I imagine that, given Unix convention and the Linux kernel documentation on i2c that i2cget on the commandline returns 0 for success, something non-zero on failure, and I would hope i2cget takes care of printing its own errors to stderr....

So anyway, I would daisy-chain the VAR_NAME=$(i2cget [...]) commands with '&&', and stick them in a negated if check, so that you can abort out, like so:
Code:
if ! \ #
 VAR1=`i2cget [...]` &&
 VAR2=`i2cget [...]` &&
 [...]
 VARn=`i2cget [...]`
then
 #error out because one of the i2cget calls failed, for example:
 printf "i2cget failed to load one of the necessary values.\n" >&2
fi
And if i2cget fails to print useful errors to stderr, then you could wrap each i2cget call in a error-reporting wrapper e.g. something like:
Code:
i2cget_wrapperWithError()
{
 if i2cget "$@"
 then
  return $?
 else
  RET=$?
  printf "error: i2cget %s\n" "$*"
  return $RET
 fi
}
..then call that instead of i2cget directly. But I really think (and hope) i2cget prints errors properly.
__________________
If you want to donate in support of anything that I do, you can do so with either of these options:
PayPal | Bitcoin: 1J4XG2z97iFEKNZXThHdFHq6AeyWEHs8BJ | [Will add other donation options eventually]

Last edited by Mentalist Traceur; 2014-12-01 at 07:12. Reason: Fiddling with whitespace in code tags
 

The Following 3 Users Say Thank You to Mentalist Traceur For This Useful Post:
Estel's Avatar
Posts: 5,028 | Thanked: 8,613 times | Joined on Mar 2011
#86
@speedonwilliam
Sorry, I've, somehow, missed update on this thread. Anyway, thanks for trying to solve/solving Wikiwide and Mentalist - indeed, do as Mentalist said, and we will be able to proceed after getting a meaningful output. If the "sudo i2cget" thing doesn't produce output, try issuing it without sudo, but from root shell.

@Mentalist Traceur
Thanks for your insights on the "code", all dully noted, I'll experiment with upgrading the script when I'll have some free time. BTW, that happens, when someone with actual knowledge inspects totally "noobishly" written code Well, at least I seem to *do* understand the mechanics behind your suggestions, and that is something, already...

/Estel
__________________
N900's aluminum backcover / body replacement
-
N900's HDMI-Out
-
Camera cover MOD
-
Measure battery's real capacity on-device
-
TrueCrypt 7.1 | ereswap | bnf
-
Hardware's mods research is costly. To support my work, please consider donating. Thank You!
 

The Following 2 Users Say Thank You to Estel For This Useful Post:
Posts: 2,225 | Thanked: 3,822 times | Joined on Jun 2010 @ Florida
#87
Originally Posted by Estel View Post
@Mentalist Traceur
Thanks for your insights on the "code", all dully noted, I'll experiment with upgrading the script when I'll have some free time. BTW, that happens, when someone with actual knowledge inspects totally "noobishly" written code Well, at least I seem to *do* understand the mechanics behind your suggestions, and that is something, already...
Happy to help. I spent an unhealthy amount of time figuring out Bourne/POSIX shell scripting details in the last half year. (I tend towards depth-first perfectionism when I do anything, so with increasing competence in shell scripting, came more and more digging into shell scripting nuance.)

"But will this one-off shell script break if a user has a newline in their input?" are the kinds of questions which keep me up at night.
__________________
If you want to donate in support of anything that I do, you can do so with either of these options:
PayPal | Bitcoin: 1J4XG2z97iFEKNZXThHdFHq6AeyWEHs8BJ | [Will add other donation options eventually]
 

The Following 2 Users Say Thank You to Mentalist Traceur For This Useful Post:
Posts: 2,225 | Thanked: 3,822 times | Joined on Jun 2010 @ Florida
#88
Woops, I made an error, right here:
Originally Posted by Mentalist Traceur View Post
As a sidenote, this assumes $NAC and $RS will never have whitespace inside them (or be blank). I habitually double-quote any usage of $VAR_NAME unless I expressly know it's guaranteed to be unnecessary. So it would look like so:
Code:
NAC=$(("$NAC" * 3570 / "$RS" / 1000))
..though it's not a big deal because either way you'd get a syntax error if there's whitespace in either of those variables.
The above will also be a syntax error. Apparently, arithmetic expansion is one of those places where field splitting is not done when expanding variables to start with... So if you do have the double quotes there, the double quotes are treated as literals instead of as escapes around the variable contents.

Consequently, I am less confident about my assertion that $(($SOME_VAR + 1)) would be any less efficient than $((SOME_VAR + 1)). I guess I don't remember the parsing rules with regard to arithmetic expansion as well as I thought I did.
__________________
If you want to donate in support of anything that I do, you can do so with either of these options:
PayPal | Bitcoin: 1J4XG2z97iFEKNZXThHdFHq6AeyWEHs8BJ | [Will add other donation options eventually]
 

The Following 2 Users Say Thank You to Mentalist Traceur For This Useful Post:
Posts: 16 | Thanked: 7 times | Joined on Oct 2012
#89
Thank you all for your help. I really appreciate it but d truth is i'm a noob :-D so I really dont understand what you guys are saying. Anyway thanks once again.

Originally Posted by Estel View Post
@speedonwilliam
If the "sudo i2cget" thing doesn't produce output, try issuing it without sudo, but from root shell.
Tried the command below as root:
sudo i2cget -y 2 0x55 0x0c w
nothing happens. Also follöwed your instruction and tried it without sudo but from the root shell n i get thesame message:
Error: Read failed
 

The Following User Says Thank You to speedonwilliam For This Useful Post:
Estel's Avatar
Posts: 5,028 | Thanked: 8,613 times | Joined on Mar 2011
#90
OK, so for some reasons, your chip doesn't report nominal available capacity, at all... Now I just need to refresh my memory about what it means ;D
__________________
N900's aluminum backcover / body replacement
-
N900's HDMI-Out
-
Camera cover MOD
-
Measure battery's real capacity on-device
-
TrueCrypt 7.1 | ereswap | bnf
-
Hardware's mods research is costly. To support my work, please consider donating. Thank You!
 

The Following User Says Thank You to Estel For This Useful Post:
Reply

Tags
battery, bnf script, bq27200, bq27x00, charging


 
Forum Jump


All times are GMT. The time now is 18:50.