/// /// import { deployCoreAsync, initAsync, canUseWebSerial, enableWebSerialAsync, setConfirmAsync } from "./deploy"; let bluetoothDialogShown = false; pxt.editor.initExtensionsAsync = function (opts: pxt.editor.ExtensionOptions): Promise { pxt.debug('loading pxt-ev3 target extensions...') const res: pxt.editor.ExtensionResult = { deployCoreAsync, showUploadInstructionsAsync: (fn: string, url: string, confirmAsync: (options: any) => Promise) => { setConfirmAsync(confirmAsync); // https://msdn.microsoft.com/en-us/library/cc848897.aspx // "For security reasons, data URIs are restricted to downloaded resources. // Data URIs cannot be used for navigation, for scripting, or to populate frame or iframe elements" const downloadAgain = !pxt.BrowserUtils.isIE() && !pxt.BrowserUtils.isEdge(); const docUrl = pxt.appTarget.appTheme.usbDocs; const htmlBody = `
${lf("First time here?")}
${lf("You must have version 1.10E or above of the firmware")}
${lf("Check your firmware version here and update if needed")}
1 ${lf("Connect the EV3 to your computer with a USB cable")}
${lf("Use the miniUSB port on the top of the EV3 Brick")}
2 ${lf("Move the .uf2 file to the EV3 Brick")}
${lf("Locate the downloaded .uf2 file and drag it to the EV3 USB drive")}
`; return confirmAsync({ header: lf("Download to your EV3"), htmlBody, hasCloseIcon: true, hideCancel: true, hideAgree: false, agreeLbl: lf("I got it"), className: 'downloaddialog', buttons: [canUseWebSerial() ? { label: lf("Bluetooth"), icon: "bluetooth", className: "bluetooth focused", onclick: () => { pxt.tickEvent("bluetooth.enable"); if (bluetoothDialogShown) { enableWebSerialAsync().done(); } else { bluetoothDialogShown = true; confirmAsync({ header: lf("Bluetooth pairing"), hasCloseIcon: true, hideCancel: true, buttons: [{ label: lf("Help"), icon: "question circle", className: "lightgrey", url: "/bluetooth" }], htmlBody: `

${lf("You will be prompted to select a serial port.")} ${lf("On Windows, look for 'Standard Serial over Bluetooth link'.")} ${lf("If you have paired multiple EV3, you might have to try out multiple ports until you find the correct one.")}

` }).then(() => enableWebSerialAsync()) .then(() => confirmAsync({ header: lf("Bluetooth is ready!"), hasCloseIcon: true, hideCancel: true, htmlBody: `

${lf("Click Download again to send your code to the EV3 over Bluetooth.")}

` })) } } } : undefined, downloadAgain ? { label: fn, icon: "download", className: "lightgrey focused", url, fileName: fn } : undefined, docUrl ? { label: lf("Help"), icon: "help", className: "lightgrey", url: docUrl } : undefined] //timeout: 20000 }).then(() => { }); } }; initAsync().catch(e => { // probably no HID - we'll try this again upon deployment }) return Promise.resolve(res); } // When require()d from node, bind the global pxt namespace // namespace pxt { // export const dummyExport = 1; // } // eval("if (typeof process === 'object' && process + '' === '[object process]') pxt = global.pxt")