Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BLE_API mbed nRF51822
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 }
Generated on Sun Aug 14 2022 15:35:44 by
1.7.2