Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of NNN40_CLI by
CLI_Source/ble_cli.cpp@0:5c195ab2f696, 2015-09-11 (annotated)
- Committer:
- gillwei7
- Date:
- Fri Sep 11 07:29:31 2015 +0000
- Revision:
- 0:5c195ab2f696
- Child:
- 3:38ec8ad317f4
Gill first commit 20150911 for NNN40_CLI Version 0; Merge mbed library to offline Keil Wifi/BLE CLI program
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gillwei7 | 0:5c195ab2f696 | 1 | /** |
gillwei7 | 0:5c195ab2f696 | 2 | * File: ble-cli.c |
gillwei7 | 0:5c195ab2f696 | 3 | * Description: BLE CLI commands used by all applications BLE of profile. |
gillwei7 | 0:5c195ab2f696 | 4 | * |
gillwei7 | 0:5c195ab2f696 | 5 | * Copyright 2014 by CYNTEC Corporation. All rights reserved. |
gillwei7 | 0:5c195ab2f696 | 6 | */ |
gillwei7 | 0:5c195ab2f696 | 7 | |
gillwei7 | 0:5c195ab2f696 | 8 | #include <stdio.h> |
gillwei7 | 0:5c195ab2f696 | 9 | #include <stdlib.h> |
gillwei7 | 0:5c195ab2f696 | 10 | #include <stdint.h> |
gillwei7 | 0:5c195ab2f696 | 11 | #include <string.h> |
gillwei7 | 0:5c195ab2f696 | 12 | #include "command-interpreter.h" |
gillwei7 | 0:5c195ab2f696 | 13 | #include "simple_uart.h" |
gillwei7 | 0:5c195ab2f696 | 14 | #include "mbed.h" |
gillwei7 | 0:5c195ab2f696 | 15 | #include "BLE.h" |
gillwei7 | 0:5c195ab2f696 | 16 | #include "Gap.h" |
gillwei7 | 0:5c195ab2f696 | 17 | #include "nrf_gpio.h" |
gillwei7 | 0:5c195ab2f696 | 18 | #include "nrf_soc.h" |
gillwei7 | 0:5c195ab2f696 | 19 | #include "ble_cli.h" |
gillwei7 | 0:5c195ab2f696 | 20 | #include "ble_hci.h" |
gillwei7 | 0:5c195ab2f696 | 21 | #include "app_error.h" |
gillwei7 | 0:5c195ab2f696 | 22 | #include "PinNames.h" |
gillwei7 | 0:5c195ab2f696 | 23 | //#include "custom_helper.h" |
gillwei7 | 0:5c195ab2f696 | 24 | extern "C" { |
gillwei7 | 0:5c195ab2f696 | 25 | #include "ble_advdata.h" |
gillwei7 | 0:5c195ab2f696 | 26 | } |
gillwei7 | 0:5c195ab2f696 | 27 | |
gillwei7 | 0:5c195ab2f696 | 28 | #define S110_BLE_PERIPHERAL |
gillwei7 | 0:5c195ab2f696 | 29 | |
gillwei7 | 0:5c195ab2f696 | 30 | #define APP_ADV_INTERVAL 64 /**< The advertising interval (in units of 0.625 ms. This value corresponds to 40 ms). */ |
gillwei7 | 0:5c195ab2f696 | 31 | #define APP_ADV_TIMEOUT_IN_SECONDS 180 /**< The advertising timeout (in units of seconds). */ |
gillwei7 | 0:5c195ab2f696 | 32 | #define APP_ADV_INTERVAL_MAX 16384 // correspond to 10.24s |
gillwei7 | 0:5c195ab2f696 | 33 | #define APP_ADV_INTERVAL_MIN 32 // correspond to 20ms |
gillwei7 | 0:5c195ab2f696 | 34 | // Offset for Advertising Data. |
gillwei7 | 0:5c195ab2f696 | 35 | #define APP_ADV_DATA_OFFSET 2 |
gillwei7 | 0:5c195ab2f696 | 36 | |
gillwei7 | 0:5c195ab2f696 | 37 | #define MAX_DEVNAME_LEN 32 |
gillwei7 | 0:5c195ab2f696 | 38 | #define CLI_SERVICE_MAX_NUM 10 |
gillwei7 | 0:5c195ab2f696 | 39 | #define CLI_CHAR_MAX_NUM 10 |
gillwei7 | 0:5c195ab2f696 | 40 | #define MAX_VALUE_LENGTH 20 |
gillwei7 | 0:5c195ab2f696 | 41 | |
gillwei7 | 0:5c195ab2f696 | 42 | #define CLI_CHAR_MODE_NONE 0 |
gillwei7 | 0:5c195ab2f696 | 43 | #define CLI_CHAR_MODE_READ 1 |
gillwei7 | 0:5c195ab2f696 | 44 | #define CLI_CHAR_MODE_WRITE 2 |
gillwei7 | 0:5c195ab2f696 | 45 | #define CLI_CHAR_MODE_INDICATE 3 |
gillwei7 | 0:5c195ab2f696 | 46 | #define CLI_CHAR_MODE_NOTIFY 4 |
gillwei7 | 0:5c195ab2f696 | 47 | |
gillwei7 | 0:5c195ab2f696 | 48 | #define CLI_FWVERION "DELTA_CLI_V1.6" |
gillwei7 | 0:5c195ab2f696 | 49 | #define MODULE_NAME "DFCM-NNN40-DT1R" |
gillwei7 | 0:5c195ab2f696 | 50 | #define ADVERTISING_LED_PIN_NO LED1 |
gillwei7 | 0:5c195ab2f696 | 51 | #define DELTA_DEBUG 1 |
gillwei7 | 0:5c195ab2f696 | 52 | //#define LBS_UUID_BASE {0x23, 0xD1, 0xBC, 0xEA, 0x5F, 0x78, 0x23, 0x15, 0xDE, 0xEF, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00} |
gillwei7 | 0:5c195ab2f696 | 53 | #define NEW_VS_SERVICE 0x0001 |
gillwei7 | 0:5c195ab2f696 | 54 | |
gillwei7 | 0:5c195ab2f696 | 55 | |
gillwei7 | 0:5c195ab2f696 | 56 | static ble_gap_addr_t m_peer_addr; |
gillwei7 | 0:5c195ab2f696 | 57 | extern Serial console; |
gillwei7 | 0:5c195ab2f696 | 58 | BLE deltaBLE; //gill 0904 |
gillwei7 | 0:5c195ab2f696 | 59 | extern const char* cyntecCommandErrorNames[]; |
gillwei7 | 0:5c195ab2f696 | 60 | extern void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason); |
gillwei7 | 0:5c195ab2f696 | 61 | // gill 0904 |
gillwei7 | 0:5c195ab2f696 | 62 | static bool connState = false; |
gillwei7 | 0:5c195ab2f696 | 63 | |
gillwei7 | 0:5c195ab2f696 | 64 | typedef struct bufferGattChar { |
gillwei7 | 0:5c195ab2f696 | 65 | // bool flag; |
gillwei7 | 0:5c195ab2f696 | 66 | uint8_t mode; |
gillwei7 | 0:5c195ab2f696 | 67 | ble_uuid_t char_uuid; |
gillwei7 | 0:5c195ab2f696 | 68 | //uint8_t value[MAX_VALUE_LENGTH]; |
gillwei7 | 0:5c195ab2f696 | 69 | uint16_t char_value_handle; |
gillwei7 | 0:5c195ab2f696 | 70 | uint8_t valueLength; |
gillwei7 | 0:5c195ab2f696 | 71 | } bufferGattChar_t; |
gillwei7 | 0:5c195ab2f696 | 72 | |
gillwei7 | 0:5c195ab2f696 | 73 | typedef struct bufferGattService { |
gillwei7 | 0:5c195ab2f696 | 74 | // uint16_t service_uuid_vs[8]; |
gillwei7 | 0:5c195ab2f696 | 75 | // uint16_t service_uuid; |
gillwei7 | 0:5c195ab2f696 | 76 | // bool flag; |
gillwei7 | 0:5c195ab2f696 | 77 | ble_uuid_t service_uuid; |
gillwei7 | 0:5c195ab2f696 | 78 | bufferGattChar_t bufferGattChar[CLI_CHAR_MAX_NUM]; |
gillwei7 | 0:5c195ab2f696 | 79 | uint16_t service_handle; |
gillwei7 | 0:5c195ab2f696 | 80 | } bufferGattService_t; |
gillwei7 | 0:5c195ab2f696 | 81 | |
gillwei7 | 0:5c195ab2f696 | 82 | /* save entry services */ |
gillwei7 | 0:5c195ab2f696 | 83 | bufferGattService_t bufferGattTest; |
gillwei7 | 0:5c195ab2f696 | 84 | bufferGattService_t bufferService[CLI_SERVICE_MAX_NUM]; |
gillwei7 | 0:5c195ab2f696 | 85 | |
gillwei7 | 0:5c195ab2f696 | 86 | |
gillwei7 | 0:5c195ab2f696 | 87 | //static uint8_t debugMess[20]; // used in print debug |
gillwei7 | 0:5c195ab2f696 | 88 | uint8_t service_count=0; |
gillwei7 | 0:5c195ab2f696 | 89 | uint8_t char_count=0; |
gillwei7 | 0:5c195ab2f696 | 90 | static uint16_t test_conn_handle; //Connection handle, assign after connected |
gillwei7 | 0:5c195ab2f696 | 91 | extern bool advState; // currently no use |
gillwei7 | 0:5c195ab2f696 | 92 | |
gillwei7 | 0:5c195ab2f696 | 93 | DigitalOut led1(p7); |
gillwei7 | 0:5c195ab2f696 | 94 | DigitalOut led2(p13); |
gillwei7 | 0:5c195ab2f696 | 95 | |
gillwei7 | 0:5c195ab2f696 | 96 | /****************************************************** |
gillwei7 | 0:5c195ab2f696 | 97 | * Function Definitions |
gillwei7 | 0:5c195ab2f696 | 98 | ******************************************************/ |
gillwei7 | 0:5c195ab2f696 | 99 | |
gillwei7 | 0:5c195ab2f696 | 100 | void onTimeoutCallback(Gap::TimeoutSource_t source) |
gillwei7 | 0:5c195ab2f696 | 101 | { |
gillwei7 | 0:5c195ab2f696 | 102 | led1 = !led1; |
gillwei7 | 0:5c195ab2f696 | 103 | } |
gillwei7 | 0:5c195ab2f696 | 104 | |
gillwei7 | 0:5c195ab2f696 | 105 | void onConnectionCallback(const Gap::ConnectionCallbackParams_t *params) |
gillwei7 | 0:5c195ab2f696 | 106 | { |
gillwei7 | 0:5c195ab2f696 | 107 | test_conn_handle = params->handle; |
gillwei7 | 0:5c195ab2f696 | 108 | //console.printf("connState:%d\r\n",connState); |
gillwei7 | 0:5c195ab2f696 | 109 | connState = true; |
gillwei7 | 0:5c195ab2f696 | 110 | led2 = !led2; |
gillwei7 | 0:5c195ab2f696 | 111 | } |
gillwei7 | 0:5c195ab2f696 | 112 | |
gillwei7 | 0:5c195ab2f696 | 113 | void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason) |
gillwei7 | 0:5c195ab2f696 | 114 | { |
gillwei7 | 0:5c195ab2f696 | 115 | //console.printf("connState:%d\r\n",connState); |
gillwei7 | 0:5c195ab2f696 | 116 | connState = false; |
gillwei7 | 0:5c195ab2f696 | 117 | } |
gillwei7 | 0:5c195ab2f696 | 118 | |
gillwei7 | 0:5c195ab2f696 | 119 | |
gillwei7 | 0:5c195ab2f696 | 120 | static void cyntecPrintOk(void) |
gillwei7 | 0:5c195ab2f696 | 121 | { |
gillwei7 | 0:5c195ab2f696 | 122 | console.printf("\r\nOK\r\n\r\n"); |
gillwei7 | 0:5c195ab2f696 | 123 | } |
gillwei7 | 0:5c195ab2f696 | 124 | |
gillwei7 | 0:5c195ab2f696 | 125 | static void cyntecPrintError(uint8_t errIdx) |
gillwei7 | 0:5c195ab2f696 | 126 | { |
gillwei7 | 0:5c195ab2f696 | 127 | console.printf("\r\nERROR;"); |
gillwei7 | 0:5c195ab2f696 | 128 | console.printf(cyntecCommandErrorNames[errIdx]); |
gillwei7 | 0:5c195ab2f696 | 129 | console.printf("\r\n\r\n"); |
gillwei7 | 0:5c195ab2f696 | 130 | } |
gillwei7 | 0:5c195ab2f696 | 131 | |
gillwei7 | 0:5c195ab2f696 | 132 | #ifdef S120_BLE_CENTRAL |
gillwei7 | 0:5c195ab2f696 | 133 | /** |
gillwei7 | 0:5c195ab2f696 | 134 | * @brief Scan parameters requested for scanning and connection. |
gillwei7 | 0:5c195ab2f696 | 135 | */ |
gillwei7 | 0:5c195ab2f696 | 136 | static const ble_gap_scan_params_t m_scan_param = |
gillwei7 | 0:5c195ab2f696 | 137 | { |
gillwei7 | 0:5c195ab2f696 | 138 | 0, // Active scanning set. |
gillwei7 | 0:5c195ab2f696 | 139 | 0, // Selective scanning not set. |
gillwei7 | 0:5c195ab2f696 | 140 | NULL, // White-list not set. |
gillwei7 | 0:5c195ab2f696 | 141 | (uint16_t)SCAN_INTERVAL, // Scan interval. |
gillwei7 | 0:5c195ab2f696 | 142 | (uint16_t)SCAN_WINDOW, // Scan window. |
gillwei7 | 0:5c195ab2f696 | 143 | 0 // Never stop scanning unless explicit asked to. |
gillwei7 | 0:5c195ab2f696 | 144 | }; |
gillwei7 | 0:5c195ab2f696 | 145 | #endif |
gillwei7 | 0:5c195ab2f696 | 146 | |
gillwei7 | 0:5c195ab2f696 | 147 | #ifdef S110_BLE_PERIPHERAL |
gillwei7 | 0:5c195ab2f696 | 148 | /**@brief Function for the Advertising functionality initialization. |
gillwei7 | 0:5c195ab2f696 | 149 | * |
gillwei7 | 0:5c195ab2f696 | 150 | * @details Encodes the required advertising data and passes it to the stack. |
gillwei7 | 0:5c195ab2f696 | 151 | * Also builds a structure to be passed to the stack when starting advertising. |
gillwei7 | 0:5c195ab2f696 | 152 | */ |
gillwei7 | 0:5c195ab2f696 | 153 | static void advertising_init(void) |
gillwei7 | 0:5c195ab2f696 | 154 | { |
gillwei7 | 0:5c195ab2f696 | 155 | uint32_t err_code; |
gillwei7 | 0:5c195ab2f696 | 156 | ble_advdata_t advdata; |
gillwei7 | 0:5c195ab2f696 | 157 | ble_advdata_t scanrsp; |
gillwei7 | 0:5c195ab2f696 | 158 | //uint8_t flags = BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE; |
gillwei7 | 0:5c195ab2f696 | 159 | |
gillwei7 | 0:5c195ab2f696 | 160 | ble_uuid_t adv_uuids[] = {{bufferService[0].service_uuid.uuid, 0x01}}; |
gillwei7 | 0:5c195ab2f696 | 161 | |
gillwei7 | 0:5c195ab2f696 | 162 | memset(&advdata, 0, sizeof(advdata)); |
gillwei7 | 0:5c195ab2f696 | 163 | advdata.name_type = BLE_ADVDATA_FULL_NAME; |
gillwei7 | 0:5c195ab2f696 | 164 | advdata.include_appearance = false; |
gillwei7 | 0:5c195ab2f696 | 165 | advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE; |
gillwei7 | 0:5c195ab2f696 | 166 | // advdata.flags.size = sizeof(flags); |
gillwei7 | 0:5c195ab2f696 | 167 | // advdata.flags.p_data = &flags; |
gillwei7 | 0:5c195ab2f696 | 168 | |
gillwei7 | 0:5c195ab2f696 | 169 | memset(&scanrsp, 0, sizeof(scanrsp)); |
gillwei7 | 0:5c195ab2f696 | 170 | scanrsp.uuids_complete.uuid_cnt = sizeof(adv_uuids) / sizeof(adv_uuids[0]); |
gillwei7 | 0:5c195ab2f696 | 171 | scanrsp.uuids_complete.p_uuids = adv_uuids; |
gillwei7 | 0:5c195ab2f696 | 172 | |
gillwei7 | 0:5c195ab2f696 | 173 | err_code = ble_advdata_set(&advdata, &scanrsp); |
gillwei7 | 0:5c195ab2f696 | 174 | APP_ERROR_CHECK(err_code); |
gillwei7 | 0:5c195ab2f696 | 175 | } |
gillwei7 | 0:5c195ab2f696 | 176 | |
gillwei7 | 0:5c195ab2f696 | 177 | |
gillwei7 | 0:5c195ab2f696 | 178 | /**@brief Function for starting advertising. |
gillwei7 | 0:5c195ab2f696 | 179 | */ |
gillwei7 | 0:5c195ab2f696 | 180 | static uint8_t advertising_start(uint16_t advInterval, uint16_t advTimeout) |
gillwei7 | 0:5c195ab2f696 | 181 | { |
gillwei7 | 0:5c195ab2f696 | 182 | uint32_t err_code; |
gillwei7 | 0:5c195ab2f696 | 183 | ble_gap_adv_params_t adv_params; |
gillwei7 | 0:5c195ab2f696 | 184 | |
gillwei7 | 0:5c195ab2f696 | 185 | // Start advertising |
gillwei7 | 0:5c195ab2f696 | 186 | memset(&adv_params, 0, sizeof(adv_params)); |
gillwei7 | 0:5c195ab2f696 | 187 | |
gillwei7 | 0:5c195ab2f696 | 188 | adv_params.type = BLE_GAP_ADV_TYPE_ADV_IND; /**< Connectable undirected. */ |
gillwei7 | 0:5c195ab2f696 | 189 | adv_params.p_peer_addr = NULL; |
gillwei7 | 0:5c195ab2f696 | 190 | adv_params.fp = BLE_GAP_ADV_FP_ANY; /**< Allow scan requests and connect requests from any device. */ |
gillwei7 | 0:5c195ab2f696 | 191 | adv_params.interval = advInterval; |
gillwei7 | 0:5c195ab2f696 | 192 | adv_params.timeout = advTimeout; |
gillwei7 | 0:5c195ab2f696 | 193 | |
gillwei7 | 0:5c195ab2f696 | 194 | err_code = sd_ble_gap_adv_start(&adv_params); |
gillwei7 | 0:5c195ab2f696 | 195 | //APP_ERROR_CHECK(err_code); |
gillwei7 | 0:5c195ab2f696 | 196 | return err_code; |
gillwei7 | 0:5c195ab2f696 | 197 | } |
gillwei7 | 0:5c195ab2f696 | 198 | |
gillwei7 | 0:5c195ab2f696 | 199 | |
gillwei7 | 0:5c195ab2f696 | 200 | |
gillwei7 | 0:5c195ab2f696 | 201 | static void cynAdvertiseStartCommand(void) |
gillwei7 | 0:5c195ab2f696 | 202 | { |
gillwei7 | 0:5c195ab2f696 | 203 | // adv start or adv stop or syntax error |
gillwei7 | 0:5c195ab2f696 | 204 | uint8_t argLen = 0; |
gillwei7 | 0:5c195ab2f696 | 205 | uint8_t *arg; |
gillwei7 | 0:5c195ab2f696 | 206 | /* arg0 is start or stop advertising */ |
gillwei7 | 0:5c195ab2f696 | 207 | uint8_t *action = cyntecGetCommandArgument(0,&argLen); |
gillwei7 | 0:5c195ab2f696 | 208 | uint16_t advInterval; |
gillwei7 | 0:5c195ab2f696 | 209 | uint16_t advTimeout; |
gillwei7 | 0:5c195ab2f696 | 210 | |
gillwei7 | 0:5c195ab2f696 | 211 | switch (cyntecGetCommandTokenCnt()) |
gillwei7 | 0:5c195ab2f696 | 212 | { |
gillwei7 | 0:5c195ab2f696 | 213 | case 2: |
gillwei7 | 0:5c195ab2f696 | 214 | advInterval = APP_ADV_INTERVAL; |
gillwei7 | 0:5c195ab2f696 | 215 | advTimeout = APP_ADV_TIMEOUT_IN_SECONDS; |
gillwei7 | 0:5c195ab2f696 | 216 | break; |
gillwei7 | 0:5c195ab2f696 | 217 | |
gillwei7 | 0:5c195ab2f696 | 218 | case 3: |
gillwei7 | 0:5c195ab2f696 | 219 | /* arg1 is adv interval parameter */ |
gillwei7 | 0:5c195ab2f696 | 220 | arg = cyntecGetCommandArgument(1,&argLen); |
gillwei7 | 0:5c195ab2f696 | 221 | advInterval = cyntecAtoiUint16( arg, argLen ); |
gillwei7 | 0:5c195ab2f696 | 222 | advTimeout = APP_ADV_TIMEOUT_IN_SECONDS; |
gillwei7 | 0:5c195ab2f696 | 223 | break; |
gillwei7 | 0:5c195ab2f696 | 224 | |
gillwei7 | 0:5c195ab2f696 | 225 | case 4: |
gillwei7 | 0:5c195ab2f696 | 226 | arg = cyntecGetCommandArgument(1,&argLen); |
gillwei7 | 0:5c195ab2f696 | 227 | advInterval = cyntecAtoiUint16( arg, argLen ); |
gillwei7 | 0:5c195ab2f696 | 228 | arg = cyntecGetCommandArgument(2,&argLen); |
gillwei7 | 0:5c195ab2f696 | 229 | advTimeout = cyntecAtoiUint16( arg, argLen ); |
gillwei7 | 0:5c195ab2f696 | 230 | break; |
gillwei7 | 0:5c195ab2f696 | 231 | |
gillwei7 | 0:5c195ab2f696 | 232 | default: |
gillwei7 | 0:5c195ab2f696 | 233 | advInterval = APP_ADV_INTERVAL; |
gillwei7 | 0:5c195ab2f696 | 234 | advTimeout = APP_ADV_TIMEOUT_IN_SECONDS; |
gillwei7 | 0:5c195ab2f696 | 235 | break; |
gillwei7 | 0:5c195ab2f696 | 236 | } |
gillwei7 | 0:5c195ab2f696 | 237 | |
gillwei7 | 0:5c195ab2f696 | 238 | if ( advInterval< APP_ADV_INTERVAL_MIN | advInterval> APP_ADV_INTERVAL_MAX | advTimeout < 1| advTimeout > BLE_GAP_ADV_TIMEOUT_LIMITED_MAX ) |
gillwei7 | 0:5c195ab2f696 | 239 | { |
gillwei7 | 0:5c195ab2f696 | 240 | cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE); |
gillwei7 | 0:5c195ab2f696 | 241 | return; |
gillwei7 | 0:5c195ab2f696 | 242 | } |
gillwei7 | 0:5c195ab2f696 | 243 | //#ifdef DELTA_DEBUG |
gillwei7 | 0:5c195ab2f696 | 244 | //sprintf((char *)&debugMess[0],"[%d][%d]", advInterval,advTimeout); |
gillwei7 | 0:5c195ab2f696 | 245 | //console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 246 | //#endif |
gillwei7 | 0:5c195ab2f696 | 247 | // service_Test(); |
gillwei7 | 0:5c195ab2f696 | 248 | advertising_init(); |
gillwei7 | 0:5c195ab2f696 | 249 | uint8_t error_code = advertising_start(advInterval, advTimeout); |
gillwei7 | 0:5c195ab2f696 | 250 | |
gillwei7 | 0:5c195ab2f696 | 251 | if (error_code==NRF_SUCCESS) |
gillwei7 | 0:5c195ab2f696 | 252 | { |
gillwei7 | 0:5c195ab2f696 | 253 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 254 | nrf_gpio_pin_set(ADVERTISING_LED_PIN_NO); |
gillwei7 | 0:5c195ab2f696 | 255 | } |
gillwei7 | 0:5c195ab2f696 | 256 | else if (error_code==NRF_ERROR_INVALID_STATE) |
gillwei7 | 0:5c195ab2f696 | 257 | { |
gillwei7 | 0:5c195ab2f696 | 258 | cyntecPrintError(CYNTEC_CMD_ERR_INVALID_STATE_TO_PERFORM_OPERATION); |
gillwei7 | 0:5c195ab2f696 | 259 | return; |
gillwei7 | 0:5c195ab2f696 | 260 | } |
gillwei7 | 0:5c195ab2f696 | 261 | else |
gillwei7 | 0:5c195ab2f696 | 262 | { |
gillwei7 | 0:5c195ab2f696 | 263 | console.printf("ERROR;\r\n"); |
gillwei7 | 0:5c195ab2f696 | 264 | } |
gillwei7 | 0:5c195ab2f696 | 265 | } |
gillwei7 | 0:5c195ab2f696 | 266 | |
gillwei7 | 0:5c195ab2f696 | 267 | /**@brief Function for stop advertising. |
gillwei7 | 0:5c195ab2f696 | 268 | */ |
gillwei7 | 0:5c195ab2f696 | 269 | static void cynAdvertiseStopCommand(void) |
gillwei7 | 0:5c195ab2f696 | 270 | { |
gillwei7 | 0:5c195ab2f696 | 271 | uint8_t advStopErr = 0; |
gillwei7 | 0:5c195ab2f696 | 272 | advStopErr = sd_ble_gap_adv_stop(); |
gillwei7 | 0:5c195ab2f696 | 273 | if (advStopErr == NRF_SUCCESS) |
gillwei7 | 0:5c195ab2f696 | 274 | { |
gillwei7 | 0:5c195ab2f696 | 275 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 276 | nrf_gpio_pin_clear(ADVERTISING_LED_PIN_NO); |
gillwei7 | 0:5c195ab2f696 | 277 | } |
gillwei7 | 0:5c195ab2f696 | 278 | else if (advStopErr==NRF_ERROR_INVALID_STATE) |
gillwei7 | 0:5c195ab2f696 | 279 | { |
gillwei7 | 0:5c195ab2f696 | 280 | cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS); |
gillwei7 | 0:5c195ab2f696 | 281 | return; |
gillwei7 | 0:5c195ab2f696 | 282 | } |
gillwei7 | 0:5c195ab2f696 | 283 | else{ |
gillwei7 | 0:5c195ab2f696 | 284 | console.printf("ERROR;\r\n"); |
gillwei7 | 0:5c195ab2f696 | 285 | } |
gillwei7 | 0:5c195ab2f696 | 286 | } |
gillwei7 | 0:5c195ab2f696 | 287 | |
gillwei7 | 0:5c195ab2f696 | 288 | //gill modify 20150904 for accept blank in name |
gillwei7 | 0:5c195ab2f696 | 289 | static void cynBLENameCommand(void) |
gillwei7 | 0:5c195ab2f696 | 290 | { |
gillwei7 | 0:5c195ab2f696 | 291 | if (cyntecGetCommandTokenCnt() >= 3) |
gillwei7 | 0:5c195ab2f696 | 292 | { |
gillwei7 | 0:5c195ab2f696 | 293 | uint8_t tempNameLen = 0; |
gillwei7 | 0:5c195ab2f696 | 294 | // check first and last char is " |
gillwei7 | 0:5c195ab2f696 | 295 | uint8_t *argName1 = cyntecGetCommandArgument(0, &tempNameLen); |
gillwei7 | 0:5c195ab2f696 | 296 | uint8_t *argNameLast = cyntecGetCommandArgument(cyntecGetCommandTokenCnt() - 3, &tempNameLen); |
gillwei7 | 0:5c195ab2f696 | 297 | char bracket = '*'; |
gillwei7 | 0:5c195ab2f696 | 298 | //console.printf("%02X\r\n",tempNameLen); |
gillwei7 | 0:5c195ab2f696 | 299 | if (!memcmp(&argName1[0],&bracket,sizeof(char)) && !memcmp(&argNameLast[tempNameLen - 1],&bracket,sizeof(char))) |
gillwei7 | 0:5c195ab2f696 | 300 | //if (!memcmp(&argName1[0],&bracket,sizeof(char))) |
gillwei7 | 0:5c195ab2f696 | 301 | { |
gillwei7 | 0:5c195ab2f696 | 302 | uint8_t nameLen = 0; |
gillwei7 | 0:5c195ab2f696 | 303 | uint8_t *argName = cyntecGetCommandArgument(0, &nameLen); |
gillwei7 | 0:5c195ab2f696 | 304 | uint8_t * argName2 = cyntecGetCommandTotalBuffer(); |
gillwei7 | 0:5c195ab2f696 | 305 | uint32_t err_code; |
gillwei7 | 0:5c195ab2f696 | 306 | ble_gap_conn_sec_mode_t sec_mode; |
gillwei7 | 0:5c195ab2f696 | 307 | //console.printf("%02X\r\n",cyntecGetTotalIndex()); |
gillwei7 | 0:5c195ab2f696 | 308 | console.printf("\r\nSet BLE Name: "); |
gillwei7 | 0:5c195ab2f696 | 309 | uint8_t i = 0; |
gillwei7 | 0:5c195ab2f696 | 310 | for(i = 0; i < cyntecGetTotalIndex()-12; i++) { |
gillwei7 | 0:5c195ab2f696 | 311 | console.printf("%c",argName2[11+i]); |
gillwei7 | 0:5c195ab2f696 | 312 | } |
gillwei7 | 0:5c195ab2f696 | 313 | BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode); |
gillwei7 | 0:5c195ab2f696 | 314 | err_code = sd_ble_gap_device_name_set(&sec_mode, |
gillwei7 | 0:5c195ab2f696 | 315 | (const uint8_t *) &argName2[11], |
gillwei7 | 0:5c195ab2f696 | 316 | (uint16_t) (cyntecGetTotalIndex()-12)); |
gillwei7 | 0:5c195ab2f696 | 317 | if (err_code == NRF_SUCCESS) { |
gillwei7 | 0:5c195ab2f696 | 318 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 319 | } |
gillwei7 | 0:5c195ab2f696 | 320 | else { |
gillwei7 | 0:5c195ab2f696 | 321 | console.printf("ERROR;%04X\r\n",err_code); |
gillwei7 | 0:5c195ab2f696 | 322 | } |
gillwei7 | 0:5c195ab2f696 | 323 | APP_ERROR_CHECK(err_code); |
gillwei7 | 0:5c195ab2f696 | 324 | |
gillwei7 | 0:5c195ab2f696 | 325 | |
gillwei7 | 0:5c195ab2f696 | 326 | //#ifdef DELTADEBUG |
gillwei7 | 0:5c195ab2f696 | 327 | //console.printf("\r\nSet BLE Name: "); |
gillwei7 | 0:5c195ab2f696 | 328 | // uint8_t i = 0; |
gillwei7 | 0:5c195ab2f696 | 329 | // for(i = 0; i < nameLen; i++) |
gillwei7 | 0:5c195ab2f696 | 330 | // { |
gillwei7 | 0:5c195ab2f696 | 331 | // console.printf("%c",argName[i]); |
gillwei7 | 0:5c195ab2f696 | 332 | // } |
gillwei7 | 0:5c195ab2f696 | 333 | |
gillwei7 | 0:5c195ab2f696 | 334 | //#endif |
gillwei7 | 0:5c195ab2f696 | 335 | //console.printf("\r\nPrint buffer:\r\n"); |
gillwei7 | 0:5c195ab2f696 | 336 | //console.printf("%s\r\n",cyntecGetCommandTotalBuffer()); |
gillwei7 | 0:5c195ab2f696 | 337 | |
gillwei7 | 0:5c195ab2f696 | 338 | /* Re-init application setting */ |
gillwei7 | 0:5c195ab2f696 | 339 | //cyntecCLIAppInit(); |
gillwei7 | 0:5c195ab2f696 | 340 | } |
gillwei7 | 0:5c195ab2f696 | 341 | else |
gillwei7 | 0:5c195ab2f696 | 342 | { |
gillwei7 | 0:5c195ab2f696 | 343 | cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_SYNTAX_ERROR); |
gillwei7 | 0:5c195ab2f696 | 344 | } |
gillwei7 | 0:5c195ab2f696 | 345 | } else if (cyntecGetCommandTokenCnt() == 2){ |
gillwei7 | 0:5c195ab2f696 | 346 | uint8_t bleName[BLE_GAP_DEVNAME_MAX_LEN] = {"\0"}; |
gillwei7 | 0:5c195ab2f696 | 347 | uint16_t bleLen = BLE_GAP_DEVNAME_MAX_LEN - APP_ADV_DATA_OFFSET; |
gillwei7 | 0:5c195ab2f696 | 348 | uint32_t err_code; |
gillwei7 | 0:5c195ab2f696 | 349 | |
gillwei7 | 0:5c195ab2f696 | 350 | err_code = sd_ble_gap_device_name_get(&bleName[APP_ADV_DATA_OFFSET], &bleLen); |
gillwei7 | 0:5c195ab2f696 | 351 | APP_ERROR_CHECK(err_code); |
gillwei7 | 0:5c195ab2f696 | 352 | |
gillwei7 | 0:5c195ab2f696 | 353 | console.printf("\r\nOK;"); |
gillwei7 | 0:5c195ab2f696 | 354 | console.printf("%s",bleName+APP_ADV_DATA_OFFSET); |
gillwei7 | 0:5c195ab2f696 | 355 | console.printf(";\r\n"); |
gillwei7 | 0:5c195ab2f696 | 356 | } |
gillwei7 | 0:5c195ab2f696 | 357 | else{ |
gillwei7 | 0:5c195ab2f696 | 358 | cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS); |
gillwei7 | 0:5c195ab2f696 | 359 | return; |
gillwei7 | 0:5c195ab2f696 | 360 | } |
gillwei7 | 0:5c195ab2f696 | 361 | } |
gillwei7 | 0:5c195ab2f696 | 362 | #endif |
gillwei7 | 0:5c195ab2f696 | 363 | |
gillwei7 | 0:5c195ab2f696 | 364 | static void cynBLEInfoCommand(void) |
gillwei7 | 0:5c195ab2f696 | 365 | { |
gillwei7 | 0:5c195ab2f696 | 366 | console.printf("\r\nOK;F/W version:"); |
gillwei7 | 0:5c195ab2f696 | 367 | console.printf(CLI_FWVERION); |
gillwei7 | 0:5c195ab2f696 | 368 | console.printf(";Module name:"); |
gillwei7 | 0:5c195ab2f696 | 369 | console.printf(MODULE_NAME); |
gillwei7 | 0:5c195ab2f696 | 370 | console.printf("\r\n\r\n"); |
gillwei7 | 0:5c195ab2f696 | 371 | } |
gillwei7 | 0:5c195ab2f696 | 372 | |
gillwei7 | 0:5c195ab2f696 | 373 | /**@brief Set the radio's transmit power. |
gillwei7 | 0:5c195ab2f696 | 374 | * |
gillwei7 | 0:5c195ab2f696 | 375 | * @param[in] tx_power Radio transmit power in dBm (accepted values are -40, -30, -20, -16, -12, -8, -4, 0, and 4 dBm). |
gillwei7 | 0:5c195ab2f696 | 376 | * |
gillwei7 | 0:5c195ab2f696 | 377 | * @note -40 dBm will not actually give -40 dBm, but will instead be remapped to -30 dBm. |
gillwei7 | 0:5c195ab2f696 | 378 | */ |
gillwei7 | 0:5c195ab2f696 | 379 | static void cynBLESetTxPowerCommand (void) |
gillwei7 | 0:5c195ab2f696 | 380 | { |
gillwei7 | 0:5c195ab2f696 | 381 | if (cyntecGetCommandTokenCnt() == 3) |
gillwei7 | 0:5c195ab2f696 | 382 | { |
gillwei7 | 0:5c195ab2f696 | 383 | uint32_t err_code; |
gillwei7 | 0:5c195ab2f696 | 384 | uint8_t txLen=0; |
gillwei7 | 0:5c195ab2f696 | 385 | uint8_t *arg = cyntecGetCommandArgument(0,&txLen); |
gillwei7 | 0:5c195ab2f696 | 386 | |
gillwei7 | 0:5c195ab2f696 | 387 | // uint8_t *arg = cyntecGetMinusArgument(0,&txLen); |
gillwei7 | 0:5c195ab2f696 | 388 | |
gillwei7 | 0:5c195ab2f696 | 389 | // cyntecGetMinusArgument(); |
gillwei7 | 0:5c195ab2f696 | 390 | // const char *value = (const char *)arg; |
gillwei7 | 0:5c195ab2f696 | 391 | // sprintf((char *)&debugMess[0],"\r\n[%i]\r\n",*value); |
gillwei7 | 0:5c195ab2f696 | 392 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 393 | const uint8_t NUM_TXPOW = 9; |
gillwei7 | 0:5c195ab2f696 | 394 | bool inputSwitch = false; // if find matched case in TxPow, assign true |
gillwei7 | 0:5c195ab2f696 | 395 | |
gillwei7 | 0:5c195ab2f696 | 396 | int8_t validTxPow[NUM_TXPOW] = {-40, -30, -20, -16, -12, -8, -4, 0, 4}; |
gillwei7 | 0:5c195ab2f696 | 397 | uint8_t i; |
gillwei7 | 0:5c195ab2f696 | 398 | int8_t setValue; |
gillwei7 | 0:5c195ab2f696 | 399 | |
gillwei7 | 0:5c195ab2f696 | 400 | if ( arg != NULL ) { |
gillwei7 | 0:5c195ab2f696 | 401 | setValue = atoi((const char *)arg); |
gillwei7 | 0:5c195ab2f696 | 402 | // sprintf((char *)&debugMess[0],"\r\n[%i]\r\n",setValue); |
gillwei7 | 0:5c195ab2f696 | 403 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 404 | for (i = 0; i < NUM_TXPOW; i++) |
gillwei7 | 0:5c195ab2f696 | 405 | { |
gillwei7 | 0:5c195ab2f696 | 406 | if (setValue == validTxPow[i]) |
gillwei7 | 0:5c195ab2f696 | 407 | { |
gillwei7 | 0:5c195ab2f696 | 408 | err_code = sd_ble_gap_tx_power_set(setValue); |
gillwei7 | 0:5c195ab2f696 | 409 | APP_ERROR_CHECK(err_code); |
gillwei7 | 0:5c195ab2f696 | 410 | inputSwitch = true; |
gillwei7 | 0:5c195ab2f696 | 411 | break; |
gillwei7 | 0:5c195ab2f696 | 412 | } |
gillwei7 | 0:5c195ab2f696 | 413 | } |
gillwei7 | 0:5c195ab2f696 | 414 | |
gillwei7 | 0:5c195ab2f696 | 415 | if ( inputSwitch ) |
gillwei7 | 0:5c195ab2f696 | 416 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 417 | else |
gillwei7 | 0:5c195ab2f696 | 418 | console.printf("\r\nWrong Input; Accept Tx Pow: -40, -30, -20, -16, -12, -8, -4, 0, 4\r\n"); |
gillwei7 | 0:5c195ab2f696 | 419 | } |
gillwei7 | 0:5c195ab2f696 | 420 | clearBuffer(); // clear the commandState.buffer |
gillwei7 | 0:5c195ab2f696 | 421 | return; |
gillwei7 | 0:5c195ab2f696 | 422 | } |
gillwei7 | 0:5c195ab2f696 | 423 | else{ |
gillwei7 | 0:5c195ab2f696 | 424 | cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS); |
gillwei7 | 0:5c195ab2f696 | 425 | return; |
gillwei7 | 0:5c195ab2f696 | 426 | } |
gillwei7 | 0:5c195ab2f696 | 427 | } |
gillwei7 | 0:5c195ab2f696 | 428 | |
gillwei7 | 0:5c195ab2f696 | 429 | static void cynBLEAddressCommand(void) |
gillwei7 | 0:5c195ab2f696 | 430 | { |
gillwei7 | 0:5c195ab2f696 | 431 | if (cyntecGetCommandTokenCnt() == 3) |
gillwei7 | 0:5c195ab2f696 | 432 | { |
gillwei7 | 0:5c195ab2f696 | 433 | uint8_t argLen = 0; |
gillwei7 | 0:5c195ab2f696 | 434 | uint8_t *arg = cyntecGetCommandArgument(0, &argLen); |
gillwei7 | 0:5c195ab2f696 | 435 | uint32_t err_code; |
gillwei7 | 0:5c195ab2f696 | 436 | uint8_t addr,i; |
gillwei7 | 0:5c195ab2f696 | 437 | |
gillwei7 | 0:5c195ab2f696 | 438 | /* should with "0x" + 12 len addr */ |
gillwei7 | 0:5c195ab2f696 | 439 | if (argLen == 14) { |
gillwei7 | 0:5c195ab2f696 | 440 | if (arg[0] != '0' || arg[1] != 'x') { |
gillwei7 | 0:5c195ab2f696 | 441 | cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_SYNTAX_ERROR); |
gillwei7 | 0:5c195ab2f696 | 442 | return; |
gillwei7 | 0:5c195ab2f696 | 443 | } |
gillwei7 | 0:5c195ab2f696 | 444 | |
gillwei7 | 0:5c195ab2f696 | 445 | m_peer_addr.addr_type = BLE_GAP_ADDR_TYPE_PUBLIC; |
gillwei7 | 0:5c195ab2f696 | 446 | |
gillwei7 | 0:5c195ab2f696 | 447 | for ( i = 1 ; i < 7 ; i++) |
gillwei7 | 0:5c195ab2f696 | 448 | { |
gillwei7 | 0:5c195ab2f696 | 449 | addr = cyntecArgToUint8(arg+2*i, 2); |
gillwei7 | 0:5c195ab2f696 | 450 | /* 5 - (i-1) */ |
gillwei7 | 0:5c195ab2f696 | 451 | m_peer_addr.addr[6-i] = addr; |
gillwei7 | 0:5c195ab2f696 | 452 | } |
gillwei7 | 0:5c195ab2f696 | 453 | |
gillwei7 | 0:5c195ab2f696 | 454 | err_code = sd_ble_gap_address_set(BLE_GAP_ADDR_CYCLE_MODE_NONE, &m_peer_addr); |
gillwei7 | 0:5c195ab2f696 | 455 | APP_ERROR_CHECK(err_code); |
gillwei7 | 0:5c195ab2f696 | 456 | |
gillwei7 | 0:5c195ab2f696 | 457 | } else { //argLen != 14 |
gillwei7 | 0:5c195ab2f696 | 458 | cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_SYNTAX_ERROR); |
gillwei7 | 0:5c195ab2f696 | 459 | return; |
gillwei7 | 0:5c195ab2f696 | 460 | } |
gillwei7 | 0:5c195ab2f696 | 461 | |
gillwei7 | 0:5c195ab2f696 | 462 | //#ifdef DELTADEBUG |
gillwei7 | 0:5c195ab2f696 | 463 | // uint8_t buf2[20]; |
gillwei7 | 0:5c195ab2f696 | 464 | // console.printf("\r\nSet BLE Address: "); |
gillwei7 | 0:5c195ab2f696 | 465 | // sprintf((char *)&buf2[0],(const char *)"[%02X %02X %02X %02X %02X %02X]", |
gillwei7 | 0:5c195ab2f696 | 466 | // m_peer_addr.addr[0], m_peer_addr.addr[1], m_peer_addr.addr[2], |
gillwei7 | 0:5c195ab2f696 | 467 | // m_peer_addr.addr[3], m_peer_addr.addr[4], m_peer_addr.addr[5]); |
gillwei7 | 0:5c195ab2f696 | 468 | // console.printf(buf2); |
gillwei7 | 0:5c195ab2f696 | 469 | //#endif |
gillwei7 | 0:5c195ab2f696 | 470 | |
gillwei7 | 0:5c195ab2f696 | 471 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 472 | } else if (cyntecGetCommandTokenCnt() == 2){ |
gillwei7 | 0:5c195ab2f696 | 473 | |
gillwei7 | 0:5c195ab2f696 | 474 | uint32_t err_code; |
gillwei7 | 0:5c195ab2f696 | 475 | err_code = sd_ble_gap_address_get(&m_peer_addr); |
gillwei7 | 0:5c195ab2f696 | 476 | APP_ERROR_CHECK(err_code); |
gillwei7 | 0:5c195ab2f696 | 477 | |
gillwei7 | 0:5c195ab2f696 | 478 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 479 | |
gillwei7 | 0:5c195ab2f696 | 480 | console.printf("[%02X %02X %02X %02X %02X %02X]", |
gillwei7 | 0:5c195ab2f696 | 481 | m_peer_addr.addr[5], m_peer_addr.addr[4], m_peer_addr.addr[3], |
gillwei7 | 0:5c195ab2f696 | 482 | m_peer_addr.addr[2], m_peer_addr.addr[1], m_peer_addr.addr[0]); |
gillwei7 | 0:5c195ab2f696 | 483 | } |
gillwei7 | 0:5c195ab2f696 | 484 | else { //cyntecGetCommandTokenCnt() not equal to 2 or 3 |
gillwei7 | 0:5c195ab2f696 | 485 | cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS); |
gillwei7 | 0:5c195ab2f696 | 486 | } |
gillwei7 | 0:5c195ab2f696 | 487 | return; |
gillwei7 | 0:5c195ab2f696 | 488 | } |
gillwei7 | 0:5c195ab2f696 | 489 | |
gillwei7 | 0:5c195ab2f696 | 490 | #ifdef S120_BLE_CENTRAL |
gillwei7 | 0:5c195ab2f696 | 491 | /**@breif Function to start scanning. |
gillwei7 | 0:5c195ab2f696 | 492 | */ |
gillwei7 | 0:5c195ab2f696 | 493 | static void scan_start(void) |
gillwei7 | 0:5c195ab2f696 | 494 | { |
gillwei7 | 0:5c195ab2f696 | 495 | uint32_t err_code = sd_ble_gap_scan_start(&m_scan_param); |
gillwei7 | 0:5c195ab2f696 | 496 | APP_ERROR_CHECK(err_code); |
gillwei7 | 0:5c195ab2f696 | 497 | } |
gillwei7 | 0:5c195ab2f696 | 498 | |
gillwei7 | 0:5c195ab2f696 | 499 | /**@breif Function to start scanning. |
gillwei7 | 0:5c195ab2f696 | 500 | */ |
gillwei7 | 0:5c195ab2f696 | 501 | static void scan_stop(void) |
gillwei7 | 0:5c195ab2f696 | 502 | { |
gillwei7 | 0:5c195ab2f696 | 503 | uint32_t err_code = sd_ble_gap_scan_stop(); |
gillwei7 | 0:5c195ab2f696 | 504 | APP_ERROR_CHECK(err_code); |
gillwei7 | 0:5c195ab2f696 | 505 | } |
gillwei7 | 0:5c195ab2f696 | 506 | |
gillwei7 | 0:5c195ab2f696 | 507 | static void cynBLEScanCommand(void) |
gillwei7 | 0:5c195ab2f696 | 508 | { |
gillwei7 | 0:5c195ab2f696 | 509 | uint8_t *arg = cyntecGetCommandArgument(0,NULL); |
gillwei7 | 0:5c195ab2f696 | 510 | |
gillwei7 | 0:5c195ab2f696 | 511 | if ( arg != NULL ) { |
gillwei7 | 0:5c195ab2f696 | 512 | if ( arg[0] == '1' ) { |
gillwei7 | 0:5c195ab2f696 | 513 | console.printf("\r\nStart Scanning"); |
gillwei7 | 0:5c195ab2f696 | 514 | scan_start(); |
gillwei7 | 0:5c195ab2f696 | 515 | } |
gillwei7 | 0:5c195ab2f696 | 516 | else if ( arg[0] == '0' ) { |
gillwei7 | 0:5c195ab2f696 | 517 | console.printf("\r\nStop Scanning"); |
gillwei7 | 0:5c195ab2f696 | 518 | scan_stop(); |
gillwei7 | 0:5c195ab2f696 | 519 | } |
gillwei7 | 0:5c195ab2f696 | 520 | else |
gillwei7 | 0:5c195ab2f696 | 521 | console.printf("\r\nUsage: cynb scan <1|0>"); |
gillwei7 | 0:5c195ab2f696 | 522 | console.printf("\r\n"); |
gillwei7 | 0:5c195ab2f696 | 523 | } |
gillwei7 | 0:5c195ab2f696 | 524 | } |
gillwei7 | 0:5c195ab2f696 | 525 | |
gillwei7 | 0:5c195ab2f696 | 526 | static void cynBLEConnectCommand(void) |
gillwei7 | 0:5c195ab2f696 | 527 | { |
gillwei7 | 0:5c195ab2f696 | 528 | if (cyntecGetCommandTokenCnt() == 3) |
gillwei7 | 0:5c195ab2f696 | 529 | { |
gillwei7 | 0:5c195ab2f696 | 530 | uint8_t devNameLen = 0; |
gillwei7 | 0:5c195ab2f696 | 531 | uint8_t *argDevName = cyntecGetCommandArgument(0, &devNameLen); |
gillwei7 | 0:5c195ab2f696 | 532 | |
gillwei7 | 0:5c195ab2f696 | 533 | if ( argDevName != NULL ) { |
gillwei7 | 0:5c195ab2f696 | 534 | uint8_t i; |
gillwei7 | 0:5c195ab2f696 | 535 | for (i = 0; i < devNameLen; i++) { |
gillwei7 | 0:5c195ab2f696 | 536 | targetDevName[i] = argDevName[i]; |
gillwei7 | 0:5c195ab2f696 | 537 | } |
gillwei7 | 0:5c195ab2f696 | 538 | if (i < devNameLen) |
gillwei7 | 0:5c195ab2f696 | 539 | targetDevName[i] = '\0'; |
gillwei7 | 0:5c195ab2f696 | 540 | } |
gillwei7 | 0:5c195ab2f696 | 541 | |
gillwei7 | 0:5c195ab2f696 | 542 | console.printf("\r\nSearch for device name:"); |
gillwei7 | 0:5c195ab2f696 | 543 | console.printf(argDevName); |
gillwei7 | 0:5c195ab2f696 | 544 | |
gillwei7 | 0:5c195ab2f696 | 545 | scan_start(); |
gillwei7 | 0:5c195ab2f696 | 546 | } else { |
gillwei7 | 0:5c195ab2f696 | 547 | console.printf("\r\nUsage: cynb connect <Device Name>"); |
gillwei7 | 0:5c195ab2f696 | 548 | console.printf("\r\n(Ex:cynb connect CYN_DEVICE"); |
gillwei7 | 0:5c195ab2f696 | 549 | } |
gillwei7 | 0:5c195ab2f696 | 550 | } |
gillwei7 | 0:5c195ab2f696 | 551 | #endif |
gillwei7 | 0:5c195ab2f696 | 552 | |
gillwei7 | 0:5c195ab2f696 | 553 | static void cynBLEDisconnectCommand(void) |
gillwei7 | 0:5c195ab2f696 | 554 | { |
gillwei7 | 0:5c195ab2f696 | 555 | uint32_t err_code; |
gillwei7 | 0:5c195ab2f696 | 556 | #ifdef S110_BLE_PERIPHERAL |
gillwei7 | 0:5c195ab2f696 | 557 | //marcus need to modify |
gillwei7 | 0:5c195ab2f696 | 558 | err_code = sd_ble_gap_disconnect(test_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); |
gillwei7 | 0:5c195ab2f696 | 559 | #endif |
gillwei7 | 0:5c195ab2f696 | 560 | |
gillwei7 | 0:5c195ab2f696 | 561 | #ifdef S120_BLE_CENTRAL |
gillwei7 | 0:5c195ab2f696 | 562 | err_code = sd_ble_gap_connect_cancel(); // No function defined currently |
gillwei7 | 0:5c195ab2f696 | 563 | #endif |
gillwei7 | 0:5c195ab2f696 | 564 | if (err_code == NRF_SUCCESS) |
gillwei7 | 0:5c195ab2f696 | 565 | { |
gillwei7 | 0:5c195ab2f696 | 566 | |
gillwei7 | 0:5c195ab2f696 | 567 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 568 | // APP_ERROR_CHECK(err_code); |
gillwei7 | 0:5c195ab2f696 | 569 | } |
gillwei7 | 0:5c195ab2f696 | 570 | else if (err_code ==NRF_ERROR_INVALID_STATE){ |
gillwei7 | 0:5c195ab2f696 | 571 | cyntecPrintError(CYNTEC_CMD_ERR_INVALID_STATE_TO_PERFORM_OPERATION); |
gillwei7 | 0:5c195ab2f696 | 572 | } |
gillwei7 | 0:5c195ab2f696 | 573 | else { |
gillwei7 | 0:5c195ab2f696 | 574 | console.printf("ERROR;\r\n"); |
gillwei7 | 0:5c195ab2f696 | 575 | } |
gillwei7 | 0:5c195ab2f696 | 576 | } |
gillwei7 | 0:5c195ab2f696 | 577 | |
gillwei7 | 0:5c195ab2f696 | 578 | static uint8_t isValidGPIO(uint8_t num) |
gillwei7 | 0:5c195ab2f696 | 579 | { |
gillwei7 | 0:5c195ab2f696 | 580 | uint8_t cfgPin[] = {0,1,2,3,4,5,6,7,13,16,17,23,24,25,29}; |
gillwei7 | 0:5c195ab2f696 | 581 | uint8_t i; |
gillwei7 | 0:5c195ab2f696 | 582 | |
gillwei7 | 0:5c195ab2f696 | 583 | for ( i = 0; i < sizeof(cfgPin) ; i++ ) |
gillwei7 | 0:5c195ab2f696 | 584 | { |
gillwei7 | 0:5c195ab2f696 | 585 | if ( num == cfgPin[i] ) |
gillwei7 | 0:5c195ab2f696 | 586 | return 1; |
gillwei7 | 0:5c195ab2f696 | 587 | } |
gillwei7 | 0:5c195ab2f696 | 588 | |
gillwei7 | 0:5c195ab2f696 | 589 | return 0; |
gillwei7 | 0:5c195ab2f696 | 590 | } |
gillwei7 | 0:5c195ab2f696 | 591 | |
gillwei7 | 0:5c195ab2f696 | 592 | static void cynBLESystemOffCommand(void) |
gillwei7 | 0:5c195ab2f696 | 593 | { |
gillwei7 | 0:5c195ab2f696 | 594 | if (cyntecGetCommandTokenCnt() == 3) |
gillwei7 | 0:5c195ab2f696 | 595 | { |
gillwei7 | 0:5c195ab2f696 | 596 | uint8_t argLen = 0; |
gillwei7 | 0:5c195ab2f696 | 597 | uint8_t *arg = cyntecGetCommandArgument(0,&argLen); |
gillwei7 | 0:5c195ab2f696 | 598 | uint8_t gpioNum = cyntecAtoi( arg, argLen ); |
gillwei7 | 0:5c195ab2f696 | 599 | // Can only use 0,1,2,3,4,5,6,7,13,16,17,23,24,25,29 |
gillwei7 | 0:5c195ab2f696 | 600 | if (!isValidGPIO(gpioNum)) |
gillwei7 | 0:5c195ab2f696 | 601 | { |
gillwei7 | 0:5c195ab2f696 | 602 | cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE); |
gillwei7 | 0:5c195ab2f696 | 603 | return; |
gillwei7 | 0:5c195ab2f696 | 604 | } |
gillwei7 | 0:5c195ab2f696 | 605 | nrf_gpio_cfg_sense_input(gpioNum, |
gillwei7 | 0:5c195ab2f696 | 606 | NRF_GPIO_PIN_PULLUP, |
gillwei7 | 0:5c195ab2f696 | 607 | NRF_GPIO_PIN_SENSE_LOW); |
gillwei7 | 0:5c195ab2f696 | 608 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 609 | } else if (cyntecGetCommandTokenCnt() == 2){ |
gillwei7 | 0:5c195ab2f696 | 610 | /* default wake up pin is uart Rx pin */ |
gillwei7 | 0:5c195ab2f696 | 611 | nrf_gpio_cfg_sense_input(RX_PIN_NUMBER, |
gillwei7 | 0:5c195ab2f696 | 612 | NRF_GPIO_PIN_PULLUP, |
gillwei7 | 0:5c195ab2f696 | 613 | NRF_GPIO_PIN_SENSE_LOW); |
gillwei7 | 0:5c195ab2f696 | 614 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 615 | } else{ |
gillwei7 | 0:5c195ab2f696 | 616 | cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS); |
gillwei7 | 0:5c195ab2f696 | 617 | } |
gillwei7 | 0:5c195ab2f696 | 618 | sd_power_system_off(); |
gillwei7 | 0:5c195ab2f696 | 619 | } |
gillwei7 | 0:5c195ab2f696 | 620 | |
gillwei7 | 0:5c195ab2f696 | 621 | static void cynBLEGPIOCommand(void) |
gillwei7 | 0:5c195ab2f696 | 622 | { |
gillwei7 | 0:5c195ab2f696 | 623 | |
gillwei7 | 0:5c195ab2f696 | 624 | if (cyntecGetCommandTokenCnt() == 4) |
gillwei7 | 0:5c195ab2f696 | 625 | { |
gillwei7 | 0:5c195ab2f696 | 626 | uint8_t argLen = 0; |
gillwei7 | 0:5c195ab2f696 | 627 | uint8_t *arg = cyntecGetCommandArgument(0,&argLen); |
gillwei7 | 0:5c195ab2f696 | 628 | uint8_t gpioNum = cyntecAtoi( arg, argLen ); |
gillwei7 | 0:5c195ab2f696 | 629 | |
gillwei7 | 0:5c195ab2f696 | 630 | if (!isValidGPIO(gpioNum)) |
gillwei7 | 0:5c195ab2f696 | 631 | { |
gillwei7 | 0:5c195ab2f696 | 632 | cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_OUT_OF_RANGE); |
gillwei7 | 0:5c195ab2f696 | 633 | return; |
gillwei7 | 0:5c195ab2f696 | 634 | } |
gillwei7 | 0:5c195ab2f696 | 635 | |
gillwei7 | 0:5c195ab2f696 | 636 | /* arg2 is set or clear */ |
gillwei7 | 0:5c195ab2f696 | 637 | uint8_t *action = cyntecGetCommandArgument(1,&argLen); |
gillwei7 | 0:5c195ab2f696 | 638 | |
gillwei7 | 0:5c195ab2f696 | 639 | if ( cyntecStrCmp(action,(unsigned char *)"set",argLen) == 1 ) |
gillwei7 | 0:5c195ab2f696 | 640 | { |
gillwei7 | 0:5c195ab2f696 | 641 | nrf_gpio_cfg_output(gpioNum); |
gillwei7 | 0:5c195ab2f696 | 642 | nrf_gpio_pin_set(gpioNum); |
gillwei7 | 0:5c195ab2f696 | 643 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 644 | } else if ( cyntecStrCmp(action,(unsigned char *)"clear",argLen) == 1 ) { |
gillwei7 | 0:5c195ab2f696 | 645 | nrf_gpio_cfg_output(gpioNum); |
gillwei7 | 0:5c195ab2f696 | 646 | nrf_gpio_pin_clear(gpioNum); |
gillwei7 | 0:5c195ab2f696 | 647 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 648 | } else { |
gillwei7 | 0:5c195ab2f696 | 649 | cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_SYNTAX_ERROR); |
gillwei7 | 0:5c195ab2f696 | 650 | } |
gillwei7 | 0:5c195ab2f696 | 651 | } else { |
gillwei7 | 0:5c195ab2f696 | 652 | cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS); |
gillwei7 | 0:5c195ab2f696 | 653 | } |
gillwei7 | 0:5c195ab2f696 | 654 | } |
gillwei7 | 0:5c195ab2f696 | 655 | |
gillwei7 | 0:5c195ab2f696 | 656 | static void cynResetCommand(void) |
gillwei7 | 0:5c195ab2f696 | 657 | { |
gillwei7 | 0:5c195ab2f696 | 658 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 659 | // On assert, the system can only recover with a reset. |
gillwei7 | 0:5c195ab2f696 | 660 | NVIC_SystemReset(); |
gillwei7 | 0:5c195ab2f696 | 661 | } |
gillwei7 | 0:5c195ab2f696 | 662 | |
gillwei7 | 0:5c195ab2f696 | 663 | // gill modify for update value in non-connect state 20150904 |
gillwei7 | 0:5c195ab2f696 | 664 | // Change set value connection handle |
gillwei7 | 0:5c195ab2f696 | 665 | static void cynBLEUpdateUUIDCommand(void) |
gillwei7 | 0:5c195ab2f696 | 666 | { |
gillwei7 | 0:5c195ab2f696 | 667 | uint8_t i,j; |
gillwei7 | 0:5c195ab2f696 | 668 | uint8_t value[MAX_VALUE_LENGTH]; |
gillwei7 | 0:5c195ab2f696 | 669 | memset(value, 0, sizeof(value)); |
gillwei7 | 0:5c195ab2f696 | 670 | // uint8_t buf_char_uuid_type; |
gillwei7 | 0:5c195ab2f696 | 671 | ble_uuid_t buf_service_uuid; |
gillwei7 | 0:5c195ab2f696 | 672 | ble_uuid_t buf_char_uuid; |
gillwei7 | 0:5c195ab2f696 | 673 | uint8_t argLen = 0; |
gillwei7 | 0:5c195ab2f696 | 674 | uint8_t *arg; |
gillwei7 | 0:5c195ab2f696 | 675 | uint8_t valueLengthBuffer = 0; |
gillwei7 | 0:5c195ab2f696 | 676 | uint8_t modeType; |
gillwei7 | 0:5c195ab2f696 | 677 | bool updatematchFlag = false; // Check matched characteristic found |
gillwei7 | 0:5c195ab2f696 | 678 | uint16_t len = MAX_VALUE_LENGTH; |
gillwei7 | 0:5c195ab2f696 | 679 | uint32_t err_code; |
gillwei7 | 0:5c195ab2f696 | 680 | // check if argument count is right |
gillwei7 | 0:5c195ab2f696 | 681 | if (cyntecGetCommandTokenCnt() != 5) |
gillwei7 | 0:5c195ab2f696 | 682 | { |
gillwei7 | 0:5c195ab2f696 | 683 | cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS); |
gillwei7 | 0:5c195ab2f696 | 684 | return; |
gillwei7 | 0:5c195ab2f696 | 685 | } |
gillwei7 | 0:5c195ab2f696 | 686 | else |
gillwei7 | 0:5c195ab2f696 | 687 | { |
gillwei7 | 0:5c195ab2f696 | 688 | arg = cyntecGetCommandArgument(0,&argLen); |
gillwei7 | 0:5c195ab2f696 | 689 | if (arg[0] != '0' | arg[1] != 'x' | argLen%2 != 0) { |
gillwei7 | 0:5c195ab2f696 | 690 | cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_SYNTAX_ERROR); |
gillwei7 | 0:5c195ab2f696 | 691 | return; |
gillwei7 | 0:5c195ab2f696 | 692 | } |
gillwei7 | 0:5c195ab2f696 | 693 | else { |
gillwei7 | 0:5c195ab2f696 | 694 | // Handle input parameter - Service UUID |
gillwei7 | 0:5c195ab2f696 | 695 | arg = cyntecGetCommandArgument(0,&argLen); |
gillwei7 | 0:5c195ab2f696 | 696 | |
gillwei7 | 0:5c195ab2f696 | 697 | if (argLen == 6 && arg[0] == '0' && arg[1] == 'x') |
gillwei7 | 0:5c195ab2f696 | 698 | { |
gillwei7 | 0:5c195ab2f696 | 699 | buf_service_uuid.uuid = cyntecArgToUint16( (arg + 2), (argLen - 2)); |
gillwei7 | 0:5c195ab2f696 | 700 | buf_service_uuid.type = BLE_UUID_TYPE_BLE; |
gillwei7 | 0:5c195ab2f696 | 701 | } |
gillwei7 | 0:5c195ab2f696 | 702 | if (argLen == 34 && arg[0] == '0' && arg[1] == 'x') |
gillwei7 | 0:5c195ab2f696 | 703 | { |
gillwei7 | 0:5c195ab2f696 | 704 | buf_service_uuid.uuid = cyntecArgToUint16( (arg + 6), 4); |
gillwei7 | 0:5c195ab2f696 | 705 | buf_service_uuid.type = BLE_UUID_TYPE_VENDOR_BEGIN; |
gillwei7 | 0:5c195ab2f696 | 706 | } |
gillwei7 | 0:5c195ab2f696 | 707 | |
gillwei7 | 0:5c195ab2f696 | 708 | // Handle input parameter - Characteristic UUID |
gillwei7 | 0:5c195ab2f696 | 709 | argLen = 0; |
gillwei7 | 0:5c195ab2f696 | 710 | arg = cyntecGetCommandArgument(1,&argLen); |
gillwei7 | 0:5c195ab2f696 | 711 | |
gillwei7 | 0:5c195ab2f696 | 712 | if (argLen == 6 && arg[0] == '0' && arg[1] == 'x') |
gillwei7 | 0:5c195ab2f696 | 713 | { |
gillwei7 | 0:5c195ab2f696 | 714 | buf_char_uuid.uuid = cyntecArgToUint16( (arg + 2), (argLen - 2)); |
gillwei7 | 0:5c195ab2f696 | 715 | buf_char_uuid.type = BLE_UUID_TYPE_BLE; |
gillwei7 | 0:5c195ab2f696 | 716 | } |
gillwei7 | 0:5c195ab2f696 | 717 | if (argLen == 34 && arg[0] == '0' && arg[1] == 'x') |
gillwei7 | 0:5c195ab2f696 | 718 | { |
gillwei7 | 0:5c195ab2f696 | 719 | buf_char_uuid.uuid = cyntecArgToUint16( (arg + 6), 4); |
gillwei7 | 0:5c195ab2f696 | 720 | buf_char_uuid.type = BLE_UUID_TYPE_VENDOR_BEGIN; |
gillwei7 | 0:5c195ab2f696 | 721 | } |
gillwei7 | 0:5c195ab2f696 | 722 | // sprintf((char *)&debugMess[0],"buf_service_uuid[%d,%4X]\r\n",buf_service_uuid.type,buf_service_uuid.uuid); |
gillwei7 | 0:5c195ab2f696 | 723 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 724 | |
gillwei7 | 0:5c195ab2f696 | 725 | // Handle input parameter - value |
gillwei7 | 0:5c195ab2f696 | 726 | arg = cyntecGetCommandArgument(2,&argLen); |
gillwei7 | 0:5c195ab2f696 | 727 | valueLengthBuffer = (argLen-2)/2; |
gillwei7 | 0:5c195ab2f696 | 728 | for (i=0 ; i < (argLen-2)/2; i++) |
gillwei7 | 0:5c195ab2f696 | 729 | { |
gillwei7 | 0:5c195ab2f696 | 730 | value[i] = cyntecArgToUint8(arg+2*(i+1), 2); |
gillwei7 | 0:5c195ab2f696 | 731 | // debug |
gillwei7 | 0:5c195ab2f696 | 732 | // sprintf((char *)&buf[0],"[%2X]",value[i]); |
gillwei7 | 0:5c195ab2f696 | 733 | // console.printf(buf); |
gillwei7 | 0:5c195ab2f696 | 734 | } |
gillwei7 | 0:5c195ab2f696 | 735 | |
gillwei7 | 0:5c195ab2f696 | 736 | } |
gillwei7 | 0:5c195ab2f696 | 737 | // debug message |
gillwei7 | 0:5c195ab2f696 | 738 | // sprintf((char *)&buf[0],"value:[%02X]", value); |
gillwei7 | 0:5c195ab2f696 | 739 | // console.printf(buf); |
gillwei7 | 0:5c195ab2f696 | 740 | |
gillwei7 | 0:5c195ab2f696 | 741 | for ( i = 0 ; i < CLI_SERVICE_MAX_NUM ; i++ ) |
gillwei7 | 0:5c195ab2f696 | 742 | { |
gillwei7 | 0:5c195ab2f696 | 743 | if ( (bufferService[i].service_uuid.uuid == buf_service_uuid.uuid) &(bufferService[i].service_uuid.type == buf_service_uuid.type)& (updatematchFlag == false)) |
gillwei7 | 0:5c195ab2f696 | 744 | { |
gillwei7 | 0:5c195ab2f696 | 745 | //readmatchFlag = true; |
gillwei7 | 0:5c195ab2f696 | 746 | for ( j = 0 ; j < CLI_CHAR_MAX_NUM ; j++ ) |
gillwei7 | 0:5c195ab2f696 | 747 | { |
gillwei7 | 0:5c195ab2f696 | 748 | if ( (bufferService[i].bufferGattChar[j].char_uuid.uuid == buf_char_uuid.uuid) &(bufferService[i].bufferGattChar[j].char_uuid.type == buf_char_uuid.type)& (updatematchFlag == false)) |
gillwei7 | 0:5c195ab2f696 | 749 | { |
gillwei7 | 0:5c195ab2f696 | 750 | modeType = bufferService[i].bufferGattChar[j].mode; |
gillwei7 | 0:5c195ab2f696 | 751 | //memset(bufferService[i].bufferGattChar[j].value, 0, sizeof(bufferService[i].bufferGattChar[j].value)); |
gillwei7 | 0:5c195ab2f696 | 752 | // Identify characteristic property is notify or indicate |
gillwei7 | 0:5c195ab2f696 | 753 | if (((modeType & (1 << CLI_CHAR_MODE_INDICATE)) | (modeType & (1 << CLI_CHAR_MODE_NOTIFY))) ) |
gillwei7 | 0:5c195ab2f696 | 754 | { |
gillwei7 | 0:5c195ab2f696 | 755 | if (bufferService[i].bufferGattChar[j].mode & (1 << CLI_CHAR_MODE_INDICATE)) |
gillwei7 | 0:5c195ab2f696 | 756 | modeType = BLE_GATT_HVX_INDICATION ; |
gillwei7 | 0:5c195ab2f696 | 757 | if (bufferService[i].bufferGattChar[j].mode & (1 << CLI_CHAR_MODE_NOTIFY)) |
gillwei7 | 0:5c195ab2f696 | 758 | modeType = BLE_GATT_HVX_NOTIFICATION; |
gillwei7 | 0:5c195ab2f696 | 759 | ble_gatts_hvx_params_t hvx_params; |
gillwei7 | 0:5c195ab2f696 | 760 | memset(&hvx_params, 0, sizeof(hvx_params)); |
gillwei7 | 0:5c195ab2f696 | 761 | hvx_params.handle = bufferService[i].bufferGattChar[j].char_value_handle; |
gillwei7 | 0:5c195ab2f696 | 762 | hvx_params.type = modeType; |
gillwei7 | 0:5c195ab2f696 | 763 | hvx_params.offset = 0; |
gillwei7 | 0:5c195ab2f696 | 764 | hvx_params.p_len = &len; |
gillwei7 | 0:5c195ab2f696 | 765 | hvx_params.p_data = value; |
gillwei7 | 0:5c195ab2f696 | 766 | if (connState) // If connected, send notification/indication |
gillwei7 | 0:5c195ab2f696 | 767 | { |
gillwei7 | 0:5c195ab2f696 | 768 | err_code = sd_ble_gatts_hvx(test_conn_handle, &hvx_params); |
gillwei7 | 0:5c195ab2f696 | 769 | |
gillwei7 | 0:5c195ab2f696 | 770 | if (err_code == NRF_SUCCESS) |
gillwei7 | 0:5c195ab2f696 | 771 | { |
gillwei7 | 0:5c195ab2f696 | 772 | //do nothing |
gillwei7 | 0:5c195ab2f696 | 773 | } |
gillwei7 | 0:5c195ab2f696 | 774 | else if ((err_code != NRF_SUCCESS) && |
gillwei7 | 0:5c195ab2f696 | 775 | (err_code != NRF_ERROR_INVALID_STATE) && |
gillwei7 | 0:5c195ab2f696 | 776 | (err_code != BLE_ERROR_NO_TX_BUFFERS) && |
gillwei7 | 0:5c195ab2f696 | 777 | (err_code != BLE_ERROR_GATTS_SYS_ATTR_MISSING) |
gillwei7 | 0:5c195ab2f696 | 778 | ) |
gillwei7 | 0:5c195ab2f696 | 779 | { |
gillwei7 | 0:5c195ab2f696 | 780 | console.printf("HVX ERROR;%04X\r\n",err_code); |
gillwei7 | 0:5c195ab2f696 | 781 | } |
gillwei7 | 0:5c195ab2f696 | 782 | } |
gillwei7 | 0:5c195ab2f696 | 783 | |
gillwei7 | 0:5c195ab2f696 | 784 | } |
gillwei7 | 0:5c195ab2f696 | 785 | |
gillwei7 | 0:5c195ab2f696 | 786 | // Update database |
gillwei7 | 0:5c195ab2f696 | 787 | bufferService[i].bufferGattChar[j].valueLength = valueLengthBuffer; |
gillwei7 | 0:5c195ab2f696 | 788 | ble_gatts_value_t bufGattsValue; |
gillwei7 | 0:5c195ab2f696 | 789 | memset(&bufGattsValue, 0, sizeof(bufGattsValue)); |
gillwei7 | 0:5c195ab2f696 | 790 | bufGattsValue.len = len; |
gillwei7 | 0:5c195ab2f696 | 791 | bufGattsValue.offset = 0; |
gillwei7 | 0:5c195ab2f696 | 792 | bufGattsValue.p_value = value; |
gillwei7 | 0:5c195ab2f696 | 793 | //err_code = sd_ble_gatts_value_set(bufferService[i].bufferGattChar[j].char_value_handle, |
gillwei7 | 0:5c195ab2f696 | 794 | // 0, |
gillwei7 | 0:5c195ab2f696 | 795 | // &len, |
gillwei7 | 0:5c195ab2f696 | 796 | // value); |
gillwei7 | 0:5c195ab2f696 | 797 | err_code = sd_ble_gatts_value_set( |
gillwei7 | 0:5c195ab2f696 | 798 | //test_conn_handle, |
gillwei7 | 0:5c195ab2f696 | 799 | BLE_CONN_HANDLE_INVALID, // User can update in non-connected state |
gillwei7 | 0:5c195ab2f696 | 800 | bufferService[i].bufferGattChar[j].char_value_handle, |
gillwei7 | 0:5c195ab2f696 | 801 | &bufGattsValue |
gillwei7 | 0:5c195ab2f696 | 802 | ); |
gillwei7 | 0:5c195ab2f696 | 803 | |
gillwei7 | 0:5c195ab2f696 | 804 | if (err_code == NRF_SUCCESS) |
gillwei7 | 0:5c195ab2f696 | 805 | { |
gillwei7 | 0:5c195ab2f696 | 806 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 807 | } |
gillwei7 | 0:5c195ab2f696 | 808 | else |
gillwei7 | 0:5c195ab2f696 | 809 | { |
gillwei7 | 0:5c195ab2f696 | 810 | console.printf("Set ERROR;%04X\r\n",err_code); |
gillwei7 | 0:5c195ab2f696 | 811 | } |
gillwei7 | 0:5c195ab2f696 | 812 | updatematchFlag = true; |
gillwei7 | 0:5c195ab2f696 | 813 | return; |
gillwei7 | 0:5c195ab2f696 | 814 | } |
gillwei7 | 0:5c195ab2f696 | 815 | } |
gillwei7 | 0:5c195ab2f696 | 816 | } |
gillwei7 | 0:5c195ab2f696 | 817 | } |
gillwei7 | 0:5c195ab2f696 | 818 | if (updatematchFlag == false){ |
gillwei7 | 0:5c195ab2f696 | 819 | cyntecPrintError(CYNTEC_CMD_ERR_NO_MATCHED_ARGUMENT); |
gillwei7 | 0:5c195ab2f696 | 820 | } |
gillwei7 | 0:5c195ab2f696 | 821 | } |
gillwei7 | 0:5c195ab2f696 | 822 | } |
gillwei7 | 0:5c195ab2f696 | 823 | |
gillwei7 | 0:5c195ab2f696 | 824 | static void cynBLEReadDataCommand(void) |
gillwei7 | 0:5c195ab2f696 | 825 | { |
gillwei7 | 0:5c195ab2f696 | 826 | |
gillwei7 | 0:5c195ab2f696 | 827 | if (cyntecGetCommandTokenCnt() != 4) |
gillwei7 | 0:5c195ab2f696 | 828 | { |
gillwei7 | 0:5c195ab2f696 | 829 | cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS); |
gillwei7 | 0:5c195ab2f696 | 830 | } |
gillwei7 | 0:5c195ab2f696 | 831 | else |
gillwei7 | 0:5c195ab2f696 | 832 | { |
gillwei7 | 0:5c195ab2f696 | 833 | //uint16_t buf_char_uuid ; |
gillwei7 | 0:5c195ab2f696 | 834 | uint8_t i,j; |
gillwei7 | 0:5c195ab2f696 | 835 | uint8_t value[MAX_VALUE_LENGTH]; |
gillwei7 | 0:5c195ab2f696 | 836 | //uint8_t buf[20]; |
gillwei7 | 0:5c195ab2f696 | 837 | // uint8_t buf_char_uuid_type; |
gillwei7 | 0:5c195ab2f696 | 838 | ble_uuid_t buf_service_uuid; |
gillwei7 | 0:5c195ab2f696 | 839 | ble_uuid_t buf_char_uuid; |
gillwei7 | 0:5c195ab2f696 | 840 | uint8_t valueLengthBuffer; |
gillwei7 | 0:5c195ab2f696 | 841 | bool readmatchFlag = false; |
gillwei7 | 0:5c195ab2f696 | 842 | // debug message |
gillwei7 | 0:5c195ab2f696 | 843 | // sprintf((char *)&debugMess[0],"buf_char_uuid:[%04X]", buf_char_uuid); |
gillwei7 | 0:5c195ab2f696 | 844 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 845 | uint8_t argLen = 0; |
gillwei7 | 0:5c195ab2f696 | 846 | uint8_t *arg = cyntecGetCommandArgument(0,&argLen); |
gillwei7 | 0:5c195ab2f696 | 847 | |
gillwei7 | 0:5c195ab2f696 | 848 | // Print out the service & char uuids table |
gillwei7 | 0:5c195ab2f696 | 849 | // for ( i = 0 ; i < CLI_SERVICE_MAX_NUM ; i++ ) |
gillwei7 | 0:5c195ab2f696 | 850 | // { |
gillwei7 | 0:5c195ab2f696 | 851 | // for ( j = 0 ; j < CLI_SERVICE_MAX_NUM ; j++ ) |
gillwei7 | 0:5c195ab2f696 | 852 | // { |
gillwei7 | 0:5c195ab2f696 | 853 | // sprintf((char *)&debugMess[0],"[%4X,%d][%4X,%d]\r\n",bufferService[i].service_uuid.uuid,bufferService[i].service_uuid.type,bufferService[i].bufferGattChar[j].char_uuid.uuid,bufferService[i].bufferGattChar[j].char_uuid.type); |
gillwei7 | 0:5c195ab2f696 | 854 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 855 | // } |
gillwei7 | 0:5c195ab2f696 | 856 | // } |
gillwei7 | 0:5c195ab2f696 | 857 | |
gillwei7 | 0:5c195ab2f696 | 858 | // Handle input parameter - Service UUID |
gillwei7 | 0:5c195ab2f696 | 859 | if (argLen == 6 && arg[0] == '0' && arg[1] == 'x') |
gillwei7 | 0:5c195ab2f696 | 860 | { |
gillwei7 | 0:5c195ab2f696 | 861 | buf_service_uuid.uuid = cyntecArgToUint16( (arg + 2), (argLen - 2)); |
gillwei7 | 0:5c195ab2f696 | 862 | buf_service_uuid.type = BLE_UUID_TYPE_BLE; |
gillwei7 | 0:5c195ab2f696 | 863 | } |
gillwei7 | 0:5c195ab2f696 | 864 | if (argLen == 34 && arg[0] == '0' && arg[1] == 'x') |
gillwei7 | 0:5c195ab2f696 | 865 | { |
gillwei7 | 0:5c195ab2f696 | 866 | buf_service_uuid.uuid = cyntecArgToUint16( (arg + 6), 4); |
gillwei7 | 0:5c195ab2f696 | 867 | buf_service_uuid.type = BLE_UUID_TYPE_VENDOR_BEGIN; |
gillwei7 | 0:5c195ab2f696 | 868 | } |
gillwei7 | 0:5c195ab2f696 | 869 | |
gillwei7 | 0:5c195ab2f696 | 870 | // Handle input parameter - Characteristic UUID |
gillwei7 | 0:5c195ab2f696 | 871 | argLen = 0; |
gillwei7 | 0:5c195ab2f696 | 872 | arg = cyntecGetCommandArgument(1,&argLen); |
gillwei7 | 0:5c195ab2f696 | 873 | if (argLen == 6 && arg[0] == '0' && arg[1] == 'x') |
gillwei7 | 0:5c195ab2f696 | 874 | { |
gillwei7 | 0:5c195ab2f696 | 875 | buf_char_uuid.uuid = cyntecArgToUint16( (arg + 2), (argLen - 2)); |
gillwei7 | 0:5c195ab2f696 | 876 | buf_char_uuid.type = BLE_UUID_TYPE_BLE; |
gillwei7 | 0:5c195ab2f696 | 877 | } |
gillwei7 | 0:5c195ab2f696 | 878 | if (argLen == 34 && arg[0] == '0' && arg[1] == 'x') |
gillwei7 | 0:5c195ab2f696 | 879 | { |
gillwei7 | 0:5c195ab2f696 | 880 | buf_char_uuid.uuid = cyntecArgToUint16( (arg + 6), 4); |
gillwei7 | 0:5c195ab2f696 | 881 | buf_char_uuid.type = BLE_UUID_TYPE_VENDOR_BEGIN; |
gillwei7 | 0:5c195ab2f696 | 882 | } |
gillwei7 | 0:5c195ab2f696 | 883 | // sprintf((char *)&debugMess[0],"buf_service_uuid[%d,%4X]\r\n",buf_service_uuid.type,buf_service_uuid.uuid); |
gillwei7 | 0:5c195ab2f696 | 884 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 885 | for ( i = 0 ; i < CLI_SERVICE_MAX_NUM ; i++ ) |
gillwei7 | 0:5c195ab2f696 | 886 | { |
gillwei7 | 0:5c195ab2f696 | 887 | if ( (bufferService[i].service_uuid.uuid == buf_service_uuid.uuid) &(bufferService[i].service_uuid.type == buf_service_uuid.type)& (readmatchFlag == false)) |
gillwei7 | 0:5c195ab2f696 | 888 | { |
gillwei7 | 0:5c195ab2f696 | 889 | //readmatchFlag = true; |
gillwei7 | 0:5c195ab2f696 | 890 | for ( j = 0 ; j < CLI_CHAR_MAX_NUM ; j++ ) |
gillwei7 | 0:5c195ab2f696 | 891 | { |
gillwei7 | 0:5c195ab2f696 | 892 | if ( (bufferService[i].bufferGattChar[j].char_uuid.uuid == buf_char_uuid.uuid) &(bufferService[i].bufferGattChar[j].char_uuid.type == buf_char_uuid.type)& (readmatchFlag == false)) |
gillwei7 | 0:5c195ab2f696 | 893 | { |
gillwei7 | 0:5c195ab2f696 | 894 | // uint8_t value[] = "88"; |
gillwei7 | 0:5c195ab2f696 | 895 | uint16_t len = MAX_VALUE_LENGTH; |
gillwei7 | 0:5c195ab2f696 | 896 | ble_gatts_value_t bufGattsValue; |
gillwei7 | 0:5c195ab2f696 | 897 | memset(&bufGattsValue, 0, sizeof(bufGattsValue)); |
gillwei7 | 0:5c195ab2f696 | 898 | bufGattsValue.len = len; |
gillwei7 | 0:5c195ab2f696 | 899 | bufGattsValue.offset = 0; |
gillwei7 | 0:5c195ab2f696 | 900 | bufGattsValue.p_value = value; |
gillwei7 | 0:5c195ab2f696 | 901 | //sd_ble_gatts_value_get(bufferService[i].bufferGattChar[j].char_value_handle, |
gillwei7 | 0:5c195ab2f696 | 902 | // 0, |
gillwei7 | 0:5c195ab2f696 | 903 | // &len, |
gillwei7 | 0:5c195ab2f696 | 904 | // value); |
gillwei7 | 0:5c195ab2f696 | 905 | sd_ble_gatts_value_get( test_conn_handle, |
gillwei7 | 0:5c195ab2f696 | 906 | bufferService[i].bufferGattChar[j].char_value_handle, |
gillwei7 | 0:5c195ab2f696 | 907 | &bufGattsValue |
gillwei7 | 0:5c195ab2f696 | 908 | ); |
gillwei7 | 0:5c195ab2f696 | 909 | console.printf("\r\nOK;0x"); |
gillwei7 | 0:5c195ab2f696 | 910 | valueLengthBuffer = bufferService[i].bufferGattChar[j].valueLength; |
gillwei7 | 0:5c195ab2f696 | 911 | // sprintf((char *)&debugMess[0],"[%i]",valueLengthBuffer); |
gillwei7 | 0:5c195ab2f696 | 912 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 913 | |
gillwei7 | 0:5c195ab2f696 | 914 | for (i=0 ; i < valueLengthBuffer; i++) |
gillwei7 | 0:5c195ab2f696 | 915 | { |
gillwei7 | 0:5c195ab2f696 | 916 | console.printf("%02X",value[i]); |
gillwei7 | 0:5c195ab2f696 | 917 | } |
gillwei7 | 0:5c195ab2f696 | 918 | console.printf(";\r\n"); |
gillwei7 | 0:5c195ab2f696 | 919 | readmatchFlag = true; |
gillwei7 | 0:5c195ab2f696 | 920 | return; |
gillwei7 | 0:5c195ab2f696 | 921 | } |
gillwei7 | 0:5c195ab2f696 | 922 | } |
gillwei7 | 0:5c195ab2f696 | 923 | } |
gillwei7 | 0:5c195ab2f696 | 924 | } |
gillwei7 | 0:5c195ab2f696 | 925 | // no matched case, can not read |
gillwei7 | 0:5c195ab2f696 | 926 | if (readmatchFlag == false){ |
gillwei7 | 0:5c195ab2f696 | 927 | cyntecPrintError(CYNTEC_CMD_ERR_NO_MATCHED_ARGUMENT); |
gillwei7 | 0:5c195ab2f696 | 928 | } |
gillwei7 | 0:5c195ab2f696 | 929 | } |
gillwei7 | 0:5c195ab2f696 | 930 | |
gillwei7 | 0:5c195ab2f696 | 931 | |
gillwei7 | 0:5c195ab2f696 | 932 | } |
gillwei7 | 0:5c195ab2f696 | 933 | /* Set characteristics */ |
gillwei7 | 0:5c195ab2f696 | 934 | static void cyntecInsertCharUUID(ble_uuid_t char_UUID, uint16_t charValueHandle,uint8_t valueLengthBuffer,uint8_t mode) |
gillwei7 | 0:5c195ab2f696 | 935 | { |
gillwei7 | 0:5c195ab2f696 | 936 | uint8_t j; |
gillwei7 | 0:5c195ab2f696 | 937 | j=char_count; |
gillwei7 | 0:5c195ab2f696 | 938 | // sprintf((char *)&debugMess[0],"char_uuid:%4X\r\n",char_UUID.uuid); |
gillwei7 | 0:5c195ab2f696 | 939 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 940 | bufferService[service_count-1].bufferGattChar[j].char_uuid.uuid = char_UUID.uuid; |
gillwei7 | 0:5c195ab2f696 | 941 | bufferService[service_count-1].bufferGattChar[j].char_uuid.type = char_UUID.type; |
gillwei7 | 0:5c195ab2f696 | 942 | bufferService[service_count-1].bufferGattChar[j].valueLength = valueLengthBuffer; |
gillwei7 | 0:5c195ab2f696 | 943 | bufferService[service_count-1].bufferGattChar[j].mode = mode; |
gillwei7 | 0:5c195ab2f696 | 944 | bufferService[service_count-1].bufferGattChar[j].char_value_handle = charValueHandle; |
gillwei7 | 0:5c195ab2f696 | 945 | return; |
gillwei7 | 0:5c195ab2f696 | 946 | } |
gillwei7 | 0:5c195ab2f696 | 947 | |
gillwei7 | 0:5c195ab2f696 | 948 | static void cynGattCharCommand(void) |
gillwei7 | 0:5c195ab2f696 | 949 | { |
gillwei7 | 0:5c195ab2f696 | 950 | // uint16_t service_uuid_ble; |
gillwei7 | 0:5c195ab2f696 | 951 | // uint8_t service_uuid_vs[16]; |
gillwei7 | 0:5c195ab2f696 | 952 | |
gillwei7 | 0:5c195ab2f696 | 953 | uint8_t attrMode=0; |
gillwei7 | 0:5c195ab2f696 | 954 | uint8_t attrValue[MAX_VALUE_LENGTH]; |
gillwei7 | 0:5c195ab2f696 | 955 | memset(&attrValue, 0, sizeof(attrValue)); |
gillwei7 | 0:5c195ab2f696 | 956 | |
gillwei7 | 0:5c195ab2f696 | 957 | uint8_t i; |
gillwei7 | 0:5c195ab2f696 | 958 | // uint8_t valueBuffer; |
gillwei7 | 0:5c195ab2f696 | 959 | uint8_t err_code; |
gillwei7 | 0:5c195ab2f696 | 960 | uint16_t buffer_char_uuid; |
gillwei7 | 0:5c195ab2f696 | 961 | // uint16_t buffer_char_uuid_ble; |
gillwei7 | 0:5c195ab2f696 | 962 | uint16_t buffer_uuid_vs[8]; |
gillwei7 | 0:5c195ab2f696 | 963 | ble_uuid_t char_uuid; |
gillwei7 | 0:5c195ab2f696 | 964 | ble_uuid128_t char_uuid_vs; |
gillwei7 | 0:5c195ab2f696 | 965 | |
gillwei7 | 0:5c195ab2f696 | 966 | ble_gatts_char_md_t char_md; |
gillwei7 | 0:5c195ab2f696 | 967 | ble_gatts_attr_t attr_char_value; |
gillwei7 | 0:5c195ab2f696 | 968 | |
gillwei7 | 0:5c195ab2f696 | 969 | ble_gatts_attr_md_t cccd_md; |
gillwei7 | 0:5c195ab2f696 | 970 | ble_gatts_attr_md_t attr_md; |
gillwei7 | 0:5c195ab2f696 | 971 | // uint8_t init_value_encoded[2] = "77"; |
gillwei7 | 0:5c195ab2f696 | 972 | // uint8_t init_value_len; |
gillwei7 | 0:5c195ab2f696 | 973 | uint8_t valueLengthBuffer; |
gillwei7 | 0:5c195ab2f696 | 974 | extern uint8_t char_count; |
gillwei7 | 0:5c195ab2f696 | 975 | |
gillwei7 | 0:5c195ab2f696 | 976 | if (cyntecGetCommandTokenCnt() != 5) |
gillwei7 | 0:5c195ab2f696 | 977 | { |
gillwei7 | 0:5c195ab2f696 | 978 | cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS); |
gillwei7 | 0:5c195ab2f696 | 979 | return; |
gillwei7 | 0:5c195ab2f696 | 980 | } |
gillwei7 | 0:5c195ab2f696 | 981 | else |
gillwei7 | 0:5c195ab2f696 | 982 | { |
gillwei7 | 0:5c195ab2f696 | 983 | |
gillwei7 | 0:5c195ab2f696 | 984 | //#ifdef DELTA_DEBUG |
gillwei7 | 0:5c195ab2f696 | 985 | //sprintf((char *)&debugMess[0],"[%04X]", service_uuid); |
gillwei7 | 0:5c195ab2f696 | 986 | //console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 987 | //#endif |
gillwei7 | 0:5c195ab2f696 | 988 | |
gillwei7 | 0:5c195ab2f696 | 989 | /* handle second parameter - UUID */ |
gillwei7 | 0:5c195ab2f696 | 990 | uint8_t argLen = 0; |
gillwei7 | 0:5c195ab2f696 | 991 | uint8_t *arg = cyntecGetCommandArgument(0,&argLen); |
gillwei7 | 0:5c195ab2f696 | 992 | |
gillwei7 | 0:5c195ab2f696 | 993 | /* len: 6 => 0xXXXX */ |
gillwei7 | 0:5c195ab2f696 | 994 | if ( argLen == 6 && arg[0] == '0' && arg[1] == 'x') |
gillwei7 | 0:5c195ab2f696 | 995 | { |
gillwei7 | 0:5c195ab2f696 | 996 | buffer_char_uuid = cyntecArgToUint16( (arg + 2), (argLen - 2)); |
gillwei7 | 0:5c195ab2f696 | 997 | BLE_UUID_BLE_ASSIGN(char_uuid, buffer_char_uuid); |
gillwei7 | 0:5c195ab2f696 | 998 | char_uuid.type = BLE_UUID_TYPE_BLE; |
gillwei7 | 0:5c195ab2f696 | 999 | } |
gillwei7 | 0:5c195ab2f696 | 1000 | |
gillwei7 | 0:5c195ab2f696 | 1001 | if ( argLen == 34 && arg[0] == '0' && arg[1] == 'x' ) |
gillwei7 | 0:5c195ab2f696 | 1002 | { |
gillwei7 | 0:5c195ab2f696 | 1003 | for ( i=0;i<8;i++) |
gillwei7 | 0:5c195ab2f696 | 1004 | { |
gillwei7 | 0:5c195ab2f696 | 1005 | buffer_uuid_vs[7-i] = cyntecArgToUint16( (arg + 2+4*i), 4); |
gillwei7 | 0:5c195ab2f696 | 1006 | if (i==1) |
gillwei7 | 0:5c195ab2f696 | 1007 | { |
gillwei7 | 0:5c195ab2f696 | 1008 | char_uuid.uuid = cyntecArgToUint16( (arg + 2+4*i), 4); |
gillwei7 | 0:5c195ab2f696 | 1009 | } |
gillwei7 | 0:5c195ab2f696 | 1010 | //#ifdef DELTA_DEBUG |
gillwei7 | 0:5c195ab2f696 | 1011 | // sprintf((char *)&debugMess[0],"%2X/",buffer_uuid_vs[7-i]); |
gillwei7 | 0:5c195ab2f696 | 1012 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 1013 | //#endif |
gillwei7 | 0:5c195ab2f696 | 1014 | } |
gillwei7 | 0:5c195ab2f696 | 1015 | memcpy(&char_uuid_vs,buffer_uuid_vs,16); |
gillwei7 | 0:5c195ab2f696 | 1016 | err_code = sd_ble_uuid_vs_add(&char_uuid_vs, &char_uuid.type); |
gillwei7 | 0:5c195ab2f696 | 1017 | } |
gillwei7 | 0:5c195ab2f696 | 1018 | //#ifdef DELTA_DEBUG |
gillwei7 | 0:5c195ab2f696 | 1019 | // sprintf((char *)&debugMess[0],"char_uuid_type:[%d]\r\n",char_uuid.type); |
gillwei7 | 0:5c195ab2f696 | 1020 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 1021 | //#endif |
gillwei7 | 0:5c195ab2f696 | 1022 | |
gillwei7 | 0:5c195ab2f696 | 1023 | |
gillwei7 | 0:5c195ab2f696 | 1024 | //#ifdef DELTA_DEBUG |
gillwei7 | 0:5c195ab2f696 | 1025 | // sprintf((char *)&debugMess[0],"vs_add_Error:%d\r\n",err_code); |
gillwei7 | 0:5c195ab2f696 | 1026 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 1027 | //#endif |
gillwei7 | 0:5c195ab2f696 | 1028 | |
gillwei7 | 0:5c195ab2f696 | 1029 | /* handle 3rd parameter - attribute mode */ |
gillwei7 | 0:5c195ab2f696 | 1030 | argLen = 0; |
gillwei7 | 0:5c195ab2f696 | 1031 | arg = cyntecGetCommandArgument(1,&argLen); |
gillwei7 | 0:5c195ab2f696 | 1032 | |
gillwei7 | 0:5c195ab2f696 | 1033 | for ( i = 0 ; i < argLen ; i++ ) |
gillwei7 | 0:5c195ab2f696 | 1034 | { |
gillwei7 | 0:5c195ab2f696 | 1035 | switch(arg[i]) { |
gillwei7 | 0:5c195ab2f696 | 1036 | case 'r': |
gillwei7 | 0:5c195ab2f696 | 1037 | attrMode |= (1 << CLI_CHAR_MODE_READ); |
gillwei7 | 0:5c195ab2f696 | 1038 | break; |
gillwei7 | 0:5c195ab2f696 | 1039 | case 'w': |
gillwei7 | 0:5c195ab2f696 | 1040 | attrMode |= (1 << CLI_CHAR_MODE_WRITE); |
gillwei7 | 0:5c195ab2f696 | 1041 | break; |
gillwei7 | 0:5c195ab2f696 | 1042 | case 'i': |
gillwei7 | 0:5c195ab2f696 | 1043 | attrMode |= (1 << CLI_CHAR_MODE_INDICATE); |
gillwei7 | 0:5c195ab2f696 | 1044 | break; |
gillwei7 | 0:5c195ab2f696 | 1045 | case 'n': |
gillwei7 | 0:5c195ab2f696 | 1046 | attrMode |= (1 << CLI_CHAR_MODE_NOTIFY); |
gillwei7 | 0:5c195ab2f696 | 1047 | break; |
gillwei7 | 0:5c195ab2f696 | 1048 | default: |
gillwei7 | 0:5c195ab2f696 | 1049 | break; |
gillwei7 | 0:5c195ab2f696 | 1050 | } |
gillwei7 | 0:5c195ab2f696 | 1051 | } |
gillwei7 | 0:5c195ab2f696 | 1052 | |
gillwei7 | 0:5c195ab2f696 | 1053 | /* handle 4th parameter - attribute value */ |
gillwei7 | 0:5c195ab2f696 | 1054 | argLen = 0; |
gillwei7 | 0:5c195ab2f696 | 1055 | arg = cyntecGetCommandArgument(2,&argLen); |
gillwei7 | 0:5c195ab2f696 | 1056 | |
gillwei7 | 0:5c195ab2f696 | 1057 | if (arg[0] != '0' || arg[1] != 'x' | argLen%2 != 0) { |
gillwei7 | 0:5c195ab2f696 | 1058 | cyntecPrintError(CYNTEC_CMD_ERR_ARGUMENT_SYNTAX_ERROR); |
gillwei7 | 0:5c195ab2f696 | 1059 | return; |
gillwei7 | 0:5c195ab2f696 | 1060 | } |
gillwei7 | 0:5c195ab2f696 | 1061 | else { |
gillwei7 | 0:5c195ab2f696 | 1062 | valueLengthBuffer = (argLen-2)/2; |
gillwei7 | 0:5c195ab2f696 | 1063 | for (i=0 ; i < (argLen-2)/2; i++) |
gillwei7 | 0:5c195ab2f696 | 1064 | { |
gillwei7 | 0:5c195ab2f696 | 1065 | attrValue[i] = cyntecArgToUint8(arg+2*(i+1), 2); |
gillwei7 | 0:5c195ab2f696 | 1066 | |
gillwei7 | 0:5c195ab2f696 | 1067 | } |
gillwei7 | 0:5c195ab2f696 | 1068 | //cyntecInsertCharUUID(service_uuid, char_uuid, attrMode, attrValue,valueLengthBuffer); |
gillwei7 | 0:5c195ab2f696 | 1069 | //cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 1070 | } |
gillwei7 | 0:5c195ab2f696 | 1071 | } |
gillwei7 | 0:5c195ab2f696 | 1072 | |
gillwei7 | 0:5c195ab2f696 | 1073 | |
gillwei7 | 0:5c195ab2f696 | 1074 | //debug |
gillwei7 | 0:5c195ab2f696 | 1075 | // sprintf((char *)&debugMess[0],"value:[%02X][%02X]", value[0],value[1]); |
gillwei7 | 0:5c195ab2f696 | 1076 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 1077 | |
gillwei7 | 0:5c195ab2f696 | 1078 | //write read permission |
gillwei7 | 0:5c195ab2f696 | 1079 | ble_gap_conn_sec_mode_t local_all_perm; |
gillwei7 | 0:5c195ab2f696 | 1080 | local_all_perm.lv = 1; |
gillwei7 | 0:5c195ab2f696 | 1081 | local_all_perm.sm = 1; |
gillwei7 | 0:5c195ab2f696 | 1082 | |
gillwei7 | 0:5c195ab2f696 | 1083 | memset(&cccd_md, 0, sizeof(cccd_md)); |
gillwei7 | 0:5c195ab2f696 | 1084 | BLE_GAP_CONN_SEC_MODE_SET_OPEN(&cccd_md.read_perm); |
gillwei7 | 0:5c195ab2f696 | 1085 | cccd_md.write_perm = local_all_perm; |
gillwei7 | 0:5c195ab2f696 | 1086 | cccd_md.vloc = BLE_GATTS_VLOC_STACK; |
gillwei7 | 0:5c195ab2f696 | 1087 | |
gillwei7 | 0:5c195ab2f696 | 1088 | memset(&char_md, 0, sizeof(char_md)); |
gillwei7 | 0:5c195ab2f696 | 1089 | |
gillwei7 | 0:5c195ab2f696 | 1090 | if ( attrMode & (1 << CLI_CHAR_MODE_READ)) |
gillwei7 | 0:5c195ab2f696 | 1091 | char_md.char_props.read = 1; |
gillwei7 | 0:5c195ab2f696 | 1092 | if (attrMode & (1 << CLI_CHAR_MODE_WRITE)) |
gillwei7 | 0:5c195ab2f696 | 1093 | char_md.char_props.write = 1; |
gillwei7 | 0:5c195ab2f696 | 1094 | if (attrMode & (1 << CLI_CHAR_MODE_NOTIFY)) |
gillwei7 | 0:5c195ab2f696 | 1095 | char_md.char_props.notify = 1; |
gillwei7 | 0:5c195ab2f696 | 1096 | if (attrMode & (1 << CLI_CHAR_MODE_INDICATE)) |
gillwei7 | 0:5c195ab2f696 | 1097 | char_md.char_props.indicate = 1; |
gillwei7 | 0:5c195ab2f696 | 1098 | |
gillwei7 | 0:5c195ab2f696 | 1099 | char_md.p_char_user_desc = NULL; |
gillwei7 | 0:5c195ab2f696 | 1100 | char_md.p_char_pf = NULL; |
gillwei7 | 0:5c195ab2f696 | 1101 | char_md.p_user_desc_md = NULL; |
gillwei7 | 0:5c195ab2f696 | 1102 | char_md.p_cccd_md = &cccd_md; |
gillwei7 | 0:5c195ab2f696 | 1103 | char_md.p_sccd_md = NULL; |
gillwei7 | 0:5c195ab2f696 | 1104 | |
gillwei7 | 0:5c195ab2f696 | 1105 | memset(&attr_md, 0, sizeof(attr_md)); |
gillwei7 | 0:5c195ab2f696 | 1106 | |
gillwei7 | 0:5c195ab2f696 | 1107 | attr_md.vloc = BLE_GATTS_VLOC_STACK; |
gillwei7 | 0:5c195ab2f696 | 1108 | attr_md.read_perm = local_all_perm; |
gillwei7 | 0:5c195ab2f696 | 1109 | attr_md.write_perm = local_all_perm; |
gillwei7 | 0:5c195ab2f696 | 1110 | attr_md.rd_auth = 0; |
gillwei7 | 0:5c195ab2f696 | 1111 | attr_md.wr_auth = 0; |
gillwei7 | 0:5c195ab2f696 | 1112 | attr_md.vlen = 0; |
gillwei7 | 0:5c195ab2f696 | 1113 | |
gillwei7 | 0:5c195ab2f696 | 1114 | memset(&attr_char_value, 0, sizeof(attr_char_value)); |
gillwei7 | 0:5c195ab2f696 | 1115 | |
gillwei7 | 0:5c195ab2f696 | 1116 | // init_value_len = MAX_VALUE_LENGTH; |
gillwei7 | 0:5c195ab2f696 | 1117 | |
gillwei7 | 0:5c195ab2f696 | 1118 | attr_char_value.p_uuid = &char_uuid; |
gillwei7 | 0:5c195ab2f696 | 1119 | attr_char_value.p_attr_md = &attr_md; |
gillwei7 | 0:5c195ab2f696 | 1120 | attr_char_value.init_len = MAX_VALUE_LENGTH; |
gillwei7 | 0:5c195ab2f696 | 1121 | attr_char_value.init_offs = 0; |
gillwei7 | 0:5c195ab2f696 | 1122 | attr_char_value.max_len = MAX_VALUE_LENGTH; |
gillwei7 | 0:5c195ab2f696 | 1123 | attr_char_value.p_value = attrValue; |
gillwei7 | 0:5c195ab2f696 | 1124 | //debug |
gillwei7 | 0:5c195ab2f696 | 1125 | // sprintf((char *)&debugMess[0],"value:[%s]", attr_char_value.p_value); |
gillwei7 | 0:5c195ab2f696 | 1126 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 1127 | ble_gatts_char_handles_t testHandle; |
gillwei7 | 0:5c195ab2f696 | 1128 | err_code = sd_ble_gatts_characteristic_add(bufferGattTest.service_handle, |
gillwei7 | 0:5c195ab2f696 | 1129 | &char_md, |
gillwei7 | 0:5c195ab2f696 | 1130 | &attr_char_value, |
gillwei7 | 0:5c195ab2f696 | 1131 | &testHandle); |
gillwei7 | 0:5c195ab2f696 | 1132 | //#ifdef DELTA_DEBUG |
gillwei7 | 0:5c195ab2f696 | 1133 | // sprintf((char *)&debugMess[0],"char_uuid:%4X\r\n",char_uuid.uuid); |
gillwei7 | 0:5c195ab2f696 | 1134 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 1135 | //#endif |
gillwei7 | 0:5c195ab2f696 | 1136 | if (err_code == NRF_SUCCESS) |
gillwei7 | 0:5c195ab2f696 | 1137 | { |
gillwei7 | 0:5c195ab2f696 | 1138 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 1139 | cyntecInsertCharUUID(char_uuid, testHandle.value_handle,valueLengthBuffer,attrMode); |
gillwei7 | 0:5c195ab2f696 | 1140 | // sprintf((char *)&debugMess[0],"char_count:%d\r\n",char_count); |
gillwei7 | 0:5c195ab2f696 | 1141 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 1142 | char_count++; |
gillwei7 | 0:5c195ab2f696 | 1143 | if (char_count>10) |
gillwei7 | 0:5c195ab2f696 | 1144 | char_count=0; |
gillwei7 | 0:5c195ab2f696 | 1145 | } |
gillwei7 | 0:5c195ab2f696 | 1146 | else if (err_code == NRF_ERROR_INVALID_STATE) |
gillwei7 | 0:5c195ab2f696 | 1147 | { |
gillwei7 | 0:5c195ab2f696 | 1148 | cyntecPrintError(CYNTEC_CMD_ERR_INVALID_STATE_TO_PERFORM_OPERATION); |
gillwei7 | 0:5c195ab2f696 | 1149 | return; |
gillwei7 | 0:5c195ab2f696 | 1150 | } |
gillwei7 | 0:5c195ab2f696 | 1151 | else |
gillwei7 | 0:5c195ab2f696 | 1152 | { |
gillwei7 | 0:5c195ab2f696 | 1153 | console.printf("ERROR;\r\n"); |
gillwei7 | 0:5c195ab2f696 | 1154 | } |
gillwei7 | 0:5c195ab2f696 | 1155 | |
gillwei7 | 0:5c195ab2f696 | 1156 | } |
gillwei7 | 0:5c195ab2f696 | 1157 | |
gillwei7 | 0:5c195ab2f696 | 1158 | static void cyntecInsertServiceUUID(ble_uuid_t service_UUID) |
gillwei7 | 0:5c195ab2f696 | 1159 | { |
gillwei7 | 0:5c195ab2f696 | 1160 | /* find if the service uuid is exist */ |
gillwei7 | 0:5c195ab2f696 | 1161 | bufferService[service_count].service_uuid.uuid = service_UUID.uuid; |
gillwei7 | 0:5c195ab2f696 | 1162 | bufferService[service_count].service_uuid.type = service_UUID.type; |
gillwei7 | 0:5c195ab2f696 | 1163 | return; |
gillwei7 | 0:5c195ab2f696 | 1164 | |
gillwei7 | 0:5c195ab2f696 | 1165 | } |
gillwei7 | 0:5c195ab2f696 | 1166 | |
gillwei7 | 0:5c195ab2f696 | 1167 | static void cynGattServiceCommand(void) |
gillwei7 | 0:5c195ab2f696 | 1168 | { |
gillwei7 | 0:5c195ab2f696 | 1169 | // uint16_t service_uuid; |
gillwei7 | 0:5c195ab2f696 | 1170 | // uint8_t attrValue[MAX_VALUE_LENGTH]; |
gillwei7 | 0:5c195ab2f696 | 1171 | // memset(&attrValue, 0, sizeof(attrValue)); |
gillwei7 | 0:5c195ab2f696 | 1172 | // uint8_t i; |
gillwei7 | 0:5c195ab2f696 | 1173 | // uint8_t valueBuffer; |
gillwei7 | 0:5c195ab2f696 | 1174 | extern uint8_t service_count; |
gillwei7 | 0:5c195ab2f696 | 1175 | |
gillwei7 | 0:5c195ab2f696 | 1176 | uint32_t err_code; |
gillwei7 | 0:5c195ab2f696 | 1177 | ble_uuid_t ble_uuid; |
gillwei7 | 0:5c195ab2f696 | 1178 | ble_uuid128_t ble_uuid128; |
gillwei7 | 0:5c195ab2f696 | 1179 | uint16_t buffer_uuid; |
gillwei7 | 0:5c195ab2f696 | 1180 | uint16_t buffer_uuid_vs[8]; |
gillwei7 | 0:5c195ab2f696 | 1181 | int i; |
gillwei7 | 0:5c195ab2f696 | 1182 | |
gillwei7 | 0:5c195ab2f696 | 1183 | if (cyntecGetCommandTokenCnt() != 3) |
gillwei7 | 0:5c195ab2f696 | 1184 | { |
gillwei7 | 0:5c195ab2f696 | 1185 | cyntecPrintError(CYNTEC_CMD_ERR_WRONG_NUMBER_OF_ARGUMENTS); |
gillwei7 | 0:5c195ab2f696 | 1186 | return; |
gillwei7 | 0:5c195ab2f696 | 1187 | } |
gillwei7 | 0:5c195ab2f696 | 1188 | else |
gillwei7 | 0:5c195ab2f696 | 1189 | { |
gillwei7 | 0:5c195ab2f696 | 1190 | /* handle first parameter - Service UUID */ |
gillwei7 | 0:5c195ab2f696 | 1191 | uint8_t argLen = 0; |
gillwei7 | 0:5c195ab2f696 | 1192 | uint8_t *arg = cyntecGetCommandArgument(0,&argLen); |
gillwei7 | 0:5c195ab2f696 | 1193 | |
gillwei7 | 0:5c195ab2f696 | 1194 | /* Service uuid is 16 bits */ |
gillwei7 | 0:5c195ab2f696 | 1195 | if ( argLen == 6 && arg[0] == '0' && arg[1] == 'x') |
gillwei7 | 0:5c195ab2f696 | 1196 | { |
gillwei7 | 0:5c195ab2f696 | 1197 | buffer_uuid = cyntecArgToUint16( (arg + 2), (argLen - 2)); |
gillwei7 | 0:5c195ab2f696 | 1198 | //ble_uuid.type = BLE_UUID_TYPE_BLE; //type assign in BLE_UUID_BLE_ASSIGN |
gillwei7 | 0:5c195ab2f696 | 1199 | BLE_UUID_BLE_ASSIGN(ble_uuid, buffer_uuid); |
gillwei7 | 0:5c195ab2f696 | 1200 | |
gillwei7 | 0:5c195ab2f696 | 1201 | err_code = sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY, &ble_uuid, &bufferGattTest.service_handle); |
gillwei7 | 0:5c195ab2f696 | 1202 | ble_uuid.type = BLE_UUID_TYPE_BLE; |
gillwei7 | 0:5c195ab2f696 | 1203 | |
gillwei7 | 0:5c195ab2f696 | 1204 | } |
gillwei7 | 0:5c195ab2f696 | 1205 | |
gillwei7 | 0:5c195ab2f696 | 1206 | /* Service uuid is 128 bits */ |
gillwei7 | 0:5c195ab2f696 | 1207 | if ( argLen == 34 && arg[0] == '0' && arg[1] == 'x' ) |
gillwei7 | 0:5c195ab2f696 | 1208 | { |
gillwei7 | 0:5c195ab2f696 | 1209 | // uint8_t uuid_type = custom_add_uuid_base(CFG_CUSTOM_UUID_BASE); |
gillwei7 | 0:5c195ab2f696 | 1210 | //ASSERT(uuid_type > 0, ERROR_NOT_FOUND); |
gillwei7 | 0:5c195ab2f696 | 1211 | for ( i=0;i<8;i++) |
gillwei7 | 0:5c195ab2f696 | 1212 | { |
gillwei7 | 0:5c195ab2f696 | 1213 | buffer_uuid_vs[7-i] = cyntecArgToUint16( (arg + 2+4*i), 4); |
gillwei7 | 0:5c195ab2f696 | 1214 | if (i==1) |
gillwei7 | 0:5c195ab2f696 | 1215 | { |
gillwei7 | 0:5c195ab2f696 | 1216 | ble_uuid.uuid = cyntecArgToUint16( (arg + 2+4*i), 4); |
gillwei7 | 0:5c195ab2f696 | 1217 | } |
gillwei7 | 0:5c195ab2f696 | 1218 | #ifdef DELTA_DEBUG |
gillwei7 | 0:5c195ab2f696 | 1219 | console.printf("%2X/",buffer_uuid_vs[7-i]); |
gillwei7 | 0:5c195ab2f696 | 1220 | #endif |
gillwei7 | 0:5c195ab2f696 | 1221 | } |
gillwei7 | 0:5c195ab2f696 | 1222 | memcpy(&ble_uuid128.uuid128,buffer_uuid_vs,16); |
gillwei7 | 0:5c195ab2f696 | 1223 | //#ifdef DELTA_DEBUG |
gillwei7 | 0:5c195ab2f696 | 1224 | // sprintf((char *)&debugMess[0],"%32X\r\n",ble_uuid128.uuid128); |
gillwei7 | 0:5c195ab2f696 | 1225 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 1226 | //#endif |
gillwei7 | 0:5c195ab2f696 | 1227 | err_code = sd_ble_uuid_vs_add(&ble_uuid128, &ble_uuid.type); |
gillwei7 | 0:5c195ab2f696 | 1228 | //#ifdef DELTA_DEBUG |
gillwei7 | 0:5c195ab2f696 | 1229 | // sprintf((char *)&debugMess[0],"service_uuid_type:%d\r\n",ble_uuid.type); |
gillwei7 | 0:5c195ab2f696 | 1230 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 1231 | //#endif |
gillwei7 | 0:5c195ab2f696 | 1232 | |
gillwei7 | 0:5c195ab2f696 | 1233 | err_code = sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY, &ble_uuid, &bufferGattTest.service_handle); |
gillwei7 | 0:5c195ab2f696 | 1234 | |
gillwei7 | 0:5c195ab2f696 | 1235 | ble_uuid.type = BLE_UUID_TYPE_VENDOR_BEGIN; |
gillwei7 | 0:5c195ab2f696 | 1236 | |
gillwei7 | 0:5c195ab2f696 | 1237 | } |
gillwei7 | 0:5c195ab2f696 | 1238 | if (err_code == NRF_SUCCESS) |
gillwei7 | 0:5c195ab2f696 | 1239 | { |
gillwei7 | 0:5c195ab2f696 | 1240 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 1241 | cyntecInsertServiceUUID(ble_uuid); |
gillwei7 | 0:5c195ab2f696 | 1242 | service_count++; |
gillwei7 | 0:5c195ab2f696 | 1243 | char_count = 0; |
gillwei7 | 0:5c195ab2f696 | 1244 | // sprintf((char *)&debugMess[0],"service_count:%d\r\n",service_count); |
gillwei7 | 0:5c195ab2f696 | 1245 | // console.printf(debugMess); |
gillwei7 | 0:5c195ab2f696 | 1246 | } |
gillwei7 | 0:5c195ab2f696 | 1247 | else |
gillwei7 | 0:5c195ab2f696 | 1248 | { |
gillwei7 | 0:5c195ab2f696 | 1249 | console.printf("ERROR;\r\n"); |
gillwei7 | 0:5c195ab2f696 | 1250 | |
gillwei7 | 0:5c195ab2f696 | 1251 | } |
gillwei7 | 0:5c195ab2f696 | 1252 | |
gillwei7 | 0:5c195ab2f696 | 1253 | } |
gillwei7 | 0:5c195ab2f696 | 1254 | } |
gillwei7 | 0:5c195ab2f696 | 1255 | |
gillwei7 | 0:5c195ab2f696 | 1256 | static void cynBLEInitCommand(void) |
gillwei7 | 0:5c195ab2f696 | 1257 | { |
gillwei7 | 0:5c195ab2f696 | 1258 | const char DEVICE_NAME[] = "DELTA_CLI"; |
gillwei7 | 0:5c195ab2f696 | 1259 | |
gillwei7 | 0:5c195ab2f696 | 1260 | deltaBLE.init(); |
gillwei7 | 0:5c195ab2f696 | 1261 | deltaBLE.onDisconnection(disconnectionCallback); |
gillwei7 | 0:5c195ab2f696 | 1262 | deltaBLE.onConnection(onConnectionCallback); |
gillwei7 | 0:5c195ab2f696 | 1263 | deltaBLE.onTimeout(onTimeoutCallback); |
gillwei7 | 0:5c195ab2f696 | 1264 | |
gillwei7 | 0:5c195ab2f696 | 1265 | /* Setup advertising. */ |
gillwei7 | 0:5c195ab2f696 | 1266 | deltaBLE.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); |
gillwei7 | 0:5c195ab2f696 | 1267 | deltaBLE.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); |
gillwei7 | 0:5c195ab2f696 | 1268 | deltaBLE.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
gillwei7 | 0:5c195ab2f696 | 1269 | deltaBLE.setAdvertisingInterval(1000); |
gillwei7 | 0:5c195ab2f696 | 1270 | |
gillwei7 | 0:5c195ab2f696 | 1271 | cyntecPrintOk(); |
gillwei7 | 0:5c195ab2f696 | 1272 | } |
gillwei7 | 0:5c195ab2f696 | 1273 | |
gillwei7 | 0:5c195ab2f696 | 1274 | CyntecCommandEntry bleCommandSets[] = { |
gillwei7 | 0:5c195ab2f696 | 1275 | {"init", cynBLEInitCommand, NULL, "Init BLE stack, Usage: cynb init"}, |
gillwei7 | 0:5c195ab2f696 | 1276 | {"gpio", cynBLEGPIOCommand, NULL, "Config gpio, Usage: cynb gpio <GPIO NO> <set|clear>"}, |
gillwei7 | 0:5c195ab2f696 | 1277 | {"sleep", cynBLESystemOffCommand, NULL, "System off mode, Usage: cynb sleep <GPIO NO>"}, |
gillwei7 | 0:5c195ab2f696 | 1278 | {"disconn", cynBLEDisconnectCommand, NULL, "Disconnection, Usage: cynb disconn"}, |
gillwei7 | 0:5c195ab2f696 | 1279 | {"reset", cynResetCommand, NULL, "Soft reset, Usage: cynb reset"}, |
gillwei7 | 0:5c195ab2f696 | 1280 | {"info", cynBLEInfoCommand, NULL, "Module information, Usage: cynb info"}, |
gillwei7 | 0:5c195ab2f696 | 1281 | #ifdef S110_BLE_PERIPHERAL |
gillwei7 | 0:5c195ab2f696 | 1282 | {"gattChar", cynGattCharCommand, NULL, "Set SIG defined characteristic or Create your own"}, |
gillwei7 | 0:5c195ab2f696 | 1283 | {"gattService", cynGattServiceCommand, NULL, "Set SIG defined service or Create your own"}, |
gillwei7 | 0:5c195ab2f696 | 1284 | {"name", cynBLENameCommand, NULL, "Set/Get friendly for BLE module"}, |
gillwei7 | 0:5c195ab2f696 | 1285 | {"advStart", cynAdvertiseStartCommand, NULL, "Start broadcast advertise packet"}, |
gillwei7 | 0:5c195ab2f696 | 1286 | {"advStop", cynAdvertiseStopCommand, NULL, "Stop broadcast advertise packet"}, |
gillwei7 | 0:5c195ab2f696 | 1287 | #endif |
gillwei7 | 0:5c195ab2f696 | 1288 | #ifdef S120_BLE_CENTRAL |
gillwei7 | 0:5c195ab2f696 | 1289 | {"scan", cynBLEScanCommand, NULL, "Start/Stop(1/0) to scan BLE device"}, |
gillwei7 | 0:5c195ab2f696 | 1290 | {"connect", cynBLEConnectCommand, NULL, "Connect to specific BLE device by Device Name"}, |
gillwei7 | 0:5c195ab2f696 | 1291 | #endif |
gillwei7 | 0:5c195ab2f696 | 1292 | {"txPow", cynBLESetTxPowerCommand, NULL, "Set BLE tx power"}, |
gillwei7 | 0:5c195ab2f696 | 1293 | {"bleAddr", cynBLEAddressCommand, NULL, "Set/Get Bluetooth address"}, |
gillwei7 | 0:5c195ab2f696 | 1294 | {"update", cynBLEUpdateUUIDCommand, NULL, "Update value of specific characteristics"}, |
gillwei7 | 0:5c195ab2f696 | 1295 | {"readData", cynBLEReadDataCommand, NULL, "Read value of specific characteristics"}, |
gillwei7 | 0:5c195ab2f696 | 1296 | {NULL, NULL, NULL, NULL}, |
gillwei7 | 0:5c195ab2f696 | 1297 | }; |