Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Idée, bugs, propositions .......
Rubrique "Lazarus" ?
pspic
Passioné
Passioné
Messages : 323
Âge : 73
Enregistré en : septembre 2017
Localisation : 68

#21 Message par pspic » mar. 18 août 2020 07:52

Bonjour,
Je ne vois pas trop clair dans tes explications.
Si cela peut te servir, je joint ici le détail d'un projet qui fonctionne et qui utilise un PIC 18F4550 programmé en MikroBasic sur une carte Easy Pic5.
Ansi qu'une appli sous Delphi 7 Pro et Windows 10.
Je vais aussi préparer un code Hex très simple qui te permet de faire des tests.
Code.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Rubrique "Lazarus" ?
folkeu08
Débutant
Débutant
Messages : 49
Âge : 53
Enregistré en : novembre 2017
Localisation : Ardennes (08)
Contact :

#22 Message par folkeu08 » mar. 18 août 2020 09:19

Bonjour Pspic,
Déjà merci de ton aide.
vite, je répond avant que tu ne te lance dans un travail qui fonctionne déjà de mon côté :
Le source et le hex compilé sous Mikropascal que je posséde pour le 18f4550 fonctionne.
L'application que j'ai commencé dans Lazarus détecte bien ma carte à 18f4550 contenant le hex ci-desssus.
J'ai repris la démo du source FPC-USB-HID que j'ai inséré et qui affiche le listing des cartes USB en HID dans un TMemo (CF ci-dessous la carte de Sonelec est bien détectée) :
sonelec detecte.png

Je cherche à indiquer dans le TLabel dont le fond est rouge que la carte est bien "connectée" lorsqu'elle est présente et "non connectée" lorsqu'elle n'y est pas.
Ensuite pour ce qui est du dialogue, l'auteur du JCVLHIDControlleur réécris pour lazarus m'a indiqué comment lire et écrive à travers le bus dans le post 16 :
Comment la carte est détectée et dialoguer avec
Je bute simplement sur cet affichage de carte connectée ou non.
Merci !
François
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Rubrique "Lazarus" ?
folkeu08
Débutant
Débutant
Messages : 49
Âge : 53
Enregistré en : novembre 2017
Localisation : Ardennes (08)
Contact :

#23 Message par folkeu08 » mar. 18 août 2020 10:00

Re,
Je suis sur le bonne voie et c'est bien dans USB2 qu'il me faut venir ajouter des choses.
Au lancement de l'application, j'ai mon label qui est par défaut à "non détectée". Avant de lancer l'appli, je plug la carte et je lance l'appli, mon label passe à "détecté".
Pour obtenir cela, j'ai ajouté dans l'entête de USB2 un variable comme cela :

Code : Tout sélectionner


unit usb2
;

interface

uses
  SysUtils
, Classes, SyncObjs
  
{$IFDEF usegenerics}
  ,fgl
  
{$ENDIF}
  {$ifdef Unix}
  ,usbcontroller
  
{$else}
  ,JvHidControllerClass
  
{$endif}
  ;

const
  INIFILENAME = 'settings.ini';

 [b] var
  moi 
: string; [/b]

 


Puis plus loin dans le code dans la procedure TUSB.DeviceChange(Sender:TObject);, j'ai ajouté :

Code : Tout sélectionner


if HidDev
.IsPluggedIn AND NOT HidDev.IsCheckedOut then
      begin
        AddInfo
('New device that has not been checked out.');
        [b]Moi := 'Equipement Sonelec /PIC18Fx550 détecté';[/b]
        DeviceArrival(HidDev);
      end;
      if NOT HidDev.IsPluggedIn AND HidDev.IsCheckedOut then
      begin
        AddInfo
('Checkedout device that has been unplugged.');
        [b]Moi := 'Equipement Sonelec /PIC18Fx550 non détecté';[/b]
        DeviceRemoval(HidDev);
      end;                     


et dans ma main à l'affichage :
Detection_Label.Caption := moi;

Il me faut améliorer car si j'ôte la carte le label ne change pas d'état.
:bravo: normal, mon hypothèse n'était pas fausse mais jusqu'à maintenant, je voyais pas trop comment faire.

@Pspic : Juste l'aide pour faire changer l'état du label lorsque la carte est insérée ou enlevée. Merci !
Mais je continue aussi de mon côté.
François

Edit quelques temps après
PS : comment faire pour remplacer Moi := 'Equipement Sonelec /PIC18Fx550 non détecté'; par directement detection_Label.Caption := 'Equipement Sonelec /PIC18Fx550 non détecté';
car si je déclare ma main_Unit dans le uses de USB2 , il veut pas compiler car il m'indique des références circulaires.

Rubrique "Lazarus" ?
folkeu08
Débutant
Débutant
Messages : 49
Âge : 53
Enregistré en : novembre 2017
Localisation : Ardennes (08)
Contact :

#24 Message par folkeu08 » mer. 19 août 2020 13:47

Re suite,
Je pense avoir la solution pour afficher les changements de dėtection dans le label en passant par un timer. La problematique est la même que pour afficher l'heure. Sans timer, l'heure affichée sera toujours la même correspondant a l'heure d'affichage de la form sur un ėvenement "OnShow". Avec le timer, le rafraichissement sera perpetuel.
Je teste tout å l'heure. J'ai pas ma machine sous la main mais l'étincelle vient d'arriver.
A+

Rubrique "Lazarus" ?
pspic
Passioné
Passioné
Messages : 323
Âge : 73
Enregistré en : septembre 2017
Localisation : 68

#25 Message par pspic » jeu. 20 août 2020 10:37

Bonjour,
Tu peux utiliser la propriété HidCtrlDeviceChange pour détecter et afficher l'état de la connexion, voir ci-dessous.

Code : Tout sélectionner

procedure TForm1.HidCtrl1DeviceChange(Sender: TObject);
var
Devtrouve:Boolean;
begin
try
  Dev.Free;
  DevTrouve:=false;
  While HidCtrl1.CheckOut(Dev) do begin
    if (Dev.Attributes.ProductID = $0606) and (Dev.Attributes.VendorID = $1636) then begin   
    CurrentDevice:= Dev;
    DevTrouve:=true;
   end;
  end;
   if DevTrouve then begin
             LabelEtaConnexion.Text:='Connecté';                        Affiche l'état de la connexion
   end
    else begin
            LabelEtaConnexion.Text:='Deconnecté';                     Affiche l'état de la connexion
   if MessageDlg('Carte non branchée ou hors tension'+chr(13)+
   'Brancher la carte et choisir OUI'+ Chr(13)+
   'Pour quitter choisir NON',
    mtWarning   , [mbYes, mbNo], 0) = mrYes then begin
     Dev.Free;
     Application.Restore;
     HidCtrl1.DeviceChange;
     end
    else
     Form1.Close;
    end;
end;

Rubrique "Lazarus" ?
folkeu08
Débutant
Débutant
Messages : 49
Âge : 53
Enregistré en : novembre 2017
Localisation : Ardennes (08)
Contact :

#26 Message par folkeu08 » jeu. 20 août 2020 13:23

Bonjour Pspic,
Merci de l'intêret pour mon soucis. Merci !
Au vu te ton retour, je n'ai peut être pas été assez clair dans l'exposé des choses disponibles alors je vais les préciser.

Le composant JvclHIDContoller ré-écris pour Lazarus n'est pas un composant tiers comme il est souvent utilisé par ajout dans la palette des composants.
Je n'ai donc pas un composant à ajouter dans ma form avec des propriétés et des événements.
Je n'ai juste qu'à déclarer l'utilisation d'une unité (usb2) dans ma MainForm et indiquer le chemin de la bibliothèque dans les options du projet. Cela me déroute :cry:

Pspic, Je ne peux utiliser ton exemple qui fait référence à un évènement du composant comme il est possible d'avoir avec un Tlabel par exemple.

Les procédures :
    procedure DeviceArrival(HidDev: TJvHidDevice);
    procedure DeviceRemoval(HidDev: TJvHidDevice);
    procedure DeviceChange(Sender:TObject);
sont implémentées dans USB2

Lorsque j'utilise ce bout de code dans ma main :
if HidDev.IsPluggedIn AND NOT HidDev.IsCheckedOut then
il me dit ne pas connaître IsPluggedIn et IsCheckedOud
:mur:

Pour ceux qui voudraient s'y essayer, je vous mets en pièce jointe un tuto pour installer Lazarus en 100% portable sur une clé USB pour ne pas polluer votre PC d'une installation non voulue. Rien ne viendra s'enregistrer sur votre disque dur. C'est ainsi que j'utilise Lazarus pour essayer dès qu'une idée me vient. Le clé USB est dans ma poche.
François
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.


Retourner vers « Le forum Fantas-PIC »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités