Compare commits

...

22 Commits

Author SHA1 Message Date
weiting2 0db0572e7e separate c file and header file 2021-06-21 16:14:25 +08:00
weiting2 a0c7fac713 attempt to improve MEM_REQ 2021-06-21 14:58:17 +08:00
alan576 aae3a9bdb2 attempt to improve MEM_REQ 2021-06-18 16:05:37 +08:00
Roy 9aba294e78 [update] fix timestamp big jump (ram could switch when notify finish) 2021-06-10 17:23:26 +08:00
Roy d9de0a8021 [update] fix timestamp big jump (ram could switch when notify finish) 2021-06-10 11:22:37 +08:00
Roy 94ff9ef4f2 [update] MEM_SWITCH_THRESHOLD 2K modify to 7K bytes 2021-06-04 18:05:27 +08:00
Roy 77a9fdb8c9 [update] lost data fixed 2021-06-04 15:51:58 +08:00
Roy 776e5544b3 don't care 2021-06-04 15:38:31 +08:00
Roy 1012c76e8a use UART_read callback 2021-05-23 14:07:59 +08:00
Roy c9e7f63579 use UART_read callback 2021-05-23 14:02:35 +08:00
Roy 8731dc1437 irq pin is unavailable 2021-05-13 09:05:28 +08:00
Roy 650580657d irq pin is unavailable 2021-05-12 18:13:14 +08:00
Roy e9661c4fde uart is ok 2021-05-12 13:48:20 +08:00
weiting2 663efc35ab trace uart routine.h 2021-05-12 11:36:44 +08:00
weiting2 c8ef957ba8 update three stage stiCali data 2021-05-12 11:35:20 +08:00
weiting2 c93f9e8f1b improve scan 2021-05-11 17:46:14 +08:00
Roy 0783981abd test pin 2021-05-11 09:31:55 +08:00
Roy edf7afa30f after take away irq(), scan & conneect & write is right 2021-05-10 11:46:26 +08:00
Roy 20614206db after take away irq(), scan & conneect & write is right 2021-05-06 16:47:15 +08:00
Roy 1eb77672bd after take away irq(), scan & conneect & write is right 2021-05-03 17:41:12 +08:00
Roy 86fdd30adb uart_en debug(not ok) 2021-04-29 19:09:20 +08:00
Roy 87930d1328 central debug 2021-04-29 12:08:56 +08:00
17 changed files with 667 additions and 732 deletions
+13
View File
@@ -4,6 +4,19 @@
xdctools_*/
ccsv8/
simplelink/ble_sdk_2_02_02_25/examples/cc2650em/simple_peripheral/ccs/app/.config/
simplelink/ble_sdk_2_02_02_25/examples/cc2650em/simple_peripheral/ccs/app/.ccsproject
simplelink/ble_sdk_2_02_02_25/examples/cc2650em/simple_peripheral/ccs/app/.cproject
simplelink/ble_sdk_2_02_02_25/examples/cc2650em/simple_central/ccs/app/.launches/
simplelink/ble_sdk_2_02_02_25/examples/cc2650em/simple_central/ccs/app/.settings/
simplelink/ble_sdk_2_02_02_25/examples/cc2650em/simple_central/ccs/config/lib_linker.cmd
simplelink/ble_sdk_2_02_02_25/examples/cc2650em/simple_central/ccs/config/src/
simplelink/ble_sdk_2_02_02_25/examples/cc2650em/simple_central/ccs/stack/.launches/
simplelink/ble_sdk_2_02_02_25/examples/cc2650em/simple_central/ccs/stack/.settings/
simplelink/ble_sdk_2_02_02_25/examples/cc2650em/simple_central/ccs/stack/targetConfigs/
.vscode/
ccs/
# CSS build files
FlashROM/
-7
View File
@@ -1,7 +0,0 @@
<component name="CopyrightManager">
<copyright>
<option name="keyword" value="Copyright .*" />
<option name="notice" value="Copyright (c) &amp;#36;today.year. BioPro. Scientific." />
<option name="myName" value="BioProSci" />
</copyright>
</component>
-7
View File
@@ -1,7 +0,0 @@
<component name="CopyrightManager">
<settings default="BioProSci">
<module2copyright>
<element module="SimplePeripheral" copyright="BioProSci" />
</module2copyright>
</settings>
</component>
-3
View File
@@ -1,3 +0,0 @@
<component name="DependencyValidationManager">
<scope name="HostTest" pattern="file[BioProCC2650]:simplelink/ble_sdk_2_02_02_25/src/examples/host_test/cc26xx/app/master//*" />
</component>
-3
View File
@@ -1,3 +0,0 @@
<component name="DependencyValidationManager">
<scope name="SimplePeripheral" pattern="file[BioProCC2650]:simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage//*" />
</component>
@@ -9,6 +9,6 @@
<linkerCommandFile value="cc26x0f128.cmd"/>
<rts value="libc.a"/>
<createSlaveProjects value=""/>
<connection value="common/targetdb/connections/TIXDS110_Connection.xml"/>
<isTargetManual value="false"/>
<connection value="common/targetdb/connections/TIXDS100v3_Dot7_Connection.xml"/>
<isTargetManual value="true"/>
</projectOptions>
@@ -18,7 +18,7 @@
<configuration artifactExtension="out" artifactName="${ProjName}" buildProperties="" cleanCommand="${CG_CLEAN_CMD}" description="" errorParsers="org.eclipse.rtsc.xdctools.parsers.ErrorParser;com.ti.rtsc.XDCtools.parsers.ErrorParser;com.ti.ccstudio.errorparser.CoffErrorParser;com.ti.ccstudio.errorparser.LinkErrorParser;com.ti.ccstudio.errorparser.AsmErrorParser;org.eclipse.cdt.core.GmakeErrorParser" id="com.ti.ccstudio.buildDefinitions.TMS470.Default.1291753115" name="FlashROM" parent="com.ti.ccstudio.buildDefinitions.TMS470.Default" postbuildStep="${CG_TOOL_HEX} -order MS --memwidth=8 --romwidth=8 --intel -o ${ProjName}.hex ${ProjName}.out" prebuildStep="">
<folderInfo id="com.ti.ccstudio.buildDefinitions.TMS470.Default.1291753115." name="/" resourcePath="">
<toolChain id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exe.DebugToolchain.576520359" name="TI Build Tools" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exe.DebugToolchain" targetTool="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exe.linkerDebug.436431825">
<option id="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS.633535552" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS" valueType="stringList">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS.633535552" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS" valueType="stringList">
<listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=Cortex M.CC2650F128"/>
<listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=little"/>
<listOptionValue builtIn="false" value="OUTPUT_FORMAT=ELF"/>
@@ -26,24 +26,25 @@
<listOptionValue builtIn="false" value="XDC_VERSION=3.32.2.25_core"/>
<listOptionValue builtIn="false" value="INACTIVE_REPOS="/>
<listOptionValue builtIn="false" value="EXPANDED_REPOS="/>
<listOptionValue builtIn="false" value="RTSC_PRODUCTS=com.ti.rtsc.TIRTOSCC13XX_CC26XX:2.21.01.08;"/>
<listOptionValue builtIn="false" value="LINKER_COMMAND_FILE=cc26x0f128.cmd"/>
<listOptionValue builtIn="false" value="OUTPUT_TYPE=rtscApplication:executable"/>
<listOptionValue builtIn="false" value="CCS_MBS_VERSION=5.5.0"/>
<listOptionValue builtIn="false" value="LINK_ORDER=TOOLS/ccs_linker_defines.cmd;TOOLS/cc26xx_app.cmd;"/>
<listOptionValue builtIn="false" value="RTSC_MBS_VERSION=2.2.0"/>
<listOptionValue builtIn="false" value="PRODUCTS=com.ti.rtsc.TIRTOSCC13XX_CC26XX:2.21.1.08;"/>
<listOptionValue builtIn="false" value="PRODUCT_MACRO_IMPORTS={}"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION.1880967367" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="18.1.3.LTS" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION.1880967367" name="Compiler version" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="18.1.3.LTS" valueType="string"/>
<targetPlatform id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exe.targetPlatformDebug.41559233" name="Platform" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exe.targetPlatformDebug"/>
<builder buildPath="${BuildDirectory}" id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exe.builderDebug.1846214930" name="GNU Make.FlashROM" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exe.builderDebug"/>
<builder buildPath="${BuildDirectory}" id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exe.builderDebug.1846214930" keepEnvironmentInBuildfile="false" name="GNU Make" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exe.builderDebug"/>
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exe.compilerDebug.1893671440" name="ARM Compiler" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exe.compilerDebug">
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.SILICON_VERSION.1085621098" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.SILICON_VERSION" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.SILICON_VERSION.7M3" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.CODE_STATE.1977755763" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.CODE_STATE" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.CODE_STATE.16" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.ABI.1142049032" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.ABI" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.ABI.eabi" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.LITTLE_ENDIAN.22245829" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.LITTLE_ENDIAN" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.OPT_LEVEL.158868909" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.OPT_LEVEL" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.OPT_LEVEL.4" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.OPT_FOR_SPEED.1782412253" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.OPT_FOR_SPEED" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.OPT_FOR_SPEED.0" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.INCLUDE_PATH.1146753870" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.INCLUDE_PATH" valueType="includePath">
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.SILICON_VERSION.1085621098" name="Target processor version (--silicon_version, -mv)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.SILICON_VERSION" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.SILICON_VERSION.7M3" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.CODE_STATE.1977755763" name="Designate code state, 16-bit (thumb) or 32-bit (--code_state)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.CODE_STATE" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.CODE_STATE.16" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.ABI.1142049032" name="Application binary interface. (--abi)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.ABI" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.ABI.eabi" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.LITTLE_ENDIAN.22245829" name="Little endian code [See 'General' page to edit] (--little_endian, -me)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.LITTLE_ENDIAN" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.OPT_LEVEL.158868909" name="Optimization level (--opt_level, -O)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.OPT_LEVEL" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.OPT_LEVEL.4" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.OPT_FOR_SPEED.1782412253" name="Speed vs. size trade-offs (--opt_for_speed, -mf)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.OPT_FOR_SPEED" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.OPT_FOR_SPEED.0" valueType="enumerated"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.INCLUDE_PATH.1146753870" name="Add dir to #include search path (--include_path, -I)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.INCLUDE_PATH" valueType="includePath">
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/include"/>
<listOptionValue builtIn="false" value="${SRC_EX}/examples/simple_central/cc26xx/app"/>
<listOptionValue builtIn="false" value="${SRC_EX}/inc"/>
@@ -66,7 +67,7 @@
<listOptionValue builtIn="false" value="${SRC_BLE_CORE}/rom"/>
<listOptionValue builtIn="false" value="${CC26XXWARE}"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DEFINE.667496043" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DEFINE" valueType="definedSymbols">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DEFINE.667496043" name="Pre-define NAME (--define, -D)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DEFINE" valueType="definedSymbols">
<listOptionValue builtIn="false" value="BOARD_DISPLAY_EXCLUDE_UART"/>
<listOptionValue builtIn="false" value="MODA_MEMORY_BOARD"/>
<listOptionValue builtIn="false" value="BOOSTXL_CC2650MA"/>
@@ -82,17 +83,17 @@
<listOptionValue builtIn="false" value="xdc_runtime_Assert_DISABLE_ALL"/>
<listOptionValue builtIn="false" value="xdc_runtime_Log_DISABLE_ALL"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.C_DIALECT.736801588" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.C_DIALECT" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.C_DIALECT.C99" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DIAG_SUPPRESS.1123228537" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DIAG_SUPPRESS" valueType="stringList">
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.C_DIALECT.736801588" name="C Dialect" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.C_DIALECT" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.C_DIALECT.C99" valueType="enumerated"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DIAG_SUPPRESS.1123228537" name="Suppress diagnostic &lt;id&gt; (--diag_suppress, -pds)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DIAG_SUPPRESS" valueType="stringList">
<listOptionValue builtIn="false" value="48"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DIAG_WARNING.1665010090" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DIAG_WARNING" valueType="stringList">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DIAG_WARNING.1665010090" name="Treat diagnostic &lt;id&gt; as warning (--diag_warning, -pdsw)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DIAG_WARNING" valueType="stringList">
<listOptionValue builtIn="false" value="225"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DIAG_WRAP.203653389" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DIAG_WRAP.off" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DISPLAY_ERROR_NUMBER.630994301" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.GEN_FUNC_SUBSECTIONS.1257520161" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.GEN_FUNC_SUBSECTIONS" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.GEN_FUNC_SUBSECTIONS.on" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.CMD_FILE.1421890218" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.CMD_FILE" valueType="stringList">
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DIAG_WRAP.203653389" name="Wrap diagnostic messages (--diag_wrap)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DIAG_WRAP.off" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DISPLAY_ERROR_NUMBER.630994301" name="Emit diagnostic identifier numbers (--display_error_number, -pden)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.GEN_FUNC_SUBSECTIONS.1257520161" name="Place each function in a separate subsection (--gen_func_subsections, -ms)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.GEN_FUNC_SUBSECTIONS" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.GEN_FUNC_SUBSECTIONS.on" valueType="enumerated"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.CMD_FILE.1421890218" name="Read options from specified file (--cmd_file, -@)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compilerID.CMD_FILE" valueType="stringList">
<listOptionValue builtIn="false" value="${SRC_EX}/config/build_components.opt"/>
<listOptionValue builtIn="false" value="${ORG_PROJ_DIR}/build_config.opt"/>
<listOptionValue builtIn="false" value="${ORG_PROJ_DIR}/../../ccs/config/ccs_compiler_defines.bcfg"/>
@@ -103,48 +104,49 @@
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compiler.inputType__ASM2_SRCS.171398647" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.compiler.inputType__ASM2_SRCS"/>
</tool>
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exe.linkerDebug.436431825" name="ARM Linker" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exe.linkerDebug">
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.STACK_SIZE.699911295" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.STACK_SIZE" value="256" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.HEAP_SIZE.2112847717" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.HEAP_SIZE" value="0" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.MAP_FILE.1409849586" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.MAP_FILE" value="&quot;${ProjName}.map&quot;" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.OUTPUT_FILE.2140048531" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.OUTPUT_FILE" value="${ProjName}.out" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.LIBRARY.367490210" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.LIBRARY" valueType="libs">
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.STACK_SIZE.699911295" name="Set C system stack size (--stack_size, -stack)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.STACK_SIZE" value="256" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.HEAP_SIZE.2112847717" name="Heap size for C/C++ dynamic memory allocation (--heap_size, -heap)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.HEAP_SIZE" value="0" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.MAP_FILE.1409849586" name="Link information (map) listed into &lt;file&gt; (--map_file, -m)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.MAP_FILE" value="&quot;${ProjName}.map&quot;" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.OUTPUT_FILE.2140048531" name="Specify output file name (--output_file, -o)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.OUTPUT_FILE" value="${ProjName}.out" valueType="string"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.LIBRARY.367490210" name="Include library file or command file as input (--library, -l)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.LIBRARY" valueType="libs">
<listOptionValue builtIn="false" value="libc.a"/>
<listOptionValue builtIn="false" value="${CC26XXWARE}/driverlib/bin/ccs/driverlib.lib"/>
<listOptionValue builtIn="false" value="${ROM}/common_rom_releases/03282014/common_rom.symbols"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.SEARCH_PATH.1780759134" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.SEARCH_PATH" valueType="libPaths">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.SEARCH_PATH.1780759134" name="Add &lt;dir&gt; to library search path (--search_path, -i)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.SEARCH_PATH" valueType="libPaths">
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/lib"/>
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/include"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.DIAG_SUPPRESS.1979731574" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.DIAG_SUPPRESS" valueType="stringList">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.DIAG_SUPPRESS.1979731574" name="Suppress diagnostic &lt;id&gt; (--diag_suppress)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.DIAG_SUPPRESS" valueType="stringList">
<listOptionValue builtIn="false" value="10247-D"/>
<listOptionValue builtIn="false" value="16002-D"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.DIAG_WRAP.354734275" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.DIAG_WRAP.off" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.DISPLAY_ERROR_NUMBER.247118236" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.XML_LINK_INFO.240019697" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.XML_LINK_INFO" value="&quot;${ProjName}_linkInfo.xml&quot;" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.COMPRESS_DWARF.2041629903" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.COMPRESS_DWARF" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.COMPRESS_DWARF.on" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.UNUSED_SECTION_ELIMINATION.2063612992" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.UNUSED_SECTION_ELIMINATION" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.UNUSED_SECTION_ELIMINATION.on" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.DIAG_WRAP.354734275" name="Wrap diagnostic messages (--diag_wrap)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.DIAG_WRAP" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.DIAG_WRAP.off" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.DISPLAY_ERROR_NUMBER.247118236" name="Emit diagnostic identifier numbers (--display_error_number)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.XML_LINK_INFO.240019697" name="Detailed link information data-base into &lt;file&gt; (--xml_link_info, -xml_link_info)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.XML_LINK_INFO" value="&quot;${ProjName}_linkInfo.xml&quot;" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.COMPRESS_DWARF.2041629903" name="Aggressively reduce size of the DWARF information (--compress_dwarf)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.COMPRESS_DWARF" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.COMPRESS_DWARF.on" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.UNUSED_SECTION_ELIMINATION.2063612992" name="Eliminate sections not needed in the executable (--unused_section_elimination)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.UNUSED_SECTION_ELIMINATION" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.linkerID.UNUSED_SECTION_ELIMINATION.on" valueType="enumerated"/>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exeLinker.inputType__CMD_SRCS.880448580" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exeLinker.inputType__CMD_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exeLinker.inputType__CMD2_SRCS.411314174" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exeLinker.inputType__CMD2_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exeLinker.inputType__GEN_CMDS.487223306" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.exeLinker.inputType__GEN_CMDS"/>
</tool>
<tool id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex.1252521545" name="ARM Hex Utility" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex">
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex.ROMWIDTH.1844703656" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex.ROMWIDTH" value="8" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex.MEMWIDTH.659519706" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex.MEMWIDTH" value="8" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex.OUTPUT_FORMAT.1118587417" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex.OUTPUT_FORMAT" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex.OUTPUT_FORMAT.INTEL" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex.ROMWIDTH.1844703656" name="Specify rom width (--romwidth, -romwidth=width)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex.ROMWIDTH" value="8" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex.MEMWIDTH.659519706" name="Specify memory width (--memwidth, -memwidth=width)" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex.MEMWIDTH" value="8" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex.OUTPUT_FORMAT.1118587417" name="Output format" superClass="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex.OUTPUT_FORMAT" value="com.ti.ccstudio.buildDefinitions.TMS470_18.1.hex.OUTPUT_FORMAT.INTEL" valueType="enumerated"/>
</tool>
<tool id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.290281007" name="XDCtools" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool">
<option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.XDC_PATH.1450848120" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.XDC_PATH" valueType="stringList">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.XDC_PATH.1450848120" name="XDCpath package repositories (--xdcpath)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.XDC_PATH" valueType="stringList">
<listOptionValue builtIn="false" value="${COM_TI_RTSC_TIRTOSCC13XX_CC26XX_REPOS}"/>
<listOptionValue builtIn="false" value="${TARGET_CONTENT_BASE}"/>
<listOptionValue builtIn="false" value="C:\ti\ccs\ccs_base"/>
</option>
<option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.TARGET.653491273" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.TARGET" value="ti.targets.arm.elf.M3" valueType="string"/>
<option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM.870080666" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM" value="ti.platforms.simplelink:CC2650F128" valueType="string"/>
<option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM_RAW.1631957435" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM_RAW" value="ti.platforms.simplelink:CC2650F128" valueType="string"/>
<option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.BUILD_PROFILE.295250289" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.BUILD_PROFILE" value="release" valueType="string"/>
<option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.CODEGEN_TOOL_DIR.1337126905" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.CODEGEN_TOOL_DIR" value="${CG_TOOL_ROOT}" valueType="string"/>
<option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.COMPILE_OPTIONS.434618420" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.COMPILE_OPTIONS" value="&quot;${COMPILER_FLAGS}&quot;" valueType="string"/>
<option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.TARGET.653491273" name="Target (-t)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.TARGET" value="ti.targets.arm.elf.M3" valueType="string"/>
<option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM.870080666" name="Platform (-p)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM" value="ti.platforms.simplelink:CC2650F128" valueType="string"/>
<option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM_RAW.1631957435" name="Platform (-p)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.PLATFORM_RAW" value="ti.platforms.simplelink:CC2650F128" valueType="string"/>
<option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.BUILD_PROFILE.295250289" name="Build-profile (-r)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.BUILD_PROFILE" value="release" valueType="string"/>
<option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.CODEGEN_TOOL_DIR.1337126905" name="Compiler tools directory (-c)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.CODEGEN_TOOL_DIR" value="${CG_TOOL_ROOT}" valueType="string"/>
<option id="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.COMPILE_OPTIONS.434618420" name="Additional compiler options (--compileOptions)" superClass="com.ti.rtsc.buildDefinitions.XDC_3.16.tool.COMPILE_OPTIONS" value="&quot;${COMPILER_FLAGS}&quot;" valueType="string"/>
</tool>
</toolChain>
</folderInfo>
@@ -127,8 +127,29 @@ PIN_Config keyPinsCfg[] =
PIN_TERMINATE
};
extern uint16_t EventMask;
extern void ext_call_sem();
/** event */
#define EVT_ALL 0xFFFF
#define EVT_MEM_LED 0x0001 /**< set led event */
#define EVT_MEM_LED_OFF 0x0002
#define EVT_MEM_DECODE_INS 0x0004
#define EVT_PIN_REQST 0x0008
#define EVT_MEM_RETURN_DATA 0x0010
#define EVT_MEM_CONN_TIMEOUT 0x0020
#define EVT_MEM_NOTIFY_HANDLE 0x0040
#define EVT_MEM_UART_ROUTINE 0x0080
/**
* fire a event with [flag].
*/
#define flag_notify(flag) \
do { \
uint8 __key = Hwi_disable(); \
EventMask |= (uint16_t)(flag); \
Hwi_restore(__key); \
ext_call_sem(); \
} while (0)
/*********************************************************************
* PUBLIC FUNCTIONS
@@ -149,7 +170,7 @@ void Board_initKeys(keysPressedCB_t appKeyCB)
PIN_registerIntCb(hKeyPins, Board_keyCallback);
#if defined (BOOSTXL_CC2650MA)
PIN_setConfig(hKeyPins, PIN_BM_IRQ, PIN_MEM_INS | PIN_IRQ_NEGEDGE);
// PIN_setConfig(hKeyPins, PIN_BM_IRQ, PIN_MEM_INS | PIN_IRQ_NEGEDGE);
PIN_setConfig(hKeyPins, PIN_BM_IRQ, PIN_MEM_REQ | PIN_IRQ_NEGEDGE);
#elif defined (CC2650_LAUNCHXL) || defined (CC1350_LAUNCHXL)
PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_BTN1 | PIN_IRQ_NEGEDGE);
@@ -185,21 +206,19 @@ static void Board_keyCallback(PIN_Handle hPin, PIN_Id pinId)
// PIN_setOutputValue(hKeyPins, PIN_MEM_TEST, test_pin_state);
// test_pin_state = ~test_pin_state;
#if defined (BOOSTXL_CC2650MA)
if ( PIN_getInputValue(PIN_MEM_INS) == 0 &&
!procedureInProgress)
{
// if(KEY_INSTEAD_UART == 1)
// {
// keysPressed |= KEY_RIGHT;
// }
// else{
keysPressed |= KEY_UART_EN;
// }
}
else if ( PIN_getInputValue(PIN_MEM_REQ) == 0 &&
extern uint8 ram_sw;
extern uint8 notify_handle_done;
extern void master_switch_memory();
if ( PIN_getInputValue(PIN_MEM_REQ) == 0 &&
!procedureInProgress)
{
keysPressed |= KEY_REQ;
// keysPressed |= KEY_REQ;
flag_notify(EVT_PIN_REQST);
// if (ram_sw && notify_handle_done) master_switch_memory();
// else ram_sw = true;
}
#elif defined (CC2650_LAUNCHXL) || defined (CC1350_LAUNCHXL)
@@ -0,0 +1,281 @@
#include "mem_board_central.h"
#include "mem_uart.h"
#include "mem_central_spi.h"
#include "mem_central_handle_notify.h"
#include "mem_event.h"
#include "util.h"
#define BLE_CDR_SAMLL_SIZE 10
#define BLE_CHAR2_HANDLE 0x0021 // read CIS return data
#define BLE_CHAR3_HANDLE 0x0024 // send instruction
#define BLE_CHAR4_CONFIG_HANDLE 0x0028 // notify enable: 0100=enable; 0000=disable
#define RET_INFO_BUF_SIZE 52
#define CIS_BUFF_PREFIX 3
#define CIS_BUFF_SUFFIX 2
static uint16_t CIS_length = 10;
static char CIS_data[50];
static void mem_central_event();
static void mem_connect_device(uint8_t addrType, uint8_t *peerAddr);
static void mem_send_ins(uint16_t hadnle, uint8_t *value);
static void mem_read_data_and_return();
static void mem_central_get_cis(uint8_t handle);
static void mem_connection_timeout();
// Application states
typedef enum
{
BLE_STATE_IDLE,
BLE_STATE_BROWSING,
BLE_STATE_CONNECTING,
BLE_STATE_CONNECTED,
BLE_STATE_DISCOVERED,
BLE_STATE_DISCONNECTING
} bleState_t;
extern bleState_t state;
void MemBoard_init(void){
mem_UART_init();
master_spi_open();
central_mem_init();
central_reset();
flag_enable(EVT_MEM_UART_ROUTINE);
}
/**
* system event handle. It go through [EVENT_TABLE] and invoke event callback
* if event_mask bits set.
*/
void mem_event_handle() {
for (EventTableEntry *entry = EVENT_TABLE; EventMask && entry->event_mask; entry++) {
if (entry->event_callback && flag_mask(entry->event_mask)) {
entry->event_callback();
}
}
}
static void mem_central_event() {
if(flag_mask(EVT_MEM_NOTIFY_HANDLE)){
flag_disable(EVT_MEM_NOTIFY_HANDLE);
notify_handle_done = false;
central_handle_notify();
}
if (flag_mask(EVT_PIN_REQST)){
flag_disable(EVT_PIN_REQST);
// spi idle
if (notify_handle_done){
master_switch_memory();
}
// spi busy
else{
ram_sw = true;
}
}
if(flag_mask(EVT_MEM_UART_ROUTINE)){
flag_disable(EVT_MEM_UART_ROUTINE);
mem_uart_routine();
}
if(flag_mask(EVT_MEM_INS_SCAN)){
flag_disable(EVT_MEM_INS_SCAN);
SimpleBLECentral_discoverDevices();
}
if(flag_mask(EVT_MEM_INS_CONNECT)){
flag_disable(EVT_MEM_INS_CONNECT);
mem_connect_device(store_rxBuf[2], store_rxBuf+3);
}
if(flag_mask(EVT_MEM_INS_WRITE)){
flag_disable(EVT_MEM_INS_WRITE);
if(state == BLE_STATE_CONNECTED){
// selectedMenuItem should be MENU_ITEM_READ_WRITE
// This is done by SimpleBLECentral_processRoleEvent() in the case "GAP_LINK_ESTABLISHED_EVENT"
mem_send_ins(store_rxBuf[2], store_rxBuf+3);
}
}
if(flag_mask(EVT_MEM_INS_READ)){
flag_disable(EVT_MEM_INS_READ);
if(state == BLE_STATE_CONNECTED){
mem_central_get_cis(store_rxBuf[2]);
}
}
if(flag_mask(EVT_MEM_INS_DISCONNECT)){
flag_disable(EVT_MEM_INS_DISCONNECT);
GAPCentralRole_TerminateLink(connHandle);
state = BLE_STATE_DISCONNECTING;
}
if(flag_mask(EVT_MEM_RETURN_DATA)){
flag_disable(EVT_MEM_RETURN_DATA);
mem_read_data_and_return();
}
if(flag_mask(EVT_MEM_CONN_TIMEOUT)){
flag_disable(EVT_MEM_CONN_TIMEOUT);
mem_connection_timeout();
}
}
static EventTableEntry EVENT_TABLE[] = { //
{EVT_ALL, &mem_central_event},
// terminated
{0, NULL}
};
static void mem_connect_device(uint8_t addrType, uint8_t *peerAddr) {
uint8_t Addr[B_ADDR_LEN];
for(int i=0 ; i<B_ADDR_LEN ; i++){
Addr[5-i] = *(peerAddr+i);
}
// UART_write(uart_handle, Addr, 6);
state = BLE_STATE_CONNECTING;
Util_startClock(&connectingClock);
extern bStatus_t GAPCentralRole_EstablishLink(uint8_t highDutyCycle, uint8_t whiteList,
uint8_t addrTypePeer, uint8_t *peerAddr);
// TRUE to use high scan duty cycle when creating link
#define DEFAULT_LINK_HIGH_DUTY_CYCLE FALSE
// TRUE to use white list when creating link
#define DEFAULT_LINK_WHITE_LIST FALSE
GAPCentralRole_EstablishLink(DEFAULT_LINK_HIGH_DUTY_CYCLE,
DEFAULT_LINK_WHITE_LIST,
addrType, Addr);
}
static void mem_send_ins(uint16_t handle, uint8_t *value){
if (state == BLE_STATE_CONNECTED &&
charHdl != 0 &&
procedureInProgress == FALSE)
{
uint8_t ACK[15] = {0}; //ack success
ACK[1] = handle;
ACK[2] = value[0];
ACK[3] = value[1];
UART_write(uart_handle, ACK, 4);
uint8_t status;
// Do a read or write as long as no other read or write is in progress
// Do a write
attWriteReq_t req;
// enable notify
req.handle = handle;
req.len = 19;
if(handle == BLE_CHAR3_HANDLE){
// RIS, VIS, CIS instruction
req.len = 19;
}
else if(handle == BLE_CHAR4_CONFIG_HANDLE){
// notify enable
req.len = 2;
}
else{
uint8_t error_handle[13] = "error handle";
UART_write(uart_handle, error_handle, 13);
status = bleMemAllocError;
return;
}
req.pValue = GATT_bm_alloc(connHandle, ATT_WRITE_REQ, req.len, NULL);
if ( req.pValue != NULL )
{
// send instruction
for(int i=0 ; i < req.len ; i++){
req.pValue[i] = *(value+i);
}
req.sig = 0;
req.cmd = 0;
status = GATT_WriteCharValue(connHandle, &req, selfEntity);
// uncomment GATT_WriteLongCharValue if we need a long instruction;
// However, there are some error to fix when using GATT_WriteLongCharValue
// status = GATT_WriteLongCharValue(connHandle, &req, selfEntity);
if ( status != SUCCESS )
{
GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ);
}
}
else
{
uint8_t error_msg[10] = "err";
error_msg[3] = req.handle;
error_msg[4] = *value;
error_msg[5] = *(value+1);
error_msg[6] = *(value+2);
error_msg[7] = *(value+3);
error_msg[8] = *(value+4);
error_msg[9] = *(value+5);
UART_write(uart_handle, error_msg, 10);
status = bleMemAllocError;
}
if (status == SUCCESS)
{
procedureInProgress = TRUE;
}
}
}
static void mem_central_get_cis(uint8_t handle){
// get the actual CIS data from simple_central.c > SimpleBLECentral_processGATTMsg()
if (state == BLE_STATE_CONNECTED &&
charHdl != 0 &&
procedureInProgress == FALSE)
{
uint8_t status;
// send read command
attReadReq_t read_cis_req;
read_cis_req.handle = handle;
status = GATT_ReadCharValue(connHandle, &read_cis_req, selfEntity);
if (status == SUCCESS)
{
procedureInProgress = TRUE;
}
}
}
static void mem_read_data_and_return(){
// CIS_BUFF_SUFFIX = {0,0}
// add prefix and suffix to sync communication
uint16_t ret_length;
if (CIS_length < 22) {
ret_length = 20;
} else {
ret_length = CIS_length - 2;
}
CIS_data[0] = 4;
CIS_data[1] = 0;
CIS_data[2] = ret_length;
CIS_data[CIS_length++] = 0;
CIS_data[CIS_length++] = 0;
UART_write(uart_handle, CIS_data, ret_length + 3);
}
static void mem_connection_timeout(){
}
@@ -1,4 +1,7 @@
#ifndef MEM_BOARD_CENTRAL
#define MEM_BOARD_CENTRAL
/*
* Reference web page https://github.com/ti-simplelink/ble_examples/tree/ble_examples-2.2
* http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/tirtos/2_20_00_06/
@@ -6,478 +9,9 @@
* doxygen/html/_u_a_r_t_c_c26_x_x_8h.html
*/
#ifndef MEM_BOARD_CENTRAL
#define MEM_BOARD_CENTRAL
#include <ti/sysbios/knl/Clock.h>
#include "mem_central_pin.h"
#include "mem_uart.h"
#include "mem_event.h"
#include "mem_central_handle_notify.h"
//#include "uart_printf.h"
//#include <xdc/runtime/System.h>
#define BLE_CDR_SAMLL_SIZE 10
#define BLE_CHAR2_HANDLE 0x0021 // read CIS return data
#define BLE_CHAR3_HANDLE 0x0024 // send instruction
#define BLE_CHAR4_CONFIG_HANDLE 0x0028 // notify enable: 0100=enable; 0000=disable
#define RET_INFO_BUF_SIZE 52
#define CIS_BUFF_PREFIX 3
#define CIS_BUFF_SUFFIX 2
static uint16_t CIS_length = 10;
static char CIS_data[50];
static void mem_central_event();
static void mem_recv_ins();
static void mem_connect_device(uint8_t addrType, uint8_t *peerAddr);
static void mem_send_ins(uint16_t hadnle, uint8_t *value);
static void mem_read_data_and_return();
static void mem_central_get_cis(uint8_t handle);
static void mem_connection_timeout();
static void MemBoard_init(void){
mem_UART_init();
master_spi_open();
central_mem_init();
central_reset();
// uint8_t txBuf[] = "Simple Central memory board MA\n\r"; // Transmit buffer
// UART_txBuf = txBuf;
// UART_write(uart_handle, txBuf, sizeof(txBuf));
// mem_UART_display(txBuf);
}
static EventTableEntry EVENT_TABLE[] = { //
{EVT_ALL, &mem_central_event},
// terminated
{0, NULL}
};
/**
* system event handle. It go through [EVENT_TABLE] and invoke event callback
* if event_mask bits set.
*/
static void mem_event_handle() {
for (EventTableEntry *entry = EVENT_TABLE; EventMask && entry->event_mask; entry++) {
if (entry->event_callback && flag_mask(entry->event_mask)) {
entry->event_callback();
}
}
}
typedef enum{
LED_OFF,
LED_ON
} LED_Status;
typedef enum{
UART_NO_DATA,
UART_RECEIVED_DATA
} UART_DATA_Status;
typedef enum{
INS_IDLE,
INS_RESET,
INS_KEY,
INS_SCAN,
INS_SCAN_RESPONSE,
INS_CONNECT,
INS_WRITE,
INS_READ,
INS_DISCONNECT,
INS_PREPARE_CONNECT
} Control_Ins;
static LED_Status GLEDStatus = LED_OFF;
static UART_DATA_Status UARTStatus = UART_NO_DATA;
static void mem_central_event() {
if (flag_mask(EVT_MEM_LED)) {
flag_disable(EVT_MEM_LED);
GLEDStatus = LED_ON;
// SetMemOutputPIN(Board_GLED, 1);
}
if(flag_mask(EVT_MEM_LED_OFF)){
flag_disable(EVT_MEM_LED_OFF);
GLEDStatus = LED_OFF;
// SetMemOutputPIN(Board_GLED, 0);
}
if(flag_mask(EVT_MEM_DECODE_INS)){
flag_disable(EVT_MEM_DECODE_INS);
mem_recv_ins();
}
if (flag_mask(EVT_PIN_REQST)) {
flag_disable(EVT_PIN_REQST);
master_switch_memory();
}
if(flag_mask(EVT_MEM_RETURN_DATA)){
flag_disable(EVT_MEM_RETURN_DATA);
mem_read_data_and_return();
}
if(flag_mask(EVT_MEM_CONN_TIMEOUT)){
flag_disable(EVT_MEM_CONN_TIMEOUT);
mem_connection_timeout();
}
if(flag_mask(EVT_MEM_NOTIFY_HANDLE)){
flag_disable(EVT_MEM_NOTIFY_HANDLE);
central_handle_notify();
}
}
static Control_Ins ins = INS_IDLE;
static void mem_recv_ins(){
extern uint8_t keysPressed;
extern Clock_Struct keyChangeClock;
static bool prepare_to_connect = false;
// if(state == BLE_STATE_CONNECTED){
UART_read(uart_handle, UART_rxBuf, 21);
// }
// else if(prepare_to_connect){
// prepare_to_connect = false;
// UART_read(uart_handle, UART_rxBuf, 8);
// }
// else{
// UART_read(uart_handle, UART_rxBuf, 3);
// }
switch(UART_rxBuf[0]){
case INS_IDLE:{
break;
}
case INS_RESET:{
state = BLE_STATE_IDLE;
connHandle = GAP_CONNHANDLE_INIT;
discState = BLE_DISC_STATE_IDLE;
break;
}
case INS_KEY:{
if(UART_rxBuf[1] == 1){
keysPressed = KEY_LEFT;
Util_startClock(&keyChangeClock);
}
else if(UART_rxBuf[1] == 2){
keysPressed = KEY_RIGHT;
Util_startClock(&keyChangeClock);
}
break;
}
case INS_SCAN:{
SimpleBLECentral_discoverDevices();
break;
}
// instruction format:
// ins[0]: INS_SCAN_RESPONSE = 0x04
// ins[1]: scan_response (device number)=0, a certain device = device_id
// ins[2]: attr_length=0, e.g. len(addr)=6, len(company_code)=4, len(localName)=20
// addr=1, localName=2, company_code=3, version_info=4, battery_info=5
case INS_SCAN_RESPONSE:{
uint8_t device_number;
uint8_t ret_info_buf[RET_INFO_BUF_SIZE];
uint8_t attr_length[5] = {sizeof(devList[device_number].addr),
sizeof(devList[device_number].localName),
LEN_COMPANY_CODE,
LEN_VERSION_INFO,
LEN_BATTERY_INFO};
// report scan device number
// using preamble here, ensure sync with controller
// The chosen preamble is a 32-bits M-sequence: 0b1010001100101001 = 0xA329
if(UART_rxBuf[1] == 0){
}
// report a certain device information
else{
device_number = UART_rxBuf[1] - 1;
if(device_number >= scanRes){
char illegal_id[20] = "illegal device id";
UART_write(uart_handle, illegal_id, 20);
}
if(UART_rxBuf[2] == 0){
UART_write(uart_handle, attr_length, 5);
}
else if(UART_rxBuf[2] == 1){
// uint8_t scan_addr[20] = Util_convertBdAddr2Str(devList[device_number].addr);
UART_write(uart_handle, devList[device_number].addr, attr_length[0]);
}
else if(UART_rxBuf[2] == 2){
// uint8_t scan_name[20] = "test_device_name";
// UART_write(uart_handle, scan_name, 20);
UART_write(uart_handle, devList[device_number].localName, attr_length[1]);
// UART_write(uart_handle, LocalName[device_number], attr_length[1]);
}
else if(UART_rxBuf[2] == 3){
UART_write(uart_handle, devList[device_number].company_code, attr_length[2]);
}
else if(UART_rxBuf[2] == 4){
UART_write(uart_handle, devList[device_number].version_info, attr_length[3]);
}
else if(UART_rxBuf[2] == 5){
UART_write(uart_handle, devList[device_number].battery_info, attr_length[4]);
}
else if(UART_rxBuf[2] == 6){
// return all information in a single UART transmit
uint8_t index = 0;
ret_info_buf[index ++] = 0;
ret_info_buf[index ++] = 0;
ret_info_buf[index ++] = 0;
// B_ADDR_LEN = 6
for(int i=0 ; i < B_ADDR_LEN ; i++){
ret_info_buf[index ++] = devList[device_number].addr[i];
}
ret_info_buf[index ++] = devList[device_number].addrType;
for(int i=0 ; i < attr_length[1] ; i++){
ret_info_buf[index ++] = devList[device_number].localName[i];
}
for(int i=0 ; i < attr_length[2] ; i++){
ret_info_buf[index ++] = devList[device_number].company_code[i];
}
for(int i=0 ; i < attr_length[3] ; i++){
ret_info_buf[index ++] = devList[device_number].version_info[i];
}
for(int i=0 ; i < attr_length[4] ; i++){
ret_info_buf[index ++] = devList[device_number].battery_info[i];
}
for( ; index < RET_INFO_BUF_SIZE ; index++){
ret_info_buf[index] = 0;
}
UART_write(uart_handle, ret_info_buf, RET_INFO_BUF_SIZE);
}
else{
return;
}
state = BLE_STATE_BROWSING;
}
break;
}
case INS_PREPARE_CONNECT:{
prepare_to_connect = true;
break;
}
case INS_CONNECT:{
// uint8_t *p;
// p = UART_rxBuf+2;
// char ACK[15] = {9,9,9 , p[0], p[1], p[2], p[3], p[4], p[5]};
// UART_write(uart_handle, ACK, 15);
mem_connect_device(UART_rxBuf[1], UART_rxBuf+2);
break;
}
case INS_WRITE:{
if(state == BLE_STATE_CONNECTED){
// selectedMenuItem should be MENU_ITEM_READ_WRITE
// This is done by SimpleBLECentral_processRoleEvent() in the case "GAP_LINK_ESTABLISHED_EVENT"
char ACK[15] = {4,0,1,1}; //ack success
UART_write(uart_handle, ACK, 4);
mem_send_ins(UART_rxBuf[1], UART_rxBuf+2);
}
break;
}
case INS_READ:{
if(state == BLE_STATE_CONNECTED){
mem_central_get_cis(UART_rxBuf[1]);
}
break;
}
case INS_DISCONNECT:{
// clear scan result
GAPCentralRole_TerminateLink(connHandle);
state = BLE_STATE_DISCONNECTING;
// scanRes = 0;
// memset(devList, NULL, sizeof(devList[0])*DEFAULT_MAX_SCAN_RES);
//
// state = BLE_STATE_IDLE;
// connHandle = GAP_CONNHANDLE_INIT;
// discState = BLE_DISC_STATE_IDLE;
// charHdl = 0;
// procedureInProgress = FALSE;
// SimpleBLECentral_CancelRssi(pEvent->linkTerminate.connectionHandle);
// selectedMenuItem = MENU_ITEM_CONN_PARAM_UPDATE;
break;
}
default:{
uint8_t error_msg[35] = "error";
error_msg[6] = state;
error_msg[7] = 0xFF;
for(int i = 0 ; i < UART_BUFF_SIZE ; i++){
error_msg[8+i] = UART_rxBuf[i];
}
UART_write(uart_handle, error_msg, 35);
break;
}
}
}
static void mem_connect_device(uint8_t addrType, uint8_t *peerAddr) {
uint8_t Addr[B_ADDR_LEN];
for(int i=0 ; i<B_ADDR_LEN ; i++){
Addr[5-i] = *(peerAddr+i);
}
// char ACK[15] = {3, 3, 3, 4, 0, 6, Addr[5], Addr[4], Addr[3], Addr[2], Addr[1], Addr[0]};
// UART_write(uart_handle, ACK, 15);
state = BLE_STATE_CONNECTING;
Util_startClock(&connectingClock);
GAPCentralRole_EstablishLink(DEFAULT_LINK_HIGH_DUTY_CYCLE,
DEFAULT_LINK_WHITE_LIST,
addrType, Addr);
}
static void mem_send_ins(uint16_t handle, uint8_t *value){
if (state == BLE_STATE_CONNECTED &&
charHdl != 0 &&
procedureInProgress == FALSE)
{
uint8_t status;
// Do a read or write as long as no other read or write is in progress
// Do a write
attWriteReq_t req;
// enable notify
req.handle = handle;
req.len = 19;
if(handle == BLE_CHAR3_HANDLE){
// RIS, VIS, CIS instruction
req.len = 19;
}
else if(handle == BLE_CHAR4_CONFIG_HANDLE){
// notify enable
req.len = 2;
}
else{
uint8_t error_handle[13] = "error handle";
UART_write(uart_handle, error_handle, 13);
status = bleMemAllocError;
return;
}
req.pValue = GATT_bm_alloc(connHandle, ATT_WRITE_REQ, req.len, NULL);
if ( req.pValue != NULL )
{
// send instruction
for(int i=0 ; i < req.len ; i++){
req.pValue[i] = *(value+i);
}
req.sig = 0;
req.cmd = 0;
status = GATT_WriteCharValue(connHandle, &req, selfEntity);
// uncomment GATT_WriteLongCharValue if we need a long instruction;
// However, there are some error to fix when using GATT_WriteLongCharValue
// status = GATT_WriteLongCharValue(connHandle, &req, selfEntity);
if ( status != SUCCESS )
{
GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ);
}
}
else
{
uint8_t error_msg[10] = "err";
error_msg[3] = req.handle;
error_msg[4] = *value;
error_msg[5] = *(value+1);
error_msg[6] = *(value+2);
error_msg[7] = *(value+3);
error_msg[8] = *(value+4);
error_msg[9] = *(value+5);
UART_write(uart_handle, error_msg, 10);
status = bleMemAllocError;
}
if (status == SUCCESS)
{
procedureInProgress = TRUE;
}
}
}
static void mem_central_get_cis(uint8_t handle){
// get the actual CIS data from simple_central.c > SimpleBLECentral_processGATTMsg()
if (state == BLE_STATE_CONNECTED &&
charHdl != 0 &&
procedureInProgress == FALSE)
{
uint8_t status;
// send read command
attReadReq_t read_cis_req;
read_cis_req.handle = handle;
status = GATT_ReadCharValue(connHandle, &read_cis_req, selfEntity);
if (status == SUCCESS)
{
procedureInProgress = TRUE;
}
}
}
static void mem_read_data_and_return(){
// CIS_BUFF_SUFFIX = {0,0}
// add prefix and suffix to sync communication
uint16_t ret_length;
if (CIS_length < 22) {
ret_length = 20;
} else {
ret_length = CIS_length - 2;
}
CIS_data[0] = 4;
CIS_data[1] = 0;
CIS_data[2] = ret_length;
CIS_data[CIS_length++] = 0;
CIS_data[CIS_length++] = 0;
UART_write(uart_handle, CIS_data, ret_length + 3);
}
static void mem_connection_timeout(){
}
void MemBoard_init(void);
void mem_event_handle();
#endif
@@ -13,7 +13,7 @@
=======================*/
#define MEM_BUFFER_SIZE SPI_TX_BUFFER_SIZE
#define MEM_SWITCH_THRESHOLD 0x0800
#define MEM_SWITCH_THRESHOLD 0x1C00 //max:7K bytes
#define MSM_REG_WRITE 0x01
#define MEM_INS_WRITE 0x02
@@ -25,6 +25,8 @@
static uint8 mem_sel = 0;
static uint16_t not_counter = 0; // writing counter, increase when notify
static uint16_t not_offset = 0; // writing pointer, current not writing index
uint8 ram_sw = true;
uint8 notify_handle_done = true;
static uint16_t notify_length = 0;
static uint8_t notify_value[250] = {0};
@@ -65,7 +67,7 @@ static void central_reset(){
// selectedMenuItem = MENU_ITEM_CONN_PARAM_UPDATE;
}
static void master_switch_memory();
void master_switch_memory();
//static void central_handle_notify(uint8_t notify_length, uint8_t *notify_value){
static uint8_t notify_counter = 0;
@@ -102,18 +104,22 @@ static void central_handle_notify(){
unsafe_memcpy(p, notify_value, notify_length); // data content
central_spi_send(p - master_tx_buffer);
notify_handle_done = true;
if (central_pi3_not_busy() && ((not_offset >= MEM_SWITCH_THRESHOLD) || flag_mask(EVT_PIN_REQST))) {
// if (central_pi3_not_busy() && (not_offset >= MEM_SWITCH_THRESHOLD)) {
flag_disable(EVT_PIN_REQST);
// if (central_pi3_not_busy() && ((not_offset >= MEM_SWITCH_THRESHOLD) || flag_mask(EVT_PIN_REQST))) {
if (ram_sw){
master_switch_memory();
}
else if (central_pi3_not_busy() && (not_offset >= MEM_SWITCH_THRESHOLD)) {
// flag_disable(EVT_PIN_REQST);
master_switch_memory();
}
central_pin_output(Board_GLED, not_counter & 0x10);
// central_pin_output(Board_GLED, not_counter & 0x10);
}
static void master_switch_memory() {
void master_switch_memory() {
uint16_t cnt_offset = not_offset;
not_offset = MEM_META_LENGTH;
@@ -2,6 +2,8 @@
#ifndef MEM_EVENT_H
#define MEM_EVENT_H
extern void ext_call_sem();
/**
* test event [flag] has been enabled.
*/
@@ -35,7 +37,7 @@
uint8 __key = Hwi_disable(); \
EventMask |= (uint16_t)(flag); \
Hwi_restore(__key); \
Semaphore_post(sem); \
ext_call_sem(); \
} while (0)
/** event */
@@ -47,8 +49,9 @@
#define EVT_MEM_RETURN_DATA 0x0010
#define EVT_MEM_CONN_TIMEOUT 0x0020
#define EVT_MEM_NOTIFY_HANDLE 0x0040
#define EVT_MEM_UART_ROUTINE 0x0080
static uint16_t EventMask = 0;
uint16_t EventMask = 0;
/**
* event table entry.
@@ -0,0 +1,121 @@
#include "mem_uart.h"
#include "mem_event.h"
#define IS_EVT_MEM_DECODE_INS(_b) ((_b)[0] == INS_SCAN || \
(_b)[0] == INS_CONNECT || \
(_b)[0] == INS_WRITE || \
(_b)[0] == INS_READ || \
(_b)[0] == INS_DISCONNECT)
#define IS_FINAL_RX_BYTE(_i, _l) (((_i) == (_l) + 1) && (store_rxBuf[(_l) + 1] == 0xF1))
static UART_Handle uart_handle;
static UART_Params params;
static uint8_t UART_txBuf[UART_BUFF_SIZE];
static uint8_t UART_rxBuf[UART_BUFF_SIZE];
static uint8_t store_rxBuf[UART_BUFF_SIZE];
static void mem_recv_uart();
// Callback function
static void readCallback(UART_Handle handle, void *rxBuf, size_t size)
{
// static uint8_t test_pin_state = 0;
// PIN_setOutputValue(hKeyPins, PIN_MEM_TEST, test_pin_state);
// test_pin_state = ~test_pin_state;
uint8_t *uart_rxBuf = (uint8_t *)rxBuf;
static int index = 0;
static int length = 0;
static bool rx_fi = false;
if (rx_fi) {
memset(store_rxBuf, 0, UART_BUFF_SIZE);
rx_fi = false;
}
if (IS_EVT_MEM_DECODE_INS(uart_rxBuf) && index == 0) {
store_rxBuf[0] = uart_rxBuf[0];
index++;
} else if (IS_EVT_MEM_DECODE_INS(store_rxBuf) && index == 1) {
store_rxBuf[1] = uart_rxBuf[0];
length = uart_rxBuf[0];
index++;
} else if (IS_EVT_MEM_DECODE_INS(store_rxBuf) && index > 1) {
store_rxBuf[index] = uart_rxBuf[0];
if (index >= length + 2) { //num = 0 when over length
store_rxBuf[index] = 0;
}
index++;
}
//0xF1 = 241
if(index > 1 && store_rxBuf[0] == INS_SCAN && store_rxBuf[length + 1] == 0xF1 ) {
index = 0;
length = 0;
flag_notify(EVT_MEM_INS_SCAN);
flag_notify(EVT_MEM_UART_ROUTINE);
rx_fi = true;
return;
} else if (index > 1 && store_rxBuf[0] == INS_CONNECT && store_rxBuf[length + 1] == 0xF1) {
index = 0;
length = 0;
flag_notify(EVT_MEM_INS_CONNECT);
flag_notify(EVT_MEM_UART_ROUTINE);
rx_fi = true;
return;
} else if (index > 1 && store_rxBuf[0] == INS_WRITE && store_rxBuf[length + 1] == 0xF1) {
index = 0;
length = 0;
flag_notify(EVT_MEM_INS_WRITE);
flag_notify(EVT_MEM_UART_ROUTINE);
rx_fi = true;
return;
} else if (index > 1 && store_rxBuf[0] == INS_READ && store_rxBuf[length + 1] == 0xF1) {
index = 0;
length = 0;
flag_notify(EVT_MEM_INS_READ);
flag_notify(EVT_MEM_UART_ROUTINE);
rx_fi = true;
return;
} else if (index > 1 && store_rxBuf[0] == INS_DISCONNECT && store_rxBuf[length + 1] == 0xF1) {
flag_notify(EVT_MEM_INS_DISCONNECT);
index = 0;
length = 0;
flag_notify(EVT_MEM_UART_ROUTINE);
rx_fi = true;
return;
}
flag_notify(EVT_MEM_UART_ROUTINE);
}
void mem_UART_init(){
uint32_t timeoutUs = 5000; // 5ms timeout, default timeout is no timeout (BIOS_WAIT_FOREVER)
// Init UART and specify non-default parameters
UART_Params_init(&params);
params.baudRate = 115200;
params.writeDataMode = UART_DATA_BINARY;
params.readMode = UART_MODE_CALLBACK;
params.readDataMode = UART_DATA_BINARY;
params.readCallback = readCallback;
// params.readTimeout = timeoutUs / Clock_tickPeriod; // Default tick period is 10us
// params.readTimeout = ti_sysbios_BIOS_WAIT_FOREVER;
// Open the UART and do the read
uart_handle = UART_open(Board_UART, &params);
// int rxBytes = UART_read(uart_handle, rxBuf, 100);
return;
}
int mem_uart_read_byte(){
return UART_read(uart_handle, UART_rxBuf, 1)
}
void mem_get_uart_ins(uint8_t* ins){
ins = UART_rxBuf;
}
@@ -10,141 +10,44 @@
#include <ti/drivers/UART.h>
#include <ti/drivers/uart/UARTCC26XX.h>
#include "mem_event.h"
#define UART_BUFF_SIZE 25
static UART_Handle uart_handle;
static UART_Params params;
typedef enum{
INS_IDLE,
INS_RESET,
INS_KEY,
INS_SCAN,
INS_SCAN_RESPONSE,
INS_CONNECT,
INS_WRITE,
INS_READ,
INS_DISCONNECT,
INS_PREPARE_CONNECT,
} Control_Ins;
static uint8_t UART_txBuf[UART_BUFF_SIZE];
static uint8_t UART_rxBuf[UART_BUFF_SIZE];
static void mem_recv_uart();
static void mem_UART_init(){
uint32_t timeoutUs = 5000; // 5ms timeout, default timeout is no timeout (BIOS_WAIT_FOREVER)
// Init UART and specify non-default parameters
UART_Params_init(&params);
params.baudRate = 115200;
params.writeDataMode = UART_DATA_BINARY;
// params.readMode = UART_MODE_CALLBACK;
// params.readDataMode = UART_DATA_BINARY;
// params.readCallback = readCallback;
// params.readTimeout = timeoutUs / Clock_tickPeriod; // Default tick period is 10us
params.readTimeout = ti_sysbios_BIOS_WAIT_FOREVER;
// Open the UART and do the read
uart_handle = UART_open(Board_UART, &params);
// int rxBytes = UART_read(uart_handle, rxBuf, 100);
return;
}
static void mem_UART_display(char *str){
// calculate string size
uint8_t str_size;
for(str_size=0 ; *(str+str_size)!='\0' && str_size < 10; str_size++){
// do nothing
}
str_size ++;
char *out_str = malloc((str_size) * sizeof(char));
// char *out_str = str;
for(int i=0 ; i<str_size ; i++){
*(out_str+i) = *(str+i);
}
UART_write(uart_handle, out_str, str_size);
free(out_str);
out_str = NULL;
}
static void mem_UART_clear_screen(){
uint8_t cls[] = "\033[2J";
UART_write(uart_handle, cls, sizeof(cls));
}
static void mem_UART_display_u8(uint8_t *str, uint8_t len){
// calculate string size
uint8_t str_size;
// for(str_size=0 ; *(str+str_size)!='\0' && str_size < 400; str_size+=2){
// // do nothing
// }
str_size = 2*len + 1;
uint8_t *out_str = malloc((str_size) * sizeof(uint8_t));
for(int i=0 ; i<str_size/2 ; i++){
uint8_t MSB = (*(str+i) >> 4) & 0x0F;
uint8_t LSB = *(str+i) & 0x0F;
if(0 <= MSB && MSB <= 9){
*(out_str + 2*i) = MSB + '0';
}
else if(10 <= MSB && MSB <= 15){
*(out_str + 2*i) = MSB - 10 + 'A';
}
else{
*(out_str + 2*i) = 'x';
}
if(0 <= LSB && LSB <= 9){
*(out_str + 2*i+1) = LSB + '0';
}
else if(10 <= LSB && LSB <= 15){
*(out_str + 2*i+1) = LSB - 10 + 'A';
}
else{
*(out_str + 2*i+1) = 'x';
}
}
UART_write(uart_handle, out_str, str_size);
free(out_str);
out_str = NULL;
}
static void mem_UART_display_u16(uint16_t u16){
// calculate string size
uint8_t *out_str = malloc(4 * sizeof(uint8_t));
uint8_t u8[4];
for(int i=0 ; i<4 ; i++){
u8[3-i] = (u16 >> (4*i)) & 0x0F;
}
for(int i=0 ; i<4 ; i++){
if(0 <= u8[i] && u8[i] <= 9){
out_str[i] = u8[i] + '0';
}
else if(10 <= u8[i] && u8[i] <= 15){
out_str[i] = u8[i] - 10 + 'A';
}
else{
out_str[i] = 'x';
}
}
/** event */
#define EVT_ALL 0xFFFF
#define EVT_MEM_LED 0x0001 /**< set led event */
#define EVT_MEM_LED_OFF 0x0002
#define EVT_MEM_DECODE_INS 0x0004
#define EVT_PIN_REQST 0x0008
#define EVT_MEM_RETURN_DATA 0x0010
#define EVT_MEM_CONN_TIMEOUT 0x0020
#define EVT_MEM_NOTIFY_HANDLE 0x0040
#define EVT_MEM_UART_ROUTINE 0x0080
#define EVT_MEM_INS_SCAN 0x0100
#define EVT_MEM_INS_CONNECT 0x0200
#define EVT_MEM_INS_WRITE 0x0400
#define EVT_MEM_INS_READ 0x0800
#define EVT_MEM_INS_DISCONNECT 0x1000
UART_write(uart_handle, out_str, 4);
free(out_str);
out_str = NULL;
}
static void mem_UART_newline(){
char out_str[2] = {'\n', '\r'};
UART_write(uart_handle, out_str, 2);
}
static void mem_recv_uart(){
UART_read(uart_handle, UART_rxBuf, 10);
}
static void mem_send_recv_uart(){
UART_write(uart_handle, UART_rxBuf, 10);
}
void mem_UART_init();
int mem_uart_read_byte();
void mem_get_uart_ins(uint8_t* ins);
#endif
@@ -0,0 +1,11 @@
#include "mem_uart_routine.h"
void mem_uart_routine(){
if (uartProcedureInProgress == FALSE) {
// uartProcedureInProgress = TRUE;
int rxBytes = mem_uart_read_byte();
} else {
flag_notify(EVT_MEM_UART_ROUTINE);
}
}
@@ -0,0 +1,19 @@
#ifndef MEM_UART_ROUTINE_H
#define MEM_UART_ROUTINE_H
#include "mem_uart.h"
#include "mem_event.h"
void mem_uart_routine();
static void mem_uart_routine(){
if (uartProcedureInProgress == FALSE) {
// uartProcedureInProgress = TRUE;
int rxBytes = UART_read(uart_handle, UART_rxBuf, 1);
} else {
flag_notify(EVT_MEM_UART_ROUTINE);
}
}
#endif
@@ -350,7 +350,7 @@ static bool scanningStarted = FALSE;
static uint16_t connHandle = GAP_CONNHANDLE_INIT;
// Application state
static bleState_t state = BLE_STATE_IDLE;
bleState_t state = BLE_STATE_IDLE;
// Discovery state
static bleDiscState_t discState = BLE_DISC_STATE_IDLE;
@@ -376,6 +376,7 @@ static bool doWrite = FALSE;
// GATT read/write procedure state
bool procedureInProgress = FALSE;
bool uartProcedureInProgress = FALSE;
// Maximum PDU size (default = 27 octets)
static uint16_t maxPduSize;
@@ -389,8 +390,6 @@ static readRssi_t readRssi[MAX_NUM_BLE_CONNS];
static void SimpleBLECentral_init(void);
static void SimpleBLECentral_taskFxn(UArg a0, UArg a1);
static void MemBoard_init(void);
static void SimpleBLECentral_processGATTMsg(gattMsgEvent_t *pMsg);
static void SimpleBLECentral_handleKeys(uint8_t shift, uint8_t keys);
static void SimpleBLECentral_processStackMsg(ICall_Hdr *pMsg);
@@ -402,6 +401,7 @@ static bool SimpleBLECentral_findSvcUuid(uint16_t uuid, uint8_t *pData,
uint8_t dataLen);
static void SimpleBLECentral_discoverDevices(void);
void SimpleBLECentral_timeoutConnecting(UArg arg0);
static bool SimpleBLECentral_checkBPSDeviceInfo(uint8_t *pEvtData, uint8_t dataLen);
static void SimpleBLECentral_addDeviceInfo(uint8_t *pAddr, uint8_t addrType);
static bool SimpleBLECentral_findLocalName(uint8_t *pEvtData, uint8_t dataLen);
static void SimpleBLECentral_addDeviceName(uint8_t i, uint8_t *pEvtData,
@@ -834,41 +834,38 @@ static void SimpleBLECentral_processRoleEvent(gapCentralRoleEvent_t *pEvent)
break;
case GAP_DEVICE_INFO_EVENT:
{
{
//Find peer device address by UUID
if ( (DEFAULT_DEV_DISC_BY_SVC_UUID == FALSE) ||
SimpleBLECentral_findSvcUuid(SIMPLEPROFILE_SERV_UUID,
pEvent->deviceInfo.pEvtData,
pEvent->deviceInfo.dataLen))
{
SimpleBLECentral_addDeviceInfo(pEvent->deviceInfo.addr,
pEvent->deviceInfo.addrType);
}
if (SimpleBLECentral_findLocalName(pEvent->deviceInfo.pEvtData,
pEvent->deviceInfo.dataLen)){
if(SimpleBLECentral_checkBPSDeviceInfo(pEvent->deviceInfo.pEvtData,
pEvent->deviceInfo.dataLen)){
SimpleBLECentral_addDeviceInfo(pEvent->deviceInfo.addr,
pEvent->deviceInfo.addrType);
//Update deviceInfo entry with the name
SimpleBLECentral_addDeviceName(0, pEvent->deviceInfo.pEvtData,
pEvent->deviceInfo.dataLen);
// Check if the discovered device is already in scan results
uint8_t i;
for (i = 0; i < scanRes; i++)
{
if (memcmp(pEvent->deviceInfo.addr, devList[i].addr , B_ADDR_LEN) == 0)
{
//Check if pEventData contains a device name
if (SimpleBLECentral_findLocalName(pEvent->deviceInfo.pEvtData,
pEvent->deviceInfo.dataLen))
{
//Update deviceInfo entry with the name
SimpleBLECentral_addDeviceName(i, pEvent->deviceInfo.pEvtData,
pEvent->deviceInfo.dataLen);
// get company code, version, battery
SimepleBLECentral_getDeviceinfo(i, pEvent->deviceInfo.pEvtData,
// get company code, version, battery
SimepleBLECentral_getDeviceinfo(0, pEvent->deviceInfo.pEvtData,
pEvent->deviceInfo.dataLen);
// response company code, version, battery
SimepleBLECentral_respDeviceinfo(i, pEvent->deviceInfo.pEvtData,
// response company code, version, battery
SimepleBLECentral_respDeviceinfo(0, pEvent->deviceInfo.pEvtData,
pEvent->deviceInfo.dataLen);
}
}
}
// Increment scan result count
scanRes = 1;
// if(scanRes == DEFAULT_MAX_SCAN_RES){
GAPCentralRole_CancelDiscovery();
// }
}
}
}
}
break;
@@ -991,8 +988,8 @@ static void SimpleBLECentral_processRoleEvent(gapCentralRoleEvent_t *pEvent)
state = BLE_STATE_IDLE;
connHandle = GAP_CONNHANDLE_INIT;
discState = BLE_DISC_STATE_IDLE;
char ACK4[10] = {5, 5};
UART_write(uart_handle, ACK4, 5);
// char ACK4[10] = {5, 5};
// UART_write(uart_handle, ACK4, 5);
// Display_clearLine(dispHandle, ROW_FOUR);
// Display_print0(dispHandle, ROW_TWO, 0, "Connect Failed");
@@ -1656,6 +1653,8 @@ static void SimpleBLECentral_processGATTMsg(gattMsgEvent_t *pMsg)
// increment value
// Display_print1(dispHandle, ROW_SIX, 0, "Write sent: %d", charVal++);
// mem_UART_display("write success\n\r");
char ACK[15] = {4,0,1,3}; //ack success
UART_write(uart_handle, ACK, 4);
}
procedureInProgress = FALSE;
}
@@ -2020,7 +2019,6 @@ static void SimpleBLECentral_processGATTDiscEvent(gattMsgEvent_t *pMsg)
mem_UART_newline();
#endif
discState = BLE_DISC_STATE_SVC;
// Discovery simple BLE service
VOID GATT_DiscPrimaryServiceByUUID(connHandle, uuid, ATT_BT_UUID_SIZE,
selfEntity);
@@ -2214,6 +2212,52 @@ Void SimpleBLECentral_timeoutConnecting(UArg arg0)
}
}
static bool SimpleBLECentral_checkBPSDeviceInfo(uint8_t *pEvtData, uint8_t dataLen){
uint8_t adLen;
uint8_t adType;
uint8_t *pEnd;
uint8_t *p = pEvtData;
pEnd = p + dataLen - 1;
// While end of data not reached
while (p < pEnd)
{
// Get length of next data item
adLen = *p++;
if (adLen > 0)
{
adType = *p;
// If AD type is MANUFACTURER_SPECIFIC
if(adType == GAP_ADTYPE_MANUFACTURER_SPECIFIC)
{
p++;
adLen--;
if((*p == 'B') &&
(*(p+1) == 'P') &&
(*(p+2) == 'H') &&
(*(p+3) == 'S')){
return TRUE;
}
// Handle possible erroneous extra byte in advertisement data
if (adLen == 1)
{
p++;
}
}
else
{
// Go to next item
p += adLen;
}
}
}
// No name found
return FALSE;
}
/*********************************************************************
* @fn SimpleBLECentral_addDeviceInfo
*
@@ -2240,9 +2284,6 @@ static void SimpleBLECentral_addDeviceInfo(uint8_t *pAddr, uint8_t addrType)
// Add addr to scan result list
memcpy(devList[scanRes].addr, pAddr, B_ADDR_LEN);
devList[scanRes].addrType = addrType;
// Increment scan result count
scanRes++;
}
}
@@ -2407,23 +2448,21 @@ static void SimepleBLECentral_getDeviceinfo(uint8_t i, uint8_t *pEvtData, uint8_
}
static void SimepleBLECentral_respDeviceinfo(uint8_t i, uint8_t *pEvtData, uint8_t dataLen){
if ((*(uint32_t *)devList[1].company_code == (uint32_t)COMPANY_CODE_BPHS)){
uint8_t ret_info_buf[RET_INFO_BUF_SIZE]={0};
uint8_t ret_info_buf[RET_INFO_BUF_SIZE]={0};
struct scan_packet_hdr_t scan_packet_hdr;
uint8_t index = 0;
struct scan_packet_hdr_t scan_packet_hdr;
uint8_t index = 0;
scan_packet_hdr.scan_res_hdr = 4;
scan_packet_hdr.scan_res_cnt = scanRes;
scan_packet_hdr.pyld_len = DEV_INFO_LEN;
scan_packet_hdr.scan_res_hdr = 4;
scan_packet_hdr.scan_res_cnt = scanRes;
scan_packet_hdr.pyld_len = DEV_INFO_LEN;
memcpy(&ret_info_buf[index], &scan_packet_hdr, SCAN_RES_HDR_LEN);
index += SCAN_RES_HDR_LEN;
memcpy(&ret_info_buf[index], &scan_packet_hdr, SCAN_RES_HDR_LEN);
index += SCAN_RES_HDR_LEN;
memcpy(&ret_info_buf[index], &devList[i], DEV_INFO_LEN); //name 20byte, number0 kill
memcpy(&ret_info_buf[index], &devList[i], DEV_INFO_LEN); //name 20byte, number0 kill
UART_write(uart_handle, ret_info_buf, RET_INFO_BUF_SIZE);
}
UART_write(uart_handle, ret_info_buf, RET_INFO_BUF_SIZE);
}
/*********************************************************************
@@ -2567,3 +2606,7 @@ static uint8_t SimpleBLECentral_enqueueMsg(uint8_t event, uint8_t status,
}
return FALSE;
}
void ext_call_sem(){
Semaphore_post(sem);
}