2015-07-23 15:45:28 -04:00
window . ScratchPlugin = new ( function ( ) {
var self = this ;
var pluginName = 'Scratch Device Plugin' ; // will be 'Scratch Plugin for Devices'
self . useActiveX = window . hasOwnProperty ( 'ActiveXObject' ) ;
self . axObjectName = 'MITMediaLab.ScratchDevicePlugin' ; // name of ActiveX object
self . isAvailable = function ( ) {
return ! ! ( self . useActiveX || navigator . plugins [ pluginName ] ) ;
} ;
// These wrappers make the plugin act asynchronous, matching the API found in AIR and NMH.
// The one difference is that callbacks are triggered before the initiating call returns.
self . PluginWrapper = function ( plugin ) {
var self = this ;
self . hid _list = function ( callback , opt _vendorID , opt _productID ) {
var deviceList = plugin . hid _list ( opt _vendorID , opt _productID ) ;
if ( callback ) callback ( deviceList ) ;
} ;
self . hid _open = function ( path , callback ) {
var device = plugin . hid _open _raw ( path ) ;
if ( device ) {
device = new HidWrapper ( device ) ;
ScratchProxies . AddHidProxies ( device ) ;
}
if ( callback ) callback ( device ) ;
} ;
self . serial _list = function ( callback ) {
var deviceList = plugin . serial _list ( ) ;
if ( callback ) callback ( deviceList ) ;
} ;
self . serial _open = function ( path , opts , callback ) {
var device = plugin . serial _open _raw ( path , opts ) ;
if ( device ) {
device = new SerialWrapper ( device ) ;
ScratchProxies . AddSerialProxies ( device ) ;
}
if ( callback ) callback ( device ) ;
} ;
self . reset = function ( ) {
plugin . reset ( ) ;
} ;
self . version = function ( callback ) {
var result = plugin . version ( ) ;
if ( callback ) callback ( result ) ;
} ;
} ;
function HidWrapper ( device ) {
var self = this ;
self . write _raw = function ( arrayBuffer , callback ) {
var result = device . write _raw ( arrayBuffer ) ;
if ( callback ) callback ( result ) ;
} ;
self . send _feature _report _raw = function ( arrayBuffer , callback ) {
var result = device . send _feature _report _raw ( arrayBuffer ) ;
if ( callback ) callback ( result ) ;
} ;
self . read _raw = function ( size , callback ) {
var data = device . read _raw ( size ) ;
if ( callback ) callback ( data ) ;
} ;
self . get _feature _report _raw = function ( size , callback ) {
var data = device . get _feature _report _raw ( size ) ;
if ( callback ) callback ( data ) ;
} ;
self . set _nonblocking = function ( flag , callback ) {
var result = device . set _nonblocking ( flag ) ;
if ( callback ) callback ( result ) ;
} ;
self . close = function ( ) {
device . close ( ) ;
} ;
2016-08-02 00:49:34 -07:00
}
2015-07-23 15:45:28 -04:00
function SerialWrapper ( device ) {
var self = this ;
self . send _raw = function ( data ) {
device . send _raw ( data ) ;
} ;
self . close = function ( ) {
device . close ( ) ;
} ;
self . is _open = function ( callback ) {
var result = device . is _open ( ) ;
if ( callback ) callback ( result ) ;
} ;
self . set _receive _handler _raw = function ( callback ) {
device . set _receive _handler _raw ( callback ) ;
} ;
self . set _error _handler = function ( callback ) {
device . set _error _handler ( callback ) ;
} ;
2016-08-02 00:49:34 -07:00
}
2015-07-23 15:45:28 -04:00
} ) ( ) ;