Advertisement
Guest User

Untitled

a guest
Dec 13th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.42 KB | None | 0 0
  1. package com.example.ftdi;
  2.  
  3. import android.content.BroadcastReceiver;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.hardware.usb.UsbManager;
  7. import android.media.AudioManager;
  8. import android.os.Bundle;
  9. import android.os.Handler;
  10. import android.util.Log;
  11. import com.google.android.material.floatingactionbutton.FloatingActionButton;
  12. import com.google.android.material.snackbar.Snackbar;
  13. import androidx.appcompat.app.AppCompatActivity;
  14. import androidx.appcompat.widget.Toolbar;
  15. import android.view.View;
  16. import android.view.Menu;
  17. import android.view.MenuItem;
  18. import android.widget.Button;
  19. import android.widget.EditText;
  20. import android.widget.TextView;
  21.  
  22. import com.ftdi.j2xx.FT_Device;
  23. import com.ftdi.j2xx.D2xxManager;
  24.  
  25. import android.app.Activity;
  26. import android.content.BroadcastReceiver;
  27. import android.content.Context;
  28. import android.content.Intent;
  29. import android.content.IntentFilter;
  30. import android.hardware.usb.UsbManager;
  31. import android.os.Bundle;
  32. import android.os.Handler;
  33. import android.util.Log;
  34. import android.view.View;
  35.  
  36. import in.excogitation.zentone.*;
  37. import in.excogitation.zentone.library.ToneStoppedListener;
  38. import in.excogitation.zentone.library.ZenTone;
  39.  
  40. //Test change XDD
  41.  
  42. public class MainActivity extends Activity {
  43. private final static String TAG = "FPGA_FIFO Activity";
  44.  
  45. private static D2xxManager ftD2xx = null;
  46. private FT_Device ftDev;
  47.  
  48. static final int READBUF_SIZE = 256;
  49. byte[] rbuf = new byte[READBUF_SIZE];
  50. char[] rchar = new char[READBUF_SIZE];
  51. int mReadSize=0;
  52.  
  53. TextView tvRead;
  54. EditText etWrite;
  55. Button btOpen;
  56. Button btWrite;
  57. Button btClose;
  58. EditText sampleData;
  59.  
  60. boolean mThreadIsStopped = true;
  61. Handler mHandler = new Handler();
  62. Thread mThread;
  63.  
  64.  
  65. @Override
  66. protected void onCreate(Bundle savedInstanceState) {
  67. super.onCreate(savedInstanceState);
  68. setContentView(R.layout.activity_main);
  69.  
  70. tvRead = (TextView) findViewById(R.id.tvRead);
  71. etWrite = (EditText) findViewById(R.id.etWrite);
  72.  
  73. btOpen = (Button) findViewById(R.id.btOpen);
  74. btWrite = (Button) findViewById(R.id.btWrite);
  75. btClose = (Button) findViewById(R.id.btClose);
  76.  
  77. sampleData = (EditText) findViewById(R.id.sampleData);
  78.  
  79. updateView(false);
  80.  
  81. try {
  82. ftD2xx = D2xxManager.getInstance(this);
  83. } catch (D2xxManager.D2xxException ex) {
  84. Log.e(TAG,ex.toString());
  85. }
  86.  
  87. IntentFilter filter = new IntentFilter();
  88. filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
  89. filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
  90. registerReceiver(mUsbReceiver, filter);
  91.  
  92. }
  93.  
  94.  
  95. //Sample button for tone generation
  96.  
  97. public void onClickAAA(View v){
  98. ZenTone.getInstance().generate(660, 1, 1.0f, new ToneStoppedListener() {
  99. @Override
  100. public void onToneStopped() {
  101. Boolean isPlaying = false;
  102. }
  103. });
  104. }
  105.  
  106. public void sendSample(View v){
  107. feedback(sampleData.getText().toString());
  108. //tvRead.append(sampleData.getText().toString());
  109. }
  110.  
  111. public void onClickOpen(View v) {
  112. openDevice();
  113. }
  114.  
  115.  
  116. public void onClickWrite(View v) {
  117. if(ftDev == null) {
  118. return;
  119. }
  120.  
  121. synchronized (ftDev) {
  122. if(ftDev.isOpen() == false) {
  123. Log.e(TAG, "onClickWrite : Device is not open");
  124. return;
  125. }
  126.  
  127. ftDev.setLatencyTimer((byte)16);
  128.  
  129. String writeString = "s";
  130. byte[] writeByte = writeString.getBytes();
  131. ftDev.write(writeByte, writeString.length());
  132. }
  133. }
  134.  
  135. public void onClickClose(View v) {
  136. closeDevice();
  137. }
  138.  
  139. @Override
  140. public void onDestroy() {
  141. super.onDestroy();
  142. mThreadIsStopped = true;
  143. unregisterReceiver(mUsbReceiver);
  144. }
  145.  
  146. /* @Override
  147. public boolean onCreateOptionsMenu(Menu menu) {
  148. // Inflate the menu; this adds items to the action bar if it is present.
  149. getMenuInflater().inflate(R.menu.main, menu);
  150. return true;
  151. }
  152. */
  153.  
  154. private void openDevice() {
  155. if(ftDev != null) {
  156. if(ftDev.isOpen()) {
  157. if(mThreadIsStopped) {
  158. updateView(true);
  159. SetConfig(57600, (byte)8, (byte)1, (byte)0, (byte)0);
  160. ftDev.purge((byte) (D2xxManager.FT_PURGE_TX | D2xxManager.FT_PURGE_RX));
  161. ftDev.restartInTask();
  162. new Thread(mLoop).start();
  163. }
  164. return;
  165. }
  166. }
  167.  
  168. int devCount = 0;
  169. devCount = ftD2xx.createDeviceInfoList(this);
  170.  
  171. Log.d(TAG, "Device number : "+ Integer.toString(devCount));
  172.  
  173. D2xxManager.FtDeviceInfoListNode[] deviceList = new D2xxManager.FtDeviceInfoListNode[devCount];
  174. ftD2xx.getDeviceInfoList(devCount, deviceList);
  175.  
  176. if(devCount <= 0) {
  177. return;
  178. }
  179.  
  180. if(ftDev == null) {
  181. ftDev = ftD2xx.openByIndex(this, 0);
  182. } else {
  183. synchronized (ftDev) {
  184. ftDev = ftD2xx.openByIndex(this, 0);
  185. }
  186. }
  187.  
  188. if(ftDev.isOpen()) {
  189. if(mThreadIsStopped) {
  190. updateView(true);
  191. SetConfig(57600, (byte)8, (byte)1, (byte)0, (byte)0);
  192. ftDev.purge((byte) (D2xxManager.FT_PURGE_TX | D2xxManager.FT_PURGE_RX));
  193. ftDev.restartInTask();
  194. new Thread(mLoop).start();
  195. }
  196. }
  197. }
  198.  
  199. private Runnable mLoop = new Runnable() {
  200. @Override
  201. public void run() {
  202. int i;
  203. int readSize;
  204. mThreadIsStopped = false;
  205. while(true) {
  206. if(mThreadIsStopped) {
  207. break;
  208. }
  209.  
  210. /* try {
  211. Thread.sleep(50);
  212. } catch (InterruptedException e) {
  213. }
  214. */
  215. synchronized (ftDev) {
  216. readSize = ftDev.getQueueStatus();
  217. if(readSize>0) {
  218. mReadSize = readSize;
  219. if(mReadSize > READBUF_SIZE) {
  220. mReadSize = READBUF_SIZE;
  221. }
  222. ftDev.read(rbuf,mReadSize);
  223.  
  224. // cannot use System.arraycopy
  225. for(i=0; i<mReadSize; i++) {
  226. rchar[i] = (char)rbuf[i];
  227. }
  228. mHandler.post(new Runnable() {
  229. @Override
  230. public void run() {
  231. feedback(String.copyValueOf(rchar,0,mReadSize));
  232. tvRead.append(String.copyValueOf(rchar,0,mReadSize)); // Here's the line that updates the data stream
  233.  
  234. }
  235. });
  236.  
  237. } // end of if(readSize>0)
  238. } // end of synchronized
  239. }
  240. }
  241. };
  242.  
  243. public void feedback(String input){
  244. String[] stringval = input.split(",");
  245. int[] values = {0,0,0,0,0};
  246. for(int i = 0; i < 5; i++){
  247. values[i] = Integer.parseInt(stringval[i]);
  248. } // Data values are now split CSV style
  249.  
  250. if(values[0] <= 100){
  251. ZenTone.getInstance().generate(values[0]*10, 1, 1.0f, new ToneStoppedListener() {
  252. @Override
  253. public void onToneStopped() {
  254. Boolean isPlaying = false;
  255. }
  256. });
  257. }
  258. }
  259.  
  260. private void closeDevice() {
  261. mThreadIsStopped = true;
  262. updateView(false);
  263. if(ftDev != null) {
  264. ftDev.close();
  265. }
  266. }
  267.  
  268. private void updateView(boolean on) {
  269. if(on) {
  270. btOpen.setEnabled(false);
  271. btWrite.setEnabled(true);
  272. btClose.setEnabled(true);
  273. } else {
  274. btOpen.setEnabled(true);
  275. btWrite.setEnabled(false);
  276. btClose.setEnabled(false);
  277. }
  278. }
  279.  
  280. public void SetConfig(int baud, byte dataBits, byte stopBits, byte parity, byte flowControl) {
  281. if (ftDev.isOpen() == false) {
  282. Log.e(TAG, "SetConfig: device not open");
  283. return;
  284. }
  285.  
  286. // configure our port
  287. // reset to UART mode for 232 devices
  288. ftDev.setBitMode((byte) 0, D2xxManager.FT_BITMODE_RESET);
  289.  
  290. ftDev.setBaudRate(baud);
  291.  
  292. switch (dataBits) {
  293. case 7:
  294. dataBits = D2xxManager.FT_DATA_BITS_7;
  295. break;
  296. case 8:
  297. dataBits = D2xxManager.FT_DATA_BITS_8;
  298. break;
  299. default:
  300. dataBits = D2xxManager.FT_DATA_BITS_8;
  301. break;
  302. }
  303.  
  304. switch (stopBits) {
  305. case 1:
  306. stopBits = D2xxManager.FT_STOP_BITS_1;
  307. break;
  308. case 2:
  309. stopBits = D2xxManager.FT_STOP_BITS_2;
  310. break;
  311. default:
  312. stopBits = D2xxManager.FT_STOP_BITS_1;
  313. break;
  314. }
  315.  
  316. switch (parity) {
  317. case 0:
  318. parity = D2xxManager.FT_PARITY_NONE;
  319. break;
  320. case 1:
  321. parity = D2xxManager.FT_PARITY_ODD;
  322. break;
  323. case 2:
  324. parity = D2xxManager.FT_PARITY_EVEN;
  325. break;
  326. case 3:
  327. parity = D2xxManager.FT_PARITY_MARK;
  328. break;
  329. case 4:
  330. parity = D2xxManager.FT_PARITY_SPACE;
  331. break;
  332. default:
  333. parity = D2xxManager.FT_PARITY_NONE;
  334. break;
  335. }
  336.  
  337. ftDev.setDataCharacteristics(dataBits, stopBits, parity);
  338.  
  339. short flowCtrlSetting;
  340. switch (flowControl) {
  341. case 0:
  342. flowCtrlSetting = D2xxManager.FT_FLOW_NONE;
  343. break;
  344. case 1:
  345. flowCtrlSetting = D2xxManager.FT_FLOW_RTS_CTS;
  346. break;
  347. case 2:
  348. flowCtrlSetting = D2xxManager.FT_FLOW_DTR_DSR;
  349. break;
  350. case 3:
  351. flowCtrlSetting = D2xxManager.FT_FLOW_XON_XOFF;
  352. break;
  353. default:
  354. flowCtrlSetting = D2xxManager.FT_FLOW_NONE;
  355. break;
  356. }
  357.  
  358. // TODO : flow ctrl: XOFF/XOM
  359. // TODO : flow ctrl: XOFF/XOM
  360. ftDev.setFlowControl(flowCtrlSetting, (byte) 0x0b, (byte) 0x0d);
  361. }
  362.  
  363. // done when ACTION_USB_DEVICE_ATTACHED
  364. @Override
  365. protected void onNewIntent(Intent intent) {
  366. openDevice();
  367. };
  368.  
  369. BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
  370. public void onReceive(Context context, Intent intent) {
  371. String action = intent.getAction();
  372. if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
  373. // never come here(when attached, go to onNewIntent)
  374. openDevice();
  375. } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
  376. closeDevice();
  377. }
  378. }
  379. };
  380.  
  381. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement