Pavit Noinongyao / Mbed 2 deprecated SmartPlugBLE

Dependencies:   BLE_API mbed nRF51822

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers SPCommunication.cpp Source File

SPCommunication.cpp

00001 #include "SPCommunication.h"
00002 
00003 SPCommunication::SPCommunication():SPUart(p9,p11)
00004 {
00005     SPUart.baud(115200);
00006     SPUart.attach(this,&SPCommunication::Rxint,Serial::RxIrq);
00007     size=0;
00008     r = 0;
00009     w = 0;
00010     for (int i=0;i<128;i++) RxBuffer[i]=0;
00011 }    
00012 SPCommunication::SPCommunication(PinName tx,PinName rx,uint32_t bRate): SPUart(tx,rx){
00013 
00014     SPUart.baud(bRate);
00015      SPUart.attach(this,&SPCommunication::Rxint,Serial::RxIrq);
00016     size=0;
00017     r = 0;
00018     w = 0;
00019     for (int i=0;i<128;i++) RxBuffer[i]=0;
00020     
00021 }
00022 void SPCommunication::Rxint()
00023 {
00024  // SPUart.putc(SPUart.getc());
00025  
00026     while (SPUart.readable()){
00027     uint8_t temp = SPUart.getc();
00028     //buff.addData(temp);
00029     RxBuffer[w] = temp;
00030     if (++w >= 128) 
00031         w = 0;
00032     }
00033 }
00034 //Get crc remainder from table
00035 uint8_t SPCommunication::getCRC(uint8_t val)
00036 { 
00037     return crc8_table[val];   
00038 }
00039 
00040 // print all data store in ArrData in class
00041 void SPCommunication::printData(){
00042     //SPUart.printf("szie is %02X ",size);
00043     for(int i=0;i<size;i++)
00044         SPUart.printf("%02X ",DataArr[i]);
00045     }
00046 
00047 
00048 uint8_t* SPCommunication::RequestData(uint8_t* data)
00049 {
00050  
00051  int i=0;
00052     do // Send request Data
00053     {
00054     SPUart.printf("%c",data[i]);  
00055     i++; 
00056     }
00057     while(data[i]!='\0');
00058     wait(1);
00059     uint8_t temp = readData();
00060     //SPUart.printf("\r\n in int %02x",temp);
00061     
00062     if((uint8_t) temp == 0x7E){
00063        uint8_t err = handleData();
00064        if(err)
00065             handleData();
00066     }
00067 
00068   return 0;
00069     
00070 }
00071 
00072 
00073 uint8_t SPCommunication::handleData(){
00074     delete[] DataArr;
00075     
00076     uint8_t message;
00077     uint8_t crccheck;
00078     
00079     size=readData();
00080     //size/=2;
00081  //   SPUart.printf("\r\n Size is  %02X",size);
00082     DataArr = new uint8_t[size];
00083     uint8_t test[size+1];
00084     test[0]=size;
00085     for (uint8_t i=0;i<size;i++)
00086     {
00087            
00088             message = readData();
00089              test[i+1]=(uint8_t) message;
00090              DataArr[i] = (uint8_t) message;
00091             
00092    //         SPUart.printf("\r\n bool Data is %d value in table %d value in ctc check %d" ,message,crc8_table[message],crccheck  );
00093             
00094     }
00095 //    printf("arr Data");
00096 //    for (int i=0;i<size;i++)
00097 //        printf("%02X ",DataArr[i]);
00098     
00099     crccheck=DataArr[size-1];
00100 
00101     //printf( "\r\n val crc in arr is %02X recall fn val  ",crccheck );
00102     if( crccheck == (uint8_t) crc8Compute(test,size) )
00103         {
00104                 //SPUart.printf("hi");
00105                SPUart.printf("\r\nComplete");
00106                 
00107      //         SPUart.printf("\r\nin crc fask condition %02X add to arrData",DataArr[i]);
00108                // sum+=DataArr[i];
00109         }
00110     else
00111         {
00112             SPUart.printf("\r\nfail");
00113                 return 1;    
00114                 
00115         }   
00116     
00117     return 0;
00118 }
00119 
00120 //***********************************************************************************************************************************
00121     //Getter method for request information abour uart
00122 //***********************************************************************************************************************************
00123 
00124 uint32_t SPCommunication::getVoltage()
00125 {
00126     uint8_t com[2]={0x02,0x56};
00127     uint8_t command[4] = {0x7E,0x02,0x56,(uint8_t) crc8Compute(com,2)};
00128     RequestData(command);
00129      uint32_t Recv ;
00130     //crc8Compute(com,2);
00131     memcpy(&Recv,DataArr,32);
00132     
00133     
00134     return Recv;
00135     //printData();
00136 
00137 }
00138 uint32_t SPCommunication::getEnergy()
00139 {  
00140     uint8_t com[2]={ 0x02,'E'};
00141     uint8_t command[4] = {0x7E,0x02,'E',(uint8_t) crc8Compute(com,2)};
00142     
00143 }
00144 uint32_t SPCommunication:: getCurrent()
00145 {
00146     uint8_t com[2]={ 0x02,'I'};
00147     uint8_t command[4] = {0x7E,0x02,'I',(uint8_t) crc8Compute(com,2)};
00148     RequestData(command);
00149      uint32_t Recv ;
00150     //crc8Compute(com,2);
00151     memcpy(&Recv,DataArr+1,32);
00152     return Recv;
00153 }
00154 
00155 
00156 uint32_t  SPCommunication::getPower()
00157 {
00158     uint8_t com[2]={ 0x02,'P'};
00159     uint8_t command[4] = {0x7E,0x02,'P',(uint8_t) crc8Compute(com,2)} ;
00160     RequestData(command);
00161     
00162      uint32_t Recv ;
00163     //crc8Compute(com,2);
00164     memcpy(&Recv,DataArr+1,32);
00165     return Recv;
00166 }
00167 
00168 uint32_t  SPCommunication::getPowerFactor()
00169 {
00170     uint8_t com[2]={ 0x02,'C'};
00171     uint8_t command[4] = {0x7E,0x02,'C',(uint8_t) crc8Compute(com,2) };
00172     RequestData(command);
00173      uint32_t Recv ;
00174     //crc8Compute(com,2);
00175     memcpy(&Recv,DataArr+1,32);
00176     return Recv;
00177     
00178 }
00179 
00180 bool SPCommunication::getStateRelay()
00181 {
00182     uint8_t com[2]={ 0x02,'S'};
00183     uint8_t command[4] = {0x7E,0x02,'S',(uint8_t) crc8Compute(com,2) };
00184     RequestData(command);
00185     
00186     return DataArr[1];
00187 }
00188 
00189 bool SPCommunication::setStateRelay(uint8_t st)
00190 {
00191     uint8_t* command;
00192     if (st ==1){
00193     uint8_t com[3]={ 0x03,'S',0x01};
00194 
00195      uint8_t temp[] = {0x7E,0x03,'S',0x01,(uint8_t) crc8Compute(com,2) };
00196      command=temp;
00197     }
00198     else{
00199     uint8_t com[3]={ 0x03,'S',0x00};
00200      uint8_t temp[] = {0x7E,0x03,'S',0x00,(uint8_t) crc8Compute(com,2) };
00201      command=temp;
00202     }
00203     RequestData(command);
00204     if(DataArr[0] == command[2] && DataArr[1] == command[3] )
00205         return true;
00206     
00207     return false;
00208         
00209 }
00210 uint8_t SPCommunication::readData()
00211 {
00212     
00213     uint8_t temp=RxBuffer[r];
00214 //    if (temp == 0)
00215 //        return 0;
00216     r++;
00217     if(r>=128)
00218         r=0;
00219     return temp;
00220     
00221 }