Library for Bluetooth Low Energy Module ble 4.0 HM-11

Committer:
igbt6
Date:
Sat Dec 26 19:40:40 2015 +0000
Revision:
5:9a00e7bb0275
Parent:
3:d32bdfd04d82
Child:
6:16801af75937
first commit of the new lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
igbt6 0:df4bd867616e 1 #include "hm11.h"
igbt6 0:df4bd867616e 2 #include "string.h"
igbt6 0:df4bd867616e 3
igbt6 5:9a00e7bb0275 4
igbt6 5:9a00e7bb0275 5 #define WAIT_FOR_DATA_TIMEOUT_MS 1000
igbt6 5:9a00e7bb0275 6 #define DEFAULT_WAIT_FOR_DATA_TIMEOUT_MS 50 //required to get correct data
igbt6 5:9a00e7bb0275 7
igbt6 0:df4bd867616e 8 HM11::HM11(PinName uartTx , PinName uartRx):mSerial(uartTx,uartRx){
igbt6 0:df4bd867616e 9
igbt6 0:df4bd867616e 10 mSerial.baud(HM11_SERIAL_DEFAULT_BAUD );
igbt6 0:df4bd867616e 11 }
igbt6 0:df4bd867616e 12
igbt6 0:df4bd867616e 13
igbt6 0:df4bd867616e 14
igbt6 0:df4bd867616e 15 bool HM11::sendSetCommand(const char* command, const int param){
igbt6 0:df4bd867616e 16
igbt6 0:df4bd867616e 17 if(!isCorrectCommand(command,HM11_SEND_COMMAND))
igbt6 0:df4bd867616e 18 return false;
igbt6 0:df4bd867616e 19 char dataBuf[12];
igbt6 0:df4bd867616e 20 memset(dataBuf,0,sizeof(dataBuf));
igbt6 0:df4bd867616e 21 snprintf(dataBuf,strlen(command)+4,"%s%s%d",hm11TestCommands[HM11_START_CMD],command,param); //TODO strlen +4 ? not all params are 1 char long
igbt6 0:df4bd867616e 22 sendDataToDevice(dataBuf);
igbt6 0:df4bd867616e 23 return true;
igbt6 0:df4bd867616e 24 }
igbt6 0:df4bd867616e 25
igbt6 0:df4bd867616e 26
igbt6 0:df4bd867616e 27 bool HM11::sendGetCommand(const char* command){
igbt6 0:df4bd867616e 28
igbt6 0:df4bd867616e 29 if(!isCorrectCommand(command,HM11_SEND_COMMAND))
igbt6 0:df4bd867616e 30 return false;
igbt6 0:df4bd867616e 31 char dataBuf[12];
igbt6 0:df4bd867616e 32 memset(dataBuf,0,sizeof(dataBuf));
igbt6 0:df4bd867616e 33 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]);
igbt6 0:df4bd867616e 34 sendDataToDevice(dataBuf);
igbt6 0:df4bd867616e 35 return true;
igbt6 0:df4bd867616e 36 }
igbt6 0:df4bd867616e 37
igbt6 0:df4bd867616e 38 //@param : cmdType - 0 test cmd
igbt6 0:df4bd867616e 39 bool HM11::isCorrectCommand(const char* command, HM11CommandType cmdType){
igbt6 0:df4bd867616e 40 int i = 0 ;
igbt6 0:df4bd867616e 41 const char**cmdPtr=NULL;
igbt6 0:df4bd867616e 42 if(cmdType>=HM11_NUM_OF_COMMAND_TYPE){
igbt6 0:df4bd867616e 43
igbt6 0:df4bd867616e 44 return false;
igbt6 0:df4bd867616e 45 }
igbt6 0:df4bd867616e 46 if(command==NULL)
igbt6 0:df4bd867616e 47 return false;
igbt6 0:df4bd867616e 48 switch(cmdType){
igbt6 0:df4bd867616e 49 case HM11_TEST_COMMAND:
igbt6 0:df4bd867616e 50 i = HM11_NUM_OF_TEST_COMMANDS ;
igbt6 0:df4bd867616e 51 cmdPtr=hm11TestCommands;
igbt6 0:df4bd867616e 52 break;
igbt6 0:df4bd867616e 53 case HM11_SEND_COMMAND:
igbt6 0:df4bd867616e 54 i = HM11_NUM_OF_COMMANDS;
igbt6 0:df4bd867616e 55 cmdPtr=hm11SendCommands;
igbt6 0:df4bd867616e 56 break;
igbt6 0:df4bd867616e 57 }
igbt6 0:df4bd867616e 58 while(i>0){
igbt6 0:df4bd867616e 59 if(strcmp(command,cmdPtr[i])==0){
igbt6 0:df4bd867616e 60 return true;
igbt6 0:df4bd867616e 61 }
igbt6 0:df4bd867616e 62 i--;
igbt6 0:df4bd867616e 63 }
igbt6 0:df4bd867616e 64 return false;
igbt6 0:df4bd867616e 65 }
igbt6 0:df4bd867616e 66 //comands
igbt6 5:9a00e7bb0275 67
igbt6 0:df4bd867616e 68
igbt6 0:df4bd867616e 69 bool HM11:: waitForData(int timeoutMs){
igbt6 5:9a00e7bb0275 70 int endTime;
igbt6 5:9a00e7bb0275 71 int startTime; // sometimes not needed 50ms
igbt6 0:df4bd867616e 72 Timer timer;
igbt6 5:9a00e7bb0275 73 timer.start() ;
igbt6 5:9a00e7bb0275 74 startTime=timer.read_ms();
igbt6 5:9a00e7bb0275 75 endTime= startTime+timeoutMs;
igbt6 5:9a00e7bb0275 76 while((timer.read_ms())<endTime){
igbt6 5:9a00e7bb0275 77 if(isRxDataAvailable()&&(timer.read_ms()-startTime)>DEFAULT_WAIT_FOR_DATA_TIMEOUT_MS)
igbt6 0:df4bd867616e 78 return true;
igbt6 0:df4bd867616e 79 }
igbt6 0:df4bd867616e 80 return false;
igbt6 0:df4bd867616e 81 }
igbt6 0:df4bd867616e 82
igbt6 0:df4bd867616e 83
igbt6 5:9a00e7bb0275 84 int HM11::sendDataToDevice(const char* data)
igbt6 5:9a00e7bb0275 85 {
igbt6 0:df4bd867616e 86
igbt6 0:df4bd867616e 87 return mSerial.printf(data);
igbt6 0:df4bd867616e 88 }
igbt6 0:df4bd867616e 89
igbt6 5:9a00e7bb0275 90 int HM11::sendDataToDevice(uint8_t * byteData,uint8_t dataLength)
igbt6 5:9a00e7bb0275 91 {
igbt6 3:d32bdfd04d82 92
igbt6 3:d32bdfd04d82 93 return mSerial.write(byteData,dataLength);
igbt6 3:d32bdfd04d82 94 }
igbt6 5:9a00e7bb0275 95
igbt6 5:9a00e7bb0275 96 int HM11::isRxDataAvailable()
igbt6 5:9a00e7bb0275 97 {
igbt6 5:9a00e7bb0275 98 return mSerial.readable();
igbt6 5:9a00e7bb0275 99 }
igbt6 5:9a00e7bb0275 100
igbt6 5:9a00e7bb0275 101 bool HM11::copyAvailableDataToBuf(uint8_t *buf, uint8_t bufLength)
igbt6 5:9a00e7bb0275 102 {
igbt6 5:9a00e7bb0275 103 int lenCounter =0;
igbt6 5:9a00e7bb0275 104 if(buf==NULL||bufLength<1)
igbt6 5:9a00e7bb0275 105 return false;
igbt6 5:9a00e7bb0275 106 while(isRxDataAvailable()&&lenCounter<bufLength){
igbt6 5:9a00e7bb0275 107 buf[lenCounter++]=getDataFromRx();
igbt6 5:9a00e7bb0275 108 }
igbt6 5:9a00e7bb0275 109 if(lenCounter==bufLength)
igbt6 5:9a00e7bb0275 110 return true;
igbt6 5:9a00e7bb0275 111 else
igbt6 5:9a00e7bb0275 112 return false;
igbt6 5:9a00e7bb0275 113 }
igbt6 5:9a00e7bb0275 114
igbt6 5:9a00e7bb0275 115
igbt6 5:9a00e7bb0275 116 void HM11::hexToString(uint32_t hex, char*str,uint8_t len)
igbt6 5:9a00e7bb0275 117 {
igbt6 5:9a00e7bb0275 118 if(len>8||str==NULL)
igbt6 5:9a00e7bb0275 119 return;
igbt6 5:9a00e7bb0275 120 for(int i=0;i<len;i++){
igbt6 5:9a00e7bb0275 121 int temp =(hex>>(i*4))&0x0F;
igbt6 5:9a00e7bb0275 122 if(temp>=0&&temp<=9)
igbt6 5:9a00e7bb0275 123 {
igbt6 5:9a00e7bb0275 124 str[i]=temp+'0';
igbt6 5:9a00e7bb0275 125 }
igbt6 5:9a00e7bb0275 126 else
igbt6 5:9a00e7bb0275 127 {
igbt6 5:9a00e7bb0275 128 str[i]=temp+'A'-10;
igbt6 5:9a00e7bb0275 129 }
igbt6 5:9a00e7bb0275 130 }
igbt6 5:9a00e7bb0275 131 }
igbt6 5:9a00e7bb0275 132
igbt6 5:9a00e7bb0275 133
igbt6 5:9a00e7bb0275 134 //returns hex in reverse direction
igbt6 5:9a00e7bb0275 135 uint32_t HM11::strToHex(char*str,uint8_t len)
igbt6 5:9a00e7bb0275 136 {
igbt6 5:9a00e7bb0275 137 uint32_t ret=0;
igbt6 5:9a00e7bb0275 138 uint8_t temp;
igbt6 5:9a00e7bb0275 139 if(len<1||str==NULL)
igbt6 5:9a00e7bb0275 140 return -1;
igbt6 5:9a00e7bb0275 141
igbt6 5:9a00e7bb0275 142 for(int i=0;i<len&&str[i]!='\0';i++)
igbt6 5:9a00e7bb0275 143 {
igbt6 5:9a00e7bb0275 144 if(str[i]>='0'&&str[i]<='9')
igbt6 5:9a00e7bb0275 145 {
igbt6 5:9a00e7bb0275 146 temp=str[i]-'0';
igbt6 5:9a00e7bb0275 147 ret|=temp<<(i*4);
igbt6 5:9a00e7bb0275 148 }
igbt6 5:9a00e7bb0275 149 else if(str[i]>='A'&&str[i]<='F')
igbt6 5:9a00e7bb0275 150 {
igbt6 5:9a00e7bb0275 151 temp=str[i]-'A'+10;
igbt6 5:9a00e7bb0275 152 ret|=temp<<(i*4);
igbt6 5:9a00e7bb0275 153 }
igbt6 5:9a00e7bb0275 154 else if(str[i]>='a'&&str[i]<='f')
igbt6 5:9a00e7bb0275 155 {
igbt6 5:9a00e7bb0275 156 temp=str[i]-'a'+10;
igbt6 5:9a00e7bb0275 157 ret|=temp<<(i*4);
igbt6 5:9a00e7bb0275 158 }
igbt6 5:9a00e7bb0275 159 else
igbt6 5:9a00e7bb0275 160 return -1; //0xFFFFFFFF
igbt6 5:9a00e7bb0275 161 }
igbt6 5:9a00e7bb0275 162 return ret;
igbt6 5:9a00e7bb0275 163 }
igbt6 5:9a00e7bb0275 164
igbt6 5:9a00e7bb0275 165 // public methods
igbt6 5:9a00e7bb0275 166 bool HM11::queryModuleAddress(char* addrBuf)
igbt6 5:9a00e7bb0275 167 {
igbt6 5:9a00e7bb0275 168 flushBuffers();
igbt6 5:9a00e7bb0275 169 sendDataToDevice("AT+ADDR?");
igbt6 5:9a00e7bb0275 170 char headerBuf[8];//for OK+ADDR:
igbt6 5:9a00e7bb0275 171 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS))
igbt6 5:9a00e7bb0275 172 return false;
igbt6 5:9a00e7bb0275 173 else{
igbt6 5:9a00e7bb0275 174 copyAvailableDataToBuf((uint8_t*)headerBuf,sizeof(headerBuf));
igbt6 5:9a00e7bb0275 175 if(strncmp(headerBuf,"OK+ADDR:",sizeof(headerBuf)) == 0){
igbt6 5:9a00e7bb0275 176 if(copyAvailableDataToBuf((uint8_t*)addrBuf,12)){
igbt6 5:9a00e7bb0275 177 addrBuf[12]='\0';
igbt6 5:9a00e7bb0275 178 return true;
igbt6 5:9a00e7bb0275 179 }
igbt6 5:9a00e7bb0275 180 }
igbt6 5:9a00e7bb0275 181 return false;
igbt6 5:9a00e7bb0275 182 }
igbt6 5:9a00e7bb0275 183 }
igbt6 5:9a00e7bb0275 184
igbt6 5:9a00e7bb0275 185
igbt6 5:9a00e7bb0275 186 bool HM11::setAdvertisingInterval(AdvertisingInterval_t advInt)
igbt6 5:9a00e7bb0275 187 {
igbt6 5:9a00e7bb0275 188 flushBuffers();
igbt6 5:9a00e7bb0275 189 char buf[9]={"AT+ADVI"};
igbt6 5:9a00e7bb0275 190 hexToString((uint32_t)advInt, &buf[7],1);
igbt6 5:9a00e7bb0275 191 sendDataToDevice(buf);
igbt6 5:9a00e7bb0275 192 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS))
igbt6 5:9a00e7bb0275 193 return false;
igbt6 5:9a00e7bb0275 194 else
igbt6 5:9a00e7bb0275 195 {
igbt6 5:9a00e7bb0275 196 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf));
igbt6 5:9a00e7bb0275 197 if(strncmp(buf,"OK+Set:",7) == 0){
igbt6 5:9a00e7bb0275 198 if(strToHex(&buf[7],1)<_INVALID_ADV_INTERVAL){
igbt6 5:9a00e7bb0275 199 return true;
igbt6 5:9a00e7bb0275 200 }
igbt6 5:9a00e7bb0275 201 }
igbt6 5:9a00e7bb0275 202 return false;
igbt6 5:9a00e7bb0275 203 }
igbt6 5:9a00e7bb0275 204 }
igbt6 5:9a00e7bb0275 205
igbt6 5:9a00e7bb0275 206
igbt6 5:9a00e7bb0275 207 AdvertisingInterval_t HM11::queryAdvertisingInterval(void)
igbt6 5:9a00e7bb0275 208 {
igbt6 5:9a00e7bb0275 209 flushBuffers();
igbt6 5:9a00e7bb0275 210 AdvertisingInterval_t retVal=_INVALID_ADV_INTERVAL;
igbt6 5:9a00e7bb0275 211 char respBuf[8];
igbt6 5:9a00e7bb0275 212 sendDataToDevice("AT+ADVI?");
igbt6 5:9a00e7bb0275 213 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS))
igbt6 5:9a00e7bb0275 214 {
igbt6 5:9a00e7bb0275 215 //nothing
igbt6 5:9a00e7bb0275 216 }
igbt6 5:9a00e7bb0275 217 else
igbt6 5:9a00e7bb0275 218 {
igbt6 5:9a00e7bb0275 219 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf));
igbt6 5:9a00e7bb0275 220 if(strncmp(respBuf,"OK+Get:",sizeof(respBuf)-1) == 0){
igbt6 5:9a00e7bb0275 221 retVal=(AdvertisingInterval_t)strToHex(&respBuf[sizeof(respBuf)-1],1);
igbt6 5:9a00e7bb0275 222 }
igbt6 5:9a00e7bb0275 223
igbt6 5:9a00e7bb0275 224 }
igbt6 5:9a00e7bb0275 225 return retVal;
igbt6 5:9a00e7bb0275 226 }
igbt6 5:9a00e7bb0275 227
igbt6 5:9a00e7bb0275 228
igbt6 5:9a00e7bb0275 229 bool HM11::setAdvertisingType(AdvertisingType_t advInt)
igbt6 5:9a00e7bb0275 230 {
igbt6 5:9a00e7bb0275 231 flushBuffers();
igbt6 5:9a00e7bb0275 232 char buf[9]={"AT+ADTY"};
igbt6 5:9a00e7bb0275 233 hexToString((uint32_t)advInt, &buf[7],1);
igbt6 5:9a00e7bb0275 234 sendDataToDevice(buf);
igbt6 5:9a00e7bb0275 235 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS))
igbt6 5:9a00e7bb0275 236 return false;
igbt6 5:9a00e7bb0275 237 else
igbt6 5:9a00e7bb0275 238 {
igbt6 5:9a00e7bb0275 239 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf));
igbt6 5:9a00e7bb0275 240 if(strncmp(buf,"OK+Set:",7) == 0){
igbt6 5:9a00e7bb0275 241 if(strToHex(&buf[7],1)<_INVALID_ADV_TYPE){
igbt6 5:9a00e7bb0275 242 return true;
igbt6 5:9a00e7bb0275 243 }
igbt6 5:9a00e7bb0275 244 }
igbt6 5:9a00e7bb0275 245 return false;
igbt6 5:9a00e7bb0275 246 }
igbt6 5:9a00e7bb0275 247 }
igbt6 5:9a00e7bb0275 248
igbt6 5:9a00e7bb0275 249 AdvertisingType_t HM11::queryAdvertisingType(void)
igbt6 5:9a00e7bb0275 250 {
igbt6 5:9a00e7bb0275 251 flushBuffers();
igbt6 5:9a00e7bb0275 252 AdvertisingType_t retVal=_INVALID_ADV_TYPE;
igbt6 5:9a00e7bb0275 253 char respBuf[8];
igbt6 5:9a00e7bb0275 254 sendDataToDevice("AT+ADTY?");
igbt6 5:9a00e7bb0275 255 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS))
igbt6 5:9a00e7bb0275 256 {
igbt6 5:9a00e7bb0275 257 //nothing
igbt6 5:9a00e7bb0275 258 }
igbt6 5:9a00e7bb0275 259 else
igbt6 5:9a00e7bb0275 260 {
igbt6 5:9a00e7bb0275 261 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf));
igbt6 5:9a00e7bb0275 262 if(strncmp(respBuf,"OK+Get:",sizeof(respBuf)-1) == 0){
igbt6 5:9a00e7bb0275 263 retVal=(AdvertisingType_t)strToHex(&respBuf[sizeof(respBuf)-1],1);
igbt6 5:9a00e7bb0275 264 }
igbt6 5:9a00e7bb0275 265 }
igbt6 5:9a00e7bb0275 266 return retVal;
igbt6 5:9a00e7bb0275 267 }
igbt6 5:9a00e7bb0275 268
igbt6 5:9a00e7bb0275 269
igbt6 5:9a00e7bb0275 270
igbt6 5:9a00e7bb0275 271 bool HM11::setAncsSwitch(uint8_t enable)
igbt6 5:9a00e7bb0275 272 {
igbt6 5:9a00e7bb0275 273 flushBuffers();
igbt6 5:9a00e7bb0275 274 char buf[9]={"AT+ANCS"};
igbt6 5:9a00e7bb0275 275 hexToString(enable, &buf[7],1);
igbt6 5:9a00e7bb0275 276 sendDataToDevice(buf);
igbt6 5:9a00e7bb0275 277 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS))
igbt6 5:9a00e7bb0275 278 return false;
igbt6 5:9a00e7bb0275 279 else
igbt6 5:9a00e7bb0275 280 {
igbt6 5:9a00e7bb0275 281 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf));
igbt6 5:9a00e7bb0275 282 if(strncmp(buf,"OK+Set:",7) == 0){
igbt6 5:9a00e7bb0275 283 if(strToHex(&buf[7],1)<0x2){
igbt6 5:9a00e7bb0275 284 return true;
igbt6 5:9a00e7bb0275 285 }
igbt6 5:9a00e7bb0275 286 }
igbt6 5:9a00e7bb0275 287 return false;
igbt6 5:9a00e7bb0275 288 }
igbt6 5:9a00e7bb0275 289 }
igbt6 5:9a00e7bb0275 290
igbt6 5:9a00e7bb0275 291
igbt6 5:9a00e7bb0275 292
igbt6 5:9a00e7bb0275 293 uint8_t HM11::queryAncsSwitch(void)
igbt6 5:9a00e7bb0275 294 {
igbt6 5:9a00e7bb0275 295 flushBuffers();
igbt6 5:9a00e7bb0275 296 uint8_t retVal=0xFF;
igbt6 5:9a00e7bb0275 297 char respBuf[8];
igbt6 5:9a00e7bb0275 298 sendDataToDevice("AT+ANCS?");
igbt6 5:9a00e7bb0275 299 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS))
igbt6 5:9a00e7bb0275 300 {
igbt6 5:9a00e7bb0275 301 retVal=0xFF;
igbt6 5:9a00e7bb0275 302 }
igbt6 5:9a00e7bb0275 303 else
igbt6 5:9a00e7bb0275 304 {
igbt6 5:9a00e7bb0275 305 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf));
igbt6 5:9a00e7bb0275 306 if(strncmp(respBuf,"OK+Get:",sizeof(respBuf)-1) == 0){
igbt6 5:9a00e7bb0275 307 retVal=strToHex(&respBuf[sizeof(respBuf)-1],1);
igbt6 5:9a00e7bb0275 308 }
igbt6 5:9a00e7bb0275 309 }
igbt6 5:9a00e7bb0275 310 return retVal;
igbt6 5:9a00e7bb0275 311 }
igbt6 5:9a00e7bb0275 312
igbt6 5:9a00e7bb0275 313
igbt6 5:9a00e7bb0275 314 bool HM11::setWhitelistSwitch(uint8_t enable)
igbt6 5:9a00e7bb0275 315 {
igbt6 5:9a00e7bb0275 316 flushBuffers();
igbt6 5:9a00e7bb0275 317 char buf[9]={"AT+ALLO"};
igbt6 5:9a00e7bb0275 318 hexToString(enable, &buf[7],1);
igbt6 5:9a00e7bb0275 319 sendDataToDevice(buf);
igbt6 5:9a00e7bb0275 320 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS))
igbt6 5:9a00e7bb0275 321 return false;
igbt6 5:9a00e7bb0275 322 else
igbt6 5:9a00e7bb0275 323 {
igbt6 5:9a00e7bb0275 324 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf));
igbt6 5:9a00e7bb0275 325 if(strncmp(buf,"OK+Set:",7) == 0){
igbt6 5:9a00e7bb0275 326 if(strToHex(&buf[7],1)<0x2){
igbt6 5:9a00e7bb0275 327 return true;
igbt6 5:9a00e7bb0275 328 }
igbt6 5:9a00e7bb0275 329 }
igbt6 5:9a00e7bb0275 330 return false;
igbt6 5:9a00e7bb0275 331 }
igbt6 5:9a00e7bb0275 332 }
igbt6 5:9a00e7bb0275 333
igbt6 5:9a00e7bb0275 334
igbt6 5:9a00e7bb0275 335 uint8_t HM11::queryWhitelistSwitch(void)
igbt6 5:9a00e7bb0275 336 {
igbt6 5:9a00e7bb0275 337 flushBuffers();
igbt6 5:9a00e7bb0275 338 uint8_t retVal=0xFF;
igbt6 5:9a00e7bb0275 339 char respBuf[8];
igbt6 5:9a00e7bb0275 340 sendDataToDevice("AT+ALLO?");
igbt6 5:9a00e7bb0275 341 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS))
igbt6 5:9a00e7bb0275 342 {
igbt6 5:9a00e7bb0275 343 retVal=0xFF;
igbt6 5:9a00e7bb0275 344 }
igbt6 5:9a00e7bb0275 345 else
igbt6 5:9a00e7bb0275 346 {
igbt6 5:9a00e7bb0275 347 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf));
igbt6 5:9a00e7bb0275 348 if(strncmp(respBuf,"OK+Get:",sizeof(respBuf)-1) == 0){
igbt6 5:9a00e7bb0275 349 retVal=strToHex(&respBuf[sizeof(respBuf)-1],1);
igbt6 5:9a00e7bb0275 350 }
igbt6 5:9a00e7bb0275 351 }
igbt6 5:9a00e7bb0275 352 return retVal;
igbt6 5:9a00e7bb0275 353 }
igbt6 5:9a00e7bb0275 354
igbt6 5:9a00e7bb0275 355 //TODO
igbt6 5:9a00e7bb0275 356 // bool HM11::setWhitelistMacAddress (uint8_t nrOfMacAddrLinkedToModule, const char* macAddress);
igbt6 5:9a00e7bb0275 357
igbt6 5:9a00e7bb0275 358 // char* HM11::queryWhitelistMacAddress(uint8_t nrOfMacAddrLinkedToModule);
igbt6 5:9a00e7bb0275 359
igbt6 5:9a00e7bb0275 360
igbt6 5:9a00e7bb0275 361 bool HM11::setBatteryMonitorSwitch(uint8_t battSwitchEnable)
igbt6 5:9a00e7bb0275 362 {
igbt6 5:9a00e7bb0275 363 flushBuffers();
igbt6 5:9a00e7bb0275 364 char buf[9]={"AT+BATC"};
igbt6 5:9a00e7bb0275 365 hexToString(battSwitchEnable, &buf[7],1);
igbt6 5:9a00e7bb0275 366 sendDataToDevice(buf);
igbt6 5:9a00e7bb0275 367 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS))
igbt6 5:9a00e7bb0275 368 return false;
igbt6 5:9a00e7bb0275 369 else
igbt6 5:9a00e7bb0275 370 {
igbt6 5:9a00e7bb0275 371 copyAvailableDataToBuf((uint8_t*)buf,sizeof(buf));
igbt6 5:9a00e7bb0275 372 if(strncmp(buf,"OK+Set:",7) == 0){
igbt6 5:9a00e7bb0275 373 if(strToHex(&buf[7],1)<0x2){
igbt6 5:9a00e7bb0275 374 return true;
igbt6 5:9a00e7bb0275 375 }
igbt6 5:9a00e7bb0275 376 }
igbt6 5:9a00e7bb0275 377 return false;
igbt6 5:9a00e7bb0275 378 }
igbt6 5:9a00e7bb0275 379 }
igbt6 5:9a00e7bb0275 380
igbt6 5:9a00e7bb0275 381
igbt6 5:9a00e7bb0275 382 uint8_t HM11::queryBatteryMonitorSwitch(void)
igbt6 5:9a00e7bb0275 383 {
igbt6 5:9a00e7bb0275 384 flushBuffers();
igbt6 5:9a00e7bb0275 385 uint8_t retVal=0xFF;
igbt6 5:9a00e7bb0275 386 char respBuf[8];
igbt6 5:9a00e7bb0275 387 sendDataToDevice("AT+BATC?");
igbt6 5:9a00e7bb0275 388 if(!waitForData(WAIT_FOR_DATA_TIMEOUT_MS))
igbt6 5:9a00e7bb0275 389 {
igbt6 5:9a00e7bb0275 390 retVal=0xFF;
igbt6 5:9a00e7bb0275 391 }
igbt6 5:9a00e7bb0275 392 else
igbt6 5:9a00e7bb0275 393 {
igbt6 5:9a00e7bb0275 394 copyAvailableDataToBuf((uint8_t*)respBuf,sizeof(respBuf));
igbt6 5:9a00e7bb0275 395 if(strncmp(respBuf,"OK+Get:",sizeof(respBuf)-1) == 0){
igbt6 5:9a00e7bb0275 396 retVal=strToHex(&respBuf[sizeof(respBuf)-1],1);
igbt6 5:9a00e7bb0275 397 }
igbt6 5:9a00e7bb0275 398 }
igbt6 5:9a00e7bb0275 399 return retVal;
igbt6 5:9a00e7bb0275 400 }
igbt6 5:9a00e7bb0275 401
igbt6 5:9a00e7bb0275 402
igbt6 5:9a00e7bb0275 403 #if 0
igbt6 5:9a00e7bb0275 404 uint8_t HM11::queryBatteryInformation(void);
igbt6 5:9a00e7bb0275 405
igbt6 5:9a00e7bb0275 406
igbt6 5:9a00e7bb0275 407
igbt6 5:9a00e7bb0275 408 bool HM11::setIBeaconIntoServiceMode(void);
igbt6 3:d32bdfd04d82 409
igbt6 3:d32bdfd04d82 410
igbt6 0:df4bd867616e 411
igbt6 5:9a00e7bb0275 412 bool HM11::setBitFormat(uint8_t bit7Format);
igbt6 5:9a00e7bb0275 413
igbt6 5:9a00e7bb0275 414
igbt6 5:9a00e7bb0275 415 uint8_t HM11::queryBitFormat(void);
igbt6 5:9a00e7bb0275 416
igbt6 5:9a00e7bb0275 417
igbt6 5:9a00e7bb0275 418
igbt6 5:9a00e7bb0275 419 bool HM11::setBaudRate(BaudRate_t baud);
igbt6 5:9a00e7bb0275 420
igbt6 5:9a00e7bb0275 421
igbt6 5:9a00e7bb0275 422
igbt6 5:9a00e7bb0275 423 BaudRate_t HM11::queryBaudRate(void);
igbt6 5:9a00e7bb0275 424
igbt6 5:9a00e7bb0275 425
igbt6 5:9a00e7bb0275 426 bool HM11::setCharacteristic(uint16_t chValue);
igbt6 5:9a00e7bb0275 427
igbt6 5:9a00e7bb0275 428
igbt6 5:9a00e7bb0275 429
igbt6 5:9a00e7bb0275 430 uint16_t HM11::queryCharacteristic(void);
igbt6 5:9a00e7bb0275 431
igbt6 5:9a00e7bb0275 432
igbt6 5:9a00e7bb0275 433 ConnectionStatus_t HM11::connectToLastDevice(void);
igbt6 5:9a00e7bb0275 434
igbt6 5:9a00e7bb0275 435
igbt6 5:9a00e7bb0275 436
igbt6 5:9a00e7bb0275 437 ConnectionStatus_t HM11::connectToAnAddress(const char* address);
igbt6 5:9a00e7bb0275 438
igbt6 5:9a00e7bb0275 439
igbt6 5:9a00e7bb0275 440 uint8_t HM11::queryInputOutputState(void);
igbt6 5:9a00e7bb0275 441
igbt6 5:9a00e7bb0275 442
igbt6 5:9a00e7bb0275 443 bool HM11::setPioCollectionRate (uint8_t colRateSec);
igbt6 5:9a00e7bb0275 444
igbt6 5:9a00e7bb0275 445
igbt6 5:9a00e7bb0275 446 uint8_t HM11::queryPioCollectionRate(void);
igbt6 5:9a00e7bb0275 447
igbt6 5:9a00e7bb0275 448
igbt6 5:9a00e7bb0275 449 bool HM11::startDeviceDiscoveryScan(ScanResult_t* scanRes);
igbt6 5:9a00e7bb0275 450
igbt6 5:9a00e7bb0275 451
igbt6 5:9a00e7bb0275 452
igbt6 5:9a00e7bb0275 453 bool HM11::connectToDiscoveryDevice(ScanResult_t* scanRes);
igbt6 5:9a00e7bb0275 454
igbt6 5:9a00e7bb0275 455
igbt6 5:9a00e7bb0275 456
igbt6 5:9a00e7bb0275 457
igbt6 5:9a00e7bb0275 458 bool HM11::setIBeaconDeployMode(DeployMode_t depMode);
igbt6 5:9a00e7bb0275 459
igbt6 5:9a00e7bb0275 460
igbt6 5:9a00e7bb0275 461
igbt6 5:9a00e7bb0275 462 bool HM11::setFilterOfHmModules(FilterOfHmModules_t filter);
igbt6 5:9a00e7bb0275 463
igbt6 5:9a00e7bb0275 464
igbt6 5:9a00e7bb0275 465
igbt6 5:9a00e7bb0275 466 FilterOfHmModules_t HM11::queryFilterOfHmModules(void);
igbt6 5:9a00e7bb0275 467
igbt6 5:9a00e7bb0275 468
igbt6 5:9a00e7bb0275 469
igbt6 5:9a00e7bb0275 470 bool HM11::removeBondInformation(void);
igbt6 5:9a00e7bb0275 471
igbt6 5:9a00e7bb0275 472
igbt6 5:9a00e7bb0275 473 bool HM11::getSystemHelpInformation(char* helpInformationBuf);
igbt6 5:9a00e7bb0275 474
igbt6 5:9a00e7bb0275 475
igbt6 5:9a00e7bb0275 476 bool HM11::setModuleWorkType(ModuleWorkType_t modWorkType);
igbt6 5:9a00e7bb0275 477
igbt6 5:9a00e7bb0275 478
igbt6 5:9a00e7bb0275 479
igbt6 5:9a00e7bb0275 480 ModuleWorkType_t HM11::queryModuleWorkType(void);
igbt6 5:9a00e7bb0275 481
igbt6 5:9a00e7bb0275 482
igbt6 5:9a00e7bb0275 483
igbt6 5:9a00e7bb0275 484
igbt6 5:9a00e7bb0275 485
igbt6 5:9a00e7bb0275 486 bool HM11::setModuleIBeaconSwitch (uint8_t turnOnOff);
igbt6 5:9a00e7bb0275 487
igbt6 5:9a00e7bb0275 488
igbt6 5:9a00e7bb0275 489 uint8_t HM11::queryModuleIBeaconSwitch (void);
igbt6 5:9a00e7bb0275 490
igbt6 5:9a00e7bb0275 491
igbt6 5:9a00e7bb0275 492
igbt6 5:9a00e7bb0275 493 bool HM11::setIBeaconUuid (uint32_t uuid0,uint32_t uuid1,uint32_t uuid2, uint32_t uuid3);
igbt6 5:9a00e7bb0275 494 bool HM11::setIBeaconUuid (uint32_t* uuid);
igbt6 5:9a00e7bb0275 495
igbt6 5:9a00e7bb0275 496
igbt6 5:9a00e7bb0275 497 uint32_t HM11::queryIBeaconUuid(uint32_t* nr_of_uuid);
igbt6 5:9a00e7bb0275 498
igbt6 5:9a00e7bb0275 499
igbt6 5:9a00e7bb0275 500
igbt6 5:9a00e7bb0275 501
igbt6 5:9a00e7bb0275 502 bool HM11::setIBeaconMajor(uint16_t mjrVersion);
igbt6 5:9a00e7bb0275 503
igbt6 5:9a00e7bb0275 504
igbt6 5:9a00e7bb0275 505 uint16_t HM11::queryIBeaconMajor(void);
igbt6 5:9a00e7bb0275 506
igbt6 5:9a00e7bb0275 507
igbt6 5:9a00e7bb0275 508
igbt6 5:9a00e7bb0275 509
igbt6 5:9a00e7bb0275 510 bool HM11::setIBeaconMinor(uint16_t mnrVersion);
igbt6 5:9a00e7bb0275 511
igbt6 5:9a00e7bb0275 512
igbt6 5:9a00e7bb0275 513 uint16_t HM11::queryIBeaconMinor(void);
igbt6 5:9a00e7bb0275 514
igbt6 5:9a00e7bb0275 515
igbt6 5:9a00e7bb0275 516
igbt6 5:9a00e7bb0275 517
igbt6 5:9a00e7bb0275 518 bool HM11::setIBeaconMeasuredPower(uint16_t measuredPwr);
igbt6 5:9a00e7bb0275 519
igbt6 5:9a00e7bb0275 520
igbt6 5:9a00e7bb0275 521
igbt6 5:9a00e7bb0275 522 uint16_t HM11::queryIBeaconMeasuredPower(void);
igbt6 5:9a00e7bb0275 523
igbt6 5:9a00e7bb0275 524
igbt6 5:9a00e7bb0275 525
igbt6 5:9a00e7bb0275 526 bool HM11::setModuleWorkMode(ModuleWorkMode_t workMode);
igbt6 5:9a00e7bb0275 527
igbt6 5:9a00e7bb0275 528
igbt6 5:9a00e7bb0275 529
igbt6 5:9a00e7bb0275 530 ModuleWorkMode_t HM11::queryModuleWorkMode(void);
igbt6 5:9a00e7bb0275 531
igbt6 5:9a00e7bb0275 532
igbt6 5:9a00e7bb0275 533
igbt6 5:9a00e7bb0275 534
igbt6 5:9a00e7bb0275 535 bool HM11::setModuleName(char* name, uint8_t nameLength);
igbt6 5:9a00e7bb0275 536
igbt6 5:9a00e7bb0275 537
igbt6 5:9a00e7bb0275 538 bool HM11::queryModuleName(char *name);
igbt6 5:9a00e7bb0275 539
igbt6 5:9a00e7bb0275 540
igbt6 5:9a00e7bb0275 541
igbt6 5:9a00e7bb0275 542
igbt6 5:9a00e7bb0275 543 bool HM11::setParityBit(ParityBit_t pBit);
igbt6 5:9a00e7bb0275 544
igbt6 5:9a00e7bb0275 545
igbt6 5:9a00e7bb0275 546
igbt6 5:9a00e7bb0275 547 ParityBit_t HM11::queryParityBit(void);
igbt6 5:9a00e7bb0275 548
igbt6 5:9a00e7bb0275 549
igbt6 5:9a00e7bb0275 550 bool HM11::setPio1OutputStatus(uint8_t status);
igbt6 5:9a00e7bb0275 551
igbt6 5:9a00e7bb0275 552
igbt6 5:9a00e7bb0275 553
igbt6 5:9a00e7bb0275 554 uint8_t HM11::queryPio1OutputStatus(void);
igbt6 5:9a00e7bb0275 555
igbt6 0:df4bd867616e 556
igbt6 0:df4bd867616e 557
igbt6 5:9a00e7bb0275 558
igbt6 5:9a00e7bb0275 559
igbt6 5:9a00e7bb0275 560 bool HM11::setPioPinsOutput(uint8_t nrOfPio, uint8_t val );
igbt6 5:9a00e7bb0275 561
igbt6 5:9a00e7bb0275 562
igbt6 5:9a00e7bb0275 563 uint8_t HM11::queryPioPinsOutput(uint8_t nrOfPio);
igbt6 5:9a00e7bb0275 564
igbt6 5:9a00e7bb0275 565
igbt6 5:9a00e7bb0275 566
igbt6 5:9a00e7bb0275 567
igbt6 5:9a00e7bb0275 568 bool HM11::setPinCode (uint32_t pinCode );
igbt6 5:9a00e7bb0275 569
igbt6 5:9a00e7bb0275 570
igbt6 5:9a00e7bb0275 571
igbt6 5:9a00e7bb0275 572 uint8_t HM11::queryPinCode (void);
igbt6 5:9a00e7bb0275 573
igbt6 5:9a00e7bb0275 574
igbt6 5:9a00e7bb0275 575
igbt6 5:9a00e7bb0275 576
igbt6 5:9a00e7bb0275 577 bool HM11::setModulePower(ModulePower_t modPower);
igbt6 5:9a00e7bb0275 578
igbt6 5:9a00e7bb0275 579
igbt6 5:9a00e7bb0275 580
igbt6 5:9a00e7bb0275 581 ModulePower_t HM11::queryModulePower (void);
igbt6 5:9a00e7bb0275 582
igbt6 5:9a00e7bb0275 583
igbt6 5:9a00e7bb0275 584
igbt6 5:9a00e7bb0275 585 bool HM11::setModuleSleepType(uint8_t modSleepType );
igbt6 5:9a00e7bb0275 586
igbt6 5:9a00e7bb0275 587
igbt6 5:9a00e7bb0275 588
igbt6 5:9a00e7bb0275 589 uint8_t HM11::queryModuleSleepType (void);
igbt6 5:9a00e7bb0275 590
igbt6 5:9a00e7bb0275 591
igbt6 5:9a00e7bb0275 592
igbt6 5:9a00e7bb0275 593
igbt6 5:9a00e7bb0275 594 bool HM11::restoreAll(void);
igbt6 5:9a00e7bb0275 595
igbt6 5:9a00e7bb0275 596
igbt6 5:9a00e7bb0275 597 bool HM11::restartModule(void);
igbt6 5:9a00e7bb0275 598
igbt6 5:9a00e7bb0275 599
igbt6 5:9a00e7bb0275 600
igbt6 5:9a00e7bb0275 601 bool HM11::setMasterAndSlaveRole(uint8_t role);
igbt6 5:9a00e7bb0275 602
igbt6 5:9a00e7bb0275 603
igbt6 5:9a00e7bb0275 604
igbt6 5:9a00e7bb0275 605 uint8_t HM11::queryMasterAndSlaveRole(void);
igbt6 5:9a00e7bb0275 606
igbt6 5:9a00e7bb0275 607
igbt6 5:9a00e7bb0275 608
igbt6 5:9a00e7bb0275 609
igbt6 5:9a00e7bb0275 610 uint8_t HM11::queryRssiValue(void);
igbt6 5:9a00e7bb0275 611
igbt6 5:9a00e7bb0275 612
igbt6 5:9a00e7bb0275 613
igbt6 5:9a00e7bb0275 614
igbt6 5:9a00e7bb0275 615 char* HM11::queryLastConnectedDeviceAddress(void);
igbt6 5:9a00e7bb0275 616
igbt6 5:9a00e7bb0275 617
igbt6 5:9a00e7bb0275 618
igbt6 5:9a00e7bb0275 619
igbt6 5:9a00e7bb0275 620 bool HM11::setModuleSensorWorkInterval(uint8_t interval);
igbt6 5:9a00e7bb0275 621
igbt6 5:9a00e7bb0275 622
igbt6 5:9a00e7bb0275 623
igbt6 5:9a00e7bb0275 624 uint8_t HM11::queryModuleSensorWorkInterval(void);
igbt6 5:9a00e7bb0275 625
igbt6 5:9a00e7bb0275 626
igbt6 5:9a00e7bb0275 627
igbt6 5:9a00e7bb0275 628 bool HM11::workImmediately(void);
igbt6 5:9a00e7bb0275 629
igbt6 5:9a00e7bb0275 630
igbt6 5:9a00e7bb0275 631
igbt6 5:9a00e7bb0275 632 bool HM11::queryModuleIntoSleepMode(void);
igbt6 5:9a00e7bb0275 633
igbt6 5:9a00e7bb0275 634
igbt6 5:9a00e7bb0275 635
igbt6 5:9a00e7bb0275 636 bool HM11::setModuleSaveConnectedAddressParam(uint8_t saveParam);
igbt6 5:9a00e7bb0275 637
igbt6 5:9a00e7bb0275 638
igbt6 5:9a00e7bb0275 639 uint8_t HM11::queryModuleSaveConnectedAddressParam(void);
igbt6 5:9a00e7bb0275 640
igbt6 5:9a00e7bb0275 641
igbt6 5:9a00e7bb0275 642
igbt6 5:9a00e7bb0275 643 bool HM11::setSensorTypeOnModulePio(SensorType_t sensorType);
igbt6 5:9a00e7bb0275 644
igbt6 5:9a00e7bb0275 645
igbt6 5:9a00e7bb0275 646
igbt6 5:9a00e7bb0275 647 SensorType_t HM11::querySensorTypeOnModulePio(void);
igbt6 5:9a00e7bb0275 648
igbt6 5:9a00e7bb0275 649
igbt6 5:9a00e7bb0275 650 bool HM11::setDiscoveryParameter (SensorType_t discoverParam);
igbt6 5:9a00e7bb0275 651
igbt6 0:df4bd867616e 652
igbt6 5:9a00e7bb0275 653 uint8_t HM11::queryDiscoveryParameter (void);
igbt6 5:9a00e7bb0275 654
igbt6 5:9a00e7bb0275 655
igbt6 5:9a00e7bb0275 656
igbt6 5:9a00e7bb0275 657
igbt6 5:9a00e7bb0275 658 bool HM11::queryModuleSensorTempAndHumidity(uint8_t* temp, uint8_t* hum);
igbt6 5:9a00e7bb0275 659
igbt6 5:9a00e7bb0275 660
igbt6 5:9a00e7bb0275 661
igbt6 5:9a00e7bb0275 662 bool HM11::queryDS18B20SensorTemperature (uint8_t* temp);
igbt6 5:9a00e7bb0275 663
igbt6 5:9a00e7bb0275 664
igbt6 5:9a00e7bb0275 665
igbt6 5:9a00e7bb0275 666
igbt6 5:9a00e7bb0275 667 bool HM11::setModuleConnectRemoteDeviceTimeoutValue(uint32_t timeout);
igbt6 5:9a00e7bb0275 668
igbt6 5:9a00e7bb0275 669
igbt6 5:9a00e7bb0275 670
igbt6 5:9a00e7bb0275 671
igbt6 5:9a00e7bb0275 672 uint32_t HM11::queryModuleConnectRemoteDeviceTimeoutValue(void);
igbt6 5:9a00e7bb0275 673
igbt6 5:9a00e7bb0275 674
igbt6 5:9a00e7bb0275 675
igbt6 5:9a00e7bb0275 676 bool HM11::setModuleBondMode(BondMode_t bondMode);
igbt6 5:9a00e7bb0275 677
igbt6 5:9a00e7bb0275 678
igbt6 5:9a00e7bb0275 679
igbt6 5:9a00e7bb0275 680 BondMode_t HM11::queryModuleBondMode(void);
igbt6 5:9a00e7bb0275 681
igbt6 5:9a00e7bb0275 682
igbt6 5:9a00e7bb0275 683
igbt6 5:9a00e7bb0275 684
igbt6 5:9a00e7bb0275 685
igbt6 5:9a00e7bb0275 686 bool HM11::setServiceUuid (uint16_t serviceUuid);
igbt6 5:9a00e7bb0275 687
igbt6 5:9a00e7bb0275 688
igbt6 5:9a00e7bb0275 689
igbt6 5:9a00e7bb0275 690 uint16_t HM11::queryServiceUuid(void);
igbt6 5:9a00e7bb0275 691
igbt6 5:9a00e7bb0275 692
igbt6 5:9a00e7bb0275 693
igbt6 5:9a00e7bb0275 694
igbt6 5:9a00e7bb0275 695 bool HM11::setUartSleepType (uint8_t sleepType);
igbt6 5:9a00e7bb0275 696
igbt6 5:9a00e7bb0275 697
igbt6 5:9a00e7bb0275 698
igbt6 5:9a00e7bb0275 699 uint8_t HM11::queryUartSleepType(void);
igbt6 5:9a00e7bb0275 700
igbt6 5:9a00e7bb0275 701 char* HM11::querySoftwareVersion(void);
igbt6 5:9a00e7bb0275 702
igbt6 5:9a00e7bb0275 703 #endif