1+ /**
2+ * For old version
3+ */
4+ + ( function ( factory ) {
5+ if ( typeof exports === 'undefined' ) {
6+ factory ( webduino || { } ) ;
7+ } else {
8+ module . exports = factory ;
9+ }
10+ } ( function ( scope ) {
11+ 'use strict' ;
12+
13+ var Module = scope . Module ,
14+ BoardEvent = scope . BoardEvent ;
15+ var self ;
16+ var proto ;
17+ var sendLen = 32 ;
18+ var lastSendIR = false ;
19+ var debugFlag = false ;
20+
21+ function log ( obj ) {
22+ if ( debugFlag ) {
23+ console . log ( obj ) ;
24+ }
25+ }
26+
27+ function IrRaw ( board , pinMapping ) {
28+ Module . call ( this ) ;
29+ this . _board = board ;
30+ this . pinSendIR = this . pinRecvIR = - 1 ;
31+ self = this ;
32+ if ( typeof pinMapping === 'object' ) {
33+ if ( pinMapping [ 'send' ] ) {
34+ this . pinSendIR = pinMapping [ 'send' ] ;
35+ }
36+ if ( pinMapping [ 'recv' ] ) {
37+ this . pinRecvIR = pinMapping [ 'recv' ] ;
38+ }
39+ }
40+ onMessage ( ) ;
41+ }
42+
43+ function onMessage ( ) {
44+ self . _board . on ( webduino . BoardEvent . SYSEX_MESSAGE , function ( event ) {
45+ var m = event . message ;
46+ //send IR data to Board
47+ if ( m [ 0 ] == 0x04 && m [ 1 ] == 0x09 && m [ 2 ] == 0x0B ) {
48+ log ( "send IR data to Board callback" ) ;
49+ if ( lastSendIR ) {
50+ //store OK
51+ lastSendIR = false ;
52+ log ( "send pin:" + self . pinSendIR ) ;
53+ self . _board . send ( [ 0xf0 , 0x04 , 0x09 , 0x0C , self . pinSendIR , 0xF7 ] ) ;
54+ }
55+ }
56+ //trigger IR send
57+ else if ( m [ 0 ] == 0x04 && m [ 1 ] == 0x09 && m [ 2 ] == 0x0C ) {
58+ log ( "trigger IR send callback..." ) ;
59+ self . irSendCallback ( ) ;
60+ }
61+ //record IR data
62+ else if ( m [ 0 ] == 0x04 && m [ 1 ] == 0x09 && m [ 2 ] == 0x0D ) {
63+ log ( "record IR callback..." ) ;
64+ var strInfo = '' ;
65+ for ( var i = 3 ; i < m . length ; i ++ ) {
66+ strInfo += String . fromCharCode ( m [ i ] ) ;
67+ }
68+ self . irData = strInfo . substring ( 4 ) ;
69+ self . irRecvCallback ( self . irData ) ;
70+ } else {
71+ log ( event ) ;
72+ }
73+ } ) ;
74+ }
75+
76+
77+ function send ( startPos , data ) {
78+ var CMD = [ 0xf0 , 0x04 , 0x09 , 0x0A ] ;
79+ var raw = [ ] ;
80+ raw = raw . concat ( CMD ) ;
81+ var n = '0000' + startPos . toString ( 16 ) ;
82+ n = n . substring ( n . length - 4 ) ;
83+ for ( var i = 0 ; i < 4 ; i ++ ) {
84+ raw . push ( n . charCodeAt ( i ) ) ;
85+ }
86+ raw . push ( 0xf7 ) ;
87+ // send Data //
88+ CMD = [ 0xf0 , 0x04 , 0x09 , 0x0B ] ;
89+ raw = raw . concat ( CMD ) ;
90+ for ( i = 0 ; i < data . length ; i ++ ) {
91+ raw . push ( data . charCodeAt ( i ) ) ;
92+ }
93+ raw . push ( 0xf7 ) ;
94+ self . _board . send ( raw ) ;
95+ }
96+
97+ function sendIRCmd ( cmd , len ) {
98+ for ( var i = 0 ; i < cmd . length ; i = i + len ) {
99+ var data = cmd . substring ( i , i + len ) ;
100+ send ( i / 8 , data ) ;
101+ }
102+ lastSendIR = true ;
103+ }
104+
105+ IrRaw . prototype = proto = Object . create ( Module . prototype , {
106+ constructor : {
107+ value : IrRaw
108+ }
109+ } ) ;
110+
111+ proto . receive = function ( callback ) {
112+ self . irRecvCallback = callback ;
113+ if ( self . pinRecvIR > 0 ) {
114+ self . _board . send ( [ 0xF0 , 0x04 , 0x09 , 0x0D , self . pinRecvIR , 0xF7 ] ) ;
115+ log ( "wait for receiving..." ) ;
116+ }
117+ } ;
118+
119+ proto . send = function ( data , callback ) {
120+ if ( self . pinSendIR > 0 ) {
121+ sendIRCmd ( data , sendLen ) ;
122+ self . irSendCallback = callback ;
123+ }
124+ }
125+
126+ proto . debug = function ( val ) {
127+ if ( typeof val == 'boolean' ) {
128+ self . isDebug = val ;
129+ }
130+ }
131+
132+ proto . sendPin = function ( pin ) {
133+ this . pinSendIR = pin ;
134+ }
135+ proto . recvPin = function ( pin ) {
136+ this . pinRecvIR = pin ;
137+ }
138+
139+ scope . module . IrRaw = IrRaw ;
140+ } ) ) ;
0 commit comments