Xi Han / Hexi_KW40Z

Dependents:   Hexi_BLE_Example_Modified Hexi_BLE_Example_ModifiedPOTATO

Fork of Hexi_KW40Z by Hexiwear

Committer:
khuang
Date:
Sun Sep 25 05:50:22 2016 +0000
Revision:
8:2b9b24f3154d
SendAccel, SendGyro,SendMag functions changed to accept int16_t instead of uint8_t. UART Messaging API has error. mag,accel and gyro should be 6 bytes instead of 3.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
khuang 8:2b9b24f3154d 1 /** BLE KW40Z Driver for Hexiwear
khuang 8:2b9b24f3154d 2 * This file contains BLE and Touch Buttons driver functionality for Hexiwear
khuang 8:2b9b24f3154d 3 *
khuang 8:2b9b24f3154d 4 * Redistribution and use in source and binary forms, with or without modification,
khuang 8:2b9b24f3154d 5 * are permitted provided that the following conditions are met:
khuang 8:2b9b24f3154d 6 *
khuang 8:2b9b24f3154d 7 * Redistributions of source code must retain the above copyright notice, this list
khuang 8:2b9b24f3154d 8 * of conditions and the following disclaimer.
khuang 8:2b9b24f3154d 9 *
khuang 8:2b9b24f3154d 10 * Redistributions in binary form must reproduce the above copyright notice, this
khuang 8:2b9b24f3154d 11 * list of conditions and the following disclaimer in the documentation and/or
khuang 8:2b9b24f3154d 12 * other materials provided with the distribution.
khuang 8:2b9b24f3154d 13 *
khuang 8:2b9b24f3154d 14 * Neither the name of NXP, nor the names of its
khuang 8:2b9b24f3154d 15 * contributors may be used to endorse or promote products derived from this
khuang 8:2b9b24f3154d 16 * software without specific prior written permission.
khuang 8:2b9b24f3154d 17 *
khuang 8:2b9b24f3154d 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
khuang 8:2b9b24f3154d 19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
khuang 8:2b9b24f3154d 20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
khuang 8:2b9b24f3154d 21 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
khuang 8:2b9b24f3154d 22 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
khuang 8:2b9b24f3154d 23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
khuang 8:2b9b24f3154d 24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
khuang 8:2b9b24f3154d 25 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
khuang 8:2b9b24f3154d 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
khuang 8:2b9b24f3154d 27 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
khuang 8:2b9b24f3154d 28 *
khuang 8:2b9b24f3154d 29 * visit: http://www.mikroe.com and http://www.nxp.com
khuang 8:2b9b24f3154d 30 *
khuang 8:2b9b24f3154d 31 * get support at: http://www.mikroe.com/forum and https://community.nxp.com
khuang 8:2b9b24f3154d 32 *
khuang 8:2b9b24f3154d 33 * Project HEXIWEAR, 2015
khuang 8:2b9b24f3154d 34 */
khuang 8:2b9b24f3154d 35
khuang 8:2b9b24f3154d 36 #include "Hexi_KW40Z.h"
khuang 8:2b9b24f3154d 37
khuang 8:2b9b24f3154d 38 #if defined (LIB_DEBUG)
khuang 8:2b9b24f3154d 39 RawSerial pc(USBTX, USBRX); // tx, rx
khuang 8:2b9b24f3154d 40 #endif
khuang 8:2b9b24f3154d 41
khuang 8:2b9b24f3154d 42 KW40Z::KW40Z(PinName txPin,PinName rxPin) : device(txPin, rxPin), mainThread(osPriorityNormal,1024), rxThread(osPriorityNormal,1024)
khuang 8:2b9b24f3154d 43 {
khuang 8:2b9b24f3154d 44 #if defined (LIB_DEBUG)
khuang 8:2b9b24f3154d 45 pc.baud(115200);
khuang 8:2b9b24f3154d 46 pc.printf("Initializing\r\n");
khuang 8:2b9b24f3154d 47 #endif
khuang 8:2b9b24f3154d 48
khuang 8:2b9b24f3154d 49 device.baud(230400);
khuang 8:2b9b24f3154d 50 device.format(8, Serial::None, 2);
khuang 8:2b9b24f3154d 51
khuang 8:2b9b24f3154d 52 rxBuff = (uint8_t*)&hostInterface_rxPacket;
khuang 8:2b9b24f3154d 53
khuang 8:2b9b24f3154d 54 /* initialize callbacks */
khuang 8:2b9b24f3154d 55 buttonUpCb = NULL;
khuang 8:2b9b24f3154d 56 buttonDownCb = NULL;
khuang 8:2b9b24f3154d 57 buttonLeftCb = NULL;
khuang 8:2b9b24f3154d 58 buttonRightCb = NULL;
khuang 8:2b9b24f3154d 59 buttonSlideCb = NULL;
khuang 8:2b9b24f3154d 60 alertCb = NULL;
khuang 8:2b9b24f3154d 61 passkeyCb = NULL;
khuang 8:2b9b24f3154d 62 notificationsCb = NULL;
khuang 8:2b9b24f3154d 63
khuang 8:2b9b24f3154d 64 kw40_version.ver_patchNumber = 0;
khuang 8:2b9b24f3154d 65 kw40_version.ver_minorNumber = 0;
khuang 8:2b9b24f3154d 66 kw40_version.ver_majorNumber = 0;
khuang 8:2b9b24f3154d 67
khuang 8:2b9b24f3154d 68 activeTsiGroup = 0;
khuang 8:2b9b24f3154d 69 advertisementMode = 0;
khuang 8:2b9b24f3154d 70 linkState = 0;
khuang 8:2b9b24f3154d 71 bondPassKey = 0;
khuang 8:2b9b24f3154d 72
khuang 8:2b9b24f3154d 73 /* intialization finalized, signal to start the threads */
khuang 8:2b9b24f3154d 74 mainThread.start(this,&KW40Z::mainTask);
khuang 8:2b9b24f3154d 75 rxThread.start(this, &KW40Z::rxTask);
khuang 8:2b9b24f3154d 76 }
khuang 8:2b9b24f3154d 77
khuang 8:2b9b24f3154d 78 KW40Z::~KW40Z(void)
khuang 8:2b9b24f3154d 79 {
khuang 8:2b9b24f3154d 80 }
khuang 8:2b9b24f3154d 81
khuang 8:2b9b24f3154d 82 void KW40Z::attach_buttonUp(button_t btnFct) { buttonUpCb = btnFct; }
khuang 8:2b9b24f3154d 83 void KW40Z::attach_buttonDown(button_t btnFct) { buttonDownCb = btnFct; }
khuang 8:2b9b24f3154d 84 void KW40Z::attach_buttonLeft(button_t btnFct) { buttonLeftCb = btnFct; }
khuang 8:2b9b24f3154d 85 void KW40Z::attach_buttonRight(button_t btnFct) { buttonRightCb = btnFct; }
khuang 8:2b9b24f3154d 86 void KW40Z::attach_buttonSlide(button_t btnFct) { buttonSlideCb = btnFct; }
khuang 8:2b9b24f3154d 87 void KW40Z::attach_alert(alert_t alertFct) { alertCb = alertFct; }
khuang 8:2b9b24f3154d 88 void KW40Z::attach_passkey(passkey_t passkeyFct){ passkeyCb = passkeyFct; }
khuang 8:2b9b24f3154d 89 void KW40Z::attach_notifications(notifications_t notFct) { notificationsCb = notFct; }
khuang 8:2b9b24f3154d 90
khuang 8:2b9b24f3154d 91 void KW40Z::mainTask(void)
khuang 8:2b9b24f3154d 92 {
khuang 8:2b9b24f3154d 93 #if defined (LIB_DEBUG)
khuang 8:2b9b24f3154d 94 pc.printf("MainTask Stared\r\n");
khuang 8:2b9b24f3154d 95 #endif
khuang 8:2b9b24f3154d 96
khuang 8:2b9b24f3154d 97 SendGetActiveTsiGroup();
khuang 8:2b9b24f3154d 98 SendGetAdvertisementMode();
khuang 8:2b9b24f3154d 99 SendGetLinkState();
khuang 8:2b9b24f3154d 100 SendGetVersion();
khuang 8:2b9b24f3154d 101
khuang 8:2b9b24f3154d 102 while(1)
khuang 8:2b9b24f3154d 103 {
khuang 8:2b9b24f3154d 104 osEvent evt = queue.get();
khuang 8:2b9b24f3154d 105 if (evt.status == osEventMessage)
khuang 8:2b9b24f3154d 106 {
khuang 8:2b9b24f3154d 107 hostInterface_packet_t *rxPacket = (hostInterface_packet_t*)evt.value.p;
khuang 8:2b9b24f3154d 108 ProcessReceivedPacket(rxPacket);
khuang 8:2b9b24f3154d 109 mpool.free(rxPacket);
khuang 8:2b9b24f3154d 110 }
khuang 8:2b9b24f3154d 111 }
khuang 8:2b9b24f3154d 112 }
khuang 8:2b9b24f3154d 113
khuang 8:2b9b24f3154d 114 void KW40Z::rxTask(void)
khuang 8:2b9b24f3154d 115 {
khuang 8:2b9b24f3154d 116 #if defined (LIB_DEBUG)
khuang 8:2b9b24f3154d 117 pc.printf("RxTask Stared\r\n");
khuang 8:2b9b24f3154d 118 #endif
khuang 8:2b9b24f3154d 119
khuang 8:2b9b24f3154d 120 while(1)
khuang 8:2b9b24f3154d 121 {
khuang 8:2b9b24f3154d 122 if(device.readable())
khuang 8:2b9b24f3154d 123 {
khuang 8:2b9b24f3154d 124 *rxBuff++ = device.getc();
khuang 8:2b9b24f3154d 125 ProcessBuffer();
khuang 8:2b9b24f3154d 126
khuang 8:2b9b24f3154d 127 /* check for buffer overflow */
khuang 8:2b9b24f3154d 128 if(rxBuff >= ((uint8_t*)&hostInterface_rxPacket + sizeof(hostInterface_rxPacket)))
khuang 8:2b9b24f3154d 129 {
khuang 8:2b9b24f3154d 130 rxBuff = (uint8_t*)&hostInterface_rxPacket;
khuang 8:2b9b24f3154d 131 }
khuang 8:2b9b24f3154d 132 }
khuang 8:2b9b24f3154d 133 }
khuang 8:2b9b24f3154d 134 }
khuang 8:2b9b24f3154d 135
khuang 8:2b9b24f3154d 136 #if defined (LIB_DEBUG)
khuang 8:2b9b24f3154d 137 void KW40Z::DebugPrintTxPacket(hostInterface_packet_t * txPacket)
khuang 8:2b9b24f3154d 138 {
khuang 8:2b9b24f3154d 139 char * txBuff = (char *)txPacket;
khuang 8:2b9b24f3154d 140 uint8_t length = txPacket->length + gHostInterface_headerSize + 1;
khuang 8:2b9b24f3154d 141
khuang 8:2b9b24f3154d 142 pc.printf("Tx: ");
khuang 8:2b9b24f3154d 143 for(uint8_t i = 0; i < length; i++)
khuang 8:2b9b24f3154d 144 {
khuang 8:2b9b24f3154d 145 pc.printf("%02X ",*txBuff);
khuang 8:2b9b24f3154d 146 txBuff++;
khuang 8:2b9b24f3154d 147 }
khuang 8:2b9b24f3154d 148 pc.printf("\r\n");
khuang 8:2b9b24f3154d 149 }
khuang 8:2b9b24f3154d 150
khuang 8:2b9b24f3154d 151 void KW40Z::DebugPrintRxPacket()
khuang 8:2b9b24f3154d 152 {
khuang 8:2b9b24f3154d 153 pc.printf("RX: ");
khuang 8:2b9b24f3154d 154 for(uint8_t * i = (uint8_t*)&hostInterface_rxPacket; i<rxBuff; i++)
khuang 8:2b9b24f3154d 155 {
khuang 8:2b9b24f3154d 156 pc.printf("%02X ",*i);
khuang 8:2b9b24f3154d 157 }
khuang 8:2b9b24f3154d 158 pc.printf("\r\n");
khuang 8:2b9b24f3154d 159 }
khuang 8:2b9b24f3154d 160 #endif
khuang 8:2b9b24f3154d 161
khuang 8:2b9b24f3154d 162
khuang 8:2b9b24f3154d 163 void KW40Z::SendPacket(hostInterface_packet_t * txPacket, bool confirmRequested)
khuang 8:2b9b24f3154d 164 {
khuang 8:2b9b24f3154d 165 uint8_t retries = 0;
khuang 8:2b9b24f3154d 166 confirmReceived = false;
khuang 8:2b9b24f3154d 167
khuang 8:2b9b24f3154d 168 do
khuang 8:2b9b24f3154d 169 {
khuang 8:2b9b24f3154d 170 char * txBuff = (char *)txPacket;
khuang 8:2b9b24f3154d 171 uint8_t length = txPacket->length + gHostInterface_headerSize + 1;
khuang 8:2b9b24f3154d 172
khuang 8:2b9b24f3154d 173 if(confirmRequested == true)
khuang 8:2b9b24f3154d 174 {
khuang 8:2b9b24f3154d 175 txPacket->start2 |= 0x01;
khuang 8:2b9b24f3154d 176 }
khuang 8:2b9b24f3154d 177
khuang 8:2b9b24f3154d 178 for(uint8_t i = 0; i < length; i++)
khuang 8:2b9b24f3154d 179 {
khuang 8:2b9b24f3154d 180 device.putc(*txBuff);
khuang 8:2b9b24f3154d 181 txBuff++;
khuang 8:2b9b24f3154d 182 }
khuang 8:2b9b24f3154d 183
khuang 8:2b9b24f3154d 184 #if defined (LIB_DEBUG)
khuang 8:2b9b24f3154d 185 DebugPrintTxPacket(txPacket);
khuang 8:2b9b24f3154d 186 #endif
khuang 8:2b9b24f3154d 187
khuang 8:2b9b24f3154d 188 retries++;
khuang 8:2b9b24f3154d 189
khuang 8:2b9b24f3154d 190 #if defined (gHostInterface_RxConfirmationEnable)
khuang 8:2b9b24f3154d 191 if((confirmRequested == true) && (confirmReceived == false))
khuang 8:2b9b24f3154d 192 {
khuang 8:2b9b24f3154d 193 Thread::wait(gHostInterface_retransmitTimeout);
khuang 8:2b9b24f3154d 194 }
khuang 8:2b9b24f3154d 195 #endif
khuang 8:2b9b24f3154d 196 }
khuang 8:2b9b24f3154d 197 while((confirmRequested == true) &&
khuang 8:2b9b24f3154d 198 (confirmReceived == false) &&
khuang 8:2b9b24f3154d 199 (retries < gHostInterface_retransmitCount));
khuang 8:2b9b24f3154d 200 }
khuang 8:2b9b24f3154d 201
khuang 8:2b9b24f3154d 202 void KW40Z::ProcessBuffer()
khuang 8:2b9b24f3154d 203 {
khuang 8:2b9b24f3154d 204 /* check if header has been received */
khuang 8:2b9b24f3154d 205 if(rxBuff > ((uint8_t*)&hostInterface_rxPacket + gHostInterface_headerSize))
khuang 8:2b9b24f3154d 206 {
khuang 8:2b9b24f3154d 207 /* check packet header */
khuang 8:2b9b24f3154d 208 if((gHostInterface_startByte1 != hostInterface_rxPacket.start1)||
khuang 8:2b9b24f3154d 209 (gHostInterface_startByte2 != (hostInterface_rxPacket.start2 & 0xFE))||
khuang 8:2b9b24f3154d 210 (hostInterface_rxPacket.length > gHostInterface_dataSize))
khuang 8:2b9b24f3154d 211 {
khuang 8:2b9b24f3154d 212 #if defined (LIB_DEBUG)
khuang 8:2b9b24f3154d 213 DebugPrintRxPacket();
khuang 8:2b9b24f3154d 214 pc.printf("check header failed\r\n");
khuang 8:2b9b24f3154d 215 #endif
khuang 8:2b9b24f3154d 216
khuang 8:2b9b24f3154d 217 SearchStartByte();
khuang 8:2b9b24f3154d 218 }
khuang 8:2b9b24f3154d 219 else
khuang 8:2b9b24f3154d 220 {
khuang 8:2b9b24f3154d 221 /* check data length */
khuang 8:2b9b24f3154d 222 if(rxBuff > ((uint8_t*)&hostInterface_rxPacket + gHostInterface_headerSize + hostInterface_rxPacket.length))
khuang 8:2b9b24f3154d 223 {
khuang 8:2b9b24f3154d 224 /* check trailer byte */
khuang 8:2b9b24f3154d 225 if(gHostInterface_trailerByte != hostInterface_rxPacket.data[hostInterface_rxPacket.length])
khuang 8:2b9b24f3154d 226 {
khuang 8:2b9b24f3154d 227 #if defined (LIB_DEBUG)
khuang 8:2b9b24f3154d 228 DebugPrintRxPacket();
khuang 8:2b9b24f3154d 229 pc.printf("trailer byte failed\r\n");
khuang 8:2b9b24f3154d 230 #endif
khuang 8:2b9b24f3154d 231
khuang 8:2b9b24f3154d 232 SearchStartByte();
khuang 8:2b9b24f3154d 233 }
khuang 8:2b9b24f3154d 234 else
khuang 8:2b9b24f3154d 235 {
khuang 8:2b9b24f3154d 236
khuang 8:2b9b24f3154d 237 #if defined (gHostInterface_RxConfirmationEnable)
khuang 8:2b9b24f3154d 238 if(hostInterface_rxPacket.type == packetType_OK)
khuang 8:2b9b24f3154d 239 {
khuang 8:2b9b24f3154d 240 confirmReceived = true;
khuang 8:2b9b24f3154d 241 }
khuang 8:2b9b24f3154d 242 #endif
khuang 8:2b9b24f3154d 243
khuang 8:2b9b24f3154d 244 /* send message to main task */
khuang 8:2b9b24f3154d 245 hostInterface_packet_t *rxPacket = mpool.alloc();
khuang 8:2b9b24f3154d 246 memcpy(rxPacket, &hostInterface_rxPacket, sizeof(hostInterface_packet_t));
khuang 8:2b9b24f3154d 247 queue.put(rxPacket);
khuang 8:2b9b24f3154d 248
khuang 8:2b9b24f3154d 249 #if defined (LIB_DEBUG)
khuang 8:2b9b24f3154d 250 DebugPrintRxPacket();
khuang 8:2b9b24f3154d 251 #endif
khuang 8:2b9b24f3154d 252 /* reset buffer position */
khuang 8:2b9b24f3154d 253 rxBuff = (uint8_t*)&hostInterface_rxPacket;
khuang 8:2b9b24f3154d 254 }
khuang 8:2b9b24f3154d 255 }
khuang 8:2b9b24f3154d 256 }
khuang 8:2b9b24f3154d 257 }
khuang 8:2b9b24f3154d 258 }
khuang 8:2b9b24f3154d 259
khuang 8:2b9b24f3154d 260 void KW40Z::SearchStartByte()
khuang 8:2b9b24f3154d 261 {
khuang 8:2b9b24f3154d 262 bool found = false;
khuang 8:2b9b24f3154d 263 uint8_t * rdIdx = (uint8_t*)&hostInterface_rxPacket + 1;
khuang 8:2b9b24f3154d 264
khuang 8:2b9b24f3154d 265 while(rdIdx < rxBuff)
khuang 8:2b9b24f3154d 266 {
khuang 8:2b9b24f3154d 267 if(*rdIdx == gHostInterface_startByte1)
khuang 8:2b9b24f3154d 268 {
khuang 8:2b9b24f3154d 269 uint32_t len = rxBuff - rdIdx;
khuang 8:2b9b24f3154d 270
khuang 8:2b9b24f3154d 271 memcpy(&hostInterface_rxPacket,rdIdx,len);
khuang 8:2b9b24f3154d 272 rxBuff -= len;
khuang 8:2b9b24f3154d 273 found = true;
khuang 8:2b9b24f3154d 274
khuang 8:2b9b24f3154d 275 #if defined (LIB_DEBUG)
khuang 8:2b9b24f3154d 276 pc.printf("moving ");
khuang 8:2b9b24f3154d 277 #endif
khuang 8:2b9b24f3154d 278 break;
khuang 8:2b9b24f3154d 279 }
khuang 8:2b9b24f3154d 280 rdIdx++;
khuang 8:2b9b24f3154d 281 }
khuang 8:2b9b24f3154d 282
khuang 8:2b9b24f3154d 283 if(!found)
khuang 8:2b9b24f3154d 284 {
khuang 8:2b9b24f3154d 285 /* reset buffer position */
khuang 8:2b9b24f3154d 286 rxBuff = (uint8_t*)&hostInterface_rxPacket;
khuang 8:2b9b24f3154d 287 }
khuang 8:2b9b24f3154d 288
khuang 8:2b9b24f3154d 289 #if defined (LIB_DEBUG)
khuang 8:2b9b24f3154d 290 pc.printf("search done\r\n");
khuang 8:2b9b24f3154d 291 DebugPrintRxPacket();
khuang 8:2b9b24f3154d 292 #endif
khuang 8:2b9b24f3154d 293 }
khuang 8:2b9b24f3154d 294
khuang 8:2b9b24f3154d 295 void KW40Z::ProcessReceivedPacket(hostInterface_packet_t * rxPacket)
khuang 8:2b9b24f3154d 296 {
khuang 8:2b9b24f3154d 297 #if defined (LIB_DEBUG)
khuang 8:2b9b24f3154d 298 pc.printf("packet found %d\r\n", rxPacket->type);
khuang 8:2b9b24f3154d 299 #endif
khuang 8:2b9b24f3154d 300
khuang 8:2b9b24f3154d 301 #ifdef gHostInterface_TxConfirmationEnable
khuang 8:2b9b24f3154d 302 // acknowledge the packet reception
khuang 8:2b9b24f3154d 303 if ( 1 == ( rxPacket->start2 & 0x01 ) )
khuang 8:2b9b24f3154d 304 {
khuang 8:2b9b24f3154d 305 SendPacketOK();
khuang 8:2b9b24f3154d 306 }
khuang 8:2b9b24f3154d 307 #endif
khuang 8:2b9b24f3154d 308
khuang 8:2b9b24f3154d 309 switch(rxPacket->type)
khuang 8:2b9b24f3154d 310 {
khuang 8:2b9b24f3154d 311 /* button presses */
khuang 8:2b9b24f3154d 312 case packetType_pressUp:
khuang 8:2b9b24f3154d 313 if(buttonUpCb != NULL) buttonUpCb();
khuang 8:2b9b24f3154d 314 break;
khuang 8:2b9b24f3154d 315
khuang 8:2b9b24f3154d 316 case packetType_pressDown:
khuang 8:2b9b24f3154d 317 if(buttonDownCb != NULL) buttonDownCb();
khuang 8:2b9b24f3154d 318 break;
khuang 8:2b9b24f3154d 319
khuang 8:2b9b24f3154d 320 case packetType_pressLeft:
khuang 8:2b9b24f3154d 321 if(buttonLeftCb != NULL) buttonLeftCb();
khuang 8:2b9b24f3154d 322 break;
khuang 8:2b9b24f3154d 323
khuang 8:2b9b24f3154d 324 case packetType_pressRight:
khuang 8:2b9b24f3154d 325 if(buttonRightCb != NULL) buttonRightCb();
khuang 8:2b9b24f3154d 326 break;
khuang 8:2b9b24f3154d 327
khuang 8:2b9b24f3154d 328 case packetType_slide:
khuang 8:2b9b24f3154d 329 if(buttonSlideCb != NULL) buttonSlideCb();
khuang 8:2b9b24f3154d 330 break;
khuang 8:2b9b24f3154d 331
khuang 8:2b9b24f3154d 332 /* Alert Service */
khuang 8:2b9b24f3154d 333 case packetType_alertIn:
khuang 8:2b9b24f3154d 334 if(alertCb != NULL) alertCb(&rxPacket->data[0], rxPacket->length);
khuang 8:2b9b24f3154d 335 break;
khuang 8:2b9b24f3154d 336
khuang 8:2b9b24f3154d 337 /* Passkey for pairing received */
khuang 8:2b9b24f3154d 338 case packetType_passDisplay:
khuang 8:2b9b24f3154d 339 if(passkeyCb != NULL)
khuang 8:2b9b24f3154d 340 {
khuang 8:2b9b24f3154d 341 memcpy((uint8_t *)&bondPassKey,&rxPacket->data[0], 3);
khuang 8:2b9b24f3154d 342 passkeyCb();
khuang 8:2b9b24f3154d 343 }
khuang 8:2b9b24f3154d 344 break;
khuang 8:2b9b24f3154d 345
khuang 8:2b9b24f3154d 346 /* OTAP messages */
khuang 8:2b9b24f3154d 347 case packetType_otapCompleted:
khuang 8:2b9b24f3154d 348 case packetType_otapFailed:
khuang 8:2b9b24f3154d 349 break;
khuang 8:2b9b24f3154d 350
khuang 8:2b9b24f3154d 351 /* TSI Status */
khuang 8:2b9b24f3154d 352 case packetType_buttonsGroupSendActive:
khuang 8:2b9b24f3154d 353 activeTsiGroup = rxPacket->data[0];
khuang 8:2b9b24f3154d 354 break;
khuang 8:2b9b24f3154d 355
khuang 8:2b9b24f3154d 356 /* Advertisement Mode Info */
khuang 8:2b9b24f3154d 357 case packetType_advModeSend:
khuang 8:2b9b24f3154d 358 advertisementMode = rxPacket->data[0];
khuang 8:2b9b24f3154d 359 break;
khuang 8:2b9b24f3154d 360
khuang 8:2b9b24f3154d 361 /* Link State */
khuang 8:2b9b24f3154d 362 case packetType_linkStateSend:
khuang 8:2b9b24f3154d 363 linkState = rxPacket->data[0];
khuang 8:2b9b24f3154d 364 break;
khuang 8:2b9b24f3154d 365
khuang 8:2b9b24f3154d 366 /* ANCS Service Notification Received */
khuang 8:2b9b24f3154d 367 case packetType_notification:
khuang 8:2b9b24f3154d 368 if(notificationsCb != NULL) notificationsCb(rxPacket->data[0], rxPacket->data[1]);
khuang 8:2b9b24f3154d 369 break;
khuang 8:2b9b24f3154d 370
khuang 8:2b9b24f3154d 371 /* Build version */
khuang 8:2b9b24f3154d 372 case packetType_buildVersion:
khuang 8:2b9b24f3154d 373 kw40_version.ver_patchNumber = rxPacket->data[2];
khuang 8:2b9b24f3154d 374 kw40_version.ver_minorNumber = rxPacket->data[1];
khuang 8:2b9b24f3154d 375 kw40_version.ver_majorNumber = rxPacket->data[0];
khuang 8:2b9b24f3154d 376 break;
khuang 8:2b9b24f3154d 377
khuang 8:2b9b24f3154d 378 case packetType_OK:
khuang 8:2b9b24f3154d 379 /* do nothing, the flag is set in the RxTask */
khuang 8:2b9b24f3154d 380 break;
khuang 8:2b9b24f3154d 381
khuang 8:2b9b24f3154d 382 default:
khuang 8:2b9b24f3154d 383 break;
khuang 8:2b9b24f3154d 384 }
khuang 8:2b9b24f3154d 385 }
khuang 8:2b9b24f3154d 386
khuang 8:2b9b24f3154d 387 void KW40Z::SendBatteryLevel(uint8_t percentage)
khuang 8:2b9b24f3154d 388 {
khuang 8:2b9b24f3154d 389 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 390
khuang 8:2b9b24f3154d 391 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 392 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 393 txPacket.type = packetType_batteryLevel;
khuang 8:2b9b24f3154d 394 txPacket.length = 1;
khuang 8:2b9b24f3154d 395 txPacket.data[0] = percentage;
khuang 8:2b9b24f3154d 396 txPacket.data[1] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 397
khuang 8:2b9b24f3154d 398 SendPacket(&txPacket, true);
khuang 8:2b9b24f3154d 399 }
khuang 8:2b9b24f3154d 400
khuang 8:2b9b24f3154d 401 void KW40Z::SendAccel(uint8_t x, uint8_t y, uint8_t z)
khuang 8:2b9b24f3154d 402 {
khuang 8:2b9b24f3154d 403 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 404
khuang 8:2b9b24f3154d 405 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 406 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 407 txPacket.type = packetType_accel;
khuang 8:2b9b24f3154d 408 txPacket.length = 3;
khuang 8:2b9b24f3154d 409 txPacket.data[0] = x;
khuang 8:2b9b24f3154d 410 txPacket.data[1] = y;
khuang 8:2b9b24f3154d 411 txPacket.data[2] = z;
khuang 8:2b9b24f3154d 412 txPacket.data[3] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 413
khuang 8:2b9b24f3154d 414 SendPacket(&txPacket, true);
khuang 8:2b9b24f3154d 415 }
khuang 8:2b9b24f3154d 416
khuang 8:2b9b24f3154d 417 void KW40Z::SendGyro(uint8_t x, uint8_t y, uint8_t z)
khuang 8:2b9b24f3154d 418 {
khuang 8:2b9b24f3154d 419 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 420
khuang 8:2b9b24f3154d 421 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 422 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 423 txPacket.type = packetType_gyro;
khuang 8:2b9b24f3154d 424 txPacket.length = 3;
khuang 8:2b9b24f3154d 425 txPacket.data[0] = x;
khuang 8:2b9b24f3154d 426 txPacket.data[1] = y;
khuang 8:2b9b24f3154d 427 txPacket.data[2] = z;
khuang 8:2b9b24f3154d 428 txPacket.data[3] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 429
khuang 8:2b9b24f3154d 430 SendPacket(&txPacket, true);
khuang 8:2b9b24f3154d 431 }
khuang 8:2b9b24f3154d 432
khuang 8:2b9b24f3154d 433 void KW40Z::SendMag(uint8_t x, uint8_t y, uint8_t z)
khuang 8:2b9b24f3154d 434 {
khuang 8:2b9b24f3154d 435 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 436
khuang 8:2b9b24f3154d 437 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 438 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 439 txPacket.type = packetType_magnet;
khuang 8:2b9b24f3154d 440 txPacket.length = 3;
khuang 8:2b9b24f3154d 441 txPacket.data[0] = x;
khuang 8:2b9b24f3154d 442 txPacket.data[1] = y;
khuang 8:2b9b24f3154d 443 txPacket.data[2] = z;
khuang 8:2b9b24f3154d 444 txPacket.data[3] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 445
khuang 8:2b9b24f3154d 446 SendPacket(&txPacket, true);
khuang 8:2b9b24f3154d 447 }
khuang 8:2b9b24f3154d 448
khuang 8:2b9b24f3154d 449 void KW40Z::SendAmbientLight(uint8_t percentage)
khuang 8:2b9b24f3154d 450 {
khuang 8:2b9b24f3154d 451 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 452
khuang 8:2b9b24f3154d 453 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 454 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 455 txPacket.type = packetType_ambiLight;
khuang 8:2b9b24f3154d 456 txPacket.length = 1;
khuang 8:2b9b24f3154d 457 txPacket.data[0] = percentage;
khuang 8:2b9b24f3154d 458 txPacket.data[1] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 459
khuang 8:2b9b24f3154d 460 SendPacket(&txPacket, true);
khuang 8:2b9b24f3154d 461 }
khuang 8:2b9b24f3154d 462
khuang 8:2b9b24f3154d 463 void KW40Z::SendTemperature(uint16_t celsius)
khuang 8:2b9b24f3154d 464 {
khuang 8:2b9b24f3154d 465 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 466
khuang 8:2b9b24f3154d 467 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 468 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 469 txPacket.type = packetType_temperature;
khuang 8:2b9b24f3154d 470 txPacket.length = 2;
khuang 8:2b9b24f3154d 471 memcpy(&txPacket.data[0],(uint8_t*)&celsius,txPacket.length);
khuang 8:2b9b24f3154d 472 txPacket.data[2] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 473
khuang 8:2b9b24f3154d 474 SendPacket(&txPacket, true);
khuang 8:2b9b24f3154d 475 }
khuang 8:2b9b24f3154d 476
khuang 8:2b9b24f3154d 477 void KW40Z::SendHumidity(uint16_t percentage)
khuang 8:2b9b24f3154d 478 {
khuang 8:2b9b24f3154d 479 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 480
khuang 8:2b9b24f3154d 481 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 482 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 483 txPacket.type = packetType_humidity;
khuang 8:2b9b24f3154d 484 txPacket.length = 2;
khuang 8:2b9b24f3154d 485 memcpy(&txPacket.data[0],(uint8_t*)&percentage,txPacket.length);
khuang 8:2b9b24f3154d 486 txPacket.data[2] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 487
khuang 8:2b9b24f3154d 488 SendPacket(&txPacket, true);
khuang 8:2b9b24f3154d 489 }
khuang 8:2b9b24f3154d 490
khuang 8:2b9b24f3154d 491 void KW40Z::SendPressure(uint16_t pascal)
khuang 8:2b9b24f3154d 492 {
khuang 8:2b9b24f3154d 493 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 494
khuang 8:2b9b24f3154d 495 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 496 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 497 txPacket.type = packetType_pressure;
khuang 8:2b9b24f3154d 498 txPacket.length = 2;
khuang 8:2b9b24f3154d 499 memcpy(&txPacket.data[0],(uint8_t*)&pascal,txPacket.length);
khuang 8:2b9b24f3154d 500 txPacket.data[2] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 501
khuang 8:2b9b24f3154d 502 SendPacket(&txPacket, true);
khuang 8:2b9b24f3154d 503 }
khuang 8:2b9b24f3154d 504
khuang 8:2b9b24f3154d 505 void KW40Z::SendHeartRate(uint8_t rate)
khuang 8:2b9b24f3154d 506 {
khuang 8:2b9b24f3154d 507 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 508
khuang 8:2b9b24f3154d 509 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 510 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 511 txPacket.type = packetType_steps;
khuang 8:2b9b24f3154d 512 txPacket.length = 1;
khuang 8:2b9b24f3154d 513 txPacket.data[0] = rate;
khuang 8:2b9b24f3154d 514 txPacket.data[1] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 515
khuang 8:2b9b24f3154d 516 SendPacket(&txPacket, true);
khuang 8:2b9b24f3154d 517 }
khuang 8:2b9b24f3154d 518
khuang 8:2b9b24f3154d 519 void KW40Z::SendSteps(uint16_t steps)
khuang 8:2b9b24f3154d 520 {
khuang 8:2b9b24f3154d 521 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 522
khuang 8:2b9b24f3154d 523 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 524 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 525 txPacket.type = packetType_steps;
khuang 8:2b9b24f3154d 526 txPacket.length = 2;
khuang 8:2b9b24f3154d 527 memcpy(&txPacket.data[0],(uint8_t*)&steps,txPacket.length);
khuang 8:2b9b24f3154d 528 txPacket.data[2] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 529
khuang 8:2b9b24f3154d 530 SendPacket(&txPacket, true);
khuang 8:2b9b24f3154d 531 }
khuang 8:2b9b24f3154d 532
khuang 8:2b9b24f3154d 533 void KW40Z::SendCalories(uint16_t calories)
khuang 8:2b9b24f3154d 534 {
khuang 8:2b9b24f3154d 535 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 536
khuang 8:2b9b24f3154d 537 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 538 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 539 txPacket.type = packetType_calories;
khuang 8:2b9b24f3154d 540 txPacket.length = 2;
khuang 8:2b9b24f3154d 541 memcpy(&txPacket.data[0],(uint8_t*)&calories,txPacket.length);
khuang 8:2b9b24f3154d 542 txPacket.data[2] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 543
khuang 8:2b9b24f3154d 544 SendPacket(&txPacket, true);
khuang 8:2b9b24f3154d 545 }
khuang 8:2b9b24f3154d 546
khuang 8:2b9b24f3154d 547 void KW40Z::SendAlert(uint8_t *pData, uint8_t length)
khuang 8:2b9b24f3154d 548 {
khuang 8:2b9b24f3154d 549 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 550
khuang 8:2b9b24f3154d 551 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 552 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 553 txPacket.type = packetType_alertOut;
khuang 8:2b9b24f3154d 554 txPacket.length = length;
khuang 8:2b9b24f3154d 555 memcpy(&txPacket.data[0],pData,length);
khuang 8:2b9b24f3154d 556 txPacket.data[length] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 557
khuang 8:2b9b24f3154d 558 SendPacket(&txPacket, true);
khuang 8:2b9b24f3154d 559 }
khuang 8:2b9b24f3154d 560
khuang 8:2b9b24f3154d 561 void KW40Z::ToggleTsiGroup(void)
khuang 8:2b9b24f3154d 562 {
khuang 8:2b9b24f3154d 563 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 564
khuang 8:2b9b24f3154d 565 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 566 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 567 txPacket.type = packetType_buttonsGroupToggleActive;
khuang 8:2b9b24f3154d 568 txPacket.length = 0;
khuang 8:2b9b24f3154d 569 txPacket.data[0] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 570
khuang 8:2b9b24f3154d 571 SendPacket(&txPacket, true);
khuang 8:2b9b24f3154d 572 }
khuang 8:2b9b24f3154d 573
khuang 8:2b9b24f3154d 574 void KW40Z::ToggleAdvertisementMode(void)
khuang 8:2b9b24f3154d 575 {
khuang 8:2b9b24f3154d 576 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 577
khuang 8:2b9b24f3154d 578 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 579 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 580 txPacket.type = packetType_advModeToggle;
khuang 8:2b9b24f3154d 581 txPacket.length = 0;
khuang 8:2b9b24f3154d 582 txPacket.data[0] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 583
khuang 8:2b9b24f3154d 584 SendPacket(&txPacket, true);
khuang 8:2b9b24f3154d 585 }
khuang 8:2b9b24f3154d 586
khuang 8:2b9b24f3154d 587 void KW40Z::SendSetApplicationMode(gui_current_app_t mode)
khuang 8:2b9b24f3154d 588 {
khuang 8:2b9b24f3154d 589 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 590
khuang 8:2b9b24f3154d 591 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 592 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 593 txPacket.type = packetType_appMode;
khuang 8:2b9b24f3154d 594 txPacket.length = 1;
khuang 8:2b9b24f3154d 595 txPacket.data[0] = (uint8_t)mode;
khuang 8:2b9b24f3154d 596 txPacket.data[1] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 597
khuang 8:2b9b24f3154d 598 SendPacket(&txPacket, true);
khuang 8:2b9b24f3154d 599 }
khuang 8:2b9b24f3154d 600
khuang 8:2b9b24f3154d 601 void KW40Z::SendGetActiveTsiGroup(void)
khuang 8:2b9b24f3154d 602 {
khuang 8:2b9b24f3154d 603 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 604
khuang 8:2b9b24f3154d 605 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 606 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 607 txPacket.type = packetType_buttonsGroupGetActive;
khuang 8:2b9b24f3154d 608 txPacket.length = 0;
khuang 8:2b9b24f3154d 609 txPacket.data[0] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 610
khuang 8:2b9b24f3154d 611 SendPacket(&txPacket, false);
khuang 8:2b9b24f3154d 612 }
khuang 8:2b9b24f3154d 613
khuang 8:2b9b24f3154d 614 void KW40Z::SendGetAdvertisementMode(void)
khuang 8:2b9b24f3154d 615 {
khuang 8:2b9b24f3154d 616 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 617
khuang 8:2b9b24f3154d 618 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 619 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 620 txPacket.type = packetType_advModeGet;
khuang 8:2b9b24f3154d 621 txPacket.length = 0;
khuang 8:2b9b24f3154d 622 txPacket.data[0] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 623
khuang 8:2b9b24f3154d 624 SendPacket(&txPacket, false);
khuang 8:2b9b24f3154d 625 }
khuang 8:2b9b24f3154d 626
khuang 8:2b9b24f3154d 627 void KW40Z::SendGetLinkState(void)
khuang 8:2b9b24f3154d 628 {
khuang 8:2b9b24f3154d 629 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 630
khuang 8:2b9b24f3154d 631 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 632 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 633 txPacket.type = packetType_linkStateGet;
khuang 8:2b9b24f3154d 634 txPacket.length = 0;
khuang 8:2b9b24f3154d 635 txPacket.data[0] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 636
khuang 8:2b9b24f3154d 637 SendPacket(&txPacket, false);
khuang 8:2b9b24f3154d 638 }
khuang 8:2b9b24f3154d 639
khuang 8:2b9b24f3154d 640 void KW40Z::SendGetVersion(void)
khuang 8:2b9b24f3154d 641 {
khuang 8:2b9b24f3154d 642 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 643
khuang 8:2b9b24f3154d 644 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 645 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 646 txPacket.type = packetType_buildVersion;
khuang 8:2b9b24f3154d 647 txPacket.length = 3;
khuang 8:2b9b24f3154d 648 txPacket.data[0] = HEXIWEAR_VERSION_MAJOR;
khuang 8:2b9b24f3154d 649 txPacket.data[1] = HEXIWEAR_VERSION_MINOR;
khuang 8:2b9b24f3154d 650 txPacket.data[2] = HEXIWEAR_VERSION_PATCH;
khuang 8:2b9b24f3154d 651 txPacket.data[3] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 652
khuang 8:2b9b24f3154d 653 SendPacket(&txPacket, false);
khuang 8:2b9b24f3154d 654 }
khuang 8:2b9b24f3154d 655
khuang 8:2b9b24f3154d 656 void KW40Z::SendPacketOK(void)
khuang 8:2b9b24f3154d 657 {
khuang 8:2b9b24f3154d 658 hostInterface_packet_t txPacket = {0};
khuang 8:2b9b24f3154d 659
khuang 8:2b9b24f3154d 660 txPacket.start1 = gHostInterface_startByte1;
khuang 8:2b9b24f3154d 661 txPacket.start2 = gHostInterface_startByte2;
khuang 8:2b9b24f3154d 662 txPacket.type = packetType_OK;
khuang 8:2b9b24f3154d 663 txPacket.length = 0;
khuang 8:2b9b24f3154d 664 txPacket.data[0] = gHostInterface_trailerByte;
khuang 8:2b9b24f3154d 665
khuang 8:2b9b24f3154d 666 SendPacket(&txPacket, false);
khuang 8:2b9b24f3154d 667 }
khuang 8:2b9b24f3154d 668
khuang 8:2b9b24f3154d 669 uint8_t KW40Z::GetAdvertisementMode(void)
khuang 8:2b9b24f3154d 670 {
khuang 8:2b9b24f3154d 671 return advertisementMode;
khuang 8:2b9b24f3154d 672 }
khuang 8:2b9b24f3154d 673
khuang 8:2b9b24f3154d 674 uint32_t KW40Z::GetPassKey(void)
khuang 8:2b9b24f3154d 675 {
khuang 8:2b9b24f3154d 676 return bondPassKey;
khuang 8:2b9b24f3154d 677 }
khuang 8:2b9b24f3154d 678
khuang 8:2b9b24f3154d 679 uint8_t KW40Z::GetLinkState(void)
khuang 8:2b9b24f3154d 680 {
khuang 8:2b9b24f3154d 681 return linkState;
khuang 8:2b9b24f3154d 682 }
khuang 8:2b9b24f3154d 683
khuang 8:2b9b24f3154d 684 hexiwear_version_t KW40Z::GetVersion(void)
khuang 8:2b9b24f3154d 685 {
khuang 8:2b9b24f3154d 686 return kw40_version;
khuang 8:2b9b24f3154d 687 }
khuang 8:2b9b24f3154d 688
khuang 8:2b9b24f3154d 689 uint8_t KW40Z::GetTsiGroup(void)
khuang 8:2b9b24f3154d 690 {
khuang 8:2b9b24f3154d 691 return activeTsiGroup;
khuang 8:2b9b24f3154d 692 }