Library for Bluetooth Low Energy Module ble 4.0 HM-11

Committer:
igbt6
Date:
Sun Nov 01 21:33:04 2015 +0000
Revision:
1:abf1462d47a0
Parent:
0:df4bd867616e
Child:
3:d32bdfd04d82
First version of HM-11 Ble module library prepared

Who changed what in which revision?

UserRevisionLine numberNew contents of line
igbt6 0:df4bd867616e 1 /*
igbt6 0:df4bd867616e 2 @file hm11.h
igbt6 0:df4bd867616e 3
igbt6 0:df4bd867616e 4 @brief Bluetooth Low Energy v4.0 HM-11 Breakout Library
igbt6 0:df4bd867616e 5
igbt6 0:df4bd867616e 6 @Author lukasz uszko(luszko@op.pl)
igbt6 0:df4bd867616e 7
igbt6 0:df4bd867616e 8 Tested on FRDM-KL25Z
igbt6 0:df4bd867616e 9
igbt6 0:df4bd867616e 10 Copyright (c) 2014 lukasz uszko
igbt6 0:df4bd867616e 11 Released under the MIT License (see http://mbed.org/license/mit)
igbt6 0:df4bd867616e 12
igbt6 0:df4bd867616e 13 Documentation regarding the HM-11 Bluetooth Low energy module can be found here:
igbt6 0:df4bd867616e 14 https://www.microduino.cc/wiki/images/f/fc/Bluetooth40_en.pdf
igbt6 0:df4bd867616e 15 http://txyz.info/b10n1c/datasheets/hm-11_bluetooth40_en.pdf
igbt6 0:df4bd867616e 16 */
igbt6 0:df4bd867616e 17
igbt6 0:df4bd867616e 18 //HM-11 Device Pinout:
igbt6 0:df4bd867616e 19 // Pin Name Description
igbt6 0:df4bd867616e 20 // 1 UART_RTS UART interface
igbt6 0:df4bd867616e 21 // 2 UART_TX UART interface
igbt6 0:df4bd867616e 22 // 3 UART_CTS UART interface
igbt6 0:df4bd867616e 23 // 4 UART_RX UART interface
igbt6 0:df4bd867616e 24 // 5 NC NC
igbt6 0:df4bd867616e 25 // 6 NC NC
igbt6 0:df4bd867616e 26 // 7 NC NC
igbt6 0:df4bd867616e 27 // 8 NC NC
igbt6 0:df4bd867616e 28 // 9 CC V3.3
igbt6 0:df4bd867616e 29 // 10 NC NC or VCC
igbt6 0:df4bd867616e 30 // 11 RESETB Reset if low <100ms
igbt6 0:df4bd867616e 31 // 12 GND Ground
igbt6 0:df4bd867616e 32 // 13 PIO3 Programmable input/output line
igbt6 0:df4bd867616e 33 // 14 PIO2 Programmable input/output line
igbt6 0:df4bd867616e 34 // 15 PIO1 System LED
igbt6 0:df4bd867616e 35 // 16 PIO0 System KEY
igbt6 0:df4bd867616e 36
igbt6 0:df4bd867616e 37 // AT Commands
igbt6 0:df4bd867616e 38 // Factory default setting:
igbt6 0:df4bd867616e 39 // Name: HMSoft; Baud: 9600, N, 8, 1; Pin code: 000000; transmit
igbt6 0:df4bd867616e 40
igbt6 1:abf1462d47a0 41
igbt6 1:abf1462d47a0 42 //DEMO - HOW TO USE:
igbt6 1:abf1462d47a0 43 /*
igbt6 1:abf1462d47a0 44 ---------------------------------------- DEMO: 1st version -simple polling ----------------------------------------
igbt6 1:abf1462d47a0 45 #include "mbed.h"
igbt6 1:abf1462d47a0 46 #include "hm11.h"
igbt6 1:abf1462d47a0 47 #include "crc16.h"
igbt6 1:abf1462d47a0 48
igbt6 1:abf1462d47a0 49
igbt6 1:abf1462d47a0 50 #define HM11_PIN_TX PTE22 //FRDM-KL25Z UART2
igbt6 1:abf1462d47a0 51 #define HM11_PIN_RX PTE23
igbt6 1:abf1462d47a0 52
igbt6 1:abf1462d47a0 53 int main() {
igbt6 1:abf1462d47a0 54 Serial usbDebug(USBTX, USBRX);
igbt6 1:abf1462d47a0 55 usbDebug.printf("HELLO WORLD !");
igbt6 1:abf1462d47a0 56
igbt6 1:abf1462d47a0 57
igbt6 1:abf1462d47a0 58 HM11* hm11 = new HM11( HM11_PIN_TX, HM11_PIN_RX);
igbt6 1:abf1462d47a0 59 int counter =0;
igbt6 1:abf1462d47a0 60 while(1) {
igbt6 1:abf1462d47a0 61 //myled = 1;
igbt6 1:abf1462d47a0 62 wait(0.5);
igbt6 1:abf1462d47a0 63 usbDebug.printf("alive ");
igbt6 1:abf1462d47a0 64 wait(0.5);
igbt6 1:abf1462d47a0 65 char buf[2];
igbt6 1:abf1462d47a0 66 snprintf(buf,2,"%d",counter++);
igbt6 1:abf1462d47a0 67 if(counter>9)
igbt6 1:abf1462d47a0 68 counter=0;
igbt6 1:abf1462d47a0 69 hm11->sendDataToDevice(buf);
igbt6 1:abf1462d47a0 70 wait(0.2);
igbt6 1:abf1462d47a0 71
igbt6 1:abf1462d47a0 72 while(hm11->isRxDataAvailable())
igbt6 1:abf1462d47a0 73 usbDebug.printf("data: %c\r\n",hm11->getDataFromRx());
igbt6 1:abf1462d47a0 74
igbt6 1:abf1462d47a0 75 }
igbt6 1:abf1462d47a0 76 }
igbt6 1:abf1462d47a0 77 */
igbt6 1:abf1462d47a0 78
igbt6 1:abf1462d47a0 79
igbt6 1:abf1462d47a0 80
igbt6 0:df4bd867616e 81 #ifndef HM11_H
igbt6 0:df4bd867616e 82 #define HM11_H
igbt6 0:df4bd867616e 83
igbt6 0:df4bd867616e 84
igbt6 0:df4bd867616e 85 #include "mbed.h"
igbt6 0:df4bd867616e 86 #include "BufferedSerial.h"
igbt6 0:df4bd867616e 87
igbt6 0:df4bd867616e 88 #define HM11_SERIAL_DEFAULT_BAUD 9600
igbt6 0:df4bd867616e 89 #define HM11_SERIAL_TIMEOUT 10000
igbt6 0:df4bd867616e 90 #define HM11_SERIAL_EOL "\r\n"
igbt6 0:df4bd867616e 91
igbt6 0:df4bd867616e 92 static const char* hm11TestCommands[]={"AT","AT+","CONNL","RENEW","RESET","START","SLEEP","?"};
igbt6 0:df4bd867616e 93
igbt6 0:df4bd867616e 94 static const char* hm11SendCommands[]={"ADDR","BAUD","CLEAR","CON",
igbt6 0:df4bd867616e 95 "FILT","HELP","IMME","MODE",
igbt6 0:df4bd867616e 96 "NOTI","NAME","PARI","PIO1",
igbt6 0:df4bd867616e 97 "PIO","PASS","PIN","POWE",
igbt6 0:df4bd867616e 98 "PWRM","ROLE",
igbt6 0:df4bd867616e 99 "RSSI","RADD","STOP",
igbt6 0:df4bd867616e 100 "SAVE","TCON","TYPE","VERR","VERS"
igbt6 0:df4bd867616e 101 };
igbt6 0:df4bd867616e 102
igbt6 0:df4bd867616e 103 static const char* HM11ReceiveMsgs[]={"OK","OK+","Get:","Set:","LOST","ADDR:","CLEAR","CONN",
igbt6 0:df4bd867616e 104 "NAME","Set","PIO:","RENEW","RESET","RSSI:","RADD:",
igbt6 0:df4bd867616e 105 "START","SLEEP","TCON","RSSI:","RADD:","CONNF"
igbt6 0:df4bd867616e 106 };
igbt6 0:df4bd867616e 107
igbt6 0:df4bd867616e 108 typedef enum hm11CommandsType_t{
igbt6 0:df4bd867616e 109 HM11_TEST_COMMAND=0,
igbt6 0:df4bd867616e 110 HM11_SEND_COMMAND,
igbt6 0:df4bd867616e 111 HM11_NUM_OF_COMMAND_TYPE
igbt6 0:df4bd867616e 112 }HM11CommandType;
igbt6 0:df4bd867616e 113
igbt6 0:df4bd867616e 114 typedef enum hm11TestCommands_t{
igbt6 0:df4bd867616e 115 HM11_AT_TEST =0,
igbt6 0:df4bd867616e 116 HM11_START_CMD,
igbt6 0:df4bd867616e 117 HM11_CONNECT_TO_LAST_SUCCEEDED_DEVICE , //
igbt6 0:df4bd867616e 118 HM11_RESTORE_ALL, //
igbt6 0:df4bd867616e 119 HM11_RESET_MODULE, //
igbt6 0:df4bd867616e 120 HM11_WORK_IMMEDIATELY, //
igbt6 0:df4bd867616e 121 HM11_SLEEP_MODE, //
igbt6 0:df4bd867616e 122 HM11_QUERY_SIGN,
igbt6 0:df4bd867616e 123 HM11_NUM_OF_TEST_COMMANDS
igbt6 0:df4bd867616e 124 }HM11TestCommands;
igbt6 0:df4bd867616e 125
igbt6 0:df4bd867616e 126
igbt6 0:df4bd867616e 127 typedef enum hm11Commands_t{
igbt6 0:df4bd867616e 128 HM11_ADDRESS,
igbt6 0:df4bd867616e 129 HM11_BAUDRATE,
igbt6 0:df4bd867616e 130 HM11_CLEAR_LAST_CONNECTED_DEVICE_ADDRESS ,
igbt6 0:df4bd867616e 131 HM11_CONNECT_TO_ADDRESS,
igbt6 0:df4bd867616e 132 HM11_FILTER_AT_COMMAND_PARAMETER,
igbt6 0:df4bd867616e 133 HM11_HELP_INFORMATION,
igbt6 0:df4bd867616e 134 HM11_MODULE_WORK_TYPE,
igbt6 0:df4bd867616e 135 HM11_MODULE_WORK_MODE,
igbt6 0:df4bd867616e 136 HM11_NOTIFY_INFORMATION,
igbt6 0:df4bd867616e 137 HM11_MODULE_NAME,
igbt6 0:df4bd867616e 138 HM11_PARITY_BIT,
igbt6 0:df4bd867616e 139 HM11_PIO1_OUTPT_STATUS,
igbt6 0:df4bd867616e 140 HM11_PIO_PINS_HIGH_OR_LOW,
igbt6 0:df4bd867616e 141 HM11_GET_PIN_CODE,
igbt6 0:df4bd867616e 142 HM11_PIN_CODE,
igbt6 0:df4bd867616e 143 HM11_MODULE_POWER,
igbt6 0:df4bd867616e 144 HM11_MODULE_SLEEP_TYPE,
igbt6 0:df4bd867616e 145 HM11_MASTER_SLAVE_ROLL,
igbt6 0:df4bd867616e 146 HM11_RSSI_VALUE,
igbt6 0:df4bd867616e 147 HM11_LAST_CONNECTED_DEVICE_ADDRESS,
igbt6 0:df4bd867616e 148 HM11_STOP_BIT,
igbt6 0:df4bd867616e 149 HM11_MODULE_SAVE_CONNECTED_ADDR_PARAMETER,
igbt6 0:df4bd867616e 150 HM11_MODULE_CONNECT_REMOTE_DEVICE_TIMEOUT_VALUE,
igbt6 0:df4bd867616e 151 HM11_MODULE_BOND_MODE,
igbt6 0:df4bd867616e 152 HM11_SOFTWARE_VERSION,
igbt6 0:df4bd867616e 153 HM11_NUM_OF_COMMANDS
igbt6 0:df4bd867616e 154 }HM11Commands;
igbt6 0:df4bd867616e 155
igbt6 0:df4bd867616e 156 /**
igbt6 0:df4bd867616e 157 AT Commands parameters
igbt6 0:df4bd867616e 158 */
igbt6 0:df4bd867616e 159 typedef enum AdvertisingInterval{
igbt6 0:df4bd867616e 160 _100ms=0,
igbt6 0:df4bd867616e 161 _152_5ms,
igbt6 0:df4bd867616e 162 _211_25ms,
igbt6 0:df4bd867616e 163 _318_75ms,
igbt6 0:df4bd867616e 164 _417_5ms,
igbt6 0:df4bd867616e 165 _546_25ms,
igbt6 0:df4bd867616e 166 _760ms,
igbt6 0:df4bd867616e 167 _852_5ms,
igbt6 0:df4bd867616e 168 _1022_5ms,
igbt6 0:df4bd867616e 169 _1285ms,
igbt6 0:df4bd867616e 170 _2000ms,
igbt6 0:df4bd867616e 171 _3000ms,
igbt6 0:df4bd867616e 172 _4000ms,
igbt6 0:df4bd867616e 173 _5000ms,
igbt6 0:df4bd867616e 174 _6000ms,
igbt6 0:df4bd867616e 175 _7000ms,
igbt6 0:df4bd867616e 176 _INVALID_ADV_INTERVAL
igbt6 0:df4bd867616e 177 }AdvertisingInterval_t;
igbt6 0:df4bd867616e 178
igbt6 0:df4bd867616e 179
igbt6 0:df4bd867616e 180 typedef enum AdvertisingType{
igbt6 0:df4bd867616e 181 _AdvertisingScanResponseConnectable=0,
igbt6 0:df4bd867616e 182 _LastDeviceConnectsIn1_28Seconds,
igbt6 0:df4bd867616e 183 _AdvertisingScanResponse,
igbt6 0:df4bd867616e 184 _Advertising,
igbt6 0:df4bd867616e 185 _INVALID_ADV_TYPE
igbt6 0:df4bd867616e 186 }AdvertisingType_t;
igbt6 0:df4bd867616e 187
igbt6 0:df4bd867616e 188 typedef enum BaudRate{
igbt6 0:df4bd867616e 189 _9600=0,
igbt6 0:df4bd867616e 190 _19200,
igbt6 0:df4bd867616e 191 _38400,
igbt6 0:df4bd867616e 192 _57600,
igbt6 0:df4bd867616e 193 _115200,
igbt6 0:df4bd867616e 194 _4800,
igbt6 0:df4bd867616e 195 _2400,
igbt6 0:df4bd867616e 196 _1200,
igbt6 0:df4bd867616e 197 _230400,
igbt6 0:df4bd867616e 198 _INVALID_BAUDRATE
igbt6 0:df4bd867616e 199 }BaudRate_t;
igbt6 0:df4bd867616e 200
igbt6 0:df4bd867616e 201 typedef enum ConnectionStatus{
igbt6 0:df4bd867616e 202 _L, // Connecting
igbt6 0:df4bd867616e 203 _E, // Connect error
igbt6 0:df4bd867616e 204 _F, // Connect Fail
igbt6 0:df4bd867616e 205 _N // No Address
igbt6 0:df4bd867616e 206 }ConnectionStatus_t;
igbt6 0:df4bd867616e 207
igbt6 0:df4bd867616e 208
igbt6 0:df4bd867616e 209 class HM11{
igbt6 0:df4bd867616e 210
igbt6 0:df4bd867616e 211 public:
igbt6 0:df4bd867616e 212 HM11(PinName uartTx , PinName uartRx);
igbt6 0:df4bd867616e 213
igbt6 0:df4bd867616e 214 HM11(const BufferedSerial & serial);
igbt6 0:df4bd867616e 215
igbt6 0:df4bd867616e 216 bool sendGetCommand(const char* command);
igbt6 0:df4bd867616e 217 bool sendSetCommand(const char* command,int param);
igbt6 0:df4bd867616e 218
igbt6 0:df4bd867616e 219 bool isCorrectCommand(const char* command, HM11CommandType cmdType);
igbt6 0:df4bd867616e 220
igbt6 0:df4bd867616e 221 int sendDataToDevice(const char* data);
igbt6 0:df4bd867616e 222
igbt6 0:df4bd867616e 223 int isRxDataAvailable();
igbt6 0:df4bd867616e 224
igbt6 0:df4bd867616e 225 inline uint8_t getDataFromRx() {
igbt6 0:df4bd867616e 226 return mSerial.getc();
igbt6 0:df4bd867616e 227 }
igbt6 0:df4bd867616e 228
igbt6 0:df4bd867616e 229
igbt6 0:df4bd867616e 230 //commandMethods
igbt6 0:df4bd867616e 231 bool testCommand(void);
igbt6 0:df4bd867616e 232 char* queryModuleAddress(void);
igbt6 0:df4bd867616e 233 bool setAdvertisingInterval(AdvertisingInterval_t advInt);
igbt6 0:df4bd867616e 234 AdvertisingInterval_t queryAdvertisingInterval(void);
igbt6 0:df4bd867616e 235
igbt6 0:df4bd867616e 236 bool setAdvertisingType(AdvertisingType_t advInt);
igbt6 0:df4bd867616e 237 AdvertisingType_t queryAdvertisingType(void);
igbt6 0:df4bd867616e 238
igbt6 0:df4bd867616e 239
igbt6 0:df4bd867616e 240 /** Set ANCS switch
igbt6 0:df4bd867616e 241 * @param enable |0: Off |1: On |Default: 0
igbt6 0:df4bd867616e 242 * @return
igbt6 0:df4bd867616e 243 * 1 on success,
igbt6 0:df4bd867616e 244 * 0 on error.
igbt6 0:df4bd867616e 245 * Note1: This command added in V524.
igbt6 0:df4bd867616e 246 * Note2: Please send AT+RESET to restart module if you set value 1.
igbt6 0:df4bd867616e 247 * Note3: Must execute AT+TYPE3 first.
igbt6 0:df4bd867616e 248 */
igbt6 0:df4bd867616e 249 bool setAncsSwitch(uint8_t enable);
igbt6 0:df4bd867616e 250
igbt6 0:df4bd867616e 251
igbt6 0:df4bd867616e 252 /** query ANCS switch
igbt6 0:df4bd867616e 253 * @return
igbt6 0:df4bd867616e 254 * 1 -On,
igbt6 0:df4bd867616e 255 * 0 -Off
igbt6 0:df4bd867616e 256 * 0xFF -error
igbt6 0:df4bd867616e 257 * Note1: This command added in V524.
igbt6 0:df4bd867616e 258 * Note2: Please send AT+RESET to restart module if you set value 1.
igbt6 0:df4bd867616e 259 * Note3: Must execute AT+TYPE3 first.
igbt6 0:df4bd867616e 260 */
igbt6 0:df4bd867616e 261 uint8_t queryAncsSwitch(void);
igbt6 0:df4bd867616e 262
igbt6 0:df4bd867616e 263
igbt6 0:df4bd867616e 264 /** Set Whitelist switch
igbt6 0:df4bd867616e 265 * @param enable |0: Off |1: On |Default: 0
igbt6 0:df4bd867616e 266 * @return
igbt6 0:df4bd867616e 267 * 1 on success,
igbt6 0:df4bd867616e 268 * 0 on error.
igbt6 0:df4bd867616e 269 * Note1: This command added in V523
igbt6 0:df4bd867616e 270 * Note2: Whitelist allow three mac address link to module. Please use AT+AD command set whitelist mac address.
igbt6 0:df4bd867616e 271 */
igbt6 0:df4bd867616e 272 bool setWhitelistSwitch(uint8_t enable);
igbt6 0:df4bd867616e 273
igbt6 0:df4bd867616e 274
igbt6 0:df4bd867616e 275 /** query Whitelist Switch
igbt6 0:df4bd867616e 276 * @return
igbt6 0:df4bd867616e 277 * 1 - On,
igbt6 0:df4bd867616e 278 * 0 - Off,
igbt6 0:df4bd867616e 279 * 0xFF -error.
igbt6 0:df4bd867616e 280 * Note1: This command added in V523
igbt6 0:df4bd867616e 281 * Note2: Whitelist allow three mac address link to module. Please use AT+AD command set whitelist mac address.
igbt6 0:df4bd867616e 282 */
igbt6 0:df4bd867616e 283 uint8_t queryWhitelistSwitch(void);
igbt6 0:df4bd867616e 284
igbt6 0:df4bd867616e 285
igbt6 0:df4bd867616e 286 /** Set whitelist mac address
igbt6 0:df4bd867616e 287 * @param nrOfMacAddrLinkedToModule |1,2,3
igbt6 0:df4bd867616e 288 * @param macAddress |eg. 001122334455
igbt6 0:df4bd867616e 289 * @return
igbt6 0:df4bd867616e 290 * 1 on success,
igbt6 0:df4bd867616e 291 * 0 on error.
igbt6 0:df4bd867616e 292 */
igbt6 0:df4bd867616e 293 bool setWhitelistMacAddress (uint8_t nrOfMacAddrLinkedToModule, const char* macAddress);
igbt6 0:df4bd867616e 294
igbt6 0:df4bd867616e 295
igbt6 0:df4bd867616e 296 /** query whitelist mac address
igbt6 0:df4bd867616e 297 * @param nrOfMacAddrLinkedToModule |1,2,3
igbt6 0:df4bd867616e 298 * @return
igbt6 0:df4bd867616e 299 * nr of mac addr
igbt6 0:df4bd867616e 300 * null -error.
igbt6 0:df4bd867616e 301 */
igbt6 0:df4bd867616e 302 char* queryWhitelistMacAddress(uint8_t nrOfMacAddrLinkedToModule);
igbt6 0:df4bd867616e 303
igbt6 0:df4bd867616e 304
igbt6 0:df4bd867616e 305 /** Set battery monitor switch
igbt6 0:df4bd867616e 306 * @param uint8_t battSwitchEnable: |0: Off |1: On |Default: 0
igbt6 0:df4bd867616e 307 * @return
igbt6 0:df4bd867616e 308 * 1 on success,
igbt6 0:df4bd867616e 309 * 0 on error.
igbt6 0:df4bd867616e 310 * Note1: This command added in V520
igbt6 0:df4bd867616e 311 */
igbt6 0:df4bd867616e 312 bool setBatteryMonitorSwitch(uint8_t battSwitchEnable);
igbt6 0:df4bd867616e 313
igbt6 0:df4bd867616e 314
igbt6 0:df4bd867616e 315 /** query BatteryMonitorSwitch
igbt6 0:df4bd867616e 316 * @return
igbt6 0:df4bd867616e 317 * batt switch state: |0: Off |1: On
igbt6 0:df4bd867616e 318 * 0xFF -error
igbt6 0:df4bd867616e 319 * Note1: This command added in V520.
igbt6 0:df4bd867616e 320 */
igbt6 0:df4bd867616e 321 uint8_t queryBatteryMonitorSwitch(void);
igbt6 0:df4bd867616e 322
igbt6 0:df4bd867616e 323
igbt6 0:df4bd867616e 324
igbt6 0:df4bd867616e 325 /**Query battery information
igbt6 0:df4bd867616e 326 * @return
igbt6 0:df4bd867616e 327 * batt information: 000~100
igbt6 0:df4bd867616e 328 * 0xFF -error
igbt6 0:df4bd867616e 329 *
igbt6 0:df4bd867616e 330 * There has three ways to get battery information:
igbt6 0:df4bd867616e 331 a. Before establishing a connection, Send “AT+BATT?” through UART.
igbt6 0:df4bd867616e 332 b. After established a connection, In Mode 1 or 2, remote side send“AT+BATT?”
igbt6 0:df4bd867616e 333 Battery information has included in scan response data package, one hour update once
igbt6 0:df4bd867616e 334 */
igbt6 0:df4bd867616e 335 uint8_t queryBatteryInformation(void);
igbt6 0:df4bd867616e 336
igbt6 0:df4bd867616e 337
igbt6 0:df4bd867616e 338
igbt6 0:df4bd867616e 339 /** Set iBeacon into service mode(*)
igbt6 0:df4bd867616e 340 * @return
igbt6 0:df4bd867616e 341 * 1 on success,
igbt6 0:df4bd867616e 342 * 0 on error.
igbt6 0:df4bd867616e 343 * This command is added in V520, Removed in V521, Please use AT+DELO
igbt6 0:df4bd867616e 344 * This command set iBeacon into service mode until next power on.
igbt6 0:df4bd867616e 345 * In service mode, module not allow any link request.
igbt6 0:df4bd867616e 346 * BUSHU is Chinese spelling, meaning the deployment.
igbt6 0:df4bd867616e 347 * Note: Should to open iBeacon switch first (AT+IBEA).
igbt6 0:df4bd867616e 348 */
igbt6 0:df4bd867616e 349 bool setIBeaconIntoServiceMode(void);
igbt6 0:df4bd867616e 350
igbt6 0:df4bd867616e 351
igbt6 0:df4bd867616e 352
igbt6 0:df4bd867616e 353 /** Set Bit format
igbt6 0:df4bd867616e 354 * @param bit7Format: 0:NotCompatible, 1:Compatible
igbt6 0:df4bd867616e 355 * @return
igbt6 0:df4bd867616e 356 * 1 NotCompatible,
igbt6 0:df4bd867616e 357 * 0 Compatible,
igbt6 0:df4bd867616e 358 * 0xFF Error
igbt6 0:df4bd867616e 359 * This command is used only for compatible uses 7 data bits, 2 stop bit device.
igbt6 0:df4bd867616e 360 */
igbt6 0:df4bd867616e 361 bool setBitFormat(uint8_t bit7Format);
igbt6 0:df4bd867616e 362
igbt6 0:df4bd867616e 363
igbt6 0:df4bd867616e 364 /**Query BitFormat
igbt6 0:df4bd867616e 365 * @return
igbt6 0:df4bd867616e 366 * bit7 Swu=itch
igbt6 0:df4bd867616e 367 * 0xFF -error
igbt6 0:df4bd867616e 368 */
igbt6 0:df4bd867616e 369 uint8_t queryBitFormat(void);
igbt6 0:df4bd867616e 370
igbt6 0:df4bd867616e 371
igbt6 0:df4bd867616e 372 /** Set baud rate
igbt6 0:df4bd867616e 373 * @param baud: Baudrate value
igbt6 0:df4bd867616e 374 * @return
igbt6 0:df4bd867616e 375 * 1 success,
igbt6 0:df4bd867616e 376 * 0 Error,
igbt6 0:df4bd867616e 377 */
igbt6 0:df4bd867616e 378 bool setBaudRate(BaudRate_t baud);
igbt6 0:df4bd867616e 379
igbt6 0:df4bd867616e 380
igbt6 0:df4bd867616e 381
igbt6 0:df4bd867616e 382 /**Query baud rate
igbt6 0:df4bd867616e 383 * @return
igbt6 0:df4bd867616e 384 * Baudrate_t - Baudrate value
igbt6 0:df4bd867616e 385 */
igbt6 0:df4bd867616e 386 BaudRate_t queryBaudRate(void);
igbt6 0:df4bd867616e 387
igbt6 0:df4bd867616e 388 /** Set Characteristic value
igbt6 0:df4bd867616e 389 * @param chValue (characteristic value): 0x0001~0xFFFE
igbt6 0:df4bd867616e 390 * @return
igbt6 0:df4bd867616e 391 * 1 success,
igbt6 0:df4bd867616e 392 * 0 Error,
igbt6 0:df4bd867616e 393 */
igbt6 0:df4bd867616e 394 bool setCharacteristic(uint16_t chValue);
igbt6 0:df4bd867616e 395
igbt6 0:df4bd867616e 396
igbt6 0:df4bd867616e 397
igbt6 0:df4bd867616e 398 /**Query Characteristic value
igbt6 0:df4bd867616e 399 * @return
igbt6 0:df4bd867616e 400 * characteristic value: 0x0001~0xFFFE
igbt6 0:df4bd867616e 401 * error :0xFFFF
igbt6 0:df4bd867616e 402 */
igbt6 0:df4bd867616e 403 uint16_t queryCharacteristic(void);
igbt6 0:df4bd867616e 404
igbt6 0:df4bd867616e 405
igbt6 0:df4bd867616e 406 /** Try connect to last succeeded device
igbt6 0:df4bd867616e 407 * @return
igbt6 0:df4bd867616e 408 * ConnectionStatus_t connection status.
igbt6 0:df4bd867616e 409 * Notice: Only Central role is used.
igbt6 0:df4bd867616e 410 * If remote device has already connected to other device or shut down,
igbt6 0:df4bd867616e 411 * “OK+CONNF” will received after about 10 seconds.
igbt6 0:df4bd867616e 412 */
igbt6 0:df4bd867616e 413 ConnectionStatus_t connectToLastDevice(void);
igbt6 0:df4bd867616e 414
igbt6 0:df4bd867616e 415
igbt6 0:df4bd867616e 416 /** Try connect an address
igbt6 0:df4bd867616e 417 * @param address e.g." 0017EA090909 "
igbt6 0:df4bd867616e 418 * @return connection status
igbt6 0:df4bd867616e 419 * Notice: Only Central role is used.
igbt6 0:df4bd867616e 420 * If remote device has already connected to other device or shut down,
igbt6 0:df4bd867616e 421 * “OK+CONNF” will received after about 10 seconds.
igbt6 0:df4bd867616e 422 *
igbt6 0:df4bd867616e 423 * Notice: Only central role is used.
igbt6 0:df4bd867616e 424 If remote device has already connected to other device or shut down,
igbt6 0:df4bd867616e 425 “OK+CONNF” will received after about 10 Seconds.
igbt6 0:df4bd867616e 426 e.g.
igbt6 0:df4bd867616e 427 Try to connect an device which MAC address is 00:17:EA:09:09:09
igbt6 0:df4bd867616e 428 Send: AT+CON0017EA090909
igbt6 0:df4bd867616e 429 May receive a reply:
igbt6 0:df4bd867616e 430 OK+CONNA ========= Accept request, connecting
igbt6 0:df4bd867616e 431 OK+CONNE ========= Connect error
igbt6 0:df4bd867616e 432 OK+CONN ========= Connected, if AT+NOTI1 is setup
igbt6 0:df4bd867616e 433 OK+CONNF ========= Connect Failed, After 10 seconds
igbt6 0:df4bd867616e 434 */
igbt6 0:df4bd867616e 435 ConnectionStatus_t connectToAnAddress(const char* address);
igbt6 0:df4bd867616e 436
igbt6 0:df4bd867616e 437
igbt6 0:df4bd867616e 438
igbt6 0:df4bd867616e 439 private:
igbt6 0:df4bd867616e 440
igbt6 0:df4bd867616e 441 bool waitForData(int timeoutMs);
igbt6 0:df4bd867616e 442 BufferedSerial mSerial;
igbt6 0:df4bd867616e 443 };
igbt6 0:df4bd867616e 444
igbt6 0:df4bd867616e 445
igbt6 0:df4bd867616e 446
igbt6 0:df4bd867616e 447
igbt6 0:df4bd867616e 448
igbt6 0:df4bd867616e 449
igbt6 0:df4bd867616e 450
igbt6 0:df4bd867616e 451
igbt6 0:df4bd867616e 452
igbt6 0:df4bd867616e 453
igbt6 0:df4bd867616e 454
igbt6 0:df4bd867616e 455 #endif