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

Dependents:   Hexi_BLE_Example_Modified Hexi_BLE_Example_ModifiedPOTATO

Fork of Hexi_KW40Z by Hexiwear

Committer:
Xi Han
Date:
Mon Aug 27 16:15:26 2018 -0700
Revision:
14:241c491f985f
Parent:
13:84ead63f7353
GM

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
Xi Han 14:241c491f985f 38 KW40Z::KW40Z(PinName txPin,PinName rxPin) :
xihan94 13:84ead63f7353 39 #if defined (LIB_DEBUG) || defined (RAW_DEBUG) || defined (RX_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 {
xihan94 13:84ead63f7353 44 #if defined (LIB_DEBUG) || defined (RX_DEBUG)
cotigac 0:c2d52562f36b 45 pc.baud(115200);
xihan94 13:84ead63f7353 46 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;
xihan94 13:84ead63f7353 61 messageCb = NULL;
cotigac 1:f6f9b24aea57 62 passkeyCb = NULL;
cotigac 1:f6f9b24aea57 63 notificationsCb = NULL;
cotigac 2:bb66c19c3c04 64
cotigac 2:bb66c19c3c04 65 kw40_version.ver_patchNumber = 0;
cotigac 2:bb66c19c3c04 66 kw40_version.ver_minorNumber = 0;
cotigac 2:bb66c19c3c04 67 kw40_version.ver_majorNumber = 0;
cotigac 2:bb66c19c3c04 68
cotigac 2:bb66c19c3c04 69 activeTsiGroup = 0;
cotigac 2:bb66c19c3c04 70 advertisementMode = 0;
cotigac 2:bb66c19c3c04 71 linkState = 0;
khuang 3:9e92f113c671 72 bondPassKey = 0;
Xi Han 14:241c491f985f 73
Xi Han 14:241c491f985f 74 allocated = 0;
Xi Han 14:241c491f985f 75 freed = 0;
cotigac 0:c2d52562f36b 76
cotigac 0:c2d52562f36b 77 /* intialization finalized, signal to start the threads */
cotigac 6:23323e8aeda4 78 rxThread.start(this, &KW40Z::rxTask);
cotigac 9:8058541a8e2d 79 mainThread.start(this,&KW40Z::mainTask);
cotigac 0:c2d52562f36b 80 }
cotigac 0:c2d52562f36b 81
cotigac 0:c2d52562f36b 82 KW40Z::~KW40Z(void)
cotigac 0:c2d52562f36b 83 {
cotigac 0:c2d52562f36b 84 }
cotigac 0:c2d52562f36b 85
cotigac 2:bb66c19c3c04 86 void KW40Z::attach_buttonUp(button_t btnFct) { buttonUpCb = btnFct; }
cotigac 2:bb66c19c3c04 87 void KW40Z::attach_buttonDown(button_t btnFct) { buttonDownCb = btnFct; }
cotigac 2:bb66c19c3c04 88 void KW40Z::attach_buttonLeft(button_t btnFct) { buttonLeftCb = btnFct; }
cotigac 2:bb66c19c3c04 89 void KW40Z::attach_buttonRight(button_t btnFct) { buttonRightCb = btnFct; }
cotigac 2:bb66c19c3c04 90 void KW40Z::attach_buttonSlide(button_t btnFct) { buttonSlideCb = btnFct; }
cotigac 2:bb66c19c3c04 91 void KW40Z::attach_alert(alert_t alertFct) { alertCb = alertFct; }
xihan94 13:84ead63f7353 92 void KW40Z::attach_message(message_t msgFct) { messageCb = msgFct; }
cotigac 2:bb66c19c3c04 93 void KW40Z::attach_passkey(passkey_t passkeyFct){ passkeyCb = passkeyFct; }
cotigac 2:bb66c19c3c04 94 void KW40Z::attach_notifications(notifications_t notFct) { notificationsCb = notFct; }
cotigac 0:c2d52562f36b 95
cotigac 0:c2d52562f36b 96 void KW40Z::mainTask(void)
cotigac 0:c2d52562f36b 97 {
cotigac 0:c2d52562f36b 98 #if defined (LIB_DEBUG)
xihan94 13:84ead63f7353 99 printf("MainTask Stared\r\n");
cotigac 0:c2d52562f36b 100 #endif
cotigac 0:c2d52562f36b 101
cotigac 2:bb66c19c3c04 102 SendGetActiveTsiGroup();
cotigac 2:bb66c19c3c04 103 SendGetAdvertisementMode();
cotigac 2:bb66c19c3c04 104 SendGetLinkState();
cotigac 2:bb66c19c3c04 105 SendGetVersion();
khuang 3:9e92f113c671 106
cotigac 0:c2d52562f36b 107 while(1)
cotigac 0:c2d52562f36b 108 {
cotigac 0:c2d52562f36b 109 osEvent evt = queue.get();
cotigac 0:c2d52562f36b 110 if (evt.status == osEventMessage)
cotigac 0:c2d52562f36b 111 {
cotigac 9:8058541a8e2d 112 hostInterface_packet_t *packet = (hostInterface_packet_t*)evt.value.p;
cotigac 9:8058541a8e2d 113 ProcessPacket(packet);
cotigac 9:8058541a8e2d 114 mpool.free(packet);
Xi Han 14:241c491f985f 115 // freed += 1;
Xi Han 14:241c491f985f 116 // printf("%s%lu\r\n", "non-freed buffer slots: ", allocated - freed);
cotigac 0:c2d52562f36b 117 }
Xi Han 14:241c491f985f 118
cotigac 0:c2d52562f36b 119 }
cotigac 0:c2d52562f36b 120 }
cotigac 0:c2d52562f36b 121
cotigac 0:c2d52562f36b 122 void KW40Z::rxTask(void)
cotigac 0:c2d52562f36b 123 {
xihan94 13:84ead63f7353 124 #if defined (LIB_DEBUG) || defined (RX_DEBUG)
xihan94 13:84ead63f7353 125 printf("RxTask Stared\r\n");
cotigac 0:c2d52562f36b 126 #endif
cotigac 0:c2d52562f36b 127
cotigac 0:c2d52562f36b 128 while(1)
cotigac 0:c2d52562f36b 129 {
cotigac 0:c2d52562f36b 130 if(device.readable())
cotigac 0:c2d52562f36b 131 {
cotigac 0:c2d52562f36b 132 *rxBuff++ = device.getc();
cotigac 0:c2d52562f36b 133 ProcessBuffer();
cotigac 0:c2d52562f36b 134
cotigac 0:c2d52562f36b 135 /* check for buffer overflow */
cotigac 0:c2d52562f36b 136 if(rxBuff >= ((uint8_t*)&hostInterface_rxPacket + sizeof(hostInterface_rxPacket)))
cotigac 0:c2d52562f36b 137 {
cotigac 0:c2d52562f36b 138 rxBuff = (uint8_t*)&hostInterface_rxPacket;
cotigac 0:c2d52562f36b 139 }
cotigac 0:c2d52562f36b 140 }
cotigac 0:c2d52562f36b 141 }
cotigac 0:c2d52562f36b 142 }
cotigac 0:c2d52562f36b 143
cotigac 9:8058541a8e2d 144 void KW40Z::SendPacket(hostInterface_packet_t * txPacket, bool confirmRequested)
cotigac 0:c2d52562f36b 145 {
cotigac 9:8058541a8e2d 146 /* copy txPacket to the mem pool */
cotigac 9:8058541a8e2d 147 hostInterface_packet_t *packet = mpool.alloc();
Xi Han 14:241c491f985f 148
Xi Han 14:241c491f985f 149
Xi Han 14:241c491f985f 150 if (packet == NULL) {
Xi Han 14:241c491f985f 151 return;
Xi Han 14:241c491f985f 152 }
Xi Han 14:241c491f985f 153 allocated += 1;
Xi Han 14:241c491f985f 154
cotigac 9:8058541a8e2d 155 memcpy(packet, txPacket, sizeof(hostInterface_packet_t));
cotigac 9:8058541a8e2d 156
cotigac 9:8058541a8e2d 157 /* Set the TX bit in the Start 2 byte */
cotigac 9:8058541a8e2d 158 packet->start2 |= gHostInterface_txPacketMask;
cotigac 9:8058541a8e2d 159
cotigac 9:8058541a8e2d 160 if (true == confirmRequested)
cotigac 9:8058541a8e2d 161 {
cotigac 9:8058541a8e2d 162 /* Set the confirm requested bit in the Start 2 byte */
cotigac 9:8058541a8e2d 163 packet->start2 |= gHostInterface_rxConfirmMask;
cotigac 9:8058541a8e2d 164 }
cotigac 9:8058541a8e2d 165
cotigac 9:8058541a8e2d 166 #if defined (LIB_DEBUG)
xihan94 13:84ead63f7353 167 printf("SendPacket: ");
cotigac 9:8058541a8e2d 168 DebugPrintPacket(packet);
cotigac 9:8058541a8e2d 169 #endif
Xi Han 14:241c491f985f 170 // printf("SendPacket: ");
Xi Han 14:241c491f985f 171 // DebugPrintPacket(packet);
cotigac 0:c2d52562f36b 172
cotigac 9:8058541a8e2d 173 /* send message to main task */
cotigac 9:8058541a8e2d 174 queue.put(packet);
cotigac 0:c2d52562f36b 175 }
cotigac 0:c2d52562f36b 176
cotigac 9:8058541a8e2d 177 void KW40Z::SendInternal(hostInterface_packet_t * txPacket)
cotigac 2:bb66c19c3c04 178 {
cotigac 2:bb66c19c3c04 179 uint8_t retries = 0;
cotigac 9:8058541a8e2d 180 bool confirmRequested = false;
cotigac 2:bb66c19c3c04 181 confirmReceived = false;
cotigac 2:bb66c19c3c04 182
cotigac 9:8058541a8e2d 183 #if defined (LIB_DEBUG)
xihan94 13:84ead63f7353 184 printf("SendInternal: ");
cotigac 9:8058541a8e2d 185 DebugPrintPacket(txPacket);
cotigac 9:8058541a8e2d 186 #endif
cotigac 9:8058541a8e2d 187
cotigac 9:8058541a8e2d 188 if(gHostInterface_rxConfirmMask == (txPacket->start2 & gHostInterface_rxConfirmMask))
cotigac 9:8058541a8e2d 189 {
cotigac 9:8058541a8e2d 190 confirmRequested = true;
cotigac 10:1bed2b28ee18 191 #if defined (LIB_DEBUG)
xihan94 13:84ead63f7353 192 printf("Found confirmRequested\r\n");
cotigac 10:1bed2b28ee18 193 #endif
cotigac 9:8058541a8e2d 194 }
cotigac 9:8058541a8e2d 195
cotigac 2:bb66c19c3c04 196 do
cotigac 2:bb66c19c3c04 197 {
cotigac 2:bb66c19c3c04 198 char * txBuff = (char *)txPacket;
cotigac 2:bb66c19c3c04 199 uint8_t length = txPacket->length + gHostInterface_headerSize + 1;
cotigac 2:bb66c19c3c04 200
cotigac 2:bb66c19c3c04 201 for(uint8_t i = 0; i < length; i++)
cotigac 2:bb66c19c3c04 202 {
cotigac 2:bb66c19c3c04 203 device.putc(*txBuff);
cotigac 2:bb66c19c3c04 204 txBuff++;
cotigac 2:bb66c19c3c04 205 }
cotigac 2:bb66c19c3c04 206
cotigac 9:8058541a8e2d 207 #if defined (LIB_DEBUG)
xihan94 13:84ead63f7353 208 printf("TX: ");
cotigac 9:8058541a8e2d 209 DebugPrintPacket(txPacket);
cotigac 2:bb66c19c3c04 210 #endif
cotigac 2:bb66c19c3c04 211
cotigac 2:bb66c19c3c04 212 retries++;
cotigac 2:bb66c19c3c04 213
cotigac 2:bb66c19c3c04 214 #if defined (gHostInterface_RxConfirmationEnable)
cotigac 2:bb66c19c3c04 215 if((confirmRequested == true) && (confirmReceived == false))
cotigac 2:bb66c19c3c04 216 {
cotigac 2:bb66c19c3c04 217 Thread::wait(gHostInterface_retransmitTimeout);
cotigac 2:bb66c19c3c04 218 }
cotigac 2:bb66c19c3c04 219 #endif
cotigac 2:bb66c19c3c04 220 }
cotigac 2:bb66c19c3c04 221 while((confirmRequested == true) &&
cotigac 2:bb66c19c3c04 222 (confirmReceived == false) &&
cotigac 2:bb66c19c3c04 223 (retries < gHostInterface_retransmitCount));
cotigac 2:bb66c19c3c04 224 }
cotigac 2:bb66c19c3c04 225
cotigac 0:c2d52562f36b 226 void KW40Z::ProcessBuffer()
cotigac 11:a9a838035b87 227 {
cotigac 11:a9a838035b87 228 #if defined (RAW_DEBUG)
xihan94 13:84ead63f7353 229 printf("%02X ", rxBuff-1);
cotigac 11:a9a838035b87 230 #endif
cotigac 0:c2d52562f36b 231 /* check if header has been received */
cotigac 0:c2d52562f36b 232 if(rxBuff > ((uint8_t*)&hostInterface_rxPacket + gHostInterface_headerSize))
cotigac 0:c2d52562f36b 233 {
cotigac 0:c2d52562f36b 234 /* check packet header */
cotigac 0:c2d52562f36b 235 if((gHostInterface_startByte1 != hostInterface_rxPacket.start1)||
cotigac 0:c2d52562f36b 236 (gHostInterface_startByte2 != (hostInterface_rxPacket.start2 & 0xFE))||
cotigac 0:c2d52562f36b 237 (hostInterface_rxPacket.length > gHostInterface_dataSize))
cotigac 0:c2d52562f36b 238 {
xihan94 13:84ead63f7353 239 #if defined (LIB_DEBUG) || defined (RX_DEBUG)
xihan94 13:84ead63f7353 240 printf("Check header failed: ");
cotigac 9:8058541a8e2d 241 DebugPrintPacket(&hostInterface_rxPacket);
cotigac 0:c2d52562f36b 242 #endif
cotigac 0:c2d52562f36b 243
cotigac 0:c2d52562f36b 244 SearchStartByte();
cotigac 0:c2d52562f36b 245 }
cotigac 0:c2d52562f36b 246 else
cotigac 0:c2d52562f36b 247 {
cotigac 0:c2d52562f36b 248 /* check data length */
cotigac 0:c2d52562f36b 249 if(rxBuff > ((uint8_t*)&hostInterface_rxPacket + gHostInterface_headerSize + hostInterface_rxPacket.length))
cotigac 0:c2d52562f36b 250 {
cotigac 0:c2d52562f36b 251 /* check trailer byte */
cotigac 0:c2d52562f36b 252 if(gHostInterface_trailerByte != hostInterface_rxPacket.data[hostInterface_rxPacket.length])
cotigac 0:c2d52562f36b 253 {
cotigac 0:c2d52562f36b 254 #if defined (LIB_DEBUG)
xihan94 13:84ead63f7353 255 printf("Trailer byte failed: ");
cotigac 9:8058541a8e2d 256 DebugPrintPacket(&hostInterface_rxPacket);
cotigac 0:c2d52562f36b 257 #endif
cotigac 0:c2d52562f36b 258
cotigac 0:c2d52562f36b 259 SearchStartByte();
cotigac 0:c2d52562f36b 260 }
cotigac 0:c2d52562f36b 261 else
cotigac 0:c2d52562f36b 262 {
cotigac 0:c2d52562f36b 263
cotigac 0:c2d52562f36b 264 #if defined (gHostInterface_RxConfirmationEnable)
cotigac 0:c2d52562f36b 265 if(hostInterface_rxPacket.type == packetType_OK)
cotigac 0:c2d52562f36b 266 {
cotigac 0:c2d52562f36b 267 confirmReceived = true;
cotigac 0:c2d52562f36b 268 }
cotigac 0:c2d52562f36b 269 #endif
cotigac 0:c2d52562f36b 270
cotigac 0:c2d52562f36b 271 /* send message to main task */
cotigac 0:c2d52562f36b 272 hostInterface_packet_t *rxPacket = mpool.alloc();
Xi Han 14:241c491f985f 273 allocated += 1;
cotigac 0:c2d52562f36b 274 memcpy(rxPacket, &hostInterface_rxPacket, sizeof(hostInterface_packet_t));
cotigac 0:c2d52562f36b 275 queue.put(rxPacket);
cotigac 0:c2d52562f36b 276
cotigac 9:8058541a8e2d 277 #if defined (LIB_DEBUG)
xihan94 13:84ead63f7353 278 printf("RX: ");
cotigac 9:8058541a8e2d 279 DebugPrintPacket(&hostInterface_rxPacket);
cotigac 11:a9a838035b87 280 #endif
cotigac 11:a9a838035b87 281 #if defined (RAW_DEBUG)
xihan94 13:84ead63f7353 282 printf("\r\n");
cotigac 11:a9a838035b87 283 #endif
Xi Han 14:241c491f985f 284 // printf("RX: ");
Xi Han 14:241c491f985f 285 // DebugPrintPacket(&hostInterface_rxPacket);
Xi Han 14:241c491f985f 286 // printf("\r\n");
cotigac 0:c2d52562f36b 287 /* reset buffer position */
cotigac 0:c2d52562f36b 288 rxBuff = (uint8_t*)&hostInterface_rxPacket;
cotigac 0:c2d52562f36b 289 }
cotigac 0:c2d52562f36b 290 }
cotigac 0:c2d52562f36b 291 }
cotigac 0:c2d52562f36b 292 }
cotigac 0:c2d52562f36b 293 }
cotigac 0:c2d52562f36b 294
cotigac 0:c2d52562f36b 295 void KW40Z::SearchStartByte()
cotigac 0:c2d52562f36b 296 {
cotigac 0:c2d52562f36b 297 bool found = false;
cotigac 11:a9a838035b87 298 uint8_t * rdIdx = (uint8_t*)&hostInterface_rxPacket;
cotigac 11:a9a838035b87 299 rdIdx++;
cotigac 11:a9a838035b87 300
cotigac 0:c2d52562f36b 301 while(rdIdx < rxBuff)
cotigac 0:c2d52562f36b 302 {
cotigac 0:c2d52562f36b 303 if(*rdIdx == gHostInterface_startByte1)
cotigac 0:c2d52562f36b 304 {
cotigac 11:a9a838035b87 305 uint32_t len = rxBuff - rdIdx + 1;
cotigac 0:c2d52562f36b 306
cotigac 0:c2d52562f36b 307 memcpy(&hostInterface_rxPacket,rdIdx,len);
cotigac 11:a9a838035b87 308 rxBuff = (uint8_t*)&hostInterface_rxPacket + len;
cotigac 0:c2d52562f36b 309 found = true;
cotigac 0:c2d52562f36b 310
cotigac 0:c2d52562f36b 311 #if defined (LIB_DEBUG)
xihan94 13:84ead63f7353 312 printf("moving %d", len);
cotigac 0:c2d52562f36b 313 #endif
cotigac 0:c2d52562f36b 314 break;
cotigac 0:c2d52562f36b 315 }
cotigac 0:c2d52562f36b 316 rdIdx++;
cotigac 0:c2d52562f36b 317 }
cotigac 0:c2d52562f36b 318
cotigac 0:c2d52562f36b 319 if(!found)
cotigac 0:c2d52562f36b 320 {
cotigac 0:c2d52562f36b 321 /* reset buffer position */
cotigac 0:c2d52562f36b 322 rxBuff = (uint8_t*)&hostInterface_rxPacket;
cotigac 11:a9a838035b87 323 memset(rxBuff, 0, sizeof(hostInterface_packet_t));
cotigac 0:c2d52562f36b 324 }
cotigac 0:c2d52562f36b 325
cotigac 0:c2d52562f36b 326 #if defined (LIB_DEBUG)
xihan94 13:84ead63f7353 327 printf("Search done: \r\n");
xihan94 13:84ead63f7353 328 printf("rxBuff: ");
cotigac 11:a9a838035b87 329 DebugPrintPacket((hostInterface_packet_t*)rxBuff);
xihan94 13:84ead63f7353 330 printf("rxPack: ");
cotigac 9:8058541a8e2d 331 DebugPrintPacket(&hostInterface_rxPacket);
cotigac 0:c2d52562f36b 332 #endif
cotigac 0:c2d52562f36b 333 }
cotigac 0:c2d52562f36b 334
cotigac 9:8058541a8e2d 335 void KW40Z::ProcessPacket(hostInterface_packet_t * packet)
cotigac 0:c2d52562f36b 336 {
cotigac 9:8058541a8e2d 337 #if defined (LIB_DEBUG)
xihan94 13:84ead63f7353 338 printf("ProcessPacket: ");
cotigac 9:8058541a8e2d 339 DebugPrintPacket(packet);
cotigac 9:8058541a8e2d 340 #endif
cotigac 9:8058541a8e2d 341
cotigac 9:8058541a8e2d 342 /* check if this is a TX packet */
cotigac 9:8058541a8e2d 343 if(gHostInterface_txPacketMask == (packet->start2 & gHostInterface_txPacketMask))
cotigac 9:8058541a8e2d 344 {
cotigac 9:8058541a8e2d 345 /* revert back the TX bit in Start2 byte */
cotigac 9:8058541a8e2d 346 packet->start2 &= ~gHostInterface_txPacketMask;
cotigac 9:8058541a8e2d 347
cotigac 9:8058541a8e2d 348 /* This is not a received packet, so call SendInternal */
cotigac 9:8058541a8e2d 349 SendInternal(packet);
cotigac 9:8058541a8e2d 350 }
cotigac 9:8058541a8e2d 351 else
cotigac 9:8058541a8e2d 352 {
cotigac 9:8058541a8e2d 353 #ifdef gHostInterface_TxConfirmationEnable
cotigac 9:8058541a8e2d 354 /* acknowledge the packet reception if requested by sender */
cotigac 9:8058541a8e2d 355 if(gHostInterface_rxConfirmMask == (packet->start2 & gHostInterface_rxConfirmMask))
cotigac 9:8058541a8e2d 356 {
cotigac 9:8058541a8e2d 357 SendPacketOK();
cotigac 9:8058541a8e2d 358 }
cotigac 0:c2d52562f36b 359 #endif
cotigac 0:c2d52562f36b 360
cotigac 9:8058541a8e2d 361 switch(packet->type)
cotigac 9:8058541a8e2d 362 {
cotigac 9:8058541a8e2d 363 /* button presses */
cotigac 9:8058541a8e2d 364 case packetType_pressUp:
cotigac 9:8058541a8e2d 365 if(buttonUpCb != NULL) buttonUpCb();
cotigac 9:8058541a8e2d 366 break;
cotigac 9:8058541a8e2d 367
cotigac 9:8058541a8e2d 368 case packetType_pressDown:
cotigac 9:8058541a8e2d 369 if(buttonDownCb != NULL) buttonDownCb();
cotigac 9:8058541a8e2d 370 break;
cotigac 9:8058541a8e2d 371
cotigac 9:8058541a8e2d 372 case packetType_pressLeft:
cotigac 9:8058541a8e2d 373 if(buttonLeftCb != NULL) buttonLeftCb();
cotigac 9:8058541a8e2d 374 break;
cotigac 9:8058541a8e2d 375
cotigac 9:8058541a8e2d 376 case packetType_pressRight:
cotigac 9:8058541a8e2d 377 if(buttonRightCb != NULL) buttonRightCb();
cotigac 9:8058541a8e2d 378 break;
cotigac 1:f6f9b24aea57 379
cotigac 9:8058541a8e2d 380 case packetType_slide:
cotigac 9:8058541a8e2d 381 if(buttonSlideCb != NULL) buttonSlideCb();
cotigac 9:8058541a8e2d 382 break;
cotigac 0:c2d52562f36b 383
cotigac 9:8058541a8e2d 384 /* Alert Service */
cotigac 9:8058541a8e2d 385 case packetType_alertIn:
cotigac 9:8058541a8e2d 386 if(alertCb != NULL) alertCb(&packet->data[0], packet->length);
cotigac 9:8058541a8e2d 387 break;
xihan94 13:84ead63f7353 388
xihan94 13:84ead63f7353 389 /* Message Service */
xihan94 13:84ead63f7353 390 case packetType_messageIn:
xihan94 13:84ead63f7353 391 if(messageCb != NULL) messageCb(&packet->data[1], (uint8_t) packet->data[0]);
xihan94 13:84ead63f7353 392 break;
cotigac 0:c2d52562f36b 393
cotigac 9:8058541a8e2d 394 /* Passkey for pairing received */
cotigac 9:8058541a8e2d 395 case packetType_passDisplay:
cotigac 9:8058541a8e2d 396 if(passkeyCb != NULL)
cotigac 9:8058541a8e2d 397 {
cotigac 9:8058541a8e2d 398 memcpy((uint8_t *)&bondPassKey,&packet->data[0], 3);
cotigac 9:8058541a8e2d 399 passkeyCb();
cotigac 9:8058541a8e2d 400 }
cotigac 9:8058541a8e2d 401 break;
cotigac 9:8058541a8e2d 402
cotigac 9:8058541a8e2d 403 /* OTAP messages */
cotigac 9:8058541a8e2d 404 case packetType_otapCompleted:
cotigac 9:8058541a8e2d 405 case packetType_otapFailed:
cotigac 9:8058541a8e2d 406 break;
cotigac 9:8058541a8e2d 407
cotigac 9:8058541a8e2d 408 /* TSI Status */
cotigac 9:8058541a8e2d 409 case packetType_buttonsGroupSendActive:
cotigac 9:8058541a8e2d 410 activeTsiGroup = packet->data[0];
cotigac 9:8058541a8e2d 411 break;
cotigac 9:8058541a8e2d 412
cotigac 9:8058541a8e2d 413 /* Advertisement Mode Info */
cotigac 9:8058541a8e2d 414 case packetType_advModeSend:
cotigac 9:8058541a8e2d 415 advertisementMode = packet->data[0];
cotigac 9:8058541a8e2d 416 break;
cotigac 0:c2d52562f36b 417
cotigac 9:8058541a8e2d 418 /* Link State */
cotigac 9:8058541a8e2d 419 case packetType_linkStateSend:
cotigac 9:8058541a8e2d 420 linkState = packet->data[0];
cotigac 9:8058541a8e2d 421 break;
cotigac 9:8058541a8e2d 422
cotigac 9:8058541a8e2d 423 /* ANCS Service Notification Received */
cotigac 9:8058541a8e2d 424 case packetType_notification:
cotigac 9:8058541a8e2d 425 if(notificationsCb != NULL) notificationsCb(packet->data[0], packet->data[1]);
cotigac 9:8058541a8e2d 426 break;
cotigac 9:8058541a8e2d 427
cotigac 9:8058541a8e2d 428 /* Build version */
cotigac 9:8058541a8e2d 429 case packetType_buildVersion:
cotigac 9:8058541a8e2d 430 kw40_version.ver_patchNumber = packet->data[2];
cotigac 9:8058541a8e2d 431 kw40_version.ver_minorNumber = packet->data[1];
cotigac 9:8058541a8e2d 432 kw40_version.ver_majorNumber = packet->data[0];
cotigac 9:8058541a8e2d 433 break;
cotigac 9:8058541a8e2d 434
cotigac 9:8058541a8e2d 435 case packetType_OK:
cotigac 9:8058541a8e2d 436 /* do nothing, passthrough, the flag is set in the RxTask */
cotigac 9:8058541a8e2d 437 break;
cotigac 9:8058541a8e2d 438
cotigac 9:8058541a8e2d 439 default:
cotigac 9:8058541a8e2d 440 break;
cotigac 9:8058541a8e2d 441 }
cotigac 0:c2d52562f36b 442 }
cotigac 0:c2d52562f36b 443 }
cotigac 2:bb66c19c3c04 444
cotigac 2:bb66c19c3c04 445 void KW40Z::SendBatteryLevel(uint8_t percentage)
cotigac 2:bb66c19c3c04 446 {
cotigac 2:bb66c19c3c04 447 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 448
cotigac 2:bb66c19c3c04 449 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 450 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 451 txPacket.type = packetType_batteryLevel;
cotigac 2:bb66c19c3c04 452 txPacket.length = 1;
cotigac 2:bb66c19c3c04 453 txPacket.data[0] = percentage;
cotigac 2:bb66c19c3c04 454 txPacket.data[1] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 455
cotigac 2:bb66c19c3c04 456 SendPacket(&txPacket, true);
cotigac 2:bb66c19c3c04 457 }
cotigac 2:bb66c19c3c04 458
khuang 8:2b9b24f3154d 459 void KW40Z::SendAccel(int16_t x, int16_t y, int16_t z)
cotigac 2:bb66c19c3c04 460 {
cotigac 2:bb66c19c3c04 461 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 462
cotigac 2:bb66c19c3c04 463 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 464 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 465 txPacket.type = packetType_accel;
khuang 8:2b9b24f3154d 466 txPacket.length = 6;
khuang 8:2b9b24f3154d 467
khuang 8:2b9b24f3154d 468 txPacket.data[0] = (uint8_t) ((x >> 8)&0xFF);
khuang 8:2b9b24f3154d 469 txPacket.data[1] = (uint8_t) x;
khuang 8:2b9b24f3154d 470 txPacket.data[2] = (uint8_t) ((y >> 8)&0xFF);
khuang 8:2b9b24f3154d 471 txPacket.data[3] = (uint8_t) y;
khuang 8:2b9b24f3154d 472 txPacket.data[4] = (uint8_t) ((z >> 8)&0xFF);
khuang 8:2b9b24f3154d 473 txPacket.data[5] = (uint8_t) z;
khuang 8:2b9b24f3154d 474 txPacket.data[6] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 475
cotigac 2:bb66c19c3c04 476 SendPacket(&txPacket, true);
cotigac 2:bb66c19c3c04 477 }
cotigac 2:bb66c19c3c04 478
khuang 8:2b9b24f3154d 479 void KW40Z::SendGyro(int16_t x, int16_t y, int16_t z)
cotigac 2:bb66c19c3c04 480 {
cotigac 2:bb66c19c3c04 481 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 482
cotigac 2:bb66c19c3c04 483 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 484 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 485 txPacket.type = packetType_gyro;
khuang 8:2b9b24f3154d 486 txPacket.length = 6;
khuang 8:2b9b24f3154d 487 txPacket.data[0] = (uint8_t) ((x >> 8)&0xFF);
khuang 8:2b9b24f3154d 488 txPacket.data[1] = (uint8_t) x;
khuang 8:2b9b24f3154d 489 txPacket.data[2] = (uint8_t) ((y >> 8)&0xFF);
khuang 8:2b9b24f3154d 490 txPacket.data[3] = (uint8_t) y;
khuang 8:2b9b24f3154d 491 txPacket.data[4] = (uint8_t) ((z >> 8)&0xFF);
khuang 8:2b9b24f3154d 492 txPacket.data[5] = (uint8_t) z;
khuang 8:2b9b24f3154d 493 txPacket.data[6] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 494
cotigac 2:bb66c19c3c04 495 SendPacket(&txPacket, true);
cotigac 2:bb66c19c3c04 496 }
cotigac 2:bb66c19c3c04 497
khuang 8:2b9b24f3154d 498 void KW40Z::SendMag(int16_t x, int16_t y, int16_t z)
cotigac 2:bb66c19c3c04 499 {
cotigac 2:bb66c19c3c04 500 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 501
cotigac 2:bb66c19c3c04 502 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 503 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 504 txPacket.type = packetType_magnet;
khuang 8:2b9b24f3154d 505 txPacket.length = 6;
khuang 8:2b9b24f3154d 506 txPacket.data[0] = (uint8_t) ((x >> 8)&0xFF);
khuang 8:2b9b24f3154d 507 txPacket.data[1] = (uint8_t) x;
khuang 8:2b9b24f3154d 508 txPacket.data[2] = (uint8_t) ((y >> 8)&0xFF);
khuang 8:2b9b24f3154d 509 txPacket.data[3] = (uint8_t) y;
khuang 8:2b9b24f3154d 510 txPacket.data[4] = (uint8_t) ((z >> 8)&0xFF);
khuang 8:2b9b24f3154d 511 txPacket.data[5] = (uint8_t) z;
khuang 8:2b9b24f3154d 512 txPacket.data[6] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 513
cotigac 2:bb66c19c3c04 514 SendPacket(&txPacket, true);
cotigac 2:bb66c19c3c04 515 }
cotigac 2:bb66c19c3c04 516
cotigac 2:bb66c19c3c04 517 void KW40Z::SendAmbientLight(uint8_t percentage)
cotigac 2:bb66c19c3c04 518 {
cotigac 2:bb66c19c3c04 519 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 520
cotigac 2:bb66c19c3c04 521 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 522 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 523 txPacket.type = packetType_ambiLight;
cotigac 2:bb66c19c3c04 524 txPacket.length = 1;
cotigac 2:bb66c19c3c04 525 txPacket.data[0] = percentage;
cotigac 2:bb66c19c3c04 526 txPacket.data[1] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 527
cotigac 2:bb66c19c3c04 528 SendPacket(&txPacket, true);
cotigac 2:bb66c19c3c04 529 }
cotigac 2:bb66c19c3c04 530
cotigac 2:bb66c19c3c04 531 void KW40Z::SendTemperature(uint16_t celsius)
cotigac 2:bb66c19c3c04 532 {
cotigac 2:bb66c19c3c04 533 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 534
cotigac 2:bb66c19c3c04 535 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 536 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 537 txPacket.type = packetType_temperature;
cotigac 2:bb66c19c3c04 538 txPacket.length = 2;
cotigac 2:bb66c19c3c04 539 memcpy(&txPacket.data[0],(uint8_t*)&celsius,txPacket.length);
cotigac 2:bb66c19c3c04 540 txPacket.data[2] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 541
cotigac 2:bb66c19c3c04 542 SendPacket(&txPacket, true);
cotigac 2:bb66c19c3c04 543 }
cotigac 2:bb66c19c3c04 544
cotigac 2:bb66c19c3c04 545 void KW40Z::SendHumidity(uint16_t percentage)
cotigac 2:bb66c19c3c04 546 {
cotigac 2:bb66c19c3c04 547 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 548
cotigac 2:bb66c19c3c04 549 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 550 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 551 txPacket.type = packetType_humidity;
cotigac 2:bb66c19c3c04 552 txPacket.length = 2;
cotigac 2:bb66c19c3c04 553 memcpy(&txPacket.data[0],(uint8_t*)&percentage,txPacket.length);
cotigac 2:bb66c19c3c04 554 txPacket.data[2] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 555
cotigac 2:bb66c19c3c04 556 SendPacket(&txPacket, true);
cotigac 2:bb66c19c3c04 557 }
cotigac 2:bb66c19c3c04 558
cotigac 2:bb66c19c3c04 559 void KW40Z::SendPressure(uint16_t pascal)
cotigac 2:bb66c19c3c04 560 {
cotigac 2:bb66c19c3c04 561 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 562
cotigac 2:bb66c19c3c04 563 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 564 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 565 txPacket.type = packetType_pressure;
cotigac 2:bb66c19c3c04 566 txPacket.length = 2;
cotigac 2:bb66c19c3c04 567 memcpy(&txPacket.data[0],(uint8_t*)&pascal,txPacket.length);
cotigac 2:bb66c19c3c04 568 txPacket.data[2] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 569
cotigac 2:bb66c19c3c04 570 SendPacket(&txPacket, true);
cotigac 2:bb66c19c3c04 571 }
cotigac 2:bb66c19c3c04 572
khuang 3:9e92f113c671 573 void KW40Z::SendHeartRate(uint8_t rate)
cotigac 2:bb66c19c3c04 574 {
cotigac 2:bb66c19c3c04 575 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 576
cotigac 2:bb66c19c3c04 577 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 578 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 579 txPacket.type = packetType_steps;
cotigac 2:bb66c19c3c04 580 txPacket.length = 1;
cotigac 2:bb66c19c3c04 581 txPacket.data[0] = rate;
cotigac 2:bb66c19c3c04 582 txPacket.data[1] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 583
cotigac 2:bb66c19c3c04 584 SendPacket(&txPacket, true);
cotigac 2:bb66c19c3c04 585 }
cotigac 2:bb66c19c3c04 586
cotigac 2:bb66c19c3c04 587 void KW40Z::SendSteps(uint16_t steps)
cotigac 2:bb66c19c3c04 588 {
cotigac 2:bb66c19c3c04 589 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 590
cotigac 2:bb66c19c3c04 591 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 592 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 593 txPacket.type = packetType_steps;
cotigac 2:bb66c19c3c04 594 txPacket.length = 2;
cotigac 2:bb66c19c3c04 595 memcpy(&txPacket.data[0],(uint8_t*)&steps,txPacket.length);
cotigac 2:bb66c19c3c04 596 txPacket.data[2] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 597
cotigac 2:bb66c19c3c04 598 SendPacket(&txPacket, true);
cotigac 2:bb66c19c3c04 599 }
cotigac 2:bb66c19c3c04 600
cotigac 2:bb66c19c3c04 601 void KW40Z::SendCalories(uint16_t calories)
cotigac 2:bb66c19c3c04 602 {
cotigac 2:bb66c19c3c04 603 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 604
cotigac 2:bb66c19c3c04 605 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 606 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 607 txPacket.type = packetType_calories;
cotigac 2:bb66c19c3c04 608 txPacket.length = 2;
cotigac 2:bb66c19c3c04 609 memcpy(&txPacket.data[0],(uint8_t*)&calories,txPacket.length);
cotigac 2:bb66c19c3c04 610 txPacket.data[2] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 611
cotigac 2:bb66c19c3c04 612 SendPacket(&txPacket, true);
cotigac 2:bb66c19c3c04 613 }
cotigac 2:bb66c19c3c04 614
cotigac 2:bb66c19c3c04 615 void KW40Z::SendAlert(uint8_t *pData, uint8_t length)
cotigac 2:bb66c19c3c04 616 {
cotigac 2:bb66c19c3c04 617 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 618
cotigac 2:bb66c19c3c04 619 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 620 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 621 txPacket.type = packetType_alertOut;
cotigac 2:bb66c19c3c04 622 txPacket.length = length;
cotigac 2:bb66c19c3c04 623 memcpy(&txPacket.data[0],pData,length);
cotigac 2:bb66c19c3c04 624 txPacket.data[length] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 625
cotigac 2:bb66c19c3c04 626 SendPacket(&txPacket, true);
cotigac 2:bb66c19c3c04 627 }
cotigac 2:bb66c19c3c04 628
xihan94 13:84ead63f7353 629 void KW40Z::SendMessage(uint8_t *pData, uint8_t length)
xihan94 13:84ead63f7353 630 {
xihan94 13:84ead63f7353 631 hostInterface_packet_t txPacket = {0};
xihan94 13:84ead63f7353 632
xihan94 13:84ead63f7353 633 txPacket.start1 = gHostInterface_startByte1;
xihan94 13:84ead63f7353 634 txPacket.start2 = gHostInterface_startByte2;
xihan94 13:84ead63f7353 635 txPacket.type = packetType_messageOut;
xihan94 13:84ead63f7353 636 txPacket.length = 20;
xihan94 13:84ead63f7353 637 memcpy(&txPacket.data[1],pData,length);
xihan94 13:84ead63f7353 638 txPacket.data[0] = length;
xihan94 13:84ead63f7353 639 txPacket.data[20] = gHostInterface_trailerByte;
xihan94 13:84ead63f7353 640
xihan94 13:84ead63f7353 641 SendPacket(&txPacket, true);
xihan94 13:84ead63f7353 642 }
xihan94 13:84ead63f7353 643
xihan94 13:84ead63f7353 644
cotigac 2:bb66c19c3c04 645 void KW40Z::ToggleTsiGroup(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_buttonsGroupToggleActive;
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, true);
cotigac 2:bb66c19c3c04 656 }
cotigac 2:bb66c19c3c04 657
cotigac 2:bb66c19c3c04 658 void KW40Z::ToggleAdvertisementMode(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_advModeToggle;
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, true);
cotigac 2:bb66c19c3c04 669 }
cotigac 2:bb66c19c3c04 670
cotigac 2:bb66c19c3c04 671 void KW40Z::SendSetApplicationMode(gui_current_app_t mode)
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_appMode;
cotigac 2:bb66c19c3c04 678 txPacket.length = 1;
cotigac 2:bb66c19c3c04 679 txPacket.data[0] = (uint8_t)mode;
cotigac 2:bb66c19c3c04 680 txPacket.data[1] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 681
cotigac 2:bb66c19c3c04 682 SendPacket(&txPacket, true);
cotigac 2:bb66c19c3c04 683 }
cotigac 2:bb66c19c3c04 684
cotigac 2:bb66c19c3c04 685 void KW40Z::SendGetActiveTsiGroup(void)
cotigac 2:bb66c19c3c04 686 {
cotigac 2:bb66c19c3c04 687 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 688
cotigac 2:bb66c19c3c04 689 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 690 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 691 txPacket.type = packetType_buttonsGroupGetActive;
cotigac 2:bb66c19c3c04 692 txPacket.length = 0;
cotigac 2:bb66c19c3c04 693 txPacket.data[0] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 694
cotigac 2:bb66c19c3c04 695 SendPacket(&txPacket, false);
cotigac 2:bb66c19c3c04 696 }
cotigac 2:bb66c19c3c04 697
cotigac 2:bb66c19c3c04 698 void KW40Z::SendGetAdvertisementMode(void)
cotigac 2:bb66c19c3c04 699 {
cotigac 2:bb66c19c3c04 700 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 701
cotigac 2:bb66c19c3c04 702 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 703 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 704 txPacket.type = packetType_advModeGet;
cotigac 2:bb66c19c3c04 705 txPacket.length = 0;
cotigac 2:bb66c19c3c04 706 txPacket.data[0] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 707
cotigac 2:bb66c19c3c04 708 SendPacket(&txPacket, false);
cotigac 2:bb66c19c3c04 709 }
cotigac 2:bb66c19c3c04 710
cotigac 2:bb66c19c3c04 711 void KW40Z::SendGetLinkState(void)
cotigac 2:bb66c19c3c04 712 {
cotigac 2:bb66c19c3c04 713 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 714
cotigac 2:bb66c19c3c04 715 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 716 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 717 txPacket.type = packetType_linkStateGet;
cotigac 2:bb66c19c3c04 718 txPacket.length = 0;
cotigac 2:bb66c19c3c04 719 txPacket.data[0] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 720
cotigac 2:bb66c19c3c04 721 SendPacket(&txPacket, false);
cotigac 2:bb66c19c3c04 722 }
cotigac 2:bb66c19c3c04 723
cotigac 2:bb66c19c3c04 724 void KW40Z::SendGetVersion(void)
cotigac 2:bb66c19c3c04 725 {
cotigac 2:bb66c19c3c04 726 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 727
cotigac 2:bb66c19c3c04 728 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 729 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 730 txPacket.type = packetType_buildVersion;
cotigac 2:bb66c19c3c04 731 txPacket.length = 3;
cotigac 2:bb66c19c3c04 732 txPacket.data[0] = HEXIWEAR_VERSION_MAJOR;
cotigac 2:bb66c19c3c04 733 txPacket.data[1] = HEXIWEAR_VERSION_MINOR;
cotigac 2:bb66c19c3c04 734 txPacket.data[2] = HEXIWEAR_VERSION_PATCH;
cotigac 2:bb66c19c3c04 735 txPacket.data[3] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 736
cotigac 9:8058541a8e2d 737 SendPacket(&txPacket, true);
cotigac 2:bb66c19c3c04 738 }
cotigac 2:bb66c19c3c04 739
cotigac 2:bb66c19c3c04 740 void KW40Z::SendPacketOK(void)
cotigac 2:bb66c19c3c04 741 {
cotigac 2:bb66c19c3c04 742 hostInterface_packet_t txPacket = {0};
cotigac 2:bb66c19c3c04 743
cotigac 2:bb66c19c3c04 744 txPacket.start1 = gHostInterface_startByte1;
cotigac 2:bb66c19c3c04 745 txPacket.start2 = gHostInterface_startByte2;
cotigac 2:bb66c19c3c04 746 txPacket.type = packetType_OK;
cotigac 2:bb66c19c3c04 747 txPacket.length = 0;
cotigac 2:bb66c19c3c04 748 txPacket.data[0] = gHostInterface_trailerByte;
cotigac 2:bb66c19c3c04 749
cotigac 2:bb66c19c3c04 750 SendPacket(&txPacket, false);
cotigac 2:bb66c19c3c04 751 }
khuang 3:9e92f113c671 752
khuang 3:9e92f113c671 753 uint8_t KW40Z::GetAdvertisementMode(void)
khuang 3:9e92f113c671 754 {
khuang 3:9e92f113c671 755 return advertisementMode;
khuang 3:9e92f113c671 756 }
khuang 3:9e92f113c671 757
khuang 3:9e92f113c671 758 uint32_t KW40Z::GetPassKey(void)
khuang 3:9e92f113c671 759 {
khuang 3:9e92f113c671 760 return bondPassKey;
khuang 3:9e92f113c671 761 }
khuang 5:8c7c1cc024ed 762
khuang 5:8c7c1cc024ed 763 uint8_t KW40Z::GetLinkState(void)
khuang 5:8c7c1cc024ed 764 {
khuang 5:8c7c1cc024ed 765 return linkState;
khuang 5:8c7c1cc024ed 766 }
khuang 5:8c7c1cc024ed 767
khuang 5:8c7c1cc024ed 768 hexiwear_version_t KW40Z::GetVersion(void)
khuang 5:8c7c1cc024ed 769 {
khuang 5:8c7c1cc024ed 770 return kw40_version;
khuang 5:8c7c1cc024ed 771 }
khuang 5:8c7c1cc024ed 772
khuang 5:8c7c1cc024ed 773 uint8_t KW40Z::GetTsiGroup(void)
khuang 5:8c7c1cc024ed 774 {
khuang 5:8c7c1cc024ed 775 return activeTsiGroup;
cotigac 9:8058541a8e2d 776 }
cotigac 9:8058541a8e2d 777
xihan94 13:84ead63f7353 778 #if defined (LIB_DEBUG) || defined (RX_DEBUG)
cotigac 9:8058541a8e2d 779 void KW40Z::DebugPrintPacket(hostInterface_packet_t * packet)
cotigac 9:8058541a8e2d 780 {
cotigac 9:8058541a8e2d 781 char * idx = (char *)packet;
cotigac 9:8058541a8e2d 782 uint8_t length = packet->length + gHostInterface_headerSize + 1;
cotigac 10:1bed2b28ee18 783
cotigac 11:a9a838035b87 784 if(length > sizeof(hostInterface_packet_t))
cotigac 10:1bed2b28ee18 785 {
cotigac 11:a9a838035b87 786 length = sizeof(hostInterface_packet_t);
cotigac 10:1bed2b28ee18 787 }
cotigac 9:8058541a8e2d 788
cotigac 9:8058541a8e2d 789 for(uint8_t i = 0; i < length; i++)
cotigac 9:8058541a8e2d 790 {
xihan94 13:84ead63f7353 791 printf("%02X ",*idx);
cotigac 9:8058541a8e2d 792 idx++;
cotigac 9:8058541a8e2d 793 }
xihan94 13:84ead63f7353 794 printf("\r\n");
cotigac 9:8058541a8e2d 795 }
cotigac 9:8058541a8e2d 796 #endif
Xi Han 14:241c491f985f 797 // void KW40Z::DebugPrintPacket(hostInterface_packet_t * packet)
Xi Han 14:241c491f985f 798 // {
Xi Han 14:241c491f985f 799 // char * idx = (char *)packet;
Xi Han 14:241c491f985f 800 // uint8_t length = packet->length + gHostInterface_headerSize + 1;
Xi Han 14:241c491f985f 801
Xi Han 14:241c491f985f 802 // if(length > sizeof(hostInterface_packet_t))
Xi Han 14:241c491f985f 803 // {
Xi Han 14:241c491f985f 804 // length = sizeof(hostInterface_packet_t);
Xi Han 14:241c491f985f 805 // }
Xi Han 14:241c491f985f 806
Xi Han 14:241c491f985f 807 // for(uint8_t i = 0; i < length; i++)
Xi Han 14:241c491f985f 808 // {
Xi Han 14:241c491f985f 809 // printf("%02X ",*idx);
Xi Han 14:241c491f985f 810 // idx++;
Xi Han 14:241c491f985f 811 // }
Xi Han 14:241c491f985f 812 // printf("\r\n");
Xi Han 14:241c491f985f 813 // }