Open GoogleCodeExporter opened 9 years ago
can you pls post libboblight.so too, so I can test it is on my box.
Just a hint: try for testing purposes /dev/ttyS0 instead of ttyUSB0, then you
know if it's because ftdi.so
I am also at ihad board (denim), if you want to discuss further...
cheers
d
Original comment by ooztue...@gmail.com
on 14 Feb 2012 at 10:09
Hi,
I have test your tip, same problem.
I have attached the file.
Test it please.
I find this code in devicers232.cpp:
int64_t now = GetTimeUs();
This code gives me 0, if i try int32_t now = GetTimeUs();
It gives me time's, bath the times are wrong.
Original comment by vosenw...@gmail.com
on 14 Feb 2012 at 10:47
Attachments:
My guess is CLOCK_MONOTONIC is not functioning.
Original comment by bob.loo...@gmail.com
on 15 Feb 2012 at 2:04
Original comment by bob.loo...@gmail.com
on 15 Feb 2012 at 2:04
OK, Can i change CLOCK_MONOTONIC to something else, so it's working ?
Original comment by vosenw...@gmail.com
on 15 Feb 2012 at 8:47
Try CLOCK_REALTIME
Original comment by bob.loo...@gmail.com
on 15 Feb 2012 at 4:35
Try CLOCK_REALTIME
I have done that, bath no result.
It's like that int64_t is not working.
Original comment by vosenw...@gmail.com
on 15 Feb 2012 at 4:42
Are the values in the struct timespec correct?
Original comment by bob.loo...@gmail.com
on 15 Feb 2012 at 6:07
What do you mean?
This is my code of timeutils.h
#ifndef TIMEUTILS
#define TIMEUTILS
#include "inclstdint.h"
#include <time.h>
inline int64_t GetTimeUs()
{
struct timespec time;
clock_gettime(CLOCK_MONOTONIC, &time);
return ((int64_t)time.tv_sec * 1000000LL) + (int64_t)(time.tv_nsec + 500) / 1000LL;
}
template <class T>
inline T GetTimeSec()
{
return (T)GetTimeUs() / (T)1000000.0;
}
void USleep(int64_t usecs, volatile bool* stop = NULL);
#endif //TIMEUTILS
If i do a ErrorLog in devicers232.cpp.
bool CDeviceRS232::WriteOutput()
{
//get the channel values from the clienshandler
int64_t now = GetTimeUs();
m_clients.FillChannels(m_channels, now, this);
//put the values in 1 byte unsigned in the buffer
for (int i = 0; i < m_channels.size(); i++)
{
int64_t output = Round64((double)m_channels[i].GetValue(now) * m_max);
output = Clamp(output, 0, m_max);
//Send errorlog for debug
LogError("Now =$i",now); //////// - This gives me 0 on my box, on ubuntu gives me the time.
LogError("output Clamp =$f",output); ////// - a random number 6nrs or sometime 7nrs. and on ubuntu gives me 0 when there is no connection with the client and a number when there is a connection on with a client.
for (int j = 0; j < m_bytes; j++)
m_buff[m_prefix.size() + i * m_bytes + j] = (output >> ((m_bytes - j - 1) * 8)) & 0xFF;
//mbuff gives me altime 0.00000 or FFFFFF
}
Original comment by vosenw...@gmail.com
on 15 Feb 2012 at 6:33
now and output are int64_t, this is how you print them to the log:
LogError("Now =%" PRIi64, now);
LogError("output Clamp =%" PRIi64, output);
Original comment by bob.loo...@gmail.com
on 15 Feb 2012 at 7:34
Hi, Thanks for your tip.
I think i no where the problem come from.
int64_t output = (double)m_channels[i].GetValue(now) * m_max;
output = Clamp(output, 0, m_max);
With Clamp i get 255 and without Clamp i get 9223372034707292159, That's Wrong.
So the leds are 255 that's FFFFFF.
on Ubuntu i get without clamp 0.
I i manual change the output to 55 i changed my color.
Do you no where i can find a solution for this problem.
I think the problem come from device.cpp GetValue.
Greetz Martijn
Original comment by vosenw...@gmail.com
on 16 Feb 2012 at 12:43
I suggest you start tracing back to where it goes wrong, it could be something
in the CChannel::GetValue function.
Original comment by bob.loo...@gmail.com
on 16 Feb 2012 at 10:14
Al the output from m_speed gives me negative numbers.
On linux its good.
Original comment by joseonli...@gmail.com
on 16 Feb 2012 at 10:16
Hi Bob,
I am trying to solve this issue too.
GDB is running on 2 machines with boblightd (X86 / MIPS) :
MIPS OUTPUT (wrong):
(After the 2nd check once m_lastupdate was correctly set, it come to check the
speed, but it never goes there, on x86 it does)
Breakpoint 1, CChannel::GetValue (this=0x4516e8, time=100323097023) at
device/device.cpp:60
60 if (m_lastupdate == -1)
(gdb)
57 float CChannel::GetValue(int64_t time)
(gdb)
60 if (m_lastupdate == -1)
(gdb)
66 if (m_speed == 100.0) //speed of 100.0 means max
(gdb) p m_speed
$2 = -4.45014772e-308
(gdb) n
72 float diff = m_wantedvalue - m_currentvalue; //difference between
where we want to be, and where we are
(gdb) p m_speed
$3 = -4.45014772e-308
(gdb) printf "%f ",m_speed
-0.000000 (gdb)
m_speed is show at least negative (I hope GDB is working and showing correct
output)
X86 OUTPUT (correct):
Breakpoint 2, CChannel::GetValue (this=0x807b9c0, time=96943026820) at
device/device.cpp:58
58 {
(gdb)
60 if (m_lastupdate == -1)
(gdb)
66 if (m_speed == 100.0) //speed of 100.0 means max
(gdb)
68 m_currentvalue = m_wantedvalue;
(gdb) p m_speed
$9 = 100
(gdb) printf "%f ",m_speed
100.000000 (gdb)
on X86 it show correctly all.
This happens with almost all float values like for m_currentvalue,
m_wantedvalue etc.
So I am not really a C++ expert, so this problem might be easy to resolve (I
hope :)
Original comment by ooztue...@gmail.com
on 16 Feb 2012 at 10:22
Nope, no easy fix, and without a machine to reproduce it on I can't be of much
help.
Original comment by bob.loo...@gmail.com
on 16 Feb 2012 at 11:45
my assumption is, that there are problems with float on the mipsel machine.
if I add:
---
float CChannel::GetValue(int64_t time)
{
printf("%4.2f %4.2f %4.2f\n",m_speed ,m_lastupdate , m_currentvalue );
---
I get -> nan 324234234 nan
Original comment by ooztue...@gmail.com
on 17 Feb 2012 at 9:54
Now the question is where are those values coming from.
Original comment by bob.loo...@gmail.com
on 17 Feb 2012 at 6:56
[deleted comment]
I just got boblightd working with my arm router TL-WR1043ND and openwrt, and I
don't have any problems.
I noticed openwrt uses "-msoft-float" as a compilation option - and it says
about it:
> If your target CPU does not have a Floating Point Unit (FPU) or a kernel FPU
emulator, but you still wish to support floating point functions, then
everything will need to be compiled with soft floating point support
(-msoft-float)
So maybe you guys should try to compile boblight with "-msoft-float" and all
this float problems "float" away? ;-)
Original comment by markus.d...@gmail.com
on 8 Jul 2012 at 10:49
That sounds reasonable, but afaik it requires a software float implementation
from glibc or another library.
Original comment by bob.loo...@gmail.com
on 8 Jul 2012 at 12:29
All fixed!
Original comment by boblight...@gmail.com
on 29 Mar 2013 at 7:41
github.com/speedy1985
Original comment by boblight...@gmail.com
on 29 Mar 2013 at 7:42
Original issue reported on code.google.com by
vosenw...@gmail.com
on 14 Feb 2012 at 7:32Attachments: