diff --git a/.gitignore b/.gitignore
index cb1ad9c6..a90906d5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,3 +32,5 @@ lib/
_locales
**/*.DS_Store
+package-lock.json
+package.json
diff --git a/docs/boards/aebo-joystick.md b/docs/boards/aebo-joystick.md
new file mode 100644
index 00000000..f57479f4
--- /dev/null
+++ b/docs/boards/aebo-joystick.md
@@ -0,0 +1,11 @@
+# Aebo Joystick
+
+```sim
+forever(function() {
+
+})
+```
+
+```package
+aebo-joystick
+```
diff --git a/docs/static/libs/aebo-joystick.jpg b/docs/static/libs/aebo-joystick.jpg
new file mode 100644
index 00000000..61f8d2c8
Binary files /dev/null and b/docs/static/libs/aebo-joystick.jpg differ
diff --git a/libs/aebo-joystick/README.md b/libs/aebo-joystick/README.md
new file mode 100644
index 00000000..beb89b46
--- /dev/null
+++ b/libs/aebo-joystick/README.md
@@ -0,0 +1,4 @@
+# Aerobotics Global AEBO Joystick
+
+
+
diff --git a/libs/aebo-joystick/board.json b/libs/aebo-joystick/board.json
new file mode 100644
index 00000000..05b67290
--- /dev/null
+++ b/libs/aebo-joystick/board.json
@@ -0,0 +1,130 @@
+{
+ "driveDisplayName": "AEBOBOOT",
+ "visual": {
+ "image": "pkg://board.svg",
+ "useCrocClips": false,
+ "width": 500,
+ "height": 343,
+ "pinDist": 15,
+ "pinBlocks": [
+ {
+ "x": 89,
+ "y": 183,
+ "labels": [
+ "D5"
+ ]
+ },
+ {
+ "x": 102,
+ "y": 195,
+ "labels": [
+ "A1"
+ ]
+ },
+ {
+ "x": 111,
+ "y": 207,
+ "labels": [
+ "A0"
+ ]
+ },
+ {
+ "x": 346,
+ "y": 231,
+ "labels": [
+ "D4"
+ ]
+ },
+ {
+ "x": 359,
+ "y": 220,
+ "labels": [
+ "D9"
+ ]
+ },
+ {
+ "x": 372,
+ "y": 209,
+ "labels": [
+ "D8"
+ ]
+ }
+ ],
+ "leds": [
+ {
+ "x": 329,
+ "y": 138,
+ "w": 14,
+ "h": 14,
+ "color": "#ffffff",
+ "label": "LED"
+ }
+ ],
+ "touchPads": [],
+ "buttons": [],
+ "reset": {
+ "x": 17.83250718937794,
+ "y": 45.50404575993516,
+ "w": 13.596367783800709,
+ "h": 13.596390332336691
+ }
+
+ },
+ "gpioPinMap": {
+ "A5": "A5",
+ "A4": "A4",
+ "A3": "A3",
+ "A2": "A2",
+ "A1": "A1",
+ "JACK_TX": "TX",
+ "A0": "A0",
+ "AREF": "AREF",
+ "+3V3": "+3V3",
+ "!RESET": "!RESET",
+ "VBAT": "VBAT",
+ "EN": "EN",
+ "VBUS": "VBUS",
+ "D12": "D12",
+ "D11": "D11",
+ "D10": "D10",
+ "D9": "D9",
+ "D8": "D8",
+ "D7":"D7",
+ "D6": "D6",
+ "D5": "D5",
+ "SCL": "SCL",
+ "SDA": "SDA",
+ "LED": "D13",
+ "NEOPIXEL": "NEOPIXEL",
+ "RESET": "RESET",
+ "DISPLAY_CS": "A2",
+ "DISPLAY_SCK": "SCK",
+ "DISPLAY_MOSI": "MOSI",
+ "DISPLAY_DC": "A5",
+ "DISPLAY_RST": "A4",
+ "DISPLAY_MISO": "MISO",
+ "ACCELEROMETER_INT": "D5"
+ },
+ "groundPins": [
+ "GND"
+ ],
+ "threeVoltPins": [
+ "+3V3"
+ ],
+ "spiPins": {
+ "MOSI": "MOSI",
+ "MISO": "MISO",
+ "SCK": "SCK"
+ },
+ "i2cPins": {
+ "SDA": "SDA",
+ "SCL": "SCL"
+ },
+ "onboardComponents": ["pixel"],
+ "marginWhenBreadboarding": [
+ 0,
+ 0,
+ 80,
+ 0
+ ]
+ }
\ No newline at end of file
diff --git a/libs/aebo-joystick/board.svg b/libs/aebo-joystick/board.svg
new file mode 100644
index 00000000..9379c7d8
--- /dev/null
+++ b/libs/aebo-joystick/board.svg
@@ -0,0 +1,1191 @@
+
+
+
+
diff --git a/libs/aebo-joystick/boardhd.svg b/libs/aebo-joystick/boardhd.svg
new file mode 100644
index 00000000..9379c7d8
--- /dev/null
+++ b/libs/aebo-joystick/boardhd.svg
@@ -0,0 +1,1191 @@
+
+
+
+
diff --git a/libs/aebo-joystick/config.ts b/libs/aebo-joystick/config.ts
new file mode 100644
index 00000000..bed408a7
--- /dev/null
+++ b/libs/aebo-joystick/config.ts
@@ -0,0 +1,61 @@
+namespace config {
+ export const NUM_NEOPIXELS = 1;
+
+ export const PIN_A0 = DAL.PA02;
+ export const PIN_A1 = DAL.PB08;
+ export const PIN_A2 = DAL.PB09;
+ export const PIN_A3 = DAL.PA04;
+ export const PIN_A4 = DAL.PA05;
+ export const PIN_A5 = DAL.PB02;
+
+ export const PIN_D0 = DAL.PA11;
+ export const PIN_D1 = DAL.PA10;
+ export const PIN_D2 = DAL.PA14;
+ export const PIN_D3 = DAL.PA09;
+ export const PIN_D4 = DAL.PA08;
+ export const PIN_D5 = DAL.PA15;
+ export const PIN_D6 = DAL.PA20;
+ export const PIN_D7 = DAL.PA21;
+ export const PIN_D8 = DAL.PA06;
+ export const PIN_D9 = DAL.PA07;
+ export const PIN_D10 = DAL.PA18;
+ export const PIN_D11 = DAL.PA16;
+ export const PIN_D12 = DAL.PA19;
+ export const PIN_D13 = DAL.PA17;
+ export const PIN_LED = PIN_D13;
+ export const PIN_RX = DAL.PA11;
+ export const PIN_TX = DAL.PA10;
+ export const PIN_MISO = DAL.PA12;
+ export const PIN_MOSI = DAL.PB10;
+ export const PIN_SCK = DAL.PB11;
+ export const PIN_SCL = DAL.PA23;
+ export const PIN_SDA = DAL.PA22;
+ export const PIN_RXLED = DAL.PB03;
+ export const PIN_TXLED = DAL.PA27;
+ export const PIN_NEOPIXEL = DAL.PA06;
+
+ export const PIN_FLASH_MISO = DAL.PA14;
+ export const PIN_FLASH_MOSI = DAL.PA08;
+ export const PIN_FLASH_SCK = DAL.PA09;
+ export const PIN_FLASH_CS = DAL.PA13;
+
+ export const PIN_ACCELEROMETER_INT = PIN_D5;
+
+ export const PIN_JACK_TX = PIN_TX;
+ export const PIN_JACK_COMMLED = PIN_TXLED;
+
+ export const PIN_DISPLAY_CS = PIN_A2;
+ export const PIN_DISPLAY_SCK = PIN_SCK;
+ export const PIN_DISPLAY_MOSI = PIN_MOSI;
+ export const PIN_DISPLAY_DC = PIN_A4;
+ export const PIN_DISPLAY_RST = PIN_A5;
+ export const PIN_DISPLAY_MISO = PIN_MISO;
+ // export const PIN_DISPLAY_BL = PIN_D4; plugged to power
+ export const DISPLAY_CFG0 = 0x00000090;
+ export const DISPLAY_CFG1 = 0x000e14ff;
+ export const DISPLAY_CFG2 = 24;
+ export const DISPLAY_WIDTH = 160;
+ export const DISPLAY_HEIGHT = 128;
+}
+
+
diff --git a/libs/aebo-joystick/device.d.ts b/libs/aebo-joystick/device.d.ts
new file mode 100644
index 00000000..8b5c6eb7
--- /dev/null
+++ b/libs/aebo-joystick/device.d.ts
@@ -0,0 +1,275 @@
+declare namespace pins {
+ //% fixedInstance shim=pxt::getPin(PIN_LED)
+ const LED: PwmOnlyPin;
+ //% fixedInstance shim=pxt::getPin(PIN_A0)
+ const A0: PwmPin;
+ //% fixedInstance shim=pxt::getPin(PIN_A1)
+ const A1: PwmPin;
+ //% fixedInstance shim=pxt::getPin(PIN_A2)
+ const A2: PwmPin;
+ //% fixedInstance shim=pxt::getPin(PIN_A3)
+ const A3: PwmPin;
+ //% fixedInstance shim=pxt::getPin(PIN_A4)
+ const A4: PwmPin;
+ //% fixedInstance shim=pxt::getPin(PIN_A5)
+ const A5: PwmPin;
+
+ //% fixedInstance shim=pxt::getPin(PIN_D0)
+ const D0: PwmPin;
+ //% fixedInstance shim=pxt::getPin(PIN_D1)
+ const D1: PwmPin;
+ //% fixedInstance shim=pxt::getPin(PIN_D2)
+ const D2: DigitalInOutPin;
+ //% fixedInstance shim=pxt::getPin(PIN_D3)
+ const D3: PwmPin;
+ //% fixedInstance shim=pxt::getPin(PIN_D4)
+ const D4: PwmPin;
+ //% fixedInstance shim=pxt::getPin(PIN_D5)
+ const D5: PwmPin;
+ //% fixedInstance shim=pxt::getPin(PIN_D6)
+ const D6: DigitalInOutPin;
+ //% fixedInstance shim=pxt::getPin(PIN_D7)
+ const D7: DigitalInOutPin;
+
+ //% fixedInstance shim=pxt::getPin(PIN_D8)
+ const D8: PwmPin;
+ //% fixedInstance shim=pxt::getPin(PIN_D9)
+ const D9: PwmPin;
+ //% fixedInstance shim=pxt::getPin(PIN_D10)
+ const D10: DigitalInOutPin;
+ //% fixedInstance shim=pxt::getPin(PIN_D11)
+ const D11: DigitalInOutPin;
+ //% fixedInstance shim=pxt::getPin(PIN_D12)
+ const D12: DigitalInOutPin;
+ //% fixedInstance shim=pxt::getPin(PIN_D13)
+ const D13: DigitalInOutPin;
+ //% fixedInstance shim=pxt::getPin(PIN_RX)
+ const RX: PwmPin;
+ //% fixedInstance shim=pxt::getPin(PIN_TX)
+ const TX: DigitalInOutPin;
+ //% fixedInstance shim=pxt::getPin(PIN_MISO)
+ const MISO: DigitalInOutPin;
+ //% fixedInstance shim=pxt::getPin(PIN_MOSI)
+ const MOSI: DigitalInOutPin;
+ //% fixedInstance shim=pxt::getPin(PIN_SCK)
+ const SCK: DigitalInOutPin;
+ //% fixedInstance shim=pxt::getPin(PIN_SCL)
+ const SCL: DigitalInOutPin;
+ //% fixedInstance shim=pxt::getPin(PIN_SDA)
+ const SDA: DigitalInOutPin;
+
+ // TODO only checked the following two for Metro M0
+ //% fixedInstance shim=pxt::getPin(PIN_RXLED)
+ const RXLED: DigitalInOutPin;
+ //% fixedInstance shim=pxt::getPin(PIN_TX)
+ const TXLED: DigitalInOutPin;
+ //% fixedInstance shim=pxt::getPin(PIN_NEOPIXEL)
+ const NEOPIXEL: DigitalInOutPin;
+}
+
+
+
+declare namespace input {
+ /**
+ * Capacitive pin A0
+ */
+ //% block="touch A0" fixedInstance shim=pxt::getTouchButton(PIN_A0)
+ const touchA0: TouchButton;
+
+ /**
+ * Capacitive pin A1
+ */
+ //% block="touch A1" fixedInstance shim=pxt::getTouchButton(PIN_A1)
+ const touchA1: TouchButton;
+
+ /**
+ * Capacitive pin A2
+ */
+ //% block="touch A2" fixedInstance shim=pxt::getTouchButton(PIN_A2)
+ const touchA2: TouchButton;
+
+ /**
+ * Capacitive pin A3
+ */
+ //% block="touch A3" fixedInstance shim=pxt::getTouchButton(PIN_A3)
+ const touchA3: TouchButton;
+
+ /**
+ * Capacitive pin A4
+ */
+ //% block="touch A4" fixedInstance shim=pxt::getTouchButton(PIN_A4)
+ const touchA4: TouchButton;
+
+ /**
+ * Capacitive pin A5
+ */
+ //% block="touch A5" fixedInstance shim=pxt::getTouchButton(PIN_A5)
+ const touchA5: TouchButton;
+
+ /**
+ * Capacitive pin D8
+ */
+ //% block="touch D8" fixedInstance shim=pxt::getTouchButton(PIN_D8)
+ const touchD8: TouchButton;
+
+ /**
+ * Capacitive pin D9
+ */
+ //% block="touch D9" fixedInstance shim=pxt::getTouchButton(PIN_D9)
+ const touchD9: TouchButton;
+}
+
+declare namespace input {
+
+ /**
+ * Button connecting A0 to GND.
+ */
+ //% block="button A0" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_A0,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonA0: Button;
+
+ /**
+ * Button connecting A1 to GND.
+ */
+ //% block="button A1" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_A1,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonA1: Button;
+
+ /**
+ * Button connecting A2 to GND.
+ */
+ //% block="button A2" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_A2,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonA2: Button;
+
+ /**
+ * Button connecting A3 to GND.
+ */
+ //% block="button A3" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_A3,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonA3: Button;
+
+ /**
+ * Button connecting A4 to GND.
+ */
+ //% block="button A4" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_A4,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonA4: Button;
+
+ /**
+ * Button connecting A5 to GND.
+ */
+ //% block="button A5" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_A5,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonA5: Button;
+
+ /**
+ * Button connecting D0 to GND.
+ */
+ //% block="button D0" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_D0,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonD0: Button;
+
+ /**
+ * Button connecting D1 to GND.
+ */
+ //% block="button D1" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_D1,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonD1: Button;
+
+ /**
+ * Button connecting D2 to GND.
+ */
+ //% block="button D2" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_D2,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonD2: Button;
+
+ /**
+ * Button connecting D3 to GND.
+ */
+ //% block="button D3" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_D3,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonD3: Button;
+
+ /**
+ * Button connecting D4 to GND.
+ */
+ //% block="button D4" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_D4,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonD4: Button;
+
+ /**
+ * Button connecting D5 to GND.
+ */
+ //% block="button D5" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_D5,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonD5: Button;
+
+ /**
+ * Button connecting D6 to GND.
+ */
+ //% block="button D6" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_D6,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonD6: Button;
+
+ /**
+ * Button connecting D7 to GND.
+ */
+ //% block="button D7" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_D7,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonD7: Button;
+
+ /**
+ * Button connecting D8 to GND.
+ */
+ //% block="button D8" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_D8,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonD8: Button;
+
+ /**
+ * Button connecting D9 to GND.
+ */
+ //% block="button D9" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_D9,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonD9: Button;
+
+ /**
+ * Button connecting D10 to GND.
+ */
+ //% block="button D10" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_D10,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonD10: Button;
+
+ /**
+ * Button connecting D11 to GND.
+ */
+ //% block="button D11" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_D11,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonD11: Button;
+
+ /**
+ * Button connecting D12 to GND.
+ */
+ //% block="button D12" fixedInstance
+ //% shim=pxt::getButtonByPin(PIN_D12,BUTTON_ACTIVE_LOW_PULL_UP)
+ //% parts="buttons"
+ const buttonD12: Button;
+}
\ No newline at end of file
diff --git a/libs/aebo-joystick/pxt.json b/libs/aebo-joystick/pxt.json
new file mode 100644
index 00000000..92bc7399
--- /dev/null
+++ b/libs/aebo-joystick/pxt.json
@@ -0,0 +1,47 @@
+{
+ "name": "aebo-joystick",
+ "description": "Support for AEBO Joystick",
+ "files": [
+ "README.md",
+ "device.d.ts",
+ "config.ts",
+ "board.json",
+ "board.svg"
+ ],
+ "core": true,
+ "dependencies": {
+ "core---samd": "file:../core---samd",
+ "buttons": "file:../buttons",
+ "light": "file:../light",
+ "accelerometer": "file:../accelerometer",
+ "mixer---samd": "file:../mixer---samd",
+ "touch": "file:../touch",
+ "pixel": "file:../pixel",
+ "serial": "file:../serial",
+ "storage": "file:../storage"
+ },
+ "public": true,
+ "compileServiceVariant": "samd21",
+ "firmwareUrl": "https://www.aeroboticsglobal.com",
+ "weight": 100,
+ "features": [
+ "uf2",
+ "pixel",
+ "pinled",
+ "pind0",
+ "pind1",
+ "pina0",
+ "pina1",
+ "buttond0",
+ "buttond1",
+ "toucha0",
+ "toucha1",
+ "storage",
+ "light",
+ "screen",
+ "jacdac",
+ "music",
+ "accelerometer",
+ "lcd"
+ ]
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 199eee2b..12043667 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "pxt-maker",
- "version": "0.15.63",
+ "version": "0.15.62",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "pxt-maker",
- "version": "0.15.63",
+ "version": "0.15.62",
"license": "MIT",
"dependencies": {
"pxt-common-packages": "9.5.1",
@@ -3315,7 +3315,7 @@
"node_modules/lodash.memoize": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
- "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A=="
+ "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8="
},
"node_modules/lodash.uniq": {
"version": "4.5.0",
@@ -3479,7 +3479,7 @@
"node_modules/minimalistic-crypto-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
},
"node_modules/minimatch": {
"version": "3.0.4",
@@ -9754,7 +9754,7 @@
"lodash.memoize": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
- "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A=="
+ "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8="
},
"lodash.uniq": {
"version": "4.5.0",
@@ -9875,7 +9875,7 @@
"minimalistic-crypto-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
},
"minimatch": {
"version": "3.0.4",
diff --git a/package.json b/package.json
index 98a8acf0..2b043267 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "pxt-maker",
- "version": "0.15.63",
+ "version": "0.15.62",
"description": "Microsoft MakeCode Maker Boards",
"public": true,
"keywords": [
@@ -43,7 +43,7 @@
"typescript": "^4.2.3"
},
"dependencies": {
- "pxt-common-packages": "9.5.10",
+ "pxt-common-packages": "9.5.1",
"pxt-core": "7.5.27",
"webusb": "^1.1.1"
},
diff --git a/pxtarget.json b/pxtarget.json
index 5f67a3a9..1f360587 100644
--- a/pxtarget.json
+++ b/pxtarget.json
@@ -104,7 +104,8 @@
"libs/jacdac-nrfbrain",
"libs/jacdac-brain-f4",
"libs/jacdac-brain-rp2040",
- "libs/jacdac-iot-s2"
+ "libs/jacdac-iot-s2","libs/aebo-joystick"
+
],
"serial": {
"useHF2": true,