PDA

View Full Version : Ibus + ipk = ...


milosnikolic
21st December 2010, 21:49
Hello everyone,

I have one idea....read...

1. Displaying custom messages on that display (i.e. coolant temperature).

2. On the IPK (instrument cluster), you can see TrafficMaster module displaying "boot" message

http://forums.mg-rover.org/attachment.php?attachmentid=27526&d=1158253150

3. TrafficMaster module is connected to IKE through dedicated "Nav-bus" line (single wire + 12V + GND), described here:

http://forums.xpowerforums.com/showthread.php?t=34798

4. Engineer from Pektron described TrafficMaster module working like this:

The Rover traffic alert device (TAD) simply receives the RF data from the roadside beacons and sends it via the I-bus to the instrument cluster.

As far as our unit is concerned there are just the 3 wires connected, the 0 volts, ignition +12 volts and the data bus to the cluster.

The other 3 unused connections are 1 no connection, 1 battery and 1 Beep disable, none of which are necessary or normally used.

Hope that clarifies


So, I want to make an interface that would read coolant temperature from K-BUS line and send it to the IPK like TrafficMaster sends its own messages.

What I need ? I need someone who has IBUS analyzer to connect it and log the message format being sent from TM module to IPK (through pink-black wire). When we decode the format, we can try to disconnect TM and send our own messages to IPK. If we succeed in that, I can guarantee that I will make the interface that will display coolant temperature on IPK display, or any other info being transmitted on K-BUS line (speed, RPM, ...)

milosnikolic
22nd December 2010, 11:11
Anyone ?

At least, share your thoughts, ideas ...

mantianak
22nd December 2010, 11:40
It's a good idea and something worth trying. I'm sure it's possible although could be difficult.

I would start by understanding how traffic master transfers the information to the ipk. Is it raw data going to the ipk and the ipk translates the data into readable text or does the trafficmaster interface translate the data and trasmit text (or perhaps something else?).

Taking apart a TM unit would be fun too.

Affaid I can't really help in any way though.

milosnikolic
22nd December 2010, 20:49
It's a good idea and something worth trying. I'm sure it's possible although could be difficult.

I would start by understanding how traffic master transfers the information to the ipk. Is it raw data going to the ipk and the ipk translates the data into readable text or does the trafficmaster interface translate the data and trasmit text (or perhaps something else?).

Taking apart a TM unit would be fun too.

Affaid I can't really help in any way though.

That's exactly what I need - someone to connect IBUS analyzer to the TM wire that goes into IPK and capture the data traffic.

I am sure there are people here who have IBUS analyzer and it's 10 minutes job to do it.

billcoleman
22nd December 2010, 21:16
An interesting starfting point could be to use the following I-bus interface: http://www.reslers.de/IBUS/index.html

You can then use NavCoder software from http://www.siegenthaler.co.nz/

This will definately get you on the ibus - I have tried the demo software and it works well.

milosnikolic
22nd December 2010, 21:50
An interesting starfting point could be to use the following I-bus interface: http://www.reslers.de/IBUS/index.html

You can then use NavCoder software from http://www.siegenthaler.co.nz/

This will definately get you on the ibus - I have tried the demo software and it works well.

Thanks for this info, but I need TM module data to be captured. I cannot do it my self as here in Serbia we don't have any TM transmitting stations at all :(

rogerls
22nd December 2010, 22:02
I have an interface, and full copy of NavCoder, I will have a go at getting some data captured when the snow has gone !...

HarryM1BYT
22nd December 2010, 22:53
Anyone ?

At least, share your thoughts, ideas ...

Yes please, very interested. My guess is that the data between TM and IPK will be just standard serial ASCII data, as this is what many of the general purpose LCD displays use. I fancy the display will be just a standard one which has been adapted for use on the 75, back lit by a red or yellow LED's.

There is one perhaps minor problem, the display is also used for showing mpg/ trip mileage etc. which overides the TM's use of the display, for lighting faults, door open warnings etc.. So it is already a very heavily used display.

milosnikolic
23rd December 2010, 00:00
Yes please, very interested. My guess is that the data between TM and IPK will be just standard serial ASCII data, as this is what many of the general purpose LCD displays use. I fancy the display will be just a standard one which has been adapted for use on the 75, back lit by a red or yellow LED's.

There is one perhaps minor problem, the display is also used for showing mpg/ trip mileage etc. which overides the TM's use of the display, for lighting faults, door open warnings etc.. So it is already a very heavily used display.

If data between TM and IPK is plain ASCII, it would be fantastic, but I doubt.

Display IS heavily used BUT TM displays messages when you are not in any of trip computer functions. Also, it is possible to display 4 lines of text on the display and those could contain current speed, mpg, coolant temperature and trip mileage.

Sounds good ? :)

Let's wait for ROGER with some data capturings

milosnikolic
23rd December 2010, 00:02
I have an interface, and full copy of NavCoder, I will have a go at getting some data captured when the snow has gone !...

I hope the Sun will hear my prayers and shine with all its power to melt the snow asap :xmas-smiley-031:

phenonix
23rd December 2010, 07:47
Anyone ?

At least, share your thoughts, ideas ...

Will not be able to help you milos,no trafficmsster here, but I like the sound of what your trying

billcoleman
23rd December 2010, 11:18
To avoid conjesting the ipk, would it not be better to build a small separate lcd display.

milosnikolic
24th December 2010, 10:42
To avoid conjesting the ipk, would it not be better to build a small separate lcd display.

That idea is also good, but I want to make it "OEM-like" as much as possible. Once we figure everything out (how TM works, the format of data sent to the IPK, etc) it would be easy to display information on separate LCD.

Anyway, all ideas, proposals, advices, are more than welcome !

Currently, we are waiting for Roger to get back with TrafficMaster IBUS data capture.

gnomidlo
30th October 2011, 11:46
I have an interface, and full copy of NavCoder, I will have a go at getting some data captured when the snow has gone !...

Sorry for digging up old topic, but actually it is very interesting and potentially usefull.
Rogerls, can you try to get the data?

milosnikolic
31st January 2012, 11:54
ROGERLS, are you still willing to contribute with communication data capture ? :D I bought Resler IBUS interface but I'm still to get TM module and NAVCODER :(

Thank you very much in advance !

Julian
31st January 2012, 15:10
You might be interested in looking at the eKombi package this German company has produced for BMW cars: http://www.car-solution.de/index.php?page=shop.product_details&flypage=flypage.tpl&product_id=131&category_id=29&option=com_virtuemart&Itemid=53&lang=en. Sounds ike you are thinking along similar lines.
Julian.

Leafie
2nd April 2012, 22:32
I've been experimenting with an old IKE not in the car to see what I can do with it.

So far I've found the Nav-Bus messages are in I/K bus format.

Nothing I've sent has done any good (not certain it's getting there yet!)

Operating the (equivalent of) the computer button on the stalk I get from the Nav-Bus on the IKE:

Press Computer from main
22:04:41 from:F0 length:07 to:3B 43 C2 02 80 04 xx
Press Computer return to main
22:04:55 from:F0 length:07 to:3B 43 C2 02 80 01 xx
22:04:55 from:F0 length:07 to:3B 43 C2 02 80 04 xx
Then without doing anything
22:04:57 from:F0 length:07 to:3B 43 C2 02 80 02 xx
22:05:15 from:F0 length:07 to:3B 43 C2 02 80 01 xx
Then nothing more

Does this on power up
22:05:15 from:F0 length:07 to:3B 43 C2 02 80 01 xx

So clearly I/K bus format.

in the whole BMW equivelent I wonder the message centre is like a MIR???

The messages above are from F0 (BMBT) although that may be because it's a button.

About 6 hours so far and not much of use as yet, although the messages abouve could be used to operate a computer driving an replacement display placed in the IKE + show other information.

Still playing......

HarryM1BYT
2nd April 2012, 22:56
I've been experimenting with an old IKE not in the car to see what I can do with it.

So far I've found the Nav-Bus messages are in I/K bus format.

Nothing I've sent has done any good (not certain it's getting there yet!)

Operating the (equivalent of) the computer button on the stalk I get from the Nav-Bus on the IKE:

......

I'm certain it can be done Leafie, just a matter of working out how. Well done on the little bit of progress you have made so far.

milosnikolic
3rd April 2012, 07:35
Great ! Finally someone who's interested to play with IKE messages :)

I tried to connect Resler's interface to TM module pink wire (which is going to IKE) and got just some rubbish in NavCoder. I will play more over the weekend and post my results, but as I said, my idea is to resolve the format of messages sent to IKE and then programm a PIC that will read coolant temp, RPMs, Speed,... from I-Bus and then send it to IKE display.

Please post all your findings

I've been experimenting with an old IKE not in the car to see what I can do with it.

So far I've found the Nav-Bus messages are in I/K bus format.

Nothing I've sent has done any good (not certain it's getting there yet!)

Operating the (equivalent of) the computer button on the stalk I get from the Nav-Bus on the IKE:

Press Computer from main
22:04:41 from:F0 length:07 to:3B 43 C2 02 80 04 xx
Press Computer return to main
22:04:55 from:F0 length:07 to:3B 43 C2 02 80 01 xx
22:04:55 from:F0 length:07 to:3B 43 C2 02 80 04 xx
Then without doing anything
22:04:57 from:F0 length:07 to:3B 43 C2 02 80 02 xx
22:05:15 from:F0 length:07 to:3B 43 C2 02 80 01 xx
Then nothing more

Does this on power up
22:05:15 from:F0 length:07 to:3B 43 C2 02 80 01 xx

So clearly I/K bus format.

in the whole BMW equivelent I wonder the message centre is like a MIR???

The messages above are from F0 (BMBT) although that may be because it's a button.

About 6 hours so far and not much of use as yet, although the messages abouve could be used to operate a computer driving an replacement display placed in the IKE + show other information.

Still playing......

Leafie
3rd April 2012, 08:31
Great ! Finally someone who's interested to play with IKE messages :)

I tried to connect Resler's interface to TM module pink wire (which is going to IKE) and got just some rubbish in NavCoder. I will play more over the weekend and post my results, but as I said, my idea is to resolve the format of messages sent to IKE and then programm a PIC that will read coolant temp, RPMs, Speed,... from I-Bus and then send it to IKE display.

Please post all your findings

Great! I probably wont go as far as replacing the display in the IKE, so that would be useful to me too. Put up raw hex if you like and I'll have a go with it too.

If we can crack the messages to IKE on the NAV-Bus then it shouldn't be hard to read the I-Bus and format up a message to put on the Nav-Bus.

Leafie
3rd April 2012, 16:50
After a bit more digging today I suspect the data may be the same (or at least similar) to that output from the BMW BM24 radio module. So another angle of attack!

milosnikolic
3rd April 2012, 16:53
After a bit more digging today I suspect the data may be the same (or at least similar) to that output from the BMW BM24 radio module. So another angle of attack!

Great job ! Keep on researching and post some data captures here, I'm very keen to see it.

btw, are you using Resler's interface and NavCoder? and where are you accessing the ibus wire on the IPK (18-pin connector, pin 3 ?)

CDTi
3rd April 2012, 17:56
Sorry to go off topic a little but I have a related question

Do you guys know if the coolant temp, RPMs, Speed, MPG etc are on the iBus? Or just in the IKE?

Obviously info like RPM, speed etc get to the OBD socket. Is the format changed from the iBus to the OBD port?

Leafie
4th April 2012, 11:30
Great job ! Keep on researching and post some data captures here, I'm very keen to see it.

btw, are you using Resler's interface and NavCoder? and where are you accessing the ibus wire on the IPK (18-pin connector, pin 3 ?)

I'm using Resler's interface and a bit of VB I knocked up (easiest as my car PC is currently running XP).

If you can post up the data you sniffed that would be helpful. There is a version of the Sat Nav that displays directions on the IKE and maybe this is done with bitmaps, so having the data for the TrafficMaster logo onto the Nav-Bus might unlock this.

Leafie
4th April 2012, 11:39
Sorry to go off topic a little but I have a related question

Do you guys know if the coolant temp, RPMs, Speed, MPG etc are on the iBus? Or just in the IKE?

Obviously info like RPM, speed etc get to the OBD socket. Is the format changed from the iBus to the OBD port?

Coolant and outside temp, Speed and RPM are definately on the I-bus (sent from the IKE). Not dug further yet,

80 06 BF 19 [Outside temp byte] [Coolant temp byte] 00 xx

80 05 BF 18 [Speed byte/2] [RPM byte/100] xx

CDTi
4th April 2012, 15:00
Coolant and outside temp, Speed and RPM are definately on the I-bus (sent from the IKE). Not dug further yet,

80 06 BF 19 [Outside temp byte] [Coolant temp byte] 00 xx

80 05 BF 18 [Speed byte/2] [RPM byte/100] xxThanks for the reply.

I'm playing around with my Dynavin D99 at the moment but all I can get on the OBC screen are the outside and coolant temps - see pic below. I don't have all the readings shown in the pic - this is from a BMW.

I don't think the other info is available on our iBus e.g. voltage, tank capacity, distance to empty, MPG. Are these only on the IKE?

Leafie
4th April 2012, 15:30
Thanks for the reply.

I'm playing around with my Dynavin D99 at the moment but all I can get on the OBC screen are the outside and coolant temps - see pic below. I don't have all the readings shown in the pic - this is from a BMW.

I don't think the other info is available on our iBus e.g. voltage, tank capacity, distance to empty, MPG. Are these only on the IKE?

If I find out I'll let you know. There are a lots of messages that have not been decoded by anyone I've found on the Internet. There appear to be messages where you can request data from the IKE, so that might do what you need or maybe not, but whether you can make it work with that device is another question.

CDTi
4th April 2012, 15:34
If I find out I'll let you know. There are a lots of messages that have not been decoded by anyone I've found on the Internet. There appear to be messages where you can request data from the IKE, so that might do what you need or maybe not, but whether you can make it work with that device is another question.The D99 that I have was designed for the BMW E46. I thought that both cars had the same bus system (Ibus on the Beemer and K bus on ours) but that doesn't seem to be the case.

Does the OBD port present data in the same format as I/K buses? I might try and connect there.

Leafie
4th April 2012, 15:51
The D99 that I have was designed for the BMW E46. I thought that both cars had the same bus system (Ibus on the Beemer and K bus on ours) but that doesn't seem to be the case.

Does the OBD port present data in the same format as I/K buses? I might try and connect there.


The OBD port is different to the I-Bus.

milosnikolic
4th April 2012, 20:11
I'm using Resler's interface and a bit of VB I knocked up (easiest as my car PC is currently running XP).

If you can post up the data you sniffed that would be helpful. There is a version of the Sat Nav that displays directions on the IKE and maybe this is done with bitmaps, so having the data for the TrafficMaster logo onto the Nav-Bus might unlock this.

No problem, I will post the data on Saturday. FYI - the wire that is used by TM module to display TM messages on IKE LCD screen is the SAME wire used by "low line" navigation to display textual navigation messages. In regard to TM logo displayed on the screen, I think IKE is "preconfigured" to display it when it gets reply from device ID of TM module (3F - same as DIAG, which is a bit confusing).

See some data below, but as was advised by Jochen (NavCoder author) I need to put 10k resistor between Ibus and 12V and try again, which I will do on Saturday :)

http://uploadpic.org/storage/2011/W3Pb5WSUwEdWTjs5fLJ9xe9R1.jpg

Leafie
4th April 2012, 20:31
the wire that is used by TM module to display TM messages on IKE LCD screen is the SAME wire used by "low line" navigation to display textual navigation messages

That's good confirmation.

In regard to TM logo displayed on the screen, I think IKE is "preconfigured" to display it when it gets reply from device ID of TM module

Would seem to be a bit of a limitation in the design, but could well be.

See some data below, but as was advised by Jochen (NavCoder author) I need to put 10k resistor between Ibus and 12V and try again, which I will do on Saturday :)

Brill! Yes, it doesn't work well without the resistor.

Leafie
9th April 2012, 22:13
Hmm, not sure if this of use.

Sending 3B 06 F0 43 82 00 01 xx clears the display.

Changing the 01 to other numbers causes the display to show garbage. Maybe this is some kind of pointer to what data to show. Memory addresss? Page?

milosnikolic
10th April 2012, 05:34
Hmm, not sure if this of use.

Sending 3B 06 F0 43 82 00 01 xx clears the display.

Changing the 01 to other numbers causes the display to show garbage. Maybe this is some kind of pointer to what data to show. Memory addresss? Page?

Hi Leafie,

I will post promised data this evening, didn't have time on saturday. Can you compile and send me your VB application, I would be keen to try it :)

Leafie
10th April 2012, 08:16
Hi Leafie,

I will post promised data this evening, didn't have time on saturday. Can you compile and send me your VB application, I would be keen to try it :)

Great! The app's not in a state anyone else could use it really as I hack it about and run it without building an executable.

Leafie
10th April 2012, 17:34
Searching the web for the newly discovered sequence and I've found some really good info here:
http://www.bimmerforums.co.uk/forum/f8/e46-monochrome-business-navigation-info-required-t109764/index2.html#post970835

Trying it out it seems to work (almost!) :D

I've put a post there to ask for a bit more info......:drool4:

milosnikolic
10th April 2012, 17:50
Searching the web for the newly discovered sequence and I've found some really good info here:
http://www.bimmerforums.co.uk/forum/f8/e46-monochrome-business-navigation-info-required-t109764/index2.html#post970835

Trying it out it seems to work (almost!) :D

I've put a post there to ask for a bit more info......:drool4:

Congrats Leafie ! Fantastic info ! I'm just about to go to the car and capture some data !

What did you manage to send to the display and how ? What commands you used ?

See you later here

HarryM1BYT
10th April 2012, 17:58
Searching the web for the newly discovered sequence and I've found some really good info here:
http://www.bimmerforums.co.uk/forum/f8/e46-monochrome-business-navigation-info-required-t109764/index2.html#post970835

Trying it out it seems to work (almost!) :D

I've put a post there to ask for a bit more info......:drool4:

..and you had a reply a few minutes ago:}

Leafie
10th April 2012, 18:00
What did you manage to send to the display and how ? What commands you used ?

Trying to reverse engineer so sent:

3B 1E F0 43 00 23 00 00 2A 1B 01 [41 20 48 61 72 64 20 44 61 79 27 73 20 4E 69 67 68 74] 00 xx

Bit in brackets is the text. The final 00 may be the terminator.


Then:

3B 06 F0 43 82 26 00 xx which is close to my sequence.

I'm guessing the first command somehow loads the text and the second one causes it to be displayed.

More experimenting to do.......

Leafie
10th April 2012, 18:11
A pic to prove it!

13318

milosnikolic
10th April 2012, 18:15
A pic to prove it!

13318

This is the greatest achievement so far (that I know) ! Keep working, Leafie

Going now to the car, see you later

Steve916
10th April 2012, 18:20
I have been reading this thread with much interest:}
It's beyond my capabilities what you guys are doing but it's a fantastic achievement to get the ipk to display your messages, and hopefully one day to display obd data.
Well done guys and keep up the good work:bowdown:
Steve

joylove
10th April 2012, 19:01
Good stuff! Re-upped for non-members!

http://i88.photobucket.com/albums/k190/coldpost_/GIFs/IMG046.jpg

milosnikolic
10th April 2012, 19:12
Leafie, what connector/pin are you using to connect to IKE ?

I've just got back from the car and I'm still getting the same non-sense data as before. Or, as someone said on bimmer forum, NavCoder is unable to translate NavBus data, but I cannot get I-bus data as well :shrug:

Can someone please point me in right direction ?

First - where to access IBUS data (not NavBus) to get some meaningful readings like outside temp, coolant temp, RPM,... I tried with red-white wire with yellow dots on it (it should be IBUS wire, right?)

CDTi
10th April 2012, 19:22
Leafie, what connector/pin are you using to connect to IKE ?

I've just got back from the car and I'm still getting the same non-sense data as before. Or, as someone said on bimmer forum, NavCoder is unable to translate NavBus data, but I cannot get I-bus data as well :shrug:

Can someone please point me in right direction ?

First - where to access IBUS data (not NavBus) to get some meaningful readings like outside temp, coolant temp, RPM,... I tried with red-white wire with yellow dots on it (it should be IBUS wire, right?)I'm looking for the connection point for voltage, fuel consumption etc, if anyone knows.

milosnikolic
10th April 2012, 19:32
I'm looking for the connection point for voltage, fuel consumption etc, if anyone knows.

There are no separate connections for all those data, they are transmitted on IBUS like coded messages.

good starting point to understand all this is here:

http://ibus.stuge.se/Main_Page

StevenWilliams
10th April 2012, 19:39
I have to say this is great work.

Leafie
10th April 2012, 19:53
Leafie, what connector/pin are you using to connect to IKE ?

I've just got back from the car and I'm still getting the same non-sense data as before. Or, as someone said on bimmer forum, NavCoder is unable to translate NavBus data, but I cannot get I-bus data as well :shrug:

Can someone please point me in right direction ?

First - where to access IBUS data (not NavBus) to get some meaningful readings like outside temp, coolant temp, RPM,... I tried with red-white wire with yellow dots on it (it should be IBUS wire, right?)

Pin 10 - Connector S2

Navcode can show the data, just not translate into what it means.

I was getting garbage without the 10k resistor, but I just have the USB interface, a breadboard and the IKE.

Leafie
10th April 2012, 19:54
Pin 10, S2 is the Nav-Bus.

I-bus is on Pin 3, S1 - Yes the 3 colour one.

milosnikolic
10th April 2012, 19:59
Pin 10, S2 is the Nav-Bus.

I-bus is on Pin 3, S1 - Yes the 3 colour one.

thanks Leafie, going back to the car (wife's not happy :} )

Leafie
10th April 2012, 20:01
thanks Leafie, going back to the car (wife's not happy :} )

Just to be sure - You need to send the data over the Nav-Bus to get it on the display.

Later we'll need to grab data off of the I-Bus and contruct the messages to send onto the Nav-Bus. I think.

HarryM1BYT
10th April 2012, 20:08
I'm looking for the connection point for voltage, fuel consumption etc, if anyone knows.

There is none - It is just data on a shared between many things, bus system wire. As I understand it, the information needed has to be requested, then the item with the data responds with the data and all on the bus.

Guessing at the way this idea is going -

A pic (a tiny stand alone microprocessor) needs to be programmed to talk to the bus, make the requests for the data you mention, accept the replies, then 'paste' the data to the IPK display. You already have the fuel consumption on the button, but voltage, a proper engine temperature, a more accurate mph/ kph all shown in the display at the same time, sounds like a possibility with the push of a single button.

Leafie
10th April 2012, 20:14
There none - It is just data on a shared between many things, bus system wire. As I understand it, the information needed has to be requested, then the item with the data responds with the data and all on the bus.

Guessing at the way this idea is going -

A pic (a tiny stand alone microprocessor) needs to be programmed to talk to the bus, make the requests for the data you mention, accept the replies, then 'paste' the data to the IPK display. You already have the fuel consumption on the button, but voltage, a proper engine temperature, a more accurate mph/ kph all shown in the display at the same time, sounds like a possibility with the push of a single button.

Yep! Or if you have a car pc go via that opening up all sorts of possibilities!

wutang
10th April 2012, 21:21
i am a computer novice but once those with far more skill than i have worked the coding ect out this sounds like a job for one of those rasberry pi mini computer things.

richard

Leafie
10th April 2012, 21:32
RichardP over at bimmerforums.co.uk has kindly shared his notes on his sniffing of the E46 Monochrome Business Navigation.

I don't think it all applies, but the important bits certainly do so far.

I've pasted his post below. I think it would be polite if we don't trample over his thread over on bimmerforums.co.uk and continue here.

Thanks again RichardP!

--------------------------------------------------------------------------
I got the information by monitoring the navbus to see if it was like the iBus, it was so I had a little play.

These are the only commands I know, they are just a few notes I jotted down as I went, I'm not sure how accurate the notes are, if you have the ability to send the commands then give them a go.


Enable raw display?
3B 05 F0 43 A5 00 28
3B 06 F0 43 A4 01 00 2B
3B 06 F0 43 82 02 00 0E

Clear screen
3B 07 F0 43 80 03 01 00 0D

"Now Playing"
3B 14 F0 43 00 1C 00 01 00 4E 6F 77 20 50 6C 61 79 69 6E 67 00 B3
Bold version
3B 17 F0 43 00 1C 00 01 00 1B 80 01 4E 6F 77 20 50 6C 61 79 69 6E 67 00 2A
Large version
3B 17 F0 43 00 1C 00 01 00 1B 90 0A 4E 6F 77 20 50 6C 61 79 69 6E 67 00 31
Draw line . .. .. .. .. x1 y1 x2 y2
3B 0B F0 43 61 1D 01 00 00 0A 77 0A 89
Clear line 2
3B 0C F0 43 62 1E 81 10 00 00 0D 78 0A 16
"The Beatles". .. v Pixel offset
3B 14 F0 43 00 1F 00 00 0D 54 68 65 20 42 65 61 74 6C 65 73 00 BF
"And I Love Her"
3B 19 F0 43 00 21 00 00 19 1B 01 41 6E 64 20 49 20 4C 6F 76 65 20 48 65 72 00 FE
clear line 4
3B 0C F0 43 62 22 81 10 00 00 25 78 0A 02
"A Hard Day's Night"
3B 1D F0 43 00 23 00 00 25 1B 01 41 20 48 61 72 64 20 44 61 79 27 73 20 4E 69 67 68 74 00 83

"<< Back <<" . .. .. .. .. .. v Highlight
3B 1D F0 43 00 25 00 00 31 1B 90 01 3C 3C 42 61 63 6B 3C 3C 20 20 20 20 20 20 20 20 20 00 00

"<< Back <<"
3B LL F0 43 00 19 00 00 35 1B 90 01 3C 3C 42 61 63 6B 3C 3C 20 20 20 20 20 00 CS

commit and update display
3B 06 F0 43 82 26 00 2A

BFUK weekday crew

milosnikolic
10th April 2012, 22:13
helpful resources

http://web.comhem.se/mulle2/IBUSInsideDRAFTREV5.pdf

https://github.com/rjelbert/ibus-injector

CDTi
10th April 2012, 22:22
There are no separate connections for all those data, they are transmitted on IBUS like coded messages.That was my understanding also but as previously said, the E46 OBD can't seem to interpret/display the codes in my car.

I might try a direct connection to the IPK.

Leafie
10th April 2012, 22:22
The difference between the "now playing" and the bold version is
1B 80 01

See:
3B 14 F0 43 00 1C 00 01 00 4E 6F 77 20 50 6C 61 79 69 6E 67 00 xx
3B 17 F0 43 00 1C 00 01 00 1B 80 01 4E 6F 77 20 50 6C 61 79 69 6E 67 00 xx

1B = Decimal 27 = Escape -> Escape sequences?????

We maybe able to just remove these for now to keep things simple. I don't think bold works on the IKE, at least not this way.

joylove
10th April 2012, 22:46
I think it would be polite if we don't trample over his thread over on bimmerforums.co.uk and continue here.That thread is mostly dead now, the OP got his mono nav working by connecting up his navbus and has wandered off :driving:

Jochen has updated navcoder to include the mono nav hex address and is looking at the commands when he gets time. be sure to update to the latest betas when hey come out :D

RichardP
11th April 2012, 07:08
If you're having trouble getting anything working I can connect up my E46 Radio Nav unit and have another look at the commands, I only spent an hour or so looking previously. I derived all the commands from just looking at the way the BMW Nav displayed text and graphics.

I'll watch with interest to see how you get on and which features are supported by the Rover display. What capability does it have in standard form? Are there any pictures anywhere?

Other things that I remember, but did not write down at the time :

- You can display text starting at any pixel point X or Y axis, it's not limited to just 'lines'.
- You can draw lines from any pixel point to any other, horizontal, vertical or diagonal.
- Unless you clear the entire screen, it's very easy to end up with a total mish mash of jumbled up characters all overlayed on top of one another!

joylove
11th April 2012, 09:50
What capability does it have in standard form? Are there any pictures anywhere?As well as text, it can display graphics, such as small BMW ASC warnings and brake warnings, as well as a full screen version of same.

Also I think it displays the standard mono nav "arrows" displays. I'm not sure if these are drawn to the display or are preloaded, from what you are saying it seems the arrows (and possibly roundabouts?) may be drawn to the display. It does appear to have more lines than the mono nav display.

You've seen all my pictures on the bimmerforums thread. :(

Here's a few from Google
http://i281.photobucket.com/albums/kk232/jimbo180649/75dash2.jpg
http://i281.photobucket.com/albums/kk232/jimbo180649/75dash4.jpg
http://i281.photobucket.com/albums/kk232/jimbo180649/75dash5.jpg
http://www.clusterrepairsuk.co.uk/images/repairs/rover_75_instrument_cluster_1319219254_big.jpeg
http://i68.photobucket.com/albums/i16/Bombdroppingmofo/S5000651.jpg


Possible upgrades might include to add lane guidance and distance to the next POI. This may require a map update to add the extra info about the lane, merged in from an AISEN nav.

My AISEN toyota TNS300/TNS310 "arrows" map tells me the distance to the next 3 services when I'm on the motorway, plus what they offer (fuel, loos, coffee) which is quite handy for Mrs JL, as well as lane guidance.

I mention it because the file systems seem remarkably similar on the VDO and AISEN systems and perhaps the maps and POI could be merged using and ISObuster/ISOmagic.

Unfortunately unless the iBus or Navbus is active with information about the upcoming junction then this might be restricted to displaying OBC data. I do wonder if there is an iBus to navbus bridge in the cluster.

RichardP
11th April 2012, 10:23
As well as text, it can display graphics, such as small BMW ASC warnings and brake warnings, as well as a full screen version of same.
I'm not at all familiar with the Rover dash, but in some ways it appears quite similar to the BMW 'High OBC' in that it can display information which is not important (track number, radio station name etc. on the BMW) but also information which is very important (brake failure, low oil level, etc.).

My concern with using the Rover cluster for generic information would be in ensuring that any critical warnings that the cluster display is used for are not overwritten with something else, thus masking a potentially serious problem.

In the case of the BMW High Cluster the check control system uses a different display message, this can be detected and used to prevent any overwriting of the display. A similar mechanism may be possible on the Rover display, but this would require analysis of the messages used to display the warning messages and symbols.


Also I think it displays the standard mono nav "arrows" displays. I'm not sure if these are drawn to the display or are preloaded, from what you are saying it seems the arrows (and possibly roundabouts?) may be drawn to the display. It does appear to have more lines than the mono nav display.
Even if it's a higher resolution display, it may be only addressable in at a similar resolution to the BMW Radio Nav display. If the picture posted by Leafie shows the display output of the same message that I used to display "A Hard Day's Night" on the BMW Radio Nav, then it would appear to have the same addressable resolution.

It's possible that the symbols used are held in the clusters memory and are simply displayed using some message with an icon ID, again logging the messages sent over the navbus to the cluster would give a lot more information.


You've seen all my pictures on the bimmerforums thread. :(
Indeed, but they do not show what the display is used for while in the vehicle. For example, the third picture shows what appears to be some form of break warning and traction control warning but with no text as shown in your 'googled' pictures.


Possible upgrades might include to add lane guidance and distance to the next POI. This may require a map update to add the extra info about the lane, merged in from an AISEN nav.

My AISEN toyota TNS300/TNS310 "arrows" map tells me the distance to the next 3 services when I'm on the motorway, plus what they offer (fuel, loos, coffee) which is quite handy for Mrs JL, as well as lane guidance.

I mention it because the file systems seem remarkably similar on the VDO and AISEN systems and perhaps the maps and POI could be merged using and ISObuster/ISOmagic.

Unfortunately unless the iBus or Navbus is active with information about the upcoming junction then this might be restricted to displaying OBC data. I do wonder if there is an iBus to navbus bridge in the cluster.
The only message that I know of that the BMW Nav system gives regarding approach to a junction is only used in the E46 (maybe also in the Z4 and X3), it gives a count down in Meters or Yards to the next junction and is displayed in the low cluster display. For some reason this feature is disabled if the vehicle is identified as, for example, an E39, the message is no longer sent. I've tried several methods to re-enable it but any mechanism that I've tried causes all sorts of other problems!

Leafie
11th April 2012, 10:35
I think the screen is driven in 2 ways.

1. By the instrument cluster itself that is aware of vehicle sensors by direct connection or CAN-Bus for critical information such as brakes etc and I-Bus messages for non-crital information such as door open, bulb failure etc

2. By the Nav-Bus. This allows SatNav or TrafficMaster to display information on the same screen the cluster uses, but it is "low priority" and the Rover literature states "high priority" messages will replace "low priority" ones.

So, our pretty messages will be replaced should something bad happen to the vehicle and in any case the major ones are on lamps anyway.

Unless you have TrafficMaster most of the time the screen is blank.

I'm also guessing the very first messages I posted from the Trip button presses are there to enable applications writing to the Nav-Bus to be aware of their status on the screen. e.g. in the same way you can move to the trip functions and Traffic Master. What would be a problem, I think, is having TrafficMaster and something else trying to write to the screen.

It maybe the Traffic Master Nav-Bus output could be routed into something that arbitrates for the display or there may be more than one "screen" that can be written to.

Leafie
11th April 2012, 10:42
- You can display text starting at any pixel point X or Y axis, it's not limited to just 'lines'.
Done that!

- You can draw lines from any pixel point to any other, horizontal, vertical or diagonal.
Done that too! I wonder if there are other operations in there such as square, circle etc.

- Unless you clear the entire screen, it's very easy to end up with a total mish mash of jumbled up characters all overlayed on top of one another!
True. Good feature as well though as you can build a screen and display it in one hit which looks tidy. Although it's a low res display all that drawing would look pretty poor.

joylove
11th April 2012, 10:50
Indeed, but they do not show what the display is used for while in the vehicle. For example, the third picture shows what appears to be some form of break warning and traction control warning but with no text as shown in your 'googled' pictures. I think if nothing is wrong, it's blank.

The icons also move about I think, with the highest priority first.


The only message that I know of that the BMW Nav system gives regarding approach to a junction is only used in the E46 (maybe also in the Z4 and X3), it gives a count down in Meters or Yards to the next junction and is displayed in the low cluster display. For some reason this feature is disabled if the vehicle is identified as, for example, an E39, the message is no longer sent. I've tried several methods to re-enable it but any mechanism that I've tried causes all sorts of other problems!

If memory serves the E39 display is MID and the E46 display is IKE (or vice versa), and for certain cars the MID moves to the dash? I must say I've never seen that countdown on my E46, could it be MK4 only?

RichardP
11th April 2012, 11:15
If memory serves the E39 display is MID and the E46 display is IKE (or vice versa), and for certain cars the MID moves to the dash? I must say I've never seen that countdown on my E46, could it be MK4 only?
Thre are two types of cluster in the iBus generation BMWs, High and Low.

The Low cluster has a schematic of the car to display door open and bulb out warnings.

The High cluster has a 20 character display, which is similar to part of the MID (Muti Information Display) that's used on the E38, E39 and X5 if you have anything other than the basic radio but no Nav.

You can have a MID with the Low cluster, you can even have a rear MID with Nav or another MID.

But I digress.

I can't accurately remember if the juction countdown was available with the Mk III in the E46 I had with one, it's a while ago, but I rather thought it was.

Leafie
11th April 2012, 11:52
milosnikolic are you in from the car yet! :laughing2:

joylove
11th April 2012, 12:04
Thre are two types of cluster in the iBus generation BMWs, High and Low.

The Low cluster has a schematic of the car to display door open and bulb out warnings.

The High cluster has a 20 character display, which is similar to part of the MID (Muti Information Display) that's used on the E38, E39 and X5 if you have anything other than the basic radio but no Nav.

You can have a MID with the Low cluster, you can even have a rear MID with Nav or another MID.

But I digress.

I can't accurately remember if the juction countdown was available with the Mk III in the E46 I had with one, it's a while ago, but I rather thought it was.
Ah yes of course, the E46 High cluster was super rare at least in England, and I had forgotten about it. :bowdown:

milosnikolic
16th April 2012, 23:29
milosnikolic are you in from the car yet! :laughing2:

Hi everyone,

My 2 years old daughter caught a bad virus so we spent most of our time visiting doctors :( so I couldn't play with IKE and the interface.

Tomorrow (actually today) at 7am I'm travelling for a 2 weeks business trip to Bratislava so will not be able to contribute to this thread, but after that you have my promise that I will spend all my free time testing IKE and NavBus messages. Meanwhile I will purchase the full version of NavCoder so I will be able to SEND messages to IKE as well, can't wait to start playing :drool4:

See you all in 2 weeks, keep researching and posting your findings!

Cheers,
Milos

versus
6th May 2012, 19:49
something new?

Leafie
7th May 2012, 11:58
something new?

I think we're waiting on milosnikolic's data capture.

My guess is raster graphics can be sent to the IKE via the Nav-Bus. The displaying of the logo should confirm this. This is not essential to the original desire to display coolant temperature though.

With 2 bus interfaces it would be quite easy to read the I/K-Bus data and format a message onto the Nav-Bus, but I think we need to understand more about the interaction between TM and IKE to control when the message is displayed.

I'm hoping that the stalk button/IKE and TM message interactions will enable this to be done.

slav
14th August 2012, 13:16
Any update guys?
Remember there's a lot of people out there watching this thread and waiting for the results of your experiments.

Your work so far was great by the way! :)

Leafie
14th August 2012, 19:01
Hello!

Not heard anything from milosnikolic. Hope everything is ok.

I've being doing lots of experimenting, but working on something I want especially now my speed awareness course is booked!

I've managed to display a pic of a speed camera sign etc that I plan to hook into GPS and a camera location database to alert me to those marvelous devices.

I'll post a pic soon, but my test IKE has a big problem with display breakup at the moment.

I'm certain what milosnikolic is after can be done, although it would interfere with TM, so logs still needed.

I have a 2nd I-Bus interface on order so I can read and write both.

milosnikolic
14th August 2012, 20:59
Hi everyone,

I'm currently on 3 weeks vacation with my family and before that I really haven't had time to experiment with Resler's interface. I plan to post logs beginning of september when I'm back.

@Leafie: What is the second IBUS interface you are waiting for ? If it can read & write I would like to order it as well.

Leafie
15th August 2012, 09:09
Hi everyone,

I'm currently on 3 weeks vacation with my family and before that I really haven't had time to experiment with Resler's interface. I plan to post logs beginning of september when I'm back.

Nice!


@Leafie: What is the second IBUS interface you are waiting for ? If it can read & write I would like to order it as well.

I'ts another Resler. I'm connecting one to the I-Bus and the other to the Nav-Bus.

Rover 75 V6 Conn SE
14th November 2012, 12:46
Hi all

Any news on this ?

Thank you
Kevin

Leafie
18th November 2012, 19:49
Nothing from milosnikolic as yet.

Waiting for a new test IKE, that I should have by next weekend....

Rover 75 V6 Conn SE
6th February 2013, 15:26
Hi all

Sorry another bump

Thank you
Kevin

Leafie
15th March 2015, 19:57
Hello!

So I've had a stab at something that works. I'm not a C programmer, so I've hacked it together from example code plus knowledge of the I and Nav buses. If there is anyone with C skills please feel free to fix up the code!

I joined the Nav bus to the I bus so only one USB adapter is needed. It doesn't seem to cause any issues, but if it does the code can be changed to two USB adpaters.

I'm posting this up now in case someone wishes to progess it faster than I am able. I envisage running this on a Raspberry Pi. The one I have takes a Micro SD and has 4 USB ports.

I've renamed the program to .txt from .cpp so I can attach it.

46177
46178

slav
16th March 2015, 07:47
Wow, I really thought this thread was hoplessly dead.
Thanks for prooving me wrong :}

Any details on which USB adapter to use and how did you make a connection between the busses?
Once people have the same or at least similar hardware setup it will be easier to proceed with software work.

Leafie
16th March 2015, 12:05
Wow, I really thought this thread was hoplessly dead.
Thanks for prooving me wrong :}

Any details on which USB adapter to use and how did you make a connection between the busses?
Once people have the same or at least similar hardware setup it will be easier to proceed with software work.

I'm using a resler interface (Search Rolf Resler in Google).

I tapped 2 wires of the IKE with the intention of using 2 Resler interfaces, but just joined the 2 wires together onto a single interface and it seems ok so far.

I might have the temperature out by a factor of 2, but that is easy to fix.

I'm still working on it when I get spare time and hope to add a GPS reader for speed cam alerts.

Leafie
22nd March 2015, 18:53
This will be really cool if I can link it up with GPS as I hope......

46571

aturi83
7th April 2015, 20:22
Looks excellent mate, need to learn some programming I think!

Leafie
8th May 2015, 14:32
I've redone the program to use php as I'm marginally better at that than C and it opens up the option of reusing some of the code in a web page (car intranet?).

I have USB GPS receiver from which I can establish the current location. I have linked this to a speedcam points of interest file to display the camera warning I posted earlier plus chime and announce the speed limit if you are over it.

Playing around I sucked in traffic data from the Highways Agency (England only) and can now alert traffic situations as well. Video link below.

I think the Traffic Master system in the car is defunct now anyway plus this works even if you didn't have TM before.

Data is fetched every 5 minutes (adjustable in the code) via a dongle or bluetooth to your mobile and is displayed when you are within 10 miles (adjustable in the code) of the event. It might not be as good as TM, but as a proof of concept it's great as with a bit of work data can be sucked from almost any Internet source and restructured for use in this program.

This is on my "testbed" and I'll get it up and running in a vehicle soon when I'll post up the program code and more info.

So, coolant temperature, speed limit warning, traffic information and maybe a few other bits could be included. Your Dominos Pizza delivery status anyone?

Video: http://youtu.be/cJ_tJKlMh4E

milosnikolic
8th May 2015, 16:26
Sir, I take my hat of for all you've done so far ! This is absolutely fantastic and I wish I had more time to play with it but with 2nd kid on the way, wife renovating home and business trips every other week, I hardly have time to even enjoy driving my Rover 75 :o

Keep up the good work and let me know if any donation would keep you motivated to finish the project, I think you really deserve it.

You should even think of making a DIY kit that you could sell, I think interest would be great and I would be the first in the line to buy it.

Kind Regards,
Milos

aturi83
8th May 2015, 16:57
Absolutely brilliant stuff mate I agree about a diy kit. The possibilities for this are incredible.

Leafie
15th May 2015, 17:20
I now have everything in one program. There are some stability problems with the serial data to be ironed out, but mostly working.

This has the speed cam and traffic data and displays coolant temp and location (sucked from Google API) when nothing else is happening. Hopefully not too far off something other can try if they wish.

http://www.the75andztclub.co.uk/forum/imagehosting/865855562ab1d731f.jpg

klarzy
15th May 2015, 19:11
Very, Very cleaver stuff... well done chap...:bowdown:

chiron_myth
15th May 2015, 20:58
Can't wait for this to become a reality - amazing work you're doing :bowdown:

Coedy
15th May 2015, 21:54
This is one of the coolest things I have ever seen in a car. Let alone a car over 10years old!

With this, a bluetooth headunit and a 7" tablet install (With a phone providing its network connection) the car wont be far off being able to drive itself!

I would definitely consider a DIY Kit if it was ever set up! I am actually trying to re-learn PHP at the moment so hopefully once I am up to speed I'd be able to tweak it about too.

I'd love traffic for Wales added but wouldn't it also be cool for it to tell you the current speed limit of the road? (not sure if there is a database currently that holds that information EDIT-http://www.itoworld.com/map/124?lon=-3.82807&lat=51.63241&zoom=14 Found this but doubt there is an API :( ) Something like that would be a hack making it similar to the V/hall Insignia system, which I'm sure would be very handy for people who travel a lot into different areas.

Keep up the good work! :)

wooly12345
15th May 2015, 21:58
Totally agree! Keep doing what your doing

Robson Rover Repair
19th September 2015, 23:54
Any further updates

wooly12345
20th September 2015, 00:04
:iagree: :D:D:D:D

Would love a try on mine

Leafie
13th May 2016, 11:55
Hi Everyone,

I have left the UK and the ZT was too unwell to come. :-(

I'll post up the latest source code for what I was playing with so others can adapt/improve/incorporate into their own work as although pretty poor coding it has the essential bits in it to progress.

I also have my whole test rig of a power supply, IKE plus connectors, Raspberry Pi, breadboard, GPS dongle, Resler interface,Micro SD, HDMI->DVI cable (to connect a computer monitor), small amplifier and speakers for audio announcements.

Also a LLH102820 breather pipe, DAH000080MVR badge, 3 cans of X-Power grey paint, 3 cans of lacquer and a Haynes manual to throw in!

I'm not looking to profit, but this has some value and will cost a bit to post to the UK. I had pondered an eBay listing, but it might be easier for someone to make an offer.

Folks here have been really helpful to me in the past, so it would be great if someone could pick this up for the benefit of others. I'll try help with it if I can.

Maybe the Admins have an idea?

Leigh.

Leafie
13th May 2016, 12:13
Posting the code did work!

Here is the php I have been using that does everything I have posted.


<?php
/*================================================= ==============================
Use at your own risk!
Feel free to modify/improve!
Donated to MGZT Rover 75 owners by Leigh Allen
================================================== =============================*/
$logfp=fopen('ibus.log','w+');
$debug=1;
$serialbase="/dev/ttyUSB";
$serialhandle=array();
$serialparams=array();
$serialparams['GPS']="4800 raw cs8 -cstopb crtscts";
$serialparams['IBUS']="9600 cs8 crtscts parenb -parodd -cstopb ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke";
//
// LISTEN TO USB PORTS TO FIND WHERE THE GPS AND IBUS ARE ATTACHED
//
$gpsmessage="";
$ibusmessage="";
$probemessage=array();
$portinuse=array();
$whereami="";
$lastlatitude=0;
$lastlongitude=0;
$distancemoved=0;
$havegpsdevice=0;
$haveibusdevice=0;
$activetraffic=0;
$activespeed=0;
$latitude=0;
$longitude=0;
$temperaturecoolant=0;
while ($havegpsdevice+$haveibusdevice<2) {
for ($n=0;$n<9;$n++) {
foreach ($serialparams as $index=>$thisserialparams) {
if (!isset($portinuse[$n])||$portinuse[$n]==0) {
if ($debug==1) {
print("stty -F ".$serialbase.$n."\n");
}
exec("stty -F ".$serialbase.$n,$output,$result);
if ($result==0) { //HAVE VALID PORT
if (!isset($probemessage[$n])) {
$probemessage[$n]="";
}
if ($debug==1) {
print("stty ".$thisserialparams." -F ".$serialbase.$n."\n");
}
exec("stty ".$thisserialparams." -F ".$serialbase.$n,$output,$result);
if ($result==0) {
$probeserialhandle=fopen($serialbase.$n,"r+b");
if (!$probeserialhandle) {
print("Failed to open ".$serialbase.$n."\n");
} else {
if ($debug==1) {
print($serialbase.$n." looks possible\n");
}
stream_set_timeout($probeserialhandle,0);
stream_set_blocking($probeserialhandle,0);
if (($havegpsdevice==0&&$index=="GPS")||($haveibusdevice==0&&$index=="IBUS")) {
print("Listening on ".$serialbase.$n." for ".$index."\n");
$maxtries=500000;
while (strlen($probemessage[$n])<65535&&$maxtries>0) {
$probemessage[$n].=fread($probeserialhandle,65535);
$maxtries--;
if ($havegpsdevice==1) {
// DISCARD DATA WHILE FINDING OTHER DEVICES
$read=fread($gpshandle,65535);
}
if ($haveibusdevice==1) {
// DISCARD DATA WHILE FINDING OTHER DEVICES
$read=fread($ibushandle,65535);
}
$pos=strpos($probemessage[$n],'$GPGGA'); // IS IT GPS?
$pos1=strpos($probemessage[$n],'`'); // DATA OK?
$pos2=strpos($probemessage[$n],chr(12)); // DATA OK?
if ($pos!==false&&$pos1===false&&$pos2===false&&$index=='GPS'&&$havegpsdevice==0) { // YEP
print("GPS found at ".$serialbase.$n."\n");
$havegpsdevice=1;
$gpshandle=$probeserialhandle;
$portinuse[$n]=1;
$probemessage[$n]="";
break;
} else {
$pos=strpos($probemessage[$n],chr(0x80).chr(0x05).chr(0xbf)); // IS IT IBUS?
if ($pos!==false&&$index=='IBUS'&&$haveibusdevice==0) { // YEP
print("IBUS found at ".$serialbase.$n."\n");
$haveibusdevice=1;
$ibushandle=$probeserialhandle;
$portinuse[$n]=1;
$probemessage[$n]="";
break;
} else { // IS NEITHER - WAIT FOR MORE OR PUT IT DOWN
if (strlen($probemessage[$n])>=65535) {
fclose($probeserialhandle);
unset($probeserialhandle);
exec("stty sane -F ".$serialbase.$n);
$probemessage[$n]="";
}
}
}
}
}
}
}
} else {
print("Failed to configure ".$serialbase.$n."\n");
}
if ($havegpsdevice+$haveibusdevice==2) { // FOUND EVERYTHING WE NEED
break;
}
}
if ($havegpsdevice+$haveibusdevice==2) { // FOUND EVERYTHING WE NEED
break;
}
}
}
}
//
// READY TO GO
//
print("Starting\n");
fwrite($ibushandle,ikeInitialise(1));
fwrite($ibushandle,ikeInitialise(2));
fwrite($ibushandle,ikeInitialise(3));
fwrite($ibushandle,ikeClear());
$page=1;
$buildtraffic=1;
$pagecounter=0;
$lasttrafficnearbycount=0;
$trafficwnearbylist=array();
$whereamilines=array();
$whereami="";
//
// LOAD SPEEDCAM.TXT
//
$speedcam=array();
$speedcamnearbylist=array();
$fp=fopen("speedcam.txt","r");
$buffer=fgets($fp); // BIN LINE 1
while (!feof ($fp)) {
$buffer=fgets($fp);
$buffertoken=explode(",",$buffer);
if ($buffertoken[0]<>"") {
$speedcam[]=array("longitude"=>(double)$buffertoken[0],"latitude"=>(double)$buffertoken[1],"type"=>$buffertoken[2],"speed"=>$buffertoken[3],"direction"=>$buffertoken[5]);
}
}
fclose($fp);
$speed=0;
$speedcamcount=count($speedcam);
$speedcamthis=0;
$count=290; //DON'T DELAY START UP GETTING TRAFFIC DATA
$gpsmessage="";
$traffic=array();
$trafficnearbylist=array();
while (1!=2) {
if ($count>=300) { // REFRESH DATA EVERY 5 MINUTES ISH
//
// GET TRAFFIC ALERTS
//
$count=0;
$url="http://hatrafficinfo.dft.gov.uk/feeds/rss/AllEvents.xml";
$data=webGet($url,60);
if ($data<>"") {
$parser=new SimpleXMLElement($data,LIBXML_NOCDATA);
foreach ($parser->channel->item as $thisevent) {
if (strtotime(date('c'))>=strtotime((string)$thisevent->eventStart)&&strtotime(date('c'))<=strtotime((string)$thisevent->eventEnd)) {
$eventtext=preg_replace('/\s+/', ' ',(string)$thisevent->description);
$eventtext=(str_replace(" , ",", ",$eventtext));
$eventtext=(str_replace(" . ",". ",$eventtext));
$traffic[]=array("longitude"=>(double)$thisevent->longitude,"latitude"=>(double)$thisevent->latitude,"start"=>(string)$thisevent->eventStart,"end"=>(string)$thisevent->eventEnd,"event"=>$eventtext);
}
}
$trafficcount=count($traffic);
}
}
$read=fread($ibushandle,1024);
if ($debug==1) {
if ($read<>"") {
for ($n=0;$n<strlen($read);$n++) {
fwrite($logfp,dechex(ord(substr($read,$n,1)))." ");
}
}
}
$ibusmessage=$ibusmessage.$read;
$ibusmessagepos=strpos($ibusmessage,chr(0x80).chr( 0x06).chr(0xbf).chr(0x19)); // TEMPERATURE MESSAGE
if ($ibusmessagepos!==false) {
$thisibusmessage=substr($ibusmessage,$ibusmessagep os,8);
$temperaturecoolant=ord(substr($thisibusmessage,6, 1));
$ibusmessage=substr($ibusmessage,$ibusmessagepos+1 ,9999);
}
$read=fread($gpshandle,1024);
$gpsmessage=$gpsmessage.$read;
$gpsmessagepos=strpos($gpsmessage,"$"); // START OF *NEXT* MESSAGE
if ($gpsmessagepos!==false) {
$thismessage=substr($gpsmessage,0,$gpsmessagepos);
$gpsmessagetype=substr($thismessage,0,5);
$thismessagepart=explode(",",$thismessage);
switch ($gpsmessagetype) {
case 'GPRMC';
if (isset($thismessagepart[7])) {
$speed=(integer)($thismessagepart[7]*1.15078);
}
break;
case 'GPGGA':
$laststatus=$status;
if (isset($thismessagepart[1])&&isset($thismessagepart[6])) {
$clockutc=substr($thismessagepart[1],0,6);
$nmealatitude=$thismessagepart[2];
$latitudecompass=$thismessagepart[3];
$nmealongitude=$thismessagepart[4];
$longitudecompass=$thismessagepart[5];
$status=$thismessagepart[6];
} else {
$status=0;
}
if ((int)$status==1) {
if ($laststatus==0) {
$getwhereiam=1;
}
$latitude=(double)round((float)substr($nmealatitud e,0,2)+(float)substr($nmealatitude,2,7)/60,6);
if ($latitudecompass=="S") {
$longitude=-$longitude;
}
$longitude=(double)round((float)substr($nmealongit ude,0,3)+(float)substr($nmealongitude,3,7)/60,6);
if ($longitudecompass=="W") {
$longitude=-$longitude;
}
$distancemoved=haversineGreatCircleDistance($latit ude,$longitude,$lastlatitude,$lastlongitude);
if ($distancemoved>0.2&&$latitude<>0&&$longitude<>0) {
$getwhereiam=1;
}
if ($getwhereiam==1) {
$getwhereiam=0;
$lastlatitude=$latitude;
$lastlongitude=$longitude;
$url="http://maps.googleapis.com/maps/api/geocode/xml?latlng=".$latitude.",".$longitude;
if ($debug==1) {
print($url);
}
$data=webGet($url,60);
if ($debug==1) {
print($data);
}
$parser=new SimpleXMLElement($data,LIBXML_NOCDATA);
if ((string)$parser->status=="OK") {
foreach ($parser->result as $thisresult) {
if ((string)$thisresult->type=="postal_code") {
$whereami=(string)$thisresult->formatted_address;
}
}
} else {
$whereami="";
}
}
if ($debug==1) {
print('Count:'.$count.' Speed:'.$speed.' Time:'.$clockutc. ' Latitude:'.$latitude.' Longitude:'.$longitude."\n");
print('Place:'.$whereami.' Moved:'.$distancemoved."\n");
}
asort($speedcamnearbylist);
$speedcamclosest=9999;
$speedcamclosestindex=0;
foreach ($speedcamnearbylist as $index=>$speedcamnearby) {
$distance=haversineGreatCircleDistance($latitude,$ longitude,$speedcam[$index]["latitude"],$speedcam[$index]["longitude"]);
if ($distance<$speedcamclosest) {
$speedcamclosest=$distance;
$speedcamclosestindex=$index;
}
if ($debug==1) {
print('CAM Distance: '.round($speedcamnearby,2).' Latitude:'.$speedcam[$index]["latitude"].' Longitude:'.$speedcam[$index]["longitude"].' Speed limit:'.$speedcam[$index]["speed"].' Type:'.$speedcam[$index]["type"]."\n");
}
if ($distance>10) {
unset($speedcamnearbylist[$index]);
}
}
for ($n=1;$n<=500;$n++) {
if ($speedcamthis>=$speedcamcount) {
$speedcamthis=0;
}
$distance=haversineGreatCircleDistance($latitude,$ longitude,$speedcam[$speedcamthis]["latitude"],$speedcam[$speedcamthis]["longitude"]);
if ($distance<=10) {
if (!isset($speedcamnearbylist[$speedcamthis])) {
$speedcamnearbylist[$speedcamthis]=$distance;
}
}
$speedcamthis++;
}
asort($speedcamnearbylist);
if (count($speedcamnearbylist)>0) {
if ($speedcamclosest<0.05) {
if ($activespeed==0) {
$activespeed=1;
if ($speedcam[$speedcamclosestindex]['speed']<$speed) {
exec("play -q chime.wav > /dev/null &");
usleep(1600000);
exec("play -q m".$speedcam[$speedcamclosestindex]['speed'].".wav > /dev/null &");
}
}
fwrite($ibushandle,ikeClear());
fwrite($ibushandle,ikeText(80, 5,"SPEED"));
fwrite($ibushandle,ikeText(80, 15,"LIMIT"));
fwrite($ibushandle,ikeText(90, 40,$speedcam[$speedcamclosestindex]['speed']));
ikeDrawSpeedCam($ibushandle);
switch ($speedcam[$speedcamclosestindex]['type']) {
case 1:
fwrite($ibushandle,ikeText(12, 55, "Fixed"));
break;
case 5:
fwrite($ibushandle,ikeText(10, 55, "Mobile"));
break;
}
fwrite($ibushandle,ikeCommit());
} else {
fwrite($ibushandle,ikeClear());
$activespeed=0;
}
}
asort($trafficnearbylist);
foreach ($trafficnearbylist as $index=>$trafficnearby) {
$distance=haversineGreatCircleDistance($latitude,$ longitude,$traffic[$index]["latitude"],$traffic[$index]["longitude"]);
if ($debug==1) {
print('Traffic Distance: '.round($trafficnearby,2).' Start:'.$traffic[$index]["start"].' End:'.$traffic[$index]["end"].' Event:'.$traffic[$index]["event"]."\n");
}
if ($distance>10) {
unset($trafficnearbylist[$index]);
}
}

foreach ($traffic as $index=>$trafficitem) {
$distance=haversineGreatCircleDistance($latitude,$ longitude,$trafficitem["latitude"],$trafficitem["longitude"]);
if ($distance<=10) {
if (!isset($trafficnearbylist[$index])) {
$trafficnearbylist[$index]=$distance;
}
}
}
asort($trafficnearbylist);
} else {
$whereami="GPS signal lost";
}
$gpsmessage=substr($gpsmessage,$gpsmessagepos+1,99 99);
$count++;
break;
}
$gpsmessage=substr($gpsmessage,$gpsmessagepos+1,99 99);
}
if (count($trafficnearbylist)>0&&$activespeed==0) {
fwrite($ibushandle,ikeClear());
if ($buildtraffic==1) {
$alllines=array();
$buildtraffic=0;
foreach ($trafficnearbylist as $index=>$trafficnearby) {
$lines=lineSplit($traffic[$index]["event"],18);
$alllines=array_merge($alllines,$lines);
$filler=((intval(count($lines)/6)+1)*6)-count($lines);
for ($n=0;$n<$filler;$n++) {
$alllines[]=" ";
}
}
}
$pages=intval((count($alllines)-1)/6)+1;
for ($n=0;$n<6;$n++) {
if (isset($alllines[$n+($page*6)-6])) {
if ($debug==1) {
print("y:".number_format($n*10,0)."t:".$alllines[$n+($page*6)-6]."l:".number_format($n+($page*6)-6,5)."\n");
}
fwrite($ibushandle,ikeText(0,$n*10,$alllines[$n+($page*6)-6]));
}
}
$pagecounter++;
if ($pagecounter>10) {
$page=$page+1;
if ($page>$pages) {
$page=1;
$buildtraffic=1;
}
$pagecounter=0;
}
fwrite($ibushandle,ikeCommit());
}
if ($lasttrafficnearbycount<>count($trafficnearbylist)&&$activespeed==0) {
$lasttrafficnearbycount=count($trafficnearbylist);
if ($lasttrafficnearbycount>0) {
$activetraffic=1;
exec("play -q chime.wav > /dev/null &");
usleep(1600000);
exec("play -q traffic.wav > /dev/null &");
} else {
fwrite($ibushandle,ikeClear());
$activetraffic=0;
}
}
if ($activetraffic+$activespeed==0) { // NOTHING SIGNIFICANT GOING ON - DISPLAY LESS URGENT INFORMATION
$iconx=94-8*strlen((string)$temperaturecoolant);
fwrite($ibushandle,ikeClear());
$timezone=get_nearest_timezone($latitude, $longitude);
if ($timezone<>"unknown") {
date_default_timezone_set($timezone);
$localTime = date("H:i");
fwrite($ibushandle,ikeText(0,48,$localTime));
}
fwrite($ibushandle,ikeDrawLine($iconx+3,45,$iconx+ 5,45));
fwrite($ibushandle,ikeDrawLine($iconx+2,46,$iconx+ 2,54));
fwrite($ibushandle,ikeDrawLine($iconx+4,48,$iconx+ 4,54));
fwrite($ibushandle,ikeDrawLine($iconx+6,46,$iconx+ 6,54));
fwrite($ibushandle,ikeDrawLine($iconx+1,55,$iconx+ 7,55));
fwrite($ibushandle,ikeDrawLine($iconx,56,$iconx+8, 56));
fwrite($ibushandle,ikeDrawLine($iconx,57,$iconx+8, 57));
fwrite($ibushandle,ikeDrawLine($iconx,58,$iconx+8, 58));
fwrite($ibushandle,ikeDrawLine($iconx+1,59,$iconx+ 7,59));
fwrite($ibushandle,ikeDrawLine($iconx+2,60,$iconx+ 6,60));
fwrite($ibushandle,ikeText($iconx+12,48,(string)$t emperaturecoolant.chr(0xb0)."C"));
$whereamilines=explode(",",$whereami);
$allines=array();
foreach ($whereamilines as $thiswhereiamline) {
$splitwhereiamline=Linesplit($thiswhereiamline,18) ;
foreach ($splitwhereiamline as $thissplitwhereiamline) {
$allines[]=$thissplitwhereiamline;
}
}
$n=0;
foreach ($allines as $thisalline) {
if ($n<4) {
if (trim($thisalline)<>"") {
fwrite($ibushandle,ikeText(0,$n*10,trim($thisallin e)));
} else {
fwrite($ibushandle,ikeText(0,$n*10," "));
}
}
$n++;
}
fwrite($ibushandle,ikeCommit());
}
}
fclose($gpshandle);
fclose($ibushandle);
fclose($logfp);

function haversineGreatCircleDistance ($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthMeanRadius = 6371) {
$deltaLatitude = deg2rad($latitudeTo - $latitudeFrom);
$deltaLongitude = deg2rad($longitudeTo - $longitudeFrom);
$a = sin($deltaLatitude / 2) * sin($deltaLatitude / 2) + cos(deg2rad($latitudeFrom)) * cos(deg2rad($latitudeTo)) * sin($deltaLongitude / 2) * sin($deltaLongitude / 2);
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
return $earthMeanRadius * $c;
}
function webGet($url,$timeout) {
$ch = curl_init(); //initiate the curl session
curl_setopt($ch, CURLOPT_URL, $url); //set to url to post to
curl_setopt($ch, CURLOPT_VERBOSE, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // tell curl to return data in a variable
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, (int)$timeout); // set timeout in seconds
$count=0;
$response = false;
while ($response===false&&$count<10) {
if ($count>0) {
print(curl_error($ch)."\n");
print ("CURL RE-TRY: ".$count."\n");
sleep(10);
}
$count++;
$response = curl_exec ($ch);
}
return $response;
}
function ikeText($x, $y, $text) {
$text=substr($text,0,18);
$c = strlen($text) + 9;
$gpsmessage = chr(0x3b).chr($c).chr(0xf0).chr(0x43).chr(0x00).ch r(0x1f).chr(0x00).chr($x).chr($y).$text.chr(0x00);
$gpsmessage = $gpsmessage.chr(calcChecksum($gpsmessage));
usleep(35000);
return $gpsmessage;
}
function ikeDrawLine($x1, $y1, $x2, $y2) {
$gpsmessage = chr(0x3b).chr(0x0b).chr(0xf0).chr(0x43).chr(0x61). chr(0x1d).chr(0x01).chr(0x00).chr($x1).chr($y1).ch r($x2).chr($y2);
$gpsmessage = $gpsmessage.chr(calcChecksum($gpsmessage));
usleep(35000);
return $gpsmessage;
}
function ikeDrawBox($x, $y, $w, $h) {
$gpsmessage = chr(0x3b).chr(0x0b).chr(0xf0).chr(0x43).chr(0x62). chr(0x1d).chr(0x01).chr(0x00).chr($x).chr($y).chr( $w).chr($h);
$gpsmessage = $gpsmessage.chr(calcChecksum($gpsmessage));
usleep(35000);
return $gpsmessage;
}
function ikeEraseBox($x, $y, $w, $h) {
$gpsmessage = chr(0x3b).chr(0x0c).chr(0xf0).chr(0x43).chr(0x62). chr(0x1e).chr(0x81).chr(0x10).chr(0x00).chr($x).ch r($y).chr($w).chr($h);
$gpsmessage = $gpsmessage.chr(calcChecksum($gpsmessage));
usleep(35000);
return $gpsmessage;
}
function ikeInitialise($n) {
switch($n) {
case 1:
$gpsmessage = chr(0x3b).chr(0x05).chr(0xf0).chr(0x43).chr(0xa5). chr(0x00);
break;
case 2:
$gpsmessage = chr(0x3b).chr(0x06).chr(0xf0).chr(0x43).chr(0xa4). chr(0x01).chr(0x00);
break;
case 3:
$gpsmessage = chr(0x3b).chr(0x06).chr(0xf0).chr(0x43).chr(0x82). chr(0x02).chr(0x00);
break;
}
$gpsmessage = $gpsmessage.chr(calcChecksum($gpsmessage));
usleep(35000);
return $gpsmessage;
}
function ikeClear() {
$gpsmessage = chr(0x3b).chr(0x07).chr(0xf0).chr(0x43).chr(0x80). chr(0x03).chr(0x01).chr(0x00);
$gpsmessage = $gpsmessage.chr(calcChecksum($gpsmessage));
usleep(35000);
return $gpsmessage;
}
function ikeCommit() {
$gpsmessage = chr(0x3b).chr(0x06).chr(0xf0).chr(0x43).chr(0x82). chr(0x26).chr(0x00);
$gpsmessage = $gpsmessage.chr(calcChecksum($gpsmessage));
usleep(35000);
return $gpsmessage;
}
function lineSplit($text,$n) {
$return=array();
while (strlen($text)>$n) {
$linebreak=strrpos(substr($text,0,$n)," ");
$return[]=substr($text,0,$linebreak);
$text=substr($text,strrpos(substr($text,0,$n)," ")+1,999);
}
$return[]=$text;
return $return;
}
function calcChecksum($gpsmessage) {
$chk=0;
for ($n=0;$n<strlen($gpsmessage);$n++) {
$chk = $chk^ord(substr($gpsmessage, $n, 1));

}
$checksum = $chk&0xff;
return $checksum;
}
function ikeDrawSpeedCam($handle) {
// This is slow. There is probably a way to send bitmaps. Trace TM module?
fwrite($handle,ikeDrawLine(1, 0, 57, 0));
fwrite($handle,ikeDrawLine(0, 1, 58, 1));
fwrite($handle,ikeDrawLine(1, 50, 57, 50));
fwrite($handle,ikeDrawLine(0, 49, 58, 49));
fwrite($handle,ikeDrawLine(1, 1, 1, 50));
fwrite($handle,ikeDrawLine(0, 1, 0, 49));
fwrite($handle,ikeDrawLine(58, 1, 58, 49));
fwrite($handle,ikeDrawLine(57, 0, 57, 50));
fwrite($handle,ikeDrawLine(2, 2, 2, 2));
fwrite($handle,ikeDrawLine(2, 48, 2, 48));
fwrite($handle,ikeDrawLine(56, 2, 56, 2));
fwrite($handle,ikeDrawLine(56, 48, 56, 48));
fwrite($handle,ikeDrawBox(6, 7, 30, 36));
fwrite($handle,ikeEraseBox(6, 7, 2, 1));
fwrite($handle,ikeEraseBox(6, 7, 1, 2));
fwrite($handle,ikeEraseBox(35, 7, 1, 2));
fwrite($handle,ikeEraseBox(36, 7, 2, 1));
fwrite($handle,ikeEraseBox(6, 42, 1, 2));
fwrite($handle,ikeEraseBox(7, 43, 2, 1));
fwrite($handle,ikeEraseBox(35, 42, 1, 2));
fwrite($handle,ikeEraseBox(36, 43, 2, 1));
fwrite($handle,ikeDrawBox(38, 13, 2, 21));
fwrite($handle,ikeDrawBox(42, 14, 2, 20));
fwrite($handle,ikeDrawBox(46, 17, 2, 20));
fwrite($handle,ikeDrawBox(38, 36, 10, 2));
fwrite($handle,ikeDrawBox(48, 20, 6, 11));
fwrite($handle,ikeEraseBox(25, 9, 5, 1));
fwrite($handle,ikeEraseBox(24, 10, 7, 1));
fwrite($handle,ikeEraseBox(23, 11, 3, 1));
fwrite($handle,ikeEraseBox(29, 11, 3, 1));
fwrite($handle,ikeEraseBox(23, 12, 2, 1));
fwrite($handle,ikeEraseBox(30, 12, 2, 1));
fwrite($handle,ikeEraseBox(23, 13, 2, 1));
fwrite($handle,ikeEraseBox(30, 13, 2, 1));
fwrite($handle,ikeEraseBox(23, 14, 2, 1));
fwrite($handle,ikeEraseBox(30, 14, 2, 1));
fwrite($handle,ikeEraseBox(23, 15, 3, 1));
fwrite($handle,ikeEraseBox(29, 15, 3, 1));
fwrite($handle,ikeEraseBox(24, 16, 7, 1));
fwrite($handle,ikeEraseBox(25, 17, 5, 1));
fwrite($handle,ikeEraseBox(15, 24, 5, 1));
fwrite($handle,ikeEraseBox(13, 25, 9, 1));
fwrite($handle,ikeEraseBox(12, 26, 4, 1));
fwrite($handle,ikeEraseBox(19, 26, 4, 1));
fwrite($handle,ikeEraseBox(11, 27, 4, 1));
fwrite($handle,ikeEraseBox(20, 27, 4, 1));
fwrite($handle,ikeEraseBox(10, 28, 4, 1));
fwrite($handle,ikeEraseBox(21, 28, 4, 1));
fwrite($handle,ikeEraseBox(10, 29, 3, 1));
fwrite($handle,ikeEraseBox(22, 29, 3, 1));
fwrite($handle,ikeEraseBox(9, 30, 3, 1));
fwrite($handle,ikeEraseBox(23, 30, 3, 1));
fwrite($handle,ikeEraseBox(9, 31, 3, 1));
fwrite($handle,ikeEraseBox(23, 31, 3, 1));
fwrite($handle,ikeEraseBox(9, 32, 3, 1));
fwrite($handle,ikeEraseBox(23, 32, 3, 1));
fwrite($handle,ikeEraseBox(9, 33, 3, 1));
fwrite($handle,ikeEraseBox(23, 33, 3, 1));
fwrite($handle,ikeEraseBox(10, 34, 3, 1));
fwrite($handle,ikeEraseBox(22, 34, 3, 1));
fwrite($handle,ikeEraseBox(10, 35, 4, 1));
fwrite($handle,ikeEraseBox(21, 35, 4, 1));
fwrite($handle,ikeEraseBox(11, 36, 4, 1));
fwrite($handle,ikeEraseBox(20, 36, 4, 1));
fwrite($handle,ikeEraseBox(12, 37, 4, 1));
fwrite($handle,ikeEraseBox(19, 37, 4, 1));
fwrite($handle,ikeEraseBox(13, 38, 9, 1));
fwrite($handle,ikeEraseBox(15, 39, 5, 1));
}
function get_nearest_timezone($cur_lat, $cur_long, $country_code = '') {
// Taken from stackoverflow.com (http://stackoverflow.com/users/2192812/ben)
// ben@jp
// Seems to work!
$timezone_ids = ($country_code) ? DateTimeZone::listIdentifiers(DateTimeZone::PER_CO UNTRY, $country_code) : DateTimeZone::listIdentifiers();
if($timezone_ids && is_array($timezone_ids) && isset($timezone_ids[0])) {
$time_zone = '';
$tz_distance = 0;
//only one identifier?
if (count($timezone_ids) == 1) {
$time_zone = $timezone_ids[0];
} else {
foreach($timezone_ids as $timezone_id) {
$timezone=new DateTimeZone($timezone_id);
$location=$timezone->getLocation();
$tz_lat=$location['latitude'];
$tz_long=$location['longitude'];
$theta=$cur_long - $tz_long;
$distance = (sin(deg2rad($cur_lat)) * sin(deg2rad($tz_lat))) + (cos(deg2rad($cur_lat)) * cos(deg2rad($tz_lat)) * cos(deg2rad($theta)));
$distance = acos($distance);
$distance = abs(rad2deg($distance));
if (!$time_zone || $tz_distance > $distance) {
$time_zone = $timezone_id;
$tz_distance = $distance;
}
}
}
return $time_zone;
}
return 'unknown';
}
?>

Leafie
13th May 2016, 12:20
The speed cam data [speedcam.txt] can be got here or other places: poiplaza.com

Example of the data. The whole file is 15k+ lines.

X,Y,TYPE,SPEED,DIRTYPE,DIRECTION
-0.12239,51.45051,1,30,0,0
-2.05977,52.49258,1,30,0,0
-2.74943,53.76879,1,30,0,0
-3.08116,53.37053,1,40,0,0
-2.24159,51.81620,1,50,0,0
-1.97101,53.44615,1,30,0,0
-0.13001,51.42379,1,30,0,0
-1.88585,52.58147,1,30,0,0
-0.18769,51.84632,1,40,0,0
-2.68811,54.56797,1,50,0,0
-2.10829,52.51769,1,30,0,0
-0.01814,52.97859,1,40,0,0
-0.40159,51.87994,1,30,0,0
-0.11921,51.60187,1,30,0,0
-3.49857,53.31895,1,30,0,0
-2.48143,53.75163,1,30,0,0
-3.27097,51.55055,1,30,0,0
-4.03668,55.93223,1,40,0,0
-1.47675,52.37858,1,60,0,0

aturi83
13th May 2016, 12:26
That's some slick work, hopefully someone will fancy taking it up mate. Seems like there's not much more to do on it to make it work.
More than happy to put some £ in if someone wants to take it on

Sent from my C6903 using Tapatalk

Leafie
13th May 2016, 13:20
Here are the main files you'll need to replicate what I have done. I ran these on a Raspberry Pi, but you can use what you like. I believe the voices and sounds to be royalty free (290Kb):
http://www.halfaworm.com/ibus/ibus.zip

Here is the whole (BIG FILE!) Raspberry Pi image of my experiments that should just boot and work (3.9Gb):
http://www.halfaworm.com/ibus/ZT75Pi.img

The 2nd file will complete uploading about 3am 14/5/16! This 1st is already there.

Enjoy! :}

Alex30013k
13th May 2016, 19:03
ive not seen this thread and always wondered if it was possible. even just to have the time and date shown, or even the track that was playing on the radio.
good work!

Leafie
13th May 2016, 19:14
Trivial to add time. If you really mean *radio* then it's going to be a Shazam job which is theoretically possible, but quite a bit of work. cd-text, rds, media player or something else might be easier.

ive not seen this thread and always wondered if it was possible. even just to have the time and date shown, or even the track that was playing on the radio.
good work!

Greeners
13th May 2016, 19:37
I wonder if the TOAF guys could take it on ????

Leafie
13th May 2016, 19:45
If someone can take the lead, I'll help where I can.

It would be great if a not for profit group could use what I have done.

I wonder if the TOAF guys could take it on ????

Leafie
3rd February 2018, 20:08
The time has come to tidy up and the test setup will be reused or binned depending on what I can do with each bit.

Still happy for someone to take this on. The only cost to you would be a courier to collect.

If anyone is interested please let me know soon and I'll box it up and weigh.

Leafie.