第八章 让开发板发出声音,蜂鸣器驱动 心得体会

8让开发板发出声音,蜂鸣器驱动

心得体会

通过学习Android深度探索(卷1)HAL与驱动开发的第8章 让开发板发出声音,蜂鸣器驱动,我加深对驱动的认识。以下主要是我对本节实验和参考在Linux驱动开发中使用PWM控制蜂鸣器中的一些见解。

先编写一个简单的蜂鸣器驱动程序,根据开发板上的硬件IO接口和Android驱动规范,在kernel中的driver目录中新建一个Buzzer文件,新建一个buzzer.c的源文


在目录下创建一个Makefile文件

先运行make clean命令清楚到编译生成的一些工程文件,执行make命令,重新编译驱动程序。将编译生成的buzzer.ko内核镜像文件拷贝出来,adb push buzzer.ko /fpga/moudles

然后插入内核镜像文件到系统中,insmod buzzer.ko,并且装载设备驱动程序,mknod  /dev/buzzer c 248 0

现在就可以在库层直接编写C/C++文件来调用这个驱动程序,这个可以在ubuntu中安装NDK编译环境,新建buzzer文件,编译生成一个库文件,那样就可以直接在应用层使用这个库提供的JNI方法,那样调用会显得更加的简单,当然这个调用方式google并不提倡,我在这里只是想展示这种调用方式而已

构建一个jni工程,新建一个buzzer.c的源文件

进行NDK编译,生成libbuzzer.so,这个库就可以直接在应用层进行调用

 

 

 在eclipse中编写应用程序直接调用这个库,实现对底层驱动的调用!!

 主要源代码:

  1. package com.fantasy.buzzer;  
  2. //@ canjianfantasy 2013.6.22  
  3. import android.os.Bundle;  
  4. import android.app.Activity;  
  5. import android.view.Menu;  
  6. import android.view.View;  
  7. import android.widget.Button;  
  8.   
  9. public class BuzzerActivity extends Activity {  
  10. 10.     Button BuzzerButton;  
  11. 11.     int BuzzerData =0;  
  12. 12.       
  13. 13.     @Override  
  14. 14.     protected void onCreate(Bundle savedInstanceState) {  
  15. 15.         super.onCreate(savedInstanceState);  
  16. 16.         setContentView(R.layout.activity_buzzer);  
  17. 17.           

18. //      BuzzerControl(BuzzerData);  

  1. 19.         BuzzerButton =(Button)findViewById(R.id.On);  
  2. 20.           
  3. 21.         BuzzerButton.setOnClickListener(new Button.OnClickListener() {  
  4. 22.           
  5. 23.             public void onClick(View v) {  
  6. 24.                 // TODO Auto-generated method stub  
  7. 25.                 if(BuzzerData == 0){  
  8. 26.                     BuzzerData = 1;  
  9. 27.                     BuzzerButton.setText("Buzzer off");  
  10. 28.                 }  
  11. 29.                 else{  
  12. 30.                     BuzzerData = 0;  
  13. 31.                     BuzzerButton.setText("Buzzer On");  
  14. 32.                 }  

33. //              BuzzerControl(BuzzerData);  

  1. 34.             }  
  2. 35.         });  
  3. 36.           
  4. 37.     }  
  5. 38.     static{  
  6. 39.         System.loadLibrary("buzzer");  
  7. 40.     }  
  8. 41.     public native int BuzzerControl(int Value);  
  9. 42.       
  10. 43.     @Override  
  11. 44.     public boolean onCreateOptionsMenu(Menu menu) {  
  12. 45.         // Inflate the menu; this adds items to the action bar if it is present.  
  13. 46.         getMenuInflater().inflate(R.menu.activity_buzzer, menu);  
  14. 47.         return true;  
  15. 48.     }  
  16. 49.   

50. }

然后运行,在开发板上查看运行结果。。。

 

http://www.cnblogs.com/yun123456/

posted on 2016-05-31 20:47  愈走云声  阅读(1155)  评论(0编辑  收藏  举报