Mobile-DARTS  1.1
BTS SNIR LaSalle Avignon 2021
Peripherique.java
Aller à la documentation de ce fichier.
1 package com.lasalle84.mobile_darts;
2 
3 import android.bluetooth.BluetoothDevice;
4 import android.bluetooth.BluetoothSocket;
5 import android.os.Bundle;
6 import android.os.Handler;
7 import android.os.Message;
8 import android.util.Log;
9 
10 import java.io.IOException;
11 import java.io.InputStream;
12 import java.io.OutputStream;
13 import java.util.UUID;
14 import java.util.concurrent.locks.ReentrantLock;
15 
28 public class Peripherique extends Thread
29 {
33  private final static String TAG = "_Peripherique_";
34  public final static String NOM_CIBLE ="cible-darts 2021";
35  public final static String NOM_ECRAN ="ecran-darts";
36  public final static int CODE_CONNEXION = 0;
37  public final static int CODE_RECEPTION = 1;
38  public final static int CODE_DECONNEXION = 2;
39  public final static int CODE_ERREUR_ENVOYER = -1;
40  public final static int CODE_ERREUR_RECEVOIR = -2;
41  public final static int CODE_ERREUR_CONNECTER = -3;
42  public final static int CODE_ERREUR_DECONNECTER = -4;
43 
47  private BluetoothDevice device;
48  private String nom;
49  private String adresse;
50  private Handler handlerActivite = null;
51  private BluetoothSocket socket;
52  private InputStream receiveStream = null;
53  private OutputStream sendStream = null;
55  private final ReentrantLock mutex = new ReentrantLock();
56 
62  public Peripherique(BluetoothDevice device, Handler handler)
63  {
64  Log.d(TAG,"[Peripherique] " + device.getName() + " : " + device.getAddress());
65  if(device != null)
66  {
67  this.device = device;
68  this.nom = device.getName();
69  this.adresse = device.getAddress();
70  setHandlerActivite(handler);
71  }
72  else
73  {
74  this.device = device;
75  this.nom = "Aucun";
76  this.adresse = "";
77  setHandlerActivite(handler);
78  }
79 
80  try
81  {
82  assert device != null;
83  socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
84  receiveStream = socket.getInputStream();
85  sendStream = socket.getOutputStream();
86  }
87  catch (IOException e)
88  {
89  e.printStackTrace();
90  socket = null;
91  }
92 
93  if(socket != null)
94  reception = new TReception(this, handlerActivite, receiveStream);
95  }
96 
102  public String getNom()
103  {
104  return nom;
105  }
106 
112  public String getAdresse()
113  {
114  return adresse;
115  }
116 
122  public boolean estConnecte()
123  {
124  if(device == null | socket == null)
125  return false;
126  return socket.isConnected();
127  }
128 
132  public void setHandlerActivite(Handler handler)
133  {
134  Log.d(TAG,"[setHandlerActivite] " + handler);
135  mutex.lock();
136  this.handlerActivite = handler;
137  if(reception != null)
138  reception.setHandlerActivite(handler);
139  mutex.unlock();
140  }
141 
146  public void connecter()
147  {
148  Log.d(TAG,"[connecter] " + device.getName() + " : " + device.getAddress());
149  new Thread()
150  {
151  @Override public void run()
152  {
153  try
154  {
155  socket.connect();
156 
157  envoyerMessageActivite(CODE_CONNEXION);
158 
159  // on démarre le thread de réception
160  reception.start();
161  Log.d(TAG,"connexion reussie " + getNom());
162 
163  }
164  catch (IOException e)
165  {
166  e.printStackTrace();
167  Log.d(TAG,"erreur connexion " + getNom());
168  envoyerMessageActivite(CODE_ERREUR_CONNECTER);
169  }
170  }
171  }.start();
172  }
173 
178  public void deconnecter()
179  {
180  Log.d(TAG,"[deconnecter] " + device.getName() + " : " + device.getAddress());
181  new Thread()
182  {
183  @Override public void run()
184  {
185  try
186  {
187  reception.arreter();
188  socket.close();
189  envoyerMessageActivite(CODE_DECONNEXION);
190  Log.d(TAG,"déconnexion reussie " + getNom());
191  }
192  catch (IOException e)
193  {
194  e.printStackTrace();
195  envoyerMessageActivite(CODE_ERREUR_DECONNECTER);
196  }
197  }
198  }.start();
199  }
200 
205  public void envoyer(final String data)
206  {
207  Log.d(TAG,"[envoyer] " + device.getName() + " : " + device.getAddress());
208  if(socket == null)
209  {
210  return;
211  }
212  new Thread()
213  {
214  @Override public void run()
215  {
216  try
217  {
218  if(socket.isConnected())
219  {
220  sendStream.write(data.getBytes());
221  sendStream.flush();
222  Log.d(TAG, "[envoyer] trame : " + data);
223  }
224 
225  }
226  catch (IOException e)
227  {
228  e.printStackTrace();
229  Log.d(TAG, "Erreur socket write : " + getNom());
230  envoyerMessageActivite(CODE_ERREUR_ENVOYER);
231  }
232  }
233  }.start();
234  }
235 
239  private void envoyerMessageActivite(int what)
240  {
241  if(handlerActivite == null)
242  return;
243  Message msg = Message.obtain();
244  msg.what = what;
245  Bundle b = new Bundle();
246  b.putString("nom", getNom());
247  b.putString("adresse", getAdresse());
248  msg.setData(b);
249  mutex.lock();
250  handlerActivite.sendMessage(msg);
251  mutex.unlock();
252  }
253 }
void setHandlerActivite(Handler handler)
String adresse
Adresse du peripherique bluetooth.
static final int CODE_DECONNEXION
Code de Deconnexion.
String nom
Nom du peripherique bluetooth.
La classe qui contient toute la gestion des periphériques.
boolean estConnecte()
Méthode qui retourne l'état de connexion'.
void arreter()
Arrêt du Thread permettant l'écoute de trame du périphérique Bluetooth.
OutputStream sendStream
Output du BLuetooth.
static final String NOM_ECRAN
Le nom du module Bluetooth de l'écran.
final ReentrantLock mutex
Mutex pour le changement d'handler.
TReception reception
Thread pour recevoir les trames.
BluetoothDevice device
Objet BluetoothDevice.
String getAdresse()
Méthode qui retourne l'adresse du périphérique.
static final int CODE_ERREUR_RECEVOIR
Code erreur lors de la réception.
void deconnecter()
Méthode pour se deconnecter sur le periphérique en Bluetooth.
static final int CODE_ERREUR_ENVOYER
Code erreur lors de l'envoi.
BluetoothSocket socket
Socket Bluetooth.
static final int CODE_CONNEXION
Code de Connection.
InputStream receiveStream
Input du Bluetooth.
void setHandlerActivite(Handler handler)
Méthode qui permet de changer d'handler.
La classe qui contient toute la gestion des thread de reception et envoi de trames.
Definition: TReception.java:26
Handler handlerActivite
Handler qui permet de communiquer avec l'activité
static final int CODE_RECEPTION
Code de TReception.
static final int CODE_ERREUR_DECONNECTER
Code erreur lors de la déconnexion.
void envoyerMessageActivite(int what)
Méthode qui permet d'envoyer un message à l'activité
String getNom()
Méthode qui retourne le nom du périphérique.
static final String NOM_CIBLE
Le nom du module Bluetooth de la cible-darts 2021.
static final String TAG
TAG pour log.
void envoyer(final String data)
Méthode pour envoyer une trame en Bluetooth.
void connecter()
Méthode pour se connecter sur le periphérique en Bluetooth.
Peripherique(BluetoothDevice device, Handler handler)
Constructeur de la classe Peripherique.
static final int CODE_ERREUR_CONNECTER
Code erreur lors de la connexion.