Bluetooth Low Energy for Smart Plug
Dependencies: BLE_API mbed nRF51822
Fork of SmartPlugBLE by
SPCommunication.cpp@4:721ae30c92f8, 2015-07-14 (annotated)
- Committer:
- Slepnir
- Date:
- Tue Jul 14 10:10:19 2015 +0000
- Revision:
- 4:721ae30c92f8
- Parent:
- 3:aaa92c61931a
For debugging
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Slepnir | 3:aaa92c61931a | 1 | #include "SPCommunication.h" |
Slepnir | 3:aaa92c61931a | 2 | |
Slepnir | 3:aaa92c61931a | 3 | SPCommunication::SPCommunication():SPUart(p9,p11) |
Slepnir | 3:aaa92c61931a | 4 | { |
Slepnir | 3:aaa92c61931a | 5 | SPUart.baud(115200); |
Slepnir | 3:aaa92c61931a | 6 | SPUart.attach(this,&SPCommunication::Rxint,Serial::RxIrq); |
Slepnir | 3:aaa92c61931a | 7 | size=0; |
Slepnir | 3:aaa92c61931a | 8 | r = 0; |
Slepnir | 3:aaa92c61931a | 9 | w = 0; |
Slepnir | 3:aaa92c61931a | 10 | for (int i=0;i<128;i++) RxBuffer[i]=0; |
Slepnir | 3:aaa92c61931a | 11 | } |
Slepnir | 3:aaa92c61931a | 12 | SPCommunication::SPCommunication(PinName tx,PinName rx,uint32_t bRate): SPUart(tx,rx){ |
Slepnir | 3:aaa92c61931a | 13 | |
Slepnir | 3:aaa92c61931a | 14 | SPUart.baud(bRate); |
Slepnir | 3:aaa92c61931a | 15 | SPUart.attach(this,&SPCommunication::Rxint,Serial::RxIrq); |
Slepnir | 3:aaa92c61931a | 16 | size=0; |
Slepnir | 3:aaa92c61931a | 17 | r = 0; |
Slepnir | 3:aaa92c61931a | 18 | w = 0; |
Slepnir | 3:aaa92c61931a | 19 | for (int i=0;i<128;i++) RxBuffer[i]=0; |
Slepnir | 3:aaa92c61931a | 20 | |
Slepnir | 3:aaa92c61931a | 21 | } |
Slepnir | 3:aaa92c61931a | 22 | void SPCommunication::Rxint() |
Slepnir | 3:aaa92c61931a | 23 | { |
Slepnir | 4:721ae30c92f8 | 24 | SPUart.printf("\r\n Por %02X",SPUart.getc()); |
Slepnir | 3:aaa92c61931a | 25 | |
Slepnir | 4:721ae30c92f8 | 26 | //while (SPUart.readable()){ |
Slepnir | 4:721ae30c92f8 | 27 | //uint8_t temp = SPUart.getc(); |
Slepnir | 4:721ae30c92f8 | 28 | |
Slepnir | 3:aaa92c61931a | 29 | //buff.addData(temp); |
Slepnir | 4:721ae30c92f8 | 30 | //RxBuffer[w] = temp; |
Slepnir | 3:aaa92c61931a | 31 | if (++w >= 128) |
Slepnir | 3:aaa92c61931a | 32 | w = 0; |
Slepnir | 4:721ae30c92f8 | 33 | //} |
Slepnir | 3:aaa92c61931a | 34 | } |
Slepnir | 3:aaa92c61931a | 35 | //Get crc remainder from table |
Slepnir | 3:aaa92c61931a | 36 | uint8_t SPCommunication::getCRC(uint8_t val) |
Slepnir | 3:aaa92c61931a | 37 | { |
Slepnir | 3:aaa92c61931a | 38 | return crc8_table[val]; |
Slepnir | 3:aaa92c61931a | 39 | } |
Slepnir | 3:aaa92c61931a | 40 | |
Slepnir | 3:aaa92c61931a | 41 | // print all data store in ArrData in class |
Slepnir | 3:aaa92c61931a | 42 | void SPCommunication::printData(){ |
Slepnir | 3:aaa92c61931a | 43 | //SPUart.printf("szie is %02X ",size); |
Slepnir | 3:aaa92c61931a | 44 | for(int i=0;i<size;i++) |
Slepnir | 3:aaa92c61931a | 45 | SPUart.printf("%02X ",DataArr[i]); |
Slepnir | 3:aaa92c61931a | 46 | } |
Slepnir | 3:aaa92c61931a | 47 | |
Slepnir | 3:aaa92c61931a | 48 | |
Slepnir | 3:aaa92c61931a | 49 | uint8_t* SPCommunication::RequestData(uint8_t* data) |
Slepnir | 3:aaa92c61931a | 50 | { |
Slepnir | 3:aaa92c61931a | 51 | |
Slepnir | 3:aaa92c61931a | 52 | int i=0; |
Slepnir | 3:aaa92c61931a | 53 | do // Send request Data |
Slepnir | 3:aaa92c61931a | 54 | { |
Slepnir | 3:aaa92c61931a | 55 | SPUart.printf("%c",data[i]); |
Slepnir | 3:aaa92c61931a | 56 | i++; |
Slepnir | 3:aaa92c61931a | 57 | } |
Slepnir | 3:aaa92c61931a | 58 | while(data[i]!='\0'); |
Slepnir | 4:721ae30c92f8 | 59 | wait(2); |
Slepnir | 4:721ae30c92f8 | 60 | |
Slepnir | 4:721ae30c92f8 | 61 | SPUart.printf("\r\n data store in buffer %d",w); |
Slepnir | 3:aaa92c61931a | 62 | uint8_t temp = readData(); |
Slepnir | 4:721ae30c92f8 | 63 | SPUart.printf("\r\n Req data %02x",temp); |
Slepnir | 3:aaa92c61931a | 64 | |
Slepnir | 3:aaa92c61931a | 65 | if((uint8_t) temp == 0x7E){ |
Slepnir | 3:aaa92c61931a | 66 | uint8_t err = handleData(); |
Slepnir | 3:aaa92c61931a | 67 | if(err) |
Slepnir | 3:aaa92c61931a | 68 | handleData(); |
Slepnir | 3:aaa92c61931a | 69 | } |
Slepnir | 4:721ae30c92f8 | 70 | SPUart.printf("return"); |
Slepnir | 3:aaa92c61931a | 71 | return 0; |
Slepnir | 3:aaa92c61931a | 72 | |
Slepnir | 3:aaa92c61931a | 73 | } |
Slepnir | 3:aaa92c61931a | 74 | |
Slepnir | 3:aaa92c61931a | 75 | |
Slepnir | 3:aaa92c61931a | 76 | uint8_t SPCommunication::handleData(){ |
Slepnir | 3:aaa92c61931a | 77 | delete[] DataArr; |
Slepnir | 3:aaa92c61931a | 78 | |
Slepnir | 3:aaa92c61931a | 79 | uint8_t message; |
Slepnir | 3:aaa92c61931a | 80 | uint8_t crccheck; |
Slepnir | 3:aaa92c61931a | 81 | |
Slepnir | 3:aaa92c61931a | 82 | size=readData(); |
Slepnir | 3:aaa92c61931a | 83 | //size/=2; |
Slepnir | 3:aaa92c61931a | 84 | // SPUart.printf("\r\n Size is %02X",size); |
Slepnir | 3:aaa92c61931a | 85 | DataArr = new uint8_t[size]; |
Slepnir | 3:aaa92c61931a | 86 | uint8_t test[size+1]; |
Slepnir | 3:aaa92c61931a | 87 | test[0]=size; |
Slepnir | 3:aaa92c61931a | 88 | for (uint8_t i=0;i<size;i++) |
Slepnir | 3:aaa92c61931a | 89 | { |
Slepnir | 3:aaa92c61931a | 90 | |
Slepnir | 3:aaa92c61931a | 91 | message = readData(); |
Slepnir | 3:aaa92c61931a | 92 | test[i+1]=(uint8_t) message; |
Slepnir | 3:aaa92c61931a | 93 | DataArr[i] = (uint8_t) message; |
Slepnir | 3:aaa92c61931a | 94 | |
Slepnir | 3:aaa92c61931a | 95 | // SPUart.printf("\r\n bool Data is %d value in table %d value in ctc check %d" ,message,crc8_table[message],crccheck ); |
Slepnir | 3:aaa92c61931a | 96 | |
Slepnir | 3:aaa92c61931a | 97 | } |
Slepnir | 4:721ae30c92f8 | 98 | printf("arr Data"); |
Slepnir | 4:721ae30c92f8 | 99 | for (int i=0;i<size;i++) |
Slepnir | 4:721ae30c92f8 | 100 | printf("%02X ",DataArr[i]); |
Slepnir | 3:aaa92c61931a | 101 | |
Slepnir | 3:aaa92c61931a | 102 | crccheck=DataArr[size-1]; |
Slepnir | 3:aaa92c61931a | 103 | |
Slepnir | 3:aaa92c61931a | 104 | //printf( "\r\n val crc in arr is %02X recall fn val ",crccheck ); |
Slepnir | 3:aaa92c61931a | 105 | if( crccheck == (uint8_t) crc8Compute(test,size) ) |
Slepnir | 3:aaa92c61931a | 106 | { |
Slepnir | 3:aaa92c61931a | 107 | //SPUart.printf("hi"); |
Slepnir | 3:aaa92c61931a | 108 | SPUart.printf("\r\nComplete"); |
Slepnir | 3:aaa92c61931a | 109 | |
Slepnir | 3:aaa92c61931a | 110 | // SPUart.printf("\r\nin crc fask condition %02X add to arrData",DataArr[i]); |
Slepnir | 3:aaa92c61931a | 111 | // sum+=DataArr[i]; |
Slepnir | 3:aaa92c61931a | 112 | } |
Slepnir | 3:aaa92c61931a | 113 | else |
Slepnir | 3:aaa92c61931a | 114 | { |
Slepnir | 3:aaa92c61931a | 115 | SPUart.printf("\r\nfail"); |
Slepnir | 3:aaa92c61931a | 116 | return 1; |
Slepnir | 3:aaa92c61931a | 117 | |
Slepnir | 3:aaa92c61931a | 118 | } |
Slepnir | 3:aaa92c61931a | 119 | |
Slepnir | 3:aaa92c61931a | 120 | return 0; |
Slepnir | 3:aaa92c61931a | 121 | } |
Slepnir | 3:aaa92c61931a | 122 | |
Slepnir | 3:aaa92c61931a | 123 | //*********************************************************************************************************************************** |
Slepnir | 3:aaa92c61931a | 124 | //Getter method for request information abour uart |
Slepnir | 3:aaa92c61931a | 125 | //*********************************************************************************************************************************** |
Slepnir | 3:aaa92c61931a | 126 | |
Slepnir | 3:aaa92c61931a | 127 | uint32_t SPCommunication::getVoltage() |
Slepnir | 3:aaa92c61931a | 128 | { |
Slepnir | 3:aaa92c61931a | 129 | uint8_t com[2]={0x02,0x56}; |
Slepnir | 3:aaa92c61931a | 130 | uint8_t command[4] = {0x7E,0x02,0x56,(uint8_t) crc8Compute(com,2)}; |
Slepnir | 3:aaa92c61931a | 131 | RequestData(command); |
Slepnir | 3:aaa92c61931a | 132 | uint32_t Recv ; |
Slepnir | 3:aaa92c61931a | 133 | //crc8Compute(com,2); |
Slepnir | 4:721ae30c92f8 | 134 | //memcpy(&Recv,DataArr+1,32); |
Slepnir | 3:aaa92c61931a | 135 | |
Slepnir | 3:aaa92c61931a | 136 | |
Slepnir | 4:721ae30c92f8 | 137 | return 0; |
Slepnir | 3:aaa92c61931a | 138 | //printData(); |
Slepnir | 3:aaa92c61931a | 139 | |
Slepnir | 3:aaa92c61931a | 140 | } |
Slepnir | 3:aaa92c61931a | 141 | uint32_t SPCommunication::getEnergy() |
Slepnir | 3:aaa92c61931a | 142 | { |
Slepnir | 3:aaa92c61931a | 143 | uint8_t com[2]={ 0x02,'E'}; |
Slepnir | 3:aaa92c61931a | 144 | uint8_t command[4] = {0x7E,0x02,'E',(uint8_t) crc8Compute(com,2)}; |
Slepnir | 3:aaa92c61931a | 145 | |
Slepnir | 3:aaa92c61931a | 146 | } |
Slepnir | 3:aaa92c61931a | 147 | uint32_t SPCommunication:: getCurrent() |
Slepnir | 3:aaa92c61931a | 148 | { |
Slepnir | 3:aaa92c61931a | 149 | uint8_t com[2]={ 0x02,'I'}; |
Slepnir | 3:aaa92c61931a | 150 | uint8_t command[4] = {0x7E,0x02,'I',(uint8_t) crc8Compute(com,2)}; |
Slepnir | 3:aaa92c61931a | 151 | RequestData(command); |
Slepnir | 3:aaa92c61931a | 152 | uint32_t Recv ; |
Slepnir | 3:aaa92c61931a | 153 | //crc8Compute(com,2); |
Slepnir | 3:aaa92c61931a | 154 | memcpy(&Recv,DataArr+1,32); |
Slepnir | 3:aaa92c61931a | 155 | return Recv; |
Slepnir | 3:aaa92c61931a | 156 | } |
Slepnir | 3:aaa92c61931a | 157 | |
Slepnir | 3:aaa92c61931a | 158 | |
Slepnir | 3:aaa92c61931a | 159 | uint32_t SPCommunication::getPower() |
Slepnir | 3:aaa92c61931a | 160 | { |
Slepnir | 3:aaa92c61931a | 161 | uint8_t com[2]={ 0x02,'P'}; |
Slepnir | 3:aaa92c61931a | 162 | uint8_t command[4] = {0x7E,0x02,'P',(uint8_t) crc8Compute(com,2)} ; |
Slepnir | 3:aaa92c61931a | 163 | RequestData(command); |
Slepnir | 3:aaa92c61931a | 164 | |
Slepnir | 3:aaa92c61931a | 165 | uint32_t Recv ; |
Slepnir | 3:aaa92c61931a | 166 | //crc8Compute(com,2); |
Slepnir | 3:aaa92c61931a | 167 | memcpy(&Recv,DataArr+1,32); |
Slepnir | 3:aaa92c61931a | 168 | return Recv; |
Slepnir | 3:aaa92c61931a | 169 | } |
Slepnir | 3:aaa92c61931a | 170 | |
Slepnir | 3:aaa92c61931a | 171 | uint32_t SPCommunication::getPowerFactor() |
Slepnir | 3:aaa92c61931a | 172 | { |
Slepnir | 3:aaa92c61931a | 173 | uint8_t com[2]={ 0x02,'C'}; |
Slepnir | 3:aaa92c61931a | 174 | uint8_t command[4] = {0x7E,0x02,'C',(uint8_t) crc8Compute(com,2) }; |
Slepnir | 3:aaa92c61931a | 175 | RequestData(command); |
Slepnir | 3:aaa92c61931a | 176 | uint32_t Recv ; |
Slepnir | 3:aaa92c61931a | 177 | //crc8Compute(com,2); |
Slepnir | 3:aaa92c61931a | 178 | memcpy(&Recv,DataArr+1,32); |
Slepnir | 3:aaa92c61931a | 179 | return Recv; |
Slepnir | 3:aaa92c61931a | 180 | |
Slepnir | 3:aaa92c61931a | 181 | } |
Slepnir | 3:aaa92c61931a | 182 | |
Slepnir | 3:aaa92c61931a | 183 | bool SPCommunication::getStateRelay() |
Slepnir | 3:aaa92c61931a | 184 | { |
Slepnir | 3:aaa92c61931a | 185 | uint8_t com[2]={ 0x02,'S'}; |
Slepnir | 3:aaa92c61931a | 186 | uint8_t command[4] = {0x7E,0x02,'S',(uint8_t) crc8Compute(com,2) }; |
Slepnir | 3:aaa92c61931a | 187 | RequestData(command); |
Slepnir | 3:aaa92c61931a | 188 | |
Slepnir | 3:aaa92c61931a | 189 | return DataArr[1]; |
Slepnir | 3:aaa92c61931a | 190 | } |
Slepnir | 3:aaa92c61931a | 191 | |
Slepnir | 3:aaa92c61931a | 192 | bool SPCommunication::setStateRelay(uint8_t st) |
Slepnir | 3:aaa92c61931a | 193 | { |
Slepnir | 3:aaa92c61931a | 194 | uint8_t* command; |
Slepnir | 3:aaa92c61931a | 195 | if (st ==1){ |
Slepnir | 3:aaa92c61931a | 196 | uint8_t com[3]={ 0x03,'S',0x01}; |
Slepnir | 3:aaa92c61931a | 197 | |
Slepnir | 3:aaa92c61931a | 198 | uint8_t temp[] = {0x7E,0x03,'S',0x01,(uint8_t) crc8Compute(com,2) }; |
Slepnir | 3:aaa92c61931a | 199 | command=temp; |
Slepnir | 3:aaa92c61931a | 200 | } |
Slepnir | 3:aaa92c61931a | 201 | else{ |
Slepnir | 3:aaa92c61931a | 202 | uint8_t com[3]={ 0x03,'S',0x00}; |
Slepnir | 3:aaa92c61931a | 203 | uint8_t temp[] = {0x7E,0x03,'S',0x00,(uint8_t) crc8Compute(com,2) }; |
Slepnir | 3:aaa92c61931a | 204 | command=temp; |
Slepnir | 3:aaa92c61931a | 205 | } |
Slepnir | 3:aaa92c61931a | 206 | RequestData(command); |
Slepnir | 3:aaa92c61931a | 207 | if(DataArr[0] == command[2] && DataArr[1] == command[3] ) |
Slepnir | 3:aaa92c61931a | 208 | return true; |
Slepnir | 3:aaa92c61931a | 209 | |
Slepnir | 3:aaa92c61931a | 210 | return false; |
Slepnir | 3:aaa92c61931a | 211 | |
Slepnir | 3:aaa92c61931a | 212 | } |
Slepnir | 3:aaa92c61931a | 213 | uint8_t SPCommunication::readData() |
Slepnir | 3:aaa92c61931a | 214 | { |
Slepnir | 3:aaa92c61931a | 215 | |
Slepnir | 3:aaa92c61931a | 216 | uint8_t temp=RxBuffer[r]; |
Slepnir | 3:aaa92c61931a | 217 | // if (temp == 0) |
Slepnir | 3:aaa92c61931a | 218 | // return 0; |
Slepnir | 3:aaa92c61931a | 219 | r++; |
Slepnir | 3:aaa92c61931a | 220 | if(r>=128) |
Slepnir | 3:aaa92c61931a | 221 | r=0; |
Slepnir | 3:aaa92c61931a | 222 | return temp; |
Slepnir | 3:aaa92c61931a | 223 | |
Slepnir | 3:aaa92c61931a | 224 | } |