2 pièce(s) jointe(s)
JS et port serie : Time Out, buffer mal géré, ésoterisme
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,
Pièce jointe 667189
voir une confusion lors de la reception.
Pièce jointe 667190
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:
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:
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();
}
//-------------------------------------------------------------------- |