Merge remote-tracking branch 'refs/remotes/origin/master' into docs
This commit is contained in:
		@@ -3,6 +3,8 @@
 | 
			
		||||
This target allow to program a [BBC micro:bit](https://www.microbit.co.uk/) using 
 | 
			
		||||
[Microsoft Programming Experience Toolkit](https://github.com/Microsoft/pxt).
 | 
			
		||||
 | 
			
		||||
* [Try it live](https://m.pxt.io)
 | 
			
		||||
 | 
			
		||||
[](https://travis-ci.org/Microsoft/pxt-microbit)
 | 
			
		||||
 | 
			
		||||
# Getting started
 | 
			
		||||
@@ -23,4 +25,4 @@ that wraps m.pxt.io and provides additional features.
 | 
			
		||||
### Building
 | 
			
		||||
 | 
			
		||||
* Install Visual Studio 2015 Update 2 or higher. Make sure the Windows 10 templates are installed.
 | 
			
		||||
* open the ``win10/app.sln`` solution and launch the ``codemicrobit`` project.
 | 
			
		||||
* open the ``win10/app.sln`` solution and launch the ``m.pxt.io`` project.
 | 
			
		||||
 
 | 
			
		||||
@@ -24,4 +24,4 @@ serial.writeValue(x, 0);
 | 
			
		||||
control.inBackground(() => {
 | 
			
		||||
    
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								docs/static/Microsoft-logo_rgb_c-gray.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/static/Microsoft-logo_rgb_c-gray.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 20 KiB  | 
							
								
								
									
										1
									
								
								docs/static/microbit.simplified.svg
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								docs/static/microbit.simplified.svg
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
		 After Width: | Height: | Size: 17 KiB  | 
@@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
using namespace pxt;
 | 
			
		||||
 | 
			
		||||
#define RADIO_VALUE_PACKET_TYPE 24641622
 | 
			
		||||
#define MAX_FIELD_NAME_LENGTH 12
 | 
			
		||||
 | 
			
		||||
//% color=270 weight=34
 | 
			
		||||
namespace radio {
 | 
			
		||||
@@ -11,6 +11,8 @@ namespace radio {
 | 
			
		||||
    // Radio
 | 
			
		||||
    // -------------------------------------------------------------------------    
 | 
			
		||||
    bool radioEnabled = false;
 | 
			
		||||
    bool transmitSerialNumber = false;
 | 
			
		||||
    
 | 
			
		||||
    PacketBuffer packet;
 | 
			
		||||
    
 | 
			
		||||
    int radioEnable() {
 | 
			
		||||
@@ -36,83 +38,84 @@ namespace radio {
 | 
			
		||||
        registerWithDal(MES_BROADCAST_GENERAL_ID, message, f);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Broadcasts 4 numbers over radio to any connected micro:bit in the group.
 | 
			
		||||
     */
 | 
			
		||||
    //% help=radio/send-numbers
 | 
			
		||||
    //% weight=59 debug=true
 | 
			
		||||
    //% blockId=radio_datagram_send_numbers block="send numbers|0: %VALUE0|1: %VALUE1|2: %VALUE2|3: %VALUE3"
 | 
			
		||||
    void sendNumbers(int value_0, int value_1, int value_2, int value_3) {
 | 
			
		||||
        if (radioEnable() != MICROBIT_OK) return;
 | 
			
		||||
        int buf[] = { value_0, value_1, value_2, value_3 };
 | 
			
		||||
        uBit.radio.datagram.send((uint8_t*)buf, 4*sizeof(int));
 | 
			
		||||
     * Broadcasts a number over radio to any connected micro:bit in the group.
 | 
			
		||||
     */    
 | 
			
		||||
    //% help=radio/send-number
 | 
			
		||||
    //% weight=60
 | 
			
		||||
    //% blockId=radio_datagram_send block="send number %MESSAGE" blockGap=8
 | 
			
		||||
    void sendNumber(int value) { 
 | 
			
		||||
        if (radioEnable() != MICROBIT_OK) return;        
 | 
			
		||||
        uint32_t t = system_timer_current_time();
 | 
			
		||||
        uint32_t sn = transmitSerialNumber ? microbit_serial_number() : 0;
 | 
			
		||||
        uint32_t buf[] = { (uint32_t)value, t, sn };        
 | 
			
		||||
        uBit.radio.datagram.send((uint8_t*)buf, 3*sizeof(uint32_t));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
    * Broadcasts a name / value pair along with the device serial number
 | 
			
		||||
    * and running time to any connected BBC micro:bit in the group.
 | 
			
		||||
    * @param name the field name (max 12 characters), eg: "data"
 | 
			
		||||
    * @param the numberic value
 | 
			
		||||
    * @param value the numberic value
 | 
			
		||||
    */
 | 
			
		||||
    //% help=radio/send-value
 | 
			
		||||
    //% weight=4 debug=true
 | 
			
		||||
    //% weight=59
 | 
			
		||||
    //% blockId=radio_datagram_send_value block="send|value %name|= %value"
 | 
			
		||||
    void sendValue(StringData* name, int number) {
 | 
			
		||||
    void sendValue(StringData* name, int value) {
 | 
			
		||||
        if (radioEnable() != MICROBIT_OK) return;
 | 
			
		||||
 | 
			
		||||
        ManagedString n(name);                
 | 
			
		||||
        ManagedString n(name);     
 | 
			
		||||
        uint32_t t = system_timer_current_time();           
 | 
			
		||||
        uint32_t sn = transmitSerialNumber ? microbit_serial_number() : 0;
 | 
			
		||||
        uint8_t buf[32];
 | 
			
		||||
        uint32_t* buf32 = (uint32_t*)buf;
 | 
			
		||||
        memset(buf, 32, 0);
 | 
			
		||||
        buf32[0] = number;                      // 4 bytes: value
 | 
			
		||||
        buf32[1] = microbit_serial_number();    // 4 bytes: serial number
 | 
			
		||||
        buf32[2] = system_timer_current_time(); // 4 bytes: running time
 | 
			
		||||
        memcpy(buf + 12, n.toCharArray(), min(12, n.length())); // 12-24: field name       
 | 
			
		||||
        buf32[7] = RADIO_VALUE_PACKET_TYPE; // last 4 bytes: magic number of package type
 | 
			
		||||
        uBit.radio.datagram.send(buf, 32);
 | 
			
		||||
        buf32[0] = value;                      // 4 bytes: value
 | 
			
		||||
        buf32[1] = t; // 4 bytes: running time
 | 
			
		||||
        buf32[2] = sn; // 4 bytes: serial number
 | 
			
		||||
        uint8_t len = min(MAX_FIELD_NAME_LENGTH, n.length());          // 1 byte: string length
 | 
			
		||||
        if (len > 0) {
 | 
			
		||||
            buf[12] = len;                          // 
 | 
			
		||||
            memcpy(buf + 13, n.toCharArray(), len); // 13-25: field name            
 | 
			
		||||
        }
 | 
			
		||||
        uBit.radio.datagram.send(buf, 13 + len);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
    * Reads a value sent with `stream value` and writes it
 | 
			
		||||
    * to the serial stream as JSON
 | 
			
		||||
    */
 | 
			
		||||
    //% help=radio/read-value-to-serial
 | 
			
		||||
    //% weight=3 debug=true
 | 
			
		||||
    void readValueToSerial() {
 | 
			
		||||
    //% help=radio/write-value-to-serial
 | 
			
		||||
    //% weight=3
 | 
			
		||||
    //% blockId=radio_write_value_serial block="write value to serial"
 | 
			
		||||
    void writeValueToSerial() {
 | 
			
		||||
        if (radioEnable() != MICROBIT_OK) return;
 | 
			
		||||
        PacketBuffer p = uBit.radio.datagram.recv();
 | 
			
		||||
        int length = p.length();
 | 
			
		||||
        if (length < 32) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        uint8_t* bytes = p.getBytes();
 | 
			
		||||
        //uint32_t* buf32 = (uint32_t*)bytes;        
 | 
			
		||||
        //uint32_t type = buf32[7];
 | 
			
		||||
        //if (type != RADIO_VALUE_PACKET_TYPE)
 | 
			
		||||
        //{
 | 
			
		||||
         //   uBit.serial.send("type: ");
 | 
			
		||||
         //   uBit.serial.send(type);
 | 
			
		||||
         //   uBit.serial.send("\r\n");
 | 
			
		||||
          //  return;
 | 
			
		||||
        //}
 | 
			
		||||
        
 | 
			
		||||
        int value;
 | 
			
		||||
        int serial;
 | 
			
		||||
        int time;
 | 
			
		||||
        char name[12+1]; memset(name, 0, 13 * sizeof(char));
 | 
			
		||||
        
 | 
			
		||||
        memcpy(&value, bytes, 4);
 | 
			
		||||
        memcpy(&serial, bytes + 4, 4);
 | 
			
		||||
        memcpy(&time, bytes + 8, 4);
 | 
			
		||||
        memcpy(&name, bytes + 12, 12);
 | 
			
		||||
            
 | 
			
		||||
        uBit.serial.send("{s:"); uBit.serial.send(serial);
 | 
			
		||||
        uBit.serial.send(",t:"); uBit.serial.send(time);
 | 
			
		||||
        uBit.serial.send(",v:"); uBit.serial.send(value);
 | 
			
		||||
        uBit.serial.send(",n:\""); uBit.serial.send(name);
 | 
			
		||||
        uBit.serial.send("\"}\r\n");
 | 
			
		||||
        uBit.serial.send("{");
 | 
			
		||||
        if (length >= 4) {
 | 
			
		||||
            memcpy(&value, bytes, 4);
 | 
			
		||||
            uBit.serial.send("v:"); uBit.serial.send(value);
 | 
			
		||||
            if(length >= 8) {
 | 
			
		||||
                memcpy(&value, bytes + 4, 4);
 | 
			
		||||
                uBit.serial.send(",t:"); uBit.serial.send(value);                
 | 
			
		||||
                if (length >= 12) {
 | 
			
		||||
                    memcpy(&value, bytes + 8, 4);
 | 
			
		||||
                    uBit.serial.send(",s:"); uBit.serial.send(value);                                    
 | 
			
		||||
                    if (length >= 13) {
 | 
			
		||||
                        char name[MAX_FIELD_NAME_LENGTH+1];
 | 
			
		||||
                        uint8_t len = min(MAX_FIELD_NAME_LENGTH, bytes[12]);
 | 
			
		||||
                        memcpy(name, bytes + 13, len);
 | 
			
		||||
                        name[len] = 0;
 | 
			
		||||
                        uBit.serial.send(",n:\""); uBit.serial.send(name); uBit.serial.send("\"");                                    
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        uBit.serial.send("}\r\n");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -192,4 +195,14 @@ namespace radio {
 | 
			
		||||
        if (radioEnable() != MICROBIT_OK) return;
 | 
			
		||||
        uBit.radio.setTransmitPower(power);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
    * Set the radio to transmit the serial number in each message.
 | 
			
		||||
    */
 | 
			
		||||
    //% help=radio/set-transmit-serial-number
 | 
			
		||||
    //% weight=8
 | 
			
		||||
    //% block=radio_set_transmit_serial_number block="set tranmist serial number %transmit"
 | 
			
		||||
    void setTransmitSerialNumber(bool transmit) {
 | 
			
		||||
        transmitSerialNumber = transmit;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,13 +3,4 @@
 | 
			
		||||
 */
 | 
			
		||||
//% color=270 weight=34
 | 
			
		||||
namespace radio {
 | 
			
		||||
    /**
 | 
			
		||||
     * Broadcasts a number over radio to any connected micro:bit in the group.
 | 
			
		||||
     */    
 | 
			
		||||
    //% help=radio/send-number
 | 
			
		||||
    //% weight=60
 | 
			
		||||
    //% blockId=radio_datagram_send block="send number %MESSAGE" blockGap=8
 | 
			
		||||
    export function sendNumber(value: number) : void { 
 | 
			
		||||
        sendNumbers(value, 0, 0, 0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										31
									
								
								libs/microbit-radio/shims.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								libs/microbit-radio/shims.d.ts
									
									
									
									
										vendored
									
									
								
							@@ -6,31 +6,32 @@
 | 
			
		||||
declare namespace radio {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Broadcasts 4 numbers over radio to any connected micro:bit in the group.
 | 
			
		||||
     * Broadcasts a number over radio to any connected micro:bit in the group.
 | 
			
		||||
     */
 | 
			
		||||
    //% help=radio/send-numbers
 | 
			
		||||
    //% weight=59 debug=true
 | 
			
		||||
    //% blockId=radio_datagram_send_numbers block="send numbers|0: %VALUE0|1: %VALUE1|2: %VALUE2|3: %VALUE3" shim=radio::sendNumbers
 | 
			
		||||
    function sendNumbers(value_0: number, value_1: number, value_2: number, value_3: number): void;
 | 
			
		||||
    //% help=radio/send-number
 | 
			
		||||
    //% weight=60
 | 
			
		||||
    //% blockId=radio_datagram_send block="send number %MESSAGE" blockGap=8 shim=radio::sendNumber
 | 
			
		||||
    function sendNumber(value: number): void;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Broadcasts a name / value pair along with the device serial number
 | 
			
		||||
     * and running time to any connected BBC micro:bit in the group.
 | 
			
		||||
     * @param name the field name (max 12 characters), eg: "data"
 | 
			
		||||
     * @param the numberic value
 | 
			
		||||
     * @param value the numberic value
 | 
			
		||||
     */
 | 
			
		||||
    //% help=radio/send-value
 | 
			
		||||
    //% weight=4 debug=true
 | 
			
		||||
    //% weight=59
 | 
			
		||||
    //% blockId=radio_datagram_send_value block="send|value %name|= %value" shim=radio::sendValue
 | 
			
		||||
    function sendValue(name: string, number: number): void;
 | 
			
		||||
    function sendValue(name: string, value: number): void;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reads a value sent with `stream value` and writes it
 | 
			
		||||
     * to the serial stream as JSON
 | 
			
		||||
     */
 | 
			
		||||
    //% help=radio/read-value-to-serial
 | 
			
		||||
    //% weight=3 debug=true shim=radio::readValueToSerial
 | 
			
		||||
    function readValueToSerial(): void;
 | 
			
		||||
    //% help=radio/write-value-to-serial
 | 
			
		||||
    //% weight=3
 | 
			
		||||
    //% blockId=radio_write_value_serial block="write value to serial" shim=radio::writeValueToSerial
 | 
			
		||||
    function writeValueToSerial(): void;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Registers code to run when a packet is received over radio.
 | 
			
		||||
@@ -83,6 +84,14 @@ declare namespace radio {
 | 
			
		||||
    //% weight=9
 | 
			
		||||
    //% blockId=radio_set_transmit_power block="set transmit power %power" shim=radio::setTransmitPower
 | 
			
		||||
    function setTransmitPower(power: number): void;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the radio to transmit the serial number in each message.
 | 
			
		||||
     */
 | 
			
		||||
    //% help=radio/set-transmit-serial-number
 | 
			
		||||
    //% weight=8
 | 
			
		||||
    //% block=radio_set_transmit_serial_number block="set tranmist serial number %transmit" shim=radio::setTransmitSerialNumber
 | 
			
		||||
    function setTransmitSerialNumber(transmit: boolean): void;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Auto-generated. Do not edit. Really.
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "pxt-microbit",
 | 
			
		||||
  "version": "0.2.109",
 | 
			
		||||
  "version": "0.2.113",
 | 
			
		||||
  "description": "BBC micro:bit target for PXT",
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "JavaScript",
 | 
			
		||||
@@ -29,6 +29,6 @@
 | 
			
		||||
    "typescript": "^1.8.7"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "pxt-core": "0.2.121"
 | 
			
		||||
    "pxt-core": "0.2.124"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -53,10 +53,10 @@
 | 
			
		||||
        "deployDrives": "^MICROBIT"
 | 
			
		||||
    },
 | 
			
		||||
    "runtime": {
 | 
			
		||||
      "mathBlocks": true,
 | 
			
		||||
      "loopsBlocks": true,
 | 
			
		||||
      "logicBlocks": true,
 | 
			
		||||
      "variablesBlocks": true
 | 
			
		||||
        "mathBlocks": true,
 | 
			
		||||
        "loopsBlocks": true,
 | 
			
		||||
        "logicBlocks": true,
 | 
			
		||||
        "variablesBlocks": true
 | 
			
		||||
    },
 | 
			
		||||
    "simulator": {
 | 
			
		||||
        "autoRun": true,
 | 
			
		||||
@@ -72,14 +72,18 @@
 | 
			
		||||
        "log": true
 | 
			
		||||
    },
 | 
			
		||||
    "appTheme": {
 | 
			
		||||
        "accentColor": "#5C2D91",
 | 
			
		||||
        "logoUrl": "https://m.pxt.io/about",
 | 
			
		||||
        "logo": "./static/microbit.red.svg",
 | 
			
		||||
        "docsLogo": "./static/microbit.docs.svg",
 | 
			
		||||
        "portraitLogo":"./static/microbit.red.svg",
 | 
			
		||||
        "footerLogo": "./static/microbit.red.svg",
 | 
			
		||||
        "logo": "./static/microbit.simplified.svg",
 | 
			
		||||
        "docsLogo": "./static/microbit.simplified.svg",
 | 
			
		||||
        "portraitLogo": "./static/microbit.simplified.svg",
 | 
			
		||||
        "footerLogo": "./static/microbit.simplified.svg",
 | 
			
		||||
        "organizationLogo": "./static/Microsoft-logo_rgb_c-gray.png",
 | 
			
		||||
        "homeUrl": "https://m.pxt.io/",
 | 
			
		||||
        "embedUrl": "https://m.pxt.io/",
 | 
			
		||||
        "koduUrl": "https://www.kodugamelab.com/bbc-microbit/",
 | 
			
		||||
        "privacyUrl": "https://go.microsoft.com/fwlink/?LinkId=521839",
 | 
			
		||||
        "termsOfUseUrl": "https://go.microsoft.com/fwlink/?LinkID=206977",
 | 
			
		||||
        "visualStudioCode": true,
 | 
			
		||||
        "docMenu": [
 | 
			
		||||
            {
 | 
			
		||||
@@ -100,4 +104,4 @@
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
@@ -449,11 +449,21 @@ namespace pxsim.radio {
 | 
			
		||||
        board().radio.setTransmitPower(power);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    export function sendNumbers(value0: number, value1: number, value2: number, value3: number): void {
 | 
			
		||||
        board().radio.datagram.send([value0, value1, value2, value3]);
 | 
			
		||||
    export function setTransmitSerialNumber(transmit: boolean): void {
 | 
			
		||||
        board().radio.setTransmitSerialNumber(transmit);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    export function streamValue(name: string, value: number) {
 | 
			
		||||
    export function sendNumber(value: number): void {
 | 
			
		||||
        board().radio.datagram.send([value]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    export function writeValueToSerial(): void {
 | 
			
		||||
        let b = board();
 | 
			
		||||
        let v = b.radio.datagram.recv().data[0];
 | 
			
		||||
        b.writeSerial(`{v:${v}}`);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    export function sendValue(name: string, value: number) {
 | 
			
		||||
        board().radio.datagram.send([value]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								sim/state.ts
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								sim/state.ts
									
									
									
									
									
								
							@@ -85,7 +85,7 @@ namespace pxsim {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        recv(): PacketBuffer {
 | 
			
		||||
            var r = this.datagram.shift();
 | 
			
		||||
            let r = this.datagram.shift();
 | 
			
		||||
            if (!r) r = {
 | 
			
		||||
                data: [0, 0, 0, 0],
 | 
			
		||||
                rssi: -1
 | 
			
		||||
@@ -98,6 +98,7 @@ namespace pxsim {
 | 
			
		||||
        // uint8_t radioDefaultGroup = MICROBIT_RADIO_DEFAULT_GROUP;
 | 
			
		||||
        groupId = 0; // todo
 | 
			
		||||
        power = 0;
 | 
			
		||||
        transmitSerialNumber = false;
 | 
			
		||||
        datagram: RadioDatagram;
 | 
			
		||||
 | 
			
		||||
        constructor(private runtime: Runtime) {
 | 
			
		||||
@@ -112,6 +113,10 @@ namespace pxsim {
 | 
			
		||||
            this.power = Math.max(0, Math.min(7, power));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        setTransmitSerialNumber(sn: boolean) {
 | 
			
		||||
            this.transmitSerialNumber = !!sn;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        broadcast(msg: number) {
 | 
			
		||||
            Runtime.postMessage(<SimulatorEventBusMessage>{
 | 
			
		||||
                type: 'eventbus',
 | 
			
		||||
@@ -511,7 +516,7 @@ namespace pxsim {
 | 
			
		||||
 | 
			
		||||
        constructor() {
 | 
			
		||||
            super()
 | 
			
		||||
            this.id = "b" +Math_.random(2147483647);
 | 
			
		||||
            this.id = "b" + Math_.random(2147483647);
 | 
			
		||||
            this.animationQ = new AnimationQueue(runtime);
 | 
			
		||||
            this.bus = new EventBus(runtime);
 | 
			
		||||
            this.radio = new RadioBus(runtime);
 | 
			
		||||
@@ -598,13 +603,13 @@ namespace pxsim {
 | 
			
		||||
                let c = s[i];
 | 
			
		||||
                this.serialOutBuffer += c;
 | 
			
		||||
                if (c == '\n') {
 | 
			
		||||
                        Runtime.postMessage(<SimulatorSerialMessage>{
 | 
			
		||||
                            type: 'serial',
 | 
			
		||||
                            data: this.serialOutBuffer,
 | 
			
		||||
                            id: runtime.id
 | 
			
		||||
                        })
 | 
			
		||||
                        this.serialOutBuffer = ''
 | 
			
		||||
                        break;
 | 
			
		||||
                    Runtime.postMessage(<SimulatorSerialMessage>{
 | 
			
		||||
                        type: 'serial',
 | 
			
		||||
                        data: this.serialOutBuffer,
 | 
			
		||||
                        id: runtime.id
 | 
			
		||||
                    })
 | 
			
		||||
                    this.serialOutBuffer = ''
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -647,7 +652,7 @@ namespace pxsim {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public clear(): void {
 | 
			
		||||
            for (var i = 0; i < this.data.length; ++i)
 | 
			
		||||
            for (let i = 0; i < this.data.length; ++i)
 | 
			
		||||
                this.data[i] = 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -683,11 +688,11 @@ namespace pxsim {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    export function createFont(): Image {
 | 
			
		||||
        var data = [0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x8, 0x8, 0x0, 0x8, 0xa, 0x4a, 0x40, 0x0, 0x0, 0xa, 0x5f, 0xea, 0x5f, 0xea, 0xe, 0xd9, 0x2e, 0xd3, 0x6e, 0x19, 0x32, 0x44, 0x89, 0x33, 0xc, 0x92, 0x4c, 0x92, 0x4d, 0x8, 0x8, 0x0, 0x0, 0x0, 0x4, 0x88, 0x8, 0x8, 0x4, 0x8, 0x4, 0x84, 0x84, 0x88, 0x0, 0xa, 0x44, 0x8a, 0x40, 0x0, 0x4, 0x8e, 0xc4, 0x80, 0x0, 0x0, 0x0, 0x4, 0x88, 0x0, 0x0, 0xe, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x0, 0x1, 0x22, 0x44, 0x88, 0x10, 0xc, 0x92, 0x52, 0x52, 0x4c, 0x4, 0x8c, 0x84, 0x84, 0x8e, 0x1c, 0x82, 0x4c, 0x90, 0x1e, 0x1e, 0xc2, 0x44, 0x92, 0x4c, 0x6, 0xca, 0x52, 0x5f, 0xe2, 0x1f, 0xf0, 0x1e, 0xc1, 0x3e, 0x2, 0x44, 0x8e, 0xd1, 0x2e, 0x1f, 0xe2, 0x44, 0x88, 0x10, 0xe, 0xd1, 0x2e, 0xd1, 0x2e, 0xe, 0xd1, 0x2e, 0xc4, 0x88, 0x0, 0x8, 0x0, 0x8, 0x0, 0x0, 0x4, 0x80, 0x4, 0x88, 0x2, 0x44, 0x88, 0x4, 0x82, 0x0, 0xe, 0xc0, 0xe, 0xc0, 0x8, 0x4, 0x82, 0x44, 0x88, 0xe, 0xd1, 0x26, 0xc0, 0x4, 0xe, 0xd1, 0x35, 0xb3, 0x6c, 0xc, 0x92, 0x5e, 0xd2, 0x52, 0x1c, 0x92, 0x5c, 0x92, 0x5c, 0xe, 0xd0, 0x10, 0x10, 0xe, 0x1c, 0x92, 0x52, 0x52, 0x5c, 0x1e, 0xd0, 0x1c, 0x90, 0x1e, 0x1e, 0xd0, 0x1c, 0x90, 0x10, 0xe, 0xd0, 0x13, 0x71, 0x2e, 0x12, 0x52, 0x5e, 0xd2, 0x52, 0x1c, 0x88, 0x8, 0x8, 0x1c, 0x1f, 0xe2, 0x42, 0x52, 0x4c, 0x12, 0x54, 0x98, 0x14, 0x92, 0x10, 0x10, 0x10, 0x10, 0x1e, 0x11, 0x3b, 0x75, 0xb1, 0x31, 0x11, 0x39, 0x35, 0xb3, 0x71, 0xc, 0x92, 0x52, 0x52, 0x4c, 0x1c, 0x92, 0x5c, 0x90, 0x10, 0xc, 0x92, 0x52, 0x4c, 0x86, 0x1c, 0x92, 0x5c, 0x92, 0x51, 0xe, 0xd0, 0xc, 0x82, 0x5c, 0x1f, 0xe4, 0x84, 0x84, 0x84, 0x12, 0x52, 0x52, 0x52, 0x4c, 0x11, 0x31, 0x31, 0x2a, 0x44, 0x11, 0x31, 0x35, 0xbb, 0x71, 0x12, 0x52, 0x4c, 0x92, 0x52, 0x11, 0x2a, 0x44, 0x84, 0x84, 0x1e, 0xc4, 0x88, 0x10, 0x1e, 0xe, 0xc8, 0x8, 0x8, 0xe, 0x10, 0x8, 0x4, 0x82, 0x41, 0xe, 0xc2, 0x42, 0x42, 0x4e, 0x4, 0x8a, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8, 0x4, 0x80, 0x0, 0x0, 0x0, 0xe, 0xd2, 0x52, 0x4f, 0x10, 0x10, 0x1c, 0x92, 0x5c, 0x0, 0xe, 0xd0, 0x10, 0xe, 0x2, 0x42, 0x4e, 0xd2, 0x4e, 0xc, 0x92, 0x5c, 0x90, 0xe, 0x6, 0xc8, 0x1c, 0x88, 0x8, 0xe, 0xd2, 0x4e, 0xc2, 0x4c, 0x10, 0x10, 0x1c, 0x92, 0x52, 0x8, 0x0, 0x8, 0x8, 0x8, 0x2, 0x40, 0x2, 0x42, 0x4c, 0x10, 0x14, 0x98, 0x14, 0x92, 0x8, 0x8, 0x8, 0x8, 0x6, 0x0, 0x1b, 0x75, 0xb1, 0x31, 0x0, 0x1c, 0x92, 0x52, 0x52, 0x0, 0xc, 0x92, 0x52, 0x4c, 0x0, 0x1c, 0x92, 0x5c, 0x90, 0x0, 0xe, 0xd2, 0x4e, 0xc2, 0x0, 0xe, 0xd0, 0x10, 0x10, 0x0, 0x6, 0xc8, 0x4, 0x98, 0x8, 0x8, 0xe, 0xc8, 0x7, 0x0, 0x12, 0x52, 0x52, 0x4f, 0x0, 0x11, 0x31, 0x2a, 0x44, 0x0, 0x11, 0x31, 0x35, 0xbb, 0x0, 0x12, 0x4c, 0x8c, 0x92, 0x0, 0x11, 0x2a, 0x44, 0x98, 0x0, 0x1e, 0xc4, 0x88, 0x1e, 0x6, 0xc4, 0x8c, 0x84, 0x86, 0x8, 0x8, 0x8, 0x8, 0x8, 0x18, 0x8, 0xc, 0x88, 0x18, 0x0, 0x0, 0xc, 0x83, 0x60];
 | 
			
		||||
        const data = [0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x8, 0x8, 0x0, 0x8, 0xa, 0x4a, 0x40, 0x0, 0x0, 0xa, 0x5f, 0xea, 0x5f, 0xea, 0xe, 0xd9, 0x2e, 0xd3, 0x6e, 0x19, 0x32, 0x44, 0x89, 0x33, 0xc, 0x92, 0x4c, 0x92, 0x4d, 0x8, 0x8, 0x0, 0x0, 0x0, 0x4, 0x88, 0x8, 0x8, 0x4, 0x8, 0x4, 0x84, 0x84, 0x88, 0x0, 0xa, 0x44, 0x8a, 0x40, 0x0, 0x4, 0x8e, 0xc4, 0x80, 0x0, 0x0, 0x0, 0x4, 0x88, 0x0, 0x0, 0xe, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x0, 0x1, 0x22, 0x44, 0x88, 0x10, 0xc, 0x92, 0x52, 0x52, 0x4c, 0x4, 0x8c, 0x84, 0x84, 0x8e, 0x1c, 0x82, 0x4c, 0x90, 0x1e, 0x1e, 0xc2, 0x44, 0x92, 0x4c, 0x6, 0xca, 0x52, 0x5f, 0xe2, 0x1f, 0xf0, 0x1e, 0xc1, 0x3e, 0x2, 0x44, 0x8e, 0xd1, 0x2e, 0x1f, 0xe2, 0x44, 0x88, 0x10, 0xe, 0xd1, 0x2e, 0xd1, 0x2e, 0xe, 0xd1, 0x2e, 0xc4, 0x88, 0x0, 0x8, 0x0, 0x8, 0x0, 0x0, 0x4, 0x80, 0x4, 0x88, 0x2, 0x44, 0x88, 0x4, 0x82, 0x0, 0xe, 0xc0, 0xe, 0xc0, 0x8, 0x4, 0x82, 0x44, 0x88, 0xe, 0xd1, 0x26, 0xc0, 0x4, 0xe, 0xd1, 0x35, 0xb3, 0x6c, 0xc, 0x92, 0x5e, 0xd2, 0x52, 0x1c, 0x92, 0x5c, 0x92, 0x5c, 0xe, 0xd0, 0x10, 0x10, 0xe, 0x1c, 0x92, 0x52, 0x52, 0x5c, 0x1e, 0xd0, 0x1c, 0x90, 0x1e, 0x1e, 0xd0, 0x1c, 0x90, 0x10, 0xe, 0xd0, 0x13, 0x71, 0x2e, 0x12, 0x52, 0x5e, 0xd2, 0x52, 0x1c, 0x88, 0x8, 0x8, 0x1c, 0x1f, 0xe2, 0x42, 0x52, 0x4c, 0x12, 0x54, 0x98, 0x14, 0x92, 0x10, 0x10, 0x10, 0x10, 0x1e, 0x11, 0x3b, 0x75, 0xb1, 0x31, 0x11, 0x39, 0x35, 0xb3, 0x71, 0xc, 0x92, 0x52, 0x52, 0x4c, 0x1c, 0x92, 0x5c, 0x90, 0x10, 0xc, 0x92, 0x52, 0x4c, 0x86, 0x1c, 0x92, 0x5c, 0x92, 0x51, 0xe, 0xd0, 0xc, 0x82, 0x5c, 0x1f, 0xe4, 0x84, 0x84, 0x84, 0x12, 0x52, 0x52, 0x52, 0x4c, 0x11, 0x31, 0x31, 0x2a, 0x44, 0x11, 0x31, 0x35, 0xbb, 0x71, 0x12, 0x52, 0x4c, 0x92, 0x52, 0x11, 0x2a, 0x44, 0x84, 0x84, 0x1e, 0xc4, 0x88, 0x10, 0x1e, 0xe, 0xc8, 0x8, 0x8, 0xe, 0x10, 0x8, 0x4, 0x82, 0x41, 0xe, 0xc2, 0x42, 0x42, 0x4e, 0x4, 0x8a, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8, 0x4, 0x80, 0x0, 0x0, 0x0, 0xe, 0xd2, 0x52, 0x4f, 0x10, 0x10, 0x1c, 0x92, 0x5c, 0x0, 0xe, 0xd0, 0x10, 0xe, 0x2, 0x42, 0x4e, 0xd2, 0x4e, 0xc, 0x92, 0x5c, 0x90, 0xe, 0x6, 0xc8, 0x1c, 0x88, 0x8, 0xe, 0xd2, 0x4e, 0xc2, 0x4c, 0x10, 0x10, 0x1c, 0x92, 0x52, 0x8, 0x0, 0x8, 0x8, 0x8, 0x2, 0x40, 0x2, 0x42, 0x4c, 0x10, 0x14, 0x98, 0x14, 0x92, 0x8, 0x8, 0x8, 0x8, 0x6, 0x0, 0x1b, 0x75, 0xb1, 0x31, 0x0, 0x1c, 0x92, 0x52, 0x52, 0x0, 0xc, 0x92, 0x52, 0x4c, 0x0, 0x1c, 0x92, 0x5c, 0x90, 0x0, 0xe, 0xd2, 0x4e, 0xc2, 0x0, 0xe, 0xd0, 0x10, 0x10, 0x0, 0x6, 0xc8, 0x4, 0x98, 0x8, 0x8, 0xe, 0xc8, 0x7, 0x0, 0x12, 0x52, 0x52, 0x4f, 0x0, 0x11, 0x31, 0x2a, 0x44, 0x0, 0x11, 0x31, 0x35, 0xbb, 0x0, 0x12, 0x4c, 0x8c, 0x92, 0x0, 0x11, 0x2a, 0x44, 0x98, 0x0, 0x1e, 0xc4, 0x88, 0x1e, 0x6, 0xc4, 0x8c, 0x84, 0x86, 0x8, 0x8, 0x8, 0x8, 0x8, 0x18, 0x8, 0xc, 0x88, 0x18, 0x0, 0x0, 0xc, 0x83, 0x60];
 | 
			
		||||
 | 
			
		||||
        let nb = data.length;
 | 
			
		||||
        let n = nb / 5;
 | 
			
		||||
        var font = createImage(nb);
 | 
			
		||||
        let font = createImage(nb);
 | 
			
		||||
        for (let c = 0; c < n; c++) {
 | 
			
		||||
            for (let row = 0; row < 5; row++) {
 | 
			
		||||
                let char = data[c * 5 + row];
 | 
			
		||||
 
 | 
			
		||||
@@ -444,13 +444,11 @@
 | 
			
		||||
        "pvjilh",
 | 
			
		||||
        "pvqrgm",
 | 
			
		||||
        "pvzmhz",
 | 
			
		||||
        "pwlxyy",
 | 
			
		||||
        "pxebwk",
 | 
			
		||||
        "pxizap",
 | 
			
		||||
        "pxyovu",
 | 
			
		||||
        "pymfqh",
 | 
			
		||||
        "pzmjbx",
 | 
			
		||||
        "pzptoo",
 | 
			
		||||
        "pzucty",
 | 
			
		||||
        "rannhh",
 | 
			
		||||
        "rbnvdq",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user