Groom  1.1
BTS SNIR LaSalle Avignon 2021
CommunicationGroom.java
Aller à la documentation de ce fichier.
1 package com.example.groom;
2 
3 import android.bluetooth.BluetoothAdapter;
4 import android.bluetooth.BluetoothDevice;
5 import android.bluetooth.BluetoothSocket;
6 import android.os.Handler;
7 import android.os.Message;
8 import android.util.Log;
9 
10 import java.io.BufferedReader;
11 import java.io.IOException;
12 import java.io.InputStream;
13 import java.io.InputStreamReader;
14 import java.io.OutputStream;
15 import java.util.ArrayList;
16 import java.util.Set;
17 import java.util.UUID;
18 
27 public class CommunicationGroom
28 {
29  // Constantes
30  private static final String TAG = "_CommunicationGroom";
31  private static final String PERIPHERIQUE_GROOM = "groom-";
32  public static final int ERREUR_GROOM = -1;
33  public static final int CONNEXION_GROOM = 0;
34  public static final int RECEPTION_GROOM = 1;
35  public static final int DECONNEXION_GROOM = 2;
36 
37  public static final int CHAMP_ETAT = 1;
38  public static final int CHAMP_SONNETTE = 2;
39  public static final int CHAMP_PRESENCE = 3;
40  public static final int CHAMP_MODE_SONNETTE = 4;
41  public static final int CHAMP_MODE_PRESENCE = 5;
42 
43  // Attributs
44  private String nomPeripherique;
45  private String adressePeripherique;
46  private Handler handler = null;
47  private BluetoothDevice peripheriqueGroom = null;
48  private BluetoothSocket socket = null;
49  private InputStream receiveStream = null;
50  private OutputStream sendStream = null;
51  private Reception reception = null;
52  private ArrayList<String> listePeripheriques = null;
53 
57  public CommunicationGroom(BluetoothDevice groom, Handler handler)
58  {
59  Log.d(TAG, "CommunicationGroom() " + groom.getName());
60  this.handler = handler; // permet de communiquer par message avec l'activité
61  this.peripheriqueGroom = groom;
62  this.nomPeripherique = groom.getName();
63  this.adressePeripherique = groom.getAddress();
64  this.handler = handler;
65 
66  // Création de la socket pour communiquer
67  try
68  {
69  if(peripheriqueGroom != null)
70  {
71  Log.d(TAG, "Création nouvelle socket");
72  socket = peripheriqueGroom.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
73  receiveStream = socket.getInputStream();
74  sendStream = socket.getOutputStream();
75  }
76  }
77  catch (IOException e)
78  {
79  Log.d(TAG, "Erreur création socket");
80  e.printStackTrace();
81  socket = null;
82  // signale à l'activité l'erreur
83  Message msg = Message.obtain();
84  msg.what = ERREUR_GROOM;
85  handler.sendMessage(msg);
86  }
87 
88  // Création du thread Reception
89  if(socket != null)
90  {
92  }
93  }
94 
98  public String getNomPeripherique()
99  {
100  return nomPeripherique;
101  }
102 
106  public String getAdressePeripherique()
107  {
108  return adressePeripherique;
109  }
110 
114  public boolean estConnecte()
115  {
116  if(socket == null)
117  return false;
118  return socket.isConnected();
119  }
120 
124  public static ArrayList<BluetoothDevice> getListeGrooms()
125  {
126  //Log.d(TAG, "getListeGrooms()");
127  ArrayList<BluetoothDevice> grooms = new ArrayList<BluetoothDevice>();;
128  Set<BluetoothDevice> devices;
129 
130  BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
131  devices = bluetoothAdapter.getBondedDevices();
132  for (BluetoothDevice device : devices)
133  {
134  // un groom ?
135  if(device.getName().contains(PERIPHERIQUE_GROOM))
136  {
137  grooms.add(device);
138  //Log.d(TAG, " -> " + device.getName() + " [" + device.getAddress() + "]");
139  }
140  }
141 
142  if(grooms.size() < 1)
143  Log.d(TAG, "getListeGrooms() aucun groom détecté !");
144 
145  return grooms;
146  }
147 
151  public void envoyer(String trame)
152  {
153  // Vérifications
154  if(peripheriqueGroom == null || socket == null)
155  return;
156 
157  new Thread()
158  {
159  @Override public void run()
160  {
161  try
162  {
163  if(socket.isConnected())
164  {
165  sendStream.write(trame.getBytes());
166  sendStream.flush();
167  }
168 
169  Log.d(TAG, "Envoyer trame : " + trame);
170  }
171  catch (IOException e)
172  {
173  Log.d(TAG, "Erreur écriture socket");
174  e.printStackTrace();
175  // signale à l'activité l'erreur
176  Message msg = Message.obtain();
177  msg.what = ERREUR_GROOM;
178  handler.sendMessage(msg);
179  }
180  }
181  }.start();
182  }
183 
187  public void connecter()
188  {
189  // Vérifications
190  if(peripheriqueGroom == null || socket == null)
191  return;
192 
193  new Thread()
194  {
195  @Override public void run()
196  {
197  // Connexion de la socket
198  try
199  {
200  socket.connect();
201 
202  // signale à l'activité la connexion
203  Message msg = Message.obtain();
204  msg.what = CONNEXION_GROOM;
205  handler.sendMessage(msg);
206 
207  Log.d(TAG, "Connexion socket");
208  }
209  catch (IOException e)
210  {
211  Log.d(TAG, "Erreur connexion socket");
212  e.printStackTrace();
213  // signale à l'activité l'erreur
214  Message msg = Message.obtain();
215  msg.what = ERREUR_GROOM;
216  handler.sendMessage(msg);
217  }
218 
219  // Démarrage de la reception
220  if(socket.isConnected())
221  {
222  reception.start();
223  }
224  }
225  }.start();
226  }
227 
231  public void deconnecter()
232  {
233  // Vérifications
234  if(peripheriqueGroom == null || socket == null)
235  return;
236 
237  // Exécute la déconnexion dans un Thread pour éviter un blocage
238  new Thread()
239  {
240  @Override public void run()
241  {
242  // Déconnexion de la socket
243  try
244  {
245  socket.close();
246 
247  // signale à l'activité la déconnexion
248  Message msg = Message.obtain();
249  msg.what = DECONNEXION_GROOM;
250  handler.sendMessage(msg);
251 
252  Log.d(TAG, "Déconnexion socket");
253  }
254  catch (IOException e)
255  {
256  Log.d(TAG, "Erreur déconnexion socket");
257  e.printStackTrace();
258  // signale à l'activité l'erreur
259  Message msg = Message.obtain();
260  msg.what = ERREUR_GROOM;
261  handler.sendMessage(msg);
262  }
263 
264  // Arrêt de la reception
265  if(!socket.isConnected())
266  {
267  reception.arreter();
268  }
269  }
270  }.start();
271  }
272 
276  private class Reception extends Thread
277  {
278  Handler handlerUI;
279  private boolean fini;
280 
281  Reception(Handler h)
282  {
283  handlerUI = h;
284  fini = false;
285  }
286 
287  @Override
288  public void run()
289  {
290  Log.d(TAG, "Démarre la réception");
291  BufferedReader reception = new BufferedReader(new InputStreamReader(receiveStream));
292 
293  // Attendre la reception
294  while (!fini)
295  {
296  try
297  {
298  String trame = "";
299  if (reception.ready())
300  {
301  trame = reception.readLine(); // ATTENTION : il attend et enlève un \r\n
302  }
303  if (trame.length() > 0)
304  {
305  Log.d(TAG, "Réception trame : " + trame);
306  Message msg = Message.obtain();
307  msg.what = RECEPTION_GROOM;
308  msg.obj = trame;
309  handlerUI.sendMessage(msg);
310  }
311  }
312  catch (IOException e)
313  {
314  Log.d(TAG, "Erreur lecture socket");
315  e.printStackTrace();
316  // signale à l'activité l'erreur
317  Message msg = Message.obtain();
318  msg.what = ERREUR_GROOM;
319  handler.sendMessage(msg);
320  }
321  try
322  {
323  Thread.sleep(250);
324  }
325  catch (InterruptedException e)
326  {
327  e.printStackTrace();
328  }
329  }
330  //Log.d(TAG, "Réception arrêtée");
331  }
332 
333  public void arreter()
334  {
335  if (!fini)
336  {
337  fini = true;
338  }
339  }
340  }
341 }
com.example.groom.CommunicationGroom.CHAMP_PRESENCE
static final int CHAMP_PRESENCE
le champ numéro 3 concernant la présence
Definition: CommunicationGroom.java:39
com.example.groom.CommunicationGroom.getListeGrooms
static ArrayList< BluetoothDevice > getListeGrooms()
Récupère la liste des grooms appairés.
Definition: CommunicationGroom.java:124
com.example.groom.CommunicationGroom.CONNEXION_GROOM
static final int CONNEXION_GROOM
connexion du groom
Definition: CommunicationGroom.java:33
com.example.groom.CommunicationGroom
Definition: CommunicationGroom.java:27
com.example.groom.CommunicationGroom.nomPeripherique
String nomPeripherique
nom du périphérique
Definition: CommunicationGroom.java:44
com.example.groom.CommunicationGroom.envoyer
void envoyer(String trame)
Permet d'envoyer une trame au module bluetooth du groom.
Definition: CommunicationGroom.java:151
com.example.groom.CommunicationGroom.peripheriqueGroom
BluetoothDevice peripheriqueGroom
le périphérique bluetooth du groom
Definition: CommunicationGroom.java:47
com.example.groom.CommunicationGroom.DECONNEXION_GROOM
static final int DECONNEXION_GROOM
déconnexion du groom
Definition: CommunicationGroom.java:35
com.example.groom.CommunicationGroom.reception
Reception reception
Constructeur reception de type Reception définie en null.
Definition: CommunicationGroom.java:51
com.example.groom.CommunicationGroom.getAdressePeripherique
String getAdressePeripherique()
Récupère l'adresse du périphérique.
Definition: CommunicationGroom.java:106
com.example.groom.CommunicationGroom.receiveStream
InputStream receiveStream
données reçues
Definition: CommunicationGroom.java:49
Thread
com.example.groom.CommunicationGroom.CommunicationGroom
CommunicationGroom(BluetoothDevice groom, Handler handler)
Constructeur.
Definition: CommunicationGroom.java:57
com.example.groom.CommunicationGroom.Reception
Permet la réception de trames du module bluetooth.
Definition: CommunicationGroom.java:276
com.example.groom.CommunicationGroom.adressePeripherique
String adressePeripherique
adresse du périphériques
Definition: CommunicationGroom.java:45
com.example.groom.CommunicationGroom.ERREUR_GROOM
static final int ERREUR_GROOM
erreur avec groom
Definition: CommunicationGroom.java:32
com.example.groom.CommunicationGroom.getNomPeripherique
String getNomPeripherique()
Récupère le nom du périphérique.
Definition: CommunicationGroom.java:98
com.example.groom.CommunicationGroom.Reception.arreter
void arreter()
Definition: CommunicationGroom.java:333
com.example.groom.CommunicationGroom.CHAMP_SONNETTE
static final int CHAMP_SONNETTE
le champ numéro 2 concernant la sonnette
Definition: CommunicationGroom.java:38
com.example.groom.CommunicationGroom.estConnecte
boolean estConnecte()
Retourne l'état de connexion de la socket.
Definition: CommunicationGroom.java:114
com.example.groom.CommunicationGroom.Reception.run
void run()
Definition: CommunicationGroom.java:288
com.example.groom.CommunicationGroom.RECEPTION_GROOM
static final int RECEPTION_GROOM
réception du groom
Definition: CommunicationGroom.java:34
com.example.groom.CommunicationGroom.CHAMP_MODE_SONNETTE
static final int CHAMP_MODE_SONNETTE
le champ numéro 4 concernant le mode de la sonnette
Definition: CommunicationGroom.java:40
com.example.groom.CommunicationGroom.CHAMP_MODE_PRESENCE
static final int CHAMP_MODE_PRESENCE
le champ numéro 5 concernant le mode de la présence
Definition: CommunicationGroom.java:41
com.example.groom.CommunicationGroom.connecter
void connecter()
Permet la connexion au module bluetooth.
Definition: CommunicationGroom.java:187
com.example.groom.CommunicationGroom.listePeripheriques
ArrayList< String > listePeripheriques
liste des périphériques
Definition: CommunicationGroom.java:52
com.example.groom.CommunicationGroom.PERIPHERIQUE_GROOM
static final String PERIPHERIQUE_GROOM
préfixe des périphériques bluetooth
Definition: CommunicationGroom.java:31
com.example.groom.CommunicationGroom.TAG
static final String TAG
TAG pour les logs.
Definition: CommunicationGroom.java:30
com.example.groom.CommunicationGroom.handler
Handler handler
Constructeur handler de type Handle définie en null.
Definition: CommunicationGroom.java:46
com.example.groom.CommunicationGroom.socket
BluetoothSocket socket
socket bluetooth
Definition: CommunicationGroom.java:48
com.example.groom.CommunicationGroom.deconnecter
void deconnecter()
Permet la déconnexion du module bluetooth.
Definition: CommunicationGroom.java:231
com.example.groom.CommunicationGroom.Reception.fini
boolean fini
Definition: CommunicationGroom.java:279
com.example.groom.CommunicationGroom.sendStream
OutputStream sendStream
données envoyés
Definition: CommunicationGroom.java:50
com.example.groom.CommunicationGroom.CHAMP_ETAT
static final int CHAMP_ETAT
le champ numéro 1 concernant l'état
Definition: CommunicationGroom.java:37