SensorTile物联网开发套件(5)——DIY相互通信
往期回顾:
SensorTile物联网开发套件(4)——DIY遥控LED
先上效果图:
图中显示的效果是,发送字符串数据给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