Firefly开源社区

标题: 写了个简单的小应用FireflyLeds.apk [打印本页]

作者: carlinluo    时间: 2015-3-27 14:57
标题: 写了个简单的小应用FireflyLeds.apk
本帖最后由 carlinluo 于 2015-3-27 15:06 编辑

可以运行在Firefly开发板上,但是默认固件的未修改LED驱动需要加权限,不然打不开LED,如下(假如你已经安装adb 工具)
1.加权限
adb shell chmod 666 sys/class/leds/firefly:blue:power/brightness
adb shell chmod 666 sys/class/leds/firefly:yellow:user/brightness
2.安装apk,可以adb 安装(注意路径),可以手动安装
adb install d:\FireflyLeds.apk
3.就3个按钮,控制firefly板子上的黄灯和蓝灯,还有个自动控制的按钮,打开之后板子上的黄色和蓝色灯轮流闪动。


4.主要代码,很简单了,俺只是个菜鸟,高手请忽略。。。

4-1 LedsActivity
  1. package com.example.luobo.fireflyleds;

  2. import android.content.Intent;
  3. import android.os.Handler;
  4. import android.os.Message;
  5. import android.support.v7.app.ActionBarActivity;
  6. import android.os.Bundle;
  7. import android.util.Log;
  8. import android.view.Menu;
  9. import android.view.MenuItem;
  10. import android.widget.CompoundButton;
  11. import android.widget.ToggleButton;


  12. public class LedsActivity extends ActionBarActivity {


  13. private final static String TAG="LedsActivity";
  14. public ToggleButton bluebt;
  15. public ToggleButton yellowbt;
  16. public ToggleButton autobt;
  17. public LedsCtrl ledsctrl;
  18. Intent intent=null;

  19. @Override
  20. protected void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. ledsctrl=new LedsCtrl();
  23. setContentView(R.layout.activity_leds);



  24. bluebt=(ToggleButton)findViewById(R.id.toggleButton);
  25. bluebt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  26. @Override
  27. public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

  28. bluebt.setChecked(isChecked);
  29. ledsctrl.LedsOnOff(ledsctrl.BlueLed,isChecked);

  30. }
  31. });

  32. yellowbt=(ToggleButton)findViewById(R.id.toggleButton2);
  33. yellowbt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  34. @Override
  35. public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

  36. yellowbt.setChecked(isChecked);
  37. ledsctrl.LedsOnOff(ledsctrl.YllowLed,isChecked);


  38. }
  39. });

  40. autobt=(ToggleButton)findViewById(R.id.toggleButton3);
  41. autobt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  42. @Override
  43. public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

  44. autobt.setChecked(isChecked);
  45. if(isChecked)
  46. handler.post(runnable);
  47. else
  48. handler.removeCallbacks(runnable);


  49. }
  50. });
  51. //intent = new Intent("com.example.luobo.fireflyleds.LedsService");
  52. //startService(intent);


  53. }


  54. Handler handler = new Handler(){

  55. boolean isOn;
  56. @Override
  57. public void handleMessage (Message msg){


  58. isOn=msg.getData().getBoolean("onoff");
  59. //Log.d(TAG,"handleMessage----->"+isOn);

  60. yellowbt.setChecked(isOn);
  61. ledsctrl.LedsOnOff(ledsctrl.YllowLed,isOn);
  62. bluebt.setChecked(!isOn);
  63. ledsctrl.LedsOnOff(ledsctrl.BlueLed,!isOn);

  64. }
  65. };


  66. boolean onoff;
  67. Runnable runnable = new Runnable() {
  68. Bundle data;

  69. @Override
  70. public void run() {

  71. Message msg=handler.obtainMessage();
  72. data =new Bundle();

  73. //Log.d(TAG,"----->Runnable...");


  74. onoff=!onoff;
  75. data.putBoolean("onoff",onoff);
  76. msg.setData(data);
  77. handler.sendMessage(msg);
  78. handler.postDelayed(runnable, 300);
  79. }
  80. };

  81. @Override
  82. public boolean onCreateOptionsMenu(Menu menu) {
  83. // Inflate the menu; this adds items to the action bar if it is present.
  84. getMenuInflater().inflate(R.menu.menu_leds, menu);
  85. return true;
  86. }

  87. @Override
  88. public boolean onOptionsItemSelected(MenuItem item) {
  89. // Handle action bar item clicks here. The action bar will
  90. // automatically handle clicks on the Home/Up button, so long
  91. // as you specify a parent activity in AndroidManifest.xml.
  92. int id = item.getItemId();

  93. //noinspection SimplifiableIfStatement
  94. if (id == R.id.action_settings) {
  95. return true;
  96. }

  97. return super.onOptionsItemSelected(item);
  98. }
  99. @Override
  100. public void onDestroy(){
  101. super.onDestroy();

  102. if(intent != null){
  103. stopService(intent);
  104. }
  105. }
  106. }
复制代码
4-2 LedsCtrl
  1. package com.example.luobo.fireflyleds;

  2. import android.util.Log;
  3. import java.io.BufferedOutputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.OutputStream;


  8. /**
  9. * Created by luobo on 15-3-26.
  10. */
  11. public class LedsCtrl {

  12. public final static String TAG="LedsCtrl";
  13. public final static String BLEDPATH="sys/class/leds/firefly:blue:power/brightness";
  14. public final static String YLEDPATH="sys/class/leds/firefly:yellow:user/brightness";
  15. public final int BlueLed=0;
  16. public final int YllowLed=1;

  17. protected LedsCtrl(){
  18. Log.d(TAG,"----->");

  19. }
  20. public void LedsOnOff(int LedID ,boolean on){

  21. //Log.d(TAG,"----->LedsOnOff="+on);


  22. OutputStream out = null;
  23. String ledpath=null;

  24. try {
  25. if (LedID==BlueLed)
  26. ledpath=BLEDPATH;
  27. else
  28. ledpath=YLEDPATH;
  29. out = new BufferedOutputStream(new FileOutputStream(ledpath));
  30. byte[] led_off = "000".getBytes();
  31. byte[] led_on = "255".getBytes();
  32. if(on)
  33. out.write(led_on);
  34. else
  35. out.write(led_off);

  36. out.close();
  37. } catch (FileNotFoundException e) {
  38. e.printStackTrace();
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. }

  42. }
  43. }
复制代码








FireflyLeds.zip

754.68 KB, 下载次数: 128, 下载积分: 灯泡 -1 , 经验 -1


作者: zhansb    时间: 2015-3-27 16:55
必须顶{:3_48:}
作者: tangyu1121    时间: 2015-3-27 16:59
学习学习!MARK!
作者: schlin2999    时间: 2015-4-7 19:40
可以将源码提供下吗?
作者: carlinluo    时间: 2015-4-8 18:14
schlin2999 发表于 2015-4-7 19:40
可以将源码提供下吗?

上面就是,你需要整改工程包吗
作者: schlin2999    时间: 2015-4-8 20:21
carlinluo 发表于 2015-4-8 18:14
上面就是,你需要整改工程包吗

如果能提供整个源码包更好学习点,可以吗?
作者: carlinluo    时间: 2015-4-9 09:38
http://share.weiyun.com/0a584154e5bae64a817af34a7eacc0cc可以从这下载
作者: pmos1981    时间: 2016-4-26 13:52
本帖最后由 pmos1981 于 2016-4-26 14:39 编辑

請問每次重開機就要 1.加权限
adb shell chmod 666 sys/class/leds/firefly:blue:power/brightness
adb shell chmod 666 sys/class/leds/firefly:yellow:user/brightness

有沒有直接寫死的方法?
不用再次加权限
謝謝
PS: 只要給 0 or 1 就好了


作者: kallos    时间: 2016-5-6 17:16
一直有疑问,开发安卓应用,使用android studio的话,sdk是使用从google下载的么?还是要指定fireprime的sdk?请不吝敕教!非常感谢!
作者: madman    时间: 2016-5-7 21:56
pmos1981 发表于 2016-4-26 13:52
請問每次重開機就要 1.加权限
adb shell chmod 666 sys/class/leds/firefly:blue:power/brightness
adb s ...

写死是在驱动里改,大概是叫driver下led-class.c里面
作者: 雪化水    时间: 2016-5-23 02:05
kallos 发表于 2016-5-6 17:16
一直有疑问,开发安卓应用,使用android studio的话,sdk是使用从google下载的么?还是要指定fireprime的sd ...

google上下.android studio和sdk是2个东西。sdk需要到官网上下。或者问别人复制一个,毕竟翻墙麻烦,sdk也蛮大的。android studio是IDE,你也可以用eclipse+ADT或者IntelliJ IDEA

另,感谢lz分享,正在研究怎么在app里面操作GPIO,可以学习下你的源码
作者: shenhai06    时间: 2016-7-11 14:26
很好,谢谢!
作者: xiaofei    时间: 2016-7-26 10:40
顶一个high
作者: 金子逸    时间: 2016-10-10 18:07
顶顶顶
作者: guoke5    时间: 2016-10-10 23:37
pmos1981 发表于 2016-4-26 13:52
請問每次重開機就要 1.加权限
adb shell chmod 666 sys/class/leds/firefly:blue:power/brightness
adb s ...

可以在init.rc里面处理




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1