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?