Compare commits
207 Commits
Author | SHA1 | Date | |
---|---|---|---|
72d3cb64eb | |||
735cdc743c | |||
f8a5244146 | |||
b5c1acd363 | |||
29fc2c6681 | |||
a7534b0680 | |||
2a2f31d71c | |||
1ec778276d | |||
186ecb6493 | |||
623269e239 | |||
6264e32223 | |||
bc8b97faba | |||
df64034519 | |||
3ef7fe6a5a | |||
2b4d71ac8b | |||
aec1cf2ca6 | |||
d1d6abebb4 | |||
df04e9f0d1 | |||
a1b0b5153c | |||
00b4e8dc01 | |||
7a8f540b27 | |||
f04222fecb | |||
ede7c8b29b | |||
3dffd14abb | |||
fbf653834e | |||
166014bd92 | |||
3811461274 | |||
dbd3837dba | |||
db79634446 | |||
7f710c7d78 | |||
ce8bd38cb7 | |||
56dc85e6ff | |||
60f921c173 | |||
28fc309a64 | |||
e28cd3c3c6 | |||
4d2981489d | |||
f7f9a29e55 | |||
be88603d57 | |||
0dc9f53e30 | |||
9cb426e060 | |||
38c60710d1 | |||
5c62e5d697 | |||
63268c61a8 | |||
0c0c1cdd73 | |||
3d70526d05 | |||
cf1b85f85b | |||
1f7ad1f114 | |||
b1d8ab0206 | |||
8bfa79fd15 | |||
991aa40f19 | |||
279f72c800 | |||
2420a7c781 | |||
7f134f330d | |||
a91c28bd56 | |||
a5aca0dfcf | |||
b1fd48882c | |||
a34004c14a | |||
9db0335844 | |||
ae8cb2dc53 | |||
3fb21e590c | |||
4376d3cefe | |||
b31d6188f9 | |||
7a741622a9 | |||
a1104010e4 | |||
a39067a0f4 | |||
f2ccad6c26 | |||
8fe328b2e8 | |||
b984af2130 | |||
fcfcf901aa | |||
969ecee5b5 | |||
cd5e5d55bc | |||
7730b7c18f | |||
254a979086 | |||
a846685d26 | |||
1a7667724d | |||
1d49ba4cf0 | |||
70dd486320 | |||
9e60666b66 | |||
0de9102f96 | |||
53dd4206a0 | |||
9b2fdabdcc | |||
3af4d8cf18 | |||
9f2368b59e | |||
08f79ee743 | |||
5ec4a3118a | |||
352e59bfad | |||
143c703bf2 | |||
37eb855df6 | |||
47dac2a175 | |||
211ec7a65d | |||
d4220593b0 | |||
5d861e1e6d | |||
64aa0fd6f5 | |||
5be188d6e7 | |||
502cca6cc0 | |||
703a876a84 | |||
ca1e3e7231 | |||
a0e971d49f | |||
750faf42e4 | |||
b359411058 | |||
9c140a5e6f | |||
fad68499e5 | |||
c861fd6c65 | |||
db961f78a5 | |||
975b995f09 | |||
167ba57d2b | |||
d40c0763f1 | |||
8c2ecdd42e | |||
9d58ea8b1c | |||
22864af73d | |||
53bb4ec7e9 | |||
8e3694661a | |||
2ba1b0c262 | |||
a61e6f539e | |||
cc3c966427 | |||
ef5bee5a21 | |||
800682e8cc | |||
291ea7169f | |||
ef6c3a6617 | |||
734e81f4be | |||
8e1acfc7df | |||
01c56e1111 | |||
dfbf06fc0e | |||
d1902a83ca | |||
aeff3d9f45 | |||
6530bc26ae | |||
8ea9f1fb26 | |||
1e94e04104 | |||
e95d29286a | |||
14d50810cb | |||
250e21b5c9 | |||
98eab3672f | |||
360e2b7ba6 | |||
f255e1a903 | |||
d4762cc5b5 | |||
749b5266cb | |||
bbd23f6d26 | |||
4bef7d50bd | |||
bf423ca037 | |||
7556796eb6 | |||
0a380a70d1 | |||
5c57e0faa4 | |||
41abeb62c3 | |||
b6eeeef4d5 | |||
b5b7edb978 | |||
a65fe1343c | |||
3165fb3749 | |||
2789887f3b | |||
d230fdd2fb | |||
88c9ef5b22 | |||
154115cc66 | |||
145dbaeb8f | |||
1c8ceaef17 | |||
e30c6f7149 | |||
e69174ed0f | |||
303d37ac9b | |||
69e2b41c40 | |||
8f04c8c20a | |||
7661df09c8 | |||
62cbacc8ba | |||
a9fd336093 | |||
d800f5fcb9 | |||
29e6f51798 | |||
ffb671d6b1 | |||
8eb4200b46 | |||
dfc7a1ddb9 | |||
5e2ea5056b | |||
c417f0ed93 | |||
ce85907019 | |||
8cf0984a3f | |||
8eb1b98cd4 | |||
53f55c031c | |||
61b1150b8f | |||
f574b91098 | |||
4a52f93367 | |||
fd0193e983 | |||
566326ea17 | |||
d7e1ec41b8 | |||
620297b95e | |||
e9862751ba | |||
5df83bb079 | |||
903c0ec6bd | |||
4be57eee9a | |||
89a2178ff5 | |||
b3ffabba41 | |||
c98e65a68c | |||
2c70784251 | |||
00333b0257 | |||
d01c801f63 | |||
05828ddcd9 | |||
f473835604 | |||
d82da1f877 | |||
94706adc40 | |||
79fb4e4ff7 | |||
dae84afded | |||
82d93a2b91 | |||
45cbbd342b | |||
5c7779927c | |||
df3d3b41ab | |||
d691ebfd52 | |||
a7bd9f6708 | |||
c3d3747cd8 | |||
7bc5488f25 | |||
f27aa28f8e | |||
12ccf21e28 | |||
c557929fb2 | |||
2e58a31b07 |
26
CONTRIBUTING.md
Normal file
@ -0,0 +1,26 @@
|
||||
# Contributing Code
|
||||
|
||||
PXT accepts bug fix pull requests. For a bug fix PR to be accepted, it must first have a tracking issue that has been marked approved. Your PR should link to the bug you are fixing. If you've submitted a PR for a bug, please post a comment in the bug to avoid duplication of effort.
|
||||
|
||||
PXT also accepts new feature pull requests. For a feature-level PR to be accepted, it first needs to have design discussion. Design discussion can take one of two forms a) a feature request in the issue tracker that has been marked as approved or b) the PR must be accompanied by a full design spec and this spec is later approved in the open design discussion. Features are evaluated against their complexity, impact on other features, roadmap alignment, and maintainability.
|
||||
|
||||
These two blogs posts on contributing code to open source projects are a good reference: [Open Source Contribution Etiquette](http://tirania.org/blog/archive/2010/Dec-31.html) by Miguel de Icaza and [Don't "Push" Your Pull Requests](https://www.igvita.com/2011/12/19/dont-push-your-pull-requests/) by Ilya Grigorik.
|
||||
|
||||
## Security
|
||||
|
||||
If you believe you have found a security issue in PXT, please share it with us privately following the guidance at the Microsoft [Security TechCenter](https://technet.microsoft.com/en-us/security/ff852094). Reporting it via this channel helps minimize risk to projects built with PXT.
|
||||
|
||||
## Legal
|
||||
|
||||
You will need to complete a Contributor License Agreement (CLA) before your pull request can be accepted. This agreement testifies that you are granting us permission to use the source code you are submitting, and that this work is being submitted under appropriate license that we can use it.
|
||||
|
||||
You can complete the CLA by going through the steps at https://cla.microsoft.com. Once we have received the signed CLA, we'll review the request. You will only need to do this once.
|
||||
|
||||
## Housekeeping
|
||||
|
||||
Your pull request should:
|
||||
* Include a description of what your change intends to do
|
||||
* Be a child commit of a reasonably recent commit in the master branch
|
||||
* Pass all unit tests
|
||||
* Have a clear commit message
|
||||
* Include adequate tests
|
25
LICENSE.txt
Normal file
@ -0,0 +1,25 @@
|
||||
PXT - Programming Experience Toolkit
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) Microsoft Corporation
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
59
cmds/cmds.ts
@ -1,59 +0,0 @@
|
||||
/// <reference path="../node_modules/pxt-core/built/pxt.d.ts"/>
|
||||
|
||||
import * as fs from "fs";
|
||||
import * as path from "path";
|
||||
import * as child_process from "child_process";
|
||||
|
||||
let writeFileAsync: any = Promise.promisify(fs.writeFile)
|
||||
let execAsync: (cmd: string, options?: { cwd?: string }) => Promise<Buffer> = Promise.promisify(child_process.exec)
|
||||
let readDirAsync = Promise.promisify(fs.readdir)
|
||||
|
||||
|
||||
export function deployCoreAsync(res: ts.pxtc.CompileResult) {
|
||||
return getBitDrivesAsync()
|
||||
.then(drives => {
|
||||
if (drives.length == 0) {
|
||||
console.log("cannot find any drives to deploy to");
|
||||
return Promise.resolve(0);
|
||||
}
|
||||
|
||||
console.log(`copy ${ts.pxtc.BINARY_HEX} to ` + drives.join(", "));
|
||||
|
||||
let writeHexFile = (filename: string) => {
|
||||
return writeFileAsync(filename + ts.pxtc.BINARY_HEX, res.outfiles[ts.pxtc.BINARY_HEX])
|
||||
.then(() => console.log("wrote hex file to " + filename));
|
||||
};
|
||||
|
||||
return Promise.map(drives, d => writeHexFile(d))
|
||||
.then(() => drives.length);
|
||||
});
|
||||
}
|
||||
|
||||
function getBitDrivesAsync(): Promise<string[]> {
|
||||
if (process.platform == "win32") {
|
||||
const rx = new RegExp("^([A-Z]:).* " + pxt.appTarget.compile.deployDrives)
|
||||
return execAsync("wmic PATH Win32_LogicalDisk get DeviceID, VolumeName, FileSystem")
|
||||
.then(buf => {
|
||||
let res: string[] = []
|
||||
buf.toString("utf8").split(/\n/).forEach(ln => {
|
||||
let m = rx.exec(ln)
|
||||
if (m) {
|
||||
res.push(m[1] + "/")
|
||||
}
|
||||
})
|
||||
return res
|
||||
})
|
||||
}
|
||||
else if (process.platform == "darwin") {
|
||||
const rx = new RegExp(pxt.appTarget.compile.deployDrives)
|
||||
return readDirAsync("/Volumes")
|
||||
.then(lst => lst.filter(s => rx.test(s)).map(s => "/Volumes/" + s + "/"))
|
||||
} else if (process.platform == "linux") {
|
||||
const rx = new RegExp(pxt.appTarget.compile.deployDrives)
|
||||
const user = process.env["USER"]
|
||||
return readDirAsync(`/media/${user}`)
|
||||
.then(lst => lst.filter(s => rx.test(s)).map(s => `/media/${user}/${s}/`))
|
||||
} else {
|
||||
return Promise.resolve([])
|
||||
}
|
||||
}
|
@ -1,3 +1,6 @@
|
||||
/// <reference path="../node_modules/pxt-core/typings/globals/node/index.d.ts"/>
|
||||
/// <reference path="../node_modules/pxt-core/built/pxtlib.d.ts" />
|
||||
|
||||
import * as path from "path";
|
||||
export let pxtCore = require("pxt-core");
|
||||
// require.resolve() gives path to [pxt dir]/built/pxt.js, so move up twice to get pxt root dir
|
||||
|
@ -2,90 +2,4 @@
|
||||
|
||||
# About
|
||||
|
||||
### @description A Blocks / Javascript code editor for the micro:bit, a pocket-size computer with 5x5 display, sensors and Bluetooth.
|
||||
|
||||
The [BBC micro:bit](https://www.microbit.co.uk) is a [pocket-size computer](/device) with a 5x5 display of 25 LEDs, Bluetooth and sensors that can be programmed by anyone.
|
||||
The BBC micro:bit was made possible by many [partners](https://www.microbit.co.uk/partners).
|
||||
|
||||
The micro:bit provides an easy and fun introduction to programming and making – switch on, program it to do something fun – wear it, customize it.
|
||||
Just like Arduino, the micro:bit can be connected to and interact with sensors, displays, and other devices.
|
||||
|
||||
* [Read the docs](/docs)
|
||||
|
||||
## [Hardware: The Device](/device)
|
||||
|
||||
The BBC micro:bit is packaged with sensors, radio and other goodies. Learn about the [hardware components](/device) of the micro:bit to make the most of it!
|
||||
|
||||
## Programming: [Blocks](/blocks) or [JavaScript](/javascript)
|
||||
|
||||
You can program the micro:bit using [Blocks](/blocks) or [JavaScript](/javascript) in your web browser via the [micro:bit APIs](/reference):
|
||||
|
||||
```block
|
||||
input.onButtonPressed(Button.A, () => {
|
||||
basic.showString("Hi!");
|
||||
})
|
||||
```
|
||||
```typescript
|
||||
input.onButtonPressed(Button.A, () => {
|
||||
basic.showString("Hi!");
|
||||
})
|
||||
```
|
||||
|
||||
The editor work in [most modern browsers](/browsers), work [offline](/offline) once loaded and do not require any installation.
|
||||
|
||||
## [Compile and Flash: Your Program!](/device/usb)
|
||||
|
||||
When you have your code ready, you connect your micro:bit to a computer via a USB cable, so it appears as a mounted drive (named MICROBIT).
|
||||
|
||||
Compilation to ARM thumb machine code from [Blocks](/blocks) or [JavaScript](/javascript) happens in the browser. You save the ARM binary
|
||||
program to a file, which you then copy to the micro:bit drive, which flashes the micro:bit device with the new program.
|
||||
|
||||
## Simulator: Test Your Code
|
||||
|
||||
You can run your code using the micro:bit simulator, all within the confines of a web browser.
|
||||
The simulator has support for the LED screen, buttons, as well as compass, accelerometer, and digital I/O pins.
|
||||
|
||||
```sim
|
||||
basic.forever(() => {
|
||||
basic.showString("Hi!");
|
||||
})
|
||||
input.onButtonPressed(Button.A, () => {
|
||||
led.stopAnimation();
|
||||
basic.showLeds(`
|
||||
. . . . .
|
||||
. # . # .
|
||||
. . . . .
|
||||
# . . . #
|
||||
. # # # .`);
|
||||
});
|
||||
input.onButtonPressed(Button.B, () => {
|
||||
led.stopAnimation();
|
||||
basic.showLeds(`
|
||||
. # . # .
|
||||
# . # . #
|
||||
# . . . #
|
||||
. # . # .
|
||||
. . # . .`);
|
||||
});
|
||||
```
|
||||
|
||||
## C++ Runtime
|
||||
|
||||
The [C++ micro:bit runtime](http://lancaster-university.github.io/microbit-docs/), created at [Lancaster University](http://www.lancaster.ac.uk/), provides access to the hardware functions of the micro:bit,
|
||||
as well as a set of helper functions (such as displaying a number/image/string on the LED screen).
|
||||
|
||||
The [micro:bit library](/reference) mirrors the functions of the C++ library.
|
||||
When code is compiled to ARM machine code, the calls to JavaScript micro:bit functions are replaced with calls to the corresponding C++ functions.
|
||||
|
||||
## [Command Line Tools](/cli)
|
||||
|
||||
Looking to use pxt.microbit.org in your favorite editor? Install the [command line tools](/cli) and get rolling!
|
||||
|
||||
## [Packages](/packages)
|
||||
|
||||
Create, edit and distribute your own blocks and JavaScript using [packages](/packages). Packages are hosted on GitHub and may be written
|
||||
using C++, JavaScript and/or ARM thumb.
|
||||
|
||||
## [Open Source](/open-source)
|
||||
|
||||
The code for the micro:bit is [open source](/open-source) on GitHub. Contributors are welcome!
|
||||
Read more at https://calliope.cc .
|
18
docs/docs.md
@ -2,12 +2,6 @@
|
||||
|
||||
### @description Links to the documentation, reference and projects.
|
||||
|
||||
### Things to do
|
||||
|
||||
* **[Getting Started](/getting-started)**
|
||||
* [Projects](/projects)
|
||||
* [Lessons](/lessons)
|
||||
|
||||
### @boardname@ reference
|
||||
|
||||
* [The @boardname@ APIs](/reference)
|
||||
@ -17,15 +11,3 @@
|
||||
|
||||
* [Blocks language](/blocks)
|
||||
* [JavaScript language](/javascript)
|
||||
|
||||
### More questions?
|
||||
|
||||
* [Frequently Asked Question](/faq)
|
||||
* [Help Translate](/translate)
|
||||
* [Embedding project](/share)
|
||||
|
||||
### Developers
|
||||
|
||||
* [Command Line Interface](/cli)
|
||||
* Learn about [packages](/packages)
|
||||
|
||||
|
@ -1,3 +1,3 @@
|
||||
{
|
||||
"appref": "v0.5.63"
|
||||
"appref": "v0.8.21"
|
||||
}
|
||||
|
30
docs/reference/pins/set-events.md
Normal file
@ -0,0 +1,30 @@
|
||||
# Set Events
|
||||
|
||||
Configure the type of events emitted by a given pin.
|
||||
|
||||
```sig
|
||||
pins.setEvents(DigitalPin.P0, PinEventType.Edge);
|
||||
```
|
||||
|
||||
### Parameters
|
||||
|
||||
* ``name``: The @boardname@ hardware pin to configure (``P0`` through ``P20``)
|
||||
* ``type``: The type of events this pin should emit
|
||||
|
||||
### Example
|
||||
|
||||
The following example configures pin ``P0`` and then
|
||||
subscribes to the rise and fall events.
|
||||
|
||||
```blocks
|
||||
control.onEvent(control.eventSourceId(EventBusSource.MICROBIT_ID_IO_P0), control.eventValueId(EventBusValue.MICROBIT_PIN_EVT_RISE), () => {
|
||||
basic.showString("Rise")
|
||||
})
|
||||
control.onEvent(control.eventSourceId(EventBusSource.MICROBIT_ID_IO_P0), control.eventValueId(EventBusValue.MICROBIT_PIN_EVT_FALL), () => {
|
||||
basic.showString("Fall")
|
||||
})
|
||||
pins.setEvents(DigitalPin.P0, PinEventType.Edge)
|
||||
```
|
||||
|
||||
**This is an advanced API.** For more information, see the
|
||||
[@boardname@ runtime messageBus documentation](https://lancaster-university.github.io/microbit-docs/ubit/messageBus/)
|
@ -7,8 +7,11 @@ serial.writeLine("");
|
||||
serial.writeNumber(0);
|
||||
serial.writeValue("x", 0);
|
||||
serial.writeString("");
|
||||
serial.readUntil(",");
|
||||
serial.readLine();
|
||||
serial.readString();
|
||||
serial.redirect(SerialPin.P0, SerialPin.P0, BaudRate.BaudRate115200);
|
||||
serial.onDataReceived(",", () => {})
|
||||
```
|
||||
|
||||
### See Also
|
||||
|
29
docs/reference/serial/on-data-received.md
Normal file
@ -0,0 +1,29 @@
|
||||
# Serial On Data Received
|
||||
|
||||
Registers an event to be fired when one of the delimiter is matched.
|
||||
|
||||
|
||||
```sig
|
||||
serial.onDataReceived(",", () => {})
|
||||
```
|
||||
|
||||
### Parameters
|
||||
|
||||
* `delimiters` is a [string](/reference/types/string) containing any of the character to match
|
||||
|
||||
### Example
|
||||
|
||||
Read values separated by `,`:
|
||||
|
||||
```blocks
|
||||
serial.onDataReceived(serial.delimiters(Delimiters.Comma), () => {
|
||||
basic.showString(serial.readUntil(serial.delimiters(Delimiters.Comma)))
|
||||
})
|
||||
```
|
||||
|
||||
### See also
|
||||
|
||||
[serial](/device/serial),
|
||||
[serial write line](/reference/serial/write-line),
|
||||
[serial write value](/reference/serial/write-value)
|
||||
|
27
docs/reference/serial/read-string.md
Normal file
@ -0,0 +1,27 @@
|
||||
# Serial Read String
|
||||
|
||||
Read the buffered serial data as a string
|
||||
|
||||
```sig
|
||||
serial.readString();
|
||||
```
|
||||
|
||||
### Returns
|
||||
|
||||
* a [string](/reference/types/string) containing input from the serial port. Empty if no data available.
|
||||
|
||||
### Example
|
||||
|
||||
The following program scrolls text on the screen as it arrives from serial.
|
||||
|
||||
```blocks
|
||||
basic.forever(() => {
|
||||
basic.showString(serial.readString());
|
||||
});
|
||||
```
|
||||
|
||||
### See also
|
||||
|
||||
[serial](/device/serial),
|
||||
[serial write line](/reference/serial/write-line),
|
||||
[serial write value](/reference/serial/write-value)
|
616
docs/static/Calliope_mini_v1.0.svg
vendored
Normal file
@ -0,0 +1,616 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="530px" height="530px" viewBox="0 0 530 530" enable-background="new 0 0 530 530" xml:space="preserve">
|
||||
<path fill="#034854" d="M520.5,298.5c-18.2,0-32.9-14.7-32.9-32.9s14.7-32.9,32.9-32.9c0.6,0,1.3,0,1.9,0.1
|
||||
c-19.4-9-44.4-27.4-72.1-63.3c-28.8-37.8-28.6-84.7-25.8-115c0.2-2.3,0.4-4.5,0.7-6.6c1.5-14.7-7.2-28.6-21.3-33.6l-1.1-0.4
|
||||
c-9.5-3.4-20.1-2-28.4,3.9c-1.4,1-2.9,2-4.5,3.1c-22.1,14.8-62.8,37.6-104.6,37.6c-39.2,0-80.1-22.2-104.7-38.3
|
||||
c5.7,5.9,9.3,14,9.3,22.9c0,18.2-14.7,32.9-32.9,32.9c-12.4,0-23.2-6.9-28.8-17c2.3,27.8-0.7,71.6-26.4,109.2
|
||||
C60.1,199.2,27,220.2,3.3,232.3c2-0.4,4.1-0.6,6.2-0.6c18.2,0,33,14.4,32.9,32.8c0,18.2-14.7,32.9-32.9,32.9c-2,0-4-0.2-5.9-0.5
|
||||
c17.2,5.6,37.6,16.2,71.3,56.2c34.4,40.4,35.9,94.5,32.3,124.1c-1.8,13.7,1.6,27.9,12.5,36.3c10.4,8.1,28.8,5.4,39.5-2.5
|
||||
c12.4-9.3,25.8-18.2,39.5-24.5c15.5-7.2,30.1-11.1,39.6-11.8c5-0.5,9.8-2.3,11.4-7.1c2-5.7,6.2-12.7,15.9-12.7
|
||||
c9.3,0,13.8,6.4,15.9,12c1.6,4.3,5.4,7.3,10,7.7c6.6,0.5,18.4,3.2,39.3,11.2c17,6.6,29.6,16.2,40.2,23.2
|
||||
c18.4,11.8,32.1,8.8,41.4,2.9c8.3-5.2,12.7-14.9,11.4-24.8c-3.1-22-5.8-73,22-121.1c21.5-36.7,54.4-56.1,77.5-67.5
|
||||
C522.3,298.5,521.4,298.5,520.5,298.5z M138,502.8c-8.7,0-15.7-7-15.7-15.7s7-15.7,15.7-15.7s15.7,7,15.7,15.7
|
||||
S146.6,502.8,138,502.8z M393.4,501.5c-8.7,0-15.7-7-15.7-15.7c0-8.7,7-15.7,15.7-15.7s15.7,7,15.7,15.7
|
||||
C409.1,494.5,402.1,501.5,393.4,501.5z M393.4,59.2c-8.6,0-15.7-6.9-15.7-15.7c0-8.8,6.9-15.7,15.7-15.7c8.8,0,15.7,6.9,15.7,15.7
|
||||
C409.1,52.3,401.9,59.2,393.4,59.2z"/>
|
||||
<path id="EDGE_VCC" fill="#EFDA48" d="M393.4,10.8c-9.2,0-17.6,3.8-23.6,9.9c-5.8,5.9-9.3,14-9.3,22.9c0,18.2,14.7,32.9,32.9,32.9
|
||||
c14.4,0,26.6-9.3,31.1-22.1c1.2-3.4,1.8-7,1.8-10.8C426.3,25.5,411.5,10.8,393.4,10.8z M393.4,59.2c-8.6,0-15.7-6.9-15.7-15.7
|
||||
c0-8.8,6.9-15.7,15.7-15.7c8.8,0,15.7,6.9,15.7,15.7C409.1,52.3,401.9,59.2,393.4,59.2z"/>
|
||||
<path fill="#BDD1CF" d="M286.9,94h-41.7c-1.7,0-2.8-1.1-2.8-2.8v-32c0-1.7,1.1-2.8,2.8-2.8h41.7c1.7,0,2.8,1.1,2.8,2.8v32
|
||||
C289.7,92.8,288.3,94,286.9,94z"/>
|
||||
<path id="EXT_PWR" fill="#F2F2C8" d="M449.4,343l-37-15.7c-0.3-0.1-0.7-0.2-1.1-0.2l-15.9-6.7l-3,7.4l13.5,5.6l-15.7,37.4l-13.6-5.8
|
||||
l-3,7.4l22.5,9.8l0.1-0.2l31.3,13.2c1.9,0.7,4.1,0,4.7-1.9l19.2-45.7C452,345.8,451.3,343.7,449.4,343z"/>
|
||||
<polygon fill="#F8B133" points="354,361 326.3,361 326.3,311.2 354,311.2 "/>
|
||||
<polygon fill="#1D1D1B" points="190.7,364.4 162.5,336.2 190.7,308 218.9,336.2 "/>
|
||||
<polygon fill="#FFFFFF" points="184.6,379.7 165.5,379.6 165.5,362.4 184.6,362.6 "/>
|
||||
<rect id="ACCEL" x="132.3" y="241.8" fill="#1D1D1B" width="23.8" height="14.4"/>
|
||||
<path fill="#BDD1CF" d="M326.6,84.1h-10.3c-1,0-2-0.9-2-2V66.9c0-1,0.9-2,2-2h10.3c1,0,2,0.9,2,2v15.2
|
||||
C328.4,83.2,327.6,84.1,326.6,84.1z"/>
|
||||
<path fill="#FFFFFF" d="M325.9,74.5c0-3.2-0.3-8.4-4.6-8.4c-5.1,0-4.6,5-4.6,8.4c0,3.2-0.2,8.4,4.6,8.4
|
||||
C326.6,82.9,325.9,77.6,325.9,74.5z"/>
|
||||
<rect id="FLASH" x="350" y="90" fill="#1D1D1B" width="25.3" height="30.8"/>
|
||||
<rect id="G_A0" x="80.5" y="144.4" transform="matrix(-0.5687 0.8226 -0.8226 -0.5687 301.6608 150.839)" fill="#FFFFFF" width="61.5" height="20.3"/>
|
||||
<circle id="G_A0_GND" fill="#BDD1CF" cx="124.8" cy="135.6" r="2.7"/>
|
||||
<circle id="G_A0_VCC" fill="#BDD1CF" cx="115.6" cy="148.2" r="2.7"/>
|
||||
<circle id="G_A0_SDA" fill="#BDD1CF" cx="107.4" cy="160" r="2.7"/>
|
||||
<circle id="G_A0_SCL" fill="#BDD1CF" cx="98" cy="173.5" r="2.7"/>
|
||||
<rect id="G_A1" x="412.2" y="123.3" transform="matrix(-0.8226 0.5687 -0.5687 -0.8226 857.3843 40.5361)" fill="#FFFFFF" width="20.3" height="61.5"/>
|
||||
<circle id="G_A1_RX" fill="#BDD1CF" cx="408.9" cy="135.2" r="2.7"/>
|
||||
<circle id="G_A1_TX" fill="#BDD1CF" cx="418.2" cy="147.7" r="2.7"/>
|
||||
<circle id="G_A1_VCC" fill="#BDD1CF" cx="426.5" cy="159.6" r="2.7"/>
|
||||
<circle id="G_A1_GND" fill="#BDD1CF" cx="435.7" cy="173" r="2.7"/>
|
||||
<path fill="#FFFFFF" d="M116.6,194.9l-37.7,13.2l9.6,30.1l39.3-14.2c7.3-2.3,9.6-9.1,7.3-16.4l-1.3-3.8
|
||||
C131.6,196.8,123.8,192.6,116.6,194.9z M131.6,216.4h-5.8v-2.1l1.3-0.2l-0.7-2.3h-5.7l-0.7,2.3l1.3,0.2v2.1h-5.8v-2.1l1.3-0.2
|
||||
l5.3-14.9h3.6l5.1,14.9l1.3,0.2L131.6,216.4L131.6,216.4z"/>
|
||||
<path fill="#FFFFFF" d="M411.7,193c-7.6-2.1-15.2,2.8-17.4,10.1l-1,3.8c-2.1,7.3,2.1,14.9,9.4,17.1l40,12.8l8.9-30.6L411.7,193z
|
||||
M413.1,215.1c-1,0.9-2.7,1.3-4.6,1.3H400v-2.1l1.8-0.3v-12.4l-1.8-0.3v-2.1h1.8h5.8c2,0,3.6,0.3,4.8,1.3c1,0.7,1.8,2,1.8,3.6
|
||||
c0,0.7-0.2,1.6-0.7,2.1c-0.3,0.7-1,1-1.8,1.5c1,0.2,1.8,0.7,2.3,1.5c0.5,0.7,0.7,1.6,0.7,2.5C414.7,213,414.2,214.1,413.1,215.1z"/>
|
||||
<polygon fill="#FFFFFF" points="122.8,202.8 120.9,208.8 124.8,208.8 "/>
|
||||
<path fill="#FFFFFF" d="M410.1,204.8c0.3-0.3,0.5-0.7,0.5-1.3c0-0.7-0.2-1-0.5-1.5c-0.3-0.3-0.9-0.3-1.8-0.3h-3v3.6h3.2
|
||||
C409.2,205.4,409.8,205.2,410.1,204.8z"/>
|
||||
<path fill="#FFFFFF" d="M408.5,208.7h-3.3v5h3.2c0.9,0,1.6-0.2,2.1-0.5c0.5-0.3,0.7-1,0.7-1.8c0-0.9-0.2-1.5-0.5-2
|
||||
C410.2,208.8,409.6,208.7,408.5,208.7z"/>
|
||||
<rect x="75.5" y="190.3" transform="matrix(-0.4514 0.8923 -0.8923 -0.4514 290.9554 206.6756)" fill="#F9EBA7" width="12.8" height="5"/>
|
||||
<rect x="100" y="202.6" transform="matrix(-0.4514 0.8923 -0.8923 -0.4514 337.565 202.7501)" fill="#F9EBA7" width="12.8" height="5"/>
|
||||
<rect x="53.5" y="233.5" transform="matrix(-0.4514 0.8923 -0.8923 -0.4514 297.6011 288.9738)" fill="#F9EBA7" width="12.8" height="5"/>
|
||||
<rect x="78.2" y="245.9" transform="matrix(-0.4514 0.8923 -0.8923 -0.4514 344.3886 285.0334)" fill="#F9EBA7" width="12.8" height="5"/>
|
||||
<path id="BTN_A_BOX" fill="#BDD1CF" d="M90.1,244.3l-29.7-15.1c-0.9-0.5-1.3-1.6-0.9-2.7l15.1-30.1c0.5-0.9,1.6-1.3,2.7-0.9
|
||||
l29.7,15.1c0.9,0.5,1.3,1.6,0.9,2.7l-15.1,30.2C92.2,244.3,91,244.8,90.1,244.3z"/>
|
||||
<circle id="BTN_A" fill="#42767F" cx="83.8" cy="220" r="11.6"/>
|
||||
<circle fill="#1D1D1B" cx="77.7" cy="201.5" r="3.9"/>
|
||||
<circle fill="#1D1D1B" cx="102.1" cy="214" r="3.9"/>
|
||||
<circle fill="#1D1D1B" cx="65.3" cy="225.8" r="3.9"/>
|
||||
<circle fill="#1D1D1B" cx="89.8" cy="238.3" r="3.9"/>
|
||||
<rect x="423.2" y="198.5" transform="matrix(-0.8998 0.4362 -0.4362 -0.8998 898.2063 203.5292)" fill="#F9EBA7" width="5" height="12.8"/>
|
||||
<rect x="447.9" y="186.5" transform="matrix(-0.8998 0.4362 -0.4362 -0.8998 939.8604 170.0185)" fill="#F9EBA7" width="5" height="12.8"/>
|
||||
<rect x="444.3" y="242.1" transform="matrix(-0.8998 0.4362 -0.4362 -0.8998 957.366 277.2607)" fill="#F9EBA7" width="5" height="12.8"/>
|
||||
<rect x="469" y="230" transform="matrix(-0.8998 0.4362 -0.4362 -0.8998 998.9489 243.5197)" fill="#F9EBA7" width="5" height="12.8"/>
|
||||
<path id="BTN_B_BOX" fill="#BDD1CF" d="M471.6,229.7l-30.1,14.6c-0.9,0.5-2.1,0-2.5-0.9l-14.7-30.3c-0.5-0.9,0-2.1,0.9-2.5
|
||||
l30.1-14.6c0.9-0.5,2.1,0,2.5,0.9l14.7,30.3C473.1,227.9,472.8,229.2,471.6,229.7z"/>
|
||||
<circle id="BTN_B" fill="#BC1254" cx="448.5" cy="220" r="11.6"/>
|
||||
<circle fill="#1D1D1B" cx="430" cy="213.5" r="3.9"/>
|
||||
<circle fill="#1D1D1B" cx="454.8" cy="201.6" r="3.9"/>
|
||||
<circle fill="#1D1D1B" cx="442" cy="238.3" r="3.9"/>
|
||||
<circle fill="#1D1D1B" cx="466.8" cy="226.2" r="3.9"/>
|
||||
<polygon fill="#FFFFFF" points="139,280.5 123.8,280.5 123.8,278.8 138.4,278.8 139.4,277.4 139.4,255.8 141.4,255.8 141.4,278.3
|
||||
"/>
|
||||
<polygon fill="#FFFFFF" points="265.5,108.8 258.6,108.8 258.6,106.9 264.6,106.9 265.9,105.7 265.9,95.9 267.6,95.9 267.6,106.5
|
||||
"/>
|
||||
<polygon fill="#FFFFFF" points="339.1,73.8 328.1,73.8 328.1,75.7 338.5,75.7 339.6,76.8 339.6,100.9 338.5,102.2 337.3,102.2
|
||||
337.3,104 339.1,104 341.5,101.7 341.5,76.1 "/>
|
||||
<polygon fill="#FFFFFF" points="305.8,322.6 277.3,322.6 277.3,320.9 305.2,320.9 306.4,319.6 306.4,301.2 305.2,300 302,300
|
||||
302,298.2 305.8,298.2 308.2,300.6 308.2,320.6 "/>
|
||||
<polygon fill="#FFFFFF" points="412.1,279.8 367.8,279.8 367.8,277.9 412.3,277.9 "/>
|
||||
<polygon fill="#FFFFFF" points="201.2,352.9 222.7,374.6 228.9,374.6 228.9,372.8 223.5,372.8 202.4,351.6 "/>
|
||||
<polygon fill="#FFFFFF" points="406.3,386.2 390.3,402.3 368.3,402.5 368.3,400.7 389.6,400.7 404.3,385.5 "/>
|
||||
<path id="C_GND1" fill="#EFDA48" d="M165.3,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C170.3,436.8,167.9,434.6,165.3,434.6z M165.3,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.5,0,2.5,1,2.5,2.5
|
||||
S166.6,441.9,165.3,441.9z"/>
|
||||
<circle fill="#1D1D1B" cx="165.3" cy="439.6" r="2.5"/>
|
||||
<path id="C_P0" fill="#EFDA48" d="M182.2,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
|
||||
C187.5,436.8,185.1,434.6,182.2,434.6z M182.2,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
S183.6,441.9,182.2,441.9z"/>
|
||||
<circle fill="#1D1D1B" cx="182.2" cy="439.6" r="2.5"/>
|
||||
<path id="C_P2" fill="#EFDA48" d="M199.3,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C204.5,436.8,202.2,434.6,199.3,434.6z M199.3,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
S200.7,441.9,199.3,441.9z"/>
|
||||
<circle fill="#1D1D1B" cx="199.3" cy="439.6" r="2.5"/>
|
||||
<path id="C_P4" fill="#EFDA48" d="M216.4,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C221.4,436.8,219.3,434.6,216.4,434.6z M216.4,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
S217.6,441.9,216.4,441.9z"/>
|
||||
<circle fill="#1D1D1B" cx="216.4" cy="439.6" r="2.5"/>
|
||||
<path id="C_P6" fill="#EFDA48" d="M233.5,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
|
||||
C238.3,436.8,236.1,434.6,233.5,434.6z M233.5,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.5,0,2.5,1,2.5,2.5
|
||||
S234.7,441.9,233.5,441.9z"/>
|
||||
<circle fill="#1D1D1B" cx="233.5" cy="439.6" r="2.5"/>
|
||||
<path id="C_P8" fill="#EFDA48" d="M250.3,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C255.5,436.8,253.3,434.6,250.3,434.6z M250.3,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
S251.8,441.9,250.3,441.9z"/>
|
||||
<circle fill="#1D1D1B" cx="250.3" cy="439.6" r="2.5"/>
|
||||
<path id="C_GND2" fill="#EFDA48" d="M267.5,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C272.6,436.8,270.2,434.6,267.5,434.6z M267.5,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
S268.9,441.9,267.5,441.9z"/>
|
||||
<circle fill="#1D1D1B" cx="267.5" cy="439.6" r="2.5"/>
|
||||
<path id="C_P10" fill="#EFDA48" d="M284.6,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
|
||||
C289.7,436.8,287.4,434.6,284.6,434.6z M284.6,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
S285.8,441.9,284.6,441.9z"/>
|
||||
<circle fill="#1D1D1B" cx="284.6" cy="439.6" r="2.5"/>
|
||||
<path id="C_P12" fill="#EFDA48" d="M301.5,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C306.6,436.8,304.4,434.6,301.5,434.6z M301.5,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
S302.9,441.9,301.5,441.9z"/>
|
||||
<circle fill="#1D1D1B" cx="301.5" cy="439.6" r="2.5"/>
|
||||
<path id="C_P14" fill="#EFDA48" d="M318.7,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
|
||||
C323.5,436.8,321.3,434.6,318.7,434.6z M318.7,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5S320,441.9,318.7,441.9
|
||||
z"/>
|
||||
<circle fill="#1D1D1B" cx="318.7" cy="439.6" r="2.5"/>
|
||||
<path id="C_P16" fill="#EFDA48" d="M335.4,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C340.7,436.8,338.5,434.6,335.4,434.6z M335.4,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5S337,441.9,335.4,441.9
|
||||
z"/>
|
||||
<circle fill="#1D1D1B" cx="335.4" cy="439.6" r="2.5"/>
|
||||
<path id="C_P18" fill="#EFDA48" d="M352.7,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C357.8,436.8,355.5,434.6,352.7,434.6z M352.7,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
S354.1,441.9,352.7,441.9z"/>
|
||||
<circle fill="#1D1D1B" cx="352.7" cy="439.6" r="2.5"/>
|
||||
<path id="C_VCC1" fill="#EFDA48" d="M369.7,434.6c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C374.6,436.8,372.5,434.6,369.7,434.6z M369.7,441.9c-1.3,0-2.5-1-2.5-2.5s1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
S370.9,441.9,369.7,441.9z"/>
|
||||
<circle fill="#1D1D1B" cx="369.7" cy="439.6" r="2.5"/>
|
||||
<path id="C_VCC2" fill="#EFDA48" d="M165.3,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C170.4,419.7,167.9,417.4,165.3,417.4z M165.3,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.5,0,2.5,1,2.5,2.5
|
||||
C167.7,424,166.6,425,165.3,425z"/>
|
||||
<circle fill="#1D1D1B" cx="165.3" cy="422.4" r="2.5"/>
|
||||
<path id="C_P1" fill="#EFDA48" d="M182.2,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
|
||||
C187.4,419.7,185.1,417.4,182.2,417.4z M182.2,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
C184.7,424,183.6,425,182.2,425z"/>
|
||||
<circle fill="#1D1D1B" cx="182.2" cy="422.4" r="2.5"/>
|
||||
<path id="C_P3" fill="#EFDA48" d="M199.3,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C204.4,419.7,202.2,417.4,199.3,417.4z M199.3,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
C201.9,424,200.7,425,199.3,425z"/>
|
||||
<circle fill="#1D1D1B" cx="199.3" cy="422.4" r="2.5"/>
|
||||
<path id="C_P5" fill="#EFDA48" d="M216.4,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C221.5,419.7,219.3,417.4,216.4,417.4z M216.4,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
C218.7,424,217.6,425,216.4,425z"/>
|
||||
<circle fill="#1D1D1B" cx="216.4" cy="422.4" r="2.5"/>
|
||||
<path id="C_P7" fill="#EFDA48" d="M233.5,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
|
||||
C238.6,419.7,236.1,417.4,233.5,417.4z M233.5,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.5,0,2.5,1,2.5,2.5
|
||||
C235.7,424,234.7,425,233.5,425z"/>
|
||||
<circle fill="#1D1D1B" cx="233.5" cy="422.4" r="2.5"/>
|
||||
<path id="C_P9" fill="#EFDA48" d="M250.3,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C255.4,419.7,253.3,417.4,250.3,417.4z M250.3,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
C252.8,424,251.8,425,250.3,425z"/>
|
||||
<circle fill="#1D1D1B" cx="250.3" cy="422.4" r="2.5"/>
|
||||
<path id="C_GND3" fill="#EFDA48" d="M267.5,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C272.6,419.7,270.2,417.4,267.5,417.4z M267.5,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
C270,424,268.9,425,267.5,425z"/>
|
||||
<circle fill="#1D1D1B" cx="267.5" cy="422.4" r="2.5"/>
|
||||
<path id="C_P11" fill="#EFDA48" d="M284.6,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
|
||||
C289.7,419.7,287.4,417.4,284.6,417.4z M284.6,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
C286.9,424,285.8,425,284.6,425z"/>
|
||||
<circle fill="#1D1D1B" cx="284.6" cy="422.4" r="2.5"/>
|
||||
<path id="C_P13" fill="#EFDA48" d="M301.5,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C306.6,419.7,304.4,417.4,301.5,417.4z M301.5,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
C303.9,424,302.9,425,301.5,425z"/>
|
||||
<circle fill="#1D1D1B" cx="301.5" cy="422.4" r="2.5"/>
|
||||
<path id="C_P15" fill="#EFDA48" d="M318.7,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1
|
||||
C323.8,419.7,321.3,417.4,318.7,417.4z M318.7,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
C321,424,320,425,318.7,425z"/>
|
||||
<circle fill="#1D1D1B" cx="318.7" cy="422.4" r="2.5"/>
|
||||
<path id="C_P17" fill="#EFDA48" d="M335.4,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C340.6,419.7,338.5,417.4,335.4,417.4z M335.4,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
C338.1,424,337,425,335.4,425z"/>
|
||||
<circle fill="#1D1D1B" cx="335.4" cy="422.4" r="2.5"/>
|
||||
<path id="C_P19" fill="#EFDA48" d="M352.7,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C357.8,419.7,355.5,417.4,352.7,417.4z M352.7,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
C355.2,424,354.1,425,352.7,425z"/>
|
||||
<circle fill="#1D1D1B" cx="352.7" cy="422.4" r="2.5"/>
|
||||
<path id="C_GND4" fill="#EFDA48" d="M369.7,417.4c-2.8,0-5.1,2.3-5.1,5.1c0,2.8,2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
C374.8,419.7,372.5,417.4,369.7,417.4z M369.7,425c-1.3,0-2.5-1-2.5-2.5c0-1.3,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
C372,424,370.9,425,369.7,425z"/>
|
||||
<circle fill="#1D1D1B" cx="369.7" cy="422.4" r="2.5"/>
|
||||
<path id="M_GND1" fill="#EFDA48" d="M233.5,384.8c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1S236.1,384.8,233.5,384.8z
|
||||
M233.5,392.3c-1.3,0-2.5-1-2.5-2.5c0-1.5,1-2.5,2.5-2.5c1.5,0,2.5,1,2.5,2.5C236,391.3,234.7,392.3,233.5,392.3z"/>
|
||||
<circle fill="#1D1D1B" cx="233.5" cy="389.7" r="2.5"/>
|
||||
<path id="M_OUT1" fill="#EFDA48" d="M250.3,384.8c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
S253.3,384.8,250.3,384.8z M250.3,392.3c-1.3,0-2.5-1-2.5-2.5c0-1.5,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
C252.8,391.3,251.8,392.3,250.3,392.3z"/>
|
||||
<circle fill="#1D1D1B" cx="250.3" cy="389.7" r="2.5"/>
|
||||
<path id="M_OUT2" fill="#EFDA48" d="M267.5,384.8c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
S270.2,384.8,267.5,384.8z M267.5,392.3c-1.3,0-2.5-1-2.5-2.5c0-1.5,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
C270,391.3,268.9,392.3,267.5,392.3z"/>
|
||||
<circle fill="#1D1D1B" cx="267.5" cy="389.7" r="2.5"/>
|
||||
<path id="M_GND2" fill="#EFDA48" d="M284.6,384.8c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1s5.1-2.3,5.1-5.1S287.4,384.8,284.6,384.8z
|
||||
M284.6,392.3c-1.3,0-2.5-1-2.5-2.5c0-1.5,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5C287.1,391.3,285.8,392.3,284.6,392.3z"/>
|
||||
<circle fill="#1D1D1B" cx="284.6" cy="389.7" r="2.5"/>
|
||||
<path id="M_VM" fill="#EFDA48" d="M301.5,384.8c-2.8,0-5.1,2.3-5.1,5.1s2.3,5.1,5.1,5.1c2.8,0,5.1-2.3,5.1-5.1
|
||||
S304.4,384.8,301.5,384.8z M301.5,392.3c-1.3,0-2.5-1-2.5-2.5c0-1.5,1-2.5,2.5-2.5c1.3,0,2.5,1,2.5,2.5
|
||||
C304,391.3,302.9,392.3,301.5,392.3z"/>
|
||||
<circle fill="#1D1D1B" cx="301.5" cy="389.7" r="2.5"/>
|
||||
<path id="EDGE_P0" fill="#EFDA48" d="M9.5,231.7c-2.1,0-4.2,0.2-6.2,0.6c-15.2,2.9-26.7,16.2-26.7,32.2c0,16.1,11.7,29.6,27,32.4
|
||||
c1.9,0.3,3.9,0.5,5.9,0.5c18.2,0,32.9-14.7,32.9-32.9C42.5,246.1,27.7,231.7,9.5,231.7z M9.5,279.9c-0.5,0-1.1,0-1.6-0.1
|
||||
c-0.2,0-0.5-0.1-0.7-0.1c-0.3,0-0.6-0.1-0.9-0.1c-0.2,0-0.4-0.1-0.6-0.2c-0.3-0.1-0.6-0.1-0.9-0.2c-0.1,0-0.3-0.1-0.4-0.2
|
||||
c-0.3-0.1-0.7-0.2-1-0.4c-0.1,0-0.1,0-0.1-0.1c-5.5-2.4-9.4-7.9-9.4-14.4c0-0.5,0-1.1,0.1-1.6c0-0.2,0.1-0.5,0.1-0.7
|
||||
c0-0.3,0.1-0.6,0.1-0.9c0-0.2,0.1-0.4,0.2-0.6c0.1-0.3,0.1-0.6,0.2-0.9c0-0.1,0.1-0.3,0.2-0.4c0.1-0.3,0.2-0.7,0.4-1
|
||||
c0-0.1,0-0.1,0.1-0.2c2.4-5.5,7.9-9.4,14.4-9.4c8.8,0,15.7,6.9,15.7,15.7S18.3,279.9,9.5,279.9z"/>
|
||||
<circle fill="none" cx="138" cy="487.1" r="15.7"/>
|
||||
<rect id="LED_0_0" x="210.7" y="146.2" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_1_0" x="236.8" y="146.2" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_2_0" x="262.7" y="146.2" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_3_0" x="288.7" y="146.2" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_4_0" x="314.6" y="146.2" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_0_1" x="210.7" y="171.7" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_1_1" x="236.8" y="171.7" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_2_1" x="262.7" y="171.7" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_3_1" x="288.7" y="171.7" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_4_1" x="314.6" y="171.7" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_0_2" x="210.7" y="197" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_1_2" x="236.8" y="197" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_2_2" x="262.7" y="197" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_3_2" x="288.7" y="197" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_4_2" x="314.6" y="197" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_0_3" x="210.7" y="222.5" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_1_3" x="236.8" y="222.5" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_2_3" x="262.7" y="222.5" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_3_3" x="288.7" y="222.5" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_4_3" x="314.6" y="222.5" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_0_4" x="210.7" y="247.8" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_1_4" x="236.8" y="247.8" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_2_4" x="262.7" y="247.8" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_3_4" x="288.7" y="247.8" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="LED_4_4" x="314.6" y="247.8" fill="#FFFFFF" width="5.1" height="12.9"/>
|
||||
<rect id="rgbled" x="254.5" y="311.7" fill="#FFFFFF" width="25.5" height="24.8"/>
|
||||
<circle id="rgbledcircle" fill="#BDD1CF" cx="267.1" cy="324" r="9.6"/>
|
||||
<rect id="SPKR" x="408.4" y="265.3" transform="matrix(-0.3593 0.9332 -0.9332 -0.3593 868.265 -8.347)" fill="#1D1D1B" width="57.1" height="57.1"/>
|
||||
<polygon fill="#EFDA48" points="353.4,181.9 353.4,171.1 372.8,171.1 372.8,181.9 "/>
|
||||
<path id="MIC" fill="#1D1D1B" d="M358.4,174c-0.9,0-1.8,0.7-1.8,1.8c0,1,0.7,1.8,1.8,1.8s1.8-0.7,1.8-1.8
|
||||
C360.2,174.8,359.5,174,358.4,174z"/>
|
||||
<polygon fill="#FFFFFF" points="158.1,146.2 163.2,146.2 163.2,155.4 158.1,155.4 "/>
|
||||
<path id="IF_LED" fill="#BDD1CF" d="M162.5,150.9c0-0.9-0.8-1.8-1.8-1.8c-0.9,0-1.8,0.8-1.8,1.8s0.8,1.8,1.8,1.8
|
||||
C161.7,152.6,162.5,151.7,162.5,150.9z"/>
|
||||
<rect x="175.7" y="49.5" fill="#FFFFFF" width="9.5" height="2.3"/>
|
||||
<polygon fill="#FFFFFF" points="350.9,49.6 350.9,45.6 348.6,45.6 348.6,49.6 344.8,49.6 344.8,51.9 348.6,51.9 348.6,56.2
|
||||
350.9,56.2 350.9,51.9 354.8,51.9 354.8,49.6 "/>
|
||||
<path fill="#FFFFFF" d="M36.7,294.8c-0.3-0.3-0.6-0.6-1-0.7c-0.7-0.3-1.8-0.3-2.5,0c-0.4,0.2-0.7,0.4-0.9,0.7
|
||||
c-0.3,0.3-0.4,0.7-0.6,1.1c-0.1,0.4-0.2,0.9-0.2,1.5v2c0,0.6,0.1,1.1,0.2,1.5c0.1,0.4,0.3,0.8,0.6,1.1c0.3,0.3,0.6,0.6,1,0.7
|
||||
c0.4,0.2,0.8,0.2,1.3,0.2c0.5,0,0.9-0.1,1.3-0.2c0.4-0.2,0.7-0.4,0.9-0.7c0.3-0.3,0.4-0.7,0.6-1.1c0.1-0.4,0.2-0.9,0.2-1.5v-2
|
||||
c0-0.6-0.1-1.1-0.2-1.5C37.2,295.5,37,295.1,36.7,294.8z M35.8,296.5l-2.7,2.1v-1.5c0-0.7,0.1-1.2,0.4-1.5c0.2-0.3,0.5-0.5,1-0.5
|
||||
c0.4,0,0.7,0.1,0.9,0.3C35.6,295.8,35.8,296.1,35.8,296.5z M35.9,298.2v1.4c0,0.7-0.1,1.2-0.3,1.5c-0.2,0.3-0.5,0.5-1,0.5
|
||||
c-0.4,0-0.7-0.1-0.9-0.3c-0.2-0.2-0.3-0.5-0.4-0.9L35.9,298.2z"/>
|
||||
<path fill="#FFFFFF" d="M498.8,299.6c-0.1-0.2-0.1-0.4-0.3-0.6c-0.1-0.2-0.3-0.4-0.5-0.5c-0.1-0.1-0.2-0.1-0.3-0.2
|
||||
c0.1,0,0.1-0.1,0.2-0.1c0.2-0.2,0.3-0.3,0.4-0.5c0.1-0.2,0.2-0.4,0.3-0.6c0.1-0.2,0.1-0.4,0.1-0.6c0-0.4-0.1-0.8-0.2-1.1
|
||||
c-0.1-0.3-0.3-0.6-0.6-0.8c-0.2-0.2-0.5-0.4-0.9-0.5c-0.7-0.2-1.6-0.2-2.3,0c-0.3,0.1-0.7,0.3-0.9,0.5c-0.3,0.2-0.5,0.5-0.6,0.8
|
||||
c-0.1,0.3-0.2,0.7-0.2,1v0.3h1.6v-0.3c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.1-0.3,0.2-0.4c0.1-0.1,0.2-0.2,0.4-0.2
|
||||
c0.2-0.1,0.3-0.1,0.5-0.1c0.4,0,0.7,0.1,0.9,0.3c0.2,0.2,0.3,0.5,0.3,0.9c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.1,0.3-0.3,0.4
|
||||
c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0.1-0.4,0.1-0.6,0.1h-1v1.4h1c0.2,0,0.5,0,0.7,0.1c0.2,0.1,0.3,0.1,0.5,0.2c0.1,0.1,0.2,0.2,0.3,0.4
|
||||
c0.1,0.1,0.1,0.3,0.1,0.6c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.1,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.2c-0.3,0.1-0.8,0.1-1.2,0
|
||||
c-0.2-0.1-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.2-0.3-0.4c-0.1-0.1-0.1-0.3-0.1-0.5v-0.3H493v0.3c0,0.4,0.1,0.8,0.2,1.1
|
||||
c0.2,0.3,0.4,0.6,0.6,0.8c0.3,0.2,0.6,0.4,0.9,0.5c0.3,0.1,0.7,0.2,1.1,0.2c0.4,0,0.8-0.1,1.1-0.2c0.4-0.1,0.7-0.3,0.9-0.5
|
||||
c0.3-0.2,0.5-0.5,0.6-0.9c0.1-0.3,0.2-0.7,0.2-1.1C498.9,300.1,498.8,299.9,498.8,299.6z"/>
|
||||
<polygon fill="#FFFFFF" points="177.4,475.2 177.4,476.7 179.6,475.9 179.6,482.8 181.2,482.8 181.2,473.8 180.9,473.8 "/>
|
||||
<path fill="#FFFFFF" d="M349.5,481.4l1.8-2c0.2-0.2,0.4-0.5,0.6-0.7c0.2-0.2,0.4-0.5,0.5-0.7c0.2-0.3,0.3-0.5,0.4-0.8
|
||||
c0.1-0.3,0.1-0.5,0.1-0.8c0-0.4-0.1-0.7-0.2-1c-0.1-0.3-0.3-0.6-0.6-0.8c-0.2-0.2-0.5-0.4-0.9-0.5c-0.7-0.3-1.7-0.3-2.4,0
|
||||
c-0.4,0.1-0.7,0.4-0.9,0.6c-0.3,0.3-0.5,0.6-0.6,0.9c-0.1,0.3-0.2,0.7-0.2,1.1v0.3h1.6v-0.3c0-0.2,0-0.4,0.1-0.6
|
||||
c0.1-0.2,0.1-0.3,0.2-0.4c0.1-0.1,0.2-0.2,0.4-0.3c0.3-0.1,0.8-0.2,1.1,0c0.1,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.2,0.2,0.4
|
||||
c0.1,0.2,0.1,0.3,0.1,0.5c0,0.1,0,0.3-0.1,0.4c0,0.1-0.1,0.3-0.2,0.4c-0.1,0.2-0.2,0.3-0.4,0.6c-0.2,0.2-0.4,0.4-0.6,0.7l-2.8,3.1
|
||||
v1.1h6v-1.4H349.5z"/>
|
||||
<polygon fill="#FFFFFF" points="282.7,282 278.2,282 278.2,274.5 276.6,274.5 276.6,283.5 282.7,283.5 "/>
|
||||
<path fill="#FFFFFF" d="M288,274.5h-1.3l-2.9,8.9h1.6l0.7-2.2h2.4l0.7,2.2h1.6l-2.8-8.7L288,274.5z M288.2,279.8h-1.5l0.8-2.5
|
||||
L288.2,279.8z"/>
|
||||
<path fill="#FFFFFF" d="M296.1,280.5c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.4-0.3,0.5c-0.1,0.2-0.3,0.3-0.4,0.4
|
||||
c-0.3,0.2-0.9,0.2-1.2,0c-0.2-0.1-0.3-0.2-0.4-0.4c-0.1-0.2-0.2-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.6l0-5.9h-1.5l0,6
|
||||
c0,0.4,0.1,0.8,0.2,1.2c0.1,0.4,0.3,0.7,0.6,1c0.3,0.3,0.6,0.5,0.9,0.7c0.4,0.2,0.8,0.2,1.2,0.2c0.4,0,0.8-0.1,1.2-0.2
|
||||
s0.7-0.4,1-0.7c0.3-0.3,0.5-0.6,0.6-1c0.1-0.4,0.2-0.8,0.2-1.2l0-5.9h-1.6L296.1,280.5z"/>
|
||||
<polygon fill="#FFFFFF" points="302.9,283.5 302.9,276 305.5,276 305.5,274.5 298.8,274.5 298.8,276 301.4,276 301.4,283.5 "/>
|
||||
<path fill="#FFFFFF" d="M309.4,283.6c0.4,0,0.7-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.1
|
||||
c0-0.3,0-0.5-0.1-0.8c-0.1-0.2-0.2-0.4-0.3-0.6c-0.1-0.2-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.3-0.6-0.4c-0.2-0.1-0.4-0.2-0.6-0.3
|
||||
c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2-0.1-0.4-0.2-0.5-0.3c-0.1-0.1-0.3-0.2-0.4-0.4c-0.1-0.1-0.1-0.3-0.1-0.5
|
||||
c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.4-0.1,0.8-0.1,1.1,0c0.2,0.1,0.3,0.2,0.4,0.3
|
||||
c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9
|
||||
c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.2-1.5-0.3-2.2,0c-0.4,0.1-0.7,0.3-1,0.5c-0.3,0.2-0.5,0.5-0.7,0.8c-0.2,0.3-0.3,0.7-0.3,1.1
|
||||
c0,0.4,0.1,0.8,0.3,1.1c0.2,0.3,0.4,0.5,0.7,0.8c0.3,0.2,0.6,0.4,0.9,0.5c0.3,0.1,0.6,0.3,0.9,0.4c0.2,0.1,0.4,0.1,0.6,0.2
|
||||
c0.2,0.1,0.4,0.2,0.5,0.3c0.2,0.1,0.3,0.2,0.4,0.4c0.1,0.1,0.1,0.3,0.1,0.5c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.2-0.3,0.3
|
||||
c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0.1-0.8,0.1-1.2,0c-0.2-0.1-0.4-0.2-0.5-0.3c-0.1-0.1-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6
|
||||
l0-0.2h-1.6l0,0.3c0,0.4,0.1,0.8,0.3,1.2c0.2,0.3,0.4,0.6,0.8,0.9c0.3,0.2,0.6,0.4,1,0.5C308.6,283.5,309,283.6,309.4,283.6z"/>
|
||||
<path fill="#FFFFFF" d="M315.5,280.1h1.4c0.4,0,0.8-0.1,1.2-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.9
|
||||
c0.2-0.3,0.2-0.7,0.2-1.2c0-0.4-0.1-0.8-0.2-1.2c-0.2-0.3-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.7-0.2-1.2-0.2h-3v8.9
|
||||
h1.6V280.1z M318,278.3c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1h-1.4v-2.7h1.4c0.2,0,0.4,0,0.6,0.1
|
||||
c0.2,0.1,0.3,0.2,0.5,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.1,0.6c0,0.2,0,0.4-0.1,0.6C318.2,278.1,318.1,278.2,318,278.3z
|
||||
"/>
|
||||
<path fill="#FFFFFF" d="M322.6,280h1.2l1.6,3.3l0.1,0.1h1.5l0-0.4l-1.7-3.4c0.2-0.1,0.3-0.2,0.4-0.3c0.2-0.2,0.4-0.3,0.5-0.5
|
||||
c0.2-0.2,0.3-0.4,0.4-0.7c0.1-0.3,0.1-0.5,0.1-0.8c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.3-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5
|
||||
c-0.4-0.1-0.8-0.2-1.2-0.2H321v8.9h1.6V280z M325.1,277.9c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.3
|
||||
c-0.2,0.1-0.4,0.1-0.6,0.1h-1.2v-2.7h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3c0.1,0.1,0.2,0.2,0.3,0.4
|
||||
c0.1,0.2,0.1,0.4,0.1,0.6C325.2,277.5,325.2,277.7,325.1,277.9z"/>
|
||||
<polygon fill="#FFFFFF" points="333.7,282 329.7,282 329.7,279.6 333.2,279.6 333.2,278.1 329.7,278.1 329.7,276 333.7,276
|
||||
333.7,274.5 328.1,274.5 328.1,283.5 333.7,283.5 "/>
|
||||
<path fill="#FFFFFF" d="M339.5,280.6c0,0.2-0.1,0.5-0.2,0.6c-0.1,0.2-0.2,0.3-0.3,0.5c-0.1,0.1-0.3,0.2-0.4,0.3
|
||||
c-0.3,0.1-0.9,0.2-1.2,0c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.2-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.1-0.6
|
||||
c0-0.2,0-0.4,0-0.6v-1.2c0-0.2,0-0.4,0-0.6c0-0.2,0.1-0.4,0.1-0.6c0.1-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.2-0.3,0.3-0.4
|
||||
c0.1-0.1,0.3-0.2,0.4-0.3c0.3-0.1,0.9-0.1,1.2,0c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.5c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2
|
||||
h1.6l0-0.3c0-0.4-0.2-0.8-0.3-1.2c-0.2-0.4-0.4-0.7-0.6-0.9c-0.3-0.3-0.6-0.5-0.9-0.6c-0.7-0.3-1.6-0.3-2.3-0.1
|
||||
c-0.3,0.1-0.6,0.3-0.8,0.4c-0.2,0.2-0.5,0.4-0.6,0.7c-0.2,0.3-0.3,0.5-0.4,0.8c-0.1,0.3-0.2,0.6-0.3,0.9c-0.1,0.3-0.1,0.6-0.1,1v1.2
|
||||
c0,0.3,0,0.6,0.1,1c0.1,0.3,0.1,0.6,0.2,0.9c0.1,0.3,0.3,0.6,0.4,0.8c0.2,0.3,0.4,0.5,0.6,0.7c0.2,0.2,0.5,0.3,0.8,0.5
|
||||
c0.3,0.1,0.7,0.2,1,0.2c0.4,0,0.8-0.1,1.2-0.2c0.4-0.1,0.7-0.3,0.9-0.6c0.3-0.3,0.5-0.6,0.6-0.9c0.2-0.3,0.3-0.7,0.3-1.1l0-0.3h-1.6
|
||||
L339.5,280.6z"/>
|
||||
<polygon fill="#FFFFFF" points="346.4,278.1 343.5,278.1 343.5,274.5 342,274.5 342,283.5 343.5,283.5 343.5,279.6 346.4,279.6
|
||||
346.4,283.5 348,283.5 348,274.5 346.4,274.5 "/>
|
||||
<polygon fill="#FFFFFF" points="350.9,279.6 354.4,279.6 354.4,278.1 350.9,278.1 350.9,276 354.9,276 354.9,274.5 349.3,274.5
|
||||
349.3,283.5 355,283.5 355,282 350.9,282 "/>
|
||||
<path fill="#FFFFFF" d="M361.2,279.4c0.2-0.2,0.4-0.3,0.6-0.5c0.2-0.2,0.3-0.4,0.4-0.7c0.1-0.3,0.1-0.5,0.1-0.8
|
||||
c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.4-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-2.7v8.9h1.6V280h1.2l1.6,3.3
|
||||
l0.1,0.1h1.5l0-0.4l-1.7-3.4C360.9,279.6,361,279.5,361.2,279.4z M360.6,277.3c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.3-0.3,0.4
|
||||
c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1H358v-2.7h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3
|
||||
c0.1,0.1,0.2,0.3,0.3,0.4C360.6,276.9,360.6,277.1,360.6,277.3z"/>
|
||||
<polygon fill="#FFFFFF" points="50.5,274.5 48.9,274.5 48.9,283.5 54.6,283.5 54.6,282 50.5,282 "/>
|
||||
<path fill="#FFFFFF" d="M58.1,274.5l-2.9,8.9h1.6l0.7-2.2h2.4l0.7,2.2h1.6l-2.8-8.9H58.1z M59.5,279.8H58l0.8-2.5L59.5,279.8z"/>
|
||||
<path fill="#FFFFFF" d="M64.1,277.9c0-0.2,0.1-0.4,0.1-0.6c0.1-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.2-0.3,0.3-0.4
|
||||
c0.1-0.1,0.3-0.2,0.4-0.3c0.3-0.1,0.8-0.1,1.2,0c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2
|
||||
h1.6l0-0.3c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.3-1.6-0.3-2.2,0
|
||||
c-0.3,0.1-0.6,0.3-0.8,0.5c-0.2,0.2-0.5,0.4-0.6,0.7c-0.2,0.3-0.3,0.5-0.4,0.8c-0.1,0.3-0.2,0.6-0.3,0.9c-0.1,0.3-0.1,0.6-0.1,1v1
|
||||
c0,0.3,0,0.7,0.1,1c0.1,0.3,0.2,0.6,0.3,0.9c0.1,0.3,0.3,0.6,0.5,0.8c0.2,0.3,0.4,0.5,0.7,0.7c0.3,0.2,0.5,0.4,0.9,0.5
|
||||
c0.3,0.1,0.7,0.2,1,0.2h0c0.6,0,1.1-0.1,1.6-0.3c0.5-0.2,0.9-0.6,1.3-1l0.1-0.1l0-3.4h-3.2v1.4h1.7l0,1.5c-0.1,0.1-0.1,0.1-0.2,0.2
|
||||
c-0.1,0.1-0.2,0.1-0.4,0.2c-0.1,0-0.3,0.1-0.4,0.1c-0.1,0-0.2,0-0.3,0l-0.1,0c-0.2,0-0.4,0-0.6-0.1c-0.2-0.1-0.3-0.2-0.4-0.3
|
||||
c-0.1-0.1-0.2-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.2,0-0.4-0.1-0.6v-1
|
||||
C64.1,278.3,64.1,278.1,64.1,277.9z M65.9,283.3L65.9,283.3L65.9,283.3L65.9,283.3z"/>
|
||||
<polygon fill="#FFFFFF" points="71.7,279.6 75.2,279.6 75.2,278.1 71.7,278.1 71.7,276 75.7,276 75.7,274.5 70.1,274.5 70.1,283.5
|
||||
75.7,283.5 75.7,282 71.7,282 "/>
|
||||
<path fill="#FFFFFF" d="M82.7,279.6c-0.1-0.2-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.3-0.6-0.4c-0.2-0.1-0.4-0.2-0.6-0.3
|
||||
c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2-0.1-0.4-0.2-0.5-0.3c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.1-0.3-0.1-0.5
|
||||
c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.4-0.1,0.8-0.1,1.1,0c0.2,0.1,0.3,0.2,0.4,0.3
|
||||
c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9
|
||||
c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.2-1.5-0.3-2.2,0c-0.4,0.1-0.7,0.3-1,0.5c-0.3,0.2-0.5,0.5-0.7,0.8c-0.2,0.3-0.3,0.7-0.3,1.1
|
||||
c0,0.4,0.1,0.8,0.3,1.1c0.2,0.3,0.4,0.5,0.7,0.8c0.3,0.2,0.6,0.4,0.9,0.5c0.3,0.1,0.6,0.3,0.9,0.4c0.2,0.1,0.4,0.1,0.6,0.2
|
||||
c0.2,0.1,0.4,0.2,0.6,0.3c0.2,0.1,0.3,0.2,0.4,0.4c0.1,0.1,0.1,0.3,0.1,0.5c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.2-0.3,0.3
|
||||
c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0.1-0.8,0.1-1.2,0c-0.2-0.1-0.4-0.1-0.5-0.3c-0.1-0.1-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6
|
||||
l0-0.2h-1.6l0,0.3c0,0.4,0.1,0.8,0.3,1.2c0.2,0.3,0.4,0.6,0.8,0.9c0.3,0.2,0.6,0.4,1,0.5c0.4,0.1,0.8,0.2,1.2,0.2
|
||||
c0.4,0,0.7-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.1c0-0.3,0-0.5-0.1-0.8
|
||||
C82.9,280,82.8,279.8,82.7,279.6z"/>
|
||||
<polygon fill="#FFFFFF" points="85.8,279.6 89.3,279.6 89.3,278.1 85.8,278.1 85.8,276 89.9,276 89.9,274.5 84.2,274.5 84.2,283.5
|
||||
89.9,283.5 89.9,282 85.8,282 "/>
|
||||
<polygon fill="#FFFFFF" points="95.4,280 92.6,274.5 91.1,274.5 91.1,283.5 92.7,283.5 92.7,278 95.5,283.5 97,283.5 97,274.5
|
||||
95.4,274.5 "/>
|
||||
<path fill="#FFFFFF" d="M103.9,279.6c-0.1-0.2-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.3-0.6-0.4c-0.2-0.1-0.4-0.2-0.6-0.3
|
||||
c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2-0.1-0.4-0.2-0.5-0.3c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.1-0.3-0.1-0.5
|
||||
c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.4-0.1,0.8-0.1,1.1,0c0.2,0.1,0.3,0.2,0.4,0.3
|
||||
c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9
|
||||
c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.2-1.5-0.3-2.2,0c-0.4,0.1-0.7,0.3-1,0.5c-0.3,0.2-0.5,0.5-0.7,0.8c-0.2,0.3-0.3,0.7-0.3,1.1
|
||||
c0,0.4,0.1,0.8,0.3,1.1c0.2,0.3,0.4,0.5,0.7,0.8c0.3,0.2,0.6,0.4,0.9,0.5c0.3,0.1,0.6,0.3,0.9,0.4c0.2,0.1,0.4,0.1,0.6,0.2
|
||||
c0.2,0.1,0.4,0.2,0.6,0.3c0.2,0.1,0.3,0.2,0.4,0.4c0.1,0.1,0.1,0.3,0.1,0.5c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.2-0.3,0.3
|
||||
c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0.1-0.8,0.1-1.2,0c-0.2-0.1-0.4-0.1-0.5-0.3c-0.1-0.1-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6
|
||||
l0-0.2H98l0,0.3c0,0.4,0.1,0.8,0.3,1.2c0.2,0.3,0.5,0.6,0.8,0.9c0.3,0.2,0.6,0.4,1,0.5c0.4,0.1,0.8,0.2,1.2,0.2
|
||||
c0.4,0,0.7-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.1c0-0.3,0-0.5-0.1-0.8
|
||||
C104.2,280,104.1,279.8,103.9,279.6z"/>
|
||||
<path fill="#FFFFFF" d="M111.1,276.6c-0.1-0.3-0.2-0.6-0.4-0.9c-0.2-0.3-0.4-0.5-0.6-0.7c-0.2-0.2-0.5-0.4-0.8-0.5
|
||||
c-0.6-0.2-1.5-0.2-2.1,0c-0.3,0.1-0.6,0.3-0.8,0.5c-0.2,0.2-0.4,0.4-0.6,0.7c-0.2,0.3-0.3,0.6-0.4,0.8c-0.1,0.3-0.2,0.6-0.2,0.9
|
||||
c0,0.3-0.1,0.6-0.1,0.9v1c0,0.3,0,0.6,0.1,0.9c0.1,0.3,0.1,0.6,0.2,0.9c0.1,0.3,0.2,0.6,0.4,0.9c0.2,0.3,0.4,0.5,0.6,0.7
|
||||
c0.2,0.2,0.5,0.4,0.8,0.5c0.3,0.1,0.7,0.2,1,0.2c0.4,0,0.7-0.1,1-0.2c0.3-0.1,0.6-0.3,0.8-0.5c0.2-0.2,0.4-0.4,0.6-0.7
|
||||
c0.2-0.3,0.3-0.6,0.4-0.8c0.1-0.3,0.2-0.6,0.2-0.9c0-0.3,0.1-0.6,0.1-0.9v-1c0-0.3,0-0.6-0.1-0.9
|
||||
C111.3,277.2,111.2,276.9,111.1,276.6z M109.8,278.5v1c0,0.2,0,0.4,0,0.6c0,0.2-0.1,0.4-0.1,0.6c-0.1,0.2-0.1,0.4-0.2,0.6
|
||||
c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.3c-0.3,0.1-0.8,0.1-1.1,0c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.2-0.3-0.3-0.4
|
||||
c-0.1-0.2-0.2-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.2,0-0.4,0-0.6v-1c0-0.2,0-0.4,0-0.6c0-0.2,0.1-0.4,0.1-0.6
|
||||
c0-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.4-0.3c0.2-0.1,0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1
|
||||
c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0.1,0.2,0.1,0.4,0.1,0.6
|
||||
C109.8,278.1,109.8,278.3,109.8,278.5z"/>
|
||||
<path fill="#FFFFFF" d="M117.3,279.4c0.2-0.2,0.4-0.3,0.5-0.5c0.2-0.2,0.3-0.4,0.4-0.7c0.1-0.3,0.1-0.5,0.1-0.8
|
||||
c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.4-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-2.7v8.9h1.6V280h1.2l1.6,3.4
|
||||
h1.5l0-0.4l-1.7-3.4C117.1,279.6,117.2,279.5,117.3,279.4z M116.8,277.3c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.3-0.3,0.4
|
||||
c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1h-1.2v-2.7h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3
|
||||
c0.1,0.1,0.2,0.2,0.3,0.4C116.7,276.9,116.8,277.1,116.8,277.3z"/>
|
||||
<path fill="#FFFFFF" d="M239.4,369.8c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-3v8.9h1.6v-3.4h1.4c0.4,0,0.8-0.1,1.2-0.2
|
||||
c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.9c0.2-0.3,0.2-0.7,0.2-1.2c0-0.4-0.1-0.8-0.2-1.2C239.9,370.3,239.7,370,239.4,369.8z
|
||||
M238.7,371.9c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1h-1.4v-2.7h1.4
|
||||
c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.2,0.5,0.3c0.1,0.1,0.2,0.3,0.3,0.4C238.7,371.5,238.7,371.7,238.7,371.9z"/>
|
||||
<path fill="#FFFFFF" d="M246.1,373.9c0.2-0.2,0.4-0.3,0.6-0.5c0.2-0.2,0.3-0.4,0.4-0.7c0.1-0.3,0.1-0.5,0.1-0.8
|
||||
c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.4-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-2.7v8.9h1.6v-3.4h1.2l1.6,3.4
|
||||
h1.5l0-0.4l-1.7-3.4C245.8,374.1,246,374,246.1,373.9z M245.6,371.8c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.3-0.3,0.4
|
||||
c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1h-1.2v-2.7h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3
|
||||
c0.1,0.1,0.2,0.3,0.3,0.4C245.5,371.4,245.6,371.6,245.6,371.8z"/>
|
||||
<path fill="#FFFFFF" d="M254,371.2c-0.1-0.3-0.2-0.6-0.4-0.8c-0.2-0.3-0.4-0.5-0.6-0.7c-0.2-0.2-0.5-0.4-0.8-0.5
|
||||
c-0.6-0.2-1.4-0.2-2.1,0c-0.3,0.1-0.6,0.3-0.8,0.5c-0.2,0.2-0.4,0.4-0.6,0.7c-0.2,0.3-0.3,0.6-0.4,0.8c-0.1,0.3-0.2,0.6-0.2,0.9
|
||||
c0,0.3-0.1,0.6-0.1,0.9v1c0,0.3,0,0.6,0.1,0.9c0.1,0.3,0.1,0.6,0.2,0.9c0.1,0.3,0.2,0.6,0.4,0.9c0.2,0.3,0.4,0.5,0.6,0.7
|
||||
c0.2,0.2,0.5,0.4,0.8,0.5c0.3,0.1,0.7,0.2,1,0.2c0.4,0,0.7-0.1,1-0.2c0.3-0.1,0.6-0.3,0.8-0.5c0.2-0.2,0.4-0.4,0.6-0.7
|
||||
c0.2-0.3,0.3-0.6,0.4-0.8c0.1-0.3,0.2-0.6,0.2-0.9c0.1-0.3,0.1-0.6,0.1-0.9v-1c0-0.3,0-0.6-0.1-0.9
|
||||
C254.2,371.8,254.2,371.5,254,371.2z M252.8,373v1c0,0.2,0,0.4,0,0.6c0,0.2-0.1,0.4-0.1,0.6c-0.1,0.2-0.1,0.4-0.2,0.6
|
||||
c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.4,0.3c-0.3,0.1-0.8,0.1-1.1,0c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.2-0.3-0.3-0.5
|
||||
c-0.1-0.2-0.2-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.2,0-0.4,0-0.6v-1c0-0.2,0-0.4,0-0.6c0-0.2,0.1-0.4,0.1-0.6
|
||||
c0-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.2-0.2,0.4-0.3c0.2-0.1,0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1
|
||||
c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0.1,0.2,0.1,0.4,0.1,0.6
|
||||
C252.8,372.7,252.8,372.9,252.8,373z"/>
|
||||
<polygon fill="#FFFFFF" points="261,370.3 261.1,370.2 261,369.1 255.2,369.1 255.2,370.5 259.1,370.5 255.2,376.8 255.1,376.8
|
||||
255.1,378 261.2,378 261.2,376.6 257.1,376.6 "/>
|
||||
<polygon fill="#FFFFFF" points="264.2,374.1 267.7,374.1 267.7,372.7 264.2,372.7 264.2,370.5 268.2,370.5 268.2,369.1 262.6,369.1
|
||||
262.6,378 268.3,378 268.3,376.6 264.2,376.6 "/>
|
||||
<path fill="#FFFFFF" d="M275.2,374.2c-0.1-0.2-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.3-0.6-0.4c-0.2-0.1-0.4-0.2-0.6-0.3
|
||||
c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2-0.1-0.4-0.2-0.5-0.3c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.1-0.3-0.1-0.5
|
||||
c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.4-0.1,0.8-0.1,1.1,0c0.2,0.1,0.3,0.2,0.4,0.3
|
||||
c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9
|
||||
c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.2-1.5-0.3-2.2,0c-0.4,0.1-0.7,0.3-1,0.5c-0.3,0.2-0.5,0.5-0.7,0.8c-0.2,0.3-0.3,0.7-0.3,1.1
|
||||
c0,0.4,0.1,0.8,0.3,1.1c0.2,0.3,0.4,0.5,0.7,0.8c0.3,0.2,0.6,0.4,0.9,0.5c0.3,0.1,0.6,0.3,0.9,0.4c0.2,0.1,0.4,0.1,0.6,0.2
|
||||
c0.2,0.1,0.4,0.2,0.6,0.3c0.2,0.1,0.3,0.2,0.4,0.4c0.1,0.1,0.1,0.3,0.1,0.5c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.2-0.3,0.3
|
||||
c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0.1-0.8,0.1-1.2,0c-0.2-0.1-0.4-0.1-0.5-0.3c-0.1-0.1-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6
|
||||
l0-0.2h-1.6l0,0.3c0,0.4,0.1,0.8,0.3,1.2c0.2,0.3,0.5,0.6,0.8,0.9c0.3,0.2,0.7,0.4,1,0.5c0.4,0.1,0.8,0.2,1.2,0.2
|
||||
c0.4,0,0.7-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.1c0-0.3,0-0.5-0.1-0.8
|
||||
C275.5,374.6,275.3,374.4,275.2,374.2z"/>
|
||||
<path fill="#FFFFFF" d="M282.3,374.2c-0.1-0.2-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.3-0.6-0.4c-0.2-0.1-0.4-0.2-0.6-0.3
|
||||
c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2-0.1-0.4-0.2-0.5-0.3c-0.1-0.1-0.3-0.2-0.4-0.4c-0.1-0.1-0.1-0.3-0.1-0.5
|
||||
c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.2-0.3,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.4-0.1,0.8-0.1,1.1,0c0.2,0.1,0.3,0.2,0.4,0.3
|
||||
c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9
|
||||
c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.2-1.5-0.3-2.2,0c-0.4,0.1-0.7,0.3-1,0.5c-0.3,0.2-0.5,0.5-0.7,0.8c-0.2,0.3-0.3,0.7-0.3,1.1
|
||||
c0,0.4,0.1,0.8,0.3,1.1c0.2,0.3,0.4,0.5,0.7,0.8c0.3,0.2,0.6,0.4,0.9,0.5c0.3,0.1,0.6,0.3,0.9,0.4c0.2,0.1,0.4,0.1,0.6,0.2
|
||||
c0.2,0.1,0.4,0.2,0.6,0.3c0.2,0.1,0.3,0.2,0.4,0.4c0.1,0.1,0.1,0.3,0.1,0.5c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.2-0.3,0.3
|
||||
c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0.1-0.8,0.1-1.2,0c-0.2-0.1-0.3-0.1-0.5-0.3c-0.1-0.1-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6
|
||||
l0-0.2h-1.6l0,0.3c0,0.4,0.1,0.8,0.3,1.2c0.2,0.3,0.4,0.6,0.8,0.9c0.3,0.2,0.7,0.4,1,0.5c0.4,0.1,0.8,0.2,1.2,0.2
|
||||
c0.4,0,0.7-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.1c0-0.3,0-0.5-0.1-0.8
|
||||
C282.5,374.6,282.4,374.4,282.3,374.2z"/>
|
||||
<path fill="#FFFFFF" d="M289.5,371.2c-0.1-0.3-0.3-0.6-0.4-0.8c-0.2-0.3-0.4-0.5-0.6-0.7c-0.2-0.2-0.5-0.4-0.8-0.5
|
||||
c-0.6-0.2-1.4-0.2-2.1,0c-0.3,0.1-0.6,0.3-0.8,0.5c-0.2,0.2-0.4,0.4-0.6,0.7c-0.2,0.3-0.3,0.6-0.4,0.8c-0.1,0.3-0.2,0.6-0.2,0.9
|
||||
c-0.1,0.3-0.1,0.6-0.1,0.9v1c0,0.3,0,0.6,0.1,0.9c0.1,0.3,0.1,0.6,0.2,0.9c0.1,0.3,0.2,0.6,0.4,0.8c0.2,0.3,0.4,0.5,0.6,0.7
|
||||
c0.2,0.2,0.5,0.4,0.8,0.5c0.3,0.1,0.7,0.2,1,0.2c0.4,0,0.7-0.1,1-0.2c0.3-0.1,0.6-0.3,0.8-0.5c0.2-0.2,0.4-0.4,0.6-0.7
|
||||
c0.2-0.3,0.3-0.6,0.4-0.8c0.1-0.3,0.2-0.6,0.2-0.9c0.1-0.3,0.1-0.6,0.1-0.9v-1c0-0.3,0-0.6-0.1-0.9
|
||||
C289.7,371.8,289.6,371.5,289.5,371.2z M288.2,373v1c0,0.2,0,0.4,0,0.6c0,0.2-0.1,0.4-0.1,0.6c-0.1,0.2-0.1,0.4-0.2,0.6
|
||||
c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.4,0.3c-0.3,0.1-0.8,0.1-1.1,0c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.2-0.3-0.3-0.5
|
||||
c-0.1-0.2-0.2-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.2,0-0.4,0-0.6v-1c0-0.2,0-0.4,0-0.6c0-0.2,0.1-0.4,0.1-0.6
|
||||
c0-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.4-0.3c0.2-0.1,0.3-0.1,0.5-0.1c0.2,0,0.4,0,0.5,0.1
|
||||
c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.2,0.4,0.2,0.6c0.1,0.2,0.1,0.4,0.1,0.6
|
||||
C288.2,372.7,288.2,372.9,288.2,373z"/>
|
||||
<path fill="#FFFFFF" d="M295.7,373.9c0.2-0.2,0.4-0.3,0.6-0.5c0.2-0.2,0.3-0.4,0.4-0.7c0.1-0.3,0.1-0.5,0.1-0.8
|
||||
c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.4-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-2.7v8.9h1.6v-3.4h1.2l1.6,3.3
|
||||
l0.1,0.1h1.5l0-0.4l-1.7-3.4C295.4,374.1,295.6,374,295.7,373.9z M295.2,371.8c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.3-0.3,0.4
|
||||
c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1h-1.2v-2.7h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3
|
||||
c0.1,0.1,0.2,0.2,0.3,0.4C295.1,371.4,295.2,371.6,295.2,371.8z"/>
|
||||
<path fill="#FFFFFF" d="M239.2,103.5h-1.6l0,5.9c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.4-0.3,0.5c-0.1,0.2-0.3,0.3-0.4,0.4
|
||||
c-0.3,0.2-0.9,0.2-1.2,0c-0.2-0.1-0.3-0.2-0.4-0.4c-0.1-0.2-0.2-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.6l0-5.9h-1.5l0,6
|
||||
c0,0.4,0.1,0.8,0.2,1.2c0.1,0.4,0.4,0.7,0.6,1c0.3,0.3,0.6,0.5,0.9,0.7c0.4,0.2,0.8,0.2,1.2,0.2c0.4,0,0.8-0.1,1.2-0.2
|
||||
c0.4-0.2,0.7-0.4,1-0.7c0.3-0.3,0.5-0.6,0.6-1c0.1-0.4,0.2-0.8,0.2-1.2L239.2,103.5z"/>
|
||||
<path fill="#FFFFFF" d="M246.5,110c0-0.3,0-0.5-0.1-0.8c-0.1-0.2-0.2-0.4-0.3-0.6c-0.1-0.2-0.3-0.4-0.5-0.5
|
||||
c-0.2-0.1-0.4-0.3-0.6-0.4c-0.2-0.1-0.4-0.2-0.6-0.3c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2-0.1-0.4-0.2-0.5-0.3
|
||||
c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.1-0.3-0.1-0.5c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2
|
||||
c0.4-0.1,0.8-0.1,1.1,0c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3
|
||||
c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.2-1.5-0.3-2.2,0c-0.4,0.1-0.7,0.3-1,0.5
|
||||
c-0.3,0.2-0.5,0.5-0.7,0.8c-0.2,0.3-0.3,0.7-0.3,1.1c0,0.4,0.1,0.8,0.3,1.1c0.2,0.3,0.4,0.6,0.7,0.8c0.3,0.2,0.6,0.4,0.9,0.5
|
||||
c0.3,0.1,0.6,0.3,0.9,0.4c0.2,0.1,0.4,0.1,0.6,0.2c0.2,0.1,0.4,0.2,0.6,0.3c0.2,0.1,0.3,0.2,0.4,0.4c0.1,0.1,0.1,0.3,0.1,0.5
|
||||
c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.2,0.2-0.3,0.3c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0.1-0.8,0.1-1.2,0c-0.2-0.1-0.4-0.1-0.5-0.3
|
||||
c-0.1-0.1-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6l0-0.2h-1.6l0,0.3c0,0.4,0.1,0.8,0.3,1.2c0.2,0.3,0.4,0.6,0.8,0.9
|
||||
c0.3,0.2,0.7,0.4,1,0.5c0.4,0.1,0.8,0.2,1.2,0.2c0.4,0,0.7-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8
|
||||
C246.4,110.8,246.5,110.5,246.5,110z"/>
|
||||
<path fill="#FFFFFF" d="M250.5,112.4c0.4,0,0.8-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.2
|
||||
c0-0.3,0-0.5-0.1-0.8c-0.1-0.2-0.2-0.5-0.4-0.7c-0.2-0.2-0.3-0.4-0.5-0.5c0,0-0.1-0.1-0.1-0.1c0,0,0,0,0,0c0.2-0.1,0.3-0.3,0.5-0.4
|
||||
c0.1-0.2,0.2-0.4,0.3-0.6c0.1-0.2,0.1-0.4,0.1-0.7c0-0.4-0.1-0.8-0.3-1.1c-0.2-0.3-0.4-0.6-0.7-0.8c-0.3-0.2-0.6-0.3-1-0.4
|
||||
c-0.4-0.1-0.7-0.1-1.1-0.1h-2.8v8.9H250.5L250.5,112.4z M249.2,108.5h1.4c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.4,0.2
|
||||
c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.2,0.1,0.3,0.1,0.5c0,0.2,0,0.4-0.1,0.5c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.3
|
||||
c-0.2,0.1-0.3,0.1-0.5,0.1h-1.4V108.5z M251.6,106.5c-0.1,0.1-0.2,0.2-0.3,0.3c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0.1-0.3,0.1-0.5,0.1
|
||||
h-1.2V105h1.2c0.2,0,0.4,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.3c0.1,0.1,0.1,0.3,0.1,0.5
|
||||
C251.7,106.2,251.7,106.3,251.6,106.5z"/>
|
||||
<path fill="#FFFFFF" d="M307.2,103.6c0.2-0.2,0.4-0.3,0.5-0.5c0.2-0.2,0.3-0.4,0.4-0.7c0.1-0.3,0.1-0.5,0.1-0.8
|
||||
c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.4-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-2.7v8.9h1.6v-3.4h1.2l1.6,3.3
|
||||
l0.1,0.1h1.5l0-0.4l-1.7-3.4C306.9,103.7,307,103.7,307.2,103.6z M306.6,101.5c0,0.2,0,0.4-0.1,0.6c-0.1,0.2-0.2,0.3-0.3,0.4
|
||||
c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1H304v-2.7h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3
|
||||
c0.1,0.1,0.2,0.2,0.3,0.4C306.6,101,306.6,101.2,306.6,101.5z"/>
|
||||
<polygon fill="#FFFFFF" points="315.2,106.2 311.1,106.2 311.1,103.7 314.6,103.7 314.6,102.3 311.1,102.3 311.1,100.1 315.1,100.1
|
||||
315.1,98.7 309.5,98.7 309.5,107.6 315.2,107.6 "/>
|
||||
<path fill="#FFFFFF" d="M320,106c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0.1-0.8,0.1-1.2,0c-0.2-0.1-0.4-0.2-0.5-0.3
|
||||
c-0.1-0.1-0.3-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6l0-0.2h-1.6l0,0.3c0,0.4,0.1,0.8,0.3,1.2c0.2,0.3,0.4,0.6,0.8,0.9
|
||||
c0.3,0.2,0.7,0.4,1,0.5c0.4,0.1,0.8,0.2,1.2,0.2c0.3,0,0.7-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8
|
||||
c0.2-0.3,0.3-0.7,0.3-1.1c0-0.3,0-0.5-0.1-0.8c-0.1-0.2-0.2-0.4-0.3-0.6c-0.1-0.2-0.3-0.4-0.5-0.5c-0.2-0.1-0.4-0.3-0.6-0.4
|
||||
c-0.2-0.1-0.4-0.2-0.6-0.3c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2-0.1-0.4-0.2-0.5-0.3c-0.2-0.1-0.3-0.2-0.4-0.4
|
||||
c-0.1-0.1-0.1-0.3-0.1-0.5c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.3-0.2,0.4-0.2c0.4-0.1,0.8-0.1,1.1,0
|
||||
c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3c0-0.4-0.1-0.8-0.3-1.2
|
||||
c-0.2-0.3-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.2-1.5-0.3-2.2,0c-0.4,0.1-0.7,0.3-1,0.5c-0.3,0.2-0.5,0.5-0.7,0.8
|
||||
c-0.2,0.3-0.3,0.7-0.3,1.1c0,0.4,0.1,0.8,0.3,1.1c0.2,0.3,0.4,0.5,0.7,0.8c0.3,0.2,0.6,0.4,0.9,0.5c0.3,0.1,0.6,0.3,0.9,0.4
|
||||
c0.2,0.1,0.4,0.1,0.6,0.2c0.2,0.1,0.4,0.2,0.6,0.3c0.2,0.1,0.3,0.2,0.4,0.4c0.1,0.1,0.1,0.3,0.1,0.5c0,0.2,0,0.3-0.1,0.5
|
||||
C320.2,105.8,320.1,105.9,320,106z"/>
|
||||
<polygon fill="#FFFFFF" points="328.7,106.2 324.6,106.2 324.6,103.7 328.1,103.7 328.1,102.3 324.6,102.3 324.6,100.1 328.7,100.1
|
||||
328.7,98.7 323,98.7 323,107.6 328.7,107.6 "/>
|
||||
<polygon fill="#FFFFFF" points="332.1,107.6 333.7,107.6 333.7,100.1 336.3,100.1 336.3,98.7 329.5,98.7 329.5,100.1 332.1,100.1
|
||||
"/>
|
||||
<path fill="#FFFFFF" d="M134.3,157.5l-2.8,8.8h1.6l0.7-2.1h2.4l0.7,2.1h1.6l-2.8-8.8H134.3z M135.6,162.7h-1.5l0.7-2.4L135.6,162.7z
|
||||
"/>
|
||||
<path fill="#FFFFFF" d="M145.3,158.3c-0.3-0.3-0.6-0.6-0.9-0.7c-0.7-0.3-1.7-0.3-2.5,0c-0.4,0.2-0.7,0.4-0.9,0.7
|
||||
c-0.3,0.3-0.4,0.7-0.6,1.1c-0.1,0.4-0.2,0.9-0.2,1.5v1.9c0,0.6,0.1,1,0.2,1.5c0.1,0.4,0.3,0.8,0.6,1.1c0.3,0.3,0.6,0.5,0.9,0.7
|
||||
c0.4,0.2,0.8,0.2,1.2,0.2c0.5,0,0.9-0.1,1.2-0.2c0.4-0.2,0.7-0.4,0.9-0.7c0.2-0.3,0.4-0.7,0.6-1.1c0.1-0.4,0.2-0.9,0.2-1.5v-1.9
|
||||
c0-0.5-0.1-1-0.2-1.5C145.7,159,145.6,158.6,145.3,158.3z M144.4,160.1l-2.7,2.1v-1.4c0-0.7,0.1-1.2,0.3-1.5c0.2-0.3,0.5-0.4,1-0.4
|
||||
c0.4,0,0.7,0.1,0.9,0.3C144.3,159.3,144.4,159.7,144.4,160.1z M144.5,161.7v1.4c0,0.7-0.1,1.2-0.3,1.5c-0.2,0.3-0.5,0.5-1,0.5
|
||||
c-0.4,0-0.7-0.1-0.9-0.3c-0.2-0.2-0.3-0.5-0.4-0.9L144.5,161.7z"/>
|
||||
<path fill="#FFFFFF" d="M387.6,166.2h1.6l-2.7-8.6l-0.1-0.2h-1.3l-2.8,8.8h1.6l0.7-2.1h2.4L387.6,166.2z M386.5,162.6H385l0.7-2.4
|
||||
L386.5,162.6z"/>
|
||||
<polygon fill="#FFFFFF" points="393.4,166.2 395,166.2 395,157.4 394.7,157.4 391.2,158.7 391.2,160.2 393.4,159.4 "/>
|
||||
<path fill="#FFFFFF" d="M314.5,402.4c-0.2-0.2-0.3-0.4-0.5-0.5c0,0-0.1-0.1-0.1-0.1c0,0,0,0,0,0c0.2-0.1,0.3-0.3,0.5-0.4
|
||||
c0.1-0.2,0.2-0.4,0.3-0.6c0.1-0.2,0.1-0.4,0.1-0.7c0-0.4-0.1-0.8-0.3-1.1c-0.2-0.3-0.4-0.6-0.7-0.8c-0.3-0.2-0.6-0.3-1-0.4
|
||||
c-0.4-0.1-0.7-0.1-1.1-0.1H309v8.9h3c0.4,0,0.8-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.2
|
||||
c0-0.3,0-0.5-0.1-0.8C314.8,402.8,314.7,402.6,314.5,402.4z M310.6,402.6h1.4c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.4,0.2
|
||||
c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.2,0.1,0.3,0.1,0.5c0,0.2,0,0.4-0.1,0.5c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.3
|
||||
c-0.2,0.1-0.4,0.1-0.5,0.1h-1.4V402.6z M313.1,400.5c-0.1,0.1-0.2,0.2-0.3,0.3c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0.1-0.3,0.1-0.5,0.1
|
||||
h-1.2V399h1.2c0.2,0,0.4,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.3c0.1,0.1,0.1,0.3,0.1,0.5
|
||||
C313.2,400.2,313.2,400.4,313.1,400.5z"/>
|
||||
<path fill="#FFFFFF" d="M319.7,397.6h-1.3l-2.9,8.9h1.6l0.7-2.2h2.4l0.7,2.2h1.6l-2.8-8.7L319.7,397.6z M319.8,402.9h-1.5l0.8-2.5
|
||||
L319.8,402.9z"/>
|
||||
<polygon fill="#FFFFFF" points="322.7,399 325.2,399 325.2,406.5 326.8,406.5 326.8,399 329.4,399 329.4,397.6 322.7,397.6 "/>
|
||||
<polygon fill="#FFFFFF" points="330,399 332.6,399 332.6,406.5 334.2,406.5 334.2,399 336.8,399 336.8,397.6 330,397.6 "/>
|
||||
<polygon fill="#FFFFFF" points="339.3,402.6 342.8,402.6 342.8,401.2 339.3,401.2 339.3,399 343.3,399 343.3,397.6 337.7,397.6
|
||||
337.7,406.5 343.4,406.5 343.4,405 339.3,405 "/>
|
||||
<path fill="#FFFFFF" d="M349.3,406.5h1.5l0-0.4l-1.7-3.4c0.2-0.1,0.3-0.2,0.4-0.3c0.2-0.2,0.4-0.3,0.6-0.5c0.1-0.2,0.3-0.4,0.4-0.7
|
||||
c0.1-0.3,0.1-0.5,0.1-0.8c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.4-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-2.7
|
||||
v8.9h1.6v-3.4h1.2L349.3,406.5z M348.9,400.9c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1h-1.2V399
|
||||
h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.1,0.6
|
||||
C349,400.5,349,400.7,348.9,400.9z"/>
|
||||
<polygon fill="#FFFFFF" points="351.8,399 353.8,399 353.8,405 351.8,405 351.8,406.5 357.4,406.5 357.4,405 355.4,405 355.4,399
|
||||
357.4,399 357.4,397.6 351.8,397.6 "/>
|
||||
<polygon fill="#FFFFFF" points="360.6,402.6 364.1,402.6 364.1,401.2 360.6,401.2 360.6,399 364.6,399 364.6,397.6 359,397.6
|
||||
359,406.5 364.6,406.5 364.6,405 360.6,405 "/>
|
||||
<path fill="#FFFFFF" d="M256.6,303.4h1.5l0-0.4l-1.7-3.4c0.2-0.1,0.3-0.2,0.4-0.3c0.2-0.2,0.4-0.3,0.5-0.5c0.2-0.2,0.3-0.4,0.4-0.7
|
||||
c0.1-0.3,0.1-0.5,0.1-0.8c0-0.5-0.1-0.9-0.2-1.2c-0.2-0.4-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.5c-0.4-0.1-0.8-0.2-1.2-0.2h-2.7
|
||||
v8.9h1.6V300h1.2L256.6,303.4z M256.3,297.8c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.3c-0.2,0.1-0.4,0.1-0.6,0.1h-1.2v-2.7
|
||||
h1.1c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.5,0.3c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.2,0.1,0.4,0.1,0.6
|
||||
C256.4,297.5,256.4,297.7,256.3,297.8z"/>
|
||||
<path fill="#FFFFFF" d="M262.2,303.5c0.6,0,1.1-0.1,1.6-0.3c0.5-0.2,0.9-0.6,1.3-1l0.1-0.1l0-3.4h-3.2v1.4h1.7l0,1.5
|
||||
c-0.1,0.1-0.1,0.1-0.2,0.2c-0.1,0.1-0.2,0.1-0.4,0.2c-0.1,0-0.3,0.1-0.4,0.1c-0.1,0-0.3,0-0.4,0c-0.2,0-0.4,0-0.6-0.1
|
||||
c-0.2-0.1-0.3-0.2-0.4-0.3c-0.1-0.1-0.2-0.3-0.3-0.4c-0.1-0.2-0.2-0.4-0.2-0.6c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.2,0-0.4-0.1-0.6v-1
|
||||
c0-0.2,0-0.4,0-0.6c0-0.2,0.1-0.4,0.1-0.6c0.1-0.2,0.1-0.4,0.2-0.6c0.1-0.2,0.2-0.3,0.3-0.4c0.1-0.1,0.3-0.2,0.4-0.3
|
||||
c0.3-0.1,0.8-0.1,1.2,0c0.2,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.3,0.3,0.4c0.1,0.2,0.1,0.4,0.2,0.6l0,0.2h1.6l0-0.3
|
||||
c0-0.4-0.1-0.8-0.3-1.2c-0.2-0.3-0.4-0.6-0.7-0.9c-0.3-0.2-0.6-0.4-1-0.6c-0.7-0.3-1.6-0.3-2.2,0c-0.3,0.1-0.6,0.3-0.8,0.5
|
||||
c-0.2,0.2-0.5,0.4-0.6,0.7c-0.2,0.3-0.3,0.5-0.4,0.8c-0.1,0.3-0.2,0.6-0.3,0.9c-0.1,0.3-0.1,0.6-0.1,1v1c0,0.3,0,0.7,0.1,1
|
||||
c0.1,0.3,0.2,0.7,0.3,0.9c0.1,0.3,0.3,0.6,0.5,0.8c0.2,0.3,0.4,0.5,0.7,0.7c0.3,0.2,0.5,0.4,0.9,0.5
|
||||
C261.5,303.5,261.8,303.5,262.2,303.5L262.2,303.5z M262.2,303.3L262.2,303.3L262.2,303.3L262.2,303.3z"/>
|
||||
<path fill="#FFFFFF" d="M269.2,303.4c0.4,0,0.8-0.1,1.1-0.2c0.4-0.1,0.7-0.3,1-0.5c0.3-0.2,0.5-0.5,0.7-0.8c0.2-0.3,0.3-0.7,0.3-1.2
|
||||
c0-0.3,0-0.5-0.1-0.8c-0.1-0.2-0.2-0.5-0.4-0.7c-0.2-0.2-0.3-0.4-0.5-0.5c0,0-0.1-0.1-0.1-0.1c0,0,0,0,0,0c0.2-0.1,0.3-0.3,0.5-0.4
|
||||
c0.1-0.2,0.2-0.4,0.3-0.6c0.1-0.2,0.1-0.4,0.1-0.7c0-0.4-0.1-0.8-0.3-1.1c-0.2-0.3-0.4-0.6-0.7-0.8c-0.3-0.2-0.6-0.3-1-0.4
|
||||
c-0.4-0.1-0.7-0.1-1.1-0.1h-2.8v8.9H269.2L269.2,303.4z M267.9,299.5h1.4c0.2,0,0.4,0,0.6,0.1c0.2,0.1,0.3,0.1,0.4,0.2
|
||||
c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5c0,0.2,0,0.4-0.1,0.5c-0.1,0.2-0.2,0.3-0.3,0.4c-0.1,0.1-0.3,0.2-0.5,0.3
|
||||
c-0.2,0.1-0.4,0.1-0.5,0.1h-1.4V299.5z M270.3,297.4c-0.1,0.1-0.2,0.2-0.3,0.3c-0.1,0.1-0.3,0.2-0.4,0.2c-0.2,0.1-0.3,0.1-0.5,0.1
|
||||
h-1.2v-2.1h1.2c0.2,0,0.4,0,0.5,0.1c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.3c0.1,0.1,0.1,0.3,0.1,0.5
|
||||
C270.4,297.2,270.4,297.3,270.3,297.4z"/>
|
||||
<polygon fill="#FFFFFF" points="278.2,294.5 276.6,294.5 276.6,303.4 282.3,303.4 282.3,302 278.2,302 "/>
|
||||
<polygon fill="#FFFFFF" points="285.2,299.5 288.7,299.5 288.7,298.1 285.2,298.1 285.2,295.9 289.2,295.9 289.2,294.5 283.6,294.5
|
||||
283.6,303.4 289.2,303.4 289.2,302 285.2,302 "/>
|
||||
<path fill="#FFFFFF" d="M295.6,295.7c-0.3-0.4-0.8-0.7-1.3-0.9c-0.5-0.2-1-0.3-1.7-0.3h-2.2v8.9h2.2c0.6,0,1.2-0.1,1.7-0.3
|
||||
c0.5-0.2,0.9-0.5,1.3-0.9c0.3-0.4,0.6-0.8,0.8-1.3c0.2-0.5,0.3-1.1,0.3-1.7v-0.6c0-0.6-0.1-1.2-0.3-1.7
|
||||
C296.2,296.5,296,296,295.6,295.7z M295.1,298.6v0.6c0,0.4-0.1,0.8-0.2,1.1c-0.1,0.3-0.2,0.6-0.4,0.9c-0.2,0.2-0.4,0.4-0.7,0.6
|
||||
c-0.3,0.1-0.6,0.2-1.1,0.2h-0.6v-6.1h0.6c0.4,0,0.8,0.1,1.1,0.2c0.3,0.1,0.5,0.3,0.7,0.6c0.2,0.2,0.3,0.5,0.4,0.9
|
||||
C295,297.9,295.1,298.2,295.1,298.6z"/>
|
||||
<g>
|
||||
<path fill="#FFFFFF" d="M128.3,354.3l-0.7-1.1l0.9-0.7c0.1-0.2,0.1-0.5,0-0.8c0-0.3-0.2-0.6-0.3-0.9c-0.4-0.7-0.9-1-1.6-1.1
|
||||
c-0.7-0.1-1.4,0.1-2.2,0.6l-0.3,0.2c-0.8,0.4-1.3,1-1.6,1.6c-0.3,0.6-0.2,1.3,0.1,1.9c0.2,0.3,0.4,0.6,0.6,0.8
|
||||
c0.2,0.2,0.5,0.3,0.7,0.4l1.1-0.4l0.7,1.1l-1.5,0.9c-0.5-0.1-1-0.3-1.5-0.7c-0.5-0.4-0.9-0.8-1.2-1.4c-0.6-1-0.7-2.1-0.4-3.1
|
||||
c0.3-1.1,1.1-1.9,2.2-2.6l0.3-0.1c1.1-0.6,2.2-0.8,3.3-0.6c1.1,0.2,1.9,0.9,2.5,1.9c0.3,0.6,0.5,1.2,0.6,1.8c0.1,0.6,0,1.2-0.2,1.7
|
||||
L128.3,354.3z"/>
|
||||
<path fill="#FFFFFF" d="M124.9,358l0.4,0.5l8-1.5l0.9,1.6l-5.3,6.2l0.2,0.6l-0.9,0.5l-1.5-2.6l0.9-0.5l0.4,0.5l0.9-0.9l-1.4-2.5
|
||||
l-1.2,0.3l0.2,0.6l-0.9,0.5l-1.5-2.6L124.9,358z M128.7,359.5l1,1.8l2.2-2.4l0,0L128.7,359.5z"/>
|
||||
<path fill="#FFFFFF" d="M128.8,367l0.9-0.5l0.6,0.7l5.5-3.2l-0.3-0.9l0.9-0.5l0.5,0.8l0.9,1.5l0.5,0.8l-0.9,0.5l-0.6-0.7l-5.4,3.1
|
||||
l1.2,2.2l1-0.5l0.7,1.2l-2.1,1.2L128.8,367z"/>
|
||||
<path fill="#FFFFFF" d="M132.8,373.9l0.9-0.5l0.6,0.7l5.5-3.2l-0.3-0.9l0.9-0.5l0.5,0.8l0.9,1.5l0.5,0.8l-0.9,0.5l-0.6-0.7
|
||||
l-5.4,3.1l1.2,2.2l1-0.5l0.7,1.2l-2.1,1.2L132.8,373.9z"/>
|
||||
<path fill="#FFFFFF" d="M143.6,377l0.9-0.5l1.8,3.2l-0.9,0.5l-0.6-0.7l-5.5,3.2l0.3,0.9l-0.9,0.5l-1.8-3.2l0.9-0.5l0.6,0.7l5.5-3.2
|
||||
L143.6,377z"/>
|
||||
<path fill="#FFFFFF" d="M147.2,390c-1.1,0.6-2.2,0.9-3.3,0.6c-1.1-0.2-2-0.8-2.6-1.9c-0.6-1-0.7-2.1-0.4-3.1
|
||||
c0.4-1.1,1.1-1.9,2.2-2.6l0.1-0.1c1.1-0.6,2.2-0.9,3.3-0.7c1.1,0.2,1.9,0.8,2.5,1.9c0.6,1,0.7,2.1,0.4,3.2
|
||||
c-0.4,1.1-1.1,1.9-2.2,2.6L147.2,390z M146.4,388.4c0.8-0.5,1.3-1,1.6-1.6c0.3-0.6,0.3-1.2-0.1-1.9c-0.4-0.6-0.9-1-1.6-1
|
||||
c-0.7,0-1.4,0.2-2.2,0.6l-0.1,0.1c-0.8,0.5-1.4,1-1.7,1.6c-0.3,0.6-0.3,1.2,0.1,1.9c0.4,0.6,0.9,1,1.6,1c0.7,0,1.4-0.2,2.2-0.6
|
||||
L146.4,388.4z"/>
|
||||
<path fill="#FFFFFF" d="M153.9,392.7c0.5,0.9,0.7,1.7,0.5,2.5c-0.2,0.8-0.6,1.4-1.3,1.8c-0.7,0.4-1.5,0.5-2.2,0.3
|
||||
c-0.7-0.2-1.4-0.8-1.9-1.7l-0.7-1.3l-1.7,1l0.3,0.9l-0.9,0.5l-1.8-3.2l0.9-0.5l0.6,0.7l5.5-3.2l-0.3-0.9l0.9-0.5l0.5,0.8
|
||||
L153.9,392.7z M149.5,393.5l0.7,1.3c0.2,0.4,0.6,0.7,0.9,0.8c0.4,0.1,0.7,0,1.1-0.2c0.4-0.2,0.6-0.5,0.7-0.9c0.1-0.4,0-0.7-0.2-1.2
|
||||
l-0.7-1.3L149.5,393.5z"/>
|
||||
<path fill="#FFFFFF" d="M154.8,404l-1.5-2.6l-2.2,1.3l1.4,2.5l1-0.5l0.7,1.2l-2.1,1.2l-3.5-6l0.9-0.5l0.6,0.7l5.5-3.2l-0.3-0.9
|
||||
l0.9-0.5l0.5,0.8l3,5.2l-2.1,1.2l-0.7-1.2l0.9-0.6l-1.4-2.4l-1.9,1.1l1.5,2.6L154.8,404z"/>
|
||||
<path fill="#FFFFFF" d="M113.9,357.7l-1.3,0.9c0.7,0,1.3,0.1,1.8,0.3c0.5,0.3,1,0.7,1.3,1.3c0.3,0.6,0.5,1.1,0.5,1.6
|
||||
s-0.2,1-0.6,1.4c0.6,0,1.1,0.2,1.6,0.4c0.5,0.3,0.9,0.7,1.2,1.2c0.2,0.4,0.4,0.9,0.5,1.3c0.1,0.4,0,0.9-0.1,1.3
|
||||
c-0.2,0.4-0.4,0.9-0.8,1.3c-0.4,0.4-0.9,0.8-1.6,1.2l-9.5,5.5l-1.6-2.7l9.6-5.5c0.5-0.3,0.8-0.6,0.9-1c0.1-0.3,0-0.7-0.2-1
|
||||
c-0.2-0.3-0.4-0.5-0.7-0.6c-0.3-0.1-0.6-0.1-0.9-0.1l-10.1,5.8l-1.5-2.6l9.6-5.5c0.5-0.3,0.8-0.6,0.9-0.9c0.1-0.3,0-0.7-0.2-1
|
||||
c-0.2-0.3-0.4-0.6-0.7-0.7c-0.3-0.1-0.5-0.1-0.8-0.1l-10.1,5.9l-1.6-2.7l13-7.6L113.9,357.7z"/>
|
||||
<path fill="#FFFFFF" d="M121.9,371.5l4,7l-10.7,6.2l2.2,3.9l-2.4,1.4l-6.3-10.8l2.4-1.4l2.3,4.1l8.3-4.8l-2.3-4.1L121.9,371.5z
|
||||
M127.5,373.3c0.4-0.3,0.9-0.3,1.4-0.2c0.5,0.1,0.8,0.4,1.1,1c0.3,0.5,0.4,1,0.3,1.5s-0.4,0.8-0.9,1.1c-0.5,0.3-0.9,0.3-1.4,0.2
|
||||
c-0.5-0.1-0.8-0.5-1.2-1c-0.3-0.5-0.4-1-0.3-1.5C126.8,374,127.1,373.6,127.5,373.3z"/>
|
||||
<path fill="#FFFFFF" d="M131.7,388.4l-1.7,1.2c0.9,0.1,1.8,0.4,2.5,0.8c0.7,0.5,1.4,1.1,1.8,1.9c0.4,0.7,0.6,1.3,0.8,2
|
||||
c0.1,0.7,0.1,1.3-0.1,1.9c-0.2,0.6-0.5,1.3-1.1,1.9c-0.5,0.6-1.2,1.2-2.2,1.7l-8.2,4.7l-1.7-2.9l8.1-4.7c0.5-0.3,1-0.6,1.2-1
|
||||
s0.5-0.7,0.6-1c0.1-0.4,0.1-0.7,0-1.1c-0.1-0.4-0.3-0.8-0.5-1.2c-0.4-0.6-0.8-1.1-1.4-1.4c-0.6-0.3-1.2-0.5-1.8-0.5l-9.4,5.4
|
||||
l-1.7-2.9l13-7.6L131.7,388.4z"/>
|
||||
<path fill="#FFFFFF" d="M138.5,400.4l4,7l-10.7,6.2l2.2,3.9l-2.4,1.4l-6.3-10.8l2.4-1.4l2.3,4.1l8.3-4.8l-2.3-4.1L138.5,400.4z
|
||||
M144.1,402.2c0.4-0.3,0.9-0.3,1.4-0.2c0.5,0.1,0.8,0.4,1.1,1c0.3,0.5,0.4,1,0.3,1.5s-0.4,0.8-0.9,1.1c-0.5,0.3-0.9,0.3-1.4,0.2
|
||||
c-0.5-0.1-0.8-0.5-1.2-1c-0.3-0.5-0.4-1-0.3-1.5C143.4,402.8,143.7,402.5,144.1,402.2z"/>
|
||||
<g>
|
||||
<path fill="#FFFFFF" d="M126.3,333.7l-3.9-6.8c-0.6-1-1.9-1.4-2.9-0.8c0,0-5.8,3.3-5.1,2.9c4.3-2.4,5.8-7.9,3.3-12.2
|
||||
c-2.4-4.3-7.9-5.8-12.2-3.3c-0.6,0.4-5.2,3-8.5,4.9l-12.1-5.3c-8.3-3.5-16.3,5.5-11.8,13.3l1.1,1.8c6.1-2.5,14.2-4.7,20.6-3.5
|
||||
l0.1,0.2l4.7,8.2c-2.2,6.1-8.3,11.7-13.6,15.7l1.5,2.6c1.6,2.9,5.3,3.9,8.2,2.3l19.9-11.3l10.1-5.7
|
||||
C126.5,336,126.9,334.7,126.3,333.7z M111.1,316.7l3.6,6.4l-4.3,2.5c-1.4,0.8-3.2,0.3-4-1.1l-0.8-1.3c-0.8-1.4-0.3-3.2,1.1-4
|
||||
L111.1,316.7z M97.7,322.3l7.2-0.3l-4.6,4.9L97.7,322.3z M100.4,327.1l6.6-1.4l-3.9,6.1L100.4,327.1z M110.2,333.2l9.5-5.4
|
||||
l4.4,7.7l-9.5,5.4L110.2,333.2z"/>
|
||||
<path fill="#FFFFFF" d="M83.6,344.8c0.6-5.8,6.4-13.5,11.2-19.9l-17,9.7L83.6,344.8z"/>
|
||||
</g>
|
||||
</g>
|
||||
<circle fill="none" cx="393.4" cy="485.9" r="15.7"/>
|
||||
<circle fill="none" cx="138" cy="487.1" r="15.7"/>
|
||||
<path id="EDGE_P3" fill="#EFDA48" d="M522.4,232.8c-0.6,0-1.3-0.1-1.9-0.1c-18.2,0-32.9,14.7-32.9,32.9s14.7,32.9,32.9,32.9
|
||||
c0.9,0,1.8,0,2.7-0.1c16.9-1.4,30.2-15.5,30.2-32.8C553.4,248.1,539.7,233.8,522.4,232.8z M520.5,281c-8.5,0-15.6-6.8-15.7-15.6
|
||||
c0.1-8.6,7-15.6,15.7-15.6c8.6,0,15.6,7,15.7,15.6C536.1,274.1,529.2,281,520.5,281z"/>
|
||||
<path id="EDGE_P2" fill="#EFDA48" d="M393.4,453c-18.2,0-32.9,14.7-32.9,32.9c0,18.2,14.7,32.9,32.9,32.9
|
||||
c18.2,0,32.9-14.7,32.9-32.9C426.1,467.8,411.3,453,393.4,453z M393.4,501.5c-8.6,0-15.7-6.9-15.7-15.7c0-8.6,6.9-15.7,15.7-15.7
|
||||
c8.6,0,15.7,6.9,15.7,15.7C408.9,494.4,401.9,501.5,393.4,501.5z"/>
|
||||
<path id="EDGE_P1" fill="#EFDA48" d="M138,454.2c-18.2,0-32.9,14.7-32.9,32.9c0,18.2,14.7,32.9,32.9,32.9s32.9-14.7,32.9-32.9
|
||||
C170.9,469.1,156.1,454.2,138,454.2z M138,502.8c-8.6,0-15.7-6.9-15.7-15.7c0-8.8,6.9-15.7,15.7-15.7s15.7,6.9,15.7,15.7
|
||||
C153.6,495.9,146.7,502.8,138,502.8z"/>
|
||||
<path id="EDGE_GND" fill="#EFDA48" d="M160.6,20c-6-6.2-14.4-10-23.6-10C118.7,10,104,24.7,104,42.9c0,5.8,1.5,11.2,4.1,15.9
|
||||
c5.6,10.2,16.4,17,28.8,17c18.2,0,32.9-14.7,32.9-32.9C169.8,34,166.3,25.9,160.6,20z M136.9,58.4c-8.7,0-15.7-7.1-15.7-15.7
|
||||
s6.9-15.7,15.7-15.7c8.7,0,15.7,6.9,15.7,15.7S145.5,58.4,136.9,58.4z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 58 KiB |
BIN
docs/static/Microsoft-logo_rgb_c-gray-square.png
vendored
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
docs/static/Microsoft-logo_rgb_c-white.png
vendored
Normal file
After Width: | Height: | Size: 12 KiB |
145
docs/static/avatar.svg
vendored
Normal file
@ -0,0 +1,145 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Ebene_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 175.49999 172.4"
|
||||
enable-background="new 0 0 841.9 595.3"
|
||||
xml:space="preserve"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="Logo_Calliope_Woman.svg"
|
||||
width="175.5"
|
||||
height="172.39999"><metadata
|
||||
id="metadata5011"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs5009" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1137"
|
||||
id="namedview5007"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.34208337"
|
||||
inkscape:cx="420.95001"
|
||||
inkscape:cy="297.64999"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="156"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Ebene_1" /><g
|
||||
id="g4955"
|
||||
transform="translate(-260.90025,-204.1)"><g
|
||||
id="g4957"><defs
|
||||
id="defs4959"><rect
|
||||
id="SVGID_7_"
|
||||
x="193.10001"
|
||||
y="204.10001"
|
||||
width="318.29999"
|
||||
height="256.29999" /></defs><clipPath
|
||||
id="SVGID_1_"><use
|
||||
xlink:href="#SVGID_7_"
|
||||
overflow="visible"
|
||||
id="use4963"
|
||||
style="overflow:visible"
|
||||
x="0"
|
||||
y="0"
|
||||
width="100%"
|
||||
height="100%" /></clipPath></g><g
|
||||
id="g4965"><defs
|
||||
id="defs4967"><rect
|
||||
id="SVGID_9_"
|
||||
x="193.10001"
|
||||
y="204.10001"
|
||||
width="318.29999"
|
||||
height="256.29999" /></defs><clipPath
|
||||
id="SVGID_2_"><use
|
||||
xlink:href="#SVGID_9_"
|
||||
overflow="visible"
|
||||
id="use4971"
|
||||
style="overflow:visible"
|
||||
x="0"
|
||||
y="0"
|
||||
width="100%"
|
||||
height="100%" /></clipPath></g><g
|
||||
id="g4973"><defs
|
||||
id="defs4975"><rect
|
||||
id="SVGID_11_"
|
||||
x="193.10001"
|
||||
y="204.10001"
|
||||
width="318.29999"
|
||||
height="256.29999" /></defs><clipPath
|
||||
id="SVGID_3_"><use
|
||||
xlink:href="#SVGID_11_"
|
||||
overflow="visible"
|
||||
id="use4979"
|
||||
style="overflow:visible"
|
||||
x="0"
|
||||
y="0"
|
||||
width="100%"
|
||||
height="100%" /></clipPath><path
|
||||
clip-path="url(#SVGID_3_)"
|
||||
d="m 436.4,262 -47.9,0 0,-46 c 0,-4.7 3.8,-8.4 8.4,-8.4 l 31,0 c 4.7,0 8.4,3.8 8.4,8.4 l 0,46 z"
|
||||
id="path4981"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#4a5261" /></g><rect
|
||||
x="394.79999"
|
||||
y="218.7"
|
||||
width="35.099998"
|
||||
height="43.200001"
|
||||
id="rect4983"
|
||||
style="fill:#8096a1" /><path
|
||||
d="m 317.6,239.5 0,61 71,0.2 c 0,0 0,-57.3 0,-61 0,-19.5 -16.1,-35.6 -35.6,-35.6 -19.6,0 -35.4,15.8 -35.4,35.4"
|
||||
id="path4985"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#855c33" /><path
|
||||
d="m 412.4,376.5 -114.2,0 c -35.6,0 -50.9,-45.2 -22.6,-66.8 l 63.8,-47.8 96.9,0 0,90.7 c 0.1,13.2 -10.6,23.9 -23.9,23.9"
|
||||
id="path4987"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#26a6ab" /><polygon
|
||||
points="345.7,257.3 334.8,298.8 285.1,302.5 "
|
||||
id="polygon4989"
|
||||
style="fill:#42c9c9" /><polygon
|
||||
points="354,283.8 332.5,283.8 345.7,257.3 "
|
||||
id="polygon4991"
|
||||
style="fill:#f7f5e8" /><polygon
|
||||
points="375.4,283.8 354,283.8 362.2,257.3 "
|
||||
id="polygon4993"
|
||||
style="fill:#f7f5e8" /><polygon
|
||||
points="373.1,298.8 334.8,298.8 332.5,283.8 375.4,283.8 "
|
||||
id="polygon4995"
|
||||
style="fill:#bdd1cf" /><path
|
||||
d="m 400.6,376.5 c -3.5,-26.2 -10.6,-58 -27.3,-77.7 l -0.2,0 -19,0 -19,0 -0.2,0 c -16.7,19.8 -23.8,51.5 -27.3,77.7 l 93,0 z"
|
||||
id="path4997"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#f7f5e8" /><path
|
||||
d="m 357,258 -6.1,0 c -6.4,0 -11.5,-5.2 -11.5,-11.5 l 0,-19.7 29.2,0 0,19.7 c -0.1,6.3 -5.3,11.5 -11.6,11.5"
|
||||
id="path4999"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffcc99" /><path
|
||||
d="m 335.8,376.5 0,-77.7 c 12.4,29.1 27.7,64.3 46.5,77.7 l -46.5,0 z"
|
||||
id="path5001"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#bdd1cf" /><polygon
|
||||
points="362.2,257.3 345.7,257.3 354,283.8 "
|
||||
id="polygon5003"
|
||||
style="fill:#ffcc99" /><polygon
|
||||
points="436.4,315.3 394.8,262 436.4,262 "
|
||||
id="polygon5005"
|
||||
style="fill:#42c9c9" /></g></svg>
|
After Width: | Height: | Size: 5.2 KiB |
2
docs/static/faviconDescription.json
vendored
@ -33,7 +33,7 @@
|
||||
"pictureAspect": "noChange",
|
||||
"themeColor": "#ffffff",
|
||||
"manifest": {
|
||||
"name": "Calliope MINI",
|
||||
"name": "Calliope mini",
|
||||
"display": "standalone",
|
||||
"orientation": "notSet",
|
||||
"onConflict": "override",
|
||||
|
2
docs/static/icons/manifest.json
vendored
@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "Calliope MINI",
|
||||
"name": "Calliope mini",
|
||||
"icons": [
|
||||
{
|
||||
"src": "\/android-chrome-36x36.png",
|
||||
|
145
docs/static/loader.svg
vendored
Normal file
@ -0,0 +1,145 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Ebene_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 175.49999 172.4"
|
||||
enable-background="new 0 0 841.9 595.3"
|
||||
xml:space="preserve"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="Logo_Calliope_Woman.svg"
|
||||
width="175.5"
|
||||
height="172.39999"><metadata
|
||||
id="metadata5011"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs5009" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1137"
|
||||
id="namedview5007"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.34208337"
|
||||
inkscape:cx="420.95001"
|
||||
inkscape:cy="297.64999"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="156"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Ebene_1" /><g
|
||||
id="g4955"
|
||||
transform="translate(-260.90025,-204.1)"><g
|
||||
id="g4957"><defs
|
||||
id="defs4959"><rect
|
||||
id="SVGID_7_"
|
||||
x="193.10001"
|
||||
y="204.10001"
|
||||
width="318.29999"
|
||||
height="256.29999" /></defs><clipPath
|
||||
id="SVGID_1_"><use
|
||||
xlink:href="#SVGID_7_"
|
||||
overflow="visible"
|
||||
id="use4963"
|
||||
style="overflow:visible"
|
||||
x="0"
|
||||
y="0"
|
||||
width="100%"
|
||||
height="100%" /></clipPath></g><g
|
||||
id="g4965"><defs
|
||||
id="defs4967"><rect
|
||||
id="SVGID_9_"
|
||||
x="193.10001"
|
||||
y="204.10001"
|
||||
width="318.29999"
|
||||
height="256.29999" /></defs><clipPath
|
||||
id="SVGID_2_"><use
|
||||
xlink:href="#SVGID_9_"
|
||||
overflow="visible"
|
||||
id="use4971"
|
||||
style="overflow:visible"
|
||||
x="0"
|
||||
y="0"
|
||||
width="100%"
|
||||
height="100%" /></clipPath></g><g
|
||||
id="g4973"><defs
|
||||
id="defs4975"><rect
|
||||
id="SVGID_11_"
|
||||
x="193.10001"
|
||||
y="204.10001"
|
||||
width="318.29999"
|
||||
height="256.29999" /></defs><clipPath
|
||||
id="SVGID_3_"><use
|
||||
xlink:href="#SVGID_11_"
|
||||
overflow="visible"
|
||||
id="use4979"
|
||||
style="overflow:visible"
|
||||
x="0"
|
||||
y="0"
|
||||
width="100%"
|
||||
height="100%" /></clipPath><path
|
||||
clip-path="url(#SVGID_3_)"
|
||||
d="m 436.4,262 -47.9,0 0,-46 c 0,-4.7 3.8,-8.4 8.4,-8.4 l 31,0 c 4.7,0 8.4,3.8 8.4,8.4 l 0,46 z"
|
||||
id="path4981"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#4a5261" /></g><rect
|
||||
x="394.79999"
|
||||
y="218.7"
|
||||
width="35.099998"
|
||||
height="43.200001"
|
||||
id="rect4983"
|
||||
style="fill:#8096a1" /><path
|
||||
d="m 317.6,239.5 0,61 71,0.2 c 0,0 0,-57.3 0,-61 0,-19.5 -16.1,-35.6 -35.6,-35.6 -19.6,0 -35.4,15.8 -35.4,35.4"
|
||||
id="path4985"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#855c33" /><path
|
||||
d="m 412.4,376.5 -114.2,0 c -35.6,0 -50.9,-45.2 -22.6,-66.8 l 63.8,-47.8 96.9,0 0,90.7 c 0.1,13.2 -10.6,23.9 -23.9,23.9"
|
||||
id="path4987"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#26a6ab" /><polygon
|
||||
points="345.7,257.3 334.8,298.8 285.1,302.5 "
|
||||
id="polygon4989"
|
||||
style="fill:#42c9c9" /><polygon
|
||||
points="354,283.8 332.5,283.8 345.7,257.3 "
|
||||
id="polygon4991"
|
||||
style="fill:#f7f5e8" /><polygon
|
||||
points="375.4,283.8 354,283.8 362.2,257.3 "
|
||||
id="polygon4993"
|
||||
style="fill:#f7f5e8" /><polygon
|
||||
points="373.1,298.8 334.8,298.8 332.5,283.8 375.4,283.8 "
|
||||
id="polygon4995"
|
||||
style="fill:#bdd1cf" /><path
|
||||
d="m 400.6,376.5 c -3.5,-26.2 -10.6,-58 -27.3,-77.7 l -0.2,0 -19,0 -19,0 -0.2,0 c -16.7,19.8 -23.8,51.5 -27.3,77.7 l 93,0 z"
|
||||
id="path4997"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#f7f5e8" /><path
|
||||
d="m 357,258 -6.1,0 c -6.4,0 -11.5,-5.2 -11.5,-11.5 l 0,-19.7 29.2,0 0,19.7 c -0.1,6.3 -5.3,11.5 -11.6,11.5"
|
||||
id="path4999"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffcc99" /><path
|
||||
d="m 335.8,376.5 0,-77.7 c 12.4,29.1 27.7,64.3 46.5,77.7 l -46.5,0 z"
|
||||
id="path5001"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#bdd1cf" /><polygon
|
||||
points="362.2,257.3 345.7,257.3 354,283.8 "
|
||||
id="polygon5003"
|
||||
style="fill:#ffcc99" /><polygon
|
||||
points="436.4,315.3 394.8,262 436.4,262 "
|
||||
id="polygon5005"
|
||||
style="fill:#42c9c9" /></g></svg>
|
After Width: | Height: | Size: 5.2 KiB |
61
docs/static/logo.portrait.black.svg
vendored
@ -1,61 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
role="img"
|
||||
aria-labelledby="title desc"
|
||||
xml:space="preserve"
|
||||
enable-background="new 0 0 280 32.755"
|
||||
height="34.210526104448945"
|
||||
width="195.47368473887764"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="logo.portrait.black.svg"><sodipodi:namedview
|
||||
pagecolor="#ff00ff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1536"
|
||||
inkscape:window-height="801"
|
||||
id="namedview14"
|
||||
showgrid="false"
|
||||
inkscape:zoom="3.6367355"
|
||||
inkscape:cx="106.22094"
|
||||
inkscape:cy="5.7691884"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" /><rect
|
||||
id="backgroundrect"
|
||||
width="100%"
|
||||
height="100%"
|
||||
x="0"
|
||||
y="0"
|
||||
fill="none"
|
||||
stroke="none"
|
||||
class="" /><title
|
||||
id="title"
|
||||
lang="en-GB">BBC micro:bit</title><desc
|
||||
id="desc"
|
||||
lang="en-GB">BBC micro:bit logo</desc><metadata
|
||||
id="metadata37"><rdf:rdf><cc:work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:work></rdf:rdf><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>BBC micro:bit</dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs35" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
class=""
|
||||
d="m 38.349339,21.473763 c -1.677,0 -3.035,-1.364 -3.035,-3.042 0,-1.678 1.357,-3.038 3.035,-3.038 1.684,0 3.039,1.36 3.039,3.038 0,1.678 -1.355,3.042 -3.039,3.042 m -22.311,-6.077 c -1.677,0 -3.042,1.357 -3.042,3.035 0,1.678 1.363,3.042 3.042,3.042 1.674,0 3.036,-1.364 3.036,-3.042 0,-1.678 -1.363,-3.035 -3.036,-3.035 m -0.003,-5.9900001 22.576,0 c 4.979,0 9.027,4.0470001 9.027,9.0270001 0,4.979 -4.049,9.031 -9.027,9.031 l -22.576,0 c -4.977,0 -9.0299997,-4.053 -9.0299997,-9.031 -0.001,-4.98 4.0529997,-9.0270001 9.0299997,-9.0270001 m 22.576,24.0760001 c 8.299,0 15.047,-6.75 15.047,-15.049 0,-8.299 -6.748,-15.0510001 -15.047,-15.0510001 l -22.576,0 c -8.2989997,0 -15.04899969,6.7520001 -15.04899969,15.0510001 0,8.299 6.74999999,15.049 15.04899969,15.049 l 22.576,0 m 112.098991,-21.953 c 0,-1.453 -1.195,-2.6330001 -2.662,-2.6330001 -1.455,0 -2.639,1.1800001 -2.639,2.6330001 0,1.471 1.184,2.672 2.639,2.672 1.466,0 2.662,-1.202 2.662,-2.672 z m -66.785991,5.445 c 0,-4.764 -2.893,-8.0930001 -7.031,-8.0930001 -2.027,0 -3.814,0.851 -5.223,2.4700001 -1.467,-1.6610001 -3.152,-2.4700001 -5.127,-2.4700001 -4.162,0 -7.066,3.3290001 -7.066,8.0930001 l 0,10.466 3.812,0 0,-10.644 c 0,-2.416 1.336,-4.104 3.254,-4.104 1.617,0 3.25,1.409 3.25,4.104 l 0,10.645 3.848,0 0,-10.645 c 0,-2.416 1.338,-4.104 3.252,-4.104 1.863,0 3.217,1.727 3.217,4.104 l 0,10.645 3.814,0 0,-10.467 z m 6.953,-7.6320001 -3.846,0 0,18.0990001 3.846,0 0,-18.0990001 z m 0.569,-5.128 c 0,-1.377 -1.096,-2.454 -2.492,-2.454 -1.4,0 -2.453,1.054 -2.453,2.454 0,1.398 1.078,2.494 2.453,2.494 1.375,0 2.492,-1.117 2.492,-2.494 z m 18.327991,20.9140001 0.576,-0.521 -2.828,-2.658 -0.488,0.455 c -1.252,1.149 -2.504,1.686 -3.945,1.686 -3.064,0 -5.556991,-2.557 -5.556991,-5.699 0,-3.121 2.491991,-5.66 5.556991,-5.66 1.432,0 2.646,0.521 3.949,1.693 l 0.512,0.46 2.748,-2.802 -0.49,-0.502 c -1.754,-1.7930001 -4.016,-2.6960001 -6.719,-2.6960001 -2.459,0 -4.868991,1.022 -6.604991,2.7980001 -1.738,1.734 -2.691,4.119 -2.691,6.709 0,2.596 0.953,4.979 2.684,6.705 1.771,1.811 4.116991,2.811 6.614991,2.811 2.401,-0.003 4.647,-0.937 6.682,-2.779 z m 7.25,-6.947 c 0,-3.322 1.145,-4.686 4.217,-5.029 l 0.641,-0.07 0,-3.7970001 -0.777,0.058 c -5.629,0.458 -8.143,3.2470001 -8.143,9.0480001 l 0,9.051 4.062,0 0,-9.261 0,0 z m 21.998,6.923 c 1.762,-1.756 2.729,-4.146 2.729,-6.715 0,-2.565 -0.967,-4.951 -2.723,-6.702 -1.77,-1.8090001 -4.105,-2.8060001 -6.576,-2.8060001 -2.492,0 -4.84,0.997 -6.613,2.8060001 -1.752,1.792 -2.721,4.174 -2.721,6.702 0,2.53 0.969,4.916 2.721,6.707 1.771,1.81 4.121,2.808 6.613,2.808 2.472,0 4.808,-0.998 6.57,-2.8 z m -1.229,-6.714 c 0,3.18 -2.361,5.665 -5.377,5.665 -2.945,0 -5.346,-2.541 -5.346,-5.665 0,-3.137 2.398,-5.695 5.346,-5.695 2.963,-0.002 5.377,2.558 5.377,5.695 z m 12.917,6.418 c 0,-1.468 -1.195,-2.667 -2.662,-2.667 -1.455,0 -2.639,1.199 -2.639,2.667 0,1.453 1.184,2.632 2.639,2.632 1.466,0 2.662,-1.179 2.662,-2.632 z m 19.507,0.296 c 1.76,-1.756 2.73,-4.146 2.73,-6.715 0,-2.528 -0.973,-4.911 -2.729,-6.702 -1.746,-1.7870001 -4.08,-2.7700001 -6.574,-2.7700001 -2.035,0 -3.84,0.572 -5.484,1.7440001 l 0,-9.93400015 -3.816,0 0.008,15.58200015 c -0.037,0.411 -0.037,0.821 -0.037,1.198 0,6.119 3.836,10.396 9.33,10.396 2.475,10e-4 4.807,-0.997 6.572,-2.799 z m -1.013,-6.677 c 0,3.123 -2.494,5.66 -5.559,5.66 -3.115,0 -5.557,-2.484 -5.557,-5.66 0,-3.143 2.494,-5.698 5.557,-5.698 3.065,0 5.559,2.556 5.559,5.698 z m 10.881,-9.0850001 -3.846,0 0,18.0990001 3.846,0 0,-18.0990001 z m 0.572,-5.128 c 0,-1.377 -1.098,-2.454 -2.492,-2.454 -1.4,0 -2.457,1.054 -2.457,2.454 0,1.398 1.076,2.494 2.457,2.494 1.373,0 2.492,-1.117 2.492,-2.494 z m 13.83,19.7590001 -0.619,-0.089 c -2.855,-0.409 -4.133,-2.104 -4.133,-5.495 l 0,-5.126 4.752,0 0,-3.6740001 -4.752,0 0,-4.006 -3.887,0 0,4.006 -1.662,0 0,3.6740001 1.662,0 0,4.525 c 0,6.215 2.113,8.932 7.783,10.029 l 0.855,0.164 0,-4.008 10e-4,0 z"
|
||||
id="path21"
|
||||
style="fill:#000000" /></svg>
|
Before Width: | Height: | Size: 5.9 KiB |
65
docs/static/logo.portrait.white.svg
vendored
@ -1,65 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
role="img"
|
||||
aria-labelledby="title desc"
|
||||
xml:space="preserve"
|
||||
enable-background="new 0 0 280 32.755"
|
||||
height="34.210526104448945"
|
||||
width="195.47368473887764"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="logo.portrait.white.svg"><sodipodi:namedview
|
||||
pagecolor="#ff00ff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1536"
|
||||
inkscape:window-height="801"
|
||||
id="namedview14"
|
||||
showgrid="false"
|
||||
inkscape:zoom="3.6367355"
|
||||
inkscape:cx="106.22094"
|
||||
inkscape:cy="5.7691884"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" /><rect
|
||||
id="backgroundrect"
|
||||
width="100%"
|
||||
height="100%"
|
||||
x="0"
|
||||
y="0"
|
||||
fill="none"
|
||||
stroke="none"
|
||||
class="" /><title
|
||||
id="title"
|
||||
lang="en-GB">BBC micro:bit</title><desc
|
||||
id="desc"
|
||||
lang="en-GB">BBC micro:bit logo</desc><metadata
|
||||
id="metadata37"><rdf:rdf><cc:work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:work></rdf:rdf><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>BBC micro:bit</dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs35" /><g
|
||||
class="currentLayer"
|
||||
id="g9"
|
||||
transform="translate(-0.35013519,1.2540786)"><title
|
||||
id="title11">Layer 1</title><path
|
||||
style="fill:#ffffff"
|
||||
id="path21"
|
||||
d="m 38.699474,20.219684 c -1.677,0 -3.035,-1.364 -3.035,-3.042 0,-1.678 1.357,-3.038 3.035,-3.038 1.684,0 3.039,1.36 3.039,3.038 0,1.678 -1.355,3.042 -3.039,3.042 m -22.311,-6.077 c -1.677,0 -3.042,1.357 -3.042,3.035 0,1.678 1.363,3.042 3.042,3.042 1.674,0 3.036,-1.364 3.036,-3.042 0,-1.678 -1.363,-3.035 -3.036,-3.035 m -0.003,-5.9899997 22.576,0 c 4.979,0 9.027,4.0469997 9.027,9.0269997 0,4.979 -4.049,9.031 -9.027,9.031 l -22.576,0 c -4.977,0 -9.0299995,-4.053 -9.0299995,-9.031 -10e-4,-4.98 4.0529995,-9.0269997 9.0299995,-9.0269997 m 22.576,24.0759997 c 8.299,0 15.047,-6.75 15.047,-15.049 0,-8.2989997 -6.748,-15.0509997 -15.047,-15.0509997 l -22.576,0 c -8.2989995,0 -15.0489995,6.752 -15.0489995,15.0509997 0,8.299 6.75,15.049 15.0489995,15.049 l 22.576,0 m 112.098996,-21.953 c 0,-1.4529997 -1.195,-2.6329997 -2.662,-2.6329997 -1.455,0 -2.639,1.18 -2.639,2.6329997 0,1.471 1.184,2.672 2.639,2.672 1.466,0 2.662,-1.202 2.662,-2.672 z m -66.785996,5.445 c 0,-4.764 -2.893,-8.0929997 -7.031,-8.0929997 -2.027,0 -3.814,0.851 -5.223,2.4699997 -1.467,-1.6609997 -3.152,-2.4699997 -5.127,-2.4699997 -4.162,0 -7.066,3.3289997 -7.066,8.0929997 l 0,10.466 3.812,0 0,-10.644 c 0,-2.416 1.336,-4.104 3.254,-4.104 1.617,0 3.25,1.409 3.25,4.104 l 0,10.645 3.848,0 0,-10.645 c 0,-2.416 1.338,-4.104 3.252,-4.104 1.863,0 3.217,1.727 3.217,4.104 l 0,10.645 3.814,0 0,-10.467 z m 6.953,-7.6319997 -3.846,0 0,18.0989997 3.846,0 0,-18.0989997 z m 0.569,-5.128 c 0,-1.377 -1.096,-2.45400005 -2.492,-2.45400005 -1.4,0 -2.453,1.05400005 -2.453,2.45400005 0,1.398 1.078,2.494 2.453,2.494 1.375,0 2.492,-1.117 2.492,-2.494 z m 18.327996,20.9139997 0.576,-0.521 -2.828,-2.658 -0.488,0.455 c -1.252,1.149 -2.504,1.686 -3.945,1.686 -3.064,0 -5.556996,-2.557 -5.556996,-5.699 0,-3.121 2.491996,-5.66 5.556996,-5.66 1.432,0 2.646,0.521 3.949,1.693 l 0.512,0.46 2.748,-2.802 -0.49,-0.502 c -1.754,-1.7929997 -4.016,-2.6959997 -6.719,-2.6959997 -2.459,0 -4.868996,1.022 -6.604996,2.7979997 -1.738,1.734 -2.691,4.119 -2.691,6.709 0,2.596 0.953,4.979 2.684,6.705 1.771,1.811 4.116996,2.811 6.614996,2.811 2.401,-0.003 4.647,-0.937 6.682,-2.779 z m 7.25,-6.947 c 0,-3.322 1.145,-4.686 4.217,-5.029 l 0.641,-0.07 0,-3.7969997 -0.777,0.058 c -5.629,0.458 -8.143,3.2469997 -8.143,9.0479997 l 0,9.051 4.062,0 0,-9.261 0,0 z m 21.998,6.923 c 1.762,-1.756 2.729,-4.146 2.729,-6.715 0,-2.565 -0.967,-4.951 -2.723,-6.702 -1.77,-1.8089997 -4.105,-2.8059997 -6.576,-2.8059997 -2.492,0 -4.84,0.997 -6.613,2.8059997 -1.752,1.792 -2.721,4.174 -2.721,6.702 0,2.53 0.969,4.916 2.721,6.707 1.771,1.81 4.121,2.808 6.613,2.808 2.472,0 4.808,-0.998 6.57,-2.8 z m -1.229,-6.714 c 0,3.18 -2.361,5.665 -5.377,5.665 -2.945,0 -5.346,-2.541 -5.346,-5.665 0,-3.137 2.398,-5.695 5.346,-5.695 2.963,-0.002 5.377,2.558 5.377,5.695 z m 12.917,6.418 c 0,-1.468 -1.195,-2.667 -2.662,-2.667 -1.455,0 -2.639,1.199 -2.639,2.667 0,1.453 1.184,2.632 2.639,2.632 1.466,0 2.662,-1.179 2.662,-2.632 z m 19.507,0.296 c 1.76,-1.756 2.73,-4.146 2.73,-6.715 0,-2.528 -0.973,-4.911 -2.729,-6.702 -1.746,-1.7869997 -4.08,-2.7699997 -6.574,-2.7699997 -2.035,0 -3.84,0.572 -5.484,1.744 l 0,-9.93400005 -3.816,0 0.008,15.58199975 c -0.037,0.411 -0.037,0.821 -0.037,1.198 0,6.119 3.836,10.396 9.33,10.396 2.475,10e-4 4.807,-0.997 6.572,-2.799 z m -1.013,-6.677 c 0,3.123 -2.494,5.66 -5.559,5.66 -3.115,0 -5.557,-2.484 -5.557,-5.66 0,-3.143 2.494,-5.698 5.557,-5.698 3.065,0 5.559,2.556 5.559,5.698 z m 10.881,-9.0849997 -3.846,0 0,18.0989997 3.846,0 0,-18.0989997 z m 0.572,-5.128 c 0,-1.377 -1.098,-2.45400005 -2.492,-2.45400005 -1.4,0 -2.457,1.05400005 -2.457,2.45400005 0,1.398 1.076,2.494 2.457,2.494 1.373,0 2.492,-1.117 2.492,-2.494 z m 13.83,19.7589997 -0.619,-0.089 c -2.855,-0.409 -4.133,-2.104 -4.133,-5.495 l 0,-5.126 4.752,0 0,-3.6739997 -4.752,0 0,-4.006 -3.887,0 0,4.006 -1.662,0 0,3.6739997 1.662,0 0,4.525 c 0,6.215 2.113,8.932 7.783,10.029 l 0.855,0.164 0,-4.008 0.001,0 z"
|
||||
class=""
|
||||
inkscape:connector-curvature="0" /></g></svg>
|
Before Width: | Height: | Size: 6.0 KiB |
61
docs/static/logo.square.black.svg
vendored
@ -1,61 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
role="img"
|
||||
aria-labelledby="title desc"
|
||||
xml:space="preserve"
|
||||
enable-background="new 0 0 280 32.755"
|
||||
height="52.672001"
|
||||
width="52.672001"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="logo.square.black.svg"><sodipodi:namedview
|
||||
pagecolor="#ff00ff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1536"
|
||||
inkscape:window-height="801"
|
||||
id="namedview14"
|
||||
showgrid="false"
|
||||
inkscape:zoom="2.0836233"
|
||||
inkscape:cx="83.390493"
|
||||
inkscape:cy="16.071144"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" /><rect
|
||||
id="backgroundrect"
|
||||
width="195.47368"
|
||||
height="34.210526"
|
||||
x="0"
|
||||
y="18.461473"
|
||||
class=""
|
||||
style="fill:none;stroke:none" /><title
|
||||
id="title"
|
||||
lang="en-GB">BBC micro:bit</title><desc
|
||||
id="desc"
|
||||
lang="en-GB">BBC micro:bit logo</desc><metadata
|
||||
id="metadata37"><rdf:rdf><cc:work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:work></rdf:rdf><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>BBC micro:bit</dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs35" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
class=""
|
||||
d="m 37.363,29.377 c -1.677,0 -3.035,-1.364 -3.035,-3.042 0,-1.678 1.357,-3.038 3.035,-3.038 1.684,0 3.039,1.36 3.039,3.038 0,1.678 -1.355,3.042 -3.039,3.042 M 15.052,23.3 c -1.677,0 -3.042,1.357 -3.042,3.035 0,1.678 1.363,3.042 3.042,3.042 1.674,0 3.036,-1.364 3.036,-3.042 0,-1.678 -1.363,-3.035 -3.036,-3.035 m -0.003,-5.99 22.576,0 c 4.979,0 9.027,4.047 9.027,9.027 0,4.979 -4.049,9.031 -9.027,9.031 l -22.576,0 c -4.977,0 -9.0299993,-4.053 -9.0299993,-9.031 C 6.0180007,21.357 10.072,17.31 15.049,17.31 m 22.576,24.076 c 8.299,0 15.047,-6.75 15.047,-15.049 0,-8.299 -6.748,-15.051 -15.047,-15.051 l -22.576,0 C 6.7500007,11.286 6.9250488e-7,18.038 6.9250488e-7,26.337 6.9250488e-7,34.636 6.7500007,41.386 15.049,41.386 l 22.576,0"
|
||||
id="path21"
|
||||
style="fill:#000000"
|
||||
sodipodi:nodetypes="csssccsssccsssscccsssssc" /></svg>
|
Before Width: | Height: | Size: 2.8 KiB |
61
docs/static/logo.square.white.svg
vendored
@ -1,61 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
role="img"
|
||||
aria-labelledby="title desc"
|
||||
xml:space="preserve"
|
||||
enable-background="new 0 0 280 32.755"
|
||||
height="52.672001"
|
||||
width="52.672001"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="logo.square.white.svg"><sodipodi:namedview
|
||||
pagecolor="#ff00ff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1536"
|
||||
inkscape:window-height="801"
|
||||
id="namedview14"
|
||||
showgrid="false"
|
||||
inkscape:zoom="2.0836233"
|
||||
inkscape:cx="83.390493"
|
||||
inkscape:cy="16.071144"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" /><rect
|
||||
id="backgroundrect"
|
||||
width="195.47368"
|
||||
height="34.210526"
|
||||
x="0"
|
||||
y="18.461473"
|
||||
class=""
|
||||
style="fill:none;stroke:none" /><title
|
||||
id="title"
|
||||
lang="en-GB">BBC micro:bit</title><desc
|
||||
id="desc"
|
||||
lang="en-GB">BBC micro:bit logo</desc><metadata
|
||||
id="metadata37"><rdf:rdf><cc:work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:work></rdf:rdf><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>BBC micro:bit</dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs35" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
class=""
|
||||
d="m 37.363,29.377 c -1.677,0 -3.035,-1.364 -3.035,-3.042 0,-1.678 1.357,-3.038 3.035,-3.038 1.684,0 3.039,1.36 3.039,3.038 0,1.678 -1.355,3.042 -3.039,3.042 M 15.052,23.3 c -1.677,0 -3.042,1.357 -3.042,3.035 0,1.678 1.363,3.042 3.042,3.042 1.674,0 3.036,-1.364 3.036,-3.042 0,-1.678 -1.363,-3.035 -3.036,-3.035 m -0.003,-5.99 22.576,0 c 4.979,0 9.027,4.047 9.027,9.027 0,4.979 -4.049,9.031 -9.027,9.031 l -22.576,0 c -4.977,0 -9.0299993,-4.053 -9.0299993,-9.031 C 6.0180007,21.357 10.072,17.31 15.049,17.31 m 22.576,24.076 c 8.299,0 15.047,-6.75 15.047,-15.049 0,-8.299 -6.748,-15.051 -15.047,-15.051 l -22.576,0 C 6.7500007,11.286 6.9250488e-7,18.038 6.9250488e-7,26.337 6.9250488e-7,34.636 6.7500007,41.386 15.049,41.386 l 22.576,0"
|
||||
id="path21"
|
||||
style="fill:#ffffff"
|
||||
sodipodi:nodetypes="csssccsssccsssscccsssssc" /></svg>
|
Before Width: | Height: | Size: 2.8 KiB |
33
jenkins.groovy
Normal file
@ -0,0 +1,33 @@
|
||||
import jobs.generation.Utilities;
|
||||
import jobs.generation.InternalUtilities;
|
||||
|
||||
def project = GithubProject
|
||||
def branch = GithubBranchName
|
||||
|
||||
[true, false].each { isPR ->
|
||||
def newJobName = InternalUtilities.getFullJobName(project, "Default", isPR)
|
||||
def newJob = job(newJobName) {
|
||||
steps {
|
||||
shell("chmod +x ./jenkins.sh")
|
||||
shell("./jenkins.sh ${isPR}")
|
||||
}
|
||||
|
||||
if (!isPR) {
|
||||
wrappers {
|
||||
credentialsBinding {
|
||||
string('PXT_ACCESS_TOKEN', 'pxt_access_token')
|
||||
string('PXT_RELEASE_REPO', 'pxt_release_repo_calliope')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Utilities.setMachineAffinity(newJob, 'Ubuntu', '20161020')
|
||||
InternalUtilities.standardJobSetup(newJob, project, isPR, "*/*")
|
||||
|
||||
if (isPR) {
|
||||
Utilities.addGithubPRTrigger(newJob, "Default Testing")
|
||||
} else {
|
||||
Utilities.addGithubPushTrigger(newJob)
|
||||
}
|
||||
}
|
55
jenkins.sh
Normal file
@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Set up NVM
|
||||
export NVM_DIR="/home/dotnet-bot/.nvm"
|
||||
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
|
||||
|
||||
nvm install 5
|
||||
|
||||
# Set up build environment variables
|
||||
echo ---------- Setting build environment variables
|
||||
echo Git branch: $GIT_BRANCH
|
||||
echo isPR: $1
|
||||
|
||||
originRegex="^origin/.*"
|
||||
branchRegex="^origin/\K.*(?=$)"
|
||||
|
||||
if [[ "$GIT_BRANCH" =~ $originRegex ]]; then
|
||||
branchName=$(echo ${GIT_BRANCH} | grep -oP $branchRegex)
|
||||
echo Setting TRAVIS_BRANCH to ${branchName}
|
||||
export TRAVIS_BRANCH=${branchName}
|
||||
else
|
||||
echo Setting TRAVIS_BRANCH to $GIT_BRANCH
|
||||
export TRAVIS_BRANCH=$GIT_BRANCH
|
||||
fi
|
||||
|
||||
if [ "$1" == "false" ]; then
|
||||
echo Setting TRAVIS_PULL_REQUEST to false
|
||||
export TRAVIS_PULL_REQUEST=false
|
||||
|
||||
if [ $TRAVIS_BRANCH == "master" ]; then
|
||||
if [[ -z $PXT_RELEASE_REPO ]]; then
|
||||
echo Cannot find release repo; skipping tag checks
|
||||
else
|
||||
gitTag=$(git describe --tags --exact-match 2> /dev/null)
|
||||
builtTag=$(git ls-remote --tags $PXT_RELEASE_REPO | grep -o "refs/tags/$gitTag$")
|
||||
|
||||
echo Current tag: $gitTag
|
||||
echo Built tag: $builtTag
|
||||
|
||||
if [[ ! -z $gitTag && -z $builtTag ]]; then
|
||||
echo Built tag not found; building tag
|
||||
echo Setting TRAVIS_BRANCH to $gitTag
|
||||
export TRAVIS_BRANCH=$gitTag
|
||||
echo Setting TRAVIS_TAG to $gitTag
|
||||
export TRAVIS_TAG=$gitTag
|
||||
else
|
||||
echo Not a tag build
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Perform build
|
||||
npm install
|
||||
npm test
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"bluetooth": "Support for additional Bluetooth services.",
|
||||
"bluetooth": "Support for additional Bluetooth services.\n\nSupport for additional Bluetooth services.",
|
||||
"bluetooth.onBluetoothConnected": "Register code to run when the micro:bit is connected to over Bluetooth",
|
||||
"bluetooth.onBluetoothConnected|param|body": "Code to run when a Bluetooth connection is established",
|
||||
"bluetooth.onBluetoothDisconnected": "Register code to run when a bluetooth connection to the micro:bit is lost",
|
||||
|
8
libs/bluetooth/_locales/de/bluetooth-jsdoc-strings.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"bluetooth": "Unterstützung für zusätzliche Bluetooth-Dienste.",
|
||||
"bluetooth.onBluetoothConnected|param|body": "Code, der ausgeführt wird, wenn eine Bluetooth-Verbindung aufgebaut wurde",
|
||||
"bluetooth.uartWriteNumber": "Gibt einen numerischen Wert an die serielle",
|
||||
"bluetooth.uartWriteValue": "Schreibt ein ``Namen: Wert`` Wertepaar auf die serielle Schnittstelle.",
|
||||
"bluetooth.uartWriteValue|param|name": "Name des Wertestreams, z.B.: x",
|
||||
"bluetooth.uartWriteValue|param|value": "Schreiben"
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Support for additional Bluetooth services.
|
||||
*/
|
||||
//% color=#0082FB weight=20
|
||||
//% color=#0082FB weight=20 icon="\uf294"
|
||||
namespace bluetooth {
|
||||
/**
|
||||
* Writes to the Bluetooth UART service buffer. From there the data is transmitted over Bluetooth to a connected device.
|
||||
|
@ -6,7 +6,8 @@
|
||||
"enums.d.ts",
|
||||
"shims.d.ts",
|
||||
"bluetooth.ts",
|
||||
"bluetooth.cpp"
|
||||
"bluetooth.cpp",
|
||||
"_locales/de/bluetooth-jsdoc-strings.json"
|
||||
],
|
||||
"public": true,
|
||||
"dependencies": {
|
||||
|
@ -138,7 +138,7 @@ function getNoteName(frequency: number): string {
|
||||
}
|
||||
}
|
||||
|
||||
var notes = [
|
||||
let notes = [
|
||||
note(Note.E, BeatFraction.Quarter), note(Note.E, BeatFraction.Quarter), note(Note.F, BeatFraction.Quarter),
|
||||
note(Note.G, BeatFraction.Quarter), note(Note.G, BeatFraction.Quarter), note(Note.F, BeatFraction.Quarter),
|
||||
note(Note.E, BeatFraction.Quarter), note(Note.D, BeatFraction.Quarter), note(Note.C, BeatFraction.Quarter),
|
||||
@ -166,8 +166,8 @@ var notes = [
|
||||
note(Note.C, BeatFraction.Eighth), note(Note.C, BeatFraction.Half)
|
||||
];
|
||||
|
||||
for (var t = 0; t < notes.length; t++) {
|
||||
for (let t = 0; t < notes.length; t++) {
|
||||
music.playTone(notes[t][0], notes[t][1]);
|
||||
basic.showString(getNoteName(notes[t][0]));
|
||||
music.rest(whole - notes[t][1]);
|
||||
}
|
||||
}
|
||||
|
373
libs/core/ManagedBuffer.cpp
Normal file
@ -0,0 +1,373 @@
|
||||
#include "MicroBit.h"
|
||||
#include "ManagedBuffer.h"
|
||||
#include <limits.h>
|
||||
|
||||
static const char empty[] __attribute__ ((aligned (4))) = "\xff\xff\0\0\0";
|
||||
|
||||
/**
|
||||
* Internal constructor helper.
|
||||
* Configures this ManagedBuffer to refer to the static empty buffer.
|
||||
*/
|
||||
void ManagedBuffer::initEmpty()
|
||||
{
|
||||
ptr = (BufferData*)(void*)empty;
|
||||
}
|
||||
|
||||
/**
|
||||
* Default Constructor.
|
||||
* Creates an empty ManagedBuffer.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* ManagedBuffer p();
|
||||
* @endcode
|
||||
*/
|
||||
ManagedBuffer::ManagedBuffer()
|
||||
{
|
||||
initEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* Creates an empty ManagedBuffer of the given size.
|
||||
*
|
||||
* @param length The length of the buffer to create.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* ManagedBuffer p(16); // Creates a ManagedBuffer 16 bytes long.
|
||||
* @endcode
|
||||
*/
|
||||
ManagedBuffer::ManagedBuffer(int length)
|
||||
{
|
||||
this->init(NULL, length);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* Creates a new ManagedBuffer of the given size,
|
||||
* and fills it with the data provided.
|
||||
*
|
||||
* @param data The data with which to fill the buffer.
|
||||
* @param length The length of the buffer to create.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* uint8_t buf = {13,5,2};
|
||||
* ManagedBuffer p(buf, 3); // Creates a ManagedBuffer 3 bytes long.
|
||||
* @endcode
|
||||
*/
|
||||
ManagedBuffer::ManagedBuffer(uint8_t *data, int length)
|
||||
{
|
||||
this->init(data, length);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy Constructor.
|
||||
* Add ourselves as a reference to an existing ManagedBuffer.
|
||||
*
|
||||
* @param buffer The ManagedBuffer to reference.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* ManagedBuffer p();
|
||||
* ManagedBuffer p2(i); // Refers to the same buffer as p.
|
||||
* @endcode
|
||||
*/
|
||||
ManagedBuffer::ManagedBuffer(const ManagedBuffer &buffer)
|
||||
{
|
||||
ptr = buffer.ptr;
|
||||
ptr->incr();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* Create a buffer from a raw BufferData pointer. It will ptr->incr(). This is to be used by specialized runtimes.
|
||||
*
|
||||
* @param p The pointer to use.
|
||||
*/
|
||||
ManagedBuffer::ManagedBuffer(BufferData *p)
|
||||
{
|
||||
ptr = p;
|
||||
ptr->incr();
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal constructor-initialiser.
|
||||
*
|
||||
* @param data The data with which to fill the buffer.
|
||||
* @param length The length of the buffer to create.
|
||||
*
|
||||
*/
|
||||
void ManagedBuffer::init(uint8_t *data, int length)
|
||||
{
|
||||
if (length <= 0) {
|
||||
initEmpty();
|
||||
return;
|
||||
}
|
||||
|
||||
ptr = (BufferData *) malloc(sizeof(BufferData) + length);
|
||||
ptr->init();
|
||||
|
||||
ptr->length = length;
|
||||
|
||||
// Copy in the data buffer, if provided.
|
||||
if (data)
|
||||
memcpy(ptr->payload, data, length);
|
||||
else
|
||||
memset(ptr->payload, 0, length);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destructor.
|
||||
* Removes buffer resources held by the instance.
|
||||
*/
|
||||
ManagedBuffer::~ManagedBuffer()
|
||||
{
|
||||
ptr->decr();
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy assign operation.
|
||||
*
|
||||
* Called when one ManagedBuffer is assigned the value of another using the '=' operator.
|
||||
* Decrements our reference count and free up the buffer as necessary.
|
||||
* Then, update our buffer to refer to that of the supplied ManagedBuffer,
|
||||
* and increase its reference count.
|
||||
*
|
||||
* @param p The ManagedBuffer to reference.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* uint8_t buf = {13,5,2};
|
||||
* ManagedBuffer p1(16);
|
||||
* ManagedBuffer p2(buf, 3);
|
||||
*
|
||||
* p1 = p2;
|
||||
* @endcode
|
||||
*/
|
||||
ManagedBuffer& ManagedBuffer::operator = (const ManagedBuffer &p)
|
||||
{
|
||||
if(ptr == p.ptr)
|
||||
return *this;
|
||||
|
||||
ptr->decr();
|
||||
ptr = p.ptr;
|
||||
ptr->incr();
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Equality operation.
|
||||
*
|
||||
* Called when one ManagedBuffer is tested to be equal to another using the '==' operator.
|
||||
*
|
||||
* @param p The ManagedBuffer to test ourselves against.
|
||||
* @return true if this ManagedBuffer is identical to the one supplied, false otherwise.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
*
|
||||
* uint8_t buf = {13,5,2};
|
||||
* ManagedBuffer p1(16);
|
||||
* ManagedBuffer p2(buf, 3);
|
||||
*
|
||||
* if(p1 == p2) // will be true
|
||||
* uBit.display.scroll("same!");
|
||||
* @endcode
|
||||
*/
|
||||
bool ManagedBuffer::operator== (const ManagedBuffer& p)
|
||||
{
|
||||
if (ptr == p.ptr)
|
||||
return true;
|
||||
else
|
||||
return (ptr->length == p.ptr->length && (memcmp(ptr->payload, p.ptr->payload, ptr->length)==0));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the byte at the given index to value provided.
|
||||
* @param position The index of the byte to change.
|
||||
* @param value The new value of the byte (0-255).
|
||||
* @return MICROBIT_OK, or MICROBIT_INVALID_PARAMETER.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* ManagedBuffer p1(16);
|
||||
* p1.setByte(0,255); // Sets the firts byte in the buffer to the value 255.
|
||||
* @endcode
|
||||
*/
|
||||
int ManagedBuffer::setByte(int position, uint8_t value)
|
||||
{
|
||||
if (0 <= position && position < ptr->length)
|
||||
{
|
||||
ptr->payload[position] = value;
|
||||
return MICROBIT_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
return MICROBIT_INVALID_PARAMETER;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines the value of the given byte in the buffer.
|
||||
*
|
||||
* @param position The index of the byte to read.
|
||||
* @return The value of the byte at the given position, or MICROBIT_INVALID_PARAMETER.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* ManagedBuffer p1(16);
|
||||
* p1.setByte(0,255); // Sets the firts byte in the buffer to the value 255.
|
||||
* p1.getByte(0); // Returns 255.
|
||||
* @endcode
|
||||
*/
|
||||
int ManagedBuffer::getByte(int position)
|
||||
{
|
||||
if (0 <= position && position < ptr->length)
|
||||
return ptr->payload[position];
|
||||
else
|
||||
return MICROBIT_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get current ptr, do not decr() it, and set the current instance to an empty buffer.
|
||||
* This is to be used by specialized runtimes which pass BufferData around.
|
||||
*/
|
||||
BufferData *ManagedBuffer::leakData()
|
||||
{
|
||||
BufferData* res = ptr;
|
||||
initEmpty();
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
int ManagedBuffer::fill(uint8_t value, int offset, int length)
|
||||
{
|
||||
if (offset < 0 || offset > ptr->length)
|
||||
return MICROBIT_INVALID_PARAMETER;
|
||||
if (length < 0)
|
||||
length = ptr->length;
|
||||
length = min(length, ptr->length - offset);
|
||||
|
||||
memset(ptr->payload + offset, value, length);
|
||||
|
||||
return MICROBIT_OK;
|
||||
}
|
||||
|
||||
ManagedBuffer ManagedBuffer::slice(int offset, int length) const
|
||||
{
|
||||
offset = min(ptr->length, offset);
|
||||
if (length < 0)
|
||||
length = ptr->length;
|
||||
length = min(length, ptr->length - offset);
|
||||
return ManagedBuffer(ptr->payload + offset, length);
|
||||
}
|
||||
|
||||
void ManagedBuffer::shift(int offset, int start, int len)
|
||||
{
|
||||
if (len < 0) len = ptr->length - start;
|
||||
if (start < 0 || start + len > ptr->length || start + len < start
|
||||
|| len == 0 || offset == 0 || offset == INT_MIN) return;
|
||||
if (offset <= -len || offset >= len) {
|
||||
fill(0);
|
||||
return;
|
||||
}
|
||||
|
||||
uint8_t *data = ptr->payload + start;
|
||||
if (offset < 0) {
|
||||
offset = -offset;
|
||||
memmove(data + offset, data, len - offset);
|
||||
memset(data, 0, offset);
|
||||
} else {
|
||||
len = len - offset;
|
||||
memmove(data, data + offset, len);
|
||||
memset(data + len, 0, offset);
|
||||
}
|
||||
}
|
||||
|
||||
void ManagedBuffer::rotate(int offset, int start, int len)
|
||||
{
|
||||
if (len < 0) len = ptr->length - start;
|
||||
if (start < 0 || start + len > ptr-> length || start + len < start
|
||||
|| len == 0 || offset == 0 || offset == INT_MIN) return;
|
||||
|
||||
if (offset < 0)
|
||||
offset += len << 8; // try to make it positive
|
||||
offset %= len;
|
||||
if (offset < 0)
|
||||
offset += len;
|
||||
|
||||
uint8_t *data = ptr->payload + start;
|
||||
|
||||
uint8_t *n_first = data + offset;
|
||||
uint8_t *first = data;
|
||||
uint8_t *next = n_first;
|
||||
uint8_t *last = data + len;
|
||||
|
||||
while (first != next) {
|
||||
uint8_t tmp = *first;
|
||||
*first++ = *next;
|
||||
*next++ = tmp;
|
||||
if (next == last) {
|
||||
next = n_first;
|
||||
} else if (first == n_first) {
|
||||
n_first = next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int ManagedBuffer::writeBuffer(int dstOffset, const ManagedBuffer &src, int srcOffset, int length)
|
||||
{
|
||||
if (length < 0)
|
||||
length = src.length();
|
||||
|
||||
if (srcOffset < 0 || dstOffset < 0 || dstOffset > ptr->length)
|
||||
return MICROBIT_INVALID_PARAMETER;
|
||||
|
||||
length = min(src.length() - srcOffset, ptr->length - dstOffset);
|
||||
|
||||
if (length < 0)
|
||||
return MICROBIT_INVALID_PARAMETER;
|
||||
|
||||
if (ptr == src.ptr) {
|
||||
memmove(getBytes() + dstOffset, src.ptr->payload + srcOffset, length);
|
||||
} else {
|
||||
memcpy(getBytes() + dstOffset, src.ptr->payload + srcOffset, length);
|
||||
}
|
||||
|
||||
return MICROBIT_OK;
|
||||
}
|
||||
|
||||
int ManagedBuffer::writeBytes(int offset, uint8_t *src, int length, bool swapBytes)
|
||||
{
|
||||
if (offset < 0 || length < 0 || offset + length > ptr->length)
|
||||
return MICROBIT_INVALID_PARAMETER;
|
||||
|
||||
if (swapBytes) {
|
||||
uint8_t *p = ptr->payload + offset + length;
|
||||
for (int i = 0; i < length; ++i)
|
||||
*--p = src[i];
|
||||
} else {
|
||||
memcpy(ptr->payload + offset, src, length);
|
||||
}
|
||||
|
||||
return MICROBIT_OK;
|
||||
}
|
||||
|
||||
int ManagedBuffer::readBytes(uint8_t *dst, int offset, int length, bool swapBytes) const
|
||||
{
|
||||
if (offset < 0 || length < 0 || offset + length > ptr->length)
|
||||
return MICROBIT_INVALID_PARAMETER;
|
||||
|
||||
if (swapBytes) {
|
||||
uint8_t *p = ptr->payload + offset + length;
|
||||
for (int i = 0; i < length; ++i)
|
||||
dst[i] = *--p;
|
||||
} else {
|
||||
memcpy(dst, ptr->payload + offset, length);
|
||||
}
|
||||
|
||||
return MICROBIT_OK;
|
||||
}
|
257
libs/core/ManagedBuffer.h
Normal file
@ -0,0 +1,257 @@
|
||||
#ifndef MICROBIT_MANAGED_BUFFER_H
|
||||
#define MICROBIT_MANAGED_BUFFER_H
|
||||
|
||||
#include "mbed.h"
|
||||
#include "RefCounted.h"
|
||||
|
||||
struct BufferData : RefCounted
|
||||
{
|
||||
uint16_t length; // The length of the payload in bytes
|
||||
uint8_t payload[0]; // ManagedBuffer data
|
||||
};
|
||||
|
||||
/**
|
||||
* Class definition for a ManagedBuffer.
|
||||
* A ManagedBuffer holds a series of bytes, used with MicroBitRadio channels and in other places.
|
||||
* n.b. This is a mutable, managed type.
|
||||
*/
|
||||
class ManagedBuffer
|
||||
{
|
||||
BufferData *ptr; // Pointer to payload data
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* Default Constructor.
|
||||
* Creates an empty ManagedBuffer. The 'ptr' field in all empty buffers is shared.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* ManagedBuffer p();
|
||||
* @endcode
|
||||
*/
|
||||
ManagedBuffer();
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* Creates a new ManagedBuffer of the given size.
|
||||
*
|
||||
* @param length The length of the buffer to create.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* ManagedBuffer p(16); // Creates a ManagedBuffer 16 bytes long.
|
||||
* @endcode
|
||||
*/
|
||||
ManagedBuffer(int length);
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* Creates an empty ManagedBuffer of the given size,
|
||||
* and fills it with the data provided.
|
||||
*
|
||||
* @param data The data with which to fill the buffer.
|
||||
* @param length The length of the buffer to create.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* uint8_t buf[] = {13,5,2};
|
||||
* ManagedBuffer p(buf, 3); // Creates a ManagedBuffer 3 bytes long.
|
||||
* @endcode
|
||||
*/
|
||||
ManagedBuffer(uint8_t *data, int length);
|
||||
|
||||
/**
|
||||
* Copy Constructor.
|
||||
* Add ourselves as a reference to an existing ManagedBuffer.
|
||||
*
|
||||
* @param buffer The ManagedBuffer to reference.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* ManagedBuffer p();
|
||||
* ManagedBuffer p2(i); // Refers to the same buffer as p.
|
||||
* @endcode
|
||||
*/
|
||||
ManagedBuffer(const ManagedBuffer &buffer);
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* Create a buffer from a raw BufferData pointer. It will ptr->incr(). This is to be used by specialized runtimes.
|
||||
*
|
||||
* @param p The pointer to use.
|
||||
*/
|
||||
ManagedBuffer(BufferData *p);
|
||||
|
||||
/**
|
||||
* Internal constructor helper.
|
||||
* Configures this ManagedBuffer to refer to the static empty buffer.
|
||||
*/
|
||||
void initEmpty();
|
||||
|
||||
/**
|
||||
* Internal constructor-initialiser.
|
||||
*
|
||||
* @param data The data with which to fill the buffer.
|
||||
* @param length The length of the buffer to create.
|
||||
*
|
||||
*/
|
||||
void init(uint8_t *data, int length);
|
||||
|
||||
/**
|
||||
* Destructor.
|
||||
* Removes buffer resources held by the instance.
|
||||
*/
|
||||
~ManagedBuffer();
|
||||
|
||||
/**
|
||||
* Provide an array containing the buffer data.
|
||||
* @return The contents of this buffer, as an array of bytes.
|
||||
*/
|
||||
uint8_t *getBytes()
|
||||
{
|
||||
return ptr->payload;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get current ptr, do not decr() it, and set the current instance to an empty buffer.
|
||||
* This is to be used by specialized runtimes which pass BufferData around.
|
||||
*/
|
||||
BufferData *leakData();
|
||||
|
||||
/**
|
||||
* Copy assign operation.
|
||||
*
|
||||
* Called when one ManagedBuffer is assigned the value of another using the '=' operator.
|
||||
* Decrements our reference count and free up the buffer as necessary.
|
||||
* Then, update our buffer to refer to that of the supplied ManagedBuffer,
|
||||
* and increase its reference count.
|
||||
*
|
||||
* @param p The ManagedBuffer to reference.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* uint8_t buf = {13,5,2};
|
||||
* ManagedBuffer p1(16);
|
||||
* ManagedBuffer p2(buf, 3);
|
||||
*
|
||||
* p1 = p2;
|
||||
* @endcode
|
||||
*/
|
||||
ManagedBuffer& operator = (const ManagedBuffer& p);
|
||||
|
||||
/**
|
||||
* Array access operation (read).
|
||||
*
|
||||
* Called when a ManagedBuffer is dereferenced with a [] operation.
|
||||
* Transparently map this through to the underlying payload for elegance of programming.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* ManagedBuffer p1(16);
|
||||
* uint8_t data = p1[0];
|
||||
* @endcode
|
||||
*/
|
||||
uint8_t operator [] (int i) const
|
||||
{
|
||||
return ptr->payload[i];
|
||||
}
|
||||
|
||||
/**
|
||||
* Array access operation (modify).
|
||||
*
|
||||
* Called when a ManagedBuffer is dereferenced with a [] operation.
|
||||
* Transparently map this through to the underlying payload for elegance of programming.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* ManagedBuffer p1(16);
|
||||
* p1[0] = 42;
|
||||
* @endcode
|
||||
*/
|
||||
uint8_t& operator [] (int i)
|
||||
{
|
||||
return ptr->payload[i];
|
||||
}
|
||||
|
||||
/**
|
||||
* Equality operation.
|
||||
*
|
||||
* Called when one ManagedBuffer is tested to be equal to another using the '==' operator.
|
||||
*
|
||||
* @param p The ManagedBuffer to test ourselves against.
|
||||
* @return true if this ManagedBuffer is identical to the one supplied, false otherwise.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
*
|
||||
* uint8_t buf = {13,5,2};
|
||||
* ManagedBuffer p1(16);
|
||||
* ManagedBuffer p2(buf, 3);
|
||||
*
|
||||
* if(p1 == p2) // will be true
|
||||
* uBit.display.scroll("same!");
|
||||
* @endcode
|
||||
*/
|
||||
bool operator== (const ManagedBuffer& p);
|
||||
|
||||
/**
|
||||
* Sets the byte at the given index to value provided.
|
||||
* @param position The index of the byte to change.
|
||||
* @param value The new value of the byte (0-255).
|
||||
* @return MICROBIT_OK, or MICROBIT_INVALID_PARAMETER.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* ManagedBuffer p1(16);
|
||||
* p1.setByte(0,255); // Sets the first byte in the buffer to the value 255.
|
||||
* @endcode
|
||||
*/
|
||||
int setByte(int position, uint8_t value);
|
||||
|
||||
/**
|
||||
* Determines the value of the given byte in the buffer.
|
||||
*
|
||||
* @param position The index of the byte to read.
|
||||
* @return The value of the byte at the given position, or MICROBIT_INVALID_PARAMETER.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* ManagedBuffer p1(16);
|
||||
* p1.setByte(0,255); // Sets the first byte in the buffer to the value 255.
|
||||
* p1.getByte(0); // Returns 255.
|
||||
* @endcode
|
||||
*/
|
||||
int getByte(int position);
|
||||
|
||||
/**
|
||||
* Gets number of bytes in this buffer
|
||||
* @return The size of the buffer in bytes.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* ManagedBuffer p1(16);
|
||||
* p1.length(); // Returns 16.
|
||||
* @endcode
|
||||
*/
|
||||
int length() const { return ptr->length; }
|
||||
|
||||
int fill(uint8_t value, int offset = 0, int length = -1);
|
||||
|
||||
ManagedBuffer slice(int offset = 0, int length = -1) const;
|
||||
|
||||
void shift(int offset, int start = 0, int length = -1);
|
||||
|
||||
void rotate(int offset, int start = 0, int length = -1);
|
||||
|
||||
int readBytes(uint8_t *dst, int offset, int length, bool swapBytes = false) const;
|
||||
|
||||
int writeBytes(int dstOffset, uint8_t *src, int length, bool swapBytes = false);
|
||||
|
||||
int writeBuffer(int dstOffset, const ManagedBuffer &src, int srcOffset = 0, int length = -1);
|
||||
|
||||
bool isReadOnly() const { return ptr->isReadOnly(); }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -26,7 +26,7 @@
|
||||
"String.substr": "Return substring of the current string.",
|
||||
"String.substr|param|length": "number of characters to extract",
|
||||
"String.substr|param|start": "first character index; can be negative from counting from the end, eg:0",
|
||||
"basic": "Provides access to basic micro:bit functionality.",
|
||||
"basic": "Provides access to basic micro:bit functionality.\n\nProvides access to basic micro:bit functionality.",
|
||||
"basic.clearScreen": "Turn off all LEDs",
|
||||
"basic.color": "Converts the color name to a number",
|
||||
"basic.forever": "Repeats the code forever in the background. On each iteration, allows other codes to run.",
|
||||
@ -180,6 +180,7 @@
|
||||
"music.noteFrequency": "Gets the frequency of a note.",
|
||||
"music.noteFrequency|param|name": "the note name",
|
||||
"music.playTone": "Plays a tone through ``speaker`` for the given duration.",
|
||||
"music.playTone|param|frequency": "pitch of the tone to play in Hertz (Hz)",
|
||||
"music.playTone|param|ms": "tone duration in milliseconds (ms)",
|
||||
"music.rest": "Rests (plays nothing) for a specified time through pin ``P0``.",
|
||||
"music.rest|param|ms": "rest duration in milliseconds (ms)",
|
||||
@ -230,6 +231,9 @@
|
||||
"pins.servoWritePin": "Writes a value to the servo, controlling the shaft accordingly. On a standard servo, this will set the angle of the shaft (in degrees), moving the shaft to that orientation. On a continuous rotation servo, this will set the speed of the servo (with ``0`` being full-speed in one direction, ``180`` being full speed in the other, and a value near ``90`` being no movement).",
|
||||
"pins.servoWritePin|param|name": "pin to write to",
|
||||
"pins.servoWritePin|param|value": "angle or rotation speed, eg:180,90,0",
|
||||
"pins.setEvents": "Configures the events emitted by this pin. Events can be subscribed to\nusing ``control.onEvent()``.",
|
||||
"pins.setEvents|param|name": "pin to set the event mode on, eg: DigitalPin.P0",
|
||||
"pins.setEvents|param|type": "the type of events for this pin to emit, eg: PinEventType.Edge",
|
||||
"pins.setPull": "Configures the pull of this pin.",
|
||||
"pins.setPull|param|name": "pin to set the pull mode on",
|
||||
"pins.setPull|param|pull": "one of the mbed pull configurations: PullUp, PullDown, PullNone ",
|
||||
@ -238,13 +242,16 @@
|
||||
"pins.spiWrite|param|value": "Data to be sent to the SPI slave",
|
||||
"serial": "Reading and writing data over a serial connection.",
|
||||
"serial.delimiters": "Returns the delimiter corresponding string",
|
||||
"serial.onLineReceived": "Registers an event to be fired when a line has been received",
|
||||
"serial.onDataReceived": "Registers an event to be fired when one of the delimiter is matched.",
|
||||
"serial.onDataReceived|param|delimiters": "the characters to match received characters against.",
|
||||
"serial.readLine": "Reads a line of text from the serial port.",
|
||||
"serial.readString": "Reads the buffered received data as a string",
|
||||
"serial.readUntil": "Reads a line of text from the serial port and returns the buffer when the delimiter is met.",
|
||||
"serial.readUntil|param|delimiter": "text delimiter that separates each text chunk",
|
||||
"serial.redirect": "Dynamically configuring the serial instance to use pins other than USBTX and USBRX.",
|
||||
"serial.redirect|param|rx": "the new reception pin",
|
||||
"serial.redirect|param|tx": "the new transmission pins",
|
||||
"serial.redirect|param|rate": "the new baud rate. eg: 115200",
|
||||
"serial.redirect|param|rx": "the new reception pin, eg: SerialPin.P1",
|
||||
"serial.redirect|param|tx": "the new transmission pins, eg: SerialPin.P0",
|
||||
"serial.writeLine": "Prints a line of text to the serial",
|
||||
"serial.writeNumber": "Prints a numeric value to the serial",
|
||||
"serial.writeString": "Sends a piece of text through Serial connection.",
|
||||
|
@ -1,13 +1,103 @@
|
||||
{
|
||||
"AcceleratorRange.EightG": "The accelerator measures forces up to 8 gravity",
|
||||
"AcceleratorRange.EightG|block": "8g",
|
||||
"AcceleratorRange.FourG": "The accelerator measures forces up to 4 gravity",
|
||||
"AcceleratorRange.FourG|block": "4g",
|
||||
"AcceleratorRange.OneG": "The accelerator measures forces up to 1 gravity",
|
||||
"AcceleratorRange.OneG|block": "1g",
|
||||
"AcceleratorRange.TwoG": "The accelerator measures forces up to 2 gravity",
|
||||
"AcceleratorRange.TwoG|block": "2g",
|
||||
"BaudRate.BaudRate115200|block": "115200",
|
||||
"BaudRate.BaudRate56700|block": "57600",
|
||||
"BaudRate.BaudRate9600|block": "9600",
|
||||
"BeatFraction.Eighth|block": "1/8",
|
||||
"BeatFraction.Half|block": "1/2",
|
||||
"BeatFraction.Quarter|block": "1/4",
|
||||
"BeatFraction.Sixteenth|block": "1/16",
|
||||
"BeatFraction.Whole|block": "1",
|
||||
"Button.AB|block": "A+B",
|
||||
"Colors.Blue|block": "blue",
|
||||
"Colors.Green|block": "green",
|
||||
"Colors.Indigo|block": "indigo",
|
||||
"Colors.Orange|block": "orange",
|
||||
"Colors.Purple|block": "purple",
|
||||
"Colors.Red|block": "red",
|
||||
"Colors.Violet|block": "violet",
|
||||
"Colors.White|block": "white",
|
||||
"Colors.Yellow|block": "yellow",
|
||||
"Delimiters.Colon|block": ":",
|
||||
"Delimiters.Comma|block": ",",
|
||||
"Delimiters.Dollar|block": "$",
|
||||
"Delimiters.Fullstop|block": ".",
|
||||
"Delimiters.Hash|block": "#",
|
||||
"Delimiters.NewLine|block": "new line",
|
||||
"Dimension.Strength|block": "strength",
|
||||
"Dimension.X|block": "x",
|
||||
"Dimension.Y|block": "y",
|
||||
"Dimension.Z|block": "z",
|
||||
"Direction.Left|block": "left",
|
||||
"Direction.Right|block": "right",
|
||||
"DisplayMode.BackAndWhite|block": "black and white",
|
||||
"DisplayMode.Greyscale|block": "greyscale",
|
||||
"EventCreationMode.CreateAndFire": "MicroBitEvent is initialised, and its event handlers are immediately fired (not suitable for use in interrupts!).",
|
||||
"EventCreationMode.CreateOnly": "MicroBitEvent is initialised, and no further processing takes place.",
|
||||
"Gesture.FreeFall": "Raised when the board is falling!",
|
||||
"Gesture.FreeFall|block": "free fall",
|
||||
"Gesture.LogoDown": "Raised when the logo is downward and the screen is vertical",
|
||||
"Gesture.LogoDown|block": "logo down",
|
||||
"Gesture.LogoUp": "Raised when the logo is upward and the screen is vertical",
|
||||
"Gesture.LogoUp|block": "logo up",
|
||||
"Gesture.ScreenDown": "Raised when the screen is pointing up and the board is horizontal",
|
||||
"Gesture.ScreenDown|block": "screen down",
|
||||
"Gesture.ScreenUp": "Raised when the screen is pointing down and the board is horizontal",
|
||||
"Gesture.ScreenUp|block": "screen up",
|
||||
"Gesture.Shake": "Raised when shaken",
|
||||
"Gesture.Shake|block": "shake",
|
||||
"Gesture.SixG": "Raised when a 6G shock is detected",
|
||||
"Gesture.SixG|block": "6g",
|
||||
"Gesture.ThreeG": "Raised when a 3G shock is detected",
|
||||
"Gesture.ThreeG|block": "3g",
|
||||
"Gesture.TiltLeft": "Raised when the screen is pointing left",
|
||||
"Gesture.TiltLeft|block": "tilt left",
|
||||
"Gesture.TiltRight": "Raised when the screen is pointing right",
|
||||
"Gesture.TiltRight|block": "tilt right",
|
||||
"LedSpriteProperty.Blink|block": "blink",
|
||||
"LedSpriteProperty.Brightness|block": "brightness",
|
||||
"LedSpriteProperty.Direction|block": "direction",
|
||||
"LedSpriteProperty.X|block": "x",
|
||||
"LedSpriteProperty.Y|block": "y",
|
||||
"Math.randomBoolean|block": "pick random true or false",
|
||||
"Math|block": "Math",
|
||||
"String.charAt|block": "char from %this|at %pos",
|
||||
"String.compare|block": "compare %this| to %that",
|
||||
"String.concat|block": "join %this|%other",
|
||||
"Motor.AB|block": "A and B",
|
||||
"MotorCommand.Break|block": "break",
|
||||
"MotorCommand.Coast|block": "coast",
|
||||
"MotorCommand.Sleep|block": "sleep",
|
||||
"Note.CSharp3|block": "C#3",
|
||||
"Note.CSharp4|block": "C#4",
|
||||
"Note.CSharp5|block": "C#5",
|
||||
"Note.CSharp|block": "C#",
|
||||
"Note.FSharp3|block": "F#3",
|
||||
"Note.FSharp4|block": "F#4",
|
||||
"Note.FSharp5|block": "F#5",
|
||||
"Note.FSharp|block": "F#",
|
||||
"Note.GSharp3|block": "G#3",
|
||||
"Note.GSharp4|block": "G#4",
|
||||
"Note.GSharp5|block": "G#5",
|
||||
"Note.GSharp|block": "G#",
|
||||
"PinEventType.Edge|block": "edge",
|
||||
"PinEventType.None|block": "none",
|
||||
"PinEventType.Pulse|block": "pulse",
|
||||
"PinEventType.Touch|block": "touch",
|
||||
"PinPullMode.PullDown|block": "down",
|
||||
"PinPullMode.PullNone|block": "none",
|
||||
"PinPullMode.PullUp|block": "up",
|
||||
"Rotation.Pitch|block": "pitch",
|
||||
"Rotation.Roll|block": "roll",
|
||||
"String.charAt|block": "char from %this=text|at %pos",
|
||||
"String.compare|block": "compare %this=text| to %that",
|
||||
"String.fromCharCode|block": "text from char code %code",
|
||||
"String.isEmpty|block": "%this| is empty",
|
||||
"String.length|block": "length of %VALUE",
|
||||
"String.substr|block": "substring of %this|from %start|of length %length",
|
||||
"String.substr|block": "substring of %this=text|from %start|of length %length",
|
||||
"String|block": "String",
|
||||
"basic.clearScreen|block": "clear screen",
|
||||
"basic.color|block": "%c",
|
||||
@ -77,8 +167,10 @@
|
||||
"music.setTempo|block": "set tempo to (bpm)|%value",
|
||||
"music.tempo|block": "tempo (bpm)",
|
||||
"music|block": "music",
|
||||
"pins.analogPitch|block": "analog pitch %frequency|for (ms) %ms",
|
||||
"pins.analogReadPin|block": "analog read|pin %name",
|
||||
"pins.analogSetPeriod|block": "analog set period|pin %pin|to (µs)%micros",
|
||||
"pins.analogSetPitchPin|block": "analog set pitch pin %name",
|
||||
"pins.analogWritePin|block": "analog write|pin %name|to %value",
|
||||
"pins.digitalReadPin|block": "digital read|pin %name",
|
||||
"pins.digitalWritePin|block": "digital write|pin %name|to %value",
|
||||
@ -90,11 +182,14 @@
|
||||
"pins.pulseIn|block": "pulse in (µs)|pin %name|pulsed %value",
|
||||
"pins.servoSetPulse|block": "servo set pulse|pin %value|to (µs) %micros",
|
||||
"pins.servoWritePin|block": "servo write|pin %name|to %value",
|
||||
"pins.setEvents|block": "set pin %pin|to emit %type|events",
|
||||
"pins.setPull|block": "set pull|pin %pin|to %pull",
|
||||
"pins.spiWrite|block": "spi write %value",
|
||||
"pins|block": "pins",
|
||||
"serial.delimiters|block": "%del",
|
||||
"serial.onDataReceived|block": "serial|on data received %delimiters=serial_delimiter_conv",
|
||||
"serial.readLine|block": "serial|read line",
|
||||
"serial.readString|block": "serial|read string",
|
||||
"serial.readUntil|block": "serial|read until %delimiter=serial_delimiter_conv",
|
||||
"serial.redirect|block": "serial|redirect to|TX %tx|RX %rx|at baud rate %rate",
|
||||
"serial.writeLine|block": "serial|write line %text",
|
||||
|
@ -1,13 +1,45 @@
|
||||
{
|
||||
"Math.abs": "Gibt den absoluten Wert einer Zahl aus (den Wert unabhängig davon, ob er positiv oder negativ ist).\nDer absolute Wert von -5 ist zum Beispiel der gleiche wie der von 5.",
|
||||
"Math.abs|param|x": "Ein numerischer Ausdruck, für den der absolute Wert benötigt wird.",
|
||||
"Math.max": "Gibt den größeren von zwei vorhandenen numerischen Ausdrücken aus.",
|
||||
"Math.min": "Gibt den niedrigeren von zwei vorhandenen numerischen Ausdrücken aus.",
|
||||
"Math.pow": "Gibt den Wert eines grundlegenden Ausdrucks bis zu einer bestimmten Stärke aus.",
|
||||
"Math.pow|param|x": "Der Basiswert des Ausdrucks.",
|
||||
"Math.pow|param|y": "Der exponentielle Wert des Ausdrucks.",
|
||||
"Math.random": "Gibt eine pseudozufüllige Zahl zwischen 0 und `max`aus.",
|
||||
"Math.randomBoolean": "Erzeugt zufällig einen \"wahr\" oder \"falsch\"-Wert, wie bei einem Münzwurf.",
|
||||
"Math.sign": "Gibt das Vorzeichen von x aus und zeigt an, ob dieses positiv, negativ oder null ist.",
|
||||
"Math.sign|param|x": "Der numerische Ausdruck, der getestet werden soll",
|
||||
"Math.sqrt": "Gibt die Quadratwurzel einer Zahl aus.",
|
||||
"Math.sqrt|param|x": "Ein numerischer Ausdruck.",
|
||||
"String.charAt": "Gibt den Buchstaben beim angegebenen Index aus.",
|
||||
"String.charAt|param|index": "Der null-basierte index des gewünschten Zeichens.",
|
||||
"String.charCodeAt": "Gibt den Unicode-Wert des Zeichens am vorgegebenen Ort aus.",
|
||||
"String.charCodeAt|param|index": "Der null-basierte Index des gewünschten Zeichens. Wenn kein Zeichen am angegeben Index vorhanden ist, wird NaN ausgegeben.",
|
||||
"String.compare": "Bestimmt die relative Reihenfolge zweier Strings (in ASCII).",
|
||||
"String.compare|param|that": "Zeichenfolge, die mit der Zielzeichenfolge verglichen werden soll",
|
||||
"String.concat": "Gibt eine Zeichenfolge aus, die die Verkettung von zwei oder mehr Zeichenfolgen ist.",
|
||||
"String.concat|param|other": "Die Zeichenfolge, die an das Ende einer Zeichenfolge angehängt werden soll.",
|
||||
"String.fromCharCode": "Erstelle Sie eine Zeichenfolge aus dem angegebenen ASCII-Zeichencode.",
|
||||
"String.isEmpty": "Gibt einen Wert aus, der anzeigt, ob die Zeichenfolge leer ist",
|
||||
"String.length": "Gibt die Länge einer Zeichenfolge aus.",
|
||||
"String.substr": "Gibt eine Teilzeichenfolge der aktuellen Zeichenfolge aus.",
|
||||
"String.substr|param|length": "Anzahl der zu extrahierenden Zeichen",
|
||||
"String.substr|param|start": "Erster Zeichenindex, kann beim zählen vom Ende negativ sein, zum Beispiel: 0",
|
||||
"basic": "Bietet Zugriff auf grundlegende mini-Funktionalität.",
|
||||
"basic.clearScreen": "Schalte alle LEDs aus",
|
||||
"basic.color": "Konvertiert den Farbnamen in eine Nummer",
|
||||
"basic.forever": "Wiederholt immer wieder den Code im Hintergrund. Bei jeder Iteration ist es möglich, anderen Code auszuführen.",
|
||||
"basic.pause": "Pausiere für die angegebene Zeit in Millisekunden",
|
||||
"basic.pause|param|ms": "wie lange pausieren, z.B.: 100, 200, 500, 1000, 2000",
|
||||
"basic.plotLeds": "Zeichnet ein Bild auf dem LED-Bildschirm.",
|
||||
"basic.plotLeds|param|leds": "Muster der LEDs, die ein-/ und ausgeschaltet werden",
|
||||
"basic.rgbw": "Konvertiert Rot-, Grün- und Blau-Kanäle in eine RGB-Farbe",
|
||||
"basic.rgbw|param|blue": "Blauwert zwischen 0 und 255, z.B. 255",
|
||||
"basic.rgbw|param|green": "Grünwert zwischen 0 und 255, z.B. 255",
|
||||
"basic.rgbw|param|red": "Rotwert zwischen 0 und 255, z.B. 255",
|
||||
"basic.rgbw|param|white": "Weißwert zwischen 0 und 255, z.B. 0",
|
||||
"basic.setLedColor": "Legt die Farbe der eingebauten LED fest. Setze auf 0, um diese abzuschalten.",
|
||||
"basic.showAnimation": "Zeigt eine Abfolge von LED-Anzeigen als Animation.",
|
||||
"basic.showAnimation|param|interval": "Zeit in Millisekunden zwischen jedem Neuzeichnen",
|
||||
"basic.showAnimation|param|leds": "Muster der LEDs, die ein-/ und ausgeschaltet werden",
|
||||
@ -20,76 +52,84 @@
|
||||
"basic.showString|param|interval": "Wie schnell die Zeichen geändert werden; z.B. 150, 100, 200,-100",
|
||||
"basic.showString|param|text": "Text auf dem Bildschirm dargestellt werden soll, z.B.: \"Hallo!\"",
|
||||
"control": "Laufzeit- und Event-Dienstprogramme.",
|
||||
"control.assert": "Wenn die Bedingung falsch ist, zeige eine Nachricht auf der seriellen Konsole und gebe Panic-Code 098 aus",
|
||||
"control.deviceName": "Erzeugt einen Namen für das Gerät, basierend auf der Seriennummer",
|
||||
"control.eventSourceId": "Gibt den Wert einer C++-Laufzeitkonstanten aus",
|
||||
"control.eventTimestamp": "Holt den Zeitstempel des letzten Events auf dem Bus",
|
||||
"control.eventValue": "Holt den Wert des letzten ausgeführten Events auf dem Bus",
|
||||
"control.eventValueId": "Gibt den Wert einer C++-Laufzeitkonstanten aus",
|
||||
"control.inBackground": "Plant Code, der im Hintergrund wiedergegeben wird.",
|
||||
"control.onEvent": "Startet ein Event auf dem Event-Bus.",
|
||||
"control.panic": "Zeigt einen spezifizierten Fehlercode und hält das Programm an.",
|
||||
"control.raiseEvent": "Startet ein Event auf dem Event-Bus.",
|
||||
"control.raiseEvent|param|mode": "optionale Definition davon, wie ein Event nach dem Erstellen ausgeführt wird (Standard ist \"CREATE_AND_FIRE).",
|
||||
"control.raiseEvent|param|src": "ID der Calliope mini-Komponente, die das Event generiert hat, zum Beispiel CALLIOPE_ID_BUTTON_A.",
|
||||
"control.raiseEvent|param|value": "Komponentenspezifischer Code, der den Grund des Events angibt.",
|
||||
"control.reset": "Seit den mini zurück.",
|
||||
"control.runtimeWarning": "Zeige Warnmeldung im Simulator.",
|
||||
"control.waitMicros": "Sperrt die aktuelle Leitung für die Dauer der angegebenen Mikrosekunden",
|
||||
"control.waitMicros|param|micros": "Anzahl der Mikrosekunden, die gewartet werden soll, z.B.: 4",
|
||||
"game": "Eine Einzel-LED-Sprite-Spielumgebung",
|
||||
"game.addLife": "Fügt Leben zum aktuellen Spielstand hinzu",
|
||||
"game.addScore": "Fügt zum aktuellen Spielstand Punkte hinzu",
|
||||
"game.addScore|param|points": "Anzahl von zu verändernden Punkten, z.B.: 1",
|
||||
"game.createSprite": "Erzeugt einen neuen LED-Sprite, der nach rechts zeigt.",
|
||||
"game.createSprite|param|x": "horizontale Koordinate des Sprites, z.B. 2",
|
||||
"game.createSprite|param|y": "vertikale Koordinate des Sprites, z.B. 2",
|
||||
"game.currentTime": "Ruft die verbliebene Zeit (seit `starte Countdown`) oder die aktuelle Zeit (seit das Gerät gestartet wurde oder eine Stoppuhr aktiviert wurde) an.",
|
||||
"game.gameOver": "Gibt über eine Animation ein Spiel wieder.",
|
||||
"game.invalidSprite": "Ruft einen invaliden Sprite ab; wird genutzt, um Locale zu initialisieren.",
|
||||
"game.isGameOver": "Zeigt an, ob das Spil die \"Game Over\"-Sequenz angezeigt hat.",
|
||||
"game.isRunning": "Holt einen Wert, der anzeigt, ob das Spiel noch läuft. Gibt `falsch`aus, wenn das Spiel zu Ende ist.",
|
||||
"game.level": "Ruft das aktuelle Level ab",
|
||||
"game.levelUp": "Erhöht das Level und zeigt eine Nachricht an.",
|
||||
"game.life": "Ruft das aktuelle Leben ab",
|
||||
"game.removeLife": "Entfernt ein Leben",
|
||||
"game.score": "Ruft den aktuellen Punktestand ab",
|
||||
"game.setLife": "Setzt den aktuellen Wert der Leben",
|
||||
"game.setScore": "Setzt den aktuellen Wert des Spielstands",
|
||||
"game.setScore|param|value": "TODO",
|
||||
"game.showScore": "Zeigt den Spielstand auf dem Display.",
|
||||
"game.startCountdown": "Startet einen Spiel-Countdown",
|
||||
"game.startCountdown|param|ms": "Countdown-Dauer in Millisekunden, z.B.: 10000",
|
||||
"game.startStopwatch": "Startet eine Stoppuhr.`aktuelle Zeit`gibt die vergangene Zeit an.",
|
||||
"images": "Erstellung, Bearbeitung und Anzeige von LED-Bildern.",
|
||||
"images.createBigImage": "Erstellt ein Bild mit zwei Einzelbildern.",
|
||||
"images.createImage": "Erstellt ein Bild, das auf den LED-Bildschirm passt.",
|
||||
"input": "Ereignisse und Daten der Sensoren",
|
||||
"input.acceleration": "Holt den Beschleunigungswert in Milli-Erdanziehung (wenn das Board flach mit dem Display nach oben liegt, X = 0, y = 0 und Z =-1024)",
|
||||
"input.acceleration|param|dimension": "TODO",
|
||||
"input.buttonIsPressed": "Erhalte den Sie den Tastenstatus (gepresst oder nicht) für ``A`` und ``B``.",
|
||||
"input.calibrate": "Veraltet, Kompasskalibrierung erfolgt automatisch.",
|
||||
"input.compassHeading": "Holt die aktuelle Kompassrichtung in Grad.",
|
||||
"input.lightLevel": "Liest die Lichtintensität auf dem LED-Bildschirm im Bereich von ``0`` (dunkel) und `` 255`` (hell).",
|
||||
"input.magneticForce": "Ruft den Wert der Magnetkraft in ``Mikro-Tesla`` (``µT``) ab. Diese Funktion wird im Simulator nicht unterstützt.",
|
||||
"input.magneticForce|param|dimension": "TODO",
|
||||
"input.onButtonPressed": "Tue etwas, wenn eine Taste (``A``, ``B`` oder ``A + B``) gedrückt wird",
|
||||
"input.onButtonPressed|param|body": "TODO",
|
||||
"input.onButtonPressed|param|button": "TODO",
|
||||
"input.onGesture": "Mache etwas, wenn eine Geste gemacht wird (wie den mini zu schütteln).",
|
||||
"input.onGesture|param|body": "TODO",
|
||||
"input.onLogoDown": "Fügt Code hinzu, der ausgeführt wird, wenn das Logo nach unten zeigt und das Board vertikal ausgerichtet ist.",
|
||||
"input.onLogoDown|param|body": "TODO",
|
||||
"input.onLogoUp": "Fügt Code hinzu, der ausgeführt wird, wenn das Logo nach oben zeigt und das Board vertikal ausgerichtet ist.",
|
||||
"input.onLogoUp|param|body": "TODO",
|
||||
"input.onPinPressed": "Mache etwas, wenn eine Pin gehalten wird.",
|
||||
"input.onPinPressed|param|body": "Code, der ausführt wird, wenn ein Pin gehalten wird",
|
||||
"input.onPinPressed|param|name": "Der Pin, der gehalten werden muss",
|
||||
"input.onPinReleased": "Mache etwas, wenn der Pin losgelassen wird.",
|
||||
"input.onPinReleased|param|body": "Code, der ausgeführt werden soll, wenn der Pin losgelassen wird",
|
||||
"input.onPinReleased|param|name": "Der Pin, der losgelassen werden muss",
|
||||
"input.onScreenDown": "Hängt Code an, der ausgeführt wird, wenn der Bildschirm nach unten zeigt.",
|
||||
"input.onScreenDown|param|body": "TODO",
|
||||
"input.onScreenUp": "Hängt Code an, der ausgeführt wird, wenn der Bildschirm nach oben zeigt.",
|
||||
"input.onScreenUp|param|body": "TODO",
|
||||
"input.onShake": "Hängt Code an, der ausgeführt wird, wenn der mini geschüttelt wird.",
|
||||
"input.onShake|param|body": "TODO",
|
||||
"input.pinIsPressed": "Ruft den Pin-Zustand (gehalten oder nicht) ab. Die Erdung muss gehalten werden, um den Stromkreis zu schließen.",
|
||||
"input.pinIsPressed|param|name": "Pin, der verwendet wird, um eine Berührung zu erkennen",
|
||||
"input.rotation": "Die Neigung und Drehung des mini Drehung auf ``X-Achse``oder ``Y-Achse``, in Grad.",
|
||||
"input.rotation|param|kind": "TODO",
|
||||
"input.runningTime": "Ruft die Anzahl der Millisekunden auf, die seit dem Einschalten vergangen sind.",
|
||||
"input.setAccelerometerRange": "Legt die Stichprobenbereich des Beschleunigungssensors in Schwerkraft fest.",
|
||||
"input.setAccelerometerRange|param|range": "Ein Wert, der die maximale Stärke der gemessenen Beschleunigung beschreibt",
|
||||
"input.temperature": "Ruft die aktuelle Temperatur in Grad Celsius (°C) ab.",
|
||||
"led": "Steuerung des LED-Bildschirms.",
|
||||
"led.brightness": "Ruft die Helligkeit des Bildschirms ab, von 0 (aus) bis 255 (volle Helligkeit).",
|
||||
"led.enable": "Schaltet das Display an und aus",
|
||||
"led.fadeIn": "Blendet die Bildschirmanzeige ein.",
|
||||
"led.fadeIn|param|ms": "TODO",
|
||||
"led.fadeOut": "Blendet die Bildschirmhelligkeit aus.",
|
||||
"led.fadeOut|param|ms": "TODO",
|
||||
"led.plot": "Schalte die angegebene LED mit Hilfe von X- und Y-Koordinaten ein (X ist horizontal, Y ist vertikal). (0,0) ist die obere linke Ecke.",
|
||||
"led.plotAll": "Schaltet alle LEDs an",
|
||||
"led.plotBarGraph": "Zeigt ein vertikales Balkendiagramm an, basierend auf dem `Wert`und dem `Hoch`-Wert. Wenn `Hoch`0 ist, wird das Diagramm automatisch angepasst.",
|
||||
"led.plotBarGraph|param|high": "maximalen Wert. Wenn dieser 0 ist, wird der Maximalwert automatisch angepasst, z.B.: 0",
|
||||
"led.plotBarGraph|param|value": "aktueller Wert zum Darstellen",
|
||||
"led.plot|param|x": "TODO",
|
||||
"led.plot|param|y": "TODO",
|
||||
"led.point": "Ruft den An/Aus-Status einer vorgegebenen LED mittels X-/Y-Koordinaten ab. (0,0) ist oben links.",
|
||||
"led.point|param|x": "TODO",
|
||||
"led.point|param|y": "TODO",
|
||||
"led.screenshot": "Macht einen Screenshot vom LED-Bildschirm und gibt ein Bild aus.",
|
||||
"led.setBrightness": "Lege die Helligkeit des Bildschirms fest, von 0 (aus) bis 255 (volle Helligkeit).",
|
||||
"led.setBrightness|param|value": "Helligkeitswert, z.B.: 255, 127, 0",
|
||||
@ -98,47 +138,41 @@
|
||||
"led.stopAnimation": "Bricht die aktuelle Animation ab und löscht andere ausstehende Animationen.",
|
||||
"led.toggle": "Schaltet ein bestimmtes Pixel ein",
|
||||
"led.toggleAll": "Invertiert die aktuelle LED-Anzeige",
|
||||
"led.toggle|param|x": "TODO",
|
||||
"led.toggle|param|y": "TODO",
|
||||
"led.unplot": "Schalte die angegebene LED mit x-und y-Koordinaten ab (X ist horizontal, y ist vertikal). (0,0) ist oben links.",
|
||||
"led.unplot|param|x": "TODO",
|
||||
"led.unplot|param|y": "TODO",
|
||||
"motors": "Blöcke, die genutzt werden, um Onboard-Motoren zu steuern",
|
||||
"motors.dualMotorPower": "Steuert zwei an das Board angeschlossene Motoren. Schaltet auf Dual-Motor-Modus um!",
|
||||
"motors.motorCommand": "Schicke Anhalten, Ausrollen oder Anhalten-Befehle an den Motor. Hat im Dual-Motor-Modus keinen Effekt.",
|
||||
"motors.motorPower": "Schaltet den Motor bei einer bestimmten Prozentzahl der Kraft an. Schaltet um auf den Single-Motor-Modus!",
|
||||
"motors.motorPower|param|power": "%percent der Kraft, die an den Motor geschickt wird. Negative Werte laufen rückwärts, z.B. 50",
|
||||
"music": "Generierung von von Musik durch Pin ``P0``.",
|
||||
"music.beat": "Gibt die Dauer eines Taktes in Milli-Sekunden aus",
|
||||
"music.changeTempoBy": "Ändere die Geschwindigkeit um den angegebenen Betrag",
|
||||
"music.changeTempoBy|param|bpm": "Die Änderung in Schlägen pro Minute auf das Tempo, z.B.: 20",
|
||||
"music.noteFrequency": "Ruft die Frequenz einer Note ab.",
|
||||
"music.noteFrequency|param|name": "der Name der Notiz",
|
||||
"music.playTone": "Spielt einen Ton für den angegebenen Zeitraum über Pin ``P0`` ab.",
|
||||
"music.playTone|param|frequency": "Tonhöhe des abzuspielenden Tones in Hertz (Hz)",
|
||||
"music.playTone": "Spielt einen Ton für den angegebenen Zeitraum auf dem Lautsprecher ab.",
|
||||
"music.playTone|param|ms": "Tondauer in Millisekunden (ms)",
|
||||
"music.rest": "Ruht (spielt nichts) für eine bestimmte Zeit auf Pin ``P0``.",
|
||||
"music.rest|param|ms": "Restdauer in Millisekunden (ms)",
|
||||
"music.ringTone": "Spielt einen Ton über Pin ``P0``.",
|
||||
"music.ringTone": "Spielt einen Ton durch den Lautsprecher ab.",
|
||||
"music.ringTone|param|frequency": "Tonhöhe des abzuspielenden Tones in Hertz (Hz)",
|
||||
"music.setTempo": "Legt die Geschwindigkeit auf den angegebenen Wert fest.",
|
||||
"music.setTempo|param|bpm": "Die neue Geschwindigkeit in Schlägen pro Minute, z.B.: 120",
|
||||
"music.tempo": "Gibt die Geschwindigkeit in Schlägen pro Minute aus. Die Geschwindigkeit ist Schnelligkeit (Bpm = Beats pro Minute), in der Töne abgespielt werden. Je größer der Wert, desto schneller werden die Töne abgespielt.",
|
||||
"pins": "Steuere die Stromstärke über die Pins für analoge/digitale Signale, Servos, I2C,...",
|
||||
"pins.analogPitch": "Gibt ein Pulsweiten Modulation (PWM)-Signal über den aktuellen Pitch-Pin. Benutze `analog set pitch pin`, um den Pitch-Pin festzulegen.",
|
||||
"pins.analogPitch|param|frequency": "TODO",
|
||||
"pins.analogPitch|param|ms": "TODO",
|
||||
"pins.analogReadPin": "Lese den Anschlusswert als Analog aus, d. h. als einen Wert zwischen 0 und 1023.",
|
||||
"pins.analogReadPin|param|name": "Pin, auf den geschrieben werden soll",
|
||||
"pins.analogSetPeriod": "Stellt die Pulsweite Modulation (PWM) des Analogausganges auf den angegebenen Wert in ** Mikrosekunden ** oder `1/1000` Millisekunden ein.\nWenn dieser Pin nicht als einen Analogausgang (mit `analog write pin`) konfiguriert ist, hat der Vorgang keine Auswirkungen.",
|
||||
"pins.analogSetPeriod|param|micros": "Zeit in Mikrosekunden. z.B.: 20000",
|
||||
"pins.analogSetPeriod|param|name": "analoger Pin, der zeitlich festgelegt werden soll",
|
||||
"pins.analogSetPitchPin": "Setzt den genutzten Pin, wenn `pins->analog pitch`angewendet wird.",
|
||||
"pins.analogSetPitchPin|param|name": "TODO",
|
||||
"pins.analogWritePin": "Legt den Wert des Verbinders auf analog fest. Der Wert muss zwischen 0 und 1023 liegen.",
|
||||
"pins.analogWritePin|param|name": "PIN-Name, auf den geschrieben werden soll",
|
||||
"pins.analogWritePin|param|value": "Wert, der auf den Pin geschrieben werden soll, zwischen ``0`` und ``1023`` z.B.: 1023,0",
|
||||
"pins.createBuffer": "Erstellt einen Null-initialisierten Zwischenspeicher.",
|
||||
"pins.createBuffer|param|size": "Anzahl der Bytes im Zwischenspeicher",
|
||||
"pins.digitalReadPin": "Lese den angegebene Pin oder Verbinder als 0 oder 1",
|
||||
"pins.digitalReadPin|param|name": "Pin, aus dem gelesen werden soll",
|
||||
"pins.digitalWritePin": "Setzt einen Pin- oder Verbinder-Wert auf 0 oder 1.",
|
||||
"pins.digitalWritePin|param|name": "Pin, auf den geschrieben werden soll",
|
||||
"pins.digitalWritePin|param|value": "Wert, der auf dem Pin 1 gesetzt werden soll, z.B. 0",
|
||||
"pins.i2cReadBuffer": "Lese `Größe`bytes aus einer 7-bit I2C-Adresse.",
|
||||
"pins.i2cReadNumber": "Lese eine Nummer aus einer 7-bit I2C-Adresse.",
|
||||
"pins.i2cWriteBuffer": "Schreibt Bytes in eine 7-bit I2C-Adresse.",
|
||||
"pins.i2cWriteNumber": "Schreibe eine Nummer in eine 7-bit I2C-Adresse.",
|
||||
"pins.map": "Definiert eine Nummer von einer Auswahl zu einer anderen um. Ein Wert ``von niedrig``wird so auf ``zu niedrig``umgeändert, ein Wert ``von hoch`` zu ``zu hoch`` etc.",
|
||||
"pins.map|param|fromHigh": "die obere Grenze des aktuellen Wertebereichs, z.B.: 1023",
|
||||
@ -148,26 +182,27 @@
|
||||
"pins.map|param|value": "Wert in Bereichen zuordnen",
|
||||
"pins.onPulsed": "Stellt diesen Pin als einen Digitaleingang ein und generiert Ereignisse, deren Zeitstempel die Dauer darstellt, in der der Pin entweder ``hoch``oder ``niedrig``war.",
|
||||
"pins.pulseDuration": "Ruft die Dauer des letzten Impulses in Mikrosendungen ab. Diese Funktion soll von einem `onPulsed`-Handler aufgerufen werden.",
|
||||
"pins.pulseIn": "Gibt die Dauer eines Pulses in Mikrosekunden an",
|
||||
"pins.pulseIn|param|name": "der Pin, der den Puls misst",
|
||||
"pins.pulseIn|param|value": "der Wert des Pulses (Standard hoch)",
|
||||
"pins.servoSetPulse": "Konfiguriert diesen IO-Pin als einen analogen/PWM-Ausgang, stellt den Zeitraum auf 20 ms ein und setzt die Pulsweite fest, basieren auf dem angegeben Wert **Mikrosekunden** oder `1/1000`Millisekunden.",
|
||||
"pins.servoSetPulse|param|micros": "Impulsdauer in Mikrosekunden, z.B.: 1500",
|
||||
"pins.servoSetPulse|param|name": "PIN-Name",
|
||||
"pins.servoWritePin": "Schreibt einen Wert in den Servo, der die Welle entsprechend kontroliert. Auf einem Standard-Servo wird so der Winkel der Welle (in Grad) eingestellt, sodass sich die Welle entsprechend anpasst. Auf einem kontinuierlich drehenden Servo wird dadurch die Geschwindigkeit des Servos festgelegt, wobei ``0``die volle Geschwindigkeit in eine Richtung darstellt, ``180``die volle Geschwindigkeit in die andere, und ein Wert von ``90`` einen Stillstand erzeugt.",
|
||||
"pins.servoWritePin|param|name": "Pin, auf den geschrieben werden soll",
|
||||
"pins.servoWritePin|param|value": "Winkel oder Rotationsbeschleunigung, z.B.: 180,90,0",
|
||||
"pins.setPull": "Stellt die Anziehungskraft des Pins ein.",
|
||||
"pins.setPull|param|name": "Pin, auf dem der Pull-Modus aktiviert wird",
|
||||
"pins.setPull|param|pull": "eine der mbed-Pull-Konfigurationen: PullUp, PullDown, PullNone ",
|
||||
"pins.sizeOf": "Ruft die Bytegröße im spezifierten Nummernformat ab.",
|
||||
"pins.spiWrite": "Schreibe in den SPI-Slave und gebe die Antwort aus",
|
||||
"pins.spiWrite|param|value": "Daten, die an den SPI-Slave geschickt werden sollen",
|
||||
"serial": "Lesen und Schreiben von Daten über eine serielle Verbindung.",
|
||||
"serial.delimiters": "Gibt die mit dem Begrenzer korrespondierende Zeichenfolge aus.",
|
||||
"serial.onLineReceived": "Registriert ein Event, das ausgeführt wird, wenn eine Zeile empfangen wurde",
|
||||
"serial.readLine": "Liest eine Textzeile aus der seriellen Schnittstelle.",
|
||||
"serial.readUntil": "Liest aus eine Textzeile aus dem seriellen Anschluss und gibt den Puffer aus, wenn die Begrenzung erreicht wurde.",
|
||||
"serial.readUntil|param|delimiter": "Text-Begrenzung, die die Textblöcke voneinander trennt",
|
||||
"serial.redirect": "Konfiguriert dynamisch die serielle Instanz, damit sie andere Pins als USBTX und USBRX benutzt.",
|
||||
"serial.redirect|param|rx": "der neue Empfangs-Pin",
|
||||
"serial.redirect|param|tx": "Der neue Übertragungs-Pin",
|
||||
"serial.writeLine": "Gibt eine Zeile des Textes an die serielle",
|
||||
"serial.writeNumber": " Gibt einen numerischen Wert an die serielle",
|
||||
"serial.writeNumber": "Gibt einen numerischen Wert an die serielle",
|
||||
"serial.writeString": "Sendet ein Stück Text über serielle Verbindung.",
|
||||
"serial.writeValue": "Schreibt ein ``Namen: Wert`` Wertepaar auf die serielle Schnittstelle.",
|
||||
"serial.writeValue|param|name": "Name des Wertestreams, z.B.: x",
|
||||
|
@ -1,75 +1,182 @@
|
||||
{
|
||||
"Math.randomBoolean|block": "Wähle zufälligen Wahr- oder Falsch-Wert",
|
||||
"AcceleratorRange.EightG": "Der Bewegungssensor misst Kräfte bis 8g",
|
||||
"AcceleratorRange.EightG|block": "8g",
|
||||
"AcceleratorRange.FourG": "Der Bewegungssensor misst Kräfte bis 4g",
|
||||
"AcceleratorRange.FourG|block": "4g",
|
||||
"AcceleratorRange.OneG": "Der Bewegungssensor misst Kräfte bis 1g",
|
||||
"AcceleratorRange.OneG|block": "1g",
|
||||
"AcceleratorRange.TwoG": "Der Bewegungssensor misst Kräfte bis 2g",
|
||||
"AcceleratorRange.TwoG|block": "2g",
|
||||
"BaudRate.BaudRate115200|block": "115200",
|
||||
"BaudRate.BaudRate9600|block": "9600",
|
||||
"BeatFraction.Eighth|block": "1/8",
|
||||
"BeatFraction.Half|block": "1/2",
|
||||
"BeatFraction.Quarter|block": "1/4",
|
||||
"BeatFraction.Sixteenth|block": "1/16",
|
||||
"BeatFraction.Whole|block": "1",
|
||||
"Button.AB|block": "A+B",
|
||||
"Colors.Blue|block": "Blau",
|
||||
"Colors.Green|block": "Grün",
|
||||
"Colors.Indigo|block": "Indigo",
|
||||
"Colors.Orange|block": "Orange",
|
||||
"Colors.Purple|block": "Violett",
|
||||
"Colors.Red|block": "Rot",
|
||||
"Colors.Violet|block": "Veilchenblau",
|
||||
"Colors.White|block": "Weiß",
|
||||
"Colors.Yellow|block": "Gelb",
|
||||
"Delimiters.Dollar|block": "$",
|
||||
"Delimiters.Hash|block": "#",
|
||||
"Delimiters.NewLine|block": "Neue Zeile",
|
||||
"Dimension.Strength|block": "Stärke",
|
||||
"Dimension.X|block": "x",
|
||||
"Dimension.Y|block": "y",
|
||||
"Dimension.Z|block": "z",
|
||||
"Direction.Left|block": "links",
|
||||
"Direction.Right|block": "rechts",
|
||||
"DisplayMode.BackAndWhite|block": "Schwarz-Weiß",
|
||||
"DisplayMode.Greyscale|block": "Graustufen",
|
||||
"EventCreationMode.CreateAndFire": "Calliope mini-Event wurde initialisiert, seine Event-Handler werden unverzüglich ausgeführt (nicht geeignet für die Nutzung bei Unterbrechungen!).",
|
||||
"EventCreationMode.CreateOnly": "Calliope mini-Event wurde initialisiert, es wird keine weitere Verarbeitung vorgenommen.",
|
||||
"Gesture.FreeFall": "Wird ausgeführt, wenn das Board fällt!",
|
||||
"Gesture.FreeFall|block": "freier Fall",
|
||||
"Gesture.LogoDown": "Wird ausgeführt, wenn das Logo nach unten zeigt und das Display vertikal ist.",
|
||||
"Gesture.LogoDown|block": "Logo nach unten",
|
||||
"Gesture.LogoUp": "Wird ausgeführt, wenn das Logo nach oben zeigt und das Display vertikal ist.",
|
||||
"Gesture.LogoUp|block": "Logo oben",
|
||||
"Gesture.ScreenDown": "Wird ausgeführt, wenn das Display nach oben zeigt und das Board horizontal ist.",
|
||||
"Gesture.ScreenDown|block": "Display nach unten",
|
||||
"Gesture.ScreenUp": "Wird ausgeführt, wenn das Display nach unten zeigt und das Board horizontal ist.",
|
||||
"Gesture.ScreenUp|block": "Display nach oben",
|
||||
"Gesture.Shake": "Wird erhöht, wenn geschüttelt",
|
||||
"Gesture.Shake|block": "geschüttelt",
|
||||
"Gesture.SixG": "Wird ausgeführt, ein 6g starker Stoß erkannt wird",
|
||||
"Gesture.SixG|block": "6g",
|
||||
"Gesture.ThreeG": "Wird ausgeführt, ein 3g starker Stoß erkannt wird",
|
||||
"Gesture.ThreeG|block": "3g",
|
||||
"Gesture.TiltLeft": "Wird ausgeführt, wenn das Display nach links zeigt",
|
||||
"Gesture.TiltLeft|block": "nach links neigen",
|
||||
"Gesture.TiltRight": "Wird ausgeführt, wenn das Display nach rechts zeigt",
|
||||
"Gesture.TiltRight|block": "nach rechts neigen",
|
||||
"LedSpriteProperty.Blink|block": "blinken",
|
||||
"LedSpriteProperty.Brightness|block": "Helligkeit",
|
||||
"LedSpriteProperty.Direction|block": "Richtung",
|
||||
"LedSpriteProperty.X|block": "x",
|
||||
"LedSpriteProperty.Y|block": "y",
|
||||
"Math.randomBoolean|block": "wähle zufälligen Wahr- oder Falsch-Wert",
|
||||
"Math|block": "Mathematik",
|
||||
"String.fromCharCode|block": "Text aus char code %code",
|
||||
"Motor.AB|block": "A und B",
|
||||
"MotorCommand.Break|block": "Pause",
|
||||
"MotorCommand.Coast|block": "auslaufen",
|
||||
"MotorCommand.Sleep|block": "schlafen",
|
||||
"Note.CSharp3|block": "C#3",
|
||||
"Note.CSharp4|block": "C#4",
|
||||
"Note.CSharp5|block": "C#5",
|
||||
"Note.CSharp|block": "C#",
|
||||
"Note.FSharp3|block": "F#3",
|
||||
"Note.FSharp4|block": "F#4",
|
||||
"Note.FSharp5|block": "F#5",
|
||||
"Note.FSharp|block": "F#",
|
||||
"Note.GSharp3|block": "G#3",
|
||||
"Note.GSharp4|block": "G#4",
|
||||
"Note.GSharp5|block": "G#5",
|
||||
"Note.GSharp|block": "G#",
|
||||
"PinPullMode.PullDown|block": "nach unten",
|
||||
"PinPullMode.PullUp|block": "nach oben",
|
||||
"Rotation.Pitch|block": "Winkel",
|
||||
"Rotation.Roll|block": "rollen",
|
||||
"String.charAt|block": "Zeichen an Position %pos aus|%this",
|
||||
"String.compare|block": "vergleiche %this| mit %that",
|
||||
"String.concat|block": "hänge %this| mit %other aneinander",
|
||||
"String.fromCharCode|block": "Text aus ASCII-Code %code",
|
||||
"String.isEmpty|block": "%this| ist leer",
|
||||
"String.length|block": "Länge von %VALUE",
|
||||
"String.substr|block": "extrahiere aus %this|beginnend mit %start|%length Zeichen",
|
||||
"String|block": "Zeichenfolge",
|
||||
"basic.clearScreen|block": "Bildschirminhalt löschen",
|
||||
"basic.color|block": "%c",
|
||||
"basic.forever|block": "dauerhaft",
|
||||
"basic.pause|block": "Pausiere (ms) %pause",
|
||||
"basic.showLeds|block": "Zeige LEDs",
|
||||
"basic.showNumber|block": "Zeige|Nummer %number",
|
||||
"basic.showString|block": "Zeige|Zeichenfolge %text",
|
||||
"basic.pause|block": "pausiere (ms) %pause",
|
||||
"basic.rgbw|block": "Rot %red|Grün %green|Blau %blue|Weiß %white",
|
||||
"basic.setLedColor|block": "setze LED-Farbe auf %color=color_id",
|
||||
"basic.showLeds|block": "zeige LEDs",
|
||||
"basic.showNumber|block": "zeige|Nummer %number",
|
||||
"basic.showString|block": "zeige|Zeichenfolge %text",
|
||||
"basic|block": "Grundlagen",
|
||||
"control.deviceName|block": "Gerätename",
|
||||
"control.deviceSerialNumber|block": "Seriennnummer",
|
||||
"control.eventSourceId|block": "%id",
|
||||
"control.eventTimestamp|block": "Ereigniszeitstempel",
|
||||
"control.eventValueId|block": "%id",
|
||||
"control.eventValue|block": "Ereigniswert",
|
||||
"control.inBackground|block": "im Hintergrund ausführen",
|
||||
"control.onEvent|block": "wenn Ereignis|von Quelle %src=control_event_source_id|mit Wert %value=control_event_value_id",
|
||||
"control.raiseEvent|block": "Ereignis auslösen|von Quelle %src=control_event_source_id|mit Wert %value=control_event_value_id",
|
||||
"control.reset|block": "zurücksetzen",
|
||||
"control.waitMicros|block": "Warte (µs)%micros",
|
||||
"control|block": "Steuerung",
|
||||
"game.addScore|block": "Ändere Spielstand um|%points",
|
||||
"game.createSprite|block": "erzeuge Sprite an Position|x: %x|y:%y",
|
||||
"game.gameOver|block": "Spiel beendet",
|
||||
"game.score|block": "Spielstand",
|
||||
"game.startCountdown|block": "Countdown| starten (ms) %duration",
|
||||
"game|block": "Spiel",
|
||||
"images.createBigImage|block": "erstelle großes Bild",
|
||||
"images.createImage|block": "Erstelle Bild",
|
||||
"images.createImage|block": "erstelle Bild",
|
||||
"images|block": "Bilder",
|
||||
"input.acceleration|block": "Beschleunigung (mg) |%NAME",
|
||||
"input.buttonIsPressed|block": "Button|%NAME|ist gedrückt",
|
||||
"input.compassHeading|block": "Kompassausrichtung (°)",
|
||||
"input.lightLevel|block": "Lichtstärke",
|
||||
"input.magneticForce|block": "Magnetkraft (µT) |%NAME",
|
||||
"input.onButtonPressed|block": "Wenn Button|%NAME|gedrückt",
|
||||
"input.onButtonPressed|block": "wenn Knopf|%NAME|gedrückt",
|
||||
"input.onGesture|block": "wenn |%NAME",
|
||||
"input.onPinPressed|block": "wenn pin %NAME|gedrückt",
|
||||
"input.onPinReleased|block": "Wenn pin %NAME|released",
|
||||
"input.pinIsPressed|block": "PIN %NAME|ist gedrückt",
|
||||
"input.onPinPressed|block": "wenn Pin %NAME|gedrückt",
|
||||
"input.onPinReleased|block": "wenn Pin %NAME|losgelassen",
|
||||
"input.pinIsPressed|block": "Pin %NAME|ist gedrückt",
|
||||
"input.rotation|block": "Rotation (°)|%NAME",
|
||||
"input.runningTime|block": "Laufzeit (ms)",
|
||||
"input.setAccelerometerRange|block": "Setze Bewegungsmesser|range %range",
|
||||
"input.setAccelerometerRange|block": "setze Bewegungsmesser auf|%range",
|
||||
"input.temperature|block": "Temperatur (°C)",
|
||||
"input|block": "Eingabe",
|
||||
"led.brightness|block": "Helligkeit",
|
||||
"led.plotBarGraph|block": "zeichne Balkendiagramm des %value|bis %high",
|
||||
"led.plotBarGraph|block": "zeichne Balkendiagramm von %value|bis %high",
|
||||
"led.plot|block": "Zeichne|x %x|y %y",
|
||||
"led.point|block": "Punkt|x %x|y %y",
|
||||
"led.setBrightness|block": "Setze Helligkeit auf %value",
|
||||
"led.stopAnimation|block": "Halte Animation an",
|
||||
"led.setBrightness|block": "setze Helligkeit auf %value",
|
||||
"led.stopAnimation|block": "halte Animation an",
|
||||
"led.toggle|block": "Schalte zwischen|x %x|y %y",
|
||||
"led.unplot|block": "Unplot|x %x|y %y",
|
||||
"led.unplot|block": "schalte Pixel|x %x|y %y aus",
|
||||
"led|block": "LED",
|
||||
"motors.dualMotorPower|block": "Motor %motor an|mit %percent",
|
||||
"motors.motorCommand|block": "Motor %command",
|
||||
"motors.motorPower|block": "Motor an mit %percent",
|
||||
"motors|block": "Motoren",
|
||||
"music.beat|block": "%fraction|Takt",
|
||||
"music.changeTempoBy|block": "ändere die Geschwindigkeit (bpm)|%value",
|
||||
"music.noteFrequency|block": "%note",
|
||||
"music.playTone|block": "play|tone %note=device_note|for %duration=device_beat",
|
||||
"music.rest|block": "rest(ms)|%duration=device_beat",
|
||||
"music.playTone|block": "spiele|Note %note=device_note|für %duration=device_beat",
|
||||
"music.rest|block": "pausiere (ms)|%duration=device_beat",
|
||||
"music.ringTone|block": "Klingelton (Hz) |%note = Device_note",
|
||||
"music.setTempo|block": "ändere Geschwindigkeit auf (bpm)|%value",
|
||||
"music.tempo|block": "Geschwindkeit (bpm)",
|
||||
"music|block": "Musik",
|
||||
"pins.analogReadPin|block": "analog read|pin %name",
|
||||
"pins.analogSetPeriod|block": "analog set period|pin %pin|to (µs)%micros",
|
||||
"pins.analogWritePin|block": "analog write|pin %name|to %value",
|
||||
"pins.digitalReadPin|block": "digital read|pin %name",
|
||||
"pins.digitalWritePin|block": "digital write|pin %name|to %value",
|
||||
"pins.i2cReadNumber|block": "i2c read number|at address %address|of format %format=i2c_sizeof",
|
||||
"pins.i2cWriteNumber|block": "i2c write number|at address %address|with value %value|of format %format=i2c_sizeof",
|
||||
"pins.map|block": "map %value|from low %fromLow|from high %fromHigh|to low %toLow|to high %toHigh",
|
||||
"pins.onPulsed|block": "on|pin %pin|pulsed %pulse",
|
||||
"pins.analogReadPin|block": "lese analoge Werte von|Pin %name",
|
||||
"pins.analogSetPeriod|block": "setze Zeitraum für analogen|Pin %pin|auf (µs)%micros",
|
||||
"pins.analogWritePin|block": "schreibe analogen|Pin %name|auf %value",
|
||||
"pins.digitalReadPin|block": "lese digitale Werte von|Pin %name",
|
||||
"pins.digitalWritePin|block": "schreibe digitalen Wert von|pin %name|auf %value",
|
||||
"pins.i2cReadNumber|block": "lese Nummer aus I2C|auf Adresse %address|im Format %format=i2c_sizeof",
|
||||
"pins.i2cWriteNumber|block": "schreibe Nummer aus I2C|auf Adresse %address|mit Wert %value|im Format %format=i2c_sizeof",
|
||||
"pins.map|block": "verteile %value|von niedrig %fromLow|von hoch %fromHigh| bis niedrig %toLow|bis hoch %toHigh",
|
||||
"pins.onPulsed|block": "wenn|Pin %pin|gepulst %pulse",
|
||||
"pins.pulseDuration|block": "Impulsdauer (µs)",
|
||||
"pins.servoSetPulse|block": "servo set pulse|pin %value|to (µs) %micros",
|
||||
"pins.servoWritePin|block": "servo write|pin %name|to %value",
|
||||
"pins.setPull|block": "set pull|pin %pin|to %pull",
|
||||
"pins.spiWrite|block": "spi write %value",
|
||||
"pins.pulseIn|block": "Impuls in (µs)|Pin %name|mit %value",
|
||||
"pins.servoSetPulse|block": "setze den Puls von Servo an|Pin %value|auf (µs) %micros",
|
||||
"pins.servoWritePin|block": "schreibe Servo an|Pin %name|auf %value",
|
||||
"pins.setPull|block": "setze Anziehungskraft von|Pin %pin|auf %pull",
|
||||
"pins.spiWrite|block": "schreibe %value in SPI",
|
||||
"pins|block": "Pins",
|
||||
"serial.delimiters|block": "%del",
|
||||
"serial.readLine|block": "serial|read line",
|
||||
"serial.readUntil|block": "serial|read until %delimiter=serial_delimiter_conv",
|
||||
"serial.redirect|block": "serial|redirect to|TX %tx|RX %rx|at baud rate %rate",
|
||||
@ -77,7 +184,7 @@
|
||||
"serial.writeNumber|block": "serial|write number %value",
|
||||
"serial.writeString|block": "serial|write string %text",
|
||||
"serial.writeValue|block": "serial|write value %name|= %value",
|
||||
"serial|block": "seriell",
|
||||
"serial|block": "Konsole",
|
||||
"{id:category}Basic": "Grundlagen",
|
||||
"{id:category}Control": "Steuerung",
|
||||
"{id:category}Game": "Spiel",
|
||||
@ -85,7 +192,10 @@
|
||||
"{id:category}Input": "Eingabe",
|
||||
"{id:category}Led": "LED",
|
||||
"{id:category}Math": "Mathematik",
|
||||
"{id:category}Motors": "Motoren",
|
||||
"{id:category}Music": "Musik",
|
||||
"{id:category}Pins": "Pins",
|
||||
"{id:category}Serial": "Serielle"
|
||||
"{id:category}Serial": "Konsole",
|
||||
"{id:category}String": "Zeichenfolge",
|
||||
"{id:category}Text": "Text"
|
||||
}
|
@ -1,31 +1,6 @@
|
||||
{
|
||||
"Math.abs": "",
|
||||
"Math.abs|param|x": "",
|
||||
"Math.max": "",
|
||||
"Math.min": "",
|
||||
"Math.pow": "",
|
||||
"Math.pow|param|x": "",
|
||||
"Math.pow|param|y": "",
|
||||
"Math.random": "",
|
||||
"Math.randomBoolean": "Génère une valeur « true » ou « false » au hasard, comme si vous lanciez une pièce de monnaie.",
|
||||
"Math.sign": "",
|
||||
"Math.sign|param|x": "",
|
||||
"Math.sqrt": "",
|
||||
"Math.sqrt|param|x": "",
|
||||
"String.charAt": "",
|
||||
"String.charAt|param|index": "",
|
||||
"String.charCodeAt": "",
|
||||
"String.charCodeAt|param|index": "",
|
||||
"String.compare": "",
|
||||
"String.compare|param|that": "",
|
||||
"String.concat": "",
|
||||
"String.concat|param|other": "",
|
||||
"String.fromCharCode": "Construit une chaîne à partir du code ASCII d'un caractère donné.",
|
||||
"String.isEmpty": "",
|
||||
"String.length": "",
|
||||
"String.substr": "",
|
||||
"String.substr|param|length": "",
|
||||
"String.substr|param|start": "",
|
||||
"basic": "Permet d’accéder aux fonctionnalités de base de la micro:bit.",
|
||||
"basic.clearScreen": "Éteindre toutes les LEDs",
|
||||
"basic.forever": "Répète le code indéfiniment en tâche de fond. A chaque itération, permet aux autres codes de s’exécuter.",
|
||||
@ -44,200 +19,63 @@
|
||||
"basic.showString": "Afficher du texte à l’écran, un caractère à la fois. Si la chaîne rentre sur l’écran (c'est-à-dire une seule lettre), ne défile pas.",
|
||||
"basic.showString|param|interval": "à quelle vitesse se déplacent les caractères ; par ex. : 150, 100, 200, -100",
|
||||
"basic.showString|param|text": "le texte à faire défiler sur l’écran, par exemple : « Bonjour ! »",
|
||||
"control": "",
|
||||
"control.assert": "",
|
||||
"control.deviceName": "",
|
||||
"control.deviceSerialNumber": "",
|
||||
"control.eventSourceId": "",
|
||||
"control.eventTimestamp": "",
|
||||
"control.eventValue": "",
|
||||
"control.eventValueId": "",
|
||||
"control.inBackground": "Planifie le code qui s’exécute en arrière-plan.",
|
||||
"control.onEvent": "",
|
||||
"control.panic": "",
|
||||
"control.raiseEvent": "",
|
||||
"control.raiseEvent|param|mode": "",
|
||||
"control.raiseEvent|param|src": "",
|
||||
"control.raiseEvent|param|value": "",
|
||||
"control.reset": "Réinitialise le micro:bit de BBC.",
|
||||
"control.runtimeWarning": "",
|
||||
"control.waitMicros": "",
|
||||
"control.waitMicros|param|micros": "nombre de microsecondes à attendre. par ex. : 4",
|
||||
"game": "Un moteur de jeu avec une unique LED",
|
||||
"game.addLife": "",
|
||||
"game.addLife|param|lives": "",
|
||||
"game.addLife|param|lives": "TODO",
|
||||
"game.addScore": "Ajoute des points au score actuel",
|
||||
"game.addScore|param|points": "nombre de points à changer, par ex. : 1",
|
||||
"game.createSprite": "",
|
||||
"game.createSprite|param|x": "",
|
||||
"game.createSprite|param|y": "",
|
||||
"game.currentTime": "",
|
||||
"game.gameOver": "Affiche un animation de fin de jeu.",
|
||||
"game.invalidSprite": "",
|
||||
"game.isGameOver": "",
|
||||
"game.isRunning": "",
|
||||
"game.level": "",
|
||||
"game.levelUp": "",
|
||||
"game.life": "",
|
||||
"game.removeLife": "",
|
||||
"game.removeLife|param|life": "",
|
||||
"game.removeLife|param|life": "TODO",
|
||||
"game.score": "Obtient le score actuel",
|
||||
"game.setLife": "",
|
||||
"game.setLife|param|value": "",
|
||||
"game.setLife|param|value": "TODO",
|
||||
"game.setScore": "Définit la valeur du score actuel",
|
||||
"game.setScore|param|value": "",
|
||||
"game.showScore": "",
|
||||
"game.startCountdown": "",
|
||||
"game.startCountdown|param|ms": "",
|
||||
"game.startStopwatch": "",
|
||||
"images": "",
|
||||
"images.createBigImage": "",
|
||||
"images.createImage": "",
|
||||
"input": "",
|
||||
"input.acceleration": "",
|
||||
"input.acceleration|param|dimension": "",
|
||||
"input.buttonIsPressed": "",
|
||||
"input.calibrate": "",
|
||||
"input.compassHeading": "",
|
||||
"input.lightLevel": "",
|
||||
"input.magneticForce": "",
|
||||
"input.magneticForce|param|dimension": "",
|
||||
"input.onButtonPressed": "",
|
||||
"input.onButtonPressed|param|body": "",
|
||||
"input.onButtonPressed|param|button": "",
|
||||
"input.onGesture": "",
|
||||
"input.onGesture|param|body": "",
|
||||
"input.onLogoDown": "",
|
||||
"input.onLogoDown|param|body": "",
|
||||
"input.onLogoUp": "",
|
||||
"input.onLogoUp|param|body": "",
|
||||
"input.onPinPressed": "",
|
||||
"input.onPinPressed|param|body": "",
|
||||
"input.onPinPressed|param|name": "",
|
||||
"input.onPinReleased": "",
|
||||
"input.onPinReleased|param|body": "",
|
||||
"input.onPinReleased|param|name": "",
|
||||
"input.onScreenDown": "",
|
||||
"input.onScreenDown|param|body": "",
|
||||
"input.onScreenUp": "",
|
||||
"input.onScreenUp|param|body": "",
|
||||
"input.onShake": "",
|
||||
"input.onShake|param|body": "",
|
||||
"input.pinIsPressed": "",
|
||||
"input.pinIsPressed|param|name": "",
|
||||
"input.rotation": "",
|
||||
"input.rotation|param|kind": "",
|
||||
"input.runningTime": "",
|
||||
"input.setAccelerometerRange": "",
|
||||
"input.setAccelerometerRange|param|range": "",
|
||||
"input.temperature": "",
|
||||
"led": "",
|
||||
"led.brightness": "",
|
||||
"led.enable": "",
|
||||
"led.fadeIn": "",
|
||||
"led.fadeIn|param|ms": "",
|
||||
"led.fadeOut": "",
|
||||
"led.fadeOut|param|ms": "",
|
||||
"led.plot": "",
|
||||
"led.plotAll": "",
|
||||
"led.plotBarGraph": "",
|
||||
"led.plotBarGraph|param|high": "",
|
||||
"led.plotBarGraph|param|value": "",
|
||||
"led.plot|param|x": "",
|
||||
"led.plot|param|y": "",
|
||||
"led.point": "",
|
||||
"led.point|param|x": "",
|
||||
"led.point|param|y": "",
|
||||
"led.screenshot": "",
|
||||
"led.setBrightness": "",
|
||||
"led.setBrightness|param|value": "",
|
||||
"led.setDisplayMode": "",
|
||||
"led.setDisplayMode|param|mode": "",
|
||||
"led.stopAnimation": "",
|
||||
"led.toggle": "",
|
||||
"led.toggleAll": "",
|
||||
"led.toggle|param|x": "",
|
||||
"led.toggle|param|y": "",
|
||||
"led.unplot": "",
|
||||
"led.unplot|param|x": "",
|
||||
"led.unplot|param|y": "",
|
||||
"music": "",
|
||||
"music.beat": "",
|
||||
"music.changeTempoBy": "",
|
||||
"music.changeTempoBy|param|bpm": "",
|
||||
"music.noteFrequency": "",
|
||||
"music.noteFrequency|param|name": "",
|
||||
"music.playTone": "",
|
||||
"music.playTone|param|frequency": "",
|
||||
"music.playTone|param|ms": "",
|
||||
"game.setScore|param|value": "TODO",
|
||||
"game.startCountdown": "Démarre un compte à rebours de jeu",
|
||||
"game.startCountdown|param|ms": "durée du compte à rebours en millisecondes, par ex. : 10000",
|
||||
"images": "Création, manipulation et affichage d’images LED.",
|
||||
"images.createBigImage": "Crée une image à partir de 2 images.",
|
||||
"images.createImage": "Crée une image qui s’adapte aux dimensions de l’écran LED.",
|
||||
"input": "Événements et des données provenant de capteurs",
|
||||
"input.acceleration|param|dimension": "TODO",
|
||||
"input.calibrate": "Obsolète, le calibrage de la boussole est automatique.",
|
||||
"input.compassHeading": "Obtient la direction actuelle du compas en degrés.",
|
||||
"input.magneticForce|param|dimension": "TODO",
|
||||
"input.onButtonPressed|param|body": "TODO",
|
||||
"input.onButtonPressed|param|button": "TODO",
|
||||
"input.onGesture|param|body": "TODO",
|
||||
"input.onLogoDown|param|body": "TODO",
|
||||
"input.onLogoUp|param|body": "TODO",
|
||||
"input.onPinPressed": "Faire quelque chose lorsque vous appuyez sur une broche.",
|
||||
"input.onPinPressed|param|body": "code à exécuter lorsque la broche est enfoncée",
|
||||
"input.onPinPressed|param|name": "la broche qui doit être pressée",
|
||||
"input.onPinReleased": "Faire quelque chose quand une broche est relâchée.",
|
||||
"input.onPinReleased|param|body": "le code à exécuter lorsque la broche est relâchée",
|
||||
"input.onPinReleased|param|name": "la broche qui doit être relâchée",
|
||||
"input.onScreenDown|param|body": "TODO",
|
||||
"input.onScreenUp|param|body": "TODO",
|
||||
"input.onShake|param|body": "TODO",
|
||||
"input.pinIsPressed|param|name": "broche utilisée pour détecter le contact",
|
||||
"input.rotation|param|kind": "TODO",
|
||||
"input.temperature": "Obtient la température en degrés Celsius (°C).",
|
||||
"led": "Contrôle de l’écran LED.",
|
||||
"led.enable": "Active ou désactive l’affichage",
|
||||
"led.fadeIn|param|ms": "TODO",
|
||||
"led.fadeOut|param|ms": "TODO",
|
||||
"led.plotAll": "Allume toutes les LEDS",
|
||||
"led.plotBarGraph|param|value": "valeur actuelle à tracer",
|
||||
"led.plot|param|x": "TODO",
|
||||
"led.plot|param|y": "TODO",
|
||||
"led.point|param|x": "TODO",
|
||||
"led.point|param|y": "TODO",
|
||||
"led.setBrightness|param|value": "valeur de la luminosité, par ex. : 255, 127, 0",
|
||||
"led.toggle|param|x": "TODO",
|
||||
"led.toggle|param|y": "TODO",
|
||||
"led.unplot|param|x": "TODO",
|
||||
"led.unplot|param|y": "TODO",
|
||||
"music.rest": "Repose (joue rien) pendant une durée spécifiée via broche '' P0''.",
|
||||
"music.rest|param|ms": "",
|
||||
"music.ringTone": "",
|
||||
"music.ringTone|param|frequency": "",
|
||||
"music.setTempo": "",
|
||||
"music.setTempo|param|bpm": "",
|
||||
"music.tempo": "",
|
||||
"pins": "",
|
||||
"pins.analogPitch": "",
|
||||
"pins.analogPitch|param|frequency": "",
|
||||
"pins.analogPitch|param|ms": "",
|
||||
"pins.analogReadPin": "",
|
||||
"pins.analogReadPin|param|name": "",
|
||||
"pins.analogSetPeriod": "",
|
||||
"pins.analogSetPeriod|param|micros": "",
|
||||
"pins.analogSetPeriod|param|name": "",
|
||||
"pins.analogSetPitchPin": "",
|
||||
"pins.analogSetPitchPin|param|name": "",
|
||||
"pins.analogWritePin": "",
|
||||
"pins.analogWritePin|param|name": "",
|
||||
"pins.analogWritePin|param|value": "",
|
||||
"pins.createBuffer": "",
|
||||
"pins.createBuffer|param|size": "",
|
||||
"pins.digitalReadPin": "",
|
||||
"pins.digitalReadPin|param|name": "",
|
||||
"pins.digitalWritePin": "",
|
||||
"pins.digitalWritePin|param|name": "",
|
||||
"pins.digitalWritePin|param|value": "",
|
||||
"pins.i2cReadNumber": "",
|
||||
"pins.i2cReadBuffer": "",
|
||||
"pins.i2cWriteBuffer": "",
|
||||
"pins.i2cWriteNumber": "",
|
||||
"pins.map": "",
|
||||
"pins.map|param|fromHigh": "",
|
||||
"pins.map|param|fromLow": "",
|
||||
"pins.map|param|toHigh": "",
|
||||
"pins.map|param|toLow": "",
|
||||
"pins.map|param|value": "",
|
||||
"pins.onPulsed": "",
|
||||
"pins.pulseDuration": "",
|
||||
"pins.pulseIn": "",
|
||||
"pins.pulseIn|param|name": "",
|
||||
"pins.pulseIn|param|value": "",
|
||||
"pins.servoSetPulse": "",
|
||||
"pins.servoSetPulse|param|micros": "",
|
||||
"pins.servoSetPulse|param|name": "",
|
||||
"pins.servoWritePin": "",
|
||||
"pins.servoWritePin|param|name": "",
|
||||
"pins.servoWritePin|param|value": "",
|
||||
"pins.setPull": "",
|
||||
"pins.setPull|param|name": "",
|
||||
"pins.setPull|param|pull": "",
|
||||
"pins.spiWrite": "",
|
||||
"pins.spiWrite|param|value": "",
|
||||
"serial": "",
|
||||
"pins.sizeOf": "",
|
||||
"serial.delimiters": "",
|
||||
"serial.onLineReceived": "",
|
||||
"serial.readLine": "",
|
||||
"serial.readUntil": "",
|
||||
"serial.readUntil|param|delimiter": "",
|
||||
"serial.redirect": "",
|
||||
"serial.redirect|param|rx": "",
|
||||
"serial.redirect|param|tx": "",
|
||||
"serial.writeLine": "",
|
||||
"serial.writeNumber": "",
|
||||
"serial.writeString": "",
|
||||
"serial.writeValue": "",
|
||||
"serial.writeValue|param|name": "",
|
||||
"serial.writeValue|param|value": ""
|
||||
"pins.analogPitch|param|frequency": "TODO",
|
||||
"pins.analogPitch|param|ms": "TODO",
|
||||
"pins.analogSetPitchPin|param|name": "TODO"
|
||||
}
|
@ -1,46 +1,21 @@
|
||||
{
|
||||
"LedSpriteProperty.Brightness|block": "luminosité",
|
||||
"Math.randomBoolean|block": "choisir au hasard vrai ou faux",
|
||||
"Math|block": "Maths",
|
||||
<<<<<<< HEAD
|
||||
"String.fromCharCode|block": "texte du code de charactère %code",
|
||||
=======
|
||||
"String.charAt|block": "",
|
||||
"String.compare|block": "",
|
||||
"String.concat|block": "",
|
||||
"String.fromCharCode|block": "texte du code de charactère %code",
|
||||
"String.isEmpty|block": "",
|
||||
"String.length|block": "",
|
||||
"String.substr|block": "",
|
||||
>>>>>>> microbit/master
|
||||
"String|block": "Texte",
|
||||
"basic.clearScreen|block": "effacer l’écran",
|
||||
"basic.forever|block": "toujours",
|
||||
"basic.pause|block": "pause (ms) %pause",
|
||||
"basic.showLeds|block": "montrer LEDs",
|
||||
"basic.showNumber|block": "montrer|nombre %number",
|
||||
"basic.showString|block": "montrer|texte %text",
|
||||
"basic.showString|block": "afficher|texte %text",
|
||||
"basic|block": "base",
|
||||
<<<<<<< HEAD
|
||||
"control.inBackground|block": "exécuter en arrière-plan",
|
||||
=======
|
||||
"control.deviceName|block": "",
|
||||
"control.deviceSerialNumber|block": "",
|
||||
"control.eventSourceId|block": "",
|
||||
"control.eventTimestamp|block": "",
|
||||
"control.eventValueId|block": "",
|
||||
"control.eventValue|block": "",
|
||||
"control.inBackground|block": "exécuter en arrière-plan",
|
||||
"control.onEvent|block": "",
|
||||
"control.raiseEvent|block": "",
|
||||
>>>>>>> microbit/master
|
||||
"control.reset|block": "remise à zéro",
|
||||
"control.waitMicros|block": "attendre (µs) %micros",
|
||||
"control|block": "contrôle",
|
||||
"game.addScore|block": "changer le score par|%points",
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
"game.createSprite|block": "",
|
||||
>>>>>>> microbit/master
|
||||
"game.gameOver|block": "fin du jeu",
|
||||
"game.score|block": "score",
|
||||
"game.startCountdown|block": "commencer compte à rebours|(ms) %duration",
|
||||
@ -82,32 +57,15 @@
|
||||
"music.tempo|block": "tempo (bpm)",
|
||||
"music|block": "musique",
|
||||
"pins.analogReadPin|block": "lire|la broche analogique %name",
|
||||
"pins.analogSetPeriod|block": "",
|
||||
"pins.analogWritePin|block": "",
|
||||
"pins.digitalReadPin|block": "lire en numérique|broche %name",
|
||||
<<<<<<< HEAD
|
||||
"pins.digitalWritePin|block": "écrire en numérique|la broche %name|%value",
|
||||
=======
|
||||
"pins.digitalWritePin|block": "écrire en numérique|la broche %name|à %value",
|
||||
>>>>>>> microbit/master
|
||||
"pins.i2cReadNumber|block": "i2c lire nombre|à l’adresse %address|de format %format=i2c_sizeof",
|
||||
"pins.i2cWriteNumber|block": "i2c écrire nombre|à l’adresse %address|avec value %value|de format %format=i2c_sizeof",
|
||||
"pins.map|block": "",
|
||||
"pins.onPulsed|block": "lorsque|la broche %pin|est pulsée %pulse",
|
||||
"pins.pulseDuration|block": "durée de l’impulsion (µs)",
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
"pins.pulseIn|block": "",
|
||||
>>>>>>> microbit/master
|
||||
"pins.servoSetPulse|block": "",
|
||||
"pins.servoWritePin|block": "servo écrire|broche %name|à %value",
|
||||
"pins.setPull|block": "",
|
||||
"pins.spiWrite|block": "spi écrire %value",
|
||||
"pins|block": "broches",
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
"serial.delimiters|block": "",
|
||||
>>>>>>> microbit/master
|
||||
"serial.readLine|block": "série|lire ligne",
|
||||
"serial.readUntil|block": "série|lire jusque %delimiter=serial_delimiter_conv",
|
||||
"serial.redirect|block": "série|rediriger vers|TX %tx|RX %rx|au débit en baudes %rate",
|
||||
@ -125,11 +83,6 @@
|
||||
"{id:category}Math": "Maths",
|
||||
"{id:category}Music": "Musique",
|
||||
"{id:category}Pins": "Broches",
|
||||
<<<<<<< HEAD
|
||||
"{id:category}Serial": "Communication Série"
|
||||
=======
|
||||
"{id:category}Serial": "Communication Série",
|
||||
"{id:category}String": "Texte",
|
||||
"{id:category}Text": ""
|
||||
>>>>>>> microbit/master
|
||||
"{id:category}String": "Texte"
|
||||
}
|
5
libs/core/_locales/sv-SE/core-jsdoc-strings.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"Math.abs": "Returnerar absolutbeloppet av ett tal (värdet utan hänsyn till huruvida det är positivt eller negativt). \nTill exempel är absolutbeloppet av -5 detsamma som absolutbeloppet av 5.",
|
||||
"Math.max": "Returnerar det större av två givna numeriska uttryck.",
|
||||
"Math.min": "Returnerar det mindre av två givna numeriska uttryck."
|
||||
}
|
@ -1,15 +1,15 @@
|
||||
#include "ksbit.h"
|
||||
#include "pxt.h"
|
||||
|
||||
|
||||
/**
|
||||
* Provides access to basic micro:bit functionality.
|
||||
*/
|
||||
//% color=#54C9C9 weight=100
|
||||
//% color=#54C9C9 weight=100 icon="\uf00a"
|
||||
namespace basic {
|
||||
/**
|
||||
* Sets the color on the build-in LED. Set to 0 to turn off.
|
||||
*/
|
||||
//% blockId=device_set_led_color block="set led to %color=color_id" icon="\uf00a"
|
||||
//% blockId=device_set_led_color block="set led to %color=color_id"
|
||||
//% weight=50
|
||||
void setLedColor(int color) {
|
||||
if (!color) {
|
||||
@ -31,7 +31,7 @@ namespace basic {
|
||||
*/
|
||||
//% help=basic/show-number
|
||||
//% weight=96
|
||||
//% blockId=device_show_number block="show|number %number" blockGap=8 icon="\uf1ec"
|
||||
//% blockId=device_show_number block="show|number %number" blockGap=8
|
||||
//% async
|
||||
//% parts="ledmatrix"
|
||||
void showNumber(int value, int interval = 150) {
|
||||
@ -55,7 +55,7 @@ namespace basic {
|
||||
//% weight=95 blockGap=8
|
||||
//% imageLiteral=1 async
|
||||
//% blockId=device_show_leds
|
||||
//% block="show leds" icon="\uf00a"
|
||||
//% block="show leds"
|
||||
//% parts="ledmatrix"
|
||||
void showLeds(ImageLiteral leds, int interval = 400) {
|
||||
uBit.display.print(MicroBitImage(imageBytes(leds)), 0, 0, 0, interval);
|
||||
@ -68,7 +68,7 @@ namespace basic {
|
||||
*/
|
||||
//% help=basic/show-string
|
||||
//% weight=87 blockGap=8
|
||||
//% block="show|string %text" icon="\uf031"
|
||||
//% block="show|string %text"
|
||||
//% async
|
||||
//% blockId=device_print_message
|
||||
//% parts="ledmatrix"
|
||||
@ -91,7 +91,7 @@ namespace basic {
|
||||
* Turn off all LEDs
|
||||
*/
|
||||
//% help=basic/clear-screen weight=79
|
||||
//% blockId=device_clear_display block="clear screen" icon="\uf12d"
|
||||
//% blockId=device_clear_display block="clear screen"
|
||||
//% parts="ledmatrix"
|
||||
void clearScreen() {
|
||||
uBit.display.image.clear();
|
||||
@ -131,7 +131,7 @@ namespace basic {
|
||||
* @param body code to execute
|
||||
*/
|
||||
//% help=basic/forever weight=55 blockGap=8
|
||||
//% blockId=device_forever block="forever" icon="\uf01e"
|
||||
//% blockId=device_forever block="forever"
|
||||
void forever(Action a) {
|
||||
if (a != 0) {
|
||||
incr(a);
|
||||
@ -145,7 +145,7 @@ namespace basic {
|
||||
*/
|
||||
//% help=basic/pause weight=54
|
||||
//% async block="pause (ms) %pause"
|
||||
//% blockId=device_pause icon="\uf110"
|
||||
//% blockId=device_pause
|
||||
void pause(int ms) {
|
||||
fiber_sleep(ms);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "ksbit.h"
|
||||
#include "pxt.h"
|
||||
|
||||
// keep in sync with github/pxt/pxtsim/libgeneric.ts
|
||||
enum class NumberFormat {
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "ksbit.h"
|
||||
#include "pxt.h"
|
||||
|
||||
/**
|
||||
* How to create the event.
|
||||
@ -34,17 +34,18 @@ enum EventBusSource {
|
||||
MICROBIT_ID_IO_P5_ = MICROBIT_ID_IO_P5,
|
||||
MICROBIT_ID_IO_P6_ = MICROBIT_ID_IO_P6,
|
||||
MICROBIT_ID_IO_P7_ = MICROBIT_ID_IO_P7,
|
||||
//MICROBIT_ID_IO_P8_ = MICROBIT_ID_IO_P8,
|
||||
MICROBIT_ID_IO_P8_ = MICROBIT_ID_IO_P8,
|
||||
MICROBIT_ID_IO_P9_ = MICROBIT_ID_IO_P9,
|
||||
MICROBIT_ID_IO_P10_ = MICROBIT_ID_IO_P10,
|
||||
MICROBIT_ID_IO_P11_ = MICROBIT_ID_IO_P11,
|
||||
//MICROBIT_ID_IO_P12_ = MICROBIT_ID_IO_P12,
|
||||
//MICROBIT_ID_IO_P13_ = MICROBIT_ID_IO_P13,
|
||||
//MICROBIT_ID_IO_P14_ = MICROBIT_ID_IO_P14,
|
||||
//MICROBIT_ID_IO_P15_ = MICROBIT_ID_IO_P15,
|
||||
//MICROBIT_ID_IO_P16_ = MICROBIT_ID_IO_P16,
|
||||
MICROBIT_ID_IO_P12_ = MICROBIT_ID_IO_P12,
|
||||
MICROBIT_ID_IO_P13_ = MICROBIT_ID_IO_P13,
|
||||
MICROBIT_ID_IO_P14_ = MICROBIT_ID_IO_P14,
|
||||
MICROBIT_ID_IO_P15_ = MICROBIT_ID_IO_P15,
|
||||
MICROBIT_ID_IO_P16_ = MICROBIT_ID_IO_P16,
|
||||
MICROBIT_ID_IO_P19_ = MICROBIT_ID_IO_P19,
|
||||
MICROBIT_ID_IO_P20_ = MICROBIT_ID_IO_P20,
|
||||
MICROBIT_ID_IO_P21_ = MICROBIT_ID_IO_P21,
|
||||
MES_DEVICE_INFO_ID_ = MES_DEVICE_INFO_ID,
|
||||
MES_SIGNAL_STRENGTH_ID_ = MES_SIGNAL_STRENGTH_ID,
|
||||
MES_DPAD_CONTROLLER_ID_ = MES_DPAD_CONTROLLER_ID,
|
||||
@ -56,6 +57,10 @@ enum EventBusValue {
|
||||
MICROBIT_BUTTON_EVT_CLICK_ = MICROBIT_BUTTON_EVT_CLICK,
|
||||
MICROBIT_RADIO_EVT_DATAGRAM_ = MICROBIT_RADIO_EVT_DATAGRAM,
|
||||
MICROBIT_ACCELEROMETER_EVT_DATA_UPDATE_ = MICROBIT_ACCELEROMETER_EVT_DATA_UPDATE,
|
||||
MICROBIT_PIN_EVT_RISE_ = MICROBIT_PIN_EVT_RISE,
|
||||
MICROBIT_PIN_EVT_FALL_ = MICROBIT_PIN_EVT_FALL,
|
||||
MICROBIT_PIN_EVT_PULSE_HI_ = MICROBIT_PIN_EVT_PULSE_HI,
|
||||
MICROBIT_PIN_EVT_PULSE_LO_ = MICROBIT_PIN_EVT_PULSE_LO,
|
||||
MES_ALERT_EVT_ALARM1_ = MES_ALERT_EVT_ALARM1,
|
||||
MES_ALERT_EVT_ALARM2_ = MES_ALERT_EVT_ALARM2,
|
||||
MES_ALERT_EVT_ALARM3_ = MES_ALERT_EVT_ALARM3,
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Runtime and event utilities.
|
||||
*/
|
||||
//% weight=1 color="#42495F"
|
||||
//% weight=1 color="#42495F" icon="\uf233"
|
||||
//% advanced=true
|
||||
namespace control {
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "ksbit.h"
|
||||
#include "pxt.h"
|
||||
#include <limits.h>
|
||||
|
||||
|
||||
@ -21,7 +21,12 @@ namespace String_ {
|
||||
|
||||
//%
|
||||
int compare(StringData *s, StringData *that) {
|
||||
return strcmp(s->data, that->data);
|
||||
int compareResult = strcmp(s->data, that->data);
|
||||
if (compareResult < 0)
|
||||
return -1;
|
||||
else if (compareResult > 0)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//%
|
||||
@ -76,7 +81,7 @@ namespace Boolean_ {
|
||||
}
|
||||
|
||||
//%
|
||||
bool bang(bool v) { return !v; }
|
||||
bool bang(int v) { return v == 0; }
|
||||
}
|
||||
|
||||
namespace Number_ {
|
||||
@ -153,13 +158,19 @@ namespace Array_ {
|
||||
//%
|
||||
int length(RefCollection *c) { return c->length(); }
|
||||
//%
|
||||
void setLength(RefCollection *c, int newLength) { c->setLength(newLength); }
|
||||
//%
|
||||
void push(RefCollection *c, uint32_t x) { c->push(x); }
|
||||
//%
|
||||
uint32_t pop(RefCollection *c) { return c->pop(); }
|
||||
//%
|
||||
uint32_t getAt(RefCollection *c, int x) { return c->getAt(x); }
|
||||
//%
|
||||
void removeAt(RefCollection *c, int x) { c->removeAt(x); }
|
||||
void setAt(RefCollection *c, int x, uint32_t y) { c->setAt(x, y); }
|
||||
//%
|
||||
void setAt(RefCollection *c, int x, uint32_t y) { c->setAt(x, y); }
|
||||
uint32_t removeAt(RefCollection *c, int x) { return c->removeAt(x); }
|
||||
//%
|
||||
void insertAt(RefCollection *c, int x, uint32_t value) { c->insertAt(x, value); }
|
||||
//%
|
||||
int indexOf(RefCollection *c, uint32_t x, int start) { return c->indexOf(x, start); }
|
||||
//%
|
||||
|
50
libs/core/dal.d.ts
vendored
@ -79,12 +79,15 @@ declare const enum DAL {
|
||||
MICROBIT_BLE_PAIRING_TIMEOUT = 90,
|
||||
MICROBIT_BLE_POWER_LEVELS = 8,
|
||||
MICROBIT_BLE_MAXIMUM_BONDS = 4,
|
||||
MICROBIT_BLE_EDDYSTONE_URL_ADV_INTERVAL = 400,
|
||||
MICROBIT_BLE_EDDYSTONE_ADV_INTERVAL = 400,
|
||||
MICROBIT_BLE_EDDYSTONE_DEFAULT_POWER = 0xF0,
|
||||
MICROBIT_BLE_DISCONNECT_AFTER_PAIRING_DELAY = 500,
|
||||
// built/yt/yotta_modules/microbit-dal/inc/bluetooth/MicroBitButtonService.h
|
||||
// built/yt/yotta_modules/microbit-dal/inc/bluetooth/MicroBitDFUService.h
|
||||
MICROBIT_DFU_OPCODE_START_DFU = 1,
|
||||
MICROBIT_DFU_HISTOGRAM_WIDTH = 5,
|
||||
MICROBIT_DFU_HISTOGRAM_HEIGHT = 5,
|
||||
// built/yt/yotta_modules/microbit-dal/inc/bluetooth/MicroBitEddystone.h
|
||||
// built/yt/yotta_modules/microbit-dal/inc/bluetooth/MicroBitEventService.h
|
||||
// built/yt/yotta_modules/microbit-dal/inc/bluetooth/MicroBitIOPinService.h
|
||||
MICROBIT_IO_PIN_SERVICE_PINCOUNT = 19,
|
||||
@ -124,7 +127,6 @@ declare const enum DAL {
|
||||
MICROBIT_ID_ACCELEROMETER = 4,
|
||||
MICROBIT_ID_COMPASS = 5,
|
||||
MICROBIT_ID_DISPLAY = 6,
|
||||
MICROBIT_IO_PINS = 20,
|
||||
MICROBIT_ID_IO_P0 = 7,
|
||||
MICROBIT_ID_IO_P1 = 8,
|
||||
MICROBIT_ID_IO_P2 = 9,
|
||||
@ -133,11 +135,18 @@ declare const enum DAL {
|
||||
MICROBIT_ID_IO_P5 = 12,
|
||||
MICROBIT_ID_IO_P6 = 13,
|
||||
MICROBIT_ID_IO_P7 = 14,
|
||||
MICROBIT_ID_IO_P8 = 15,
|
||||
MICROBIT_ID_IO_P9 = 16,
|
||||
MICROBIT_ID_IO_P10 = 17,
|
||||
MICROBIT_ID_IO_P11 = 18,
|
||||
MICROBIT_ID_IO_P12 = 19,
|
||||
MICROBIT_ID_IO_P13 = 20,
|
||||
MICROBIT_ID_IO_P14 = 21,
|
||||
MICROBIT_ID_IO_P15 = 22,
|
||||
MICROBIT_ID_IO_P16 = 23,
|
||||
MICROBIT_ID_IO_P19 = 24,
|
||||
MICROBIT_ID_IO_P20 = 25,
|
||||
MICROBIT_ID_IO_P21 = 50,
|
||||
MICROBIT_ID_BUTTON_AB = 26,
|
||||
MICROBIT_ID_GESTURE = 27,
|
||||
MICROBIT_ID_THERMOMETER = 28,
|
||||
@ -145,17 +154,6 @@ declare const enum DAL {
|
||||
MICROBIT_ID_RADIO_DATA_READY = 30,
|
||||
MICROBIT_ID_MULTIBUTTON_ATTACH = 31,
|
||||
MICROBIT_ID_SERIAL = 32,
|
||||
CALLIOPE_ID_IO_P3 = 33,
|
||||
CALLIOPE_ID_IO_P7 = 34,
|
||||
CALLIOPE_ID_IO_P8 = 35,
|
||||
CALLIOPE_ID_IO_P9 = 36,
|
||||
CALLIOPE_ID_IO_P13 = 37,
|
||||
CALLIOPE_ID_IO_P14 = 38,
|
||||
CALLIOPE_ID_IO_P15 = 39,
|
||||
CALLIOPE_ID_IO_P22 = 40,
|
||||
CALLIOPE_ID_IO_P28 = 41,
|
||||
CALLIOPE_ID_IO_P29 = 42,
|
||||
CALLIOPE_ID_IO_P30 = 43,
|
||||
MICROBIT_ID_MESSAGE_BUS_LISTENER = 1021,
|
||||
MICROBIT_ID_NOTIFY_ONE = 1022,
|
||||
MICROBIT_ID_NOTIFY = 1023,
|
||||
@ -194,6 +192,7 @@ declare const enum DAL {
|
||||
MICROBIT_SERIAL_EVT_TX_EMPTY = 2,
|
||||
MICROBIT_UART_S_EVT_TX_EMPTY = 3,
|
||||
// built/yt/yotta_modules/microbit-dal/inc/drivers/CalliopeRGB.h
|
||||
RGB_LED_MAX_INTENSITY = 40,
|
||||
// built/yt/yotta_modules/microbit-dal/inc/drivers/CalliopeSoundMotor.h
|
||||
CALLIOPE_SM_DEFAULT_DUTY_M = 50,
|
||||
CALLIOPE_SM_DEFAULT_DUTY_S = 100,
|
||||
@ -513,6 +512,30 @@ declare const enum DAL {
|
||||
MICROBIT_DISPLAY_ROTATION_90 = 1,
|
||||
MICROBIT_DISPLAY_ROTATION_180 = 2,
|
||||
MICROBIT_DISPLAY_ROTATION_270 = 3,
|
||||
// built/yt/yotta_modules/microbit-dal/inc/drivers/MicroBitFile.h
|
||||
// built/yt/yotta_modules/microbit-dal/inc/drivers/MicroBitFileSystem.h
|
||||
MBFS_FILENAME_LENGTH = 16,
|
||||
MB_READ = 0x01,
|
||||
MB_WRITE = 0x02,
|
||||
MB_CREAT = 0x04,
|
||||
MB_APPEND = 0x08,
|
||||
MB_SEEK_SET = 0x01,
|
||||
MB_SEEK_END = 0x02,
|
||||
MB_SEEK_CUR = 0x04,
|
||||
MBFS_STATUS_INITIALISED = 0x01,
|
||||
MBFS_UNUSED = 0xFFFF,
|
||||
MBFS_EOF = 0xEFFF,
|
||||
MBFS_DELETED = 0x0000,
|
||||
MBFS_DIRECTORY_ENTRY_FREE = 0x8000,
|
||||
MBFS_DIRECTORY_ENTRY_VALID = 0x4000,
|
||||
MBFS_DIRECTORY_ENTRY_DIRECTORY = 0x2000,
|
||||
MBFS_DIRECTORY_ENTRY_NEW = 0xffff,
|
||||
MBFS_DIRECTORY_ENTRY_DELETED = 0x0000,
|
||||
MBFS_BLOCK_TYPE_FILE = 1,
|
||||
MBFS_BLOCK_TYPE_DIRECTORY = 2,
|
||||
MBFS_BLOCK_TYPE_FILETABLE = 3,
|
||||
// built/yt/yotta_modules/microbit-dal/inc/drivers/MicroBitFlash.h
|
||||
PAGE_SIZE = 1024,
|
||||
// built/yt/yotta_modules/microbit-dal/inc/drivers/MicroBitI2C.h
|
||||
MICROBIT_I2C_MAX_RETRIES = 9,
|
||||
// built/yt/yotta_modules/microbit-dal/inc/drivers/MicroBitIO.h
|
||||
@ -558,7 +581,6 @@ declare const enum DAL {
|
||||
MICROBIT_PIN_EVT_PULSE_LO = 5,
|
||||
PIN_CAPABILITY_DIGITAL = 0x01,
|
||||
PIN_CAPABILITY_ANALOG = 0x02,
|
||||
PIN_CAPABILITY_TOUCH = 0x04,
|
||||
// built/yt/yotta_modules/microbit-dal/inc/drivers/MicroBitRadio.h
|
||||
MICROBIT_RADIO_STATUS_INITIALISED = 0x0001,
|
||||
MICROBIT_RADIO_BASE_ADDRESS = 0x75626974,
|
||||
|
85
libs/core/enums.d.ts
vendored
@ -34,10 +34,10 @@ declare namespace basic {
|
||||
|
||||
|
||||
declare enum TouchPin {
|
||||
P0 = 7, // MICROBIT_ID_IO_P0
|
||||
P1 = 8, // MICROBIT_ID_IO_P1
|
||||
P2 = 9, // MICROBIT_ID_IO_P2
|
||||
P3 = 40, // CALLIOPE_ID_IO_P22
|
||||
P0 = 19, // MICROBIT_ID_IO_P12
|
||||
P1 = 7, // MICROBIT_ID_IO_P0
|
||||
P2 = 8, // MICROBIT_ID_IO_P1
|
||||
P3 = 23, // MICROBIT_ID_IO_P16
|
||||
}
|
||||
|
||||
|
||||
@ -152,17 +152,18 @@ declare namespace input {
|
||||
MICROBIT_ID_IO_P5 = 12, // MICROBIT_ID_IO_P5
|
||||
MICROBIT_ID_IO_P6 = 13, // MICROBIT_ID_IO_P6
|
||||
MICROBIT_ID_IO_P7 = 14, // MICROBIT_ID_IO_P7
|
||||
//MICROBIT_ID_IO_P8_ = MICROBIT_ID_IO_P8,
|
||||
MICROBIT_ID_IO_P8 = 15, // MICROBIT_ID_IO_P8
|
||||
MICROBIT_ID_IO_P9 = 16, // MICROBIT_ID_IO_P9
|
||||
MICROBIT_ID_IO_P10 = 17, // MICROBIT_ID_IO_P10
|
||||
MICROBIT_ID_IO_P11 = 18, // MICROBIT_ID_IO_P11
|
||||
//MICROBIT_ID_IO_P12_ = MICROBIT_ID_IO_P12,
|
||||
//MICROBIT_ID_IO_P13_ = MICROBIT_ID_IO_P13,
|
||||
//MICROBIT_ID_IO_P14_ = MICROBIT_ID_IO_P14,
|
||||
//MICROBIT_ID_IO_P15_ = MICROBIT_ID_IO_P15,
|
||||
//MICROBIT_ID_IO_P16_ = MICROBIT_ID_IO_P16,
|
||||
MICROBIT_ID_IO_P12 = 19, // MICROBIT_ID_IO_P12
|
||||
MICROBIT_ID_IO_P13 = 20, // MICROBIT_ID_IO_P13
|
||||
MICROBIT_ID_IO_P14 = 21, // MICROBIT_ID_IO_P14
|
||||
MICROBIT_ID_IO_P15 = 22, // MICROBIT_ID_IO_P15
|
||||
MICROBIT_ID_IO_P16 = 23, // MICROBIT_ID_IO_P16
|
||||
MICROBIT_ID_IO_P19 = 24, // MICROBIT_ID_IO_P19
|
||||
MICROBIT_ID_IO_P20 = 25, // MICROBIT_ID_IO_P20
|
||||
MICROBIT_ID_IO_P21 = 50, // MICROBIT_ID_IO_P21
|
||||
MES_DEVICE_INFO_ID = 1103, // MES_DEVICE_INFO_ID
|
||||
MES_SIGNAL_STRENGTH_ID = 1101, // MES_SIGNAL_STRENGTH_ID
|
||||
MES_DPAD_CONTROLLER_ID = 1104, // MES_DPAD_CONTROLLER_ID
|
||||
@ -175,6 +176,10 @@ declare namespace input {
|
||||
MICROBIT_BUTTON_EVT_CLICK = 3, // MICROBIT_BUTTON_EVT_CLICK
|
||||
MICROBIT_RADIO_EVT_DATAGRAM = 1, // MICROBIT_RADIO_EVT_DATAGRAM
|
||||
MICROBIT_ACCELEROMETER_EVT_DATA_UPDATE = 1, // MICROBIT_ACCELEROMETER_EVT_DATA_UPDATE
|
||||
MICROBIT_PIN_EVT_RISE = 2, // MICROBIT_PIN_EVT_RISE
|
||||
MICROBIT_PIN_EVT_FALL = 3, // MICROBIT_PIN_EVT_FALL
|
||||
MICROBIT_PIN_EVT_PULSE_HI = 4, // MICROBIT_PIN_EVT_PULSE_HI
|
||||
MICROBIT_PIN_EVT_PULSE_LO = 5, // MICROBIT_PIN_EVT_PULSE_LO
|
||||
MES_ALERT_EVT_ALARM1 = 6, // MES_ALERT_EVT_ALARM1
|
||||
MES_ALERT_EVT_ALARM2 = 7, // MES_ALERT_EVT_ALARM2
|
||||
MES_ALERT_EVT_ALARM3 = 8, // MES_ALERT_EVT_ALARM3
|
||||
@ -263,36 +268,35 @@ declare namespace motors {
|
||||
|
||||
|
||||
declare enum DigitalPin {
|
||||
P0 = 7, // MICROBIT_ID_IO_P0
|
||||
P1 = 8, // MICROBIT_ID_IO_P1
|
||||
P2 = 9, // MICROBIT_ID_IO_P2
|
||||
P3 = 40, // CALLIOPE_ID_IO_P22
|
||||
P0 = 19, // MICROBIT_ID_IO_P12
|
||||
P1 = 7, // MICROBIT_ID_IO_P0
|
||||
P2 = 8, // MICROBIT_ID_IO_P1
|
||||
P3 = 23, // MICROBIT_ID_IO_P16
|
||||
C4 = 10, // MICROBIT_ID_IO_P3
|
||||
C5 = 11, // MICROBIT_ID_IO_P4
|
||||
C6 = 17, // MICROBIT_ID_IO_P10
|
||||
C7 = 34, // CALLIOPE_ID_IO_P7
|
||||
C8 = 35, // CALLIOPE_ID_IO_P8
|
||||
C9 = 36, // CALLIOPE_ID_IO_P9
|
||||
C7 = 20, // MICROBIT_ID_IO_P13
|
||||
C8 = 21, // MICROBIT_ID_IO_P14
|
||||
C9 = 22, // MICROBIT_ID_IO_P15
|
||||
C10 = 16, // MICROBIT_ID_IO_P9
|
||||
C11 = 14, // MICROBIT_ID_IO_P7
|
||||
C12 = 13, // MICROBIT_ID_IO_P6
|
||||
C13 = 37, // CALLIOPE_ID_IO_P13
|
||||
C14 = 38, // CALLIOPE_ID_IO_P14
|
||||
C15 = 39, // CALLIOPE_ID_IO_P15
|
||||
//P16 = MICROBIT_ID_IO_P16,
|
||||
C16 = 9, // MICROBIT_ID_IO_P2
|
||||
C17 = 15, // MICROBIT_ID_IO_P8
|
||||
C18 = 25, // MICROBIT_ID_IO_P20
|
||||
C19 = 24, // MICROBIT_ID_IO_P19
|
||||
C20 = 25, // MICROBIT_ID_IO_P20
|
||||
}
|
||||
|
||||
|
||||
declare enum AnalogPin {
|
||||
//P0 = MICROBIT_ID_IO_P0, -- does not work analogue
|
||||
P1 = 8, // MICROBIT_ID_IO_P1
|
||||
P2 = 9, // MICROBIT_ID_IO_P2
|
||||
//P3 = CALLIOPE_ID_IO_P22, -- does not work analogue
|
||||
P1 = 7, // MICROBIT_ID_IO_P0
|
||||
P2 = 8, // MICROBIT_ID_IO_P1
|
||||
C4 = 10, // MICROBIT_ID_IO_P3
|
||||
C5 = 11, // MICROBIT_ID_IO_P4
|
||||
C6 = 17, // MICROBIT_ID_IO_P10
|
||||
C16 = 9, // MICROBIT_ID_IO_P2
|
||||
C17 = 15, // MICROBIT_ID_IO_P8
|
||||
MIC = 50, // MICROBIT_ID_IO_P21
|
||||
}
|
||||
|
||||
|
||||
@ -312,22 +316,33 @@ declare namespace motors {
|
||||
}
|
||||
|
||||
|
||||
declare enum PinEventType {
|
||||
//% block="edge"
|
||||
Edge = 1, // MICROBIT_PIN_EVENT_ON_EDGE
|
||||
//% block="pulse"
|
||||
Pulse = 2, // MICROBIT_PIN_EVENT_ON_PULSE
|
||||
//% block="touch"
|
||||
Touch = 3, // MICROBIT_PIN_EVENT_ON_TOUCH
|
||||
//% block="none"
|
||||
None = 0, // MICROBIT_PIN_EVENT_NONE
|
||||
}
|
||||
|
||||
|
||||
declare enum SerialPin {
|
||||
P0 = 7, // MICROBIT_ID_IO_P0
|
||||
P1 = 8, // MICROBIT_ID_IO_P1
|
||||
P2 = 9, // MICROBIT_ID_IO_P2
|
||||
//P8 = MICROBIT_ID_IO_P8,
|
||||
//P12 = MICROBIT_ID_IO_P12,
|
||||
//P13 = MICROBIT_ID_IO_P13,
|
||||
//P14 = MICROBIT_ID_IO_P14,
|
||||
//P15 = MICROBIT_ID_IO_P15,
|
||||
//P16 = MICROBIT_ID_IO_P16
|
||||
C16 = 9, // MICROBIT_ID_IO_P2
|
||||
C17 = 15, // MICROBIT_ID_IO_P8
|
||||
P0 = 19, // MICROBIT_ID_IO_P12
|
||||
P1 = 7, // MICROBIT_ID_IO_P0
|
||||
P2 = 8, // MICROBIT_ID_IO_P1
|
||||
P3 = 23, // MICROBIT_ID_IO_P16
|
||||
}
|
||||
|
||||
|
||||
declare enum BaudRate {
|
||||
//% block=115200
|
||||
BaudRate115200 = 115200,
|
||||
//% block=57600
|
||||
BaudRate56700 = 57600,
|
||||
//% block=9600
|
||||
BaudRate9600 = 9600,
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ enum LedSpriteProperty {
|
||||
/**
|
||||
* A single-LED sprite game engine
|
||||
*/
|
||||
//% color=#008272 weight=32
|
||||
//% color=#008272 weight=32 icon="\uf11b"
|
||||
//% advanced=true
|
||||
namespace game {
|
||||
let _score: number = 0;
|
||||
|
@ -1,9 +1,9 @@
|
||||
#include "ksbit.h"
|
||||
#include "pxt.h"
|
||||
|
||||
/**
|
||||
* Creation, manipulation and display of LED images.
|
||||
*/
|
||||
//% color=#5C2D91 weight=31
|
||||
//% color=#5C2D91 weight=31 icon="\uf03e"
|
||||
//% advanced=true
|
||||
namespace images {
|
||||
/**
|
||||
@ -43,9 +43,9 @@ namespace ImageMethods {
|
||||
*/
|
||||
//% help=images/show-image weight=80 blockNamespace=images
|
||||
//% blockId=device_show_image_offset block="show image %sprite|at offset %offset" blockGap=8
|
||||
//% parts="ledmatrix"
|
||||
void showImage(Image sprite, int xOffset) {
|
||||
uBit.display.print(MicroBitImage(sprite), -xOffset, 0, 0);
|
||||
//% parts="ledmatrix" async
|
||||
void showImage(Image sprite, int xOffset, int interval = 400) {
|
||||
uBit.display.print(MicroBitImage(sprite), -xOffset, 0, 0, interval);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -61,7 +61,7 @@ namespace ImageMethods {
|
||||
|
||||
/**
|
||||
* Scrolls an image .
|
||||
* @param frameOffset x offset moved on each animation step, eg: 5, 1, -1
|
||||
* @param frameOffset x offset moved on each animation step, eg: 1, 2, 5
|
||||
* @param interval time between each animation step in milli seconds, eg: 200
|
||||
*/
|
||||
//% help=images/show-image weight=79 async blockNamespace=images
|
||||
@ -69,10 +69,7 @@ namespace ImageMethods {
|
||||
//% parts="ledmatrix"
|
||||
void scrollImage(Image id, int frameOffset, int interval) {
|
||||
MicroBitImage i(id);
|
||||
if (i.getWidth() <= 5)
|
||||
showImage(id, 0);
|
||||
else
|
||||
uBit.display.animate(i, interval, frameOffset, 0);
|
||||
uBit.display.animate(i, interval, frameOffset, MICROBIT_DISPLAY_WIDTH - 1);
|
||||
}
|
||||
|
||||
|
||||
@ -153,7 +150,7 @@ namespace ImageMethods {
|
||||
*/
|
||||
//% weight=70 help=images/show-frame
|
||||
//% parts="ledmatrix"
|
||||
void showFrame(Image i, int frame) {
|
||||
showImage(i, frame * 5);
|
||||
void showFrame(Image i, int frame, int interval = 400) {
|
||||
showImage(i, frame * 5, interval);
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "ksbit.h"
|
||||
#include "pxt.h"
|
||||
|
||||
enum class Button {
|
||||
A = MICROBIT_ID_BUTTON_A,
|
||||
@ -26,10 +26,10 @@ enum class Rotation {
|
||||
};
|
||||
|
||||
enum class TouchPin {
|
||||
P0 = MICROBIT_ID_IO_P0,
|
||||
P1 = MICROBIT_ID_IO_P1,
|
||||
P2 = MICROBIT_ID_IO_P2,
|
||||
P3 = CALLIOPE_ID_IO_P22
|
||||
P0 = MICROBIT_ID_IO_P12,
|
||||
P1 = MICROBIT_ID_IO_P0,
|
||||
P2 = MICROBIT_ID_IO_P1,
|
||||
P3 = MICROBIT_ID_IO_P16
|
||||
};
|
||||
|
||||
enum class AcceleratorRange {
|
||||
@ -108,7 +108,7 @@ enum class Gesture {
|
||||
SixG = MICROBIT_ACCELEROMETER_EVT_6G
|
||||
};
|
||||
|
||||
//% color=#C90072 weight=99
|
||||
//% color=#C90072 weight=99 icon="\uf192"
|
||||
namespace input {
|
||||
/**
|
||||
* Do something when a button (``A``, ``B`` or both ``A+B``) is pressed
|
||||
@ -116,7 +116,7 @@ namespace input {
|
||||
* @param body TODO
|
||||
*/
|
||||
//% help=input/on-button-pressed weight=85 blockGap=8
|
||||
//% blockId=device_button_event block="on button|%NAME|pressed" icon="\uf192"
|
||||
//% blockId=device_button_event block="on button|%NAME|pressed"
|
||||
//% parts="buttonpair"
|
||||
void onButtonPressed(Button button, Action body) {
|
||||
registerWithDal((int)button, MICROBIT_BUTTON_EVT_CLICK, body);
|
||||
@ -127,7 +127,7 @@ namespace input {
|
||||
* @param body TODO
|
||||
*/
|
||||
//% help=input/on-gesture weight=84 blockGap=8
|
||||
//% blockId=device_gesture_event block="on |%NAME" icon="\uf135"
|
||||
//% blockId=device_gesture_event block="on |%NAME"
|
||||
//% parts="accelerometer"
|
||||
void onGesture(Gesture gesture, Action body) {
|
||||
if ((int)gesture == MICROBIT_ACCELEROMETER_EVT_3G && uBit.accelerometer.getRange() < 3)
|
||||
@ -143,7 +143,7 @@ namespace input {
|
||||
* @param body the code to run when the pin is pressed
|
||||
*/
|
||||
//% help=input/on-pin-pressed weight=83
|
||||
//% blockId=device_pin_event block="on pin %NAME|pressed" icon="\uf094"
|
||||
//% blockId=device_pin_event block="on pin %NAME|pressed"
|
||||
void onPinPressed(TouchPin name, Action body) {
|
||||
auto pin = getPin((int)name);
|
||||
if (!pin) return;
|
||||
@ -159,7 +159,7 @@ namespace input {
|
||||
* @param body the code to run when the pin is released
|
||||
*/
|
||||
//% help=input/on-pin-released weight=6 blockGap=8
|
||||
//% blockId=device_pin_released block="on pin %NAME|released" icon="\uf094"
|
||||
//% blockId=device_pin_released block="on pin %NAME|released"
|
||||
//% advanced=true
|
||||
void onPinReleased(TouchPin name, Action body) {
|
||||
auto pin = getPin((int)name);
|
||||
@ -176,7 +176,7 @@ namespace input {
|
||||
//% help=input/button-is-pressed weight=60
|
||||
//% block="button|%NAME|is pressed"
|
||||
//% blockId=device_get_button2
|
||||
//% icon="\uf192" blockGap=8
|
||||
//% blockGap=8
|
||||
//% parts="buttonpair"
|
||||
bool buttonIsPressed(Button button) {
|
||||
if (button == Button::A)
|
||||
@ -193,7 +193,7 @@ namespace input {
|
||||
* @param name pin used to detect the touch
|
||||
*/
|
||||
//% help=input/pin-is-pressed weight=58
|
||||
//% blockId="device_pin_is_pressed" block="pin %NAME|is pressed" icon="\uf094"
|
||||
//% blockId="device_pin_is_pressed" block="pin %NAME|is pressed"
|
||||
//% blockGap=8
|
||||
bool pinIsPressed(TouchPin name) {
|
||||
auto pin = getPin((int)name);
|
||||
@ -211,7 +211,7 @@ namespace input {
|
||||
* Get the acceleration value in milli-gravitys (when the board is laying flat with the screen up, x=0, y=0 and z=-1024)
|
||||
* @param dimension TODO
|
||||
*/
|
||||
//% help=input/acceleration weight=58 icon="\uf135"
|
||||
//% help=input/acceleration weight=58
|
||||
//% blockId=device_acceleration block="acceleration (mg)|%NAME" blockGap=8
|
||||
//% parts="accelerometer"
|
||||
int acceleration(Dimension dimension) {
|
||||
@ -228,7 +228,7 @@ namespace input {
|
||||
* Reads the light level applied to the LED screen in a range from ``0`` (dark) to ``255`` bright.
|
||||
*/
|
||||
//% help=input/light-level weight=57
|
||||
//% blockId=device_get_light_level block="light level" blockGap=8 icon="\uf185"
|
||||
//% blockId=device_get_light_level block="light level" blockGap=8
|
||||
//% parts="ledmatrix"
|
||||
int lightLevel() {
|
||||
return uBit.display.readLightLevel();
|
||||
@ -238,7 +238,7 @@ namespace input {
|
||||
* Get the current compass heading in degrees.
|
||||
*/
|
||||
//% help=input/compass-heading
|
||||
//% weight=56 icon="\uf14e"
|
||||
//% weight=56
|
||||
//% blockId=device_heading block="compass heading (°)" blockGap=8
|
||||
//% parts="compass"
|
||||
int compassHeading() {
|
||||
@ -249,7 +249,7 @@ namespace input {
|
||||
/**
|
||||
* Gets the temperature in Celsius degrees (°C).
|
||||
*/
|
||||
//% weight=55 icon="\uf06d"
|
||||
//% weight=55
|
||||
//% help=input/temperature
|
||||
//% blockId=device_temperature block="temperature (°C)" blockGap=8
|
||||
//% parts="thermometer"
|
||||
@ -262,7 +262,7 @@ namespace input {
|
||||
* @param kind TODO
|
||||
*/
|
||||
//% help=input/rotation weight=52
|
||||
//% blockId=device_get_rotation block="rotation (°)|%NAME" blockGap=8 icon="\uf197"
|
||||
//% blockId=device_get_rotation block="rotation (°)|%NAME" blockGap=8
|
||||
//% parts="accelerometer" advanced=true
|
||||
int rotation(Rotation kind) {
|
||||
switch (kind) {
|
||||
@ -277,7 +277,7 @@ namespace input {
|
||||
* @param dimension TODO
|
||||
*/
|
||||
//% help=input/magnetic-force weight=51
|
||||
//% blockId=device_get_magnetic_force block="magnetic force (µT)|%NAME" blockGap=8 icon="\uf076"
|
||||
//% blockId=device_get_magnetic_force block="magnetic force (µT)|%NAME" blockGap=8
|
||||
//% parts="compass"
|
||||
//% advanced=true
|
||||
int magneticForce(Dimension dimension) {
|
||||
@ -297,7 +297,7 @@ namespace input {
|
||||
* Gets the number of milliseconds elapsed since power on.
|
||||
*/
|
||||
//% help=input/running-time weight=50
|
||||
//% blockId=device_get_running_time block="running time (ms)" icon="\uf017"
|
||||
//% blockId=device_get_running_time block="running time (ms)"
|
||||
//% advanced=true
|
||||
int runningTime() {
|
||||
return system_timer_current_time();
|
||||
@ -314,7 +314,7 @@ namespace input {
|
||||
* @param range a value describe the maximum strengh of acceleration measured
|
||||
*/
|
||||
//% help=input/set-accelerometer-range
|
||||
//% blockId=device_set_accelerometer_range block="set accelerometer|range %range" icon="\uf135"
|
||||
//% blockId=device_set_accelerometer_range block="set accelerometer|range %range"
|
||||
//% weight=5
|
||||
//% parts="accelerometer"
|
||||
//% advanced=true
|
||||
|
@ -1,12 +0,0 @@
|
||||
#include "pxt.h"
|
||||
#include "ManagedBuffer.h"
|
||||
|
||||
using namespace pxt;
|
||||
MicroBitPin *getPin(int id);
|
||||
typedef ImageData* Image;
|
||||
typedef BufferData* Buffer;
|
||||
|
||||
namespace pxt {
|
||||
uint32_t programSize();
|
||||
uint32_t afterProgramPage();
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
#include "ksbit.h"
|
||||
#include "pxt.h"
|
||||
|
||||
enum class DisplayMode_ {
|
||||
//% block="black and white"
|
||||
@ -8,7 +8,7 @@ enum class DisplayMode_ {
|
||||
// TODO DISPLAY_MODE_BLACK_AND_WHITE_LIGHT_SENSE
|
||||
};
|
||||
|
||||
//% color=#8169E6 weight=35
|
||||
//% color=#8169E6 weight=35 icon="\uf205"
|
||||
namespace led {
|
||||
|
||||
/**
|
||||
@ -17,7 +17,7 @@ namespace led {
|
||||
* @param y TODO
|
||||
*/
|
||||
//% help=led/plot weight=78
|
||||
//% blockId=device_plot block="plot|x %x|y %y" icon="\uf205" blockGap=8
|
||||
//% blockId=device_plot block="plot|x %x|y %y" blockGap=8
|
||||
//% parts="ledmatrix"
|
||||
void plot(int x, int y) {
|
||||
uBit.display.image.setPixelValue(x, y, 1);
|
||||
@ -29,7 +29,7 @@ namespace led {
|
||||
* @param y TODO
|
||||
*/
|
||||
//% help=led/unplot weight=77
|
||||
//% blockId=device_unplot block="unplot|x %x|y %y" icon="\uf204" blockGap=8
|
||||
//% blockId=device_unplot block="unplot|x %x|y %y" blockGap=8
|
||||
//% parts="ledmatrix"
|
||||
void unplot(int x, int y) {
|
||||
uBit.display.image.setPixelValue(x, y, 0);
|
||||
@ -41,7 +41,7 @@ namespace led {
|
||||
* @param y TODO
|
||||
*/
|
||||
//% help=led/point weight=76
|
||||
//% blockId=device_point block="point|x %x|y %y" icon="\uf10c"
|
||||
//% blockId=device_point block="point|x %x|y %y"
|
||||
//% parts="ledmatrix"
|
||||
bool point(int x, int y) {
|
||||
int pix = uBit.display.image.getPixelValue(x, y);
|
||||
@ -52,7 +52,7 @@ namespace led {
|
||||
* Get the screen brightness from 0 (off) to 255 (full bright).
|
||||
*/
|
||||
//% help=led/brightness weight=60
|
||||
//% blockId=device_get_brightness block="brightness" icon="\uf042" blockGap=8
|
||||
//% blockId=device_get_brightness block="brightness" blockGap=8
|
||||
//% parts="ledmatrix"
|
||||
//% advanced=true
|
||||
int brightness() {
|
||||
@ -64,7 +64,7 @@ namespace led {
|
||||
* @param value the brightness value, eg:255, 127, 0
|
||||
*/
|
||||
//% help=led/set-brightness weight=59
|
||||
//% blockId=device_set_brightness block="set brightness %value" icon="\uf042"
|
||||
//% blockId=device_set_brightness block="set brightness %value"
|
||||
//% parts="ledmatrix"
|
||||
//% advanced=true
|
||||
void setBrightness(int value) {
|
||||
@ -75,7 +75,7 @@ namespace led {
|
||||
* Cancels the current animation and clears other pending animations.
|
||||
*/
|
||||
//% weight=50 help=led/stop-animation
|
||||
//% blockId=device_stop_animation block="stop animation" icon="\uf04d"
|
||||
//% blockId=device_stop_animation block="stop animation"
|
||||
//% parts="ledmatrix"
|
||||
//% advanced=true
|
||||
void stopAnimation() {
|
||||
@ -95,7 +95,7 @@ namespace led {
|
||||
/**
|
||||
* Turns on or off the display
|
||||
*/
|
||||
//% help=led/enable blockId=device_led_enable icon="\uf04d"
|
||||
//% help=led/enable blockId=device_led_enable
|
||||
//% advanced=true parts="ledmatrix"
|
||||
void enable(bool on) {
|
||||
if (on) uBit.display.enable();
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "ksbit.h"
|
||||
#include "pxt.h"
|
||||
|
||||
enum MotorCommand {
|
||||
//% block=coast
|
||||
@ -19,7 +19,7 @@ enum Motor {
|
||||
/**
|
||||
* Blocks to control the onboard motors
|
||||
*/
|
||||
//% color=#008272 weight=30
|
||||
//% color=#008272 weight=30 icon="\uf1b9"
|
||||
namespace motors {
|
||||
/**
|
||||
* Turns on the motor at a certain percent of power. Switches to single motor mode!
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "ksbit.h"
|
||||
#include "pxt.h"
|
||||
|
||||
namespace music {
|
||||
/**
|
||||
@ -8,21 +8,14 @@ namespace music {
|
||||
*/
|
||||
//% help=music/play-tone weight=90
|
||||
//% blockId=device_play_note block="play|tone %note=device_note|for %duration=device_beat" icon="\uf025" blockGap=8
|
||||
//% parts="speaker"
|
||||
void playTone(int freqency, int ms) {
|
||||
uBit.soundmotor.soundOn(freqency);
|
||||
if(ms > 0) uBit.sleep(ms);
|
||||
uBit.soundmotor.soundOff();
|
||||
}
|
||||
//% parts="speaker" async
|
||||
void playTone(int frequency, int ms) {
|
||||
if(frequency > 0) uBit.soundmotor.soundOn(frequency);
|
||||
else uBit.soundmotor.soundOff();
|
||||
if(ms > 0) {
|
||||
uBit.sleep(ms);
|
||||
uBit.soundmotor.soundOff();
|
||||
}
|
||||
|
||||
/**
|
||||
* Plays a tone through ``speaker``.
|
||||
* @param frequency pitch of the tone to play in Hertz (Hz)
|
||||
*/
|
||||
//% help=music/ring-tone weight=80
|
||||
//% blockId=device_ring block="ring tone (Hz)|%note=device_note" icon="\uf025" blockGap=8
|
||||
//% parts="speaker"
|
||||
void ringTone(int frequency) {
|
||||
playTone(frequency, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -125,7 +125,7 @@ enum BeatFraction {
|
||||
/**
|
||||
* Generation of music tones through pin ``P0``.
|
||||
*/
|
||||
//% color=#DF4600 weight=98
|
||||
//% color=#DF4600 weight=98 icon="\uf025"
|
||||
namespace music {
|
||||
let beatsPerMinute: number = 120;
|
||||
|
||||
@ -140,6 +140,16 @@ namespace music {
|
||||
playTone(0, ms);
|
||||
}
|
||||
|
||||
/**
|
||||
* Plays a tone through ``speaker``.
|
||||
* @param frequency pitch of the tone to play in Hertz (Hz)
|
||||
*/
|
||||
//% help=music/ring-tone weight=80
|
||||
//% blockId=device_ring block="ring tone (Hz)|%note=device_note" blockGap=8
|
||||
//% parts="speaker" async
|
||||
export function ringTone(frequency: number) {
|
||||
playTone(frequency, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the frequency of a note.
|
||||
|
@ -1,35 +1,34 @@
|
||||
#include "ksbit.h"
|
||||
#include "pxt.h"
|
||||
|
||||
enum class DigitalPin {
|
||||
P0 = MICROBIT_ID_IO_P0, // edge connector 0
|
||||
P1 = MICROBIT_ID_IO_P1, // edge connector 1
|
||||
P2 = MICROBIT_ID_IO_P2, // edge connector 2
|
||||
P3 = CALLIOPE_ID_IO_P22, // edge connector 3
|
||||
C4 = MICROBIT_ID_IO_P3, // LED matrix C1
|
||||
C5 = MICROBIT_ID_IO_P4, // LED matrix C2
|
||||
C6 = MICROBIT_ID_IO_P10, // LED matrix C3
|
||||
C7 = CALLIOPE_ID_IO_P7, // LED matrix C4
|
||||
C8 = CALLIOPE_ID_IO_P8, // LED matrix C5
|
||||
C9 = CALLIOPE_ID_IO_P9, // LED matrix C6
|
||||
C10 = MICROBIT_ID_IO_P9, // LED matrix C7
|
||||
C11 = MICROBIT_ID_IO_P7, // LED matrix C8
|
||||
C12 = MICROBIT_ID_IO_P6, // LED matrix C9
|
||||
C13 = CALLIOPE_ID_IO_P13, // LED matrix R1
|
||||
C14 = CALLIOPE_ID_IO_P14, // LED matrix R2
|
||||
C15 = CALLIOPE_ID_IO_P15, // LED matrix R3
|
||||
//P16 = MICROBIT_ID_IO_P16,
|
||||
C19 = MICROBIT_ID_IO_P19, // SCL
|
||||
C20 = MICROBIT_ID_IO_P20 // SDA
|
||||
P0 = MICROBIT_ID_IO_P12, // edge connector 0
|
||||
P1 = MICROBIT_ID_IO_P0, // edge connector 1
|
||||
P2 = MICROBIT_ID_IO_P1, // edge connector 2
|
||||
P3 = MICROBIT_ID_IO_P16, // edge connector 3
|
||||
C4 = MICROBIT_ID_IO_P3, // LED matrix C1
|
||||
C5 = MICROBIT_ID_IO_P4, // LED matrix C2
|
||||
C6 = MICROBIT_ID_IO_P10, // LED matrix C3
|
||||
C7 = MICROBIT_ID_IO_P13, // LED matrix C4
|
||||
C8 = MICROBIT_ID_IO_P14, // LED matrix C5
|
||||
C9 = MICROBIT_ID_IO_P15, // LED matrix C6
|
||||
C10 = MICROBIT_ID_IO_P9, // LED matrix C7
|
||||
C11 = MICROBIT_ID_IO_P7, // LED matrix C8
|
||||
C12 = MICROBIT_ID_IO_P6, // LED matrix C9
|
||||
C16 = MICROBIT_ID_IO_P2, // RX
|
||||
C17 = MICROBIT_ID_IO_P8, // TX
|
||||
C18 = MICROBIT_ID_IO_P20, // SDA
|
||||
C19 = MICROBIT_ID_IO_P19 // SCL
|
||||
};
|
||||
|
||||
enum class AnalogPin {
|
||||
//P0 = MICROBIT_ID_IO_P0, -- does not work analogue
|
||||
P1 = MICROBIT_ID_IO_P1, // edge connector 1
|
||||
P2 = MICROBIT_ID_IO_P2, // edge connector 2
|
||||
//P3 = CALLIOPE_ID_IO_P22, -- does not work analogue
|
||||
C4 = MICROBIT_ID_IO_P3,
|
||||
C5 = MICROBIT_ID_IO_P4,
|
||||
C6 = MICROBIT_ID_IO_P10,
|
||||
P1 = MICROBIT_ID_IO_P0, // edge connector 1
|
||||
P2 = MICROBIT_ID_IO_P1, // edge connector 2
|
||||
C4 = MICROBIT_ID_IO_P3, // LED matrix C1
|
||||
C5 = MICROBIT_ID_IO_P4, // LED matrix C2
|
||||
C6 = MICROBIT_ID_IO_P10, // LED matrix C3
|
||||
C16 = MICROBIT_ID_IO_P2, // RX
|
||||
C17 = MICROBIT_ID_IO_P8, // TX
|
||||
MIC = MICROBIT_ID_IO_P21 // microphone
|
||||
};
|
||||
|
||||
enum class PulseValue {
|
||||
@ -46,6 +45,17 @@ enum class PinPullMode {
|
||||
PullNone = 2
|
||||
};
|
||||
|
||||
enum class PinEventType {
|
||||
//% block="edge"
|
||||
Edge = MICROBIT_PIN_EVENT_ON_EDGE,
|
||||
//% block="pulse"
|
||||
Pulse = MICROBIT_PIN_EVENT_ON_PULSE,
|
||||
//% block="touch"
|
||||
Touch = MICROBIT_PIN_EVENT_ON_TOUCH,
|
||||
//% block="none"
|
||||
None = MICROBIT_PIN_EVENT_NONE
|
||||
};
|
||||
|
||||
MicroBitPin *getPin(int id) {
|
||||
switch (id) {
|
||||
case MICROBIT_ID_IO_P0: return &uBit.io.P0;
|
||||
@ -56,28 +66,18 @@ MicroBitPin *getPin(int id) {
|
||||
case MICROBIT_ID_IO_P5: return &uBit.io.P5;
|
||||
case MICROBIT_ID_IO_P6: return &uBit.io.P6;
|
||||
case MICROBIT_ID_IO_P7: return &uBit.io.P7;
|
||||
//case MICROBIT_ID_IO_P8: return &uBit.io.P8;
|
||||
case MICROBIT_ID_IO_P8: return &uBit.io.P8;
|
||||
case MICROBIT_ID_IO_P9: return &uBit.io.P9;
|
||||
case MICROBIT_ID_IO_P10: return &uBit.io.P10;
|
||||
case MICROBIT_ID_IO_P11: return &uBit.io.P11;
|
||||
//case MICROBIT_ID_IO_P12: return &uBit.io.P12;
|
||||
//case MICROBIT_ID_IO_P13: return &uBit.io.P13;
|
||||
//case MICROBIT_ID_IO_P14: return &uBit.io.P14;
|
||||
//case MICROBIT_ID_IO_P15: return &uBit.io.P15;
|
||||
//case MICROBIT_ID_IO_P16: return &uBit.io.P16;
|
||||
case MICROBIT_ID_IO_P12: return &uBit.io.P12;
|
||||
case MICROBIT_ID_IO_P13: return &uBit.io.P13;
|
||||
case MICROBIT_ID_IO_P14: return &uBit.io.P14;
|
||||
case MICROBIT_ID_IO_P15: return &uBit.io.P15;
|
||||
case MICROBIT_ID_IO_P16: return &uBit.io.P16;
|
||||
case MICROBIT_ID_IO_P19: return &uBit.io.P19;
|
||||
case MICROBIT_ID_IO_P20: return &uBit.io.P20;
|
||||
case CALLIOPE_ID_IO_P3: return &uBit.io.CAL_P3;
|
||||
case CALLIOPE_ID_IO_P7: return &uBit.io.CAL_P7;
|
||||
case CALLIOPE_ID_IO_P8: return &uBit.io.CAL_P8;
|
||||
case CALLIOPE_ID_IO_P9: return &uBit.io.CAL_P9;
|
||||
case CALLIOPE_ID_IO_P13: return &uBit.io.CAL_P13;
|
||||
case CALLIOPE_ID_IO_P14: return &uBit.io.CAL_P14;
|
||||
case CALLIOPE_ID_IO_P15: return &uBit.io.CAL_P15;
|
||||
case CALLIOPE_ID_IO_P22: return &uBit.io.CAL_P22;
|
||||
case CALLIOPE_ID_IO_P28: return &uBit.io.CAL_P28;
|
||||
case CALLIOPE_ID_IO_P29: return &uBit.io.CAL_P29;
|
||||
case CALLIOPE_ID_IO_P30: return &uBit.io.CAL_P30;
|
||||
case MICROBIT_ID_IO_P21: return &uBit.io.P21;
|
||||
default: return NULL;
|
||||
}
|
||||
}
|
||||
@ -117,7 +117,7 @@ namespace pins {
|
||||
*/
|
||||
//% help=pins/digital-write-pin weight=29
|
||||
//% blockId=device_set_digital_pin block="digital write|pin %name|to %value"
|
||||
void digitalWritePin(DigitalPin name, int value) {
|
||||
void digitalWritePin(DigitalPin name, int value) {
|
||||
PINOP(setDigitalValue(value));
|
||||
}
|
||||
|
||||
@ -126,7 +126,7 @@ namespace pins {
|
||||
* @param name pin to write to
|
||||
*/
|
||||
//% help=pins/analog-read-pin weight=25
|
||||
//% blockId=device_get_analog_pin block="analog read|pin %name" blockGap="8"
|
||||
//% blockId=device_get_analog_pin block="analog read|pin %name" blockGap="8"
|
||||
int analogReadPin(AnalogPin name) {
|
||||
PINREAD(getAnalogValue());
|
||||
}
|
||||
@ -138,7 +138,7 @@ namespace pins {
|
||||
*/
|
||||
//% help=pins/analog-write-pin weight=24
|
||||
//% blockId=device_set_analog_pin block="analog write|pin %name|to %value" blockGap=8
|
||||
void analogWritePin(AnalogPin name, int value) {
|
||||
void analogWritePin(AnalogPin name, int value) {
|
||||
PINOP(setAnalogValue(value));
|
||||
}
|
||||
|
||||
@ -149,11 +149,11 @@ namespace pins {
|
||||
* @param micros period in micro seconds. eg:20000
|
||||
*/
|
||||
//% help=pins/analog-set-period weight=23 blockGap=8
|
||||
//% blockId=device_set_analog_period block="analog set period|pin %pin|to (µs)%micros"
|
||||
void analogSetPeriod(AnalogPin name, int micros) {
|
||||
//% blockId=device_set_analog_period block="analog set period|pin %pin|to (µs)%micros"
|
||||
void analogSetPeriod(AnalogPin name, int micros) {
|
||||
PINOP(setAnalogPeriodUs(micros));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Configures this pin to a digital input, and generates events where the timestamp is the duration that this pin was either ``high`` or ``low``.
|
||||
*/
|
||||
@ -162,11 +162,11 @@ namespace pins {
|
||||
void onPulsed(DigitalPin name, PulseValue pulse, Action body) {
|
||||
MicroBitPin* pin = getPin((int)name);
|
||||
if (!pin) return;
|
||||
|
||||
pin->eventOn(MICROBIT_PIN_EVENT_ON_PULSE);
|
||||
|
||||
pin->eventOn(MICROBIT_PIN_EVENT_ON_PULSE);
|
||||
registerWithDal((int)name, (int)pulse, body);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the duration of the last pulse in micro-seconds. This function should be called from a ``onPulsed`` handler.
|
||||
*/
|
||||
@ -182,7 +182,7 @@ namespace pins {
|
||||
* @param name the pin which measures the pulse
|
||||
* @param value the value of the pulse (default high)
|
||||
* @param maximum duration in micro-seconds
|
||||
*/
|
||||
*/
|
||||
//% blockId="pins_pulse_in" block="pulse in (µs)|pin %name|pulsed %value"
|
||||
//% weight=20
|
||||
int pulseIn(DigitalPin name, PulseValue value, int maxDuration = 2000000) {
|
||||
@ -190,20 +190,20 @@ namespace pins {
|
||||
if (!pin) return 0;
|
||||
|
||||
int pulse = value == PulseValue::High ? 1 : 0;
|
||||
uint64_t tick = system_timer_current_time_us();
|
||||
uint64_t maxd = (uint64_t)maxDuration;
|
||||
uint64_t tick = system_timer_current_time_us();
|
||||
uint64_t maxd = (uint64_t)maxDuration;
|
||||
while(pin->getDigitalValue() != pulse) {
|
||||
if(system_timer_current_time_us() - tick > maxd)
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64_t start = system_timer_current_time_us();
|
||||
uint64_t start = system_timer_current_time_us();
|
||||
while(pin->getDigitalValue() == pulse) {
|
||||
if(system_timer_current_time_us() - tick > maxd)
|
||||
return 0;
|
||||
}
|
||||
uint64_t end = system_timer_current_time_us();
|
||||
return end - start;
|
||||
return 0;
|
||||
}
|
||||
uint64_t end = system_timer_current_time_us();
|
||||
return end - start;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -214,7 +214,7 @@ namespace pins {
|
||||
//% help=pins/servo-write-pin weight=20
|
||||
//% blockId=device_set_servo_pin block="servo write|pin %name|to %value" blockGap=8
|
||||
//% parts=microservo trackArgs=0
|
||||
void servoWritePin(AnalogPin name, int value) {
|
||||
void servoWritePin(AnalogPin name, int value) {
|
||||
PINOP(setServoValue(value));
|
||||
}
|
||||
|
||||
@ -225,7 +225,7 @@ namespace pins {
|
||||
*/
|
||||
//% help=pins/servo-set-pulse weight=19
|
||||
//% blockId=device_set_servo_pulse block="servo set pulse|pin %value|to (µs) %micros"
|
||||
void servoSetPulse(AnalogPin name, int micros) {
|
||||
void servoSetPulse(AnalogPin name, int micros) {
|
||||
PINOP(setServoPulseUs(micros));
|
||||
}
|
||||
|
||||
@ -236,8 +236,9 @@ namespace pins {
|
||||
* Sets the pin used when using `pins->analog pitch`.
|
||||
* @param name TODO
|
||||
*/
|
||||
//% help=pins/analog-set-pitch weight=12
|
||||
void analogSetPitchPin(AnalogPin name) {
|
||||
//% blockId=device_analog_set_pitch_pin block="analog set pitch pin %name"
|
||||
//% help=pins/analog-set-pitch weight=3 advanced=true
|
||||
void analogSetPitchPin(AnalogPin name) {
|
||||
pitchPin = getPin((int)name);
|
||||
}
|
||||
|
||||
@ -246,16 +247,18 @@ namespace pins {
|
||||
* @param frequency TODO
|
||||
* @param ms TODO
|
||||
*/
|
||||
//% help=pins/analog-pitch weight=14 async
|
||||
void analogPitch(int frequency, int ms) {
|
||||
if (pitchPin == NULL) return;
|
||||
//% blockId=device_analog_pitch block="analog pitch %frequency|for (ms) %ms"
|
||||
//% help=pins/analog-pitch weight=4 async advanced=true blockGap=8
|
||||
void analogPitch(int frequency, int ms) {
|
||||
if (pitchPin == NULL)
|
||||
analogSetPitchPin(AnalogPin::P1);
|
||||
if (frequency <= 0) {
|
||||
pitchPin->setAnalogValue(0);
|
||||
} else {
|
||||
pitchPin->setAnalogValue(512);
|
||||
pitchPin->setAnalogPeriodUs(1000000/frequency);
|
||||
}
|
||||
|
||||
|
||||
if (ms > 0) {
|
||||
fiber_sleep(ms);
|
||||
pitchPin->setAnalogValue(0);
|
||||
@ -264,7 +267,7 @@ namespace pins {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Configures the pull of this pin.
|
||||
* @param name pin to set the pull mode on
|
||||
@ -273,13 +276,25 @@ namespace pins {
|
||||
//% help=pins/set-pull weight=3
|
||||
//% blockId=device_set_pull block="set pull|pin %pin|to %pull"
|
||||
void setPull(DigitalPin name, PinPullMode pull) {
|
||||
PinMode m = pull == PinPullMode::PullDown
|
||||
PinMode m = pull == PinPullMode::PullDown
|
||||
? PinMode::PullDown
|
||||
: pull == PinPullMode::PullUp ? PinMode::PullUp
|
||||
: pull == PinPullMode::PullUp ? PinMode::PullUp
|
||||
: PinMode::PullNone;
|
||||
PINOP(setPull(m));
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the events emitted by this pin. Events can be subscribed to
|
||||
* using ``control.onEvent()``.
|
||||
* @param name pin to set the event mode on, eg: DigitalPin.P0
|
||||
* @param type the type of events for this pin to emit, eg: PinEventType.Edge
|
||||
*/
|
||||
//% help=pins/set-events weight=4 advanced=true
|
||||
//% blockId=device_set_pin_events block="set pin %pin|to emit %type|events"
|
||||
void setEvents(DigitalPin name, PinEventType type) {
|
||||
getPin((int)name)->eventOn((int)type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new zero-initialized buffer.
|
||||
* @param size number of bytes in the buffer
|
||||
@ -300,7 +315,7 @@ namespace pins {
|
||||
uBit.i2c.read(address << 1, (char*)buf->payload, size, repeat);
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Write bytes to a 7-bit I2C `address`.
|
||||
*/
|
||||
@ -327,5 +342,5 @@ namespace pins {
|
||||
auto p = allocSPI();
|
||||
return p->write(value);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Control currents in Pins for analog/digital signals, servos, i2c, ...
|
||||
*/
|
||||
//% color=#A80000 weight=30
|
||||
//% color=#A80000 weight=30 icon="\uf140"
|
||||
//% advanced=true
|
||||
namespace pins {
|
||||
/**
|
||||
|
748
libs/core/pxt.cpp
Normal file
@ -0,0 +1,748 @@
|
||||
#include "pxt.h"
|
||||
#include <map>
|
||||
|
||||
MicroBit uBit;
|
||||
|
||||
namespace pxt {
|
||||
int incr(uint32_t e)
|
||||
{
|
||||
if (e) {
|
||||
if (hasVTable(e))
|
||||
((RefObject*)e)->ref();
|
||||
else
|
||||
((RefCounted*)e)->incr();
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
void decr(uint32_t e)
|
||||
{
|
||||
if (e) {
|
||||
if (hasVTable(e))
|
||||
((RefObject*)e)->unref();
|
||||
else
|
||||
((RefCounted*)e)->decr();
|
||||
}
|
||||
}
|
||||
|
||||
Action mkAction(int reflen, int totallen, int startptr)
|
||||
{
|
||||
check(0 <= reflen && reflen <= totallen, ERR_SIZE, 1);
|
||||
check(reflen <= totallen && totallen <= 255, ERR_SIZE, 2);
|
||||
check(bytecode[startptr] == 0xffff, ERR_INVALID_BINARY_HEADER, 3);
|
||||
check(bytecode[startptr + 1] == 0, ERR_INVALID_BINARY_HEADER, 4);
|
||||
|
||||
uint32_t tmp = (uint32_t)&bytecode[startptr];
|
||||
|
||||
if (totallen == 0) {
|
||||
return tmp; // no closure needed
|
||||
}
|
||||
|
||||
void *ptr = ::operator new(sizeof(RefAction) + totallen * sizeof(uint32_t));
|
||||
RefAction *r = new (ptr) RefAction();
|
||||
r->len = totallen;
|
||||
r->reflen = reflen;
|
||||
r->func = (ActionCB)((tmp + 4) | 1);
|
||||
memset(r->fields, 0, r->len * sizeof(uint32_t));
|
||||
|
||||
return (Action)r;
|
||||
}
|
||||
|
||||
uint32_t runAction3(Action a, int arg0, int arg1, int arg2)
|
||||
{
|
||||
if (hasVTable(a))
|
||||
return ((RefAction*)a)->runCore(arg0, arg1, arg2);
|
||||
else {
|
||||
check(*(uint16_t*)a == 0xffff, ERR_INVALID_BINARY_HEADER, 4);
|
||||
return ((ActionCB)((a + 4) | 1))(NULL, arg0, arg1, arg2);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t runAction2(Action a, int arg0, int arg1)
|
||||
{
|
||||
return runAction3(a, arg0, arg1, 0);
|
||||
}
|
||||
|
||||
uint32_t runAction1(Action a, int arg0)
|
||||
{
|
||||
return runAction3(a, arg0, 0, 0);
|
||||
}
|
||||
|
||||
uint32_t runAction0(Action a)
|
||||
{
|
||||
return runAction3(a, 0, 0, 0);
|
||||
}
|
||||
|
||||
RefRecord* mkClassInstance(int vtableOffset)
|
||||
{
|
||||
VTable *vtable = (VTable*)&bytecode[vtableOffset];
|
||||
|
||||
intcheck(vtable->methods[0] == &RefRecord_destroy, ERR_SIZE, 3);
|
||||
intcheck(vtable->methods[1] == &RefRecord_print, ERR_SIZE, 4);
|
||||
|
||||
void *ptr = ::operator new(vtable->numbytes);
|
||||
RefRecord *r = new (ptr) RefRecord(PXT_VTABLE_TO_INT(vtable));
|
||||
memset(r->fields, 0, vtable->numbytes - sizeof(RefRecord));
|
||||
return r;
|
||||
}
|
||||
|
||||
uint32_t RefRecord::ld(int idx)
|
||||
{
|
||||
//intcheck((reflen == 255 ? 0 : reflen) <= idx && idx < len, ERR_OUT_OF_BOUNDS, 1);
|
||||
return fields[idx];
|
||||
}
|
||||
|
||||
uint32_t RefRecord::ldref(int idx)
|
||||
{
|
||||
//printf("LD %p len=%d reflen=%d idx=%d\n", this, len, reflen, idx);
|
||||
//intcheck(0 <= idx && idx < reflen, ERR_OUT_OF_BOUNDS, 2);
|
||||
uint32_t tmp = fields[idx];
|
||||
incr(tmp);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
void RefRecord::st(int idx, uint32_t v)
|
||||
{
|
||||
//intcheck((reflen == 255 ? 0 : reflen) <= idx && idx < len, ERR_OUT_OF_BOUNDS, 3);
|
||||
fields[idx] = v;
|
||||
}
|
||||
|
||||
void RefRecord::stref(int idx, uint32_t v)
|
||||
{
|
||||
//printf("ST %p len=%d reflen=%d idx=%d\n", this, len, reflen, idx);
|
||||
//intcheck(0 <= idx && idx < reflen, ERR_OUT_OF_BOUNDS, 4);
|
||||
decr(fields[idx]);
|
||||
fields[idx] = v;
|
||||
}
|
||||
|
||||
void RefObject::destroy() {
|
||||
((RefObjectMethod)getVTable()->methods[0])(this);
|
||||
}
|
||||
|
||||
void RefObject::print() {
|
||||
((RefObjectMethod)getVTable()->methods[1])(this);
|
||||
}
|
||||
|
||||
void RefRecord_destroy(RefRecord *r) {
|
||||
auto tbl = r->getVTable();
|
||||
uint8_t *refmask = (uint8_t*)&tbl->methods[tbl->userdata & 0xff];
|
||||
int len = (tbl->numbytes >> 2) - 1;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
if (refmask[i]) decr(r->fields[i]);
|
||||
r->fields[i] = 0;
|
||||
}
|
||||
//RefRecord is allocated using placement new
|
||||
r->~RefRecord();
|
||||
::operator delete(r);
|
||||
}
|
||||
|
||||
void RefRecord_print(RefRecord *r)
|
||||
{
|
||||
printf("RefRecord %p r=%d size=%d bytes\n", r, r->refcnt, r->getVTable()->numbytes);
|
||||
}
|
||||
|
||||
uint32_t Segment::get(uint32_t i)
|
||||
{
|
||||
#ifdef DEBUG_BUILD
|
||||
printf("In Segment::get index:%u\n", i);
|
||||
this->print();
|
||||
#endif
|
||||
|
||||
if (i < length)
|
||||
{
|
||||
return data[i];
|
||||
}
|
||||
return Segment::DefaultValue;
|
||||
}
|
||||
|
||||
void Segment::set(uint32_t i, uint32_t value)
|
||||
{
|
||||
if (i < size)
|
||||
{
|
||||
data[i] = value;
|
||||
}
|
||||
else if (i < Segment::MaxSize)
|
||||
{
|
||||
growByMin(i + 1);
|
||||
data[i] = value;
|
||||
}
|
||||
if (length <= i)
|
||||
{
|
||||
length = i + 1;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_BUILD
|
||||
printf("In Segment::set\n");
|
||||
this->print();
|
||||
#endif
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
uint16_t Segment::growthFactor(uint16_t size)
|
||||
{
|
||||
if (size == 0)
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
if (size < 64)
|
||||
{
|
||||
return size * 2; // Double
|
||||
}
|
||||
if (size < 512)
|
||||
{
|
||||
return size * 5/3; //Grow by 1.66 rate
|
||||
}
|
||||
return size + 256; //Grow by constant rate
|
||||
}
|
||||
|
||||
void Segment::growByMin(uint16_t minSize)
|
||||
{
|
||||
growBy(max(minSize, growthFactor(size)));
|
||||
}
|
||||
|
||||
void Segment::growBy(uint16_t newSize)
|
||||
{
|
||||
#ifdef DEBUG_BUILD
|
||||
printf("growBy: %d\n", newSize);
|
||||
this->print();
|
||||
#endif
|
||||
if (size < newSize)
|
||||
{
|
||||
//this will throw if unable to allocate
|
||||
uint32_t *tmp = (uint32_t*)(::operator new(newSize * sizeof(uint32_t)));
|
||||
|
||||
//Copy existing data
|
||||
if (size)
|
||||
{
|
||||
memcpy(tmp, data, size * sizeof(uint32_t));
|
||||
}
|
||||
//fill the rest with default value
|
||||
memset(tmp + size, Segment::DefaultValue, (newSize - size) * sizeof(uint32_t));
|
||||
|
||||
//free older segment;
|
||||
::operator delete(data);
|
||||
|
||||
data = tmp;
|
||||
size = newSize;
|
||||
|
||||
#ifdef DEBUG_BUILD
|
||||
printf("growBy - after reallocation\n");
|
||||
this->print();
|
||||
#endif
|
||||
|
||||
}
|
||||
//else { no shrinking yet; }
|
||||
return;
|
||||
}
|
||||
|
||||
void Segment::ensure(uint16_t newSize)
|
||||
{
|
||||
if (newSize < size)
|
||||
{
|
||||
return;
|
||||
}
|
||||
growByMin(newSize);
|
||||
}
|
||||
|
||||
void Segment::setLength(uint32_t newLength)
|
||||
{
|
||||
if (newLength > size)
|
||||
{
|
||||
ensure(length);
|
||||
}
|
||||
length = newLength;
|
||||
return;
|
||||
}
|
||||
|
||||
void Segment::push(uint32_t value)
|
||||
{
|
||||
this->set(length, value);
|
||||
}
|
||||
|
||||
uint32_t Segment::pop()
|
||||
{
|
||||
#ifdef DEBUG_BUILD
|
||||
printf("In Segment::pop\n");
|
||||
this->print();
|
||||
#endif
|
||||
|
||||
if (length > 0)
|
||||
{
|
||||
uint32_t value = data[length];
|
||||
data[length] = Segment::DefaultValue;
|
||||
--length;
|
||||
return value;
|
||||
}
|
||||
return Segment::DefaultValue;
|
||||
}
|
||||
|
||||
//this function removes an element at index i and shifts the rest of the elements to
|
||||
//left to fill the gap
|
||||
uint32_t Segment::remove(uint32_t i)
|
||||
{
|
||||
#ifdef DEBUG_BUILD
|
||||
printf("In Segment::remove index:%u\n", i);
|
||||
this->print();
|
||||
#endif
|
||||
if (i < length)
|
||||
{
|
||||
//value to return
|
||||
uint32_t ret = data[i];
|
||||
if (i + 1 < length)
|
||||
{
|
||||
//Move the rest of the elements to fill in the gap.
|
||||
memmove(data + i, data + i + 1, (length - i - 1) * sizeof(uint32_t));
|
||||
}
|
||||
length--;
|
||||
data[length] = Segment::DefaultValue;
|
||||
#ifdef DEBUG_BUILD
|
||||
printf("After Segment::remove index:%u\n", i);
|
||||
this->print();
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
return Segment::DefaultValue;
|
||||
}
|
||||
|
||||
//this function inserts element value at index i by shifting the rest of the elements right.
|
||||
void Segment::insert(uint32_t i, uint32_t value)
|
||||
{
|
||||
#ifdef DEBUG_BUILD
|
||||
printf("In Segment::insert index:%u value:%u\n", i, value);
|
||||
this->print();
|
||||
#endif
|
||||
|
||||
if (i < length)
|
||||
{
|
||||
ensure(length + 1);
|
||||
if (i + 1 < length)
|
||||
{
|
||||
//Move the rest of the elements to fill in the gap.
|
||||
memmove(data + i + 1, data + i, (length - i) * sizeof(uint32_t));
|
||||
}
|
||||
|
||||
data[i] = value;
|
||||
length++;
|
||||
}
|
||||
else
|
||||
{
|
||||
//This is insert beyond the length, just call set which will adjust the length
|
||||
set(i, value);
|
||||
}
|
||||
#ifdef DEBUG_BUILD
|
||||
printf("After Segment::insert index:%u\n", i);
|
||||
this->print();
|
||||
#endif
|
||||
}
|
||||
|
||||
void Segment::print()
|
||||
{
|
||||
printf("Segment: %x, length: %u, size: %u\n", data, (uint32_t)length, (uint32_t)size);
|
||||
for(uint32_t i = 0; i < size; i++)
|
||||
{
|
||||
printf("%d ",(uint32_t)data[i]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
bool Segment::isValidIndex(uint32_t i)
|
||||
{
|
||||
if (i > length)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void Segment::destroy()
|
||||
{
|
||||
#ifdef DEBUG_BUILD
|
||||
printf("In Segment::destroy\n");
|
||||
this->print();
|
||||
#endif
|
||||
length = size = 0;
|
||||
::operator delete(data);
|
||||
data = nullptr;
|
||||
}
|
||||
|
||||
void RefCollection::push(uint32_t x)
|
||||
{
|
||||
if (isRef()) incr(x);
|
||||
head.push(x);
|
||||
}
|
||||
|
||||
uint32_t RefCollection::pop()
|
||||
{
|
||||
uint32_t ret = head.pop();
|
||||
if (isRef())
|
||||
{
|
||||
incr(ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint32_t RefCollection::getAt(int i)
|
||||
{
|
||||
uint32_t tmp = head.get(i);
|
||||
if (isRef())
|
||||
{
|
||||
incr(tmp);
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
uint32_t RefCollection::removeAt(int i)
|
||||
{
|
||||
if (isRef())
|
||||
{
|
||||
decr(head.get(i));
|
||||
}
|
||||
return head.remove(i);
|
||||
}
|
||||
|
||||
void RefCollection::insertAt(int i, uint32_t value)
|
||||
{
|
||||
head.insert(i, value);
|
||||
if (isRef())
|
||||
{
|
||||
incr(value);
|
||||
}
|
||||
}
|
||||
|
||||
void RefCollection::setAt(int i, uint32_t value)
|
||||
{
|
||||
if (isRef())
|
||||
{
|
||||
if (head.isValidIndex((uint32_t)i))
|
||||
{
|
||||
decr(head.get(i));
|
||||
}
|
||||
incr(value);
|
||||
}
|
||||
head.set(i, value);
|
||||
}
|
||||
|
||||
int RefCollection::indexOf(uint32_t x, int start)
|
||||
{
|
||||
if (isString())
|
||||
{
|
||||
StringData *xx = (StringData*)x;
|
||||
uint32_t i = start;
|
||||
while(head.isValidIndex(i))
|
||||
{
|
||||
StringData *ee = (StringData*)head.get(i);
|
||||
if (ee == xx)
|
||||
{
|
||||
//handles ee being null
|
||||
return (int) i;
|
||||
}
|
||||
if (ee && xx->len == ee->len && memcmp(xx->data, ee->data, xx->len) == 0)
|
||||
{
|
||||
return (int)i;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32_t i = start;
|
||||
while(head.isValidIndex(i))
|
||||
{
|
||||
if (head.get(i) == x)
|
||||
{
|
||||
return (int)i;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int RefCollection::removeElement(uint32_t x)
|
||||
{
|
||||
int idx = indexOf(x, 0);
|
||||
if (idx >= 0) {
|
||||
removeAt(idx);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
namespace Coll0 {
|
||||
PXT_VTABLE_BEGIN(RefCollection, 0, 0)
|
||||
PXT_VTABLE_END
|
||||
}
|
||||
namespace Coll1 {
|
||||
PXT_VTABLE_BEGIN(RefCollection, 1, 0)
|
||||
PXT_VTABLE_END
|
||||
}
|
||||
namespace Coll3 {
|
||||
PXT_VTABLE_BEGIN(RefCollection, 3, 0)
|
||||
PXT_VTABLE_END
|
||||
}
|
||||
|
||||
RefCollection::RefCollection(uint16_t flags) : RefObject(0) {
|
||||
switch (flags) {
|
||||
case 0:
|
||||
vtable = PXT_VTABLE_TO_INT(&Coll0::RefCollection_vtable);
|
||||
break;
|
||||
case 1:
|
||||
vtable = PXT_VTABLE_TO_INT(&Coll1::RefCollection_vtable);
|
||||
break;
|
||||
case 3:
|
||||
vtable = PXT_VTABLE_TO_INT(&Coll3::RefCollection_vtable);
|
||||
break;
|
||||
default:
|
||||
error(ERR_SIZE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void RefCollection::destroy()
|
||||
{
|
||||
if (this->isRef())
|
||||
{
|
||||
for(uint32_t i = 0; i < this->head.getLength(); i++)
|
||||
{
|
||||
decr(this->head.get(i));
|
||||
}
|
||||
}
|
||||
this->head.destroy();
|
||||
delete this;
|
||||
}
|
||||
|
||||
void RefCollection::print()
|
||||
{
|
||||
printf("RefCollection %p r=%d flags=%d size=%d\n", this, refcnt, getFlags(), head.getLength());
|
||||
head.print();
|
||||
}
|
||||
|
||||
PXT_VTABLE_CTOR(RefAction) {}
|
||||
|
||||
// fields[] contain captured locals
|
||||
void RefAction::destroy()
|
||||
{
|
||||
for (int i = 0; i < this->reflen; ++i) {
|
||||
decr(fields[i]);
|
||||
fields[i] = 0;
|
||||
}
|
||||
//RefAction is allocated using placement new
|
||||
this->~RefAction();
|
||||
::operator delete(this);
|
||||
}
|
||||
|
||||
void RefAction::print()
|
||||
{
|
||||
printf("RefAction %p r=%d pc=0x%lx size=%d (%d refs)\n", this, refcnt, (const uint8_t*)func - (const uint8_t*)bytecode, len, reflen);
|
||||
}
|
||||
|
||||
void RefLocal::print()
|
||||
{
|
||||
printf("RefLocal %p r=%d v=%d\n", this, refcnt, v);
|
||||
}
|
||||
|
||||
void RefLocal::destroy()
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
|
||||
PXT_VTABLE_CTOR(RefLocal) {
|
||||
v = 0;
|
||||
}
|
||||
|
||||
PXT_VTABLE_CTOR(RefRefLocal) {
|
||||
v = 0;
|
||||
}
|
||||
|
||||
void RefRefLocal::print()
|
||||
{
|
||||
printf("RefRefLocal %p r=%d v=%p\n", this, refcnt, (void*)v);
|
||||
}
|
||||
|
||||
void RefRefLocal::destroy()
|
||||
{
|
||||
decr(v);
|
||||
delete this;
|
||||
}
|
||||
|
||||
PXT_VTABLE_BEGIN(RefMap, 0, RefMapMarker)
|
||||
PXT_VTABLE_END
|
||||
RefMap::RefMap() : PXT_VTABLE_INIT(RefMap) {}
|
||||
|
||||
void RefMap::destroy() {
|
||||
for (unsigned i = 0; i < data.size(); ++i) {
|
||||
if (data[i].key & 1) {
|
||||
decr(data[i].val);
|
||||
}
|
||||
data[i].val = 0;
|
||||
}
|
||||
data.resize(0);
|
||||
delete this;
|
||||
}
|
||||
|
||||
int RefMap::findIdx(uint32_t key) {
|
||||
for (unsigned i = 0; i < data.size(); ++i) {
|
||||
if (data[i].key >> 1 == key)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void RefMap::print()
|
||||
{
|
||||
printf("RefMap %p r=%d size=%d\n", this, refcnt, data.size());
|
||||
}
|
||||
|
||||
|
||||
#ifdef DEBUG_MEMLEAKS
|
||||
std::set<RefObject*> allptrs;
|
||||
void debugMemLeaks()
|
||||
{
|
||||
printf("LIVE POINTERS:\n");
|
||||
for(std::set<RefObject*>::iterator itr = allptrs.begin();itr!=allptrs.end();itr++)
|
||||
{
|
||||
(*itr)->print();
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
#else
|
||||
void debugMemLeaks() {}
|
||||
#endif
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// An adapter for the API expected by the run-time.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
map<pair<int, int>, Action> handlersMap;
|
||||
|
||||
MicroBitEvent lastEvent;
|
||||
|
||||
// We have the invariant that if [dispatchEvent] is registered against the DAL
|
||||
// for a given event, then [handlersMap] contains a valid entry for that
|
||||
// event.
|
||||
void dispatchEvent(MicroBitEvent e) {
|
||||
|
||||
lastEvent = e;
|
||||
|
||||
Action curr = handlersMap[{ e.source, e.value }];
|
||||
if (curr)
|
||||
runAction1(curr, e.value);
|
||||
|
||||
curr = handlersMap[{ e.source, MICROBIT_EVT_ANY }];
|
||||
if (curr)
|
||||
runAction1(curr, e.value);
|
||||
}
|
||||
|
||||
void registerWithDal(int id, int event, Action a) {
|
||||
Action prev = handlersMap[{ id, event }];
|
||||
if (prev)
|
||||
decr(prev);
|
||||
else
|
||||
uBit.messageBus.listen(id, event, dispatchEvent);
|
||||
incr(a);
|
||||
handlersMap[{ id, event }] = a;
|
||||
}
|
||||
|
||||
void fiberDone(void *a)
|
||||
{
|
||||
decr((Action)a);
|
||||
release_fiber();
|
||||
}
|
||||
|
||||
|
||||
void runInBackground(Action a) {
|
||||
if (a != 0) {
|
||||
incr(a);
|
||||
create_fiber((void(*)(void*))runAction0, (void*)a, fiberDone);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void error(ERROR code, int subcode)
|
||||
{
|
||||
printf("Error: %d [%d]\n", code, subcode);
|
||||
uBit.panic(42);
|
||||
}
|
||||
|
||||
uint16_t *bytecode;
|
||||
uint32_t *globals;
|
||||
int numGlobals;
|
||||
|
||||
uint32_t *allocate(uint16_t sz)
|
||||
{
|
||||
uint32_t *arr = new uint32_t[sz];
|
||||
memset(arr, 0, sz * 4);
|
||||
return arr;
|
||||
}
|
||||
|
||||
void checkStr(bool cond, const char *msg)
|
||||
{
|
||||
if (!cond) {
|
||||
while (true) {
|
||||
uBit.display.scroll(msg, 100);
|
||||
uBit.sleep(100);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int templateHash()
|
||||
{
|
||||
return ((int*)bytecode)[4];
|
||||
}
|
||||
|
||||
int programHash()
|
||||
{
|
||||
return ((int*)bytecode)[6];
|
||||
}
|
||||
|
||||
int getNumGlobals()
|
||||
{
|
||||
return bytecode[16];
|
||||
}
|
||||
|
||||
void exec_binary(int32_t *pc)
|
||||
{
|
||||
// XXX re-enable once the calibration code is fixed and [editor/embedded.ts]
|
||||
// properly prepends a call to [internal_main].
|
||||
// ::touch_develop::internal_main();
|
||||
|
||||
// unique group for radio based on source hash
|
||||
// ::touch_develop::micro_bit::radioDefaultGroup = programHash();
|
||||
|
||||
// repeat error 4 times and restart as needed
|
||||
microbit_panic_timeout(4);
|
||||
|
||||
int32_t ver = *pc++;
|
||||
checkStr(ver == 0x4209, ":( Bad runtime version");
|
||||
|
||||
bytecode = *((uint16_t**)pc++); // the actual bytecode is here
|
||||
globals = allocate(getNumGlobals());
|
||||
|
||||
// just compare the first word
|
||||
checkStr(((uint32_t*)bytecode)[0] == 0x923B8E70 &&
|
||||
templateHash() == *pc,
|
||||
":( Failed partial flash");
|
||||
|
||||
uint32_t startptr = (uint32_t)bytecode;
|
||||
startptr += 48; // header
|
||||
startptr |= 1; // Thumb state
|
||||
|
||||
((uint32_t (*)())startptr)();
|
||||
|
||||
#ifdef DEBUG_MEMLEAKS
|
||||
pxt::debugMemLeaks();
|
||||
#endif
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void start()
|
||||
{
|
||||
exec_binary((int32_t*)functionsAndBytecode);
|
||||
}
|
||||
}
|
||||
|
||||
// vim: ts=2 sw=2 expandtab
|
379
libs/core/pxt.h
Normal file
@ -0,0 +1,379 @@
|
||||
#ifndef __PXT_H
|
||||
#define __PXT_H
|
||||
|
||||
//#define DEBUG_MEMLEAKS 1
|
||||
|
||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||
|
||||
#include "MicroBit.h"
|
||||
#include "MicroBitImage.h"
|
||||
#include "ManagedString.h"
|
||||
#include "ManagedType.h"
|
||||
#include "ManagedBuffer.h"
|
||||
|
||||
#define printf(...) uBit.serial.printf(__VA_ARGS__)
|
||||
// #define printf(...)
|
||||
|
||||
#define intcheck(...) check(__VA_ARGS__)
|
||||
//#define intcheck(...) do {} while (0)
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <vector>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef DEBUG_MEMLEAKS
|
||||
#include <set>
|
||||
#endif
|
||||
|
||||
extern MicroBit uBit;
|
||||
|
||||
namespace pxt {
|
||||
typedef uint32_t Action;
|
||||
typedef uint32_t ImageLiteral;
|
||||
|
||||
|
||||
typedef enum {
|
||||
ERR_INVALID_BINARY_HEADER = 5,
|
||||
ERR_OUT_OF_BOUNDS = 8,
|
||||
ERR_REF_DELETED = 7,
|
||||
ERR_SIZE = 9,
|
||||
} ERROR;
|
||||
|
||||
extern const uint32_t functionsAndBytecode[];
|
||||
extern uint32_t *globals;
|
||||
extern uint16_t *bytecode;
|
||||
class RefRecord;
|
||||
|
||||
// Utility functions
|
||||
extern MicroBitEvent lastEvent;
|
||||
void registerWithDal(int id, int event, Action a);
|
||||
void runInBackground(Action a);
|
||||
uint32_t runAction3(Action a, int arg0, int arg1, int arg2);
|
||||
uint32_t runAction2(Action a, int arg0, int arg1);
|
||||
uint32_t runAction1(Action a, int arg0);
|
||||
uint32_t runAction0(Action a);
|
||||
Action mkAction(int reflen, int totallen, int startptr);
|
||||
void error(ERROR code, int subcode = 0);
|
||||
void exec_binary(uint16_t *pc);
|
||||
void start();
|
||||
void debugMemLeaks();
|
||||
// allocate [sz] words and clear them
|
||||
uint32_t *allocate(uint16_t sz);
|
||||
int templateHash();
|
||||
int programHash();
|
||||
uint32_t programSize();
|
||||
uint32_t afterProgramPage();
|
||||
int getNumGlobals();
|
||||
RefRecord* mkClassInstance(int vtableOffset);
|
||||
|
||||
// The standard calling convention is:
|
||||
// - when a pointer is loaded from a local/global/field etc, and incr()ed
|
||||
// (in other words, its presence on stack counts as a reference)
|
||||
// - after a function call, all pointers are popped off the stack and decr()ed
|
||||
// This does not apply to the RefRecord and st/ld(ref) methods - they unref()
|
||||
// the RefRecord* this.
|
||||
int incr(uint32_t e);
|
||||
void decr(uint32_t e);
|
||||
|
||||
inline void *ptrOfLiteral(int offset)
|
||||
{
|
||||
return &bytecode[offset];
|
||||
}
|
||||
|
||||
inline ImageData* imageBytes(int offset)
|
||||
{
|
||||
return (ImageData*)(void*)&bytecode[offset];
|
||||
}
|
||||
|
||||
// Checks if object has a VTable, or if its RefCounted* from the runtime.
|
||||
inline bool hasVTable(uint32_t e)
|
||||
{
|
||||
return (*((uint32_t*)e) & 1) == 0;
|
||||
}
|
||||
|
||||
inline void check(int cond, ERROR code, int subcode = 0)
|
||||
{
|
||||
if (!cond) error(code, subcode);
|
||||
}
|
||||
|
||||
|
||||
class RefObject;
|
||||
#ifdef DEBUG_MEMLEAKS
|
||||
extern std::set<RefObject*> allptrs;
|
||||
#endif
|
||||
|
||||
typedef void (*RefObjectMethod)(RefObject *self);
|
||||
typedef void *PVoid;
|
||||
typedef void **PPVoid;
|
||||
|
||||
const PPVoid RefMapMarker = (PPVoid)(void*)43;
|
||||
|
||||
struct VTable {
|
||||
uint16_t numbytes; // in the entire object, including the vtable pointer
|
||||
uint16_t userdata;
|
||||
PVoid *ifaceTable;
|
||||
PVoid methods[2]; // we only use up to two methods here; pxt will generate more
|
||||
// refmask sits at &methods[nummethods]
|
||||
};
|
||||
|
||||
const int vtableShift = 2;
|
||||
|
||||
// A base abstract class for ref-counted objects.
|
||||
class RefObject
|
||||
{
|
||||
public:
|
||||
uint16_t refcnt;
|
||||
uint16_t vtable;
|
||||
|
||||
RefObject(uint16_t vt)
|
||||
{
|
||||
refcnt = 2;
|
||||
vtable = vt;
|
||||
#ifdef DEBUG_MEMLEAKS
|
||||
allptrs.insert(this);
|
||||
#endif
|
||||
}
|
||||
|
||||
inline VTable *getVTable() {
|
||||
return (VTable*)(vtable << vtableShift);
|
||||
}
|
||||
|
||||
void destroy();
|
||||
void print();
|
||||
|
||||
// Call to disable pointer tracking on the current instance (in destructor or some other hack)
|
||||
inline void untrack() {
|
||||
#ifdef DEBUG_MEMLEAKS
|
||||
allptrs.erase(this);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Increment/decrement the ref-count. Decrementing to zero deletes the current object.
|
||||
inline void ref()
|
||||
{
|
||||
check(refcnt > 0, ERR_REF_DELETED);
|
||||
//printf("INCR "); this->print();
|
||||
refcnt += 2;
|
||||
}
|
||||
|
||||
inline void unref()
|
||||
{
|
||||
//printf("DECR "); this->print();
|
||||
refcnt -= 2;
|
||||
if (refcnt == 0) {
|
||||
destroy();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class Segment {
|
||||
private:
|
||||
uint32_t* data;
|
||||
uint16_t length;
|
||||
uint16_t size;
|
||||
|
||||
static const uint16_t MaxSize = 0xFFFF;
|
||||
static const uint32_t DefaultValue = 0x0;
|
||||
|
||||
static uint16_t growthFactor(uint16_t size);
|
||||
void growByMin(uint16_t minSize);
|
||||
void growBy(uint16_t newSize);
|
||||
void ensure(uint16_t newSize);
|
||||
|
||||
public:
|
||||
Segment() : data (nullptr), length(0), size(0) {};
|
||||
|
||||
uint32_t get(uint32_t i);
|
||||
void set(uint32_t i, uint32_t value);
|
||||
|
||||
uint32_t getLength() { return length;};
|
||||
void setLength(uint32_t newLength);
|
||||
|
||||
void push(uint32_t value);
|
||||
uint32_t pop();
|
||||
|
||||
uint32_t remove(uint32_t i);
|
||||
void insert(uint32_t i, uint32_t value);
|
||||
|
||||
bool isValidIndex(uint32_t i);
|
||||
|
||||
void destroy();
|
||||
|
||||
void print();
|
||||
};
|
||||
|
||||
// A ref-counted collection of either primitive or ref-counted objects (String, Image,
|
||||
// user-defined record, another collection)
|
||||
class RefCollection
|
||||
: public RefObject
|
||||
{
|
||||
private:
|
||||
Segment head;
|
||||
public:
|
||||
// 1 - collection of refs (need decr)
|
||||
// 2 - collection of strings (in fact we always have 3, never 2 alone)
|
||||
inline uint32_t getFlags() { return getVTable()->userdata; }
|
||||
inline bool isRef() { return getFlags() & 1; }
|
||||
inline bool isString() { return getFlags() & 2; }
|
||||
|
||||
RefCollection(uint16_t f);
|
||||
|
||||
void destroy();
|
||||
void print();
|
||||
|
||||
uint32_t length() { return head.getLength();}
|
||||
void setLength(uint32_t newLength) { head.setLength(newLength); }
|
||||
|
||||
void push(uint32_t x);
|
||||
uint32_t pop();
|
||||
uint32_t getAt(int i);
|
||||
void setAt(int i, uint32_t x);
|
||||
//removes the element at index i and shifts the other elements left
|
||||
uint32_t removeAt(int i);
|
||||
//inserts the element at index i and moves the other elements right.
|
||||
void insertAt(int i, uint32_t x);
|
||||
|
||||
int indexOf(uint32_t x, int start);
|
||||
int removeElement(uint32_t x);
|
||||
};
|
||||
|
||||
struct MapEntry {
|
||||
uint32_t key;
|
||||
uint32_t val;
|
||||
};
|
||||
|
||||
class RefMap
|
||||
: public RefObject
|
||||
{
|
||||
public:
|
||||
std::vector<MapEntry> data;
|
||||
|
||||
RefMap();
|
||||
void destroy();
|
||||
void print();
|
||||
int findIdx(uint32_t key);
|
||||
};
|
||||
|
||||
// A ref-counted, user-defined JS object.
|
||||
class RefRecord
|
||||
: public RefObject
|
||||
{
|
||||
public:
|
||||
// The object is allocated, so that there is space at the end for the fields.
|
||||
uint32_t fields[];
|
||||
|
||||
RefRecord(uint16_t v) : RefObject(v) {}
|
||||
|
||||
uint32_t ld(int idx);
|
||||
uint32_t ldref(int idx);
|
||||
void st(int idx, uint32_t v);
|
||||
void stref(int idx, uint32_t v);
|
||||
};
|
||||
|
||||
// these are needed when constructing vtables for user-defined classes
|
||||
void RefRecord_destroy(RefRecord *r);
|
||||
void RefRecord_print(RefRecord *r);
|
||||
|
||||
class RefAction;
|
||||
typedef uint32_t (*ActionCB)(uint32_t *captured, uint32_t arg0, uint32_t arg1, uint32_t arg2);
|
||||
|
||||
// Ref-counted function pointer. It's currently always a ()=>void procedure pointer.
|
||||
class RefAction
|
||||
: public RefObject
|
||||
{
|
||||
public:
|
||||
// This is the same as for RefRecord.
|
||||
uint8_t len;
|
||||
uint8_t reflen;
|
||||
ActionCB func; // The function pointer
|
||||
// fields[] contain captured locals
|
||||
uint32_t fields[];
|
||||
|
||||
void destroy();
|
||||
void print();
|
||||
|
||||
RefAction();
|
||||
|
||||
inline void stCore(int idx, uint32_t v)
|
||||
{
|
||||
//printf("ST [%d] = %d ", idx, v); this->print();
|
||||
intcheck(0 <= idx && idx < len, ERR_OUT_OF_BOUNDS, 10);
|
||||
intcheck(fields[idx] == 0, ERR_OUT_OF_BOUNDS, 11); // only one assignment permitted
|
||||
fields[idx] = v;
|
||||
}
|
||||
|
||||
inline uint32_t runCore(int arg0, int arg1, int arg2) // internal; use runAction*() functions
|
||||
{
|
||||
this->ref();
|
||||
uint32_t r = this->func(&this->fields[0], arg0, arg1, arg2);
|
||||
this->unref();
|
||||
return r;
|
||||
}
|
||||
};
|
||||
|
||||
// These two are used to represent locals written from inside inline functions
|
||||
class RefLocal
|
||||
: public RefObject
|
||||
{
|
||||
public:
|
||||
uint32_t v;
|
||||
void destroy();
|
||||
void print();
|
||||
RefLocal();
|
||||
};
|
||||
|
||||
class RefRefLocal
|
||||
: public RefObject
|
||||
{
|
||||
public:
|
||||
uint32_t v;
|
||||
void destroy();
|
||||
void print();
|
||||
RefRefLocal();
|
||||
};
|
||||
}
|
||||
|
||||
using namespace pxt;
|
||||
MicroBitPin *getPin(int id);
|
||||
typedef ImageData* Image;
|
||||
typedef BufferData* Buffer;
|
||||
|
||||
// The ARM Thumb generator in the JavaScript code is parsing
|
||||
// the hex file and looks for the magic numbers as present here.
|
||||
//
|
||||
// Then it fetches function pointer addresses from there.
|
||||
|
||||
#define PXT_SHIMS_BEGIN \
|
||||
namespace pxt { \
|
||||
const uint32_t functionsAndBytecode[] __attribute__((aligned(0x20))) = { \
|
||||
0x08010801, 0x42424242, 0x08010801, 0x8de9d83e,
|
||||
|
||||
#define PXT_SHIMS_END }; }
|
||||
|
||||
#pragma GCC diagnostic ignored "-Wpmf-conversions"
|
||||
|
||||
#define PXT_VTABLE_TO_INT(vt) ((uint32_t)(vt) >> vtableShift)
|
||||
#define PXT_VTABLE_BEGIN(classname, flags, iface) \
|
||||
const VTable classname ## _vtable \
|
||||
__attribute__((aligned(1 << vtableShift))) \
|
||||
= { \
|
||||
sizeof(classname), \
|
||||
flags, \
|
||||
iface, \
|
||||
{ \
|
||||
(void*)&classname::destroy, \
|
||||
(void*)&classname::print,
|
||||
|
||||
#define PXT_VTABLE_END } };
|
||||
|
||||
#define PXT_VTABLE_INIT(classname) \
|
||||
RefObject(PXT_VTABLE_TO_INT(&classname ## _vtable))
|
||||
|
||||
#define PXT_VTABLE_CTOR(classname) \
|
||||
PXT_VTABLE_BEGIN(classname, 0, 0) PXT_VTABLE_END \
|
||||
classname::classname() : PXT_VTABLE_INIT(classname)
|
||||
|
||||
#endif
|
||||
|
||||
// vim: ts=2 sw=2 expandtab
|
@ -4,11 +4,14 @@
|
||||
"installedVersion": "tsmdvf",
|
||||
"files": [
|
||||
"README.md",
|
||||
"ManagedBuffer.cpp",
|
||||
"ManagedBuffer.h",
|
||||
"pxt.cpp",
|
||||
"pxt.h",
|
||||
"dal.d.ts",
|
||||
"enums.d.ts",
|
||||
"shims.d.ts",
|
||||
"pxt-core.d.ts",
|
||||
"ksbit.h",
|
||||
"core.cpp",
|
||||
"pxt-helpers.ts",
|
||||
"helpers.ts",
|
||||
@ -40,8 +43,7 @@
|
||||
"public": true,
|
||||
"dependencies": {},
|
||||
"yotta": {
|
||||
"configIsJustDefaults": true,
|
||||
"config": {
|
||||
"optionalConfig": {
|
||||
"microbit-dal": {
|
||||
"bluetooth": {
|
||||
"enabled": 0
|
||||
@ -49,4 +51,4 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,20 +1,19 @@
|
||||
#include "ksbit.h"
|
||||
#include "pxt.h"
|
||||
|
||||
enum SerialPin {
|
||||
P0 = MICROBIT_ID_IO_P0,
|
||||
P1 = MICROBIT_ID_IO_P1,
|
||||
P2 = MICROBIT_ID_IO_P2,
|
||||
//P8 = MICROBIT_ID_IO_P8,
|
||||
//P12 = MICROBIT_ID_IO_P12,
|
||||
//P13 = MICROBIT_ID_IO_P13,
|
||||
//P14 = MICROBIT_ID_IO_P14,
|
||||
//P15 = MICROBIT_ID_IO_P15,
|
||||
//P16 = MICROBIT_ID_IO_P16
|
||||
C16 = MICROBIT_ID_IO_P2,
|
||||
C17 = MICROBIT_ID_IO_P8,
|
||||
P0 = MICROBIT_ID_IO_P12,
|
||||
P1 = MICROBIT_ID_IO_P0,
|
||||
P2 = MICROBIT_ID_IO_P1,
|
||||
P3 = MICROBIT_ID_IO_P16,
|
||||
};
|
||||
|
||||
enum BaudRate {
|
||||
//% block=115200
|
||||
BaudRate115200 = 115200,
|
||||
//% block=57600
|
||||
BaudRate56700 = 57600,
|
||||
//% block=9600
|
||||
BaudRate9600 = 9600
|
||||
};
|
||||
@ -51,24 +50,27 @@ namespace serial {
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads a line of text from the serial port.
|
||||
*/
|
||||
//% help=serial/read-line
|
||||
//% blockId=serial_read_line block="serial|read line"
|
||||
//% weight=20 blockGap=8
|
||||
StringData* readLine() {
|
||||
return readUntil(ManagedString("\n").leakData());
|
||||
* Reads the buffered received data as a string
|
||||
*/
|
||||
//% blockId=serial_read_buffer block="serial|read string"
|
||||
//% weight=18
|
||||
StringData* readString() {
|
||||
int n = uBit.serial.getRxBufferSize();
|
||||
if (n == 0) return ManagedString("").leakData();
|
||||
return ManagedString(uBit.serial.read(n, MicroBitSerialMode::ASYNC)).leakData();
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers an event to be fired when one of the delimiter is matched
|
||||
* @param delimiters the characters to match received characters against. eg:"\n"
|
||||
* Registers an event to be fired when one of the delimiter is matched.
|
||||
* @param delimiters the characters to match received characters against.
|
||||
*/
|
||||
// help=serial/on-data-received
|
||||
// weight=18
|
||||
//% help=serial/on-data-received
|
||||
//% weight=18 blockId=serial_on_data_received block="serial|on data received %delimiters=serial_delimiter_conv"
|
||||
void onDataReceived(StringData* delimiters, Action body) {
|
||||
uBit.serial.eventOn(ManagedString(delimiters));
|
||||
registerWithDal(MICROBIT_ID_SERIAL, MICROBIT_SERIAL_EVT_DELIM_MATCH, body);
|
||||
// lazy initialization of serial buffers
|
||||
uBit.serial.read(MicroBitSerialMode::ASYNC);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -83,16 +85,19 @@ namespace serial {
|
||||
|
||||
/**
|
||||
* Dynamically configuring the serial instance to use pins other than USBTX and USBRX.
|
||||
* @param tx the new transmission pins
|
||||
* @param rx the new reception pin
|
||||
* @param baud the new baud rate. eg: 115200
|
||||
* @param tx the new transmission pins, eg: SerialPin.P0
|
||||
* @param rx the new reception pin, eg: SerialPin.P1
|
||||
* @param rate the new baud rate. eg: 115200
|
||||
*/
|
||||
//% weight=10
|
||||
//% help=serial/redirect-to
|
||||
//% blockId=serial_redirect block="serial|redirect to|TX %tx|RX %rx|at baud rate %rate"
|
||||
//% blockExternalInputs=1
|
||||
void redirect(SerialPin tx, SerialPin rx, BaudRate rate) {
|
||||
uBit.serial.redirect((PinName)tx, (PinName)rx);
|
||||
MicroBitPin* txp = getPin(tx); if (!tx) return;
|
||||
MicroBitPin* rxp = getPin(rx); if (!rx) return;
|
||||
|
||||
uBit.serial.redirect(txp->name, rxp->name);
|
||||
uBit.serial.baud((int)rate);
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Reading and writing data over a serial connection.
|
||||
*/
|
||||
//% weight=2 color=#002050
|
||||
//% weight=2 color=#002050 icon="\uf287"
|
||||
//% advanced=true
|
||||
namespace serial {
|
||||
/**
|
||||
@ -38,20 +38,20 @@ namespace serial {
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers an event to be fired when a line has been received
|
||||
*/
|
||||
// help=serial/on-line-received
|
||||
// blockId=serial_on_line_received block="serial on line received"
|
||||
// weight=21 blockGap=8
|
||||
export function onLineReceived(body: Action): void {
|
||||
// serial.onDataReceived("\n", body);
|
||||
* Reads a line of text from the serial port.
|
||||
*/
|
||||
//% help=serial/read-line
|
||||
//% blockId=serial_read_line block="serial|read line"
|
||||
//% weight=20 blockGap=8
|
||||
export function readLine(): string {
|
||||
return serial.readUntil(delimiters(Delimiters.NewLine));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the delimiter corresponding string
|
||||
*/
|
||||
//% blockId="serial_delimiter_conv" block="%del"
|
||||
//% weight=1
|
||||
//% weight=1 blockHidden=true
|
||||
export function delimiters(del: Delimiters): string {
|
||||
// even though it might not look like, this is more
|
||||
// (memory) efficient than the C++ implementation, because the
|
||||
|
128
libs/core/shims.d.ts
vendored
@ -4,7 +4,7 @@
|
||||
/**
|
||||
* Creation, manipulation and display of LED images.
|
||||
*/
|
||||
//% color=#5C2D91 weight=31
|
||||
//% color=#5C2D91 weight=31 icon="\uf03e"
|
||||
//% advanced=true
|
||||
declare namespace images {
|
||||
|
||||
@ -40,8 +40,8 @@ declare interface Image {
|
||||
*/
|
||||
//% help=images/show-image weight=80 blockNamespace=images
|
||||
//% blockId=device_show_image_offset block="show image %sprite|at offset %offset" blockGap=8
|
||||
//% parts="ledmatrix" shim=ImageMethods::showImage
|
||||
showImage(xOffset: number): void;
|
||||
//% parts="ledmatrix" async interval.defl=400 shim=ImageMethods::showImage
|
||||
showImage(xOffset: number, interval?: number): void;
|
||||
|
||||
/**
|
||||
* Draws the ``index``-th frame of the image on the screen.
|
||||
@ -53,7 +53,7 @@ declare interface Image {
|
||||
|
||||
/**
|
||||
* Scrolls an image .
|
||||
* @param frameOffset x offset moved on each animation step, eg: 5, 1, -1
|
||||
* @param frameOffset x offset moved on each animation step, eg: 1, 2, 5
|
||||
* @param interval time between each animation step in milli seconds, eg: 200
|
||||
*/
|
||||
//% help=images/show-image weight=79 async blockNamespace=images
|
||||
@ -118,21 +118,21 @@ declare interface Image {
|
||||
* @param frame TODO
|
||||
*/
|
||||
//% weight=70 help=images/show-frame
|
||||
//% parts="ledmatrix" shim=ImageMethods::showFrame
|
||||
showFrame(frame: number): void;
|
||||
//% parts="ledmatrix" interval.defl=400 shim=ImageMethods::showFrame
|
||||
showFrame(frame: number, interval?: number): void;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Provides access to basic micro:bit functionality.
|
||||
*/
|
||||
//% color=#54C9C9 weight=100
|
||||
//% color=#54C9C9 weight=100 icon="\uf00a"
|
||||
declare namespace basic {
|
||||
|
||||
/**
|
||||
* Sets the color on the build-in LED. Set to 0 to turn off.
|
||||
*/
|
||||
//% blockId=device_set_led_color block="set led to %color=color_id" icon="\uf00a"
|
||||
//% blockId=device_set_led_color block="set led to %color=color_id"
|
||||
//% weight=50 shim=basic::setLedColor
|
||||
function setLedColor(color: number): void;
|
||||
|
||||
@ -142,7 +142,7 @@ declare namespace basic {
|
||||
*/
|
||||
//% help=basic/show-number
|
||||
//% weight=96
|
||||
//% blockId=device_show_number block="show|number %number" blockGap=8 icon="\uf1ec"
|
||||
//% blockId=device_show_number block="show|number %number" blockGap=8
|
||||
//% async
|
||||
//% parts="ledmatrix" interval.defl=150 shim=basic::showNumber
|
||||
function showNumber(value: number, interval?: number): void;
|
||||
@ -156,7 +156,7 @@ declare namespace basic {
|
||||
//% weight=95 blockGap=8
|
||||
//% imageLiteral=1 async
|
||||
//% blockId=device_show_leds
|
||||
//% block="show leds" icon="\uf00a"
|
||||
//% block="show leds"
|
||||
//% parts="ledmatrix" interval.defl=400 shim=basic::showLeds
|
||||
function showLeds(leds: string, interval?: number): void;
|
||||
|
||||
@ -167,7 +167,7 @@ declare namespace basic {
|
||||
*/
|
||||
//% help=basic/show-string
|
||||
//% weight=87 blockGap=8
|
||||
//% block="show|string %text" icon="\uf031"
|
||||
//% block="show|string %text"
|
||||
//% async
|
||||
//% blockId=device_print_message
|
||||
//% parts="ledmatrix" interval.defl=150 shim=basic::showString
|
||||
@ -177,7 +177,7 @@ declare namespace basic {
|
||||
* Turn off all LEDs
|
||||
*/
|
||||
//% help=basic/clear-screen weight=79
|
||||
//% blockId=device_clear_display block="clear screen" icon="\uf12d"
|
||||
//% blockId=device_clear_display block="clear screen"
|
||||
//% parts="ledmatrix" shim=basic::clearScreen
|
||||
function clearScreen(): void;
|
||||
|
||||
@ -203,7 +203,7 @@ declare namespace basic {
|
||||
* @param body code to execute
|
||||
*/
|
||||
//% help=basic/forever weight=55 blockGap=8
|
||||
//% blockId=device_forever block="forever" icon="\uf01e" shim=basic::forever
|
||||
//% blockId=device_forever block="forever" shim=basic::forever
|
||||
function forever(a: () => void): void;
|
||||
|
||||
/**
|
||||
@ -212,13 +212,13 @@ declare namespace basic {
|
||||
*/
|
||||
//% help=basic/pause weight=54
|
||||
//% async block="pause (ms) %pause"
|
||||
//% blockId=device_pause icon="\uf110" shim=basic::pause
|
||||
//% blockId=device_pause shim=basic::pause
|
||||
function pause(ms: number): void;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//% color=#C90072 weight=99
|
||||
//% color=#C90072 weight=99 icon="\uf192"
|
||||
declare namespace input {
|
||||
|
||||
/**
|
||||
@ -227,7 +227,7 @@ declare namespace input {
|
||||
* @param body TODO
|
||||
*/
|
||||
//% help=input/on-button-pressed weight=85 blockGap=8
|
||||
//% blockId=device_button_event block="on button|%NAME|pressed" icon="\uf192"
|
||||
//% blockId=device_button_event block="on button|%NAME|pressed"
|
||||
//% parts="buttonpair" shim=input::onButtonPressed
|
||||
function onButtonPressed(button: Button, body: () => void): void;
|
||||
|
||||
@ -236,7 +236,7 @@ declare namespace input {
|
||||
* @param body TODO
|
||||
*/
|
||||
//% help=input/on-gesture weight=84 blockGap=8
|
||||
//% blockId=device_gesture_event block="on |%NAME" icon="\uf135"
|
||||
//% blockId=device_gesture_event block="on |%NAME"
|
||||
//% parts="accelerometer" shim=input::onGesture
|
||||
function onGesture(gesture: Gesture, body: () => void): void;
|
||||
|
||||
@ -246,7 +246,7 @@ declare namespace input {
|
||||
* @param body the code to run when the pin is pressed
|
||||
*/
|
||||
//% help=input/on-pin-pressed weight=83
|
||||
//% blockId=device_pin_event block="on pin %NAME|pressed" icon="\uf094" shim=input::onPinPressed
|
||||
//% blockId=device_pin_event block="on pin %NAME|pressed" shim=input::onPinPressed
|
||||
function onPinPressed(name: TouchPin, body: () => void): void;
|
||||
|
||||
/**
|
||||
@ -255,7 +255,7 @@ declare namespace input {
|
||||
* @param body the code to run when the pin is released
|
||||
*/
|
||||
//% help=input/on-pin-released weight=6 blockGap=8
|
||||
//% blockId=device_pin_released block="on pin %NAME|released" icon="\uf094"
|
||||
//% blockId=device_pin_released block="on pin %NAME|released"
|
||||
//% advanced=true shim=input::onPinReleased
|
||||
function onPinReleased(name: TouchPin, body: () => void): void;
|
||||
|
||||
@ -265,7 +265,7 @@ declare namespace input {
|
||||
//% help=input/button-is-pressed weight=60
|
||||
//% block="button|%NAME|is pressed"
|
||||
//% blockId=device_get_button2
|
||||
//% icon="\uf192" blockGap=8
|
||||
//% blockGap=8
|
||||
//% parts="buttonpair" shim=input::buttonIsPressed
|
||||
function buttonIsPressed(button: Button): boolean;
|
||||
|
||||
@ -274,7 +274,7 @@ declare namespace input {
|
||||
* @param name pin used to detect the touch
|
||||
*/
|
||||
//% help=input/pin-is-pressed weight=58
|
||||
//% blockId="device_pin_is_pressed" block="pin %NAME|is pressed" icon="\uf094"
|
||||
//% blockId="device_pin_is_pressed" block="pin %NAME|is pressed"
|
||||
//% blockGap=8 shim=input::pinIsPressed
|
||||
function pinIsPressed(name: TouchPin): boolean;
|
||||
|
||||
@ -282,7 +282,7 @@ declare namespace input {
|
||||
* Get the acceleration value in milli-gravitys (when the board is laying flat with the screen up, x=0, y=0 and z=-1024)
|
||||
* @param dimension TODO
|
||||
*/
|
||||
//% help=input/acceleration weight=58 icon="\uf135"
|
||||
//% help=input/acceleration weight=58
|
||||
//% blockId=device_acceleration block="acceleration (mg)|%NAME" blockGap=8
|
||||
//% parts="accelerometer" shim=input::acceleration
|
||||
function acceleration(dimension: Dimension): number;
|
||||
@ -291,7 +291,7 @@ declare namespace input {
|
||||
* Reads the light level applied to the LED screen in a range from ``0`` (dark) to ``255`` bright.
|
||||
*/
|
||||
//% help=input/light-level weight=57
|
||||
//% blockId=device_get_light_level block="light level" blockGap=8 icon="\uf185"
|
||||
//% blockId=device_get_light_level block="light level" blockGap=8
|
||||
//% parts="ledmatrix" shim=input::lightLevel
|
||||
function lightLevel(): number;
|
||||
|
||||
@ -299,7 +299,7 @@ declare namespace input {
|
||||
* Get the current compass heading in degrees.
|
||||
*/
|
||||
//% help=input/compass-heading
|
||||
//% weight=56 icon="\uf14e"
|
||||
//% weight=56
|
||||
//% blockId=device_heading block="compass heading (°)" blockGap=8
|
||||
//% parts="compass" shim=input::compassHeading
|
||||
function compassHeading(): number;
|
||||
@ -307,7 +307,7 @@ declare namespace input {
|
||||
/**
|
||||
* Gets the temperature in Celsius degrees (°C).
|
||||
*/
|
||||
//% weight=55 icon="\uf06d"
|
||||
//% weight=55
|
||||
//% help=input/temperature
|
||||
//% blockId=device_temperature block="temperature (°C)" blockGap=8
|
||||
//% parts="thermometer" shim=input::temperature
|
||||
@ -318,7 +318,7 @@ declare namespace input {
|
||||
* @param kind TODO
|
||||
*/
|
||||
//% help=input/rotation weight=52
|
||||
//% blockId=device_get_rotation block="rotation (°)|%NAME" blockGap=8 icon="\uf197"
|
||||
//% blockId=device_get_rotation block="rotation (°)|%NAME" blockGap=8
|
||||
//% parts="accelerometer" advanced=true shim=input::rotation
|
||||
function rotation(kind: Rotation): number;
|
||||
|
||||
@ -327,7 +327,7 @@ declare namespace input {
|
||||
* @param dimension TODO
|
||||
*/
|
||||
//% help=input/magnetic-force weight=51
|
||||
//% blockId=device_get_magnetic_force block="magnetic force (µT)|%NAME" blockGap=8 icon="\uf076"
|
||||
//% blockId=device_get_magnetic_force block="magnetic force (µT)|%NAME" blockGap=8
|
||||
//% parts="compass"
|
||||
//% advanced=true shim=input::magneticForce
|
||||
function magneticForce(dimension: Dimension): number;
|
||||
@ -336,7 +336,7 @@ declare namespace input {
|
||||
* Gets the number of milliseconds elapsed since power on.
|
||||
*/
|
||||
//% help=input/running-time weight=50
|
||||
//% blockId=device_get_running_time block="running time (ms)" icon="\uf017"
|
||||
//% blockId=device_get_running_time block="running time (ms)"
|
||||
//% advanced=true shim=input::runningTime
|
||||
function runningTime(): number;
|
||||
|
||||
@ -351,7 +351,7 @@ declare namespace input {
|
||||
* @param range a value describe the maximum strengh of acceleration measured
|
||||
*/
|
||||
//% help=input/set-accelerometer-range
|
||||
//% blockId=device_set_accelerometer_range block="set accelerometer|range %range" icon="\uf135"
|
||||
//% blockId=device_set_accelerometer_range block="set accelerometer|range %range"
|
||||
//% weight=5
|
||||
//% parts="accelerometer"
|
||||
//% advanced=true shim=input::setAccelerometerRange
|
||||
@ -432,7 +432,7 @@ declare namespace control {
|
||||
|
||||
|
||||
|
||||
//% color=#8169E6 weight=35
|
||||
//% color=#8169E6 weight=35 icon="\uf205"
|
||||
declare namespace led {
|
||||
|
||||
/**
|
||||
@ -441,7 +441,7 @@ declare namespace led {
|
||||
* @param y TODO
|
||||
*/
|
||||
//% help=led/plot weight=78
|
||||
//% blockId=device_plot block="plot|x %x|y %y" icon="\uf205" blockGap=8
|
||||
//% blockId=device_plot block="plot|x %x|y %y" blockGap=8
|
||||
//% parts="ledmatrix" shim=led::plot
|
||||
function plot(x: number, y: number): void;
|
||||
|
||||
@ -451,7 +451,7 @@ declare namespace led {
|
||||
* @param y TODO
|
||||
*/
|
||||
//% help=led/unplot weight=77
|
||||
//% blockId=device_unplot block="unplot|x %x|y %y" icon="\uf204" blockGap=8
|
||||
//% blockId=device_unplot block="unplot|x %x|y %y" blockGap=8
|
||||
//% parts="ledmatrix" shim=led::unplot
|
||||
function unplot(x: number, y: number): void;
|
||||
|
||||
@ -461,7 +461,7 @@ declare namespace led {
|
||||
* @param y TODO
|
||||
*/
|
||||
//% help=led/point weight=76
|
||||
//% blockId=device_point block="point|x %x|y %y" icon="\uf10c"
|
||||
//% blockId=device_point block="point|x %x|y %y"
|
||||
//% parts="ledmatrix" shim=led::point
|
||||
function point(x: number, y: number): boolean;
|
||||
|
||||
@ -469,7 +469,7 @@ declare namespace led {
|
||||
* Get the screen brightness from 0 (off) to 255 (full bright).
|
||||
*/
|
||||
//% help=led/brightness weight=60
|
||||
//% blockId=device_get_brightness block="brightness" icon="\uf042" blockGap=8
|
||||
//% blockId=device_get_brightness block="brightness" blockGap=8
|
||||
//% parts="ledmatrix"
|
||||
//% advanced=true shim=led::brightness
|
||||
function brightness(): number;
|
||||
@ -479,7 +479,7 @@ declare namespace led {
|
||||
* @param value the brightness value, eg:255, 127, 0
|
||||
*/
|
||||
//% help=led/set-brightness weight=59
|
||||
//% blockId=device_set_brightness block="set brightness %value" icon="\uf042"
|
||||
//% blockId=device_set_brightness block="set brightness %value"
|
||||
//% parts="ledmatrix"
|
||||
//% advanced=true shim=led::setBrightness
|
||||
function setBrightness(value: number): void;
|
||||
@ -488,7 +488,7 @@ declare namespace led {
|
||||
* Cancels the current animation and clears other pending animations.
|
||||
*/
|
||||
//% weight=50 help=led/stop-animation
|
||||
//% blockId=device_stop_animation block="stop animation" icon="\uf04d"
|
||||
//% blockId=device_stop_animation block="stop animation"
|
||||
//% parts="ledmatrix"
|
||||
//% advanced=true shim=led::stopAnimation
|
||||
function stopAnimation(): void;
|
||||
@ -504,7 +504,7 @@ declare namespace led {
|
||||
/**
|
||||
* Turns on or off the display
|
||||
*/
|
||||
//% help=led/enable blockId=device_led_enable icon="\uf04d"
|
||||
//% help=led/enable blockId=device_led_enable
|
||||
//% advanced=true parts="ledmatrix" shim=led::enable
|
||||
function enable(on: boolean): void;
|
||||
|
||||
@ -520,7 +520,7 @@ declare namespace led {
|
||||
/**
|
||||
* Blocks to control the onboard motors
|
||||
*/
|
||||
//% color=#008272 weight=30
|
||||
//% color=#008272 weight=30 icon="\uf1b9"
|
||||
declare namespace motors {
|
||||
|
||||
/**
|
||||
@ -554,17 +554,8 @@ declare namespace music {
|
||||
*/
|
||||
//% help=music/play-tone weight=90
|
||||
//% blockId=device_play_note block="play|tone %note=device_note|for %duration=device_beat" icon="\uf025" blockGap=8
|
||||
//% parts="speaker" shim=music::playTone
|
||||
function playTone(freqency: number, ms: number): void;
|
||||
|
||||
/**
|
||||
* Plays a tone through ``speaker``.
|
||||
* @param frequency pitch of the tone to play in Hertz (Hz)
|
||||
*/
|
||||
//% help=music/ring-tone weight=80
|
||||
//% blockId=device_ring block="ring tone (Hz)|%note=device_note" icon="\uf025" blockGap=8
|
||||
//% parts="speaker" shim=music::ringTone
|
||||
function ringTone(frequency: number): void;
|
||||
//% parts="speaker" async shim=music::playTone
|
||||
function playTone(frequency: number, ms: number): void;
|
||||
}
|
||||
declare namespace pins {
|
||||
|
||||
@ -660,7 +651,8 @@ declare namespace pins {
|
||||
* Sets the pin used when using `pins->analog pitch`.
|
||||
* @param name TODO
|
||||
*/
|
||||
//% help=pins/analog-set-pitch weight=12 shim=pins::analogSetPitchPin
|
||||
//% blockId=device_analog_set_pitch_pin block="analog set pitch pin %name"
|
||||
//% help=pins/analog-set-pitch weight=3 advanced=true shim=pins::analogSetPitchPin
|
||||
function analogSetPitchPin(name: AnalogPin): void;
|
||||
|
||||
/**
|
||||
@ -668,7 +660,8 @@ declare namespace pins {
|
||||
* @param frequency TODO
|
||||
* @param ms TODO
|
||||
*/
|
||||
//% help=pins/analog-pitch weight=14 async shim=pins::analogPitch
|
||||
//% blockId=device_analog_pitch block="analog pitch %frequency|for (ms) %ms"
|
||||
//% help=pins/analog-pitch weight=4 async advanced=true blockGap=8 shim=pins::analogPitch
|
||||
function analogPitch(frequency: number, ms: number): void;
|
||||
|
||||
/**
|
||||
@ -680,6 +673,16 @@ declare namespace pins {
|
||||
//% blockId=device_set_pull block="set pull|pin %pin|to %pull" shim=pins::setPull
|
||||
function setPull(name: DigitalPin, pull: PinPullMode): void;
|
||||
|
||||
/**
|
||||
* Configures the events emitted by this pin. Events can be subscribed to
|
||||
* using ``control.onEvent()``.
|
||||
* @param name pin to set the event mode on, eg: DigitalPin.P0
|
||||
* @param type the type of events for this pin to emit, eg: PinEventType.Edge
|
||||
*/
|
||||
//% help=pins/set-events weight=4 advanced=true
|
||||
//% blockId=device_set_pin_events block="set pin %pin|to emit %type|events" shim=pins::setEvents
|
||||
function setEvents(name: DigitalPin, type: PinEventType): void;
|
||||
|
||||
/**
|
||||
* Create a new zero-initialized buffer.
|
||||
* @param size number of bytes in the buffer
|
||||
@ -724,12 +727,19 @@ declare namespace serial {
|
||||
function readUntil(delimiter: string): string;
|
||||
|
||||
/**
|
||||
* Reads a line of text from the serial port.
|
||||
* Reads the buffered received data as a string
|
||||
*/
|
||||
//% help=serial/read-line
|
||||
//% blockId=serial_read_line block="serial|read line"
|
||||
//% weight=20 blockGap=8 shim=serial::readLine
|
||||
function readLine(): string;
|
||||
//% blockId=serial_read_buffer block="serial|read string"
|
||||
//% weight=18 shim=serial::readString
|
||||
function readString(): string;
|
||||
|
||||
/**
|
||||
* Registers an event to be fired when one of the delimiter is matched.
|
||||
* @param delimiters the characters to match received characters against.
|
||||
*/
|
||||
//% help=serial/on-data-received
|
||||
//% weight=18 blockId=serial_on_data_received block="serial|on data received %delimiters=serial_delimiter_conv" shim=serial::onDataReceived
|
||||
function onDataReceived(delimiters: string, body: () => void): void;
|
||||
|
||||
/**
|
||||
* Sends a piece of text through Serial connection.
|
||||
@ -741,9 +751,9 @@ declare namespace serial {
|
||||
|
||||
/**
|
||||
* Dynamically configuring the serial instance to use pins other than USBTX and USBRX.
|
||||
* @param tx the new transmission pins
|
||||
* @param rx the new reception pin
|
||||
* @param baud the new baud rate. eg: 115200
|
||||
* @param tx the new transmission pins, eg: SerialPin.P0
|
||||
* @param rx the new reception pin, eg: SerialPin.P1
|
||||
* @param rate the new baud rate. eg: 115200
|
||||
*/
|
||||
//% weight=10
|
||||
//% help=serial/redirect-to
|
||||
|
@ -1,4 +1,55 @@
|
||||
{
|
||||
"MesAlertEvent.DisplayToast|block": "display toast",
|
||||
"MesAlertEvent.FindMyPhone|block": "find my phone",
|
||||
"MesAlertEvent.PlayRingtone|block": "play ring tone",
|
||||
"MesAlertEvent.PlaySound|block": "play sound",
|
||||
"MesAlertEvent.RingAlarm2|block": "ring alarm 2",
|
||||
"MesAlertEvent.RingAlarm3|block": "ring alarm 3",
|
||||
"MesAlertEvent.RingAlarm4|block": "ring alarm 4",
|
||||
"MesAlertEvent.RingAlarm5|block": "ring alarm 5",
|
||||
"MesAlertEvent.RingAlarm6|block": "ring alarm 6",
|
||||
"MesAlertEvent.RingAlarm|block": "ring alarm",
|
||||
"MesAlertEvent.Vibrate|block": "vibrate",
|
||||
"MesCameraEvent.LaunchPhotoMode|block": "launch photo mode",
|
||||
"MesCameraEvent.LaunchVideoMode|block": "launch video mode",
|
||||
"MesCameraEvent.StartVideoCapture|block": "start video capture",
|
||||
"MesCameraEvent.StopPhotoMode|block": "stop photo mode",
|
||||
"MesCameraEvent.StopVideoCapture|block": "stop video capture",
|
||||
"MesCameraEvent.StopVideoMode|block": "stop video mode",
|
||||
"MesCameraEvent.TakePhoto|block": "take photo",
|
||||
"MesCameraEvent.ToggleFrontRear|block": "toggle front-rear",
|
||||
"MesDeviceInfo.DisplayOff|block": "display off",
|
||||
"MesDeviceInfo.DisplayOn|block": "display on",
|
||||
"MesDeviceInfo.IncomingCall|block": "incoming call",
|
||||
"MesDeviceInfo.IncomingMessage|block": "incoming message",
|
||||
"MesDeviceInfo.OrientationLandscape|block": "orientation landscape",
|
||||
"MesDeviceInfo.OrientationPortrait|block": "orientation portrait",
|
||||
"MesDeviceInfo.Shaken|block": "shaken",
|
||||
"MesDpadButtonInfo.ADown|block": "A down",
|
||||
"MesDpadButtonInfo.AUp|block": "A up",
|
||||
"MesDpadButtonInfo.BDown|block": "B down",
|
||||
"MesDpadButtonInfo.BUp|block": "B up",
|
||||
"MesDpadButtonInfo.CDown|block": "C down",
|
||||
"MesDpadButtonInfo.CUp|block": "C up",
|
||||
"MesDpadButtonInfo.DDown|block": "D down",
|
||||
"MesDpadButtonInfo.DUp|block": "D up",
|
||||
"MesDpadButtonInfo._1Down|block": "1 down",
|
||||
"MesDpadButtonInfo._1Up|block": "1 up",
|
||||
"MesDpadButtonInfo._2Down|block": "2 down",
|
||||
"MesDpadButtonInfo._2Up|block": "2 up",
|
||||
"MesDpadButtonInfo._3Down|block": "3 down",
|
||||
"MesDpadButtonInfo._3Up|block": "3 up",
|
||||
"MesDpadButtonInfo._4Down|block": "4 down",
|
||||
"MesDpadButtonInfo._4Up|block": "4 up",
|
||||
"MesRemoteControlEvent.forward|block": "forward",
|
||||
"MesRemoteControlEvent.nextTrack|block": "next track",
|
||||
"MesRemoteControlEvent.pause|block": "pause",
|
||||
"MesRemoteControlEvent.play|block": "play",
|
||||
"MesRemoteControlEvent.previousTrack|block": "previous track",
|
||||
"MesRemoteControlEvent.rewind|block": "rewind",
|
||||
"MesRemoteControlEvent.stop|block": "stop",
|
||||
"MesRemoteControlEvent.volumeDown|block": "volume down",
|
||||
"MesRemoteControlEvent.volumeUp|block": "volume up",
|
||||
"devices.onGamepadButton|block": "on gamepad button|%NAME",
|
||||
"devices.onNotified|block": "on notified|%event",
|
||||
"devices.onSignalStrengthChanged|block": "on signal strength changed",
|
||||
|
@ -21,4 +21,4 @@
|
||||
}
|
||||
},
|
||||
"installedVersion": "ljipgq"
|
||||
}
|
||||
}
|
23
libs/radio/_locales/de/radio-jsdoc-strings.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"radio": "Daten mithilfe von Funk-Paketen übertragen",
|
||||
"radio.onDataPacketReceived": "Registriert Funktionen, die ausgeführt werden, wenn das Radio ein Datenpaket empfängt. Entnimmt das empfangene Paket aus der Warteschlange des Radios.",
|
||||
"radio.onDataReceived": "Registriert Code der ausgeführt wird, wenn ein Paket über Funk empfangen wird.",
|
||||
"radio.receiveNumber": "Liest das nächste Paket aus der Funk-Warteschlange und gibt die Paketnummer oder 0 aus, wenn das Paket keine Nummer enthält.",
|
||||
"radio.receiveString": "Liest das nächste Paket aus der Funk-Warteschlange und gibt die enthaltene Zeichenfolge oder die leere Zeichenfolge aus, wenn das Paket keine Zeichenfolge enthält.",
|
||||
"radio.receivedNumber": "Extrahiert eine Zahl aus dem Inhalt des letzten Datenpakets, welches aus der Warteschlange des Radios (via ``Zahl empfangen``, ``Zeichenkette empfangen``, etc) entnommen wurde oder eine 0, wenn das Paket keine Zahl enthält.",
|
||||
"radio.receivedSerial": "Extrahiert die Seriennummer des Calliope mini Senders aus dem Inhalt des letzten Datenpakets, welches aus der Warteschlange des Radios entnommen wurde oder eine 0, wenn der Absender keine Seriennummer gesendet hat.",
|
||||
"radio.receivedSignalStrength": "Ruft den empfangenen Signalstärkeindikator (RSSI) aus dem letzten Paket aus der Funk-Warteschlange aus (via ``receiveNumber``, ``receiveString``, etc). Wird im Simulator nicht unterstützt.\nnamespace=radio",
|
||||
"radio.receivedString": "Extrahiert die Zeichenkette aus dem Inhalt des letzten Datenpakets, welches aus der Warteschlange des Radios (via ``Zahl empfangen``, ``Zeichenkette empfangen``, etc) entnommen wurde oder eine leere Zeichenkette, wenn das Paket keine Zeichenkette enthält.",
|
||||
"radio.receivedTime": "Extrahiert die Systemzeit des Absenders aus dem Inhalt des letzten Datenpakets, welches aus der Warteschlange des Radios (via ``Zahl empfangen``, ``Zeichenkette empfangen``, etc) entnommen wurde.",
|
||||
"radio.sendNumber": "Überträgt eine Nummer über Funk an jeden angeschlossenen mini in der Gruppe.",
|
||||
"radio.sendString": "Überträgt eine Zeichenfolge über Funk mit Seriennummer des Geräts und Laufzeit an jeden angeschlossenen mini in der Gruppe.",
|
||||
"radio.sendValue": "Sendet ein Name / Wert-Paar zusammen mit der Seriennummer des Geräts und die Laufzeit auf alle angeschlossenen minis in der Gruppe.",
|
||||
"radio.sendValue|param|value": "der numerische Wert",
|
||||
"radio.setGroup": "Setzt die Gruppen-ID für Funkverbindungen. Ein mini kann nur ein Gruppen-ID hören.\nDie Gruppen-ID zwischen liegt zwischen 0 und 255, z.B. 1",
|
||||
"radio.setTransmitPower": "Ändere die Ausgabeleistung des Senders auf den angegebenen Wert.",
|
||||
"radio.setTransmitPower|param|power": "ein Wert im Bereich 0.. 7, wo 0 die niedrigste Leistung und 7 ist ist die höchste. z.B. 7",
|
||||
"radio.setTransmitSerialNumber": "Stelle den Dunk so ein, dass die Seriennummer in jeder Nachricht übertragen wird.",
|
||||
"radio.setTransmitSerialNumber|param|transmit": "Wert, der anzeigt, ob die Seriennummer übertragen wird, z.B. wahr",
|
||||
"radio.writeReceivedPacketToSerial": "Schreibt das letzte empfangene Paket als JSON auf Seriell. Sollte in einem ´´onDataPacketReceived``-Callback aufgerufen werden.",
|
||||
"radio.writeValueToSerial": "Liest das nächste Paket aus der Funk-Warteschlange und schreibt dieses als JSON auf Seriell."
|
||||
}
|
17
libs/radio/_locales/de/radio-strings.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"radio.onDataPacketReceived|block": "wenn Datenpaket empfangen",
|
||||
"radio.onDataReceived|block": "Funk auf empfangenen Daten",
|
||||
"radio.receiveNumber|block": "empfange Nummer über Funk",
|
||||
"radio.receiveString|block": "empfange Zeichenfolge über Funk",
|
||||
"radio.receivedSignalStrength|block": "über Funk empfangene Signalstärke",
|
||||
"radio.sendNumber|block": "sende Nummer %value über Funk",
|
||||
"radio.sendString|block": "sende Zeichenfolge %msg über Funk",
|
||||
"radio.sendValue|block": "schicke |Wert %name|= %value über Funk",
|
||||
"radio.setGroup|block": "setze Gruppe %ID über Funk",
|
||||
"radio.setTransmitPower|block": "setze Übertragungsstärke %power über Funk",
|
||||
"radio.setTransmitSerialNumber|block": "setze Übertragungsseriennummer %transmit über Funk",
|
||||
"radio.writeReceivedPacketToSerial|block": "schreibe das über Funk übertragene Paket auf Seriell",
|
||||
"radio.writeValueToSerial|block": "schreibe Wert über Funk auf Seriell",
|
||||
"radio|block": "Funk",
|
||||
"{id:category}Radio": "Funk"
|
||||
}
|
@ -6,7 +6,9 @@
|
||||
"shims.d.ts",
|
||||
"enums.d.ts",
|
||||
"radio.cpp",
|
||||
"radio.ts"
|
||||
"radio.ts",
|
||||
"_locales/de/radio-jsdoc-strings.json",
|
||||
"_locales/de/radio-strings.json"
|
||||
],
|
||||
"public": true,
|
||||
"dependencies": {
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Communicate data using radio packets
|
||||
*/
|
||||
//% color=#E3008C weight=34
|
||||
//% color=#E3008C weight=34 icon="\uf012"
|
||||
namespace radio {
|
||||
export class Packet {
|
||||
/**
|
||||
@ -33,7 +33,7 @@ namespace radio {
|
||||
* received packet from the radio queue.
|
||||
*/
|
||||
//% help=radio/on-data-packet-received
|
||||
//% mutate=true
|
||||
//% mutate=objectdestructuring
|
||||
//% mutateText=Packet
|
||||
//% mutateDefaults="receivedNumber;receivedString:name,receivedNumber:value;receivedString"
|
||||
//% blockId=radio_on_packet block="on radio received" blockGap=8
|
||||
|
15
package.json
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "pxt-calliope",
|
||||
"version": "0.5.80",
|
||||
"description": "calliope target for PXT",
|
||||
"version": "1.0.3",
|
||||
"description": "Calliope Mini editor for PXT",
|
||||
"keywords": [
|
||||
"JavaScript",
|
||||
"education",
|
||||
@ -29,11 +29,14 @@
|
||||
"main": "built/pxtrequire.js",
|
||||
"typings": "built/pxtrequire.d.ts",
|
||||
"devDependencies": {
|
||||
"typescript": "^1.8.7"
|
||||
},
|
||||
"dependencies": {
|
||||
"pxt-core": "0.5.68",
|
||||
"typescript": "^1.8.7",
|
||||
"less": "^2.6.0",
|
||||
"semantic-ui-less": "^2.2.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"pxt-core": "0.11.32"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "node node_modules/pxt-core/built/pxt.js travis"
|
||||
}
|
||||
}
|
||||
|
115
pxtarget.json
@ -2,8 +2,8 @@
|
||||
"id": "calliope",
|
||||
"name": " calliope",
|
||||
"nickname": "mini",
|
||||
"title": "calliope - Blocks / Javascript editor",
|
||||
"description": "A Blocks / JavaScript code editor for the calliope.",
|
||||
"title": "calliope mini - Blocks / Javascript editor",
|
||||
"description": "A Blocks / JavaScript code editor for the calliope mini.",
|
||||
"corepkg": "core",
|
||||
"bundleddirs": [
|
||||
"libs/core",
|
||||
@ -15,13 +15,13 @@
|
||||
"workspace": false,
|
||||
"packages": true,
|
||||
"sharing": true,
|
||||
"publish": true,
|
||||
"publishing": true,
|
||||
"preferredPackages": [
|
||||
],
|
||||
"githubPackages": true
|
||||
},
|
||||
"compile": {
|
||||
"isNative": false,
|
||||
"isNative": true,
|
||||
"hasHex": true,
|
||||
"deployDrives": "MINI",
|
||||
"driveName": "MINI",
|
||||
@ -54,7 +54,10 @@
|
||||
"mathBlocks": true,
|
||||
"loopsBlocks": true,
|
||||
"logicBlocks": true,
|
||||
"variablesBlocks": true
|
||||
"variablesBlocks": true,
|
||||
"textBlocks": true,
|
||||
"onStartColor": "#54C9C9",
|
||||
"onStartNamespace": "basic"
|
||||
},
|
||||
"simulator": {
|
||||
"autoRun": true,
|
||||
@ -114,16 +117,16 @@
|
||||
"C19": "C_P19",
|
||||
"C20": "C_P20",
|
||||
"EXT_PWR":"EXT_PWR",
|
||||
"SPKR":"EXT_PWR",
|
||||
"SPKR":"SPKR",
|
||||
"BTN_A": "BTN_A",
|
||||
"BTN_B": "BTN_B",
|
||||
"MOTOR1": "M_OUT1",
|
||||
"MOTOR2": "M_OUT2"
|
||||
},
|
||||
"spiPins": {
|
||||
"MOSI": "P15",
|
||||
"MISO": "P14",
|
||||
"SCK": "P13"
|
||||
"MOSI": "C_P15",
|
||||
"MISO": "C_P14",
|
||||
"SCK": "C_P13"
|
||||
},
|
||||
"i2cPins": {
|
||||
"SDA": "C_P20",
|
||||
@ -165,12 +168,12 @@
|
||||
}
|
||||
},
|
||||
"compileService": {
|
||||
"yottaTarget": "bbc-microbit-classic-gcc",
|
||||
"yottaCorePackage": "pxt-calliope-core",
|
||||
"githubCorePackage": "microsoft/pxt-calliope-core",
|
||||
"gittag": "v0.5.14",
|
||||
"yottaTarget": "calliope-mini-classic-gcc",
|
||||
"yottaCorePackage": "microbit",
|
||||
"githubCorePackage": "calliope-mini/microbit",
|
||||
"gittag": "v2.0.0-rc7-calliope-1.0.1",
|
||||
"serviceId": "calliope"
|
||||
},
|
||||
},
|
||||
"serial": {
|
||||
"manufacturerFilter": "^mbed$",
|
||||
"nameFilter": "^mbed Serial Port",
|
||||
@ -187,10 +190,15 @@
|
||||
"cardLogo": "./static/icons/apple-touch-icon.png",
|
||||
"appLogo": "./static/icons/apple-touch-icon.png",
|
||||
"homeUrl": "https://calliope.cc/",
|
||||
"embedUrl": "https://calliope.cc/",
|
||||
"embedUrl": "https://mini.pxt.io/",
|
||||
"privacyUrl": "https://go.microsoft.com/fwlink/?LinkId=521839",
|
||||
"termsOfUseUrl": "https://go.microsoft.com/fwlink/?LinkID=206977",
|
||||
"githubUrl": "https://github.com/Microsoft/pxt-calliope",
|
||||
"crowdinProject": "kindscript",
|
||||
"organization": "Microsoft",
|
||||
"organizationUrl": "https://pxt.io/",
|
||||
"organizationLogo": "./static/Microsoft-logo_rgb_c-gray-square.png",
|
||||
"organizationWideLogo": "./static/Microsoft-logo_rgb_c-white.png",
|
||||
"browserSupport": [
|
||||
{
|
||||
"name": "unsupported",
|
||||
@ -218,73 +226,22 @@
|
||||
"path": "/browsers/windows"
|
||||
}
|
||||
],
|
||||
"boardName": "Calliope MINI",
|
||||
"boardName": "Calliope mini",
|
||||
"hideSideDocs": true,
|
||||
"usbDocs": "/device/usb",
|
||||
"usbHelp": [
|
||||
{
|
||||
"name": "connection",
|
||||
"os": "*",
|
||||
"browser": "*",
|
||||
"path": "/static/mb/device/usb-generic.jpg"
|
||||
},
|
||||
{
|
||||
"name": "connection",
|
||||
"os": "mac",
|
||||
"browser": "*",
|
||||
"path": "/static/mb/device/usb-mac.jpg"
|
||||
},
|
||||
{
|
||||
"name": "save",
|
||||
"os": "windows",
|
||||
"browser": "firefox",
|
||||
"path": "/static/mb/device/usb-windows-firefox-1.png"
|
||||
},
|
||||
{
|
||||
"name": "save",
|
||||
"os": "mac",
|
||||
"browser": "firefox",
|
||||
"path": "/static/mb/device/usb-osx-firefox-1.jpg"
|
||||
},
|
||||
{
|
||||
"name": "save",
|
||||
"os": "mac",
|
||||
"browser": "chrome",
|
||||
"path": "/static/mb/device/usb-osx-chrome.png"
|
||||
},
|
||||
{
|
||||
"name": "save",
|
||||
"os": "windows",
|
||||
"browser": "edge",
|
||||
"path": "/static/mb/device/usb-windows-edge-1.png"
|
||||
},
|
||||
{
|
||||
"name": "save",
|
||||
"os": "windows",
|
||||
"browser": "ie",
|
||||
"path": "/static/mb/device/usb-windows-ie11-1.png"
|
||||
},
|
||||
{
|
||||
"name": "save",
|
||||
"os": "windows",
|
||||
"browser": "chrome",
|
||||
"path": "/static/mb/device/usb-windows-chrome.png"
|
||||
},
|
||||
{
|
||||
"name": "copy",
|
||||
"os": "mac",
|
||||
"browser": "*",
|
||||
"path": "/static/mb/device/usb-osx-dnd.png"
|
||||
},
|
||||
{
|
||||
"name": "copy",
|
||||
"os": "windows",
|
||||
"browser": "*",
|
||||
"path": "/static/mb/device/usb-windows-sendto.jpg"
|
||||
}
|
||||
],
|
||||
"invertedMenu": true,
|
||||
"invertedToolbox": true,
|
||||
"blocklyOptions": { }
|
||||
"monacoToolbox": false,
|
||||
"hasAudio": true,
|
||||
"simAnimationEnter": "rotate in",
|
||||
"simAnimationExit": "rotate out",
|
||||
"blocklyOptions": {
|
||||
"grid": {
|
||||
"spacing": 45,
|
||||
"length": 7,
|
||||
"colour": "rgba(189, 195, 199, 0.30)",
|
||||
"snap": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -16,7 +16,6 @@ namespace pxsim {
|
||||
neopixelState: NeoPixelState;
|
||||
rgbLedState: number;
|
||||
speakerState: SpeakerState;
|
||||
servosState: MicroServosState;
|
||||
fileSystem: FileSystemState;
|
||||
|
||||
constructor() {
|
||||
@ -42,20 +41,27 @@ namespace pxsim {
|
||||
DAL.MICROBIT_ID_IO_P5,
|
||||
DAL.MICROBIT_ID_IO_P6,
|
||||
DAL.MICROBIT_ID_IO_P7,
|
||||
0, //DAL.MICROBIT_ID_IO_P8,
|
||||
DAL.MICROBIT_ID_IO_P8,
|
||||
DAL.MICROBIT_ID_IO_P9,
|
||||
DAL.MICROBIT_ID_IO_P10,
|
||||
DAL.MICROBIT_ID_IO_P11,
|
||||
0, //DAL.MICROBIT_ID_IO_P12,
|
||||
0, //DAL.MICROBIT_ID_IO_P13,
|
||||
0, //DAL.MICROBIT_ID_IO_P14,
|
||||
0, //DAL.MICROBIT_ID_IO_P15,
|
||||
0, //DAL.MICROBIT_ID_IO_P16,
|
||||
DAL.MICROBIT_ID_IO_P12,
|
||||
DAL.MICROBIT_ID_IO_P13,
|
||||
DAL.MICROBIT_ID_IO_P14,
|
||||
DAL.MICROBIT_ID_IO_P15,
|
||||
DAL.MICROBIT_ID_IO_P16,
|
||||
0,
|
||||
0,
|
||||
DAL.MICROBIT_ID_IO_P19,
|
||||
DAL.MICROBIT_ID_IO_P20
|
||||
]
|
||||
DAL.MICROBIT_ID_IO_P20,
|
||||
DAL.MICROBIT_ID_IO_P21
|
||||
],
|
||||
servos: {
|
||||
"P0": DAL.MICROBIT_ID_IO_P12,
|
||||
"P1": DAL.MICROBIT_ID_IO_P0,
|
||||
"P2": DAL.MICROBIT_ID_IO_P1,
|
||||
"P3": DAL.MICROBIT_ID_IO_P16
|
||||
}
|
||||
});
|
||||
this.builtinParts["radio"] = this.radioState = new RadioState(runtime);
|
||||
this.builtinParts["accelerometer"] = this.accelerometerState = new AccelerometerState(runtime);
|
||||
@ -65,12 +71,7 @@ namespace pxsim {
|
||||
this.builtinParts["compass"] = this.compassState = new CompassState();
|
||||
this.builtinParts["neopixel"] = this.neopixelState = new NeoPixelState();
|
||||
this.builtinParts["speaker"] = this.speakerState = new SpeakerState();
|
||||
this.builtinParts["microservo"] = this.servosState = new MicroServosState({
|
||||
"P0": DAL.MICROBIT_ID_IO_P0,
|
||||
"P1": DAL.MICROBIT_ID_IO_P1,
|
||||
"P2": DAL.MICROBIT_ID_IO_P2,
|
||||
"P3": DAL.MICROBIT_ID_IO_P3
|
||||
});
|
||||
this.builtinParts["microservo"] = this.edgeConnectorState;
|
||||
|
||||
this.builtinVisuals["buttonpair"] = () => new visuals.ButtonPairView();
|
||||
this.builtinVisuals["ledmatrix"] = () => new visuals.LedMatrixView();
|
||||
|
@ -1,4 +1,4 @@
|
||||
/// <reference path="../node_modules/pxt-core/typings/bluebird/bluebird.d.ts"/>
|
||||
/// <reference path="../node_modules/pxt-core/typings/globals/bluebird/index.d.ts"/>
|
||||
/// <reference path="../node_modules/pxt-core/built/pxtsim.d.ts"/>
|
||||
/// <reference path="../node_modules/pxt-core/built/pxtrunner.d.ts"/>
|
||||
|
||||
|
@ -223,10 +223,10 @@ namespace pxsim {
|
||||
return DAL.MICROBIT_ACCELEROMETER_EVT_TILT_UP;
|
||||
|
||||
if (this.getZ() < (-1000 + DAL.MICROBIT_ACCELEROMETER_TILT_TOLERANCE))
|
||||
return DAL.MICROBIT_ACCELEROMETER_EVT_FACE_UP;
|
||||
return DAL.MICROBIT_ACCELEROMETER_EVT_FACE_DOWN;
|
||||
|
||||
if (this.getZ() > (1000 - DAL.MICROBIT_ACCELEROMETER_TILT_TOLERANCE))
|
||||
return DAL.MICROBIT_ACCELEROMETER_EVT_FACE_DOWN;
|
||||
return DAL.MICROBIT_ACCELEROMETER_EVT_FACE_UP;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -76,8 +76,7 @@ namespace pxsim.pins {
|
||||
if (!pin) return;
|
||||
|
||||
analogSetPeriod(pinId, 20000);
|
||||
const state = board().servosState.servoState(pinId);
|
||||
state.setAngle(value);
|
||||
pin.servoAngle = Math.max(0, Math.min(180, value));
|
||||
}
|
||||
|
||||
export function servoSetPulse(pinId: number, micros: number) {
|
||||
|
@ -53,9 +53,9 @@ namespace pxsim {
|
||||
}
|
||||
|
||||
public shiftRight(cols: number) {
|
||||
for (let x = this.width - 1; x <= 0; --x)
|
||||
for (let x = this.width - 1; x >= 0; --x)
|
||||
for (let y = 0; y < 5; ++y)
|
||||
this.set(x, y, x > cols ? this.get(x - cols, y) : 0);
|
||||
this.set(x, y, x >= cols ? this.get(x - cols, y) : 0);
|
||||
}
|
||||
|
||||
public clear(): void {
|
||||
@ -129,10 +129,11 @@ namespace pxsim.images {
|
||||
}
|
||||
|
||||
namespace pxsim.ImageMethods {
|
||||
export function showImage(leds: Image, offset: number) {
|
||||
export function showImage(leds: Image, offset: number, interval: number) {
|
||||
pxtrt.nullCheck(leds)
|
||||
leds.copyTo(offset, 5, board().ledMatrixState.image, 0)
|
||||
runtime.queueDisplayUpdate()
|
||||
basic.pause(interval);
|
||||
}
|
||||
|
||||
export function plotImage(leds: Image, offset: number): void {
|
||||
@ -155,8 +156,8 @@ namespace pxsim.ImageMethods {
|
||||
ImageMethods.plotImage(leds, frame * Image.height);
|
||||
}
|
||||
|
||||
export function showFrame(leds: Image, frame: number) {
|
||||
ImageMethods.showImage(leds, frame * Image.height);
|
||||
export function showFrame(leds: Image, frame: number, interval: number) {
|
||||
ImageMethods.showImage(leds, frame * Image.height, interval);
|
||||
}
|
||||
|
||||
export function pixel(leds: Image, x: number, y: number): number {
|
||||
@ -195,11 +196,16 @@ namespace pxsim.ImageMethods {
|
||||
board().ledMatrixState.animationQ.enqueue({
|
||||
interval: interval,
|
||||
frame: () => {
|
||||
//TODO: support right to left.
|
||||
if (off >= leds.width || off < 0) return false;
|
||||
stride > 0 ? display.shiftLeft(stride) : display.shiftRight(-stride);
|
||||
let c = Math.min(stride, leds.width - off);
|
||||
leds.copyTo(off, c, display, 5 - stride)
|
||||
if (stride > 0) {
|
||||
display.shiftLeft(stride);
|
||||
const c = Math.min(stride, leds.width - off);
|
||||
leds.copyTo(off, c, display, 5 - stride)
|
||||
} else {
|
||||
display.shiftRight(-stride);
|
||||
const c = Math.min(-stride, leds.width - off);
|
||||
leds.copyTo(off, c, display, 0)
|
||||
}
|
||||
off += stride;
|
||||
return true;
|
||||
},
|
||||
@ -223,7 +229,7 @@ namespace pxsim.basic {
|
||||
clearScreen();
|
||||
pause(interval * 5);
|
||||
} else {
|
||||
if (s.length == 1) showLeds(createImageFromString(s + " "), interval * 5)
|
||||
if (s.length == 1) showLeds(createImageFromString(s), 0);
|
||||
else ImageMethods.scrollImage(createImageFromString(s + " "), 1, interval);
|
||||
}
|
||||
}
|
||||
|
@ -119,6 +119,9 @@ namespace pxsim.pins {
|
||||
export function getPinAddress(name: number) {
|
||||
return getPin(name)
|
||||
}
|
||||
|
||||
export function setEvents(name: number, event: number) {
|
||||
}
|
||||
}
|
||||
|
||||
namespace pxsim.devices {
|
||||
|
@ -35,18 +35,14 @@ namespace pxsim.serial {
|
||||
board().writeSerial(s);
|
||||
}
|
||||
|
||||
export function readUntil(del: string): string {
|
||||
return readString();
|
||||
}
|
||||
|
||||
export function readString(): string {
|
||||
return board().serialState.readSerial();
|
||||
}
|
||||
|
||||
export function readLine(): string {
|
||||
return board().serialState.readSerial();
|
||||
}
|
||||
|
||||
export function readUntil(del: string): string {
|
||||
return readLine();
|
||||
}
|
||||
|
||||
export function onDataReceived(delimiters: string, handler: RefAction) {
|
||||
let b = board();
|
||||
b.bus.listen(DAL.MICROBIT_ID_SERIAL, DAL.MICROBIT_SERIAL_EVT_DELIM_MATCH, handler);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/// <reference path="../../node_modules/pxt-core/typings/bluebird/bluebird.d.ts"/>
|
||||
/// <reference path="../../node_modules/pxt-core/typings/globals/bluebird/index.d.ts"/>
|
||||
/// <reference path="../../node_modules/pxt-core/built/pxtsim.d.ts"/>
|
||||
|
||||
namespace pxsim.visuals {
|
||||
|
@ -1,3 +1,175 @@
|
||||
/*******************************
|
||||
Site Overrides
|
||||
*******************************/
|
||||
|
||||
|
||||
/*--------------
|
||||
Rotate In
|
||||
---------------*/
|
||||
|
||||
/* Inward */
|
||||
.transition.rotate {
|
||||
animation-duration: 0.6s;
|
||||
transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
|
||||
}
|
||||
.transition.rotate.in {
|
||||
animation-name: rotateIn;
|
||||
}
|
||||
.transition[class*="rotate down left"].in {
|
||||
animation-name: rotateInDownLeft;
|
||||
}
|
||||
.transition[class*="rotate down right"].in {
|
||||
animation-name: rotateInDownRight;
|
||||
}
|
||||
.transition[class*="rotate up left"].in {
|
||||
animation-name: rotateInUpLeft;
|
||||
}
|
||||
.transition[class*="rotate up right"].in {
|
||||
animation-name: rotateInUpRight;
|
||||
}
|
||||
|
||||
/* Outward */
|
||||
.transition.rotate.out {
|
||||
animation-name: rotateOut;
|
||||
}
|
||||
.transition[class*="rotate down left"].out {
|
||||
animation-name: rotateOutDownLeft;
|
||||
}
|
||||
.transition[class*="rotate down right"].out {
|
||||
animation-name: rotateOutDownRight;
|
||||
}
|
||||
.transition[class*="rotate up left"].out {
|
||||
animation-name: rotateOutUpLeft;
|
||||
}
|
||||
.transition[class*="rotate up right"].out {
|
||||
animation-name: rotateOutUpRight;
|
||||
}
|
||||
|
||||
/* In */
|
||||
@keyframes rotateIn {
|
||||
from {
|
||||
transform-origin: center;
|
||||
transform: rotate3d(0, 0, 1, -200deg);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
to {
|
||||
transform-origin: center;
|
||||
transform: none;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@keyframes rotateInDownLeft {
|
||||
from {
|
||||
transform-origin: left bottom;
|
||||
transform: rotate3d(0, 0, 1, -45deg);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
to {
|
||||
transform-origin: left bottom;
|
||||
transform: none;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@keyframes rotateInDownRight {
|
||||
from {
|
||||
transform-origin: right bottom;
|
||||
transform: rotate3d(0, 0, 1, 45deg);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
to {
|
||||
transform-origin: right bottom;
|
||||
transform: none;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@keyframes rotateInUpLeft {
|
||||
from {
|
||||
transform-origin: left bottom;
|
||||
transform: rotate3d(0, 0, 1, 45deg);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
to {
|
||||
transform-origin: left bottom;
|
||||
transform: none;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@keyframes rotateInUpRight {
|
||||
from {
|
||||
transform-origin: right bottom;
|
||||
transform: rotate3d(0, 0, 1, -90deg);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
to {
|
||||
transform-origin: right bottom;
|
||||
transform: none;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Out */
|
||||
@keyframes rotateOut {
|
||||
from {
|
||||
transform-origin: center;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
to {
|
||||
transform-origin: center;
|
||||
transform: rotate3d(0, 0, 1, 200deg);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes rotateOutDownLeft {
|
||||
from {
|
||||
transform-origin: left bottom;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
to {
|
||||
transform-origin: left bottom;
|
||||
transform: rotate3d(0, 0, 1, 45deg);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes rotateOutDownRight {
|
||||
from {
|
||||
transform-origin: right bottom;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
to {
|
||||
transform-origin: right bottom;
|
||||
transform: rotate3d(0, 0, 1, -45deg);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes rotateOutUpLeft {
|
||||
from {
|
||||
transform-origin: left bottom;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
to {
|
||||
transform-origin: left bottom;
|
||||
transform: rotate3d(0, 0, 1, -45deg);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes rotateOutUpRight {
|
||||
from {
|
||||
transform-origin: right bottom;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
to {
|
||||
transform-origin: right bottom;
|
||||
transform: rotate3d(0, 0, 1, 90deg);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
@ -12,17 +12,23 @@
|
||||
/*******************************
|
||||
Add your custom CSS here
|
||||
*******************************/
|
||||
/* not relevant in new UI
|
||||
.openproject {
|
||||
background: #4ECC60 !important;
|
||||
}
|
||||
} */
|
||||
|
||||
.blocks-menuitem, .javascript-menuitem {
|
||||
.blocks-menuitem.active, .javascript-menuitem.active {
|
||||
background: #738791 !important;
|
||||
}
|
||||
|
||||
/* not relevant in new UI
|
||||
.help-dropdown-menuitem, .more-dropdown-menuitem {
|
||||
background: #424955 !important;
|
||||
margin-right:0px !important;
|
||||
} */
|
||||
|
||||
.huge.download-button i {
|
||||
display:none !important; // otherwise spans 2 lines
|
||||
}
|
||||
|
||||
.play-button {
|
||||
@ -37,29 +43,26 @@
|
||||
&:extend(.yellow all);
|
||||
}
|
||||
|
||||
#filelist .menu {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/*******************************
|
||||
Blockly
|
||||
*******************************/
|
||||
|
||||
.blocklyTreeRow {
|
||||
border-radius:5px;
|
||||
}
|
||||
|
||||
.blocklyTreeRow:hover {
|
||||
background: @invertedBackground !important;
|
||||
div.blocklyTreeRow {
|
||||
border-radius:8px;
|
||||
}
|
||||
|
||||
/* This removes any padding at the top of the toolbox */
|
||||
.blocklyTreeRoot {
|
||||
div.blocklyTreeRoot {
|
||||
padding: 0px !important;
|
||||
}
|
||||
|
||||
/* Blockly Text */
|
||||
.blocklyTreeLabel {
|
||||
div.blocklyTreeLabel {
|
||||
font-family: @pageFont !important;
|
||||
}
|
||||
|
||||
.blocklyTreeLabel {
|
||||
font-size:1rem !important;
|
||||
}
|
||||
|
||||
@ -68,10 +71,12 @@
|
||||
}
|
||||
|
||||
.blocklyToolboxDiv {
|
||||
/*left:30px !important;*/
|
||||
padding:7px;
|
||||
}
|
||||
|
||||
.organization {
|
||||
top: 1.6em;
|
||||
}
|
||||
|
||||
/* Mobile */
|
||||
@media only screen and (max-width: @largestMobileScreen) {
|
||||
@ -82,21 +87,14 @@
|
||||
|
||||
/* Tablet */
|
||||
@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {
|
||||
|
||||
}
|
||||
|
||||
/* Small Monitor */
|
||||
@media only screen and (min-width: @computerBreakpoint) and (max-width: @largestSmallMonitor) {
|
||||
.blocklyTreeRow {
|
||||
width: 230px;
|
||||
}
|
||||
}
|
||||
|
||||
/* Large Monitor */
|
||||
@media only screen and (min-width: @largeMonitorBreakpoint) {
|
||||
.blocklyTreeRow {
|
||||
width: 230px;
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************
|
||||
|
@ -41,7 +41,7 @@
|
||||
/* Collections */
|
||||
@breadcrumb : 'default';
|
||||
@form : 'default';
|
||||
@grid : 'default';
|
||||
@grid : 'pxt';
|
||||
@menu : 'pxt';
|
||||
@message : 'default';
|
||||
@table : 'default';
|
||||
|
@ -7,4 +7,3 @@ export KS_FORCE_CLOUD=yes
|
||||
(cd libs/lang-test0; node ../../node_modules/pxt-core/built/pxt.js test)
|
||||
(cd libs/lang-test1; node ../../node_modules/pxt-core/built/pxt.js test)
|
||||
node node_modules/pxt-core/built/pxt.js testdir tests
|
||||
(cd libs/hello; node ../../node_modules/pxt-core/built/pxt.js testconv https://az851932.vo.msecnd.net/files/td-converter-tests-v1.json)
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "pxt.microbit.org",
|
||||
"name": "mini.pxt.io",
|
||||
"icons": [
|
||||
{
|
||||
"src": "./static/icons/android-chrome-36x36.png",
|
||||
|