Monday, September 24, 2012

BlueSaab Software

Here's the code that you can copy & paste into Arduino & write to your chip.

// **START COPY HERE**
// ----------------------------------------------
// SECUDUINO
// http://secuduino.blogspot.com/
// By Igor Real
// 16/05/2011
// 
// Saab CDC Changer Emulator
// Seth Evans
// 23 Sep 2012
// ----------------------------------------------

#include <CAN.h>

int cdbutton;

void setup() {
  // set up CAN
  CAN.begin(47);  // Saab I-Bus is 47.619kbps
  Serial.begin(115200); 
  cdbutton = 0;
  CAN_TxMsg.header.rtr=0;  // this value never changes
  CAN_TxMsg.header.length=8;  // this value never changes
}

void loop() {
  CDC();
  delay(50);
  if (CAN.CheckNew()){
    CAN_TxMsg.data[0]++;
    CAN.ReadFromDevice(&CAN_RxMsg);
    /*if (CAN_RxMsg.id==0x3C0){
     Serial.print(CAN_RxMsg.id,HEX);
     Serial.print(";");
     Serial.print(CAN_RxMsg.data[0],HEX);
     Serial.print(";");
     Serial.print(CAN_RxMsg.data[1],HEX);
     Serial.print(";");
     Serial.print(CAN_RxMsg.data[2],HEX);
     Serial.print(";");
     Serial.print(CAN_RxMsg.data[3],HEX);
     Serial.print(";");
     Serial.print(CAN_RxMsg.data[4],HEX);
     Serial.print(";");
     Serial.print(CAN_RxMsg.data[5],HEX);
     Serial.print(";");
     Serial.print(CAN_RxMsg.data[6],HEX);
     Serial.print(";");
     Serial.println(CAN_RxMsg.data[7],HEX);
     }*/

    //if (CAN_RxMsg.id==0x3C0 && CAN_RxMsg.data[0]==0x80 && CAN_RxMsg.data[1]==0x24){
    if (CAN_RxMsg.id==0x3C0 && CAN_RxMsg.data[1]==0x24){
      cdbutton = 1;
      //Serial.print("cdbutton = ");
      //Serial.println(cdbutton);
      Serial.println("CDC");
    }

    //if (CAN_RxMsg.id==0x3C0 && CAN_RxMsg.data[0]==0x80 && CAN_RxMsg.data[1]==0x14){
    else if (CAN_RxMsg.id==0x3C0 && CAN_RxMsg.data[1]==0x14){
      cdbutton = 0;    
      //Serial.print("cdbutton = ");
      //Serial.println(cdbutton);
      Serial.println("Radio");
    }
  }
  if (cdbutton==1){
    ipod();
  }
}

void CDC(){
  CAN_TxMsg.id=0x3C8;     
  CAN_TxMsg.data[0]=0x20;
  CAN_TxMsg.data[1]=0x00;  
  CAN_TxMsg.data[2]=0x17; 
  CAN_TxMsg.data[3]=0x45;
  CAN_TxMsg.data[4]=0x33;
  CAN_TxMsg.data[5]=0x01;
  CAN_TxMsg.data[6]=0x53;
  CAN_TxMsg.data[7]=0xD0;
  CAN.send(&CAN_TxMsg);
}

void ipod(){
  CAN_TxMsg.id=0x328;     
  CAN_TxMsg.data[0]=0x42;
  CAN_TxMsg.data[1]=0x96;  
  CAN_TxMsg.data[2]=0x02; 
  CAN_TxMsg.data[3]=0x42; // B
  CAN_TxMsg.data[4]=0x6C; // l
  CAN_TxMsg.data[5]=0x75; // u
  CAN_TxMsg.data[6]=0x65; // e
  CAN_TxMsg.data[7]=0x53; // S
  CAN.send(&CAN_TxMsg);
  delay(9);

  CAN_TxMsg.id=0x328;     
  CAN_TxMsg.data[0]=0x01;
  CAN_TxMsg.data[1]=0x96;  
  CAN_TxMsg.data[2]=0x02; 
  CAN_TxMsg.data[3]=0x61; // a
  CAN_TxMsg.data[4]=0x61; // a
  CAN_TxMsg.data[5]=0x62; // b
  CAN_TxMsg.data[6]=0x20; // _
  CAN_TxMsg.data[7]=0x20; // _
  CAN.send(&CAN_TxMsg);
  //delay(10);
  /*
  CAN_TxMsg.id=0x328;     
   CAN_TxMsg.data[0]=0x00;
   CAN_TxMsg.data[1]=0x96;  
   CAN_TxMsg.data[2]=0x02; 
   CAN_TxMsg.data[3]=0x20; // _
   CAN_TxMsg.data[4]=0x00;
   CAN_TxMsg.data[5]=0x00;
   CAN_TxMsg.data[6]=0x00;
   CAN_TxMsg.data[7]=0x00;
   CAN.send(&CAN_TxMsg);
   //delay(10);
   */
}
// **STOP COPY HERE**

No comments:

Post a Comment