Library for Bluetooth Low Energy Module ble 4.0 HM-11
Diff: hm11.h
- Revision:
- 0:df4bd867616e
- Child:
- 1:abf1462d47a0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hm11.h Sun Nov 01 21:28:52 2015 +0000 @@ -0,0 +1,415 @@ +/* + @file hm11.h + + @brief Bluetooth Low Energy v4.0 HM-11 Breakout Library + + @Author lukasz uszko(luszko@op.pl) + + Tested on FRDM-KL25Z + + Copyright (c) 2014 lukasz uszko + Released under the MIT License (see http://mbed.org/license/mit) + + Documentation regarding the HM-11 Bluetooth Low energy module can be found here: + https://www.microduino.cc/wiki/images/f/fc/Bluetooth40_en.pdf + http://txyz.info/b10n1c/datasheets/hm-11_bluetooth40_en.pdf +*/ + +//HM-11 Device Pinout: +// Pin Name Description +// 1 UART_RTS UART interface +// 2 UART_TX UART interface +// 3 UART_CTS UART interface +// 4 UART_RX UART interface +// 5 NC NC +// 6 NC NC +// 7 NC NC +// 8 NC NC +// 9 CC V3.3 +// 10 NC NC or VCC +// 11 RESETB Reset if low <100ms +// 12 GND Ground +// 13 PIO3 Programmable input/output line +// 14 PIO2 Programmable input/output line +// 15 PIO1 System LED +// 16 PIO0 System KEY + +// AT Commands +// Factory default setting: +// Name: HMSoft; Baud: 9600, N, 8, 1; Pin code: 000000; transmit + +#ifndef HM11_H +#define HM11_H + + +#include "mbed.h" +#include "BufferedSerial.h" + +#define HM11_SERIAL_DEFAULT_BAUD 9600 +#define HM11_SERIAL_TIMEOUT 10000 +#define HM11_SERIAL_EOL "\r\n" + +static const char* hm11TestCommands[]={"AT","AT+","CONNL","RENEW","RESET","START","SLEEP","?"}; + +static const char* hm11SendCommands[]={"ADDR","BAUD","CLEAR","CON", + "FILT","HELP","IMME","MODE", + "NOTI","NAME","PARI","PIO1", + "PIO","PASS","PIN","POWE", + "PWRM","ROLE", + "RSSI","RADD","STOP", + "SAVE","TCON","TYPE","VERR","VERS" +}; + +static const char* HM11ReceiveMsgs[]={"OK","OK+","Get:","Set:","LOST","ADDR:","CLEAR","CONN", + "NAME","Set","PIO:","RENEW","RESET","RSSI:","RADD:", + "START","SLEEP","TCON","RSSI:","RADD:","CONNF" +}; + +typedef enum hm11CommandsType_t{ + HM11_TEST_COMMAND=0, + HM11_SEND_COMMAND, + HM11_NUM_OF_COMMAND_TYPE +}HM11CommandType; + +typedef enum hm11TestCommands_t{ + HM11_AT_TEST =0, + HM11_START_CMD, + HM11_CONNECT_TO_LAST_SUCCEEDED_DEVICE , // + HM11_RESTORE_ALL, // + HM11_RESET_MODULE, // + HM11_WORK_IMMEDIATELY, // + HM11_SLEEP_MODE, // + HM11_QUERY_SIGN, + HM11_NUM_OF_TEST_COMMANDS +}HM11TestCommands; + + +typedef enum hm11Commands_t{ + HM11_ADDRESS, + HM11_BAUDRATE, + HM11_CLEAR_LAST_CONNECTED_DEVICE_ADDRESS , + HM11_CONNECT_TO_ADDRESS, + HM11_FILTER_AT_COMMAND_PARAMETER, + HM11_HELP_INFORMATION, + HM11_MODULE_WORK_TYPE, + HM11_MODULE_WORK_MODE, + HM11_NOTIFY_INFORMATION, + HM11_MODULE_NAME, + HM11_PARITY_BIT, + HM11_PIO1_OUTPT_STATUS, + HM11_PIO_PINS_HIGH_OR_LOW, + HM11_GET_PIN_CODE, + HM11_PIN_CODE, + HM11_MODULE_POWER, + HM11_MODULE_SLEEP_TYPE, + HM11_MASTER_SLAVE_ROLL, + HM11_RSSI_VALUE, + HM11_LAST_CONNECTED_DEVICE_ADDRESS, + HM11_STOP_BIT, + HM11_MODULE_SAVE_CONNECTED_ADDR_PARAMETER, + HM11_MODULE_CONNECT_REMOTE_DEVICE_TIMEOUT_VALUE, + HM11_MODULE_BOND_MODE, + HM11_SOFTWARE_VERSION, + HM11_NUM_OF_COMMANDS +}HM11Commands; + +/** + AT Commands parameters +*/ +typedef enum AdvertisingInterval{ + _100ms=0, + _152_5ms, + _211_25ms, + _318_75ms, + _417_5ms, + _546_25ms, + _760ms, + _852_5ms, + _1022_5ms, + _1285ms, + _2000ms, + _3000ms, + _4000ms, + _5000ms, + _6000ms, + _7000ms, + _INVALID_ADV_INTERVAL +}AdvertisingInterval_t; + + +typedef enum AdvertisingType{ + _AdvertisingScanResponseConnectable=0, + _LastDeviceConnectsIn1_28Seconds, + _AdvertisingScanResponse, + _Advertising, + _INVALID_ADV_TYPE +}AdvertisingType_t; + +typedef enum BaudRate{ + _9600=0, + _19200, + _38400, + _57600, + _115200, + _4800, + _2400, + _1200, + _230400, + _INVALID_BAUDRATE +}BaudRate_t; + +typedef enum ConnectionStatus{ + _L, // Connecting + _E, // Connect error + _F, // Connect Fail + _N // No Address +}ConnectionStatus_t; + + +class HM11{ + +public: + HM11(PinName uartTx , PinName uartRx); + + HM11(const BufferedSerial & serial); + + bool sendGetCommand(const char* command); + bool sendSetCommand(const char* command,int param); + + bool isCorrectCommand(const char* command, HM11CommandType cmdType); + + int sendDataToDevice(const char* data); + + int isRxDataAvailable(); + + inline uint8_t getDataFromRx() { + return mSerial.getc(); + } + + + //commandMethods + bool testCommand(void); + char* queryModuleAddress(void); + bool setAdvertisingInterval(AdvertisingInterval_t advInt); + AdvertisingInterval_t queryAdvertisingInterval(void); + + bool setAdvertisingType(AdvertisingType_t advInt); + AdvertisingType_t queryAdvertisingType(void); + + + /** Set ANCS switch + * @param enable |0: Off |1: On |Default: 0 + * @return + * 1 on success, + * 0 on error. + * Note1: This command added in V524. + * Note2: Please send AT+RESET to restart module if you set value 1. + * Note3: Must execute AT+TYPE3 first. + */ + bool setAncsSwitch(uint8_t enable); + + + /** query ANCS switch + * @return + * 1 -On, + * 0 -Off + * 0xFF -error + * Note1: This command added in V524. + * Note2: Please send AT+RESET to restart module if you set value 1. + * Note3: Must execute AT+TYPE3 first. + */ + uint8_t queryAncsSwitch(void); + + + /** Set Whitelist switch + * @param enable |0: Off |1: On |Default: 0 + * @return + * 1 on success, + * 0 on error. + * Note1: This command added in V523 + * Note2: Whitelist allow three mac address link to module. Please use AT+AD command set whitelist mac address. + */ + bool setWhitelistSwitch(uint8_t enable); + + + /** query Whitelist Switch + * @return + * 1 - On, + * 0 - Off, + * 0xFF -error. + * Note1: This command added in V523 + * Note2: Whitelist allow three mac address link to module. Please use AT+AD command set whitelist mac address. + */ + uint8_t queryWhitelistSwitch(void); + + + /** Set whitelist mac address + * @param nrOfMacAddrLinkedToModule |1,2,3 + * @param macAddress |eg. 001122334455 + * @return + * 1 on success, + * 0 on error. + */ + bool setWhitelistMacAddress (uint8_t nrOfMacAddrLinkedToModule, const char* macAddress); + + + /** query whitelist mac address + * @param nrOfMacAddrLinkedToModule |1,2,3 + * @return + * nr of mac addr + * null -error. + */ + char* queryWhitelistMacAddress(uint8_t nrOfMacAddrLinkedToModule); + + + /** Set battery monitor switch + * @param uint8_t battSwitchEnable: |0: Off |1: On |Default: 0 + * @return + * 1 on success, + * 0 on error. + * Note1: This command added in V520 + */ + bool setBatteryMonitorSwitch(uint8_t battSwitchEnable); + + + /** query BatteryMonitorSwitch + * @return + * batt switch state: |0: Off |1: On + * 0xFF -error + * Note1: This command added in V520. + */ + uint8_t queryBatteryMonitorSwitch(void); + + + + /**Query battery information + * @return + * batt information: 000~100 + * 0xFF -error + * + * There has three ways to get battery information: + a. Before establishing a connection, Send “AT+BATT?” through UART. + b. After established a connection, In Mode 1 or 2, remote side send“AT+BATT?” + Battery information has included in scan response data package, one hour update once + */ + uint8_t queryBatteryInformation(void); + + + + /** Set iBeacon into service mode(*) + * @return + * 1 on success, + * 0 on error. + * This command is added in V520, Removed in V521, Please use AT+DELO + * This command set iBeacon into service mode until next power on. + * In service mode, module not allow any link request. + * BUSHU is Chinese spelling, meaning the deployment. + * Note: Should to open iBeacon switch first (AT+IBEA). + */ + bool setIBeaconIntoServiceMode(void); + + + + /** Set Bit format + * @param bit7Format: 0:NotCompatible, 1:Compatible + * @return + * 1 NotCompatible, + * 0 Compatible, + * 0xFF Error + * This command is used only for compatible uses 7 data bits, 2 stop bit device. + */ + bool setBitFormat(uint8_t bit7Format); + + + /**Query BitFormat + * @return + * bit7 Swu=itch + * 0xFF -error + */ + uint8_t queryBitFormat(void); + + + /** Set baud rate + * @param baud: Baudrate value + * @return + * 1 success, + * 0 Error, + */ + bool setBaudRate(BaudRate_t baud); + + + + /**Query baud rate + * @return + * Baudrate_t - Baudrate value + */ + BaudRate_t queryBaudRate(void); + + /** Set Characteristic value + * @param chValue (characteristic value): 0x0001~0xFFFE + * @return + * 1 success, + * 0 Error, + */ + bool setCharacteristic(uint16_t chValue); + + + + /**Query Characteristic value + * @return + * characteristic value: 0x0001~0xFFFE + * error :0xFFFF + */ + uint16_t queryCharacteristic(void); + + + /** Try connect to last succeeded device + * @return + * ConnectionStatus_t connection status. + * Notice: Only Central role is used. + * If remote device has already connected to other device or shut down, + * “OK+CONNF” will received after about 10 seconds. + */ + ConnectionStatus_t connectToLastDevice(void); + + + /** Try connect an address + * @param address e.g." 0017EA090909 " + * @return connection status + * Notice: Only Central role is used. + * If remote device has already connected to other device or shut down, + * “OK+CONNF” will received after about 10 seconds. + * + * Notice: Only central role is used. + If remote device has already connected to other device or shut down, + “OK+CONNF” will received after about 10 Seconds. + e.g. + Try to connect an device which MAC address is 00:17:EA:09:09:09 + Send: AT+CON0017EA090909 + May receive a reply: + OK+CONNA ========= Accept request, connecting + OK+CONNE ========= Connect error + OK+CONN ========= Connected, if AT+NOTI1 is setup + OK+CONNF ========= Connect Failed, After 10 seconds + */ + ConnectionStatus_t connectToAnAddress(const char* address); + + + +private: + + bool waitForData(int timeoutMs); + BufferedSerial mSerial; +}; + + + + + + + + + + + +#endif \ No newline at end of file