xbee library

Dependents:   HEPTA_COM

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers HeptaXbee.cpp Source File

HeptaXbee.cpp

00001 #include "HeptaXbee.h"
00002 #include "mbed.h"
00003 #include  <stdarg.h>
00004 
00005 HeptaXbee::HeptaXbee(PinName tx, PinName rx) : xbee(tx,rx)
00006 {
00007     rcmd = 0;
00008     cmdflag = 0;
00009 }
00010 void HeptaXbee::baud(int rate)
00011 {
00012     xbee.baud(rate);
00013 }
00014 void HeptaXbee::xbee_receive(int *xrcmd, int *xcmdflag)
00015 {
00016     xbee.attach(this,&HeptaXbee::commandget,Serial::RxIrq);
00017     //xbee.printf("ssXbeedata= %d,%d",HeptaXbee::rcmd,HeptaXbee::cmdflag);
00018     *xrcmd = HeptaXbee::rcmd;
00019     *xcmdflag = HeptaXbee::cmdflag;
00020 }
00021 
00022 void HeptaXbee::initialize()
00023 {
00024     HeptaXbee::rcmd = 0;
00025     HeptaXbee::cmdflag = 0;
00026 }
00027 
00028 void HeptaXbee::commandget()
00029 {
00030     HeptaXbee::rcmd=xbee.getc();
00031     HeptaXbee::cmdflag = 1;
00032     //xbee.printf("Xbeedata= %d,%d",rcmd,cmdflag);
00033 }
00034 
00035 //*gyro×3 = A,B,C *Accel×3 = D,E,F *magnetic×3 = G,H,I *latitude = J *longitude = K *altitude = L *battery = M *temperature = N
00036 void HeptaXbee::xbee_transmit(char dataA[],char dataB[],char dataC[],char dataD[],char dataE[],
00037                               char dataF[],char dataG[],char dataH[],char dataI[],char dataJ[],
00038                               char dataK[],char dataL[],char dataM[],char dataN[])
00039 {
00040     char OutputData[255];
00041     int output_num,numA,numB,numC,numD,numE,numF,numG,numH,numI,numJ,numK,numL,numM,numN;
00042     int sum = 0;
00043     int check;
00044     numA = sizeof(dataA) / sizeof(dataA[0]);
00045     numB = sizeof(dataB) / sizeof(dataB[0]);
00046     numC = sizeof(dataC) / sizeof(dataC[0]);
00047     numD = sizeof(dataD) / sizeof(dataD[0]);
00048     numE = sizeof(dataE) / sizeof(dataE[0]);
00049     numF = sizeof(dataF) / sizeof(dataF[0]);
00050     numG = sizeof(dataG) / sizeof(dataG[0]);
00051     numH = sizeof(dataH) / sizeof(dataH[0]);
00052     numI = sizeof(dataI) / sizeof(dataI[0]);
00053     numJ = sizeof(dataJ) / sizeof(dataJ[0])*2;
00054     numK = sizeof(dataK) / sizeof(dataK[0])*2;
00055     numL = sizeof(dataL) / sizeof(dataL[0]);
00056     numM = sizeof(dataM) / sizeof(dataM[0]);
00057     numN = sizeof(dataN) / sizeof(dataN[0]);
00058     output_num=numA+numB+numC+numD+numE+numF+numG+numH+numI+numJ+numK+numL+numM+numN;
00059     int N=0,i=0,ii;
00060     for(i = 0; i <= numA-1; i++) {
00061         OutputData[N+i] = dataA[i];
00062     }
00063     N=i;
00064     for(i = 0; i <= numB-1; i++) {
00065         OutputData[N+i] = dataB[i];
00066     }
00067     N=N+i;
00068     for(i = 0; i <= numC-1; i++) {
00069         OutputData[N+i] = dataC[i];
00070     }
00071     N=N+i;
00072     for(i = 0; i <= numD-1; i++) {
00073         OutputData[N+i] = dataD[i];
00074     }
00075     N=N+i;
00076     for(i = 0; i <= numE-1; i++) {
00077         OutputData[N+i] = dataE[i];
00078     }
00079     N=N+i;
00080     for(i = 0; i <= numF-1; i++) {
00081         OutputData[N+i] = dataF[i];
00082     }
00083     N=N+i;
00084     for(i = 0; i <= numG-1; i++) {
00085         OutputData[N+i] = dataG[i];
00086     }
00087     N=N+i;
00088     for(i = 0; i <= numH-1; i++) {
00089         OutputData[N+i] = dataH[i];
00090     }
00091     N=N+i;
00092     for(i = 0; i <= numI-1; i++) {
00093         OutputData[N+i] = dataI[i];
00094     }
00095     N=N+i;
00096     for(i = 0; i <= numJ-1; i++) {
00097         OutputData[N+i] = dataJ[i];
00098     }
00099     N=N+i;
00100     for(i = 0; i <= numK-1; i++) {
00101         OutputData[N+i] = dataK[i];
00102     }
00103     N=N+i;
00104     for(i = 0; i <= numL-1; i++) {
00105         OutputData[N+i] = dataL[i];
00106     }
00107     N=N+i;
00108     for(i = 0; i <= numM-1; i++) {
00109         OutputData[N+i] = dataM[i];
00110     }
00111     N=N+i;
00112     for(i = 0; i <= numN-1; i++) {
00113         OutputData[N+i] = dataN[i];
00114     }
00115     //check sum
00116     for(ii=0; ii<output_num; ii++) {
00117         sum = sum + OutputData[ii];
00118     }
00119     check = (~sum)&0xFF;
00120     char check_sum[2],flame[2];
00121     sprintf( check_sum, "%02X", check);
00122     sprintf( flame, "%02X", output_num);
00123     // transmit data
00124     //for(int i = 0;i<2;i++){
00125     //  xbee.putc(flame[i]);//frame length
00126     //  }
00127     for(ii=0; ii<output_num; ii++) {
00128         xbee.putc(OutputData[ii]);//data
00129     }
00130     for(int i = 0; i<2; i++) {
00131         xbee.putc(check_sum[i]);
00132     }
00133     xbee.putc(0x0a);//endcode
00134 }
00135 void HeptaXbee::puts( char *s )
00136 {
00137     while ( char c    = *s++ )
00138         xbee.putc( c );
00139 }
00140 void HeptaXbee::scanf(char *format, ... )
00141 {
00142     xbee.scanf(format);
00143 }
00144 void HeptaXbee::printf( char *format, ... )
00145 {
00146     char        s[ 100 ];
00147     va_list        args;
00148 
00149     va_start( args, format );
00150     vsnprintf( s, 100, format, args );
00151     va_end( args );
00152 
00153     xbee.puts( s );
00154 }
00155 char HeptaXbee::getc()
00156 {
00157     char character;
00158     character = xbee.getc();
00159     return character;
00160 }
00161 
00162 void HeptaXbee::putc(char data)
00163 {
00164     xbee.putc(data);
00165 }