Joined
Last Online
Recent Posts
posted in General Discussion read more

Hello All. bvallerand here from Detroit area. I am working on using the CBT to disable and possibly augment the factory Vehicle Dynamics Control (VDC) in a 2014 Subaru Forester XT. In recent model years Subaru has made it impossible to disable the VDC in 90% of their vehicles (STI and a few others excluded).

posted in Firmware read more

I'm using CoolTerm in win7 as well.

posted in Howto read more

Now that I am using cool term I have no problem sending commands. Occasionally the CBT will get pissed off but I have been able to narrow it down and I'm pretty sure it was caused by the bus power cycling even though it has power from the usb.

If you are looking for an easy way to dump decoded id's and messages you can add this code snippet to each of the IF statements that checks for a full RX buffer in the readBus() function.

<code>
Serial.print("busId: ");
Serial.print(msg.busId);
Serial.print(" BusStat: ");
Serial.print(msg.busStatus);
Serial.print(" FrameId: ");
Serial.print(msg.frame_id, HEX);
Serial.print(" msgLen: ");
Serial.print(msg.length);
Serial.print(" Msg: ");
for(int i=0;i<msg.length;i++){
Serial.print(msg.frame_data[i], HEX);
Serial.print(".");
}
Serial.println();
</code>

This is not the best way to go about this but it is quick and dirty. Its just a bunch of print statements. You can paste it in right after the line readQueue.push(msg);

I don't know how this will function if you are using bluetooth but for quick and dirty dumping of formatted id's and messages it works.

after pasting it in, your readBus function will look something like this:

<code>
void readBus( CANBus bus ){
// Abort if readQueue is full
if( readQueue.isFull() ) return;

rx_status = bus.readStatus();

// Check buffer RX0
if( (rx_status & 0x1) == 0x1 ){
Message msg;
msg.busStatus = rx_status;
msg.busId = bus.busId;
bus.readDATA_ff_0( &msg.length, msg.frame_data, &msg.frame_id );
readQueue.push(msg);
Serial.print("busId: ");
Serial.print(msg.busId);
Serial.print(" BusStat: ");
Serial.print(msg.busStatus);
Serial.print(" FrameId: ");
Serial.print(msg.frame_id, HEX);
Serial.print(" msgLen: ");
Serial.print(msg.length);
Serial.print(" Msg: ");
for(int i=0;i<msg.length;i++){
Serial.print(msg.frame_data[i], HEX);
Serial.print(".");
}
Serial.println();
}

// Abort if readQueue is full
if( readQueue.isFull() ) return;

// Check buffer RX1
if( (rx_status & 0x2) == 0x2 ) {
Message msg;
msg.busStatus = rx_status;
msg.busId = bus.busId;
bus.readDATA_ff_1( &msg.length, msg.frame_data, &msg.frame_id );
readQueue.push(msg);
Serial.print("busId: ");
Serial.print(msg.busId);
Serial.print(" BusStat: ");
Serial.print(msg.busStatus);
Serial.print(" FrameId: ");
Serial.print(msg.frame_id, HEX);
Serial.print(" msgLen: ");
Serial.print(msg.length);
Serial.print(" Msg: ");
for(int i=0;i<msg.length;i++){
Serial.print(msg.frame_data[i]);
Serial.print(".");
}
Serial.println();
}

}</code>

posted in Howto read more

Awesome Derek thanks. Just wanted to point out a small typo...
On the getting started page it says:

Connect to your CBT Serial port and you're ready to send commands.

Send 0x0101 to get general device information.
Send 0x011001 to get CAN Bus 1 information.
Send 0x011001 to get CAN Bus 2 information.
Send 0x011001 to get CAN Bus 3 information

When it should say:

Send 0x011001 to get CAN Bus 1 information.
Send 0x011002 to get CAN Bus 2 information.
Send 0x011003 to get CAN Bus 3 information

posted in Howto read more

ahhhhhh. Ok. Makes sense. Thanks.

posted in Howto read more

Has anyone had luck sending Serial Commands? What exactly are you typing into the serial monitor?
According to http://docs.canb.us/firmware/api.html the command and sub command for print debug are 0x01 0x01. But what do I have to type to send that command?