Library for Bluetooth Low Energy Module ble 4.0 HM-11
hm11.cpp@0:df4bd867616e, 2015-11-01 (annotated)
- Committer:
- igbt6
- Date:
- Sun Nov 01 21:28:52 2015 +0000
- Revision:
- 0:df4bd867616e
- Child:
- 3:d32bdfd04d82
First version of HM-11 library prepared
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
igbt6 | 0:df4bd867616e | 1 | #include "hm11.h" |
igbt6 | 0:df4bd867616e | 2 | #include "string.h" |
igbt6 | 0:df4bd867616e | 3 | |
igbt6 | 0:df4bd867616e | 4 | HM11::HM11(PinName uartTx , PinName uartRx):mSerial(uartTx,uartRx){ |
igbt6 | 0:df4bd867616e | 5 | |
igbt6 | 0:df4bd867616e | 6 | mSerial.baud(HM11_SERIAL_DEFAULT_BAUD ); |
igbt6 | 0:df4bd867616e | 7 | } |
igbt6 | 0:df4bd867616e | 8 | |
igbt6 | 0:df4bd867616e | 9 | |
igbt6 | 0:df4bd867616e | 10 | |
igbt6 | 0:df4bd867616e | 11 | bool HM11::sendSetCommand(const char* command, const int param){ |
igbt6 | 0:df4bd867616e | 12 | |
igbt6 | 0:df4bd867616e | 13 | if(!isCorrectCommand(command,HM11_SEND_COMMAND)) |
igbt6 | 0:df4bd867616e | 14 | return false; |
igbt6 | 0:df4bd867616e | 15 | char dataBuf[12]; |
igbt6 | 0:df4bd867616e | 16 | memset(dataBuf,0,sizeof(dataBuf)); |
igbt6 | 0:df4bd867616e | 17 | 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 | 18 | sendDataToDevice(dataBuf); |
igbt6 | 0:df4bd867616e | 19 | return true; |
igbt6 | 0:df4bd867616e | 20 | } |
igbt6 | 0:df4bd867616e | 21 | |
igbt6 | 0:df4bd867616e | 22 | |
igbt6 | 0:df4bd867616e | 23 | bool HM11::sendGetCommand(const char* command){ |
igbt6 | 0:df4bd867616e | 24 | |
igbt6 | 0:df4bd867616e | 25 | if(!isCorrectCommand(command,HM11_SEND_COMMAND)) |
igbt6 | 0:df4bd867616e | 26 | return false; |
igbt6 | 0:df4bd867616e | 27 | char dataBuf[12]; |
igbt6 | 0:df4bd867616e | 28 | memset(dataBuf,0,sizeof(dataBuf)); |
igbt6 | 0:df4bd867616e | 29 | 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 | 30 | sendDataToDevice(dataBuf); |
igbt6 | 0:df4bd867616e | 31 | return true; |
igbt6 | 0:df4bd867616e | 32 | } |
igbt6 | 0:df4bd867616e | 33 | |
igbt6 | 0:df4bd867616e | 34 | //@param : cmdType - 0 test cmd |
igbt6 | 0:df4bd867616e | 35 | bool HM11::isCorrectCommand(const char* command, HM11CommandType cmdType){ |
igbt6 | 0:df4bd867616e | 36 | int i = 0 ; |
igbt6 | 0:df4bd867616e | 37 | const char**cmdPtr=NULL; |
igbt6 | 0:df4bd867616e | 38 | if(cmdType>=HM11_NUM_OF_COMMAND_TYPE){ |
igbt6 | 0:df4bd867616e | 39 | |
igbt6 | 0:df4bd867616e | 40 | return false; |
igbt6 | 0:df4bd867616e | 41 | } |
igbt6 | 0:df4bd867616e | 42 | if(command==NULL) |
igbt6 | 0:df4bd867616e | 43 | return false; |
igbt6 | 0:df4bd867616e | 44 | switch(cmdType){ |
igbt6 | 0:df4bd867616e | 45 | case HM11_TEST_COMMAND: |
igbt6 | 0:df4bd867616e | 46 | i = HM11_NUM_OF_TEST_COMMANDS ; |
igbt6 | 0:df4bd867616e | 47 | cmdPtr=hm11TestCommands; |
igbt6 | 0:df4bd867616e | 48 | break; |
igbt6 | 0:df4bd867616e | 49 | case HM11_SEND_COMMAND: |
igbt6 | 0:df4bd867616e | 50 | i = HM11_NUM_OF_COMMANDS; |
igbt6 | 0:df4bd867616e | 51 | cmdPtr=hm11SendCommands; |
igbt6 | 0:df4bd867616e | 52 | break; |
igbt6 | 0:df4bd867616e | 53 | } |
igbt6 | 0:df4bd867616e | 54 | while(i>0){ |
igbt6 | 0:df4bd867616e | 55 | if(strcmp(command,cmdPtr[i])==0){ |
igbt6 | 0:df4bd867616e | 56 | return true; |
igbt6 | 0:df4bd867616e | 57 | } |
igbt6 | 0:df4bd867616e | 58 | i--; |
igbt6 | 0:df4bd867616e | 59 | } |
igbt6 | 0:df4bd867616e | 60 | return false; |
igbt6 | 0:df4bd867616e | 61 | } |
igbt6 | 0:df4bd867616e | 62 | //comands |
igbt6 | 0:df4bd867616e | 63 | |
igbt6 | 0:df4bd867616e | 64 | bool HM11::testCommand(){ |
igbt6 | 0:df4bd867616e | 65 | return false; |
igbt6 | 0:df4bd867616e | 66 | } |
igbt6 | 0:df4bd867616e | 67 | |
igbt6 | 0:df4bd867616e | 68 | |
igbt6 | 0:df4bd867616e | 69 | |
igbt6 | 0:df4bd867616e | 70 | bool HM11:: waitForData(int timeoutMs){ |
igbt6 | 0:df4bd867616e | 71 | int endtime; |
igbt6 | 0:df4bd867616e | 72 | Timer timer; |
igbt6 | 0:df4bd867616e | 73 | timer.start() ; |
igbt6 | 0:df4bd867616e | 74 | endtime= timer.read_ms()+timeoutMs; |
igbt6 | 0:df4bd867616e | 75 | while((timer.read_ms())<endtime){ |
igbt6 | 0:df4bd867616e | 76 | if(isRxDataAvailable()) |
igbt6 | 0:df4bd867616e | 77 | return true; |
igbt6 | 0:df4bd867616e | 78 | } |
igbt6 | 0:df4bd867616e | 79 | return false; |
igbt6 | 0:df4bd867616e | 80 | } |
igbt6 | 0:df4bd867616e | 81 | |
igbt6 | 0:df4bd867616e | 82 | |
igbt6 | 0:df4bd867616e | 83 | int HM11::sendDataToDevice(const char* data){ |
igbt6 | 0:df4bd867616e | 84 | |
igbt6 | 0:df4bd867616e | 85 | return mSerial.printf(data); |
igbt6 | 0:df4bd867616e | 86 | } |
igbt6 | 0:df4bd867616e | 87 | |
igbt6 | 0:df4bd867616e | 88 | |
igbt6 | 0:df4bd867616e | 89 | int HM11::isRxDataAvailable(){ |
igbt6 | 0:df4bd867616e | 90 | return mSerial.readable(); |
igbt6 | 0:df4bd867616e | 91 | } |
igbt6 | 0:df4bd867616e | 92 | |
igbt6 | 0:df4bd867616e | 93 | |
igbt6 | 0:df4bd867616e | 94 | |
igbt6 | 0:df4bd867616e | 95 |