begin process at 2010 02 10 08:46:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > TCHAT' BLUETOOTH (BASÉ SUR LE SERVICE PORT PROFILE)

TCHAT' BLUETOOTH (BASÉ SUR LE SERVICE PORT PROFILE)


 Information sur la source

Note :
8,67 / 10 - par 3 personnes
8,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Source .NET ( DotNet ) Classé sous :bluetooth Niveau :Initié Date de création :05/08/2005 Vu / téléchargé :24 135 / 1 741

Auteur : el_teedee

Ecrire un message privé
Site perso
Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Pré requis :
************
_ deux pc avec la fonctionnalité Bluetooth
_ ou deux pc reliés par câble série
_ .NET framework V1.1

Principe :
**********
Le bluetooth dispose de 13 Profils. Chacun d’entre eux a une fonctionnalité spécifique, il y a par exemple le service de détection des autres périphériques Bluetooth, le service Casque qui sert souvent avec un téléphone Bluetooth pour y connecter une oreillette Bluetooth, et il y aussi le Service Port Profile, ou service port série, et bien d’autres.
C’est sur ce service que cette application est basée. En effet, il faut savoir que l’on peut établir entre deux périphériques qui supportent ce profil, une liaison série virtuelle, qui se traite comme une liaison série filaire.
De ce fait, il n’y a qu’à créer la connexion série virtuelle entre les 2 périphériques, puis il n’y a plus qu’à ouvrir et fermer, lire et écrire sur le port série spécifié.

Liaison série virtuelle :
*************************
Il faut savoir qu’il existe deux types de port série en Bluetooth. Le port série dit « entrant », et le port série dit « sortant ». Le premier sert lorsque le périphérique distant désire envoyer des données, et le second lorsque c’est ce périphérique qui est l’initiateur de la communication.

Avant de lancer l’application :
*******************************
Il faut établir l’appairage entre les deux périphériques Bluetooth. Pour cela, dans votre gestionnaire Bluetooth, lancer la fonction pour ajouter un nouveau périphérique. Vous devez choisir le service port série. Une fois le périphérique ajouté, deux ports COM ont été rajoutés dans la liste de vos périphériques. L’un est sortant, l’autre entrant. Normalement Au cours de l’appairage, il vous est précisé quel est le port COM sortant.
C’est ce port qu’il faut spécifier dans la combo de gauche. Le port entrant dans la combo de droite.
Ensuite, cliquer sur les deux boutons pour ouvrir les deux ports série utilisés.
Si tout se passe bien, la textbox du bas vous informe du handle utilisé pour la liaison aux ports série.
Enfin, refaire la même opération sur le deuxième ordinateur. (ce ne sera pas forcément les mêmes ports COM)

Fonctionnement :
****************
Deux combobox vous invitent à choisir le port série sortant (émission) et le port série entrant (réception).
Ces deux combobox sont remplies grâce à la fonction QueryDosDevice() qui retourne tous les périphériques de votre ordinateur. Un simple test sur la chaîne retournée vérifie qu’elle commence bien par « COM ».
Le choix de la vitesse de transmission n’est pas obligatoire dans le cas d’une transmission Bluetooth. La vitesse s’adapte elle-même au support de transmission. En revanche, dans le cas d’une liaison série filaire, il vous faut choisir la même vitesse pour les deux périphériques que vous souhaitez relier. Par défaut, la connexion établie aura 8 bit de données, 1 bit de stop et pas de bit de parité.
(Les autres caractéristiques de la transmission ne sont pas accessibles par l’IHM, mais vous pouvez modifier la parité, le nombre de bit de stop au sein de l’application, par le biais de la classe DCB).

Le pseudo ne peut pas dépasser 8 caractères, et la partie du message 255 caractères.
Le pseudo est envoyé juste avant la trame de données à chaque émission. Ainsi, si on change le pseudo, le destinataire le voit dès le prochain message.
Le format de la trame est le suivant :
<Nombre de caractères qui suivent><;><Pseudo><;><Message>
Un control ListView est utilisé pour afficher les messages de la conversation.
Les messages envoyés et les messages reçus sont différenciés par la couleur du texte dans la listview.
Enfin, deux boutons vous permettent d’exporter la conversation et d’importer une conversation au format XML.

Source

  • //Quelques uns des prototypes de fonctions utilisés dans kernel32.dll :
  • //-----------------------------------------------------------------------------------
  • //
  • // DllImports for Win32 methods
  • //
  • //-----------------------------------------------------------------------------------
  • [DllImport("kernel32.dll")]
  • static extern int ReadFile(uint hFile, Byte[] Buffer, int nNumberOfBytesToRead, ref int lpNumberOfBytesRead, IntPtr notUsedPassZero ) ;
  • [DllImport("kernel32.dll")]
  • static extern uint CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, uint lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr notUsedPassZero) ;
  • [DllImport("kernel32.dll")]
  • static extern int CloseHandle(uint hObject);
  • [DllImport("kernel32.dll")]
  • static extern bool WriteFile(uint hFile, byte[] Buffer, UInt32 nNumberOfBytesToWrite, out int lpNumberOfBytesWritten, IntPtr lpOverlapped);
  • [DllImport("kernel32.dll", SetLastError=true)]
  • static extern uint QueryDosDevice(string lpDeviceName, IntPtr lpTargetPath, uint ucchMax);
//Quelques uns des prototypes de fonctions utilisés dans kernel32.dll :

		//-----------------------------------------------------------------------------------
		//
		//				DllImports for Win32 methods
		//
		//-----------------------------------------------------------------------------------

		[DllImport("kernel32.dll")] 
		static extern int ReadFile(uint hFile, Byte[] Buffer, int nNumberOfBytesToRead, ref int lpNumberOfBytesRead, IntPtr notUsedPassZero ) ;

		[DllImport("kernel32.dll")] 
		static extern uint CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, uint lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr notUsedPassZero) ;

		[DllImport("kernel32.dll")] 
		static extern int CloseHandle(uint hObject);

		[DllImport("kernel32.dll")] 
		static extern bool WriteFile(uint hFile, byte[] Buffer, UInt32 nNumberOfBytesToWrite, out int lpNumberOfBytesWritten, IntPtr lpOverlapped);

		[DllImport("kernel32.dll", SetLastError=true)]
		static extern uint QueryDosDevice(string lpDeviceName, IntPtr lpTargetPath, uint ucchMax);

 Conclusion

Notions abordées :
******************
_ Sérialisation et désérialisation au format XML
_ Remplissage d’une listview
_ PInvoke des fonctions de l’API kernel32.dll
_ Gestion du port série grâce aux fonctions CreateFile, ReadFile, WriteFile, …
_ Utilisation de la fonction QueryDosDevice de l’API Kernel32.dll (notion de pointeur, allocation de mémoire par Marshal.AllocHGlobal, …)
_ Utilisation des delegate pour séparer la classe métier de la classe affichage.

Bugs connus :
*************
_ On ne peut pas fermer l'application, à moins de faire CTRL ALT SUPPR, car je n'arrive pas à fermer le port série qui est en lecture.

Améliorations à apporter :
**************************
_ le bouton « fermer port » pour la lecture ne ferme pas correctement le port car, il est continuellement en train d’être lu par le thread de lecture, même après avoir arrêté ce dernier.
http://www.csharpfr.com/forum.v2.aspx?ID= 527138. Ainsi, pour fermer l’appli, il faut pour l’instant faire un ctrl alt sup car fermer avec la croix ne tuera pas le processus, car je n’arrive pas à fermer le port en lecture.
_ On peut apporter bon nombre d’améliorations pour rendre ce tchat’ plus convivial, mais ce n’était pas le but de départ.

Conclusion :
************
J'ai longtemps cherché un tutorial pour utiliser la communication Bluetooth. J'espère que cette source va aider beaucoup de personnes, notamment celles que j'ai croisées pendant mes recherches sur le Bluetooth. (elles se reconnaitront ;-) )

Liens utiles :
**************
Cours sur la norme RS232 : http://www.camiresearch.com/Data_Com_Basics/RS232_ standard.html
MSDN topic complet sur le port série : http://msdn.microsoft.com/library/default.asp?url= /library/en-us/dnfiles/html/msdn_serial.asp
Gestio n du port série pour Pocket PC et Windows CE : http://www.codeppc.com/evc/articles/portserie.htm
Utilisation du composant MSCOMM OCX (autre méthode) : http://www.devhood.com/tutorials/tutorial_details. aspx?tutorial_id=320

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) UTILISATION DE L'API VIRTUAL DISK IMAGE DE WINDOWS 7 par Willi
Source avec Zip Source .NET (Dotnet) CHESS GAME CORE - LIBRAIRIE JEU D'ÉCHEC EN C# par Bidou
Source .NET (Dotnet) CHANGER LA RESOLUTION DE VOTRE ECRAN, UTILISATION DES API WI... par mechtaly
Source avec Zip Source .NET (Dotnet) CRÉER SON PROPRE DESIGNER COMME CELUI DE VISUAL STUDIO par ShareVB
Source avec Zip Source .NET (Dotnet) CSVSHARP. DLL D'IMPORT/EXPORT DE CONTENU AU FORMAT CSV par heriquet

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) [.NET2] BLUETOOTH: UTILISATION DES API BLUETOOTH ET WINSOCKS par Willi
Source avec Zip Source .NET (Dotnet) BLUETOOTH EN par super_toinou

Commentaires et avis

Commentaire de sebmafate le 05/08/2005 11:44:08 administrateur CS

très bonne explication...

Commentaire de el_teedee le 06/08/2005 22:21:41

Merci, merci ;-)

J'ai essayé de partager le fruit de mon labeur, lol
---------------------------------------------------
Non, sans déconner, si vous voulez tester l'appli, ou juste regarder le code, ca m'aiderait bien car ca fait pas longtemps que je prog en C# (2 mois à peu près), et je pense que je dois encore être maladroit...

Notamment au niveau du bug sur la fermeture du thread...
:D

Commentaire de el_teedee le 08/08/2005 14:09:51

Suite à une question de JCpp qui me demande comment faire pour ouvrir l'écriture et la lecture sur le même port, voici ce que je propose (je n'ai pas testé, désolé, et je crains ne pas avoir le temps, rapport de stage oblige)

qd tu cliques sur "ouvrir le port", cela appelle cette instruction (parmi d'autres) :
ma_connexion_out.Ouvrir_Port();

dans cette dernière procédure, tu appelles la fonction OpenPort_Raw, selon le bouton sur lequel tu as appuyé (bouton gauche : écriture, bouton droit : lecture), la différence est faite quand tu cliques sur le bouton, je mets un bool à true(écriture) ou à false(lecture)
Voici le code éxécuté :
if (this.is_Read_or_Write)
{
//ouverture du port COM en écriture
_portHandle = OpenPort_Raw_Out(PortName) ;
}
else
{
//ouverture du port COM en lecture
_portHandle = OpenPort_Raw_In(PortName) ;

et dans cette fonction OpenPort_Raw (_in ou _out), ceci est éxécuté :
_pour l'ouverture en lecture :
return CreateFile(portName, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, IntPtr.Zero);
_pour l'ouverture en écriture :
return CreateFile(portName, GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, IntPtr.Zero);

et maintenant, JCpp, tu pourrais rajouter un troisième bouton, pour ouvrir en bi directionnel en faisant ceci :
return CreateFile(portName, GENERIC_READ || GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, IntPtr.Zero);

GENERIC_READ || GENERIC_WRITE permet les deux modes d'accès, mais je le répète, je n'ai pas testé. N'hésite pas à nous tenir au courant.
:D

Commentaire de el_teedee le 08/08/2005 15:22:20

C'est plutôt GENERIC_READ | GENERIC_WRITE à en croire ce tutorial http://www.guill.net/index.php?cat=6&prg=11

Commentaire de monocorde le 28/11/2005 21:26:02

En principe il faut avoir deux ports série de type "entrant" et "sortant" comme t'as présenté. Cependant il est très bizzare qu'il n'y a que le port "sortant" qui fonctionne lors que je fais l'installation du logiciel de l'imprimante hp 995 et je ne peux fais l'impression avant la configuration du port "entrant". Alors, explique-moi pourquoi et des solutions si possible. Merci bien!

Commentaire de lilpeace95 le 17/10/2006 11:12:40

Je suis nouveau dans la programmation par vb! peut-on me dire comment on lance l'appli. enfin comment on l'ouvre quoi ! svp !!!!

Commentaire de econs le 17/10/2006 15:02:26 administrateur CS

Ah ... perdu ! Ce n'est pas du VB, mais du C#.

Tu peux utiliser Visual C# Express, gratuit et disponible sur le site de microsoft.

Commentaire de lilpeace95 le 18/10/2006 11:16:49

Ah d'accord je te remercie et tu peux m'expliquer vite fait comment on utilise ce zip ac Visual C# Express

Commentaire de el_teedee le 18/10/2006 12:04:15

ca fait un bail que j'ai pas fait de C#, et j'ai jamais utilisé vc# express, mais après avoir téléchargé le zip, double clic sur le .sln qui devrait t'ouvrir le projet complet comme il faut.

Alors tu devrais pour voir faire un "RUN" qui te lance l'appli depuis VC# express.

Bon courage :)

Commentaire de lilpeace95 le 19/10/2006 22:33:17

Ok je te remercie de m'avoir repondu !!!

Commentaire de forum05 le 08/11/2006 22:32:47

et moi je fais www.blaatch.com
entre 2 mobile c'est plus simple !

Commentaire de Rou25 le 03/06/2009 16:12:24

Salut! je suis étudiant en télécom et j'ai un projet a faire sur un module de Bluetooth.  En faite je dois faire la communication d'un module Bluetooth a un autre via le SPP et ton petit programme me semble très intéressant.  Je viens de le compiler.  Toutefois je voulais savoir comment faire pour actionner un interrupteur sur un module de ton programme. Cet interrupteur en question est un bouton RESET sur mon module et il permet d'effectuer une communication avec les autres modules une fois activé.  Tu pourrais me dire quelle est la différence entre le C++ et le C#?

Merci pour tout! j'attend vite ta réponse. A bientot!

Commentaire de el_teedee le 03/06/2009 19:57:30

Salut,

bah je suis désolé mais je vais pas avoir de temps à te consacrer plus que ma présente réponse
ce programme fait la communication entre deux entités sur lesquelles il est installé, via bluetooth, oui
"je viens de le compiler", bonne nouvelle :)
"comment faire pour actionner un interrupteur sur un module de ton programme" ? je vois ce que tu veux dire, je pense, mais je n'en ai pas la moindre idée.
Concernant ta question entre le C++ et le C#, c'est une bien vague question, dont je suis sur que google a de nombreuses réponses :p

Google :
http://www.google.fr/search?hl=fr&q=diff%C3%A9rence+entre+C%23+et+c%2B%2B&btnG=Recherche+Google&meta=&aq=f&oq=
1ère réponse :
http://dotnet.developpez.com/articles/migration/cpp_vers_csharp/  -> chapitre 2

Bon courage

Commentaire de Rou25 le 04/06/2009 09:59:54

Salut,

ce n'est pas bien grave si tu n'arrives pas a m'aider, mais merci quand même de me répondre. Je l'ai compilé aussi sur VC# et sa marche! Bon , je n'ai pas encore essayé de faire la communication avec un autre dispo BT mais ca viendra!

Merci pour tout! A bientôt!

Commentaire de Rou25 le 05/06/2009 09:37:50

Salut,

Merci! C cool ces liens! Ceci dit je voulais savoir comment référencer une DLL?

C'est possible d'envoyer et de recevoir des fichiers via le port série et le sauvegarder dans un répertoire pré-défini?  Je l'ai cherché sur tout le site et ailleurs mais en vain.

Merci pour tout! A bientôt!

Commentaire de Rou25 le 11/06/2009 10:27:30

Salut, j'ai essayé ton programme et j'ai essayé de faire l'écriture et la lecture sur le meme port mais en compilant j'ai trouvé plusieurs erreurs, par exemple le portHandle n'existe pas dans le contexte actuel. Tiens voici le code que j'ai compilé, si t'as le temps tu pourrai le recompiler et me dire où se trouve la faute stp.

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Xml.Serialization;
using System.IO;


namespace Essai11___Writefile
{
    /// <summary>
    /// Description résumée de Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
        private int Port_Speed;
        private string Port_Number;
        private string Port_Name;
        private Connexion_Serie ma_connexion_out;
        private Connexion_Serie ma_connexion_in;
        private ListViewItem[] col_lvi = new ListViewItem[0];
        private string Path_Repertoire = Application.StartupPath;

        private System.Drawing.Color couleur_reception = System.Drawing.Color.Red;
        private System.Drawing.Color couleur_emission = System.Drawing.Color.Green;
        private System.Windows.Forms.TextBox text_to_write;
        private System.Windows.Forms.Button EnvoiPort;
        private System.Windows.Forms.Label label5;
        private System.Windows.Forms.Button FermerCOMentrant;
        private System.Windows.Forms.Button OuvrirCOMentrant;
        private System.Windows.Forms.GroupBox groupBox1;
        private System.Windows.Forms.GroupBox groupBox2;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Button FermerCOMsortant;
        private System.Windows.Forms.Button OuvrirCOMsortant;
        private System.Windows.Forms.GroupBox groupBox3;
        private System.Windows.Forms.ComboBox TextCOMsortant;
        private System.Windows.Forms.GroupBox groupBox4;
        private System.Windows.Forms.ComboBox TextCOMentrant;
        private System.Windows.Forms.ComboBox text_vitesse_out;
        private System.Windows.Forms.ComboBox text_vitesse_in;
        private System.Windows.Forms.ListView text_to_read;
        private System.Windows.Forms.ColumnHeader columnHeader1;
        private System.Windows.Forms.ColumnHeader columnHeader2;
        private System.Windows.Forms.ColumnHeader columnHeader3;
        private System.Windows.Forms.GroupBox groupBox6;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.TextBox text_pseudo;
        private System.ComponentModel.Container components = null;


        public Form1()
        {
            //
            // Requis pour la prise en charge du Concepteur Windows Forms
            //
            InitializeComponent();

            //
            // TODO : ajoutez le code du constructeur après l'appel à InitializeComponent
            //
        }

        /// <summary>
        /// Nettoyage des ressources utilisées.
        /// </summary>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }

        #region Code généré par le Concepteur Windows Form
        /// <summary>
        /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
        /// le contenu de cette méthode avec l'éditeur de code.
        /// </summary>
        private void InitializeComponent()
        {
            this.text_to_write = new System.Windows.Forms.TextBox();
            this.EnvoiPort = new System.Windows.Forms.Button();
            this.label5 = new System.Windows.Forms.Label();
            this.FermerCOMentrant = new System.Windows.Forms.Button();
            this.OuvrirCOMentrant = new System.Windows.Forms.Button();
            this.groupBox1 = new System.Windows.Forms.GroupBox();
            this.text_to_read = new System.Windows.Forms.ListView();
            this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
            this.columnHeader2 = new System.Windows.Forms.ColumnHeader();
            this.columnHeader3 = new System.Windows.Forms.ColumnHeader();
            this.groupBox2 = new System.Windows.Forms.GroupBox();
            this.groupBox6 = new System.Windows.Forms.GroupBox();
            this.text_pseudo = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();
            this.groupBox3 = new System.Windows.Forms.GroupBox();
            this.text_vitesse_out = new System.Windows.Forms.ComboBox();
            this.TextCOMsortant = new System.Windows.Forms.ComboBox();
            this.label2 = new System.Windows.Forms.Label();
            this.OuvrirCOMsortant = new System.Windows.Forms.Button();
            this.FermerCOMsortant = new System.Windows.Forms.Button();
            this.groupBox4 = new System.Windows.Forms.GroupBox();
            this.TextCOMentrant = new System.Windows.Forms.ComboBox();
            this.text_vitesse_in = new System.Windows.Forms.ComboBox();
            this.groupBox1.SuspendLayout();
            this.groupBox2.SuspendLayout();
            this.groupBox6.SuspendLayout();
            this.groupBox3.SuspendLayout();
            this.groupBox4.SuspendLayout();
            this.SuspendLayout();
            //
            // text_to_write
            //
            this.text_to_write.Location = new System.Drawing.Point(13, 215);
            this.text_to_write.MaxLength = 255;
            this.text_to_write.Multiline = true;
            this.text_to_write.Name = "text_to_write";
            this.text_to_write.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
            this.text_to_write.Size = new System.Drawing.Size(407, 42);
            this.text_to_write.TabIndex = 0;
            //
            // EnvoiPort
            //
            this.EnvoiPort.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(178)));
            this.EnvoiPort.Location = new System.Drawing.Point(433, 215);
            this.EnvoiPort.Name = "EnvoiPort";
            this.EnvoiPort.Size = new System.Drawing.Size(47, 42);
            this.EnvoiPort.TabIndex = 2;
            this.EnvoiPort.Text = "OK";
            this.EnvoiPort.Click += new System.EventHandler(this.EnvoiPort_Click);
            //
            // label5
            //
            this.label5.Location = new System.Drawing.Point(7, 28);
            this.label5.Name = "label5";
            this.label5.Size = new System.Drawing.Size(83, 20);
            this.label5.TabIndex = 12;
            this.label5.Text = "Vitesse";
            //
            // FermerCOMentrant
            //
            this.FermerCOMentrant.Enabled = false;
            this.FermerCOMentrant.Location = new System.Drawing.Point(41, 90);
            this.FermerCOMentrant.Name = "FermerCOMentrant";
            this.FermerCOMentrant.Size = new System.Drawing.Size(86, 20);
            this.FermerCOMentrant.TabIndex = 19;
            this.FermerCOMentrant.Text = "Fermer ce port";
            this.FermerCOMentrant.Click += new System.EventHandler(this.FermerCOMentrant_Click);
            //
            // OuvrirCOMentrant
            //
            this.OuvrirCOMentrant.Location = new System.Drawing.Point(7, 55);
            this.OuvrirCOMentrant.Name = "OuvrirCOMentrant";
            this.OuvrirCOMentrant.Size = new System.Drawing.Size(86, 20);
            this.OuvrirCOMentrant.TabIndex = 16;
            this.OuvrirCOMentrant.Text = "Ouvrir ce port";
            this.OuvrirCOMentrant.Click += new System.EventHandler(this.OuvrirCOMentrant_Click);
            //
            // groupBox1
            //
            this.groupBox1.Controls.Add(this.text_to_read);
            this.groupBox1.Controls.Add(this.text_to_write);
            this.groupBox1.Controls.Add(this.EnvoiPort);
            this.groupBox1.Location = new System.Drawing.Point(20, 14);
            this.groupBox1.Name = "groupBox1";
            this.groupBox1.Size = new System.Drawing.Size(493, 263);
            this.groupBox1.TabIndex = 20;
            this.groupBox1.TabStop = false;
            this.groupBox1.Text = "Emission / Réception";
            //
            // text_to_read
            //
            this.text_to_read.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
            this.columnHeader1,
            this.columnHeader2,
            this.columnHeader3});
            this.text_to_read.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
            this.text_to_read.LabelEdit = true;
            this.text_to_read.Location = new System.Drawing.Point(13, 21);
            this.text_to_read.Name = "text_to_read";
            this.text_to_read.Size = new System.Drawing.Size(467, 180);
            this.text_to_read.TabIndex = 3;
            this.text_to_read.UseCompatibleStateImageBehavior = false;
            this.text_to_read.View = System.Windows.Forms.View.Details;
            //
            // columnHeader1
            //
            this.columnHeader1.Text = "Auteur";
            this.columnHeader1.Width = 66;
            //
            // columnHeader2
            //
            this.columnHeader2.Text = "Heure";
            this.columnHeader2.Width = 74;
            //
            // columnHeader3
            //
            this.columnHeader3.Text = "Message";
            this.columnHeader3.Width = 415;
            //
            // groupBox2
            //
            this.groupBox2.Controls.Add(this.groupBox6);
            this.groupBox2.Controls.Add(this.groupBox3);
            this.groupBox2.Controls.Add(this.groupBox4);
            this.groupBox2.Location = new System.Drawing.Point(20, 291);
            this.groupBox2.Name = "groupBox2";
            this.groupBox2.Size = new System.Drawing.Size(493, 169);
            this.groupBox2.TabIndex = 21;
            this.groupBox2.TabStop = false;
            this.groupBox2.Text = "Configuration";
            //
            // groupBox6
            //
            this.groupBox6.Controls.Add(this.text_pseudo);
            this.groupBox6.Controls.Add(this.label1);
            this.groupBox6.Location = new System.Drawing.Point(368, 22);
            this.groupBox6.Name = "groupBox6";
            this.groupBox6.Size = new System.Drawing.Size(120, 89);
            this.groupBox6.TabIndex = 23;
            this.groupBox6.TabStop = false;
            this.groupBox6.Text = "Autres";
            //
            // text_pseudo
            //
            this.text_pseudo.Location = new System.Drawing.Point(7, 42);
            this.text_pseudo.MaxLength = 8;
            this.text_pseudo.Name = "text_pseudo";
            this.text_pseudo.Size = new System.Drawing.Size(100, 20);
            this.text_pseudo.TabIndex = 1;
            this.text_pseudo.Text = "Madraak";
            //
            // label1
            //
            this.label1.Location = new System.Drawing.Point(6, 16);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(83, 20);
            this.label1.TabIndex = 0;
            this.label1.Text = "Friendly Name";
            //
            // groupBox3
            //
            this.groupBox3.Controls.Add(this.text_vitesse_out);
            this.groupBox3.Controls.Add(this.TextCOMsortant);
            this.groupBox3.Controls.Add(this.label2);
            this.groupBox3.Controls.Add(this.OuvrirCOMsortant);
            this.groupBox3.Controls.Add(this.FermerCOMsortant);
            this.groupBox3.Location = new System.Drawing.Point(7, 21);
            this.groupBox3.Name = "groupBox3";
            this.groupBox3.Size = new System.Drawing.Size(173, 125);
            this.groupBox3.TabIndex = 20;
            this.groupBox3.TabStop = false;
            this.groupBox3.Text = "Emission";
            //
            // text_vitesse_out
            //
            this.text_vitesse_out.Items.AddRange(new object[] {
            "600",
            "1200",
            "2400",
            "4800",
            "9600",
            "14400",
            "19200",
            "38400",
            "56000",
            "57600",
            "115200",
            "256000"});
            this.text_vitesse_out.Location = new System.Drawing.Point(100, 20);
            this.text_vitesse_out.Name = "text_vitesse_out";
            this.text_vitesse_out.Size = new System.Drawing.Size(67, 21);
            this.text_vitesse_out.TabIndex = 20;
            this.text_vitesse_out.Text = "38400";
            //
            // TextCOMsortant
            //
            this.TextCOMsortant.Location = new System.Drawing.Point(100, 50);
            this.TextCOMsortant.Name = "TextCOMsortant";
            this.TextCOMsortant.Size = new System.Drawing.Size(67, 21);
            this.TextCOMsortant.TabIndex = 19;
            //
            // label2
            //
            this.label2.Location = new System.Drawing.Point(7, 21);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(87, 20);
            this.label2.TabIndex = 10;
            this.label2.Text = "Vitesse (Bauds)";
            //
            // OuvrirCOMsortant
            //
            this.OuvrirCOMsortant.Location = new System.Drawing.Point(7, 51);
            this.OuvrirCOMsortant.Name = "OuvrirCOMsortant";
            this.OuvrirCOMsortant.Size = new System.Drawing.Size(86, 20);
            this.OuvrirCOMsortant.TabIndex = 14;
            this.OuvrirCOMsortant.Text = "Ouvrir ce port";
            this.OuvrirCOMsortant.Click += new System.EventHandler(this.OuvrirCOMsortant_Click);
            //
            // FermerCOMsortant
            //
            this.FermerCOMsortant.Enabled = false;
            this.FermerCOMsortant.Location = new System.Drawing.Point(45, 90);
            this.FermerCOMsortant.Name = "FermerCOMsortant";
            this.FermerCOMsortant.Size = new System.Drawing.Size(86, 20);
            this.FermerCOMsortant.TabIndex = 18;
            this.FermerCOMsortant.Text = "Fermer ce port";
            this.FermerCOMsortant.Click += new System.EventHandler(this.FermerCOMsortant_Click);
            //
            // groupBox4
            //
            this.groupBox4.Controls.Add(this.TextCOMentrant);
            this.groupBox4.Controls.Add(this.OuvrirCOMentrant);
            this.groupBox4.Controls.Add(this.label5);
            this.groupBox4.Controls.Add(this.FermerCOMentrant);
            this.groupBox4.Controls.Add(this.text_vitesse_in);
            this.groupBox4.Location = new System.Drawing.Point(187, 21);
            this.groupBox4.Name = "groupBox4";
            this.groupBox4.Size = new System.Drawing.Size(173, 125);
            this.groupBox4.TabIndex = 21;
            this.groupBox4.TabStop = false;
            this.groupBox4.Text = "Réception";
            //
            // TextCOMentrant
            //
            this.TextCOMentrant.Location = new System.Drawing.Point(100, 55);
            this.TextCOMentrant.Name = "TextCOMentrant";
            this.TextCOMentrant.Size = new System.Drawing.Size(67, 21);
            this.TextCOMentrant.TabIndex = 20;
            //
            // text_vitesse_in
            //
            this.text_vitesse_in.Items.AddRange(new object[] {
            "600",
            "1200",
            "2400",
            "4800",
            "9600",
            "14400",
            "19200",
            "38400",
            "56000",
            "57600",
            "115200",
            "256000"});
            this.text_vitesse_in.Location = new System.Drawing.Point(100, 28);
            this.text_vitesse_in.Name = "text_vitesse_in";
            this.text_vitesse_in.Size = new System.Drawing.Size(67, 21);
            this.text_vitesse_in.TabIndex = 20;
            this.text_vitesse_in.Text = "38400";
            //
            // Form1
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(572, 489);
            this.Controls.Add(this.groupBox1);
            this.Controls.Add(this.groupBox2);
            this.Name = "Form1";
            this.Text = "Chat Bluetooth";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.groupBox1.ResumeLayout(false);
            this.groupBox1.PerformLayout();
            this.groupBox2.ResumeLayout(false);
            this.groupBox6.ResumeLayout(false);
            this.groupBox6.PerformLayout();
            this.groupBox3.ResumeLayout(false);
            this.groupBox4.ResumeLayout(false);
            this.ResumeLayout(false);
            
        }
        #endregion

        /// <summary>
        /// Point d'entrée principal de l'application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }

        private void Form1_Load(object sender, System.EventArgs e)
        {
            Connexion_Serie a = new Connexion_Serie();
            string[] ma_string = a.QueryDosDevice_Action();
            //Chargement des deux textbox qui proposent les ports COM
            TextCOMentrant.Items.AddRange(ma_string);
            TextCOMsortant.Items.AddRange(ma_string);
        }


        #region EMISSION
        //---------------------------------------------------------------------------
        //
        // EMISSION
        //
        //---------------------------------------------------------------------------
        private void OuvrirCOMsortant_Click(object sender, System.EventArgs e)
        {
            Port_Speed = Convert.ToInt32(text_vitesse_out.Text);
            Port_Number = TextCOMsortant.Text;
            //Port_Name = "COM" + Port_Number + ":" ;
            Port_Name = Port_Number;
            //ouverture du port COM en écriture
            PortHandle = OpenPort_Raw_Out(PortName);
            //Soit on ouvre avec la forme COMx:
            //Soit avec \\.\COMx (sans:)
            string a = @"\\.\";
            ma_connexion_out = new Connexion_Serie(a + Port_Name, Port_Speed, ParitySetting.NoParity, 8, StopBitsSetting.OneStopBit);
            ma_connexion_out.is_Read_or_Write = true; //Pour la suite, ouvrir en écriture
            ma_connexion_out.AddingTextToTextboxIn += new Connexion_Serie.BNEventHandler(ma_connexion_out_Action);
            ma_connexion_out.Ouvrir_Port();
            if (this.is_Read_or_Write)
            {
                //ouverture du port COM en écriture
                PortHandle = OpenPort_Raw_Out(PortName);
            }
            else
            {
                //ouverture du port COM en lecture
                PortHandle = OpenPort_Raw_In(PortName);

                //et dans cette fonction OpenPort_Raw (_in ou _out), ceci est éxécuté :
                //pour l'ouverture en lecture :
                return CreateFile(portName, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, IntPtr.Zero);
                //pour l'ouverture en écriture :
                return CreateFile(portName, GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, IntPtr.Zero);

                return CreateFile(portName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, IntPtr.Zero);
                if (ma_connexion_out.IsOpen)
                {
                    FermerCOMsortant.Enabled = true;
                    OuvrirCOMsortant.Enabled = false;
                    text_vitesse_out.Enabled = false;
                    TextCOMsortant.Enabled = false;
                }
                Console.WriteLine("porthandle : ", ma_connexion_out.Port_handle.ToString());
            }
        }

        private void EnvoiPort_Click(object sender, System.EventArgs e)
        {
            try
            {
                if (ma_connexion_out.IsOpen)
                {
                    ma_connexion_out.WriteSentence_Character(text_pseudo.Text, text_to_write.Text);
                    //Il faut ajouter la ligne à la listview :
                    int i = col_lvi.Length;
                    ListViewItem[] col_lvi_temp;

                    col_lvi_temp = new ListViewItem[i + 1];
                    for (int j = 0; j < i; j++)
                    {
                        col_lvi_temp[j] = col_lvi[j];
                    }
                    col_lvi_temp[i] = new ListViewItem(text_pseudo.Text);
                    col_lvi_temp[i].SubItems.Add(DateTime.Now.ToShortTimeString());
                    col_lvi_temp[i].SubItems.Add(text_to_write.Text);
                    col_lvi_temp[i].ForeColor = System.Drawing.Color.Red;
                    col_lvi_temp[i].Tag = "out";
                    text_to_read.Items.Clear();
                    col_lvi = new ListViewItem[col_lvi_temp.Length];
                    col_lvi = col_lvi_temp;
                    text_to_read.Items.AddRange(col_lvi);
                    //l n'y a plus qu'à recolorier les lignes selon le .tag de chaque ligne :
                    foreach (ListViewItem mon_item in col_lvi)
                    {
                        if ((string)mon_item.Tag == "out")
                        {
                            mon_item.ForeColor = couleur_emission;
                        }
                        else
                        {
                            mon_item.ForeColor = couleur_reception;
                        }
                    }
                    text_to_write.Text = "";
                }
                else
                {
                }
            }
            catch (System.NullReferenceException)
            {
            }
        }


        private void FermerCOMsortant_Click(object sender, System.EventArgs e)
        {
            ma_connexion_out.Close_Port();
            FermerCOMsortant.Enabled = false;
            OuvrirCOMsortant.Enabled = true;
            text_vitesse_out.Enabled = true;
            TextCOMsortant.Enabled = true;
        }
        #endregion

        #region RECEPTION
        //---------------------------------------------------------------------------
        //
        // RECEPTION
        //
        //---------------------------------------------------------------------------
        private void OuvrirCOMentrant_Click(object sender, System.EventArgs e)
        {
            Port_Speed = Convert.ToInt32(text_vitesse_in.Text);
            Port_Number = TextCOMentrant.Text;
            Port_Name = Port_Number;
            string a = @"\\.\";

            ma_connexion_in = new Connexion_Serie(a + Port_Name, Port_Speed, ParitySetting.NoParity, 8, StopBitsSetting.OneStopBit);
            ma_connexion_in.is_Read_or_Write = true;
            ma_connexion_in.AddingTextToTextboxIn += new Connexion_Serie.BNEventHandler(ma_connexion_in_Action);
            ma_connexion_in.AddingText_Received += new Connexion_Serie.BNEventHandler(ma_connexion_in_Text_Received);

            ma_connexion_in.Ouvrir_Port();
            Console.WriteLine("porthandle : ", ma_connexion_in.Port_handle.ToString());
            //Pour finir, on lance le thread de lecture du port série :
            ma_connexion_in.StartRead();
            if (ma_connexion_in.IsOpen)
            {
                FermerCOMentrant.Enabled = true;
                OuvrirCOMentrant.Enabled = false;
                text_vitesse_in.Enabled = false;
                TextCOMentrant.Enabled = false;
            }
        }


        private void FermerCOMentrant_Click(object sender, System.EventArgs e)
        {
            ma_connexion_in.StopRead(); //arrete la lecture

            ma_connexion_in.Close_Port();
            FermerCOMentrant.Enabled = false;
            OuvrirCOMentrant.Enabled = true;
            text_vitesse_in.Enabled = true;
            TextCOMentrant.Enabled = true;
        }

        #endregion

        #region EVENEMENTS
        //---------------------------------------------------------------------------
        //
        // EVENEMENTS
        //
        //---------------------------------------------------------------------------

        private void ma_connexion_out_Action(object sender, BNEventArgs e)
        {
        }
        private void ma_connexion_in_Action(object sender, BNEventArgs e)
        {
        }

        private void ma_connexion_in_Text_Received(object sender, BNEventArgs e)
        {
            //Il faut rajouter la nouvelle ligne à la listview :
            try
            {
                if (ma_connexion_in.IsOpen)
                {
                    //ma_connexion_out.WriteSentence_Character(text_to_write.Text);
                    //Il faut ajouter la ligne à la listview :
                    int i = col_lvi.Length;
                    ListViewItem[] col_lvi_temp;

                    col_lvi_temp = new ListViewItem[i + 1];
                    for (int j = 0; j < i; j++)
                    {
                        col_lvi_temp[j] = col_lvi[j];
                    }
                    //Je décompose le message que je viens de recevoir :
                    // Il est sous la forme :
                    //Pseudo;message
                    string[] contenu = new string[2];
                    contenu = e.Message.Split((char)';');

                    col_lvi_temp[i] = new ListViewItem(contenu[0]);
                    col_lvi_temp[i].SubItems.Add(DateTime.Now.ToShortTimeString());
                    col_lvi_temp[i].SubItems.Add(contenu[1]);
                    col_lvi_temp[i].ForeColor = System.Drawing.Color.Green;
                    col_lvi_temp[i].Tag = "in";
                    text_to_read.Items.Clear();
                    col_lvi = new ListViewItem[col_lvi_temp.Length];
                    col_lvi = col_lvi_temp;
                    text_to_read.Items.AddRange(col_lvi);
                    //l n'y a plus qu'à recolorier les lignes selon le .tag de chaque ligne :
                    foreach (ListViewItem mon_item in col_lvi)
                    {
                        if ((string)mon_item.Tag == "out")
                        {
                            mon_item.ForeColor = couleur_emission;
                        }
                        else
                        {
                            mon_item.ForeColor = couleur_reception;
                        }
                    }

                    text_to_write.Text = "";
                }
                else
                {
                }
            }
            catch (System.NullReferenceException)
            {
            }

            text_to_read.Text += "(lui) " + e.Message + "\r\n";
        }
        #endregion

        private void bt_Exporter_Click(object sender, System.EventArgs e)
        {

            {

            }

            XmlSerializer serializer = new XmlSerializer(typeof(string));
            //copie d'une source C#.com
            System.IO.TextWriter sw = new StringWriter();
            XmlSerializer ser = new XmlSerializer(typeof(string));

            try
            {
            }
            catch
            {
                throw;
            }
            finally
            {
            }
        }

        private void bt_Importer_Click(object sender, System.EventArgs e)
        {


            try
            {
            }
            catch
            {
                throw;
            }
            finally
            {
            }
        }
    }
}


Merci pour ton aide. A bientot!

  

        


      

        



Commentaire de el_teedee le 11/06/2009 14:01:52

Salut,

comme je te l'ai indiqué précédemment, je n'ai pas de temps à te consacrer. Désolé

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Comment ouvrir une socket bluetooth en c# [ par super_toinou ] Bonjour, Je voudrai ouvrir une socket pour transmettre des String en bluetooth vers autre terminal bluetooth(un pocket pc ou smartphone). Je n'arriv creation d'une application blueTooth [ par youess81 ] slt je ss un debutant en bueTooth je cherche a savoir cmnt je peux deploiyer une application developpée sous VS.net vers un pda ou unsimulateur merci Imprimer depuis un Pocket PC sur une imprimante Bluetooth [ par dysko ] SalutJ'ai vu dans les articles pr&#233;c&#233;dents qu'il n'y a pas&nbsp;de fonctions pour imprimer en c# pour les Pockets.Mais pourtant je sais que c DETECTION PORT SERIE BLUETOOTH SUR POCKET [ par dhinault ] Bonjour, je cherche un moyen simple de recuperer le numero de port serie sortant sur pocket par soft.Je cherche &#233;galement un moyen simple d'activ Application .net pour connexion automatique du Bluetooth sur un PDA [ par mathieu_carter ] Je cherche&nbsp;&#224; r&#233;aliser un programme qui permet de lire les donn&#233;es sur&nbsp;le socket du&nbsp;port s&#233;rie via Bluetooth. Je che Données bluetooth [ par jwiiz ] Bonjour, je cherche comment r&#233;cup&#233;rer les donn&#233;es envoy&#233;es par GPS bluetooth sur mon PDA, et les copier dans un fichier texte. J'a bluetooth dans l'émulateur PPC [ par ledocdoc ] Bonjour, j'aurai aimé savoir s'il était possible d'avoir le bluetooth dans l'emulateur Pocket PC avec Mobil Framework 2.0 sous Windows Mobil 5.0 Merci Pocket PC et envoi de données [ par enzyme ] Bonjour,je voudrais envoyer des données a partir d'un pocket PC 2003 sur un PC via une bluetooth .J'ai acheté une clef usb bluetooth car mon Pocket à PocketPC <==> PC & PC <==> PocketPC [ par enzyme ] Bonjour, j'ai un pocket PC avec en natif du bluetooth et un PC avec une clef bluetooth. je voudrai envoyer à partir du pocketPC "BONJOUR" et voir que Bluetooth C# [ par jeanledesma10 ] Bonjour, je suis en master 2 dinformatique et j'ai un projet concernant le bluetooth et lutilisation de C#.Jessaye de trouver des sources pour ce proj


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales