for CAN communication between mbed

Dependents:   EM_Logger EM_Mission

myCAN.cpp

Committer:
YSB
Date:
2013-08-03
Revision:
2:e0e7269bf1f0
Parent:
1:0732a5dec208

File content as of revision 2:e0e7269bf1f0:

#include "myCAN.h"
#include "IDDATA.h"

myCAN::myCAN(PinName rd,PinName td) : CAN(rd,td)
{
    frequency(CAN_BAUD);
    attach(this, &myCAN::rxHandler);
    
    time[0]='0';
    time[1]='0';
    time[2]=':';
    time[3]='0';
    time[4]='0';
    time[5]=':';
    time[6]='0';
    time[7]='0';
    time[8]='\0';
    
    latitude[0]='0';
    latitude[1]='0';
    latitude[2]='0';
    latitude[3]='0';
    latitude[4]=',';
    latitude[5]='0';
    latitude[6]='0';
    latitude[7]='0';
    latitude[8]='0';
    latitude[9]='\0';
    
    longitude[0]='0';
    longitude[1]='0';
    longitude[2]='0';
    longitude[3]='0';
    longitude[4]='0';
    longitude[5]=',';
    longitude[6]='0';
    longitude[7]='0';
    longitude[8]='0';
    longitude[9]='0';
    longitude[10]='\0';
}

void myCAN::send(char user)
{
    if(user == MISSION) {
        write(CANMessage(MISSION_STATUS,CANdata[MISSION_STATUS]));
        wait_ms(5);
    } else if(user == LOGGER) {
        write(CANMessage(GPS_TIME,CANdata[GPS_TIME]));
        wait_ms(5);
        write(CANMessage(GPS_LAT_1,CANdata[GPS_LAT_1]));
        wait_ms(5);
        write(CANMessage(GPS_LAT_2,CANdata[GPS_LAT_2]));
        wait_ms(5);
        write(CANMessage(GPS_LON_1,CANdata[GPS_LON_1]));
        wait_ms(5);
        write(CANMessage(GPS_LON_2,CANdata[GPS_LON_2]));
        wait_ms(5);
        write(CANMessage(SCP1000_PRES_TEMP,CANdata[SCP1000_PRES_TEMP]));
        wait_ms(5);
        write(CANMessage(ANGLE_DATA,CANdata[ANGLE_DATA]));
        wait_ms(5);
    } else {}
}

void myCAN::rxHandler(void)
{
    if(read(msg)){
        for(int i=0; i<8; i++) {
            CANdata[msg.id][i]=msg.data[i];
        }
    }
}

void myCAN::make_logger_senddata(char* time,int NoS,char* latitude,char* longitude,int roll,int temp,int pres)
{
    for(int i=0; i<8; i++) {
        CANdata[GPS_TIME][i] = time[i];
    }
    CANdata[GPS_LAT_2][1] = NoS;

    for(int i=0; i<8; i++) {
        CANdata[GPS_LAT_1][i] = latitude[i];
    }
    for(int i=0; i<1; i++) {
        CANdata[GPS_LAT_2][i] = latitude[i+8];
    }

    for(int i=0; i<8; i++) {
        CANdata[GPS_LON_1][i] = longitude[i];
    }
    for(int i=0; i<2; i++) {
        CANdata[GPS_LON_2][i] = longitude[i+8];
    }

    CANdata[SCP1000_PRES_TEMP][0]=(char)((pres & 0xFF0000)>>16);
    CANdata[SCP1000_PRES_TEMP][1]=(char)((pres & 0x00FF00)>>8);
    CANdata[SCP1000_PRES_TEMP][2]=(char)(pres & 0x0000FF);
    CANdata[SCP1000_PRES_TEMP][3]=(char)((temp & 0xFF00)>>8);
    CANdata[SCP1000_PRES_TEMP][4]=(char)(temp & 0x00FF);
    
    CANdata[ANGLE_DATA][0] = (char)((roll&0xFF00)>>8);
    CANdata[ANGLE_DATA][1] = (char)(roll&0x00FF);
}

char* myCAN::get_time(void)
{
    for(int i=0; i<8; i++) {
        time[i] = CANdata[GPS_TIME][i];
    }
    return time;
}

char* myCAN::get_latitude(void)
{
    for(int i=0; i<8; i++) {
        latitude[i] = CANdata[GPS_LAT_1][i];
    }
    for(int i=0; i<1; i++) {
        latitude[i+8] = CANdata[GPS_LAT_2][i];
    }
    return latitude;
}

    char* myCAN::get_longitude(void)
{
    for(int i=0; i<8; i++) {
        longitude[i] = CANdata[GPS_LON_1][i];
    }
    for(int i=0; i<1; i++) {
        longitude[i+8] = CANdata[GPS_LON_2][i];
    }
    return longitude;
}

int myCAN::get_NoS(void)
{
    NoS = CANdata[GPS_LAT_2][1];
    return NoS;
}

int myCAN::get_roll(void){
    hroll = CANdata[ANGLE_DATA][0];
    lroll = CANdata[ANGLE_DATA][1];
    roll = ((((int)(hroll))<<8) & 0xFF00) | (((int)(lroll))&0x00FF);
    return roll;
}

float myCAN::get_temp(void)
{
    temp = (float)((((int)(CANdata[SCP1000_PRES_TEMP][3]))<<8+(int)(CANdata[SCP1000_PRES_TEMP][4]))/20.0);
    return temp;
}

int myCAN::get_pres(void)
{
    pres = ((int)(CANdata[SCP1000_PRES_TEMP][0]))<<16 + ((int)(CANdata[SCP1000_PRES_TEMP][1]))<<8+(int)(CANdata[SCP1000_PRES_TEMP][8]);
    return pres;
}