Last Online
Recent Posts
posted in Firmware read more

My goal is to hook up a modified USB ELM327 to my '07 Mustang via the CBT in "channel swap" mode, enabling me to log the commands it's sending out when accessed by a program on my PC (FORScan). The messages I'm interested in at the moment are on the MS_CAN bus. To do this, I've used the provided OBD2 connector as well as making a female version to connect to the EML327. I've run these back to a breadboard and connected them as such:
MS_CAN -> CBT_Bus_2
CBT_Bus_3 - > ELM_MS_CAN

If I fire up the app, I can log traffic on bus 1 & 2 of the CBT, but nothing on 3. Also the PC SW can't talk to any of the modules on the MS_CAN bus. If I swap the MS_CAN bus over to CBT_Bus_3 I can log just fine from from the app, but of course there's no MITM capability which is the whole point.

I've made the following modifications from the latest version on git: (sorry for the long post)
<code>$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

    modified:   CANBusTriple.ino
    modified:   ChannelSwap.h

no changes added to commit (use "git add" and/or "git commit -a")</code>

<code>$ git diff CANBusTriple.ino
diff --git a/avr/examples/CANBusTriple/CANBusTriple.ino b/avr/examples/CANBusTriple/CANBusTriple.ino
index d5e1052..5e74e17 100644
--- a/avr/examples/CANBusTriple/CANBusTriple.ino
+++ b/avr/examples/CANBusTriple/CANBusTriple.ino
@@ -48,7 +48,7 @@ ServiceCall *serviceCall = new ServiceCall( &writeQueue );

Middleware *activeMiddleware[] = {

  • // new ChannelSwap(),
  • new ChannelSwap(),
    // serviceCall,
    #ifdef SLEEP_ENABLE
    new Naptime(0x0472, serialCommand),
    warning: LF will be replaced by CRLF in avr/examples/CANBusTriple/CANBusTriple.ino.
    The file will have its original line endings in your working directory.</code>

<code>$ git diff ChannelSwap.h
diff --git a/avr/examples/CANBusTriple/ChannelSwap.h b/avr/examples/CANBusTriple/ChannelSwap.h
index 7c4990a..7994f9e 100644
--- a/avr/examples/CANBusTriple/ChannelSwap.h
+++ b/avr/examples/CANBusTriple/ChannelSwap.h
@@ -20,14 +20,18 @@ Message ChannelSwap::process( Message msg )

switch( msg.busId ){
case 1:

  • msg.busId = 3;
  • msg.dispatch = true;
  • //msg.busId = 3;
  • //msg.dispatch = true;
  • msg.dispatch = false;
    case 2:
  • msg.dispatch = false;
  • //msg.dispatch = false;
  • msg.busId = 3;
  • msg.dispatch = true;
    case 3:
  • msg.busId = 1;
  • //msg.busId = 1;
  • msg.busId = 2;
    msg.dispatch = true;

Can anyone see something I'm misssing?


posted in Howto read more

Hey James,

I'm not sure how much help I'll be, but I'll give it a shot.

I found this PDF that I'm assuming is for the same device: - Page 8 being of particular importance for this message.

I'm guessing the Message ID is 0x308 based on the $308.

Typically you're looking at an 8 byte payload. That's 64 bits of payload.

There are two parts to the message: bits 5-7 are the parkrequest section and bits 8-16 are the MotorSpd section. I would assume that bits 0-5 are simply ignored and can be left as 0's. parkrequest is 0x01 for park. MotorSpd can be left as 0's for now.

The byte order Intel means that it's <a href="">little-endian</a>.

So putting that all together, we have a message ID of 0x308 and a payload of 0000000001000000(b) == 0x40(h). So I'd try sending: MsgID=0x308 with payload=0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00

If that doesn't work, I'd try switching the endianness. Best of luck getting it going! Maybe someone else will have some more tips if that doesn't work.


posted in General Discussion read more

If anyone needs some inspiration for cool things to do with the CBT or just wants to watch a cool video or two, check out this article on HaD.

posted in General Discussion read more

@cleturno‌ While git is amazing and I certainly wouldn't discourage you from learning it, it won't really help you out with the CBT. Hex (hexadecimal) is different numbering system. Instead of 0-9 it uses 0-F. Google is your friend here. As far as actual programming, I'd suggest looking through the example sketches provided with the Arduino IDE. It's very similar to C. Best of luck!

posted in Howto read more

I believe you want 115200 baud.

Looks like your connection to CANBus Triple was lost, please wait while we try to reconnect.