LM005A Lora Module test
Dependents: LoRaTest OnenetTest
LM005A/LM005A.h@0:5b5a1b5f1ae4, 2018-04-19 (annotated)
- Committer:
- yao6116601
- Date:
- Thu Apr 19 13:15:25 2018 +0000
- Revision:
- 0:5b5a1b5f1ae4
LM005A LoRa module interface
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yao6116601 | 0:5b5a1b5f1ae4 | 1 | /* LM005AInterface Example |
yao6116601 | 0:5b5a1b5f1ae4 | 2 | * Copyright (c) 2015 MAXIUM Limited |
yao6116601 | 0:5b5a1b5f1ae4 | 3 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
yao6116601 | 0:5b5a1b5f1ae4 | 5 | * you may not use this file except in compliance with the License. |
yao6116601 | 0:5b5a1b5f1ae4 | 6 | * You may obtain a copy of the License at |
yao6116601 | 0:5b5a1b5f1ae4 | 7 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
yao6116601 | 0:5b5a1b5f1ae4 | 9 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 10 | * Unless required by applicable law or agreed to in writing, software |
yao6116601 | 0:5b5a1b5f1ae4 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
yao6116601 | 0:5b5a1b5f1ae4 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
yao6116601 | 0:5b5a1b5f1ae4 | 13 | * See the License for the specific language governing permissions and |
yao6116601 | 0:5b5a1b5f1ae4 | 14 | * limitations under the License. |
yao6116601 | 0:5b5a1b5f1ae4 | 15 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 16 | |
yao6116601 | 0:5b5a1b5f1ae4 | 17 | #ifndef LM005A_H |
yao6116601 | 0:5b5a1b5f1ae4 | 18 | #define LM005A_H |
yao6116601 | 0:5b5a1b5f1ae4 | 19 | |
yao6116601 | 0:5b5a1b5f1ae4 | 20 | #include "ATCmdParser.h" |
yao6116601 | 0:5b5a1b5f1ae4 | 21 | |
yao6116601 | 0:5b5a1b5f1ae4 | 22 | /** LM005AInterface class. |
yao6116601 | 0:5b5a1b5f1ae4 | 23 | This is an interface to a LM005A radio. |
yao6116601 | 0:5b5a1b5f1ae4 | 24 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 25 | class LM005A |
yao6116601 | 0:5b5a1b5f1ae4 | 26 | { |
yao6116601 | 0:5b5a1b5f1ae4 | 27 | public: |
yao6116601 | 0:5b5a1b5f1ae4 | 28 | LM005A(PinName tx, PinName rx, bool debug=false); |
yao6116601 | 0:5b5a1b5f1ae4 | 29 | bool init(void); |
yao6116601 | 0:5b5a1b5f1ae4 | 30 | /** |
yao6116601 | 0:5b5a1b5f1ae4 | 31 | * Check firmware version of LM005A |
yao6116601 | 0:5b5a1b5f1ae4 | 32 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 33 | * @return firmware version string |
yao6116601 | 0:5b5a1b5f1ae4 | 34 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 35 | const char * get_firmware_version(void); |
yao6116601 | 0:5b5a1b5f1ae4 | 36 | |
yao6116601 | 0:5b5a1b5f1ae4 | 37 | /** |
yao6116601 | 0:5b5a1b5f1ae4 | 38 | * 设置终端入网激活模式 |
yao6116601 | 0:5b5a1b5f1ae4 | 39 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 40 | * @param mode 终端入网激活模式 0-OTA, 1-ABP |
yao6116601 | 0:5b5a1b5f1ae4 | 41 | * @return true only if LM005A was setup correctly |
yao6116601 | 0:5b5a1b5f1ae4 | 42 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 43 | int set_mode(int mode); |
yao6116601 | 0:5b5a1b5f1ae4 | 44 | /** |
yao6116601 | 0:5b5a1b5f1ae4 | 45 | * 设置终端CLASS模式 |
yao6116601 | 0:5b5a1b5f1ae4 | 46 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 47 | * @param class_mode 终端入网CLASS模式 0-OTA, 1-ABP |
yao6116601 | 0:5b5a1b5f1ae4 | 48 | * @return true only if LM005A was setup correctly |
yao6116601 | 0:5b5a1b5f1ae4 | 49 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 50 | int set_band(int gap,int band); |
yao6116601 | 0:5b5a1b5f1ae4 | 51 | /** |
yao6116601 | 0:5b5a1b5f1ae4 | 52 | * 设置终端CLASS模式 |
yao6116601 | 0:5b5a1b5f1ae4 | 53 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 54 | * @param class_mode 终端入网CLASS模式 0-OTA, 1-ABP |
yao6116601 | 0:5b5a1b5f1ae4 | 55 | * @return true only if LM005A was setup correctly |
yao6116601 | 0:5b5a1b5f1ae4 | 56 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 57 | int set_class(int class_mode); |
yao6116601 | 0:5b5a1b5f1ae4 | 58 | /** |
yao6116601 | 0:5b5a1b5f1ae4 | 59 | * 设置终端发射功率 |
yao6116601 | 0:5b5a1b5f1ae4 | 60 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 61 | * @param power 终端终端发射功率 (20,17,16,14,12,10,7,5,2) In DB |
yao6116601 | 0:5b5a1b5f1ae4 | 62 | * @return true |
yao6116601 | 0:5b5a1b5f1ae4 | 63 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 64 | int set_power(int power); |
yao6116601 | 0:5b5a1b5f1ae4 | 65 | /** |
yao6116601 | 0:5b5a1b5f1ae4 | 66 | * Get EUI |
yao6116601 | 0:5b5a1b5f1ae4 | 67 | * @param type 0 deveui 1 appeui |
yao6116601 | 0:5b5a1b5f1ae4 | 68 | * @return null-teriminated EUI or null if no IP address is assigned |
yao6116601 | 0:5b5a1b5f1ae4 | 69 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 70 | const char *getEUI(int type); |
yao6116601 | 0:5b5a1b5f1ae4 | 71 | |
yao6116601 | 0:5b5a1b5f1ae4 | 72 | /** |
yao6116601 | 0:5b5a1b5f1ae4 | 73 | * Get device address |
yao6116601 | 0:5b5a1b5f1ae4 | 74 | * eui |
yao6116601 | 0:5b5a1b5f1ae4 | 75 | * @return null-teriminated Device address or null if no IP address is assigned |
yao6116601 | 0:5b5a1b5f1ae4 | 76 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 77 | const char *getDeviceAddress(void); |
yao6116601 | 0:5b5a1b5f1ae4 | 78 | /** |
yao6116601 | 0:5b5a1b5f1ae4 | 79 | * Reset LM005A |
yao6116601 | 0:5b5a1b5f1ae4 | 80 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 81 | * @return true only if LM005A resets successfully |
yao6116601 | 0:5b5a1b5f1ae4 | 82 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 83 | |
yao6116601 | 0:5b5a1b5f1ae4 | 84 | bool reset(void); |
yao6116601 | 0:5b5a1b5f1ae4 | 85 | |
yao6116601 | 0:5b5a1b5f1ae4 | 86 | /** |
yao6116601 | 0:5b5a1b5f1ae4 | 87 | * jion LM005A to Network |
yao6116601 | 0:5b5a1b5f1ae4 | 88 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 89 | * @param ap the name of the AP |
yao6116601 | 0:5b5a1b5f1ae4 | 90 | * @param passPhrase the password of AP |
yao6116601 | 0:5b5a1b5f1ae4 | 91 | * @return NSAPI_ERROR_OK only if LM005A is connected successfully |
yao6116601 | 0:5b5a1b5f1ae4 | 92 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 93 | bool join(); |
yao6116601 | 0:5b5a1b5f1ae4 | 94 | |
yao6116601 | 0:5b5a1b5f1ae4 | 95 | /** |
yao6116601 | 0:5b5a1b5f1ae4 | 96 | * Send data |
yao6116601 | 0:5b5a1b5f1ae4 | 97 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 98 | * @param port 端口 ack 重发标志 |
yao6116601 | 0:5b5a1b5f1ae4 | 99 | * @param data data to be sent |
yao6116601 | 0:5b5a1b5f1ae4 | 100 | * @param amount amount of data to be sent - max 1024 |
yao6116601 | 0:5b5a1b5f1ae4 | 101 | * @return true only if data sent successfully |
yao6116601 | 0:5b5a1b5f1ae4 | 102 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 103 | bool send(int port,int ack, const void *data, uint32_t amount); |
yao6116601 | 0:5b5a1b5f1ae4 | 104 | /** |
yao6116601 | 0:5b5a1b5f1ae4 | 105 | * Send data hex |
yao6116601 | 0:5b5a1b5f1ae4 | 106 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 107 | * @param port 端口 ack 重发标志 |
yao6116601 | 0:5b5a1b5f1ae4 | 108 | * @param data data to be sent |
yao6116601 | 0:5b5a1b5f1ae4 | 109 | * @param amount amount of data to be sent in hex |
yao6116601 | 0:5b5a1b5f1ae4 | 110 | * @return true only if data sent successfully |
yao6116601 | 0:5b5a1b5f1ae4 | 111 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 112 | bool sendhex(int port,int ack, const void *data, uint32_t amount); |
yao6116601 | 0:5b5a1b5f1ae4 | 113 | /** |
yao6116601 | 0:5b5a1b5f1ae4 | 114 | * Receives data from an open socket |
yao6116601 | 0:5b5a1b5f1ae4 | 115 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 116 | * @param id id to receive from |
yao6116601 | 0:5b5a1b5f1ae4 | 117 | * @param data placeholder for returned information |
yao6116601 | 0:5b5a1b5f1ae4 | 118 | * @param amount number of bytes to be received |
yao6116601 | 0:5b5a1b5f1ae4 | 119 | * @return the number of bytes received |
yao6116601 | 0:5b5a1b5f1ae4 | 120 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 121 | int32_t recv(int id, void *data, uint32_t amount); |
yao6116601 | 0:5b5a1b5f1ae4 | 122 | |
yao6116601 | 0:5b5a1b5f1ae4 | 123 | /** |
yao6116601 | 0:5b5a1b5f1ae4 | 124 | * Allows timeout to be changed between commands |
yao6116601 | 0:5b5a1b5f1ae4 | 125 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 126 | * @param timeout_ms timeout of the connection |
yao6116601 | 0:5b5a1b5f1ae4 | 127 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 128 | void setTimeout(uint32_t timeout_ms); |
yao6116601 | 0:5b5a1b5f1ae4 | 129 | |
yao6116601 | 0:5b5a1b5f1ae4 | 130 | |
yao6116601 | 0:5b5a1b5f1ae4 | 131 | /** |
yao6116601 | 0:5b5a1b5f1ae4 | 132 | * Attach a function to call whenever network state has changed |
yao6116601 | 0:5b5a1b5f1ae4 | 133 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 134 | * @param func A pointer to a void function, or 0 to set as none |
yao6116601 | 0:5b5a1b5f1ae4 | 135 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 136 | void attach(Callback<void()> func); |
yao6116601 | 0:5b5a1b5f1ae4 | 137 | |
yao6116601 | 0:5b5a1b5f1ae4 | 138 | /** |
yao6116601 | 0:5b5a1b5f1ae4 | 139 | * Attach a function to call whenever network state has changed |
yao6116601 | 0:5b5a1b5f1ae4 | 140 | * |
yao6116601 | 0:5b5a1b5f1ae4 | 141 | * @param obj pointer to the object to call the member function on |
yao6116601 | 0:5b5a1b5f1ae4 | 142 | * @param method pointer to the member function to call |
yao6116601 | 0:5b5a1b5f1ae4 | 143 | */ |
yao6116601 | 0:5b5a1b5f1ae4 | 144 | template <typename T, typename M> |
yao6116601 | 0:5b5a1b5f1ae4 | 145 | void attach(T *obj, M method) { |
yao6116601 | 0:5b5a1b5f1ae4 | 146 | attach(Callback<void()>(obj, method)); |
yao6116601 | 0:5b5a1b5f1ae4 | 147 | } |
yao6116601 | 0:5b5a1b5f1ae4 | 148 | |
yao6116601 | 0:5b5a1b5f1ae4 | 149 | private: |
yao6116601 | 0:5b5a1b5f1ae4 | 150 | UARTSerial _serial; |
yao6116601 | 0:5b5a1b5f1ae4 | 151 | ATCmdParser _parser; |
yao6116601 | 0:5b5a1b5f1ae4 | 152 | char buffer[256]; |
yao6116601 | 0:5b5a1b5f1ae4 | 153 | char rBuffer[256]; |
yao6116601 | 0:5b5a1b5f1ae4 | 154 | int rIndex; |
yao6116601 | 0:5b5a1b5f1ae4 | 155 | int rCounter; |
yao6116601 | 0:5b5a1b5f1ae4 | 156 | int _connect_error; |
yao6116601 | 0:5b5a1b5f1ae4 | 157 | bool _fail; |
yao6116601 | 0:5b5a1b5f1ae4 | 158 | void _packet_handler(); |
yao6116601 | 0:5b5a1b5f1ae4 | 159 | }; |
yao6116601 | 0:5b5a1b5f1ae4 | 160 | |
yao6116601 | 0:5b5a1b5f1ae4 | 161 | #endif |