linux: shared memory interface - link with librt
[supercollider.git] / HelpSource / Classes / SerialPort.schelp
blob585eaf78c27e0a1546e09cfbfa1ae832f4e2e72d
1 class:: SerialPort
2 summary:: serial port interface
3 categories:: Control
5 ClassMethods::
7 private::initClass
9 method::new
10 opening the port.
12 argument::port
13 device path or index.
15 argument::baudrate
16 baudrate [4800..230400]
18 argument::databits
19 5 | 6 | 7 | 8
21 argument::stopbit
22 true | false
24 argument::parity
25 nil | 'even' | 'odd'
27 argument::crtscts
28 hardware flow control (true | false)
30 argument::xonxoff
31 software flow control (true | false)
33 argument::exclusive
34 open the device exclusively (true | false)
36 method::devices
37 returns an array of available device.
38 code::
39 SerialPort.devices;
42 method::listDevices
43 prints to postbuffer
44 code::
45 SerialPort.listDevices;
48 method::devicePattern
49 change device selection
50 code::
51 SerialPort.devicePattern = "/dev/ttyUSB*"; // linux usb serial
52 SerialPort.devices;
54 SerialPort.devicePattern = nil;
55 SerialPort.devices;
58 method::closeAll
59 close all ports.
61 InstanceMethods::
63 private::initSerialPort, prOpen, prClose, primCleanup, prCleanup, prPut, prDataAvailable, prDoneAction
65 method::next
66 Read a byte from the device. Non-blocking read.
68 method::read
69 Read a byte from the device. Blocking read.
71 method::rxErrors
72 Rx errors since last query.
74 method::put
75 Write a byte to the device. Always blocks.
77 method::putAll
78 Write multiple bytes to the device. Collection may be link::Classes/Int8Array:: or link::Classes/String::.
80 method::doneAction
81 A link::Classes/Function:: which will be evaluated if the port gets closed (maybe unexpectedly so, due to hardware failure or accidental disconnection). This allows you to for example to make a backup solution and activate it (like using fake input data for your algorithm, or trying to reopen the device). By default it will post a message to the post window.
83 method::close
84 close the port.
86 Examples::
88 code::
90 p = SerialPort(
91         "/dev/tty.usbserial-181",
92         baudrate: 9600,
93         crtscts: true);
96 // read a byte from the device
98 p.next;                 // doesn't block
99 fork{p.read.postln};    // may suspend thisThread - should be called within a routine
101 // write a byte to the device
103 fork{p.put(42)};        // may suspend thisThread - should be called within a routine
105 // write multiple bytes to the device
107 p.putAll("whaddayawant");
108 p.putAll(Int8Array[13, 10]);
110 p.doneAction = { "my serial port got closed".postln; }
112 p.close;        // close the port
114 SerialPort.closeAll;    // close all ports
117 subsection::Arduino write example
119 First load the sketch Examples/Communication/Dimmer. See http://www.arduino.cc/en/Tutorial/Dimmer
121 note::
122 Always make sure the serial monitor is closed in the Arduino application before opening the port in SuperCollider.
125 code::
127 p = SerialPort(
128         "/dev/tty.usbserial-A800crTT",  //edit to match your port. SerialPort.listDevices
129         baudrate: 9600, //check that baudrate is the same as in arduino sketch
130         crtscts: true);
133 //send serial data - slow pulsating
135 r= Routine({
136         inf.do{|i|
137                 p.put(i.fold(0, 100).linexp(0, 100, 1, 255).asInteger.postln);
138                 0.02.wait;
139         };
140 }).play;
143 r.stop;
144 p.close;
147 subsection::Arduino read example
149 First load the sketch Examples/Communication/Graph. See http://www.arduino.cc/en/Tutorial/Graph
151 note::
152 Always make sure the serial monitor is closed in the Arduino application before opening the port in SuperCollider.
155 code::
157 p = SerialPort(
158         "/dev/tty.usbserial-A800crTT",  //edit to match your port. SerialPort.listDevices
159         baudrate: 9600, //check that baudrate is the same as in arduino sketch
160         crtscts: true);
163 //read 10bit serial data sent from Arduino's Serial.println
165 r= Routine({
166         var byte, str, res;
167         99999.do{|i|
168                 if(p.read==10, {
169                         str = "";
170                         while({byte = p.read; byte !=13 }, {
171                                 str= str++byte.asAscii;
172                         });
173                         res= str.asInteger;
174                         ("read value:"+res).postln;
175                 });
176         };
177 }).play;
180 r.stop;
181 p.close;