Library for Bluetooth Low Energy Module ble 4.0 HM-11
Embed:
(wiki syntax)
Show/hide line numbers
hm11.cpp
00001 #include "hm11.h" 00002 #include "string.h" 00003 00004 00005 #define WAIT_FOR_DATA_TIMEOUT_MS 1000 00006 #define DEFAULT_WAIT_FOR_DATA_TIMEOUT_MS 50 //required to get correct data 00007 00008 HM11::HM11(PinName uartTx , PinName uartRx):mSerial(uartTx,uartRx){ 00009 00010 mSerial.baud(HM11_SERIAL_DEFAULT_BAUD ); 00011 } 00012 00013 00014 00015 bool HM11::sendSetCommand(const char* command, const int param){ 00016 00017 if(!isCorrectCommand(command,HM11_SEND_COMMAND)) 00018 return false; 00019 char dataBuf[12]; 00020 memset(dataBuf,0,sizeof(dataBuf)); 00021 snprintf(dataBuf,strlen(command)+4,"%s%s%d",hm11TestCommands[HM11_START_CMD],command,param); //TODO strlen +4 ? not all params are 1 char long 00022 sendDataToDevice(dataBuf); 00023 return true; 00024 } 00025 00026 00027 bool HM11::sendGetCommand(const char* command){ 00028 00029 if(!isCorrectCommand(command,HM11_SEND_COMMAND)) 00030 return false; 00031 char dataBuf[12]; 00032 memset(dataBuf,0,sizeof(dataBuf)); 00033 snprintf(dataBuf,strlen(hm11TestCommands[HM11_START_CMD])+strlen(command)+strlen(hm11TestCommands[HM11_QUERY_SIGN]+2),"%s%s%s\0",hm11TestCommands[HM11_START_CMD],command,hm11TestCommands[HM11_QUERY_SIGN]); 00034 sendDataToDevice(dataBuf); 00035 return true; 00036 } 00037 00038 //@param : cmdType - 0 test cmd 00039 bool HM11::isCorrectCommand(const char* command, HM11CommandType cmdType){ 00040 int i = 0 ; 00041 const char**cmdPtr=NULL; 00042 if(cmdType>=HM11_NUM_OF_COMMAND_TYPE){ 00043 00044 return false; 00045 } 00046 if(command==NULL) 00047 return false; 00048 switch(cmdType){ 00049 case HM11_TEST_COMMAND: 00050 i = HM11_NUM_OF_TEST_COMMANDS ; 00051 cmdPtr=hm11TestCommands; 00052 break; 00053 case HM11_SEND_COMMAND: 00054 i = HM11_NUM_OF_COMMANDS; 00055 cmdPtr=hm11SendCommands; 00056 break; 00057 } 00058 while(i>0){ 00059 if(strcmp(command,cmdPtr[i])==0){ 00060 return true; 00061 } 00062 i--; 00063 } 00064 return false; 00065 } 00066 //comands 00067 00068 00069 bool HM11:: waitForData(int timeoutMs){ 00070 int endTime; 00071 int startTime; // sometimes not needed 50ms 00072 Timer timer; 00073 timer.start() ; 00074 startTime=timer.read_ms(); 00075 endTime= startTime+timeoutMs; 00076 while((timer.read_ms())<endTime){ 00077 if(isRxDataAvailable()&&(timer.read_ms()-startTime)>DEFAULT_WAIT_FOR_DATA_TIMEOUT_MS) 00078 return true; 00079 } 00080 return false; 00081 } 00082 00083 00084 int HM11::sendDataToDevice(const char* data) 00085 { 00086 00087 return mSerial.printf(data); 00088 } 00089 00090 int HM11::sendDataToDevice(const uint8_t * byteData,uint8_t dataLength) 00091 { 00092 00093 return mSerial.write(byteData,dataLength); 00094 } 00095 00096 int HM11::isRxDataAvailable() 00097 { 00098 return mSerial.readable(); 00099 } 00100 00101 int HM11::copyAvailableDataToBuf(uint8_t *buf, uint8_t bufLength) 00102 { 00103 int lenCounter =0; 00104 if(buf==NULL||bufLength<1) 00105 return -1; 00106 while(isRxDataAvailable()&&lenCounter<bufLength){ 00107 buf[lenCounter++]=getDataFromRx(); 00108 } 00109 return lenCounter; 00110 } 00111 00112 bool HM11:: hexToString(uint32_t hex, char*str,uint8_t nrOfNibblesInHex) 00113 { 00114 if(nrOfNibblesInHex>8||nrOfNibblesInHex==0||str==NULL) 00115 return false; 00116 for(int i=0;i<nrOfNibblesInHex;i++){ 00117 int temp =(hex>>(i*4))&0x0F; 00118 if(temp>=0&&temp<=9) 00119 { 00120 str[nrOfNibblesInHex-i-1]=temp+'0'; 00121 } 00122 else 00123 { 00124 str[nrOfNibblesInHex-i-1]=temp+'A'-10; 00125 } 00126 } 00127 return true; 00128 } 00129 00130 00131 //returns hex in reverse direction 00132 uint32_t HM11::strToHex(char*const str,uint8_t len) //len - nr of nibbles in str 00133 { 00134 uint32_t ret=0; 00135 uint8_t temp; 00136 if(len<1||len>8||str==NULL) 00137 return 0xFFFFFFFF; 00138 00139 for(int i=0;i<len&&str[i]!='\0';i++) 00140 { 00141 if(str[i]>='0'&&str[i]<='9') 00142 { 00143 temp=str[i]-'0'; 00144 ret|=temp<<(i*4); 00145 } 00146 else if(str[i]>='A'&&str[i]<='F') 00147 { 00148 temp=str[i]-'A'+10; 00149 ret|=temp<<(i*4); 00150 } 00151 else if(str[i]>='a'&&str[i]<='f') 00152 { 00153 temp=str[i]-'a'+10; 00154 ret|=temp<<(i*4); 00155 } 00156 else 00157 return 0xFFFFFFFF; //-1 :-) 00158 } 00159 return ret; 00160 } 00161 00162 // public methods 00163 bool HM11::queryModuleAddress(char* addrBuf) 00164 { 00165 flushBuffers(); 00166 sendDataToDevice("AT+ADDR?"); 00167 char headerBuf[8];//for OK+ADDR: 00168 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00169 return false; 00170 else{ 00171 copyAvailableDataToBuf((uint8_t*)headerBuf,sizeof(headerBuf)); 00172 if(strncmp(headerBuf,"OK+ADDR:",sizeof(headerBuf)) == 0){ 00173 if(copyAvailableDataToBuf((uint8_t*)addrBuf,12)){ 00174 addrBuf[12]='\0'; 00175 return true; 00176 } 00177 } 00178 return false; 00179 } 00180 } 00181 00182 00183 bool HM11::setAdvertisingInterval(AdvertisingInterval_t advInt) 00184 { 00185 flushBuffers(); 00186 char buf[9]={"AT+ADVI"}; 00187 hexToString((uint32_t)advInt, &buf[7],1); 00188 buf[8]='\0'; 00189 sendDataToDevice(buf); 00190 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00191 return false; 00192 else 00193 { 00194 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf)); 00195 if(strncmp(buf,"OK+Set:",7) == 0){ 00196 if(strToHex(&buf[7],1)<_INVALID_ADV_INTERVAL){ 00197 return true; 00198 } 00199 } 00200 return false; 00201 } 00202 } 00203 00204 00205 AdvertisingInterval_t HM11::queryAdvertisingInterval(void) 00206 { 00207 flushBuffers(); 00208 AdvertisingInterval_t retVal=_INVALID_ADV_INTERVAL; 00209 char respBuf[8]; 00210 sendDataToDevice("AT+ADVI?"); 00211 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00212 { 00213 //nothing 00214 } 00215 else 00216 { 00217 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf)); 00218 if(strncmp(respBuf,"OK+Get:",sizeof(respBuf)-1) == 0){ 00219 retVal=(AdvertisingInterval_t)strToHex(&respBuf[sizeof(respBuf)-1],1); 00220 } 00221 00222 } 00223 return retVal; 00224 } 00225 00226 00227 bool HM11::setAdvertisingType(AdvertisingType_t advInt) 00228 { 00229 flushBuffers(); 00230 char buf[9]={"AT+ADTY"}; 00231 hexToString((uint32_t)advInt, &buf[7],1); 00232 buf[8]='\0'; 00233 sendDataToDevice(buf); 00234 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00235 return false; 00236 else 00237 { 00238 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf)); 00239 if(strncmp(buf,"OK+Set:",7) == 0){ 00240 if(strToHex(&buf[7],1)<_INVALID_ADV_TYPE){ 00241 return true; 00242 } 00243 } 00244 return false; 00245 } 00246 } 00247 00248 AdvertisingType_t HM11::queryAdvertisingType(void) 00249 { 00250 flushBuffers(); 00251 AdvertisingType_t retVal=_INVALID_ADV_TYPE; 00252 char respBuf[8]; 00253 sendDataToDevice("AT+ADTY?"); 00254 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00255 { 00256 //nothing 00257 } 00258 else 00259 { 00260 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf)); 00261 if(strncmp(respBuf,"OK+Get:",sizeof(respBuf)-1) == 0){ 00262 retVal=(AdvertisingType_t)strToHex(&respBuf[sizeof(respBuf)-1],1); 00263 } 00264 } 00265 return retVal; 00266 } 00267 00268 00269 00270 bool HM11::setAncsSwitch(uint8_t enable) 00271 { 00272 flushBuffers(); 00273 char buf[9]={"AT+ANCS"}; 00274 hexToString(enable, &buf[7],1); 00275 buf[8]='\0'; 00276 sendDataToDevice(buf); 00277 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00278 return false; 00279 else 00280 { 00281 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf)); 00282 if(strncmp(buf,"OK+Set:",7) == 0){ 00283 if(strToHex(&buf[7],1)<0x2){ 00284 return true; 00285 } 00286 } 00287 return false; 00288 } 00289 } 00290 00291 00292 00293 uint8_t HM11::queryAncsSwitch(void) 00294 { 00295 flushBuffers(); 00296 uint8_t retVal=0xFF; 00297 char respBuf[8]; 00298 sendDataToDevice("AT+ANCS?"); 00299 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00300 { 00301 retVal=0xFF; 00302 } 00303 else 00304 { 00305 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf)); 00306 if(strncmp(respBuf,"OK+Get:",sizeof(respBuf)-1) == 0){ 00307 retVal=strToHex(&respBuf[sizeof(respBuf)-1],1); 00308 } 00309 } 00310 return retVal; 00311 } 00312 00313 00314 bool HM11::setWhitelistSwitch(uint8_t enable) 00315 { 00316 flushBuffers(); 00317 char buf[9]={"AT+ALLO"}; 00318 hexToString(enable, &buf[7],1); 00319 buf[8]='\0'; 00320 sendDataToDevice(buf); 00321 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00322 return false; 00323 else 00324 { 00325 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf)); 00326 if(strncmp(buf,"OK+Set:",7) == 0){ 00327 if(strToHex(&buf[7],1)<0x2){ 00328 return true; 00329 } 00330 } 00331 return false; 00332 } 00333 } 00334 00335 00336 uint8_t HM11::queryWhitelistSwitch(void) 00337 { 00338 flushBuffers(); 00339 uint8_t retVal=0xFF; 00340 char respBuf[8]; 00341 sendDataToDevice("AT+ALLO?"); 00342 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00343 { 00344 retVal=0xFF; 00345 } 00346 else 00347 { 00348 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf)); 00349 if(strncmp(respBuf,"OK+Get:",sizeof(respBuf)-1) == 0){ 00350 retVal=strToHex(&respBuf[sizeof(respBuf)-1],1); 00351 } 00352 } 00353 return retVal; 00354 } 00355 00356 00357 bool HM11::setWhitelistMacAddress (uint8_t nrOfMacAddrLinkedToModule, const char* const macAddress) 00358 { 00359 if(nrOfMacAddrLinkedToModule>3 ||macAddress ==NULL) 00360 { 00361 return false; 00362 } 00363 char buf[19]={"AT+AD"}; 00364 flushBuffers(); 00365 hexToString(nrOfMacAddrLinkedToModule, &buf[5],1); 00366 memcpy(&buf[6],macAddress,12); 00367 buf[18]='\0'; 00368 sendDataToDevice(buf); 00369 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00370 return false; 00371 else 00372 { 00373 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf)); 00374 if(strncmp(buf,"OK+AD",5) == 0){ 00375 return true; 00376 } 00377 return false; 00378 } 00379 } 00380 00381 bool HM11::queryWhitelistMacAddress(uint8_t nrOfMacAddrLinkedToModule, char* const macAddrBuf, uint8_t macAddrBufLen) 00382 { 00383 00384 if(macAddrBuf==NULL||nrOfMacAddrLinkedToModule>3||macAddrBufLen<12) //12 -len of macAddr eg. 001122334455 00385 return false; 00386 flushBuffers(); 00387 char buf[20]={"AT+ADx??"}; 00388 buf[8]='\0'; 00389 hexToString(nrOfMacAddrLinkedToModule, &buf[5],1); 00390 sendDataToDevice(buf); 00391 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00392 return false; 00393 else 00394 { 00395 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf)); 00396 if(strncmp(buf,"OK+AD",5) == 0){ 00397 memcpy(macAddrBuf,&buf[8],12); 00398 return true; 00399 } 00400 return false; 00401 } 00402 00403 } 00404 00405 00406 bool HM11::setBatteryMonitorSwitch(uint8_t battSwitchEnable) 00407 { 00408 flushBuffers(); 00409 char buf[9]={"AT+BATCx"}; 00410 buf[8]='\0'; 00411 hexToString(battSwitchEnable, &buf[7],1); 00412 sendDataToDevice(buf); 00413 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00414 return false; 00415 else 00416 { 00417 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf)); 00418 if(strncmp(buf,"OK+Set:",7) == 0){ 00419 if(strToHex(&buf[7],1)<0x2){ 00420 return true; 00421 } 00422 } 00423 return false; 00424 } 00425 } 00426 00427 00428 uint8_t HM11::queryBatteryMonitorSwitch(void) 00429 { 00430 flushBuffers(); 00431 uint8_t retVal=0xFF; 00432 char respBuf[8]; 00433 sendDataToDevice("AT+BATC?"); 00434 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00435 { 00436 retVal=0xFF; 00437 } 00438 else 00439 { 00440 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf)); 00441 if(strncmp(respBuf,"OK+Get:",sizeof(respBuf)-1) == 0){ 00442 retVal=strToHex(&respBuf[sizeof(respBuf)-1],1); 00443 } 00444 } 00445 return retVal; 00446 } 00447 00448 00449 00450 uint8_t HM11::queryBatteryInformation(void) 00451 { 00452 flushBuffers(); 00453 uint8_t retVal=0xFF; 00454 char respBuf[12]; 00455 sendDataToDevice("AT+BATT?"); 00456 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00457 { 00458 retVal=0xFF; 00459 } 00460 else 00461 { 00462 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf)); 00463 if(strncmp(respBuf,"OK+BATT:",7) == 0){ 00464 retVal=strToHex(&respBuf[7],3); 00465 } 00466 } 00467 return retVal; 00468 00469 } 00470 00471 00472 00473 bool HM11::setIBeaconIntoServiceMode(void) //NOT USED ANYMORE 00474 { 00475 flushBuffers(); 00476 sendDataToDevice("AT+BUSHU"); 00477 char respBuf[10]; 00478 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00479 { 00480 return false; 00481 } 00482 else 00483 { 00484 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf)); 00485 if(strncmp(respBuf,"OK+BUSHU",7) == 0) 00486 { 00487 return true; 00488 } 00489 } 00490 return false; 00491 00492 } 00493 00494 00495 00496 bool HM11::setBitFormat(uint8_t bit7Format) 00497 { 00498 if(bit7Format>1) 00499 return false; 00500 flushBuffers(); 00501 char buf[9]={"AT+BIT7x"}; 00502 buf[8]='\0'; 00503 hexToString(bit7Format, &buf[7],1); 00504 sendDataToDevice(buf); 00505 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00506 return false; 00507 else 00508 { 00509 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf)); 00510 if(strncmp(buf,"OK+Set:",7) == 0){ 00511 if(strToHex(&buf[7],1)<0x2){ 00512 return true; 00513 } 00514 } 00515 return false; 00516 } 00517 } 00518 00519 00520 uint8_t HM11::queryBitFormat(void) 00521 { 00522 flushBuffers(); 00523 uint8_t retVal=0xFF; 00524 char respBuf[8]; 00525 sendDataToDevice("AT+BIT7?"); 00526 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00527 { 00528 retVal=0xFF; 00529 } 00530 else 00531 { 00532 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf)); 00533 if(strncmp(respBuf,"OK+Get:",7) == 0){ 00534 retVal=strToHex(&respBuf[7],1); 00535 } 00536 } 00537 return retVal; 00538 } 00539 00540 00541 00542 bool HM11::setBaudRate(BaudRate_t baud) 00543 { 00544 if(baud >=_INVALID_BAUDRATE) 00545 return false; 00546 flushBuffers(); 00547 char buf[9]={"AT+BAUDx"}; 00548 hexToString((uint32_t)baud, &buf[7],1); 00549 buf[8]='\0'; 00550 sendDataToDevice(buf); 00551 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00552 return false; 00553 else 00554 { 00555 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf)); 00556 if(strncmp(buf,"OK+Set:",7) == 0){ 00557 if(strToHex(&buf[7],1)<_INVALID_BAUDRATE){ 00558 return true; 00559 } 00560 } 00561 return false; 00562 } 00563 } 00564 00565 00566 BaudRate_t HM11::queryBaudRate(void) 00567 { 00568 flushBuffers(); 00569 BaudRate_t retVal=_INVALID_BAUDRATE; 00570 char respBuf[8]; 00571 sendDataToDevice("AT+BAUD?"); 00572 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00573 { 00574 //nothing 00575 } 00576 else 00577 { 00578 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf)); 00579 if(strncmp(respBuf,"OK+Get:",7) == 0){ 00580 retVal=(BaudRate_t)strToHex(&respBuf[7],1); 00581 } 00582 00583 } 00584 return retVal; 00585 } 00586 00587 00588 bool HM11::setCharacteristic(uint16_t chValue) 00589 { 00590 if(chValue <0x0001||chValue>0xFFFE) 00591 return false; 00592 flushBuffers(); 00593 char buf[14]={"AT+CHAR0xiiii"}; 00594 hexToString((uint32_t)chValue, &buf[9],4); 00595 buf[13]='\0'; 00596 sendDataToDevice(buf); 00597 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00598 return false; 00599 else 00600 { 00601 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf)); 00602 if(strncmp(buf,"OK+Set:0x",9) == 0){ 00603 return true; 00604 00605 } 00606 return false; 00607 } 00608 } 00609 00610 uint16_t HM11::queryCharacteristic(void) 00611 { 00612 flushBuffers(); 00613 uint16_t retVal=0xFFFF; 00614 char respBuf[14]; 00615 sendDataToDevice("AT+CHAR?"); 00616 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00617 { 00618 //nothing 00619 } 00620 else 00621 { 00622 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf)); 00623 if(strncmp(respBuf,"OK+Get:0x",9) == 0){ 00624 retVal=(uint16_t)strToHex(&respBuf[9],4); 00625 } 00626 } 00627 return retVal; 00628 } 00629 00630 00631 ConnectionStatus_t HM11::connectToLastDevice(void) 00632 { 00633 00634 ConnectionStatus_t retVal= _INVALID_CONECTIONSTATUS; 00635 flushBuffers(); 00636 char buf[9]={"AT+CONNL"}; 00637 buf[8]='\0'; 00638 sendDataToDevice(buf); 00639 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS*5)) 00640 { 00641 //nothing 00642 } 00643 else 00644 { 00645 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf)); 00646 if(strncmp(buf,"OK+CONN",7) == 0){ 00647 for(int i=0; i<_INVALID_CONECTIONSTATUS ;++i){ 00648 if(strncmp(&buf[7],&ConnectionStatusArr[i],1) == 0) 00649 retVal= ( ConnectionStatus_t)i; 00650 } 00651 } 00652 } 00653 return retVal; 00654 } 00655 00656 ConnectionStatus_t HM11::connectToAnAddress(const char* const macAddress) 00657 { 00658 ConnectionStatus_t retVal= _INVALID_CONECTIONSTATUS; 00659 if(macAddress ==NULL) 00660 { 00661 return retVal; 00662 } 00663 flushBuffers(); 00664 char buf[19]={"AT+CON"}; 00665 memcpy(&buf[6],macAddress,12); 00666 buf[18]='\0'; 00667 sendDataToDevice(buf); 00668 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS*5)) 00669 { 00670 //nothing 00671 } 00672 else 00673 { 00674 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf)); 00675 if(strncmp(buf,"OK+CONN",7) == 0){ 00676 for(int i=0; i<_INVALID_CONECTIONSTATUS ;++i){ 00677 if(strncmp(&buf[7],&ConnectionStatusArr[i],1) == 0) 00678 retVal= ( ConnectionStatus_t)i; 00679 } 00680 } 00681 } 00682 return retVal; 00683 } 00684 00685 00686 uint8_t HM11::queryInputOutputState(void) 00687 { 00688 flushBuffers(); 00689 uint8_t retVal=0xFF; 00690 char respBuf[12]; 00691 sendDataToDevice("AT+COL??"); 00692 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00693 { 00694 //nothing 00695 } 00696 else 00697 { 00698 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf)); 00699 if(strncmp(respBuf,"OK+Col:0x",9) == 0){ 00700 retVal=(uint8_t)strToHex(&respBuf[9],2); 00701 } 00702 } 00703 return retVal; 00704 00705 00706 } 00707 00708 00709 bool HM11::setPioCollectionRate (uint8_t colRateSec) 00710 { 00711 if(colRateSec>90) 00712 return false; 00713 flushBuffers(); 00714 char buf[9]={"AT+CYCxx"}; 00715 hexToString((uint32_t)colRateSec, &buf[6],2); 00716 buf[8]='\0'; 00717 sendDataToDevice(buf); 00718 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00719 return false; 00720 else 00721 { 00722 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf)); 00723 if(strncmp(buf,"OK+Set:",7) == 0){ 00724 uint8_t secVal= (uint8_t)strToHex(&buf[7],2); 00725 //if(secVal==colRateSec) 00726 return true; 00727 } 00728 } 00729 return false; 00730 } 00731 00732 00733 uint8_t HM11::queryPioCollectionRate(void) 00734 { 00735 flushBuffers(); 00736 uint8_t retVal=0xFF; 00737 char respBuf[12]; 00738 sendDataToDevice("AT+CYC??"); 00739 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 00740 { 00741 //nothing 00742 } 00743 else 00744 { 00745 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf)); 00746 if(strncmp(respBuf,"OK+Get:",7) == 0){ 00747 retVal=(uint8_t)strToHex(&respBuf[7],2); 00748 } 00749 } 00750 return retVal; 00751 } 00752 00753 00754 #if 0 00755 bool HM11::startDeviceDiscoveryScan(ScanResult_t* scanRes) 00756 { 00757 00758 } 00759 00760 00761 bool HM11::connectToDiscoveryDevice(ScanResult_t* scanRes) 00762 { 00763 00764 } 00765 00766 00767 00768 bool HM11::setIBeaconDeployMode(DeployMode_t depMode) 00769 { 00770 00771 } 00772 00773 00774 bool HM11::setFilterOfHmModules(FilterOfHmModules_t filter) 00775 { 00776 00777 } 00778 00779 00780 FilterOfHmModules_t HM11::queryFilterOfHmModules(void) 00781 { 00782 00783 } 00784 00785 00786 bool HM11::removeBondInformation(void) 00787 { 00788 00789 } 00790 00791 bool HM11::getSystemHelpInformation(char* helpInformationBuf) 00792 { 00793 00794 } 00795 00796 bool HM11::setModuleWorkType(ModuleWorkType_t modWorkType) 00797 { 00798 00799 } 00800 00801 00802 ModuleWorkType_t HM11::queryModuleWorkType(void) 00803 { 00804 00805 } 00806 00807 00808 00809 00810 bool HM11::setModuleIBeaconSwitch (uint8_t turnOnOff) 00811 00812 00813 uint8_t HM11::queryModuleIBeaconSwitch (void); 00814 00815 00816 00817 bool HM11::setIBeaconUuid (uint32_t uuid0,uint32_t uuid1,uint32_t uuid2, uint32_t uuid3); 00818 bool HM11::setIBeaconUuid (uint32_t* uuid); 00819 00820 00821 uint32_t HM11::queryIBeaconUuid(uint32_t* nr_of_uuid); 00822 00823 00824 00825 00826 bool HM11::setIBeaconMajor(uint16_t mjrVersion); 00827 00828 00829 uint16_t HM11::queryIBeaconMajor(void); 00830 00831 00832 00833 00834 bool HM11::setIBeaconMinor(uint16_t mnrVersion); 00835 00836 00837 uint16_t HM11::queryIBeaconMinor(void); 00838 00839 00840 00841 00842 bool HM11::setIBeaconMeasuredPower(uint16_t measuredPwr); 00843 00844 00845 00846 uint16_t HM11::queryIBeaconMeasuredPower(void); 00847 00848 00849 00850 bool HM11::setModuleWorkMode(ModuleWorkMode_t workMode); 00851 00852 00853 00854 ModuleWorkMode_t HM11::queryModuleWorkMode(void); 00855 00856 00857 00858 00859 bool HM11::setModuleName(char* name, uint8_t nameLength); 00860 00861 00862 bool HM11::queryModuleName(char *name); 00863 00864 00865 00866 00867 bool HM11::setParityBit(ParityBit_t pBit); 00868 00869 00870 00871 ParityBit_t HM11::queryParityBit(void); 00872 00873 00874 bool HM11::setPio1OutputStatus(uint8_t status); 00875 00876 00877 00878 uint8_t HM11::queryPio1OutputStatus(void); 00879 00880 00881 00882 00883 00884 bool HM11::setPioPinsOutput(uint8_t nrOfPio, uint8_t val ); 00885 00886 00887 uint8_t HM11::queryPioPinsOutput(uint8_t nrOfPio); 00888 00889 00890 00891 00892 bool HM11::setPinCode (uint32_t pinCode ); 00893 00894 00895 00896 uint8_t HM11::queryPinCode (void); 00897 00898 00899 00900 00901 bool HM11::setModulePower(ModulePower_t modPower); 00902 00903 00904 00905 ModulePower_t HM11::queryModulePower (void); 00906 00907 00908 00909 bool HM11::setModuleSleepType(uint8_t modSleepType ); 00910 00911 00912 00913 uint8_t HM11::queryModuleSleepType (void); 00914 00915 00916 00917 00918 bool HM11::restoreAll(void); 00919 00920 00921 bool HM11::restartModule(void); 00922 00923 00924 00925 bool HM11::setMasterAndSlaveRole(uint8_t role); 00926 00927 00928 00929 uint8_t HM11::queryMasterAndSlaveRole(void); 00930 00931 00932 00933 00934 uint8_t HM11::queryRssiValue(void); 00935 00936 00937 00938 00939 char* HM11::queryLastConnectedDeviceAddress(void); 00940 00941 00942 00943 00944 bool HM11::setModuleSensorWorkInterval(uint8_t interval); 00945 00946 00947 00948 uint8_t HM11::queryModuleSensorWorkInterval(void); 00949 00950 00951 00952 bool HM11::workImmediately(void); 00953 00954 00955 00956 bool HM11::queryModuleIntoSleepMode(void); 00957 00958 00959 00960 bool HM11::setModuleSaveConnectedAddressParam(uint8_t saveParam); 00961 00962 00963 uint8_t HM11::queryModuleSaveConnectedAddressParam(void); 00964 00965 00966 00967 bool HM11::setSensorTypeOnModulePio(SensorType_t sensorType); 00968 00969 00970 00971 SensorType_t HM11::querySensorTypeOnModulePio(void); 00972 00973 00974 bool HM11::setDiscoveryParameter (SensorType_t discoverParam); 00975 00976 00977 uint8_t HM11::queryDiscoveryParameter (void); 00978 00979 00980 00981 00982 bool HM11::queryModuleSensorTempAndHumidity(uint8_t* temp, uint8_t* hum); 00983 00984 00985 00986 bool HM11::queryDS18B20SensorTemperature (uint8_t* temp); 00987 00988 00989 00990 00991 bool HM11::setModuleConnectRemoteDeviceTimeoutValue(uint32_t timeout); 00992 00993 00994 00995 00996 uint32_t HM11::queryModuleConnectRemoteDeviceTimeoutValue(void); 00997 00998 00999 01000 bool HM11::setModuleBondMode(BondMode_t bondMode); 01001 01002 01003 01004 BondMode_t HM11::queryModuleBondMode(void); 01005 01006 01007 01008 01009 01010 bool HM11::setServiceUuid (uint16_t serviceUuid); 01011 01012 01013 01014 uint16_t HM11::queryServiceUuid(void); 01015 01016 01017 01018 01019 bool HM11::setUartSleepType (uint8_t sleepType); 01020 01021 01022 01023 uint8_t HM11::queryUartSleepType(void); 01024 #endif 01025 01026 bool HM11::querySoftwareVersion(char* verBuf, uint8_t bufLen) 01027 { 01028 if(!verBuf) 01029 { 01030 return false; 01031 } 01032 flushBuffers(); 01033 sendDataToDevice("AT+VERR?"); 01034 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS)) 01035 return false; 01036 else 01037 { 01038 copyAvailableDataToBuf((uint8_t*)verBuf,bufLen); 01039 return true; 01040 } 01041 01042 01043 } 01044
Generated on Tue Jul 12 2022 17:25:07 by 1.7.2