`

JNI基础实验一:调用.so文件--友善之臂Tiny210 android 串口/pwm/ADC/LED

 
阅读更多

1.TextView 滚动拉动

2.byte 转 Strings

3. Thread

4.Handle

 

<?xml version="1.0" encoding="UTF-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/receiveTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Title" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<Button
android:id="@+id/sendSerial"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Send" />

<Button
android:id="@+id/clearButton"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Clear" />

<Button
android:id="@+id/openSerial"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OPEN" />

<Button
android:id="@+id/closeSerial"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Close" />
</LinearLayout>


<EditText
android:id="@+id/sendEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" >
</EditText>


<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/showTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=" "
android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>
</ScrollView>

</LinearLayout>

 

 

package com.friendlyarm.LEDDemo;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.EditText;
import android.widget.Toast;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.Button;
import java.util.Arrays;
import android.widget.TextView;

import com.friendlyarm.AndroidSDK.HardwareControler;

public class serial extends Activity{
private TextView fdText;
private TextView showText;
private EditText sendEditText;

private Button closeSerial;
private Button sendSerial;
private Button openSerial,clearShow;
private int fd;

protected static final int SHOWDATA = 0x1234;
protected static final int SENDOK = 0x1235;
public Handler mHandler;

private boolean threadDisable=false;
String recdata;

/**
*接收函数
*/

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.serial);

fdText=(TextView) findViewById(R.id.receiveTextView);
showText=(TextView) findViewById(R.id.showTextView);

sendEditText=(EditText) findViewById(R.id.sendEditText);
closeSerial = (Button) findViewById(R.id.closeSerial);
sendSerial = (Button) findViewById(R.id.sendSerial);
openSerial = (Button) findViewById(R.id.openSerial);
clearShow = (Button) findViewById(R.id.clearButton);

closeSerial.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
HardwareControler.close(fd);
fdText.setText("关闭串口");
openSerial.setEnabled(true);
threadDisable = true;
}
});
openSerial.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
//TODO Auto-generated method stub
fd=HardwareControler.openSerialPort("/dev/s3c2410_serial3",115200,8,1);
if(fd !=-1)
Toast.makeText(serial.this,"OPEN SUCCESS", Toast.LENGTH_SHORT).show();
else
Toast.makeText(serial.this,"OPEN FAIL```", Toast.LENGTH_SHORT).show();
fdText.setText(Integer.toString(fd));
fdText.setText(fdText.getText() + "打开线程");
openSerial.setEnabled(false);

new Thread(new Runnable() {
@Override
public void run() {
while (!threadDisable) {

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}

int m=HardwareControler.select(fd,0,0);
if(m==1)
{
byte[] buf =new byte[1024];
try {
Thread.sleep(10);
} catch(InterruptedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}

int n = HardwareControler.read(fd, buf, 1024);
String ss = new String(buf,0,n);//将bytes转为 String
Message s = new Message();//定义一个message的变量m
s.what = serial.SHOWDATA;//消息的标记GUINOTIFIER在前面定义的
s.obj =ss; //将要传送的数据传递给 m.obj
serial.this.mHandler.sendMessage(s);//传送消息
}
}
}
}).start();

}
});
/**
* 发送按钮
*/
sendSerial.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
SendSerial();
}
});

clearShow.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v){
showText.setText("");
}
});

//创建handler
mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {//得到Handle的通知了 这个时候你可以做相应的操作
case serial.SHOWDATA://tcp_server是Activity的类名
//receivedata_tv.setText("");//清空textView
//recv_tv.setText(msg.obj.toString());//设置textView显示内容 每次都清除上次的显示
showText.setMovementMethod(new ScrollingMovementMethod());
showText.append(""+ msg.obj.toString());//设置textView显示内容 下一行接着显示
break;
// case serial.SENDOK:
//.setText("");
}
super.handleMessage(msg);
}
};
}

public void SendSerial(){
HardwareControler.write(fd,sendEditText.getText().toString().getBytes());
sendEditText.setText("");
};
}

package com.friendlyarm.AndroidSDK;
import android.util.Log;

public class HardwareControler
{
/* Serial Port */
static public native int openSerialPort( String devName, long baud, int dataBits, int stopBits );

/* LED */
static public native int setLedState( int ledID, int ledState );

/* PWM */
static public native int PWMPlay(int frequency);
static public native int PWMStop();

/* ADC */
static public native int readADC();

/* I2C */
static public native int openI2CDevice();
static public native int writeByteDataToI2C(int fd, int pos, byte byteData);
static public native int readByteDataFromI2C(int fd, int pos);

/* 通用接口 */
static public native int write(int fd, byte[] data);
static public native int read(int fd, byte[] buf, int len);
static public native int select(int fd, int sec, int usec);
static public native void close(int fd);

static {
try {
System.loadLibrary("friendlyarm-hardware");
} catch (UnsatisfiedLinkError e) {
Log.d("HardwareControler", "libfriendlyarm-hardware library not found!");
}
}
}

 

分享到:
评论

相关推荐

    zstd-jni-1.3.8-1-API文档-中英对照版.zip

    赠送jar包:zstd-jni-1.3.8-1.jar; 赠送原API文档:zstd-jni-1.3.8-1-javadoc.jar; 赠送源代码:zstd-jni-1.3.8-1-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.3.8-1.pom; 包含翻译后的API文档:zstd-jni-...

    Android通过JNI调用.so动态库

    教你如何生成.h文件,使用window通过NDK编译出.so文件,如何通过JNI调用so文件

    zstd-jni-1.4.3-1-API文档-中文版.zip

    赠送jar包:zstd-jni-1.4.3-1.jar; 赠送原API文档:zstd-jni-1.4.3-1-javadoc.jar; 赠送源代码:zstd-jni-1.4.3-1-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.4.3-1.pom; 包含翻译后的API文档:zstd-jni-...

    zstd-jni-1.4.3-1-API文档-中英对照版.zip

    赠送jar包:zstd-jni-1.4.3-1.jar; 赠送原API文档:zstd-jni-1.4.3-1-javadoc.jar; 赠送源代码:zstd-jni-1.4.3-1-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.4.3-1.pom; 包含翻译后的API文档:zstd-jni-...

    zstd-jni-1.4.4-3-API文档-中英对照版.zip

    赠送jar包:zstd-jni-1.4.4-3.jar; 赠送原API文档:zstd-jni-1.4.4-3-javadoc.jar; 赠送源代码:zstd-jni-1.4.4-3-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.4.4-3.pom; 包含翻译后的API文档:zstd-jni-...

    zstd-jni-1.3.8-1-API文档-中文版.zip

    赠送jar包:zstd-jni-1.3.8-1.jar; 赠送原API文档:zstd-jni-1.3.8-1-javadoc.jar; 赠送源代码:zstd-jni-1.3.8-1-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.3.8-1.pom; 包含翻译后的API文档:zstd-jni-...

    jni.h文件.7z

    jni.h文件jni.h文件jni.h文件jni.h文件jni.h文件jni.h文件

    springboot+jna/jni调用动态so/dll库

    springboot+jna/jni调用动态so/dll库

    libagora-rtc-sdk-jni.so

    面向开发者的libagora-rtc-sdk-jni.so资源文件,方便各位下载使用libagora-rtc-sdk-jni.so

    sigar libsigar-amd64-linux.so sigar-amd64-winnt.dll

    sigar中有很多的实现是通过jni实现的,所以运行在不同的平台上需要加载对应的本地动态链接库,这里提供以下动态链接库资源: * Linux AMD/Intel 32位 libsigar-x86-linux.so * Linux AMD/Intel 64位 libsigar-amd...

    android增量更新

    android 增量更新 bsdiff\bspatch库编译 具体思路参考 ...Prebuilt : libbz.a &lt;= jni/bsdiff/./../bzip/ SharedLibrary : libbsdiffjni.so Install : libbsdiffjni.so =&gt; libs/armeabi/libbsdiffjni.so

    zstd-jni-1.4.4-3-API文档-中文版.zip

    赠送jar包:zstd-jni-1.4.4-3.jar; 赠送原API文档:zstd-jni-1.4.4-3-javadoc.jar; 赠送源代码:zstd-jni-1.4.4-3-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.4.4-3.pom; 包含翻译后的API文档:zstd-jni-...

    zstd-jni-1.3.2-2-API文档-中文版.zip

    赠送jar包:zstd-jni-1.3.2-2.jar; 赠送原API文档:zstd-jni-1.3.2-2-javadoc.jar; 赠送源代码:zstd-jni-1.3.2-2-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.3.2-2.pom; 包含翻译后的API文档:zstd-jni-...

    android-aes-jni, 用于 jni& Java的Android AES示例.zip

    android-aes-jni, 用于 jni& Java的Android AES示例 android-aes-jni git clone https://github.com/panxw/android-aes-jni.git cd android-aes-jni ndk-build

    zstd-jni-1.3.2-2-API文档-中英对照版.zip

    赠送jar包:zstd-jni-1.3.2-2.jar; 赠送原API文档:zstd-jni-1.3.2-2-javadoc.jar; 赠送源代码:zstd-jni-1.3.2-2-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.3.2-2.pom; 包含翻译后的API文档:zstd-jni-...

    Android使用JNI调用Python so解释器

    Android使用JNI调用Python so解释器

    简单jni实例调用第三方.so库

    简单jni实例调用第三方.so库

    JNI--java调用不同平台的动态链接库,dll,so,完美,全教程

    假如有一个现有的 .dll/.so 文件,假如使用 JNI 技术调用,我们首先需要另外使用 C 语言写一个 .dll/.so 共享库,使用 SUN 规定的数据结构替换 C 语言的数据结构,调用已有的 ? dll/so 中公布的函数。 然后再在 Java...

Global site tag (gtag.js) - Google Analytics