Library for Bluetooth Low Energy Module ble 4.0 HM-11
Embed:
(wiki syntax)
Show/hide line numbers
hm11.h
00001 /* 00002 @file hm11.h 00003 00004 @brief Bluetooth Low Energy v4.0 HM-11 Breakout Library 00005 00006 @Author lukasz uszko(luszko@op.pl) 00007 00008 Tested on FRDM-KL25Z and STM32NUCLEO 00009 00010 Copyright (c) 2014 lukasz uszko 00011 Released under the MIT License (see http://mbed.org/license/mit) 00012 00013 Documentation regarding the HM-11 Bluetooth Low energy module can be found here: 00014 https://www.microduino.cc/wiki/images/f/fc/Bluetooth40_en.pdf 00015 http://txyz.info/b10n1c/datasheets/hm-11_bluetooth40_en.pdf 00016 */ 00017 00018 //HM-11 Device Pinout: 00019 // Pin Name Description 00020 // 1 UART_RTS UART interface 00021 // 2 UART_TX UART interface 00022 // 3 UART_CTS UART interface 00023 // 4 UART_RX UART interface 00024 // 5 NC NC 00025 // 6 NC NC 00026 // 7 NC NC 00027 // 8 NC NC 00028 // 9 CC V3.3 00029 // 10 NC NC or VCC 00030 // 11 RESETB Reset if low <100ms 00031 // 12 GND Ground 00032 // 13 PIO3 Programmable input/output line 00033 // 14 PIO2 Programmable input/output line 00034 // 15 PIO1 System LED 00035 // 16 PIO0 System KEY 00036 00037 // AT Commands 00038 // Factory default setting: 00039 // Name: HMSoft; Baud: 9600, N, 8, 1; Pin code: 000000; transmit 00040 00041 00042 //DEMO - HOW TO USE: 00043 //compiled and built under mbed 00044 /* 00045 ---------------------------------------- DEMO: 1st version -simple polling ---------------------------------------- 00046 #include "mbed.h" 00047 #include "hm11.h" 00048 00049 00050 #define HM11_PIN_TX PTE22 //FRDM-KL25Z UART2 00051 #define HM11_PIN_RX PTE23 00052 00053 int main() { 00054 Serial usbDebug(USBTX, USBRX); 00055 usbDebug.printf("HELLO WORLD !"); 00056 00057 00058 HM11* hm11 = new HM11( HM11_PIN_TX, HM11_PIN_RX); 00059 int counter =0; 00060 while(1) { 00061 //myled = 1; 00062 wait(0.5); 00063 usbDebug.printf("alive "); 00064 wait(0.5); 00065 char buf[2]; 00066 snprintf(buf,2,"%d",counter++); 00067 if(counter>9) 00068 counter=0; 00069 hm11->sendDataToDevice(buf); 00070 wait(0.2); 00071 00072 while(hm11->isRxDataAvailable()) 00073 usbDebug.printf("data: %c\r\n",hm11->getDataFromRx()); 00074 00075 } 00076 } 00077 */ 00078 00079 00080 00081 #ifndef HM11_H 00082 #define HM11_H 00083 00084 00085 #include "mbed.h" 00086 #include "BufferedSerial.h" 00087 00088 #define HM11_SERIAL_DEFAULT_BAUD 9600 00089 #define HM11_SERIAL_TIMEOUT 10000 00090 #define HM11_SERIAL_EOL "\r\n" 00091 00092 static const char* hm11TestCommands[]={"AT","AT+","CONNL","RENEW","RESET","START","SLEEP","?"}; 00093 00094 static const char* hm11SendCommands[]={"ADDR","BAUD","CLEAR","CON", 00095 "FILT","HELP","IMME","MODE", 00096 "NOTI","NAME","PARI","PIO1", 00097 "PIO","PASS","PIN","POWE", 00098 "PWRM","ROLE", 00099 "RSSI","RADD","STOP", 00100 "SAVE","TCON","TYPE","VERR","VERS" 00101 }; 00102 00103 static const char* HM11ReceiveMsgs[]={"OK","OK+","Get:","Set:","LOST","ADDR:","CLEAR","CONN", 00104 "NAME","Set","PIO:","RENEW","RESET","RSSI:","RADD:", 00105 "START","SLEEP","TCON","RSSI:","RADD:","CONNF" 00106 }; 00107 00108 typedef enum hm11CommandsType_t{ 00109 HM11_TEST_COMMAND=0, 00110 HM11_SEND_COMMAND, 00111 HM11_NUM_OF_COMMAND_TYPE 00112 }HM11CommandType; 00113 00114 typedef enum hm11TestCommands_t{ 00115 HM11_AT_TEST =0, 00116 HM11_START_CMD, 00117 HM11_CONNECT_TO_LAST_SUCCEEDED_DEVICE , // 00118 HM11_RESTORE_ALL, // 00119 HM11_RESET_MODULE, // 00120 HM11_WORK_IMMEDIATELY, // 00121 HM11_SLEEP_MODE, // 00122 HM11_QUERY_SIGN, 00123 HM11_NUM_OF_TEST_COMMANDS 00124 }HM11TestCommands; 00125 00126 00127 typedef enum hm11Commands_t{ 00128 HM11_ADDRESS, 00129 HM11_BAUDRATE, 00130 HM11_CLEAR_LAST_CONNECTED_DEVICE_ADDRESS , 00131 HM11_CONNECT_TO_ADDRESS, 00132 HM11_FILTER_AT_COMMAND_PARAMETER, 00133 HM11_HELP_INFORMATION, 00134 HM11_MODULE_WORK_TYPE, 00135 HM11_MODULE_WORK_MODE, 00136 HM11_NOTIFY_INFORMATION, 00137 HM11_MODULE_NAME, 00138 HM11_PARITY_BIT, 00139 HM11_PIO1_OUTPT_STATUS, 00140 HM11_PIO_PINS_HIGH_OR_LOW, 00141 HM11_GET_PIN_CODE, 00142 HM11_PIN_CODE, 00143 HM11_MODULE_POWER, 00144 HM11_MODULE_SLEEP_TYPE, 00145 HM11_MASTER_SLAVE_ROLL, 00146 HM11_RSSI_VALUE, 00147 HM11_LAST_CONNECTED_DEVICE_ADDRESS, 00148 HM11_STOP_BIT, 00149 HM11_MODULE_SAVE_CONNECTED_ADDR_PARAMETER, 00150 HM11_MODULE_CONNECT_REMOTE_DEVICE_TIMEOUT_VALUE, 00151 HM11_MODULE_BOND_MODE, 00152 HM11_SOFTWARE_VERSION, 00153 HM11_NUM_OF_COMMANDS 00154 }HM11Commands; 00155 00156 /** 00157 AT Commands parameters 00158 */ 00159 typedef enum AdvertisingInterval{ 00160 _100ms=0, 00161 _152_5ms, 00162 _211_25ms, 00163 _318_75ms, 00164 _417_5ms, 00165 _546_25ms, 00166 _760ms, 00167 _852_5ms, 00168 _1022_5ms, 00169 _1285ms, 00170 _2000ms, 00171 _3000ms, 00172 _4000ms, 00173 _5000ms, 00174 _6000ms, 00175 _7000ms, 00176 _INVALID_ADV_INTERVAL 00177 }AdvertisingInterval_t; 00178 00179 00180 typedef enum AdvertisingType{ 00181 _AdvertisingScanResponseConnectable=0, 00182 _LastDeviceConnectsIn1_28Seconds, 00183 _AdvertisingScanResponse, 00184 _Advertising, 00185 _INVALID_ADV_TYPE 00186 }AdvertisingType_t; 00187 00188 typedef enum BaudRate{ 00189 _9600=0, 00190 _19200, 00191 _38400, 00192 _57600, 00193 _115200, 00194 _4800, 00195 _2400, 00196 _1200, 00197 _230400, 00198 _INVALID_BAUDRATE 00199 }BaudRate_t; 00200 00201 typedef enum ConnectionStatus{ 00202 _A, // Connecting to an address 00203 _L, // Connecting 00204 _E, // Connect error 00205 _F, // Connect Fail 00206 _N, // No Address 00207 _INVALID_CONECTIONSTATUS 00208 }ConnectionStatus_t; 00209 static const char ConnectionStatusArr[]={'A','L','E','F','N'}; 00210 00211 00212 typedef struct ScanResult{ 00213 char* addr; 00214 char*name; 00215 uint8_t nr; //0-5 00216 }ScanResult_t; 00217 00218 00219 typedef enum DeployMode{ 00220 _BROAD_AND_SCAN=1, //Allowed to broadcast and scanning 00221 _ONLY_BROAD, //Only allow broadcast 00222 _INVALID_DEPLOY_MODE 00223 }DeployMode_t; 00224 00225 00226 typedef enum FilterOfHmModules{ 00227 _ALL_BLE_MODULES=0, //Will find all BLE modules 00228 _ONLY_HM_MODULES, //Only find HM Modules 00229 _INVALID_FILTER 00230 }FilterOfHmModules_t; 00231 00232 00233 typedef enum ModuleWorkType{ 00234 _WAIT_UNTIL_AT_START_RECEIVED=0, //Will find all BLE modules 00235 _WORK_IMMEDIATELY, //Only find HM Modules 00236 _INVALID_MODULE_WORK_TYPE 00237 }ModuleWorkType_t; 00238 00239 00240 typedef enum ModuleWorkMode{ 00241 _TRANSM_MODE=0, 00242 _PIO_COLLECTION_MODE, 00243 _REMOTE_CONTROL_MODE 00244 }ModuleWorkMode_t; 00245 00246 00247 00248 00249 typedef enum ParityBit{ 00250 _NONE=0, 00251 _EVEN, 00252 _ODD 00253 }ParityBit_t; 00254 00255 00256 typedef enum ModulePower{ 00257 _23dbm=0, //-23dbm 00258 __6dbm, //-6dbm 00259 _0dbm, //0dbm 00260 _6dbm, //6dbm 00261 _INVALID_MOD_POWER 00262 }ModulePower_t; 00263 00264 00265 00266 typedef enum SensorType{ 00267 _NONE_SENSOR=0, //None 00268 _DHT11, //dht11 00269 _DS18B20, //ds18b20 00270 _INVALID_SENSOR_TYPE 00271 }SensorType_t; 00272 00273 00274 typedef enum BondMode{ 00275 _NOT_NEED_PIN_CODE=0, 00276 _AUTH_NOT_NEED_PIN, 00277 _AUTH_WITH_PIN, 00278 _AUTH_AND_BOND, 00279 _INVALID_BOND_MODE 00280 }BondMode_t; 00281 00282 00283 class HM11{ 00284 00285 public: 00286 HM11(PinName uartTx , PinName uartRx); 00287 00288 HM11(const BufferedSerial & serial); 00289 00290 bool sendGetCommand(const char* command); 00291 bool sendSetCommand(const char* command,int param); 00292 00293 bool isCorrectCommand(const char* command, HM11CommandType cmdType); 00294 00295 int sendDataToDevice(const char* data); 00296 int sendDataToDevice(const uint8_t * byteData,uint8_t dataLength); 00297 00298 int isRxDataAvailable(); 00299 00300 int copyAvailableDataToBuf(uint8_t *buf, uint8_t bufLength); 00301 00302 inline uint8_t getDataFromRx() 00303 { 00304 return mSerial.getc(); 00305 } 00306 00307 inline void flushBuffers() 00308 { 00309 mSerial.clearRxBuf(); 00310 mSerial.clearTxBuf(); 00311 } 00312 //commandMethods 00313 /** query module address 00314 * @param enable out: module addr (buf size at least 12 bytes +'\0' eg. response: 20C38FF3B987) 00315 * @return 00316 * 1 on success, 00317 * 0 on error. 00318 */ 00319 bool queryModuleAddress(char* addrBuf); 00320 00321 00322 /** Set AdvertisingInterval 00323 * @param AdvertisingInterval_t , default: 100ms 00324 * @return 00325 * 1 on success, 00326 * 0 on error. 00327 * Note1: The maximum 1285ms recommendations form the IOS system. That is to 00328 * say, 1285ms is apple allowed, but in response to scan and connected all the 00329 * time will be long. 00330 * Note2: This command is added since V517 version.V522 allow max value 7000ms 00331 */ 00332 bool setAdvertisingInterval(AdvertisingInterval_t advInt); 00333 00334 00335 /** query AdvertisingInterval 00336 * @return 00337 * AdvertisingInterval_t current set adv_interval 00338 */ 00339 AdvertisingInterval_t queryAdvertisingInterval(void); 00340 00341 00342 /** Set AdvertisingType 00343 * @param AdvertisingType_t, default: Adevertising,ScanResponse,Connectable 00344 * @return 00345 * 1 on success, 00346 * 0 on error. 00347 * Note1: Added since V519 00348 */ 00349 bool setAdvertisingType(AdvertisingType_t advType); 00350 00351 00352 /** query AdvertisingType 00353 * @return 00354 * AdvertisingType_t - current set advertising type 00355 */ 00356 AdvertisingType_t queryAdvertisingType(void); 00357 00358 00359 /** Set ANCS switch 00360 * @param enable |0: Off |1: On |Default: 0 00361 * @return 00362 * 1 on success, 00363 * 0 on error. 00364 * Note1: This command added in V524. 00365 * Note2: Please send AT+RESET to restart module if you set value 1. 00366 * Note3: Must execute AT+TYPE3 first. 00367 */ 00368 bool setAncsSwitch(uint8_t enable); 00369 00370 00371 /** query ANCS switch 00372 * @return 00373 * 1 -On, 00374 * 0 -Off 00375 * 0xFF -error 00376 * Note1: This command added in V524. 00377 * Note2: Please send AT+RESET to restart module if you set value 1. 00378 * Note3: Must execute AT+TYPE3 first. 00379 */ 00380 uint8_t queryAncsSwitch(void); 00381 00382 00383 /** Set Whitelist switch 00384 * @param enable |0: Off |1: On |Default: 0 00385 * @return 00386 * 1 on success, 00387 * 0 on error. 00388 * Note1: This command added in V523 00389 * Note2: Whitelist allow three mac address link to module. Please use AT+AD command set whitelist mac address. 00390 */ 00391 bool setWhitelistSwitch(uint8_t enable); 00392 00393 00394 /** query Whitelist Switch 00395 * @return 00396 * 1 - On, 00397 * 0 - Off, 00398 * 0xFF -error. 00399 * Note1: This command added in V523 00400 * Note2: Whitelist allow three mac address link to module. Please use AT+AD command set whitelist mac address. 00401 */ 00402 uint8_t queryWhitelistSwitch(void); 00403 00404 00405 /** Set whitelist mac address 00406 * @param nrOfMacAddrLinkedToModule |1,2,3 00407 * @param macAddress |eg. 001122334455 00408 * @return 00409 * 1 on success, 00410 * 0 on error. 00411 */ 00412 bool setWhitelistMacAddress(uint8_t nrOfMacAddrLinkedToModule, const char* const macAddress); 00413 00414 00415 /** query whitelist mac address 00416 * @param: 00417 * [in]: nrOfMacAddrLinkedToModule |1,2,3 00418 * [in]: len of mac addr buf 00419 * [out]:macAddrBuf 00420 * @return 00421 * true - ok 00422 * false - error 00423 */ 00424 bool queryWhitelistMacAddress(uint8_t nrOfMacAddrLinkedToModule, char* const macAddrBuf, uint8_t macAddrBufLen); 00425 00426 00427 /** Set battery monitor switch 00428 * @param uint8_t battSwitchEnable: |0: Off |1: On |Default: 0 00429 * @return 00430 * 1 on success, 00431 * 0 on error. 00432 * Note1: This command added in V520 00433 */ 00434 bool setBatteryMonitorSwitch(uint8_t battSwitchEnable); 00435 00436 00437 /** query BatteryMonitorSwitch 00438 * @return 00439 * batt switch state: |0: Off |1: On 00440 * 0xFF -error 00441 * Note1: This command added in V520. 00442 */ 00443 uint8_t queryBatteryMonitorSwitch(void); 00444 00445 00446 00447 /**Query battery information 00448 * @return 00449 * batt information: 000~100 00450 * 0xFF -error 00451 * 00452 * There has three ways to get battery information: 00453 a. Before establishing a connection, Send “AT+BATT?” through UART. 00454 b. After established a connection, In Mode 1 or 2, remote side send“AT+BATT?” 00455 Battery information has included in scan response data package, one hour update once 00456 */ 00457 uint8_t queryBatteryInformation(void); 00458 00459 00460 00461 /** Set iBeacon into service mode(*) 00462 * @return 00463 * 1 on success, 00464 * 0 on error. 00465 * This command is added in V520, Removed in V521, Please use AT+DELO 00466 * This command set iBeacon into service mode until next power on. 00467 * In service mode, module not allow any link request. 00468 * BUSHU is Chinese spelling, meaning the deployment. 00469 * Note: Should to open iBeacon switch first (AT+IBEA). 00470 */ 00471 bool setIBeaconIntoServiceMode(void); 00472 00473 00474 00475 /** Set Bit format 00476 * @param bit7Format: 0:NotCompatible, 1:Compatible 00477 * @return 00478 * 1 NotCompatible, 00479 * 0 Compatible, 00480 * 0xFF Error 00481 * This command is used only for compatible uses 7 data bits, 2 stop bit device. 00482 */ 00483 bool setBitFormat(uint8_t bit7Format); 00484 00485 00486 /**Query BitFormat 00487 * @return 00488 * bit7 Swu=itch 00489 * 0xFF -error 00490 */ 00491 uint8_t queryBitFormat(void); 00492 00493 00494 /** Set baud rate 00495 * @param baud: Baudrate value 00496 * @return 00497 * 1 success, 00498 * 0 Error, 00499 */ 00500 bool setBaudRate(BaudRate_t baud); 00501 00502 00503 00504 /**Query baud rate 00505 * @return 00506 * Baudrate_t - Baudrate value 00507 */ 00508 BaudRate_t queryBaudRate(void); 00509 00510 /** Set Characteristic value 00511 * @param chValue (characteristic value): 0x0001~0xFFFE 00512 * @return 00513 * 1 success, 00514 * 0 Error, 00515 */ 00516 bool setCharacteristic(uint16_t chValue); 00517 00518 00519 00520 /**Query Characteristic value 00521 * @return 00522 * characteristic value: 0x0001~0xFFFE 00523 * error :0xFFFF 00524 */ 00525 uint16_t queryCharacteristic(void); 00526 00527 00528 /** Try connect to last succeeded device 00529 * @return 00530 * ConnectionStatus_t connection status. 00531 * Notice: Only Central role is used. 00532 * If remote device has already connected to other device or shut down, 00533 * “OK+CONNF” will received after about 10 seconds. 00534 */ 00535 ConnectionStatus_t connectToLastDevice(void); 00536 00537 00538 /** Try connect an address 00539 * @param address e.g." 0017EA090909 " 00540 * @return connection status 00541 * Notice: Only Central role is used. 00542 * If remote device has already connected to other device or shut down, 00543 * “OK+CONNF” will received after about 10 seconds. 00544 * 00545 * Notice: Only central role is used. 00546 If remote device has already connected to other device or shut down, 00547 “OK+CONNF” will received after about 10 Seconds. 00548 e.g. 00549 Try to connect an device which MAC address is 00:17:EA:09:09:09 00550 Send: AT+CON0017EA090909 00551 May receive a reply: 00552 OK+CONNA ========= Accept request, connecting 00553 OK+CONNE ========= Connect error 00554 OK+CONN ========= Connected, if AT+NOTI1 is setup 00555 OK+CONNF ========= Connect Failed, After 10 seconds 00556 */ 00557 ConnectionStatus_t connectToAnAddress(const char* address); 00558 00559 00560 /**Query PIO04~PIO11 input(output) state 00561 * @return 00562 * in/out state: 0x00~0xFF 00563 * 00564 * This command is added since V515 version. 00565 */ 00566 uint8_t queryInputOutputState(void); 00567 00568 00569 /**Set PIO collection rate 00570 * @param colRateSec (PIO collection rate): 00-99 unit[s] 00571 * @return 00572 * 1 success, 00573 * 0 Error, 00574 * 00575 * In mode 1, when PIO state is change, module will send OK+Col:[xx] to 00576 * UART or remote side. This command is set send interval. 00577 * This command is added since V515 version. 00578 */ 00579 bool setPioCollectionRate (uint8_t colRateSec); 00580 00581 00582 00583 /**Query PIO collection rate 00584 * @return 00585 * PIO collection rate: 00-99 unit[s] 00586 * error :0xFF 00587 */ 00588 uint8_t queryPioCollectionRate(void); 00589 00590 00591 00592 /**Start a device discovery scan 00593 * @param [out] scanRes 00594 * @return 00595 * 1 success, 00596 * 0 Error, 00597 00598 Please set AT+ROLE1 and AT+IMME1 first. 00599 ---usage--: 00600 Send: AT+DISC? 00601 Recv: OK+DISCS 00602 Recv: OK+DISC:123456789012 (discovered device address information) 00603 If AT+SHOW1 is setup, you will receive then Name information as follow 00604 Recv: OK+NAME: xxx 00605 After send Name value, will send two extra “\r\n” value ASCII byte 00606 Recv: OK+DISC:234567890123 00607 Recv: OK+NAME: xxx 00608 After send Name value, will send two extra “\r\n” value ASCII byte ...(Max results is 6, use array 0~5) 00609 Recv: OK+DISCE 00610 Connect to a discovered device: AT+CONN0, AT+CONN1……AT+CONN5 00611 */ 00612 bool startDeviceDiscoveryScan(ScanResult_t* scanRes); 00613 00614 00615 00616 /**Connect to an Discovery device 00617 * @param [in] scanRes 00618 * @return 00619 * 1 success, 00620 * 0 Error, 00621 00622 This command is use after execute AT+DISC? 00623 This command will clear all discovery data. 00624 */ 00625 bool connectToDiscoveryDevice(ScanResult_t* scanRes); 00626 00627 00628 00629 /**Set IBeaconDeployMode 00630 * @param depMode - DeployMode_t 00631 * @return 00632 * 1 success, 00633 * 0 Error, 00634 * 00635 * After receive OK+DELO[para1], module will reset after 500ms. 00636 * This command will let module into non-connectable status until next power on. 00637 */ 00638 bool setIBeaconDeployMode(DeployMode_t depMode); 00639 00640 00641 /**Set filter of HM modules 00642 * @param filter -FilterOfHmModules_t 00643 * @return 00644 * 1 success, 00645 * 0 Error, 00646 */ 00647 bool setFilterOfHmModules(FilterOfHmModules_t filter); 00648 00649 00650 /**Query filter of HM modules 00651 * @return 00652 * Type of filter 00653 */ 00654 FilterOfHmModules_t queryFilterOfHmModules(void); 00655 00656 00657 00658 /**Remove bond information 00659 * @return 00660 * 1 success, 00661 * 0 Error, 00662 * Note1: Added in V524 version. 00663 */ 00664 bool removeBondInformation(void); 00665 00666 00667 /**System Help Information 00668 * @param [in] char* helpInformation 00669 * @return 00670 * 1 success, 00671 * 0 Error, 00672 */ 00673 bool getSystemHelpInformation(char* helpInformationBuf); 00674 00675 00676 /**Set Module work type 00677 * @param modWorkType -ModuleWorkType_t 00678 * @return 00679 * 1 success, 00680 * 0 Error, 00681 * This command is only used for Central role. 00682 */ 00683 bool setModuleWorkType(ModuleWorkType_t modWorkType); 00684 00685 00686 /**Query Module work type 00687 * @return 00688 * module Work Type -ModuleWorkType_t 00689 * This command is only used for Central role. 00690 */ 00691 ModuleWorkType_t queryModuleWorkType(void); 00692 00693 00694 00695 00696 00697 /**Set Module iBeacon Switch 00698 * @param turnOnOff 00699 0: Turn off iBeacon 00700 * 1: Turn on iBeacon 00701 * @return 00702 * 1 success, 00703 * 0 Error, 00704 * This command is added since V517 version. 00705 */ 00706 bool setModuleIBeaconSwitch (uint8_t turnOnOff); 00707 00708 00709 /**Query iBeacon switch 00710 * @return 00711 * 0: Turn off iBeacon 00712 * 1: Turn on iBeacon 00713 * This command is added since V517 version. 00714 */ 00715 uint8_t queryModuleIBeaconSwitch (void); 00716 00717 00718 00719 /**Set iBeacon UUID 00720 * @param: iBeacon Uuid - 0x00000001~0xFFFFFFFE 00721 * @return 00722 * 1 success, 00723 * 0 Error, 00724 * This command is added since V520 version. 00725 * Default: iBeacon UUID is: 74278BDA-B644-4520-8F0C-720EAF059935. 00726 * - uuid1 is 74278BDA 00727 * - uuid2 is B644-4520 00728 * - uuid1 is 8F0C-720E 00729 * - uuid1 is AF059935 00730 */ 00731 bool setIBeaconUuid (uint32_t uuid0,uint32_t uuid1,uint32_t uuid2, uint32_t uuid3); 00732 bool setIBeaconUuid (uint32_t* uuid); 00733 00734 /**Query iBeacon Uuid 00735 * @param: part of uuid - 0~3 00736 * @return 00737 * iBeacon Uuid - 0x00000001~0xFFFFFFFE 00738 * Error - 0x00 00739 * This command is added since V520 version. 00740 */ 00741 uint32_t queryIBeaconUuid(uint32_t* nr_of_uuid); 00742 00743 00744 00745 00746 /**Set Module iBeacon major version 00747 * @param: major version- 0x0001~0xFFFE 00748 * @return 00749 * 1 success, 00750 * 0 Error, 00751 ^ Default: 0xFFE0 00752 * This command is added since V517 version. 00753 */ 00754 bool setIBeaconMajor(uint16_t mjrVersion); 00755 00756 00757 /**Query Module iBeacon major 00758 * @return 00759 * iBeacon major version- 0x0001~0xFFFE 00760 * Error - 0x0000 00761 * This command is added since V517 version. 00762 */ 00763 uint16_t queryIBeaconMajor(void); 00764 00765 00766 00767 /**Set Module iBeacon minor version 00768 * @param: minorversion- 0x0001~0xFFFE 00769 * @return 00770 * 1 success, 00771 * 0 Error, 00772 ^ Default: 0xFFE1 00773 * This command is added since V517 version. 00774 */ 00775 bool setIBeaconMinor(uint16_t mnrVersion); 00776 00777 00778 /**Query Module iBeacon minor 00779 * @return 00780 * iBeacon minor version- 0x0001~0xFFFE 00781 * Error - 0x0000 00782 * This command is added since V517 version. 00783 */ 00784 uint16_t queryIBeaconMinor(void); 00785 00786 00787 00788 00789 /**Set Module iBeacon Measured power 00790 * @param: measured Power 0x0001~0xFFFE 00791 * @return 00792 * 1 success, 00793 * 0 Error, 00794 ^ Default: 0xFFE1 00795 * This command is added since V519 version. 00796 */ 00797 bool setIBeaconMeasuredPower(uint16_t measuredPwr); 00798 00799 00800 /**Query Module iBeacon Measured power 00801 * @return 00802 * iBeacon minor version- 0x0001~0xFFFE 00803 * Error - 0x0000 00804 * This command is added since V519 version. 00805 */ 00806 uint16_t queryIBeaconMeasuredPower(void); 00807 00808 00809 00810 00811 /**Set Module Work Mode 00812 * @param: WorkMode_t 00813 * @return 00814 * 1 success, 00815 * 0 Error, 00816 ^ Default: 0xFFE1 00817 * This command is added since V519 version. 00818 */ 00819 bool setModuleWorkMode(ModuleWorkMode_t workMode); 00820 00821 00822 /**Query Module Work Mode 00823 * @return 00824 * iBeacon minor version- 0x0001~0xFFFE 00825 * Error - 0x0000 00826 * This command is added since V519 version. 00827 */ 00828 ModuleWorkMode_t queryModuleWorkMode(void); 00829 00830 00831 00832 00833 /**Set Module name 00834 * @param: name, length<12 00835 * @return 00836 * 1 success, 00837 * 0 Error, 00838 */ 00839 bool setModuleName(char* name, uint8_t nameLength); 00840 00841 00842 /**Query Module name 00843 * @param: name -> ptr to response buffer 00844 * @return 00845 * 1 success, 00846 * 0 Error, 00847 */ 00848 bool queryModuleName(char *name); 00849 00850 00851 00852 00853 /**Set Module parity bit 00854 * @param: ParityBit_t pBit 00855 * @return 00856 * 1 success, 00857 * 0 Error, 00858 */ 00859 bool setParityBit(ParityBit_t pBit); 00860 00861 00862 /**Query Module parity bit 00863 * @return 00864 * _ODD, _EVEN- val 00865 _NONE - error 00866 */ 00867 ParityBit_t queryParityBit(void); 00868 00869 00870 /**Set PIO1 output status (System LED) 00871 * @param: 00872 * uint8_t status[0~1] 00873 * 0 -Unconnected Output, 500ms High 500ms Low,Connected output High. 00874 * 1 -1: Unconnected output, Low, Connected output High. 00875 * @return 00876 * 1 success, 00877 * 0 Error, 00878 */ 00879 bool setPio1OutputStatus(uint8_t status); 00880 00881 00882 /**Query PIO1 output status (System LED) 00883 * @return 00884 * uint8_t status[0~1] 00885 * 0 -Unconnected Output, 500ms High 500ms Low,Connected output High. 00886 * 1 -1: Unconnected output, Low, Connected output High. 00887 * 0xFF - error 00888 */ 00889 uint8_t queryPio1OutputStatus(void); 00890 00891 00892 00893 00894 00895 /**Set PIO pins output /high or low 00896 * @param: 00897 * nrOfPio - is which PIO pin you want to Query/Set: Value: 2,3,4,5,6,7,8,9,A,B 00898 * val - Query or setup value. Value: 0 is low and 1 is high 00899 * @return 00900 * 1 success, 00901 * 0 Error, 00902 */ 00903 bool setPioPinsOutput(uint8_t nrOfPio, uint8_t val ); 00904 00905 00906 /**Query PIO pins output /high or low 00907 * @param: 00908 * nrOfPio - is which PIO pin you want to Query/Set: Value: 2,3,4,5,6,7,8,9,A,B 00909 * @return 00910 * uint8_t val - state of given PIO: 0- low and 1 -high 00911 * 0xFF - error 00912 */ 00913 uint8_t queryPioPinsOutput(uint8_t nrOfPio); 00914 00915 00916 00917 00918 /**Set Pin Code 00919 * @param: 00920 * pinCode - value: 0~999999 00921 * Default: 000000 00922 * @return 00923 * 1 success, 00924 * 0 Error, 00925 */ 00926 bool setPinCode (uint32_t pinCode ); 00927 00928 00929 /**Query Pin Code 00930 * @return 00931 * pinCode - value: 0~999999 00932 * 0xFFFFFFFF - error 00933 */ 00934 uint8_t queryPinCode (void); 00935 00936 00937 00938 00939 /**Set Module Power 00940 * @param: 00941 * modPower - value: 0~999999 00942 * Default: 2 00943 * @return 00944 * 1 success, 00945 * 0 Error, 00946 */ 00947 bool setModulePower(ModulePower_t modPower); 00948 00949 00950 /**Query Module Power 00951 * @return 00952 * modPower 00953 * _NONE - error 00954 */ 00955 ModulePower_t queryModulePower (void); 00956 00957 00958 00959 /**Set Module sleep type 00960 * @param: 00961 * modSleepType[0~1] - value: 0-Auto sleep, 1-don’t auto sleep 00962 * Default: 1 00963 * @return 00964 * 1 success, 00965 * 0 Error, 00966 */ 00967 bool setModuleSleepType(uint8_t modSleepType ); 00968 00969 00970 /**Query Module sleep type 00971 * @return 00972 * modSleepType 00973 * 0xFF - error 00974 */ 00975 uint8_t queryModuleSleepType (void); 00976 00977 00978 00979 /**Restore all setup value to factory setup 00980 * @return 00981 * 1 success, 00982 * 0 Error, 00983 */ 00984 bool restoreAll(void); 00985 00986 00987 /**Restart module 00988 * @return 00989 * 1 success, 00990 * 0 Error, 00991 */ 00992 bool restartModule(void); 00993 00994 00995 00996 /**Set Master and Slaver Role 00997 * @param: 00998 * role[0~1] - value: 0-Peripheral , 1-Central 00999 * Default: 0 01000 * @return 01001 * 1 success, 01002 * 0 Error, 01003 */ 01004 bool setMasterAndSlaveRole(uint8_t role); 01005 01006 01007 /**Query Master and Slaver Role 01008 * @return 01009 * role [0~1] - value: 0-Peripheral , 1-Central 01010 * 0xFF - error 01011 */ 01012 uint8_t queryMasterAndSlaveRole(void); 01013 01014 01015 01016 /**Query Query RSSI Value 01017 * @return 01018 * rssi - value: 01019 * 0xFF - error 01020 * Require: AT+MODE value > 0 01021 * Note: This command only used by Remote device query when connected. 01022 */ 01023 uint8_t queryRssiValue(void); 01024 01025 01026 01027 /**Query Last Connected Device Address 01028 * @return 01029 * addr - value: 01030 * null - error 01031 */ 01032 char* queryLastConnectedDeviceAddress(void); 01033 01034 01035 01036 /**Set Module Sensor work interval 01037 * @param: 01038 * interval [0~99] - values: 0-Save when connected, 1-Don’t Save ; Unit: minute 01039 * Default: 0 01040 * @return 01041 * 1 success, 01042 * 0 Error, 01043 * Note: This command is only use for HMSensor 01044 */ 01045 bool setModuleSensorWorkInterval(uint8_t interval); 01046 01047 01048 /**Query module Sensor work interval 01049 * @return 01050 * interval [0~99] - values: 0-Save when connected, 1-Don’t Save ; Unit: minute 01051 * 0xFF - error 01052 * Note: This command is only use for HMSensor 01053 */ 01054 uint8_t queryModuleSensorWorkInterval(void); 01055 01056 01057 01058 /**Work immediately 01059 * @return 01060 * 1 success, 01061 * 0 Error, 01062 * Note: This command is only used when AT+IMME1 is setup. 01063 */ 01064 bool workImmediately(void); 01065 01066 01067 01068 /**Query Module into sleep mode 01069 * @return 01070 * 1 success, 01071 * 0 Error, 01072 * Note: Only support Peripheral role. 01073 */ 01074 bool queryModuleIntoSleepMode(void); 01075 01076 01077 01078 /**Set Module save connected address parameter 01079 * @param: 01080 * saveParam [0~1] - values: 0-Save when connected, 1-Don’t Save 01081 * Default: 0 01082 * @return 01083 * 1 success, 01084 * 0 Error, 01085 */ 01086 bool setModuleSaveConnectedAddressParam(uint8_t saveParam); 01087 01088 01089 /**Query Module save connected address parameter 01090 * @return 01091 * saveParam [0~1] - values: 0-Save when connected, 1-Don’t Save 01092 * 0xFF - error 01093 */ 01094 uint8_t queryModuleSaveConnectedAddressParam(void); 01095 01096 01097 01098 /**Set sensor type on module PIO11(HM-11 is PIO3) 01099 * @param: 01100 * SensorType_t sensorType 01101 * Default: _NONE_SENSOR 01102 * @return 01103 * 1 success, 01104 * 0 Error, 01105 * Note: This command is use for HMSensor 01106 */ 01107 bool setSensorTypeOnModulePio(SensorType_t sensorType); 01108 01109 01110 /**Query sensor type on module PIO11(HM-11 is PIO3) 01111 * @return 01112 * SensorType_t sensorType 01113 * 0xFF - _INVALID_SENSOR_TYPE 01114 * Note: This command is use for HMSensor 01115 */ 01116 SensorType_t querySensorTypeOnModulePio(void); 01117 01118 01119 01120 /**Set discovery parameter 01121 * @param: 01122 * discoverParam [0~1] - values: 0-Don’t show name, 1-Show name 01123 * Default: 0 01124 * @return 01125 * 1 success, 01126 * 0 Error, 01127 * 01128 * Note:Please execute AT+FILT0 first. 01129 * If AT+SHOW1 is setup, AT+DISC? Command will show you name information 01130 * included into scan result package. 01131 */ 01132 bool setDiscoveryParameter (SensorType_t discoverParam); 01133 01134 01135 /**Query discovery parameter 01136 * @return 01137 * discoverParam [0~1] - values: 0-Don’t show name, 1-Show name 01138 * 0xFF - error 01139 */ 01140 uint8_t queryDiscoveryParameter (void); 01141 01142 01143 01144 01145 /**Query Module Sensor Temperature and humidity(if has a sensor) 01146 * @param: 01147 * temperature[out]: 0~120 01148 * humidity[out]: 0~120 01149 * @return 01150 * 1 success, 01151 * 0 Error, 01152 * Note: This command is use for HMSensor. 01153 * This value is added into scan response data package. 01154 * Data format is 0x02, 0x16, 0x00, 0xB0, [reserved], [temperature], [ humidity], [battery]. 01155 * Android: Included in OnLeScan function result array, you can see it direct. 01156 * iOS: Included in LeScan function result NSDictionary struct, service id is 0xB000. 01157 */ 01158 bool queryModuleSensorTempAndHumidity(uint8_t* temp, uint8_t* hum); 01159 01160 01161 01162 /**Query DS18B20 Sensor temperature 01163 * @param: 01164 * temperature[out]: 0~255 01165 * @return 01166 * 1 success, 01167 * 0 Error, 01168 * Note1: This command is use for HMSensor. 01169 * Note2: Added in V523 version. 01170 */ 01171 bool queryDS18B20SensorTemperature (uint8_t* temp); 01172 01173 01174 01175 /**Set Module connect remote device timeout value 01176 * @param: 01177 * timeout- range: 0~999999; values: 0-Save when connected, 1-Don’t Save; Unit: ms 01178 * Default: 0 01179 * @return 01180 * 1 success, 01181 * 0 Error, 01182 * Note: This value is only used for Central Role, when module has Last Connected address. 01183 */ 01184 bool setModuleConnectRemoteDeviceTimeoutValue(uint32_t timeout); 01185 01186 01187 01188 /**Query connect remote device timeout value 01189 * @return 01190 * timeout- range: 0~999999; values: 0-Save when connected, 1-Don’t Save; Unit: ms 01191 * 0xFFFFFFFF - error 01192 * Note: This value is only used for Central Role, when module has Last Connected address. 01193 */ 01194 uint32_t queryModuleConnectRemoteDeviceTimeoutValue(void); 01195 01196 01197 01198 /**Set Module Bond Mode 01199 * @param: 01200 * BondMode_t bondMode; 01201 * Default: _NOT_NEED_PIN_CODE 01202 * @return 01203 * 1 success, 01204 * 0 Error, 01205 * 01206 * Important: If your module version is less than V515, please don’t use this command. 01207 * Under android 4.3 AT+TYPE1 is same to AT+TYPE2. 01208 * Note1: Value 3 is added in V524. 01209 */ 01210 bool setModuleBondMode(BondMode_t bondMode); 01211 01212 01213 01214 /**Query Module Bond Mode 01215 * @return 01216 * BondMode_t bondMode; 01217 * 0xFFFFFFFF - _INVALID_BOND_MODE 01218 * 01219 * Important: If your module version is less than V515, please don’t use this command. 01220 * Under android 4.3 AT+TYPE1 is same to AT+TYPE2. 01221 * Note1: Value _AUTH_AND_BOND, is added in V524. 01222 */ 01223 BondMode_t queryModuleBondMode(void); 01224 01225 01226 01227 01228 /**Set service UUID 01229 * @param: service UUID - 0x0001~0xFFFE 01230 * Default: 0xFFE0 01231 * @return: 01232 * 1 success, 01233 * 0 Error, 01234 */ 01235 bool setServiceUuid (uint16_t serviceUuid); 01236 01237 01238 /**Query service UUID 01239 * @return 01240 * service UUID - 0x0001~0xFFFE 01241 * Error - 0xFFFF 01242 */ 01243 uint16_t queryServiceUuid(void); 01244 01245 01246 01247 /**Set UART sleep type 01248 * @param: 01249 * sleepType- range:[0~1] 01250 * value: 0-When module into sleep mode, you can wake up module through UART. 01251 * 1-When module into sleep mode, shutdown UART too 01252 * Default: 0 01253 * @return: 01254 * 1 success, 01255 * 0 Error, 01256 */ 01257 bool setUartSleepType (uint8_t sleepType); 01258 01259 01260 /**Query UART sleep type 01261 * @return: 01262 * sleepType- range:[0~1] 01263 * value: 0-When module into sleep mode, you can wake up module through UART. 01264 * 1-When module into sleep mode, shutdown UART too 01265 * Error - 0xFF 01266 */ 01267 uint8_t queryUartSleepType(void); 01268 01269 01270 01271 /**Query Software Version 01272 * @param: 01273 * [in ] version buf len 01274 * [out] version 01275 * @return: 01276 * 1 success, 01277 * 0 Error, 01278 * Note1: This command is use for HMSensor. 01279 * Note2: Added in V523 version. 01280 */ 01281 bool querySoftwareVersion(char* ver,uint8_t bufLen); 01282 01283 01284 //temporary here 01285 bool waitForData(int timeoutMs); 01286 01287 //@returns len of the string 01288 /*inline*/ bool hexToString(uint32_t hex, char*str,uint8_t len); 01289 /*inline */ uint32_t strToHex(char*const str,uint8_t len); 01290 private: 01291 01292 /// bool waitForData(int timeoutMs); 01293 BufferedSerial mSerial; 01294 01295 01296 01297 01298 }; 01299 01300 01301 01302 01303 01304 01305 01306 01307 01308 01309 01310 #endif
Generated on Tue Jul 12 2022 17:25:07 by 1.7.2