> Thanks for going to all the trouble of testing out the phone
> operation on your SuSE machine. I havn't had any breakthrough
> yet, but your help has given me the confidence to persevere..

No problem -- I'm a software tester in Real Life (tm), so stuff like
this bugs the crap out of me. I have a tendency to get a hold of a
problem, and beat it into the ground sometimes, and this is one of
those things that drives me absolutely crazy: inconsistent behaviour
of software is _extremely_ annoying and frustrating - especially when
_I'm_ the one with the "works for me" response, but I can't figure out
what I did (if anything) to solve the problem. <sigh>

Anyway... I'm not convinced that the problem's in the kernel. If it
was, then anybody with the same kernel would run into the same
problem(s)...

...and, following that logic, I started digging through the code for
moto4lin, trying to see if there was anything spectacularly obvious
that _might_ be causing the behaviour we're seeing. In so doing, I
_think_ I _might_ have found a typo in moto_ui/p2kproc.cpp, on line
729... here's the function where that line appears:

<snip>

// Connect to phone.
int P2kProc::drv_connect()
{
        FUNC("drv_connect");
        int ph=drv_findPhone();
        if (ph==PHONE_NONE) RAISE("no phone")
                if (ph==PHONE_AT) drv_switchP2K();

        int t;
        t=time(NULL);

        while ((time(NULL)-t<5) && (ph!=PHONE_P2K))
        {
                usb_find_devices();
                ph=drv_findPhone();
                usleep(10000);
        }
        if (ph!=PHONE_P2K) return(-1);
        return(drv_openPhone());
}
</snip>

What's got me thinking there's a typo are the following two lines:

        if (ph==PHONE_NONE) RAISE("no phone")
                if (ph==PHONE_AT) drv_switchP2K();

This looks to me like if there's no phone, an error is spit out (to
the terminal, if you started moto4lin from there), then it checks to
see if the phone's in AT mode, and then it tries to switch it to P2K
mode. The problem here is that the switch to P2K will never be
reached, because there's a missing semi-colon at the end of the first
line, which means that if there's no phone _and_ it's in AT mode, then
it'll do the switch... which makes little to no sense to me, if I'm
reading this correctly...

...it might be worth trying out, though, to see if adding a semi-colon
here would help, so that it looks like this instead:

        if (ph==PHONE_NONE) RAISE("no phone");
        if (ph==PHONE_AT) drv_switchP2K();

I checked out the current CVS version, using the instructions on the
moto4lin website, and it looks as though this entire function's been
rewritten (and moved to line 857-ish), and would work the way I'm
thinking it should: if it doesn't find a phone, it prints an error;
then it checks to see if it's an AT phone, and switches to P2K mode if
it is...

...but - as I said before - I'm a software tester, not a developer...
so it's entirely possible that I'm just jumping at shadows... <shrug>

-- 
gentoo-user@gentoo.org mailing list

Reply via email to