Hexiwear library for communicating with the on-board KW40Z BLE device. KW40Z handles also the touch buttons.

Dependents:   Hexi_Buttons_Example Hexi_Click_Relay-v2_Example Hexi_Click_Relay-v3_Example Hexi_Catch-the-dot_Game ... more

Committer:
cotigac
Date:
Mon Sep 26 02:36:12 2016 +0000
Revision:
10:1bed2b28ee18
Parent:
9:8058541a8e2d
Child:
11:a9a838035b87
Updated debug checking

Who changed what in which revision?

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