TECHNICAL NOTES. Using JavaScript Objects for BrightScript (FW 6.1.x)

Similar documents
TECHNICAL NOTES Using JavaScript Objects for BrightScript (FW 5.1.x)

TECHNICAL NOTES. Using JavaScript Objects for BrightScript (FW 5.0.x)

FIRMWARE RELEASE NOTES

FIRMWARE RELEASE NOTES

FIRMWARE RELEASE NOTES

FIRMWARE RELEASE NOTES

FIRMWARE RELEASE NOTES

FIRMWARE RELEASE NOTES

BRIGHTAUTHOR USER GUIDE

TECHNICAL NOTES. Player Security Statement. BrightSign, LLC Lark Ave., Suite 200 Los Gatos, CA

USER GUIDE. BrightAuthor 3.7. BrightSign, LLC Lark Ave., Suite 200 Los Gatos, CA

BRIGHTSIGN QUICK START GUIDE FOR HD110, HD210, HD410, HD810, HD1010

BRIGHTSIGN APP USER GUIDE

USER GUIDE. BrightSign Network WebUI Version 3.1. BrightSign, LLC Lark Ave., Suite 200 Los Gatos, CA

BRIGHTSIGN QUICK START GUIDE FOR HD120, HD220, HD1020, XD230, XD1030, XD1230

BRIGHTSIGN QUICK START GUIDE. BrightSign, LLC Lark Ave., Suite 200 Los Gatos, CA

SC1602LC 16x2 Large Characters RS232 LCD Module. User s Manual. Large Viewing Area 99mm x 24mm. Large Character Size. 4.84mm x 9.66mm.

BRIGHTSIGN APP USER GUIDE

FIRMWARE RELEASE NOTES

BRIGHTAUTHOR RELEASE NOTES

USER GUIDE. BrightSign Network Enterprise Edition WebUI Version 4.2

USER GUIDE. BrightAuthor software version 3.4/3.2. BrightSign, LLC Lark Ave., Suite 200 Los Gatos, CA

USER GUIDE. BrightSign Network Enterprise Edition WebUI Version 3.5

FIRMWARE RELEASE NOTES

TD1012, BrightSign HD110 / HD210 / HD210w / HD410 / HD810 / HD1010 / HD1010w ("Compact") Software April 6, 2012

USER GUIDE. BrightAuthor 3.8. BrightSign, LLC Lark Ave., Suite 200 Los Gatos, CA

variable 1. Start of Packet - is used to provide synchronization when parsing packets. Always 0xFC

HTML5 Video. Streaming Parameters. Example (HTML) Example (JavaScript) Streaming Video ON THIS PAGE

variable 1. Start of Packet - is used to provide synchronization when parsing packets. Always 0xFC

USER GUIDE. BrightAuthor 4.3. BrightSign, LLC Lark Ave., Suite B Los Gatos, CA

TECHNICAL NOTES. Configuring BrightAuthor for BSNEE

MODEL TDAI-2170 INTEGRATED AMPLIFIER EXTERNAL CONTROL MANUAL

UPGRADE GUIDE BrightSign Network Enterprise Edition 4.2 BrightSign, LLC Lark Ave. Suite B, Los Gatos, CA

HTML5: BEST PRACTICES

CSC Web Programming. Introduction to JavaScript

CANopen IO X2 Fact sheet

UPGRADE GUIDE BrightSign Network Enterprise Edition 3.9 BrightSign, LLC Lark Ave. Suite B, Los Gatos, CA

TECHNICAL NOTES. XD Media Server (FW version 4.8.x) BrightSign, LLC Lark Ave., Suite 200 Los Gatos, CA

CANopen IO X1 Fact sheet

UPGRADE GUIDE BrightSign Network Enterprise Edition 4.1 BrightSign, LLC Lark Ave. Suite B, Los Gatos, CA

XD Series. Faster HTML p60 dual decode. Mini-SATA Interface. Fastest HTML5. Remote Snapshot. 4K Upscaling. Live Feeds

CANopen IO X4 Fact sheet

The information, instructions and examples provided in this document are categorized in 3 different levels:

User Guide. BrightAuthor Release 2.0. BrightSign HD110, HD210, HD210w, HD410, HD810, HD1010, and HD1010w. COMPATIBLE WITH

SC2004MBS 20x4 Characters MODBUS RTU Slave LCD

DMTME Multimeters. Communication protocol. Technical specification V1.2 ABB

ECE251: Intro to Microprocessors Name: Solutions Mid Term Exam October 4, 2018

APPLICATION ADMINISTRATOR GUIDE

BRIGHTSIGN PRODUCT SELECTOR

Technical Specification. Third Party Control Protocol. AV Revolution

ArduCAM USB Camera SDK

ArduCAM-M-2MP Camera Shield

C628 Enhanced JPEG Module. User Manual

M2M/DMTME Instruments Communication protocol. Technical specification V.2.1 2CSG445011D0201

Ajax- XMLHttpResponse. Returns a value such as ArrayBuffer, Blob, Document, JavaScript object, or a DOMString, based on the value of

CTT MODBUS-RTU COMMUNICATION PROTOCOL TEMPERATURE MONITOR DEVICE

Keywords: CRC, CRC-7, cyclic redundancy check, industrial output, PLC, programmable logic controller, C code, CRC generation, microprocessor, switch

DEVELOPER'S GUIDE. BrightSign Media Server BrightSign Firmware Version: 6.0.x BrightSign Models: 4K242, 4K1042, 4K1142, XD232, XD1032, XD1132

DEVELOPER'S GUIDE. BrightSign Media Server BrightSign Firmware Version: 5.1.x BrightSign Models: 4K242, 4K1042, 4K1142, XD232, XD1032, XD1132

GNetPlus Communication Protocol

DRPC100-OLED UART PROTOCOL SPECIFICATION

App Note Application Note: State-Driven Control of a dpasp using a Microchip PIC.

DelcomX USB HID ActiveX Control Datasheet

bytes per disk block (a block is usually called sector in the disk drive literature), sectors in each track, read/write heads, and cylinders (tracks).

THE GLOBAL MARKET LEADER IN DIGITAL SIGNAGE PLAYERS


AN10184 Connecting a keyboard to the Philips LPC9xx microcontroller

THE MARKET LEADER IN DIGITAL SIGNAGE MEDIA PLAYERS

Custom Installation Notes: Serial programming interface and IR remote commands for Arcam UDP411 BD Player

Technical Support Note No. 105 Date August 2002 Rev. 1

APPLICATION ADMINISTRATOR GUIDE

ArduCAM USB Camera C/C++ SDK

CS 4400 Fall 2018 Midterm Exam 2 Practice (Version 2)

Table of Contents. Remote Serial Ports Documentation

Data sheet Wireless UART firmware version 4

imetos LoRa Data payload structure

Application Note. Introduction AN2471/D 3/2003. PC Master Software Communication Protocol Specification

Brightsign 2.2 Update BrightAuthor 2.2 includes a large number of new features and updates.

The Purpose of Interrupt

DC BRUSHLESS MOTOR CONTROLLER BLSD-20/BLSD-50

LCD Module with I2C / Serial Interface and Keypad Control «LCD I2C/Serial» User s Guide. Copyright 2008 IMS

P-Bus Gateway Firmware

Product Questions Magento Extension

URM04 V2.0 (SKU:SEN0002)

Positioning Controller

RB-Dfr-12 DFRobot URM04 v2.0 Ultrasonic Sensor

Specification E2 Interface

Technical Information. Command overview of Vision Systems

Dell S500/S500wi RS232 Protocol Document

Blaupunkt ( DMS?? ) Page 1 of 13

Hello, and welcome to this presentation of the STM32 Universal Synchronous/Asynchronous Receiver/Transmitter Interface. It covers the main features

CSCI 2212: Intermediate Programming / C Chapter 15

Modbus ASCII Serial Device Driver Help 2009 Kepware Technologies

TBS Unify Pro / SmartAudio

THE GLOBAL MARKET LEADER IN DIGITAL SIGNAGE PLAYERS

MTR-4. C8 Command to MODBUS Bridge User Manual F-1, No. 631, Chung Der Road, Sec 1, Taichung Taiwan.

ELE 758 * DIGITAL SYSTEMS ENGINEERING * MIDTERM TEST * Circle the memory type based on electrically re-chargeable elements

OptimiData. JPEG2000 Software Development Kit for C/C++ Reference Manual. Version 1.6. from

EtherCAT User Manual. For SS EtherCAT

HTML Forms. By Jaroslav Mohapl

Transcription:

TECHNICAL NOTES Using JavaScript Objects for BrightScript (FW 6.1.x) BrightSign, LLC. 16780 Lark Ave., Suite B Los Gatos, CA 95032 408-852-9263 www.brightsign.biz

TABLE OF CONTENTS Enabling BrightScript JavaScript Objects... 3 BSControlPort... 5 BSDatagramSocket... 8 BSDeviceInfo... 9 BSIRReceiver... 11 BSIRTransmitter... 13 BSVideoMode... 14 BSCECTransmitter... 16 BSCECReceiver... 17 BSSyncManager... 18 BSMessagePort... 21 BSSerialPort... 23 BSTicker... 25 Technical Notes JavaScript Objects (FW ver. 6.0.x) 1

INTRODUCTION The BrightSign HTML engine exposes several JavaScript objects for BrightScript. These objects allow you to link many standard interactive, database, and hardware elements (serial, CEC, device info, etc.) to HTML pages. This tech note details the functions and parameters for each JavaScript object. For more information about the BrightScript objects that the JavaScript objects are linked to, see the BrightScript Object Reference Manual. Technical Notes JavaScript Objects (FW ver. 6.0.x) 2

Enabling BrightScript JavaScript Objects For security reasons, all BrightScript JavaScript objects are disabled by default. As a result, you will encounter DOM errors like those shown below if you do not enable first enable them (to view a console log of BrightScript/JavaScript events, navigate to the Diagnostic Web Server or use the JavaScript console). Follow the below steps to enable BrightScript JavaScript objects. If Using BrightAuthor to Display HTML Make sure that you are using BrightAuthor version 4.1 or later. Earlier versions do not have the code that enables BrightScript objects for JavaScript. Also, ensure that the Enable external data box is checked within the HTML5 state that is displaying your page. If displaying HTML using BrightScript Call the AllowJavaScriptUrls() method on the rohtmlwidget instance you are using to display the page. This method accepts an associative array that maps JavaScript BrightScript classes to the URL(s) that are allowed to use them. An all key indicates that all classes are authorized for the associated URL(s). An asterisk "*" value indicates that all URLs are authorized for the associated BrightScript class. A "local" value indicates that all local pages are authorized for the associated BrightScript class. Technical Notes JavaScript Objects (FW ver. 6.0.x) 3

Example: The following will enable all BrightScript classes for all URLs. html.allowjavascripturls( all: "*" ) Example: The following will enable all BrightScript classes for local pages and the BrightSign homepage. html.allowjavascripturls( all: "local", "http://www.brightsign.biz" ) Technical Notes JavaScript Objects (FW ver. 6.0.x) 4

BSControlPort For more information about available methods, refer to the Object Reference Manual entries on rocontrolport and rogpiocontrolport. Object Creation BSControlPort(in DOMString PortName); Methods boolean SetOutputValue(in unsigned long Param) boolean SetOutputValues(in unsigned long Param1, in unsigned long Param2, in unsigned long Param3, in unsigned long Param4) boolean SetPinValue(in unsigned long Pin, in unsigned long Param) boolean ConfigureAsInput (in unsigned long Pin); boolean ConfigureAsOutput (unsigned long Pin); Events The following events are available on the BSControlPort object. Each event can receive a ControlPortEvent event. oncontroldown oncontrolup oncontrolevent ControlPortEvent Attributes readonly attribute unsigned long code Example The following JavaScript example causes the LEDs on a BP900 button board to twinkle: var bp900_gpio; function myfunction() var bp900_setup = new BSControlPort("TouchBoard-0-LED-SETUP"); bp900_setup.setpinvalue(0, 11) var bp900 = new BSControlPort("TouchBoard-0-LED"); bp900.setpinvalue(0, 0x07fe) bp900.setpinvalue(1, 0x07fd) bp900.setpinvalue(2, 0x07fb) bp900.setpinvalue(3, 0x07f7) bp900.setpinvalue(4, 0x07ef) bp900.setpinvalue(5, 0x07df) Technical Notes JavaScript Objects (FW ver. 6.0.x) 5

bp900.setpinvalue(6, 0x07bf) bp900.setpinvalue(7, 0x077f) bp900.setpinvalue(8, 0x06ff) bp900.setpinvalue(9, 0x05ff) bp900.setpinvalue(10, 0x03ff) bp900_gpio = new BSControlPort("TouchBoard-0-GPIO"); bp900_gpio.oncontroldown = function(e) console.log('###### oncontroldown' + e.code); Example The following example displays events from a GPIO expander board. Note that using the equivalent rogpiocontrolport object in BrightScript at the same time will result in unpredictable I/O behavior. <html> <head> <script> var bp900_gpio = new BSControlPort("BrightSign"); bp900_gpio.oncontroldown = function(e) console.log('### oncontroldown ' + e.code); newtext = " DOWN: " + e.code + "\n"; document.myform.outputtext.value += newtext; document.myform.outputtext.scrolltop = document.myform.outputtext.scrollheight; bp900_gpio.oncontrolup = function(e) console.log('### oncontrolup ' + e.code); newtext = " UP: " + e.code + "\n"; document.myform.outputtext.value += newtext; document.myform.outputtext.scrolltop = document.myform.outputtext.scrollheight; bp900_gpio.oncontrolevent = function(e) console.log('### oncontrolevent ' + e.code); newtext = "EVENT: " + e.code + "\n"; document.myform.outputtext.value += newtext; document.myform.outputtext.scrolltop = document.myform.outputtext.scrollheight; function ledon(output_index) bp900_gpio.configureasoutput(output_index); Technical Notes JavaScript Objects (FW ver. 6.0.x) 6

newtext = " LED: " + output_index + "\n"; document.myform.outputtext.value += newtext; document.myform.outputtext.scrolltop = document.myform.outputtext.scrollheight; function buttonon(output_index) bp900_gpio.configureasinput(output_index); newtext = "INPUT: " + output_index + "\n"; document.myform.outputtext.value += newtext; document.myform.outputtext.scrolltop = document.myform.outputtext.scrollheight; </script> </head> <body bgcolor="#e6e6fa"> <h1>gpio/expander Test Page</h1> Note this does NOT play well with <em>rogpiocontrolport</em>!!<br><br> <input type="button" onclick="ledon(0)" value="led0"> <input type="button" onclick="ledon(1)" value="led1"> <input type="button" onclick="ledon(2)" value="led2"> <input type="button" onclick="ledon(3)" value="led3"> <input type="button" onclick="ledon(4)" value="led4"> <input type="button" onclick="ledon(5)" value="led5"> <input type="button" onclick="ledon(6)" value="led6"> <input type="button" onclick="ledon(7)" value="led7"> <br> <input type="button" onclick="buttonon(0)" value="button0"> <input type="button" onclick="buttonon(1)" value="button1"> <input type="button" onclick="buttonon(2)" value="button2"> <input type="button" onclick="buttonon(3)" value="button3"> <input type="button" onclick="buttonon(4)" value="button4"> <input type="button" onclick="buttonon(5)" value="button5"> <input type="button" onclick="buttonon(6)" value="button6"> <input type="button" onclick="buttonon(7)" value="button7"> <br> <form name="myform"> <textarea readonly rows="50" cols="100" name="outputtext" style="fontfamily:monospace"></textarea> </form> </body> </html> Technical Notes JavaScript Objects (FW ver. 6.0.x) 7

BSDatagramSocket For more information about available methods, refer to the Object Reference Manual entry on rodatagramreceiver and rodatagramevent. Methods boolean BindLocalPort(in unsigned long portnumber) long GetLocalPort() boolean JoinMulticastGroup(in DOMString group) boolean SendTo(in DOMString dest, in long port, in ArrayBufferView data) boolean SendTo(in DOMString dest, in long port, in DOMString data) Events The following event is available on the BSDatagramSocket object. It can receive an event of the type DatagramSocketEvent. Use GetBytes() to retrieve the body of the UDP message. ondatagram DatagramSocketEvent The DatagramSocketEvent has the following attributes: readonly attribute DOMString remotehost readonly attribute int remoteport The DatagramSocketEvent supports the following methods: ArrayBuffer getbytes() Example var bssocketmessage = new BSDatagramSocket(); bssocketmessage.bindlocalport(1234) bssocketmessage.ondatagram = function(e) console.log(e); ; Technical Notes JavaScript Objects (FW ver. 6.0.x) 8

BSDeviceInfo For more information about available methods, refer to the Object Reference Manual entry on rodeviceinfo. Attributes readonly attribute DOMString model readonly attribute DOMString version readonly attribute int deviceuptime readonly attribute int devicelifetime readonly attribute int devicebootcount readonly attribute DOMString bootversion readonly attribute DOMString deviceuniqueid readonly attribute DOMString family Methods int VersionCompare(in DOMString version) int BootVersionCompare(in DOMString version) boolean HasFeature(in DOMString feature) Example The following JavaScript example posts device information on the page when the button is clicked: function deviceinfo() var device_info = new BSDeviceInfo(); document.getelementbyid("modeltext").innerhtml = device_info.model; document.getelementbyid("versiontext").innerhtml = device_info.version; document.getelementbyid("bversiontext").innerhtml = device_info.bootversion; document.getelementbyid("serialtext").innerhtml = device_info.deviceuniqueid; document.getelementbyid("familytext").innerhtml = device_info.family; document.getelementbyid("uptime").innerhtml = device_info.deviceuptime; document.getelementbyid("lifetime").innerhtml = device_info.devicelifetime; document.getelementbyid("bootcount").innerhtml = device_info.devicebootcount; if(device_info.versioncompare("4.7.36") > 0) document.getelementbyid("version1").innerhtml = "Version > 4.7.36" else document.getelementbyid("version1").innerhtml = "Version <= 4.7.36" if(device_info.hasfeature("six Channel Audio")) Technical Notes JavaScript Objects (FW ver. 6.0.x) 9

document.getelementbyid("feature").innerhtml = "6 Channel Audio Available" else document.getelementbyid("feature").innerhtml = "6 Channel Audio NOT Available" Technical Notes JavaScript Objects (FW ver. 6.0.x) 10

BSIRReceiver This class receives IR events. For more information, refer to the Object Reference Manual entry on roirreceiver. Object Creation A BSIRReceiver object must specify the hardware interface that will receive IR events, as well as the encoding(s) to look for: BSIRReceiver(in DOMString interface, in DOMString encodings); Valid hardware interfaces include the following: "GPIO": Pin 1 of the GPIO connector "IR-in": The 3.5mm IR input/output connector (available on the 4K series of players) "Iguana": The Iguanaworks IR transceiver. This source can support both NEC and RC5 encodings simultaneously. Valid encodings include the following (multiple encodings can be specified in the string using a ";"): "NEC" "RC5" (supported on the Iguanaworks device only) Methods void Close() Events These events are available on the BSIRReceiver object. Each event can receive an IRReceiverEvent event. onremotedown onremoterepeat onremoteup (supported on the Iguanaworks device only) IRReceiverEvent Attributes readonly attribute DOMString irtype; readonly attribute unsigned long code; Example The following JavaScript example displays messages on the log when receiving remote codes: function myfunction() var ir_receiver = new BSIRReceiver(); ir_receiver.onremotedown = function(e) console.log('############ onremotedown: ' + e.irtype + " - " + e.code); Technical Notes JavaScript Objects (FW ver. 6.0.x) 11

ir_receiver.onremoteup = function(e) console.log('############ onremoteup: ' + e.irtype + " - " + e.code); Technical Notes JavaScript Objects (FW ver. 6.0.x) 12

BSIRTransmitter For more information about available methods, refer to the Object Reference Manual entry on roirtransmitter. Object Creation A BSIRTransmitter object must specify the hardware interface that will output the IR signal: BSIRTransmitter (in DOMString interface); Valid hardware interfaces include the following: "IR-out": The 3.5mm IR input connector (available on XD players) or 3.5mm IR input/output connector (available on 4K players) "Iguana": The Iguanaworks IR transceiver Methods boolean Send(in DOMString Type, in unsigned long code) boolean SetSendPolarity(in boolean polarity) Example The following JavaScript example sends the indicated IR codes when the corresponding functions are called: <script> var irtransmitter = new BSIRTransmitter(); function ircode1() console.log('############ ircode1'); irtransmitter.send("nec", 65284); function ircode2() console.log('############ ircode2'); irtransmitter.send("nec", 65288); function ircode3() console.log('############ ircode3'); irtransmitter.send("nec", 65290); </script> Technical Notes JavaScript Objects (FW ver. 6.0.x) 13

BSVideoMode For more information about available methods, please refer to the Object Reference Manual entry on rovideomode. If you d like to change the video mode of the player, you will need to use BrightScript instead of this JavaScript class. Attributes readonly attribute int resx readonly attribute int resy readonly attribute int safex readonly attribute int safey readonly attribute int safewidth readonly attribute int safeheight readonly attribute DOMString mode Methods boolean IsAttached(in DOMString connector) DOMString GetBestMode(in DOMString connector) boolean SetBackgroundColour(in unsigned long rgb) boolean SetBackgroundColour(in unsigned long r, in unsigned long g, in unsigned long b) boolean HdmiAudioDisable(in boolean disable) boolean SetDecoderMode(in DOMString decoder, in DOMString timeslice_mode, in int z_order, in DOMString friendly_name, in boolean enable_mosaic_deinterlacer) Example The following JavaScript example illustrates how to retrieve information about the current video mode: function fillinvideodata() var videomode_info = new BSVideoMode(); document.getelementbyid("resx").innerhtml = videomode_info.resx; document.getelementbyid("resy").innerhtml = videomode_info.resy; document.getelementbyid("safex").innerhtml = videomode_info.safex; document.getelementbyid("safey").innerhtml = videomode_info.safey; document.getelementbyid("safewidth").innerhtml = videomode_info.safewidth; document.getelementbyid("safeheight").innerhtml = videomode_info.safeheight; document.getelementbyid("videomode").innerhtml = videomode_info.mode; Technical Notes JavaScript Objects (FW ver. 6.0.x) 14

document.getelementbyid("bestmode").innerhtml = videomode_info.getbestmode("hdmi"); document.getelementbyid("connectedflag").innerhtml = videomode_info.isattached("vga"); function changebackground() var videomode_info = new BSVideoMode(); videomode_info.setbackgroundcolour(0xff0000); Technical Notes JavaScript Objects (FW ver. 6.0.x) 15

BSCECTransmitter For more information about available methods, refer to the Object Reference Manual entry on rocecinterface. Note that you can only use this JavaScript class to send CEC messages. Methods boolean SendRawMessage(in ArrayBuffer data) boolean SendRawMessage(in ArrayBufferView data) boolean SendRawMessage(in DOMString data) Example The following JavaScript example shows how to send a set of CEC messages: function cecdisplayon() console.log("### cecdisplayon ###"); var cec_control = new BSCECTransmitter(); var buffer = new Uint8Array(2); buffer[ 0 ] = 0x40; buffer[ 1 ] = 0x0D; cec_control.sendrawmessage(buffer); function cecdisplayoff() console.log("### cecdisplayoff ###"); var cec_control = new BSCECTransmitter(); var buffer = new Uint8Array(2); buffer[ 0 ] = 0x40; buffer[ 1 ] = 0x36; cec_control.sendrawmessage(buffer); Technical Notes JavaScript Objects (FW ver. 6.0.x) 16

BSCECReceiver For more information about available methods, refer to the Object Reference Manual entry for rocecinterface. Note that you can only use this JavaScript class to receive CEC messages. Events The following events are available on the BSCECReceiver object. They can receive an event of the type CECReceiverEvent. onececrxframe oncectxcomplete CECReceiverEvent Attributes readonly attribute int status readonly attribute DOMString data Example <script> function loadcec() console.log("*** loadcec ***"); var cec_in = new BSCECReceiver(); cec_in.oncecrxframe = function(e) console.log('############ oncecrxframe: ' + e.data); serial_out.oncectxcomplete = function(e) console.log('############ oncectxcomplete: ' + e.status); </script> Technical Notes JavaScript Objects (FW ver. 6.0.x) 17

BSSyncManager For more information about available methods, refer to the Object Reference Manual entry for rosyncmanager. Object Creation BSSyncManager(in DOMString domain, in DOMString multicast_address, in DOMString multicast_port); Methods BSSyncManager(in DOMString domain, in DOMString multicast_address, in DOMString multicast_port) void SetMaster(in boolean master_mode) raises(domexception) void Synchronize(in DOMString id, in unsigned long ms_delay) raises(domexception) Events The following event is available on the BSSyncManager object. It can receive events of the type BSSyncManagerEvent. onsyncevent HTML video tags have been extended to include a setsyncparams function. Calling this function causes a video to synchronize with the specified sync group. setsyncparams(in DOMString domain, in DOMString id, in DOMString iso_timestamp) BSSyncManagerEvent Attributes The following attributes are relevant to the onsyncevent event: readonly attribute DOMString domain readonly attribute DOMString id readonly attribute DOMString iso_timestamp Example The following JavaScript example contains two videos being synchronized locally with BSSyncManager. If a Slave player is configured to be in the same PTP domain as the Master player and uses the Slave HTML script, then it will display the videos in sync with the Master player. This can be implemented on multiple Slave players. Master Script: <video id="one" hwz="on"> <source id="one_src" src="pirates.mov"> </video> Technical Notes JavaScript Objects (FW ver. 6.0.x) 18

<script> // Create the sync manager with provided multicast settings var sync = new BSSyncManager("domain1", "224.0.126.10", 1539); sync.onsyncevent = function (e) document.getelementbyid("one").setsyncparams(e.domain, e.id, e.iso_timestamp); document.getelementbyid("one").load(); document.getelementbyid("one").play(); console.log(e.domain); console.log(e.id); console.log(e.iso_timestamp); ; function starttimer() settimeout(function () restartmaster(), 30000); function restartmaster() // Synchronize the videos to start playing in 1000ms sync.setmaster(1); sync.synchronize("sync_event1", 1000); starttimer(); restartmaster(); </script> Slave Script: <video id="one" hwz="on"> <source id="one_src" src="pirates.mov"> </video> <script> // Create the sync manager with provided multicast settings var sync = new BSSyncManager("domain1", "224.0.126.10", 1539); sync.onsyncevent = function (e) document.getelementbyid("one").setsyncparams(e.domain, e.id, e.iso_timestamp); document.getelementbyid("one").load(); document.getelementbyid("one").play(); console.log(e.domain); console.log(e.id); console.log(e.iso_timestamp); ; Technical Notes JavaScript Objects (FW ver. 6.0.x) 19

</script> </body> </html> Technical Notes JavaScript Objects (FW ver. 6.0.x) 20

BSMessagePort This object allows for an associative array to be passed from JavaScript to BrightScript (or vice versa). Only one BSMessagePort instance may be created per rohtmlwidget instance. Methods boolean PostBSMessage(in Dictionary message) Note: This method does not accept nested dictionaries. The same is true for the PostJSMessage() BrightScript method. Events The following event occurs when a message is sent from BrightScript to JavaScript. It will appear as a MessagePortEvent event. onbsmessage Examples The following script will send a collection of properties to BrightScript: function myfunction() var bsmessage = new BSMessagePort(); bsmessage.postbsmessage(complete: true, result: "PASS"); The following message will appear in BrightScript as an rohtmlwidgetevent. In this case, the GetData().reason equals "message" and GetData().message contains the roassociativearray. while not finished ev = mp.waitmessage(30000) if type(ev) <> "rohtmlwidgetevent" then print type(ev) stop end if payload = ev.getdata() print payload print "Reason: "; payload.reason if payload.reason = "message" then print "Message: "; payload.message if payload.message.complete = invalid then stop else if payload.message.complete = "true" then finished = true if payload.message.result = "PASS" then print "Test passed" else print "Test failed: "; payload.message.err Technical Notes JavaScript Objects (FW ver. 6.0.x) 21

stop end if end if end if end while MessagePortEvent This event contains a single field: readonly attribute any data; The following script will iterate over all the fields received in the event: var bsmessage = new BSMessagePort(); bsmessage.onbsmessage = function(msg) for(name in msg.data) console.log('### ' + name + ': ' + msg.data[name]); In BrightScript, the rohtmlwidget.postjsmessage() method can be used to post a message to JavaScript: widget.postjsmessage( Param1: "Data1", Param2: "Data2", Param3: "Data3" ) Technical Notes JavaScript Objects (FW ver. 6.0.x) 22

BSSerialPort For more information about available methods, refer to the Object Reference Manual entry on roserialport. Object Creation BSSerialPort(in unsigned long port); Methods void SetBaudRate(in unsigned long baudrate) raises(domexception) void SetDataBits(in unsigned long databits) raises(domexception) void SetStopBits(in unsigned long stopbits) raises(domexception) void SetParity(in DOMString parity) raises(domexception) boolean SetEcho(in boolean flag) boolean SetInverted(in boolean flag) boolean SetFlowControl(in boolean flag) void SetGenerateByteEvent(in boolean flag) raises(domexception) void SetGenerateLineEvent(in boolean flag) raises(domexception) void SetLineEnding(in DOMString eol) raises(domexception) boolean SendByte(in unsigned long byte) boolean SendBytes(in ArrayBuffer data) boolean SendBytes(in ArrayBufferView data) boolean SendBytes(in DOMString data) boolean SendBreak(in long duration_ms) void Flush() raises(domexception) void Close() Events The following events are available via the BSSerialPort object. Each event can receive a SerialPortEvent event. onserialbyte onserialline SerialPortEvent Attributes For the onserialbyte event: Technical Notes JavaScript Objects (FW ver. 6.0.x) 23

readonly attribute unsigned long sbyte For the onserialline event: readonly attribute DOMString sdata Example function serialout() console.log("*** serialout **"); // '2' is the first externally connected USB port on Cheetah var serial_out = new BSSerialPort(2); serial_out.setbaudrate(115200); serial_out.setdatabits(8); serial_out.setstopbits(1); serial_out.setparity("none"); serial_out.setecho(true); serial_out.setgeneratebyteevent(true); serial_out.setgeneratelineevent(true); serial_out.onserialbyte = function(e) console.log('### onserialbyte: ' + e.byte); serial_out.onserialline = function(e) console.log('### onserialline: ' + e.data); serial_out.sendbyte(89); serial_out.sendbyte(90); serial_out.sendbyte(91); serial_out.sendbytes('hello World!'); serial_out.sendbytes(string.fromcharcode(64, 27, 66, 67)) Technical Notes JavaScript Objects (FW ver. 6.0.x) 24

BSTicker For more information about object creation and available methods, refer to the Object Reference Manual entry on rotextwidget. This object can only be used to display a "smooth right-to-left scrolling" type ticker. Object Creation BSTicker(in unsigned long x, in unsigned long y, in unsigned long w, in unsigned long h, in long rotation); The x and y integers specify the position of the ticker widget (via the top-left corner), while the w and h integers specify the size of the widget. The rotation parameter accepts the following values: 0: 0 degrees 1: 90 degrees 2: 180 degrees 3: 270 degrees Once a BSTicker is created, you cannot change its size or positioning. Instead, destroy the BSTicker instance using the ShutDown() method and generate a new one with different parameters. Methods boolean AddString(in DOMString str); boolean PopStrings(in unsigned long count); boolean SetForegroundColor(in unsigned long argb); boolean SetForegroundColor(in unsigned long a, in unsigned long r, in unsigned long g, in unsigned long b); boolean SetBackgroundColor(in unsigned long argb); boolean SetBackgroundColor(in unsigned long a, in unsigned long r, in unsigned long g, in unsigned long b); boolean SetSeparatorString(in DOMString str); boolean SetSeparatorCircle(); boolean SetSeparatorDiamond(); boolean SetSeparatorSquare(); unsigned long SetPixelsPerSecond(in unsigned long pps); Technical Notes JavaScript Objects (FW ver. 6.0.x) 25

boolean SetMultiscreen(in unsigned long offset, in unsigned long size, in DOMString ip_address, in unsigned long port); void ShutDown() Multiscreen Tickers To create a ticker that scrolls across multiple screens, call the SetMultiscreen() method on each page. The size parameter determines the total width of the multiscreen ticker across all displays. This parameter should be the same value for each SetMultiscreen() call. Note that the size of a multiscreen ticker can be different from the total width of a multiscreen display (i.e. if the width of a BSTicker widget is smaller than the width of the screen). The offset parameter determines the left starting point for each ticker in the multiscreen display. The parameter value will always be 0 for the leftmost display. This parameter should be calculated using the length of the multiscreen ticker, not the total length of the multiscreen display. The ip_address and port parameters refer to the multicast address that the players will use to synchronize the ticker. The following example diagram and code specifies a multiscreen display with two monitors. The width of each monitor is 1024 pixels, while the width of each ticker is 768 pixels. Example The following script shows how to use many of the available BSTicker methods: var bsticker = new BSTicker(10, 110, 600, 30); Technical Notes JavaScript Objects (FW ver. 6.0.x) 26

function addtext1() console.log('############ addtext1'); bsticker.addstring("addtext1"); function addtext2() console.log('############ addtext2'); bsticker.addstring("addtext2"); function addtext3() console.log('############ addtext3'); bsticker.addstring("addtext3"); function setbackground1() console.log('############ setbackground1'); bsticker.setbackgroundcolor(0xff0000); function setbackground2() console.log('############ setbackground2'); bsticker.setbackgroundcolor(0x00ff00); function setforeground1() console.log('############ setbackground1'); bsticker.setforegroundcolor(0x007700); function setforeground2() console.log('############ setbackground2'); bsticker.setforegroundcolor(0x000077); function setseparatorstring() console.log('############ setseparatorstring'); bsticker.setseparatorstring(" ### "); function setseparatorcircle() console.log('############ setseparatorcircle'); bsticker.setseparatorcircle(); function setseparatordiamond() console.log('############ setseparatordiamond'); Technical Notes JavaScript Objects (FW ver. 6.0.x) 27

bsticker.setseparatordiamond(); function setseparatorsquare() console.log('############ setseparatorsquare'); bsticker.setseparatorsquare(); function settickerspeed() console.log('############ settickerspeed'); var speed = bsticker.setpixelspersecond(180); console.log('############ SetPixelsPerSecond(180), Resulting speed: ' + speed); Technical Notes JavaScript Objects (FW ver. 6.0.x) 28