Bonjour,
Je rencontre un problème lors du développement d'une interface me permettant de configurer un device USB (WebUSB API).
le device étant une démo board Nucleo STM32.
-> Selection du port et ouverture OK
-> 1er Echange UART avec le device pour lecture des paramètres OK
-> 1er Echange pour la modification et envoie des nouvelles configuration OK
-> Relecture NOK
La difficulté est que parfois j'obtient un time out sur une des valeurs demandées,
voir une confusion lors de la reception.
Chose que je n'obtiens JAMAIS quand j'interroge le device avec un terminal serie (Meme quand je fais le test du singe)
je soupçonne un probleme coté WEB Js.
j'ai passé beaucoup de temps a comprendre sans trouver, discuter aussi avec Mr ChatGPT mais rien.
Je suis a la recherche d'une bonne ame pour jeter un oeil sur le code et me dire "Mais enfin... pourquoi tu fais cela comme ca ????"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 //-------------------------------------------------------------------- async function Get_FreqMeasure() { log("--------------------------------------"); const encoder = new TextEncoder(); const decoder = new TextDecoder(); for (const cmd of BasicLogger_Cmd) { const writer = port.writable.getWriter(); // ⚠️ ouvrir/fermer à chaque itération const frameCmd = '\x02' + "Get_"+ cmd + '\x03'; await writer.write(encoder.encode(frameCmd)); writer.releaseLock(); log("⏩ Commande envoyée : " + frameCmd); const reader = port.readable.getReader(); // ⚠️ ouvrir ici try { const response = await readUntilNewline(reader, decoder); log("✅ Réponse : " + response); const value = response; value_basiclogger[cmd] = value; if (sliderMap[cmd]) { sliderMap[cmd].value = value_basiclogger[cmd]; sliderMap[cmd].classList.remove("slider-modified"); sliderMap[cmd].classList.add("slider-official"); } if (labelMap[cmd]) { labelMap[cmd].textContent = `${value} Hz`; } } catch (err) { log("⚠️ Timeout pour : " + err); } finally{ reader.releaseLock(); // ✅ Toujours libérer, même en cas d'erreur } } updateApplyButtonState(); // ✅ mettre à jour le bouton après réception } //--------------------------------------------------------------------
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 //------------------------------------------------------------ async function Set_FreqMeasure() { log("--------------------------------------"); const encoder = new TextEncoder(); for (const cmd of BasicLogger_Cmd) { const current_value = sliderMap[cmd].value; const frameCmd = '\x02' + "Set_" + cmd +":"+ current_value + '\x03'; const writer = port.writable.getWriter(); await writer.write(encoder.encode(frameCmd)); log("⏩ Commande envoyée : " + frameCmd); writer.releaseLock(); } //alert("✅ Configuration Updated !"); Get_FreqMeasure(); } //--------------------------------------------------------------------
Partager