本帖最后由 lb8820265 于 2016-10-29 10:41 编辑
先上效果图:
图中显示的效果是,发送字符串数据给SensorTIle,SensorTIle收到后在字符串后加字符“1”发送给手机,手机收到后在字符串后加字符“2”并显示出来。
虽说SensorTIle提供各种接口函数,也提供许多的控制指令,而且也支持自己添加Feature类。但有时候我们想要更加自由些,这时候就需要两者可以相互通信,SDK提供了类似的功能叫做Debug Console,SDK-Example中实现了原数据的直接回传,这次就对这个功能做稍微的修改,主要是为了熟悉该修改哪个地方。
打开SDK工程,修改布局文件夹activity_debug_console.xml如下:
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginBottom="@dimen/activity_vertical_margin"
- android:layout_marginLeft="@dimen/activity_horizontal_margin"
- android:layout_marginRight="@dimen/activity_horizontal_margin"
- android:layout_marginTop="@dimen/activity_vertical_margin"
- tools:context="com.st.BlueSTApp.DebugConsoleActivity">
- <EditText
- android:id="@+id/Edit_Send"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toLeftOf="@+id/Btn_Send"
- android:layout_alignParentLeft="true"/>
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="send"
- android:onClick="onClick"
- android:layout_alignParentRight="true"
- android:id="@+id/Btn_Send" />
- <ScrollView
- android:id="@+id/consoleView"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_above="@+id/inputText"
- android:layout_below="@+id/Btn_Send"
- android:layout_centerHorizontal="true">
- <TextView
- android:id="@+id/deviceConsole"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
- </ScrollView>
- <EditText
- android:id="@+id/inputText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_centerHorizontal="true"
- android:enabled="false"
- android:imeOptions="actionSend"
- android:inputType="text"
- android:labelFor="@+id/deviceConsole"
- android:singleLine="true"/>
- </RelativeLayout>
复制代码 上面函数功能是添加一个按钮和一个文本编辑框控件。
然后找到DebugConsoleActivity类,声明编辑框变量:- private EditText mEditSend;
复制代码 在onCreat函数中绑定编辑框控件:- mEditSend=(EditText) findViewById(R.id.Edit_Send);
- 在onCreat函数外添加按钮响应函数:
- public void onClick(View view) {
- switch (view.getId()) {
- case R.id.Btn_Send:
- String toSend = mEditSend.getText().toString();
- sendMessage(toSend);
- break;
- }
- }
复制代码 在类中找到onStdOutReceived函数,修改如下:- public void onStdOutReceived(Debug debug, final String message) {
- appendMessage(message+'2', ConsoleType.OUTPUT);
- }//onStdOutReceived
复制代码 APP中的代码非常简单,获取文本编辑框中的字符串然后发送给SensorTile,然后在收到的字符串后面加上字符“2”。接下来使用KEIL打开BM1工程,找到sensor_service.c文件,其中有个很长的Attribute_Modified_CB函数,该函数的1530行处,原函数如下:- if(SendBackData)
- {
- Term_Update(value,data_length);
- }
复制代码 将其修改如下:- if(SendBackData) {
- uint8_t value[20];
- memcpy(value, (uint8_t*)att_data, data_length);
- value[data_length]='1';
- Term_Update(value,data_length+1);
- }
复制代码 这是收到Debug Console数据的处理函数,原函数是直接将收到数据发送回去,将其修改为在数据后面加字符“1”后发送。好啦,程序很简单,主要是熟悉流程,为以后更加复杂的应用打好基础。
本帖APP源码:https://github.com/flyloong/BlueSTSDK/tree/V1.0.1
本帖SensorTIle源码:https://github.com/flyloong/BlueMicrosystem1/tree/V1.0.0