| 
									
										
										
										
											2023-05-15 21:28:14 +08:00
										 |  |  | let sendText = document.getElementById("sendText"); | 
					
						
							|  |  |  | let sendButton = document.getElementById("sendButton"); | 
					
						
							|  |  |  | let receiveText = document.getElementById("receiveText"); | 
					
						
							|  |  |  | let connectButton = document.getElementById("connectButton"); | 
					
						
							|  |  |  | let statusBar = document.getElementById("statusBar"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //Couple the elements to the Events
 | 
					
						
							|  |  |  | connectButton.addEventListener("click", clickConnect) | 
					
						
							|  |  |  | sendButton.addEventListener("click", clickSend) | 
					
						
							|  |  |  | helpButton.addEventListener("click", clickHelp) | 
					
						
							|  |  |  | statusButton.addEventListener("click", clickStatus) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //When the connectButton is pressed
 | 
					
						
							|  |  |  | async function clickConnect() { | 
					
						
							|  |  |  |     if (port) { | 
					
						
							|  |  |  |         //if already connected, disconnect
 | 
					
						
							|  |  |  |         disconnect(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         //otherwise connect
 | 
					
						
							|  |  |  |         await connect(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //Define outputstream, inputstream and port so they can be used throughout the sketch
 | 
					
						
							|  |  |  | var outputStream, inputStream, port; | 
					
						
							|  |  |  | navigator.serial.addEventListener('connect', e => { | 
					
						
							|  |  |  |     statusBar.innerText = `Connected to ${e.port}`; | 
					
						
							|  |  |  |     connectButton.innerText = "Disconnect" | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  | navigator.serial.addEventListener('disconnect', e => { | 
					
						
							|  |  |  |     statusBar.innerText = `Disconnected`; | 
					
						
							|  |  |  |     connectButton.innerText = "Connect" | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //Connect to the serial
 | 
					
						
							|  |  |  | async function connect() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //Optional filter to only see relevant boards
 | 
					
						
							|  |  |  |     const filter = { | 
					
						
							|  |  |  |         usbVendorId: 0x2341 // Arduino SA
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //Try to connect to the Serial port
 | 
					
						
							|  |  |  |     try { | 
					
						
							|  |  |  |         port = await navigator.serial.requestPort(/*{ filters: [filter] }*/); | 
					
						
							|  |  |  |         // Continue connecting to |port|.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // - Wait for the port to open.
 | 
					
						
							|  |  |  |         await port.open({ baudRate: 1200 }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         statusBar.innerText = "Connected"; | 
					
						
							|  |  |  |         connectButton.innerText = "Disconnect" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         let decoder = new TextDecoderStream(); | 
					
						
							|  |  |  |         inputDone = port.readable.pipeTo(decoder.writable); | 
					
						
							|  |  |  |         inputStream = decoder.readable; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const encoder = new TextEncoderStream(); | 
					
						
							|  |  |  |         outputDone = encoder.readable.pipeTo(port.writable); | 
					
						
							|  |  |  |         outputStream = encoder.writable; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         reader = inputStream.getReader(); | 
					
						
							|  |  |  |         readLoop(); | 
					
						
							|  |  |  |     } catch (e) { | 
					
						
							|  |  |  |         //If the pipeTo error appears; clarify the problem by giving suggestions.
 | 
					
						
							|  |  |  |         if (e == "TypeError: Cannot read property 'pipeTo' of undefined") { | 
					
						
							|  |  |  |             e += "\n Use Google Chrome and enable-experimental-web-platform-features" | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         connectButton.innerText = "Connect" | 
					
						
							|  |  |  |         statusBar.innerText = e; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //Write to the Serial port
 | 
					
						
							|  |  |  | async function writeToStream(line) { | 
					
						
							|  |  |  |     var enc = new TextEncoder(); // always utf-8
 | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     const writer = outputStream.getWriter(); | 
					
						
							| 
									
										
										
										
											2023-05-15 23:52:59 +08:00
										 |  |  |     writer.write(line); | 
					
						
							| 
									
										
										
										
											2023-05-15 21:28:14 +08:00
										 |  |  |     writer.releaseLock(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //Disconnect from the Serial port
 | 
					
						
							|  |  |  | async function disconnect() { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (reader) { | 
					
						
							|  |  |  |         await reader.cancel(); | 
					
						
							|  |  |  |         await inputDone.catch(() => { }); | 
					
						
							|  |  |  |         reader = null; | 
					
						
							|  |  |  |         inputDone = null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (outputStream) { | 
					
						
							|  |  |  |         await outputStream.getWriter().close(); | 
					
						
							|  |  |  |         await outputDone; | 
					
						
							|  |  |  |         outputStream = null; | 
					
						
							|  |  |  |         outputDone = null; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     statusBar.innerText = "Disconnected"; | 
					
						
							|  |  |  |     connectButton.innerText = "Connect" | 
					
						
							|  |  |  |     //Close the port.
 | 
					
						
							|  |  |  |     await port.close(); | 
					
						
							|  |  |  |     port = null; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //When the send button is pressed
 | 
					
						
							|  |  |  | function clickSend() { | 
					
						
							|  |  |  |     writeToStream(sendText.value); | 
					
						
							|  |  |  |     writeToStream("\r"); | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     //and clear the input field, so it's clear it has been sent
 | 
					
						
							|  |  |  |     sendText.value = ""; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-15 21:42:53 +08:00
										 |  |  | function morsekey_func1() { | 
					
						
							| 
									
										
										
										
											2023-05-15 21:44:07 +08:00
										 |  |  |     console.log("send CQ"); | 
					
						
							| 
									
										
										
										
											2023-05-15 21:42:53 +08:00
										 |  |  |     writeToStream("CQ CQ 2M0SQL"); | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     //and clear the input field, so it's clear it has been sent
 | 
					
						
							|  |  |  |     sendText.value = ""; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-15 21:28:14 +08:00
										 |  |  | //Read the incoming data
 | 
					
						
							|  |  |  | async function readLoop() { | 
					
						
							|  |  |  |     while (true) { | 
					
						
							|  |  |  |         const { value, done } = await reader.read(); | 
					
						
							|  |  |  |         if (done === true){ | 
					
						
							|  |  |  |             break; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         console.log(value); | 
					
						
							|  |  |  |         //When recieved something add it to the big textarea
 | 
					
						
							|  |  |  |         receiveText.value += value; | 
					
						
							|  |  |  |         //Scroll to the bottom of the text field
 | 
					
						
							|  |  |  |         receiveText.scrollTop = receiveText.scrollHeight; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-06-02 22:43:53 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function closeModal() { | 
					
						
							|  |  |  | 	var container = document.getElementById("modals-here") | 
					
						
							|  |  |  | 	var backdrop = document.getElementById("modal-backdrop") | 
					
						
							|  |  |  | 	var modal = document.getElementById("modal") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	modal.classList.remove("show") | 
					
						
							|  |  |  | 	backdrop.classList.remove("show") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	setTimeout(function() { | 
					
						
							|  |  |  | 		container.removeChild(backdrop) | 
					
						
							|  |  |  | 		container.removeChild(modal) | 
					
						
							|  |  |  | 	}, 200) | 
					
						
							| 
									
										
										
										
											2023-05-15 21:28:14 +08:00
										 |  |  | } |