src/eric7/Documentation/Source/eric7.MicroPython.Devices.CircuitPythonDevices.html

branch
mpy_network
changeset 9891
e58c3fadcacc
parent 9871
4a302b8c4d28
child 9898
5bfb3c70e30b
equal deleted inserted replaced
9890:66a6d3f131cc 9891:e58c3fadcacc
109 <tr> 109 <tr>
110 <td><a href="#CircuitPythonDevice.__installLibraryFiles">__installLibraryFiles</a></td> 110 <td><a href="#CircuitPythonDevice.__installLibraryFiles">__installLibraryFiles</a></td>
111 <td>Private slot to install Python files into the onboard library.</td> 111 <td>Private slot to install Python files into the onboard library.</td>
112 </tr> 112 </tr>
113 <tr> 113 <tr>
114 <td><a href="#CircuitPythonDevice.__modifySettings">__modifySettings</a></td>
115 <td>Private method to modify the 'settings.toml' file as of CircuitPython 8.0.0.</td>
116 </tr>
117 <tr>
114 <td><a href="#CircuitPythonDevice.__resetDevice">__resetDevice</a></td> 118 <td><a href="#CircuitPythonDevice.__resetDevice">__resetDevice</a></td>
115 <td>Private slot to reset the connected device.</td> 119 <td>Private slot to reset the connected device.</td>
116 </tr> 120 </tr>
117 <tr> 121 <tr>
118 <td><a href="#CircuitPythonDevice.__showTeensyFlashInstructions">__showTeensyFlashInstructions</a></td> 122 <td><a href="#CircuitPythonDevice.__showTeensyFlashInstructions">__showTeensyFlashInstructions</a></td>
149 <tr> 153 <tr>
150 <td><a href="#CircuitPythonDevice.checkInternet">checkInternet</a></td> 154 <td><a href="#CircuitPythonDevice.checkInternet">checkInternet</a></td>
151 <td>Public method to check, if the internet can be reached.</td> 155 <td>Public method to check, if the internet can be reached.</td>
152 </tr> 156 </tr>
153 <tr> 157 <tr>
158 <td><a href="#CircuitPythonDevice.checkInternetViaLan">checkInternetViaLan</a></td>
159 <td>Public method to check, if the internet can be reached (LAN variant).</td>
160 </tr>
161 <tr>
162 <td><a href="#CircuitPythonDevice.connectToLan">connectToLan</a></td>
163 <td>Public method to connect the connected device to the LAN.</td>
164 </tr>
165 <tr>
154 <td><a href="#CircuitPythonDevice.connectWifi">connectWifi</a></td> 166 <td><a href="#CircuitPythonDevice.connectWifi">connectWifi</a></td>
155 <td>Public method to connect a device to a WiFi network.</td> 167 <td>Public method to connect a device to a WiFi network.</td>
156 </tr> 168 </tr>
157 <tr> 169 <tr>
158 <td><a href="#CircuitPythonDevice.deactivateBluetoothInterface">deactivateBluetoothInterface</a></td> 170 <td><a href="#CircuitPythonDevice.deactivateBluetoothInterface">deactivateBluetoothInterface</a></td>
159 <td>Public method to deactivate the Bluetooth interface.</td> 171 <td>Public method to deactivate the Bluetooth interface.</td>
160 </tr> 172 </tr>
161 <tr> 173 <tr>
174 <td><a href="#CircuitPythonDevice.deactivateEthernet">deactivateEthernet</a></td>
175 <td>Public method to deactivate the Ethernet interface of the connected device.</td>
176 </tr>
177 <tr>
162 <td><a href="#CircuitPythonDevice.deactivateInterface">deactivateInterface</a></td> 178 <td><a href="#CircuitPythonDevice.deactivateInterface">deactivateInterface</a></td>
163 <td>Public method to deactivate a given WiFi interface of the connected device.</td> 179 <td>Public method to deactivate a given WiFi interface of the connected device.</td>
164 </tr> 180 </tr>
165 <tr> 181 <tr>
166 <td><a href="#CircuitPythonDevice.deviceName">deviceName</a></td> 182 <td><a href="#CircuitPythonDevice.deviceName">deviceName</a></td>
167 <td>Public method to get the name of the device.</td> 183 <td>Public method to get the name of the device.</td>
168 </tr> 184 </tr>
169 <tr> 185 <tr>
186 <td><a href="#CircuitPythonDevice.disconnectFromLan">disconnectFromLan</a></td>
187 <td>Public method to disconnect from the LAN.</td>
188 </tr>
189 <tr>
170 <td><a href="#CircuitPythonDevice.disconnectWifi">disconnectWifi</a></td> 190 <td><a href="#CircuitPythonDevice.disconnectWifi">disconnectWifi</a></td>
171 <td>Public method to disconnect a device from the WiFi network.</td> 191 <td>Public method to disconnect a device from the WiFi network.</td>
172 </tr> 192 </tr>
173 <tr> 193 <tr>
174 <td><a href="#CircuitPythonDevice.forceInterrupt">forceInterrupt</a></td> 194 <td><a href="#CircuitPythonDevice.forceInterrupt">forceInterrupt</a></td>
193 <tr> 213 <tr>
194 <td><a href="#CircuitPythonDevice.getDownloadMenuEntries">getDownloadMenuEntries</a></td> 214 <td><a href="#CircuitPythonDevice.getDownloadMenuEntries">getDownloadMenuEntries</a></td>
195 <td>Public method to retrieve the entries for the downloads menu.</td> 215 <td>Public method to retrieve the entries for the downloads menu.</td>
196 </tr> 216 </tr>
197 <tr> 217 <tr>
218 <td><a href="#CircuitPythonDevice.getEthernetStatus">getEthernetStatus</a></td>
219 <td>Public method to get Ethernet status data of the connected board.</td>
220 </tr>
221 <tr>
198 <td><a href="#CircuitPythonDevice.getWifiData">getWifiData</a></td> 222 <td><a href="#CircuitPythonDevice.getWifiData">getWifiData</a></td>
199 <td>Public method to get data related to the current WiFi status.</td> 223 <td>Public method to get data related to the current WiFi status.</td>
200 </tr> 224 </tr>
201 <tr> 225 <tr>
202 <td><a href="#CircuitPythonDevice.getWorkspace">getWorkspace</a></td> 226 <td><a href="#CircuitPythonDevice.getWorkspace">getWorkspace</a></td>
205 <tr> 229 <tr>
206 <td><a href="#CircuitPythonDevice.hasBluetooth">hasBluetooth</a></td> 230 <td><a href="#CircuitPythonDevice.hasBluetooth">hasBluetooth</a></td>
207 <td>Public method to check the availability of Bluetooth.</td> 231 <td>Public method to check the availability of Bluetooth.</td>
208 </tr> 232 </tr>
209 <tr> 233 <tr>
234 <td><a href="#CircuitPythonDevice.hasEthernet">hasEthernet</a></td>
235 <td>Public method to check the availability of Ethernet.</td>
236 </tr>
237 <tr>
210 <td><a href="#CircuitPythonDevice.hasFlashMenuEntry">hasFlashMenuEntry</a></td> 238 <td><a href="#CircuitPythonDevice.hasFlashMenuEntry">hasFlashMenuEntry</a></td>
211 <td>Public method to check, if the device has its own flash menu entry.</td> 239 <td>Public method to check, if the device has its own flash menu entry.</td>
212 </tr> 240 </tr>
213 <tr> 241 <tr>
214 <td><a href="#CircuitPythonDevice.hasNetworkTime">hasNetworkTime</a></td> 242 <td><a href="#CircuitPythonDevice.hasNetworkTime">hasNetworkTime</a></td>
221 <tr> 249 <tr>
222 <td><a href="#CircuitPythonDevice.removeCredentials">removeCredentials</a></td> 250 <td><a href="#CircuitPythonDevice.removeCredentials">removeCredentials</a></td>
223 <td>Public method to remove the saved credentials from the connected device.</td> 251 <td>Public method to remove the saved credentials from the connected device.</td>
224 </tr> 252 </tr>
225 <tr> 253 <tr>
254 <td><a href="#CircuitPythonDevice.removeLanAutoConnect">removeLanAutoConnect</a></td>
255 <td>Public method to remove the saved IPv4 parameters from the connected device.</td>
256 </tr>
257 <tr>
226 <td><a href="#CircuitPythonDevice.runScript">runScript</a></td> 258 <td><a href="#CircuitPythonDevice.runScript">runScript</a></td>
227 <td>Public method to run the given Python script.</td> 259 <td>Public method to run the given Python script.</td>
228 </tr> 260 </tr>
229 <tr> 261 <tr>
230 <td><a href="#CircuitPythonDevice.scanNetworks">scanNetworks</a></td> 262 <td><a href="#CircuitPythonDevice.scanNetworks">scanNetworks</a></td>
259 <td>Public method to indicate file access via a local directory.</td> 291 <td>Public method to indicate file access via a local directory.</td>
260 </tr> 292 </tr>
261 <tr> 293 <tr>
262 <td><a href="#CircuitPythonDevice.writeCredentials">writeCredentials</a></td> 294 <td><a href="#CircuitPythonDevice.writeCredentials">writeCredentials</a></td>
263 <td>Public method to write the given credentials to the connected device and modify the start script to connect automatically.</td> 295 <td>Public method to write the given credentials to the connected device and modify the start script to connect automatically.</td>
296 </tr>
297 <tr>
298 <td><a href="#CircuitPythonDevice.writeLanAutoConnect">writeLanAutoConnect</a></td>
299 <td>Public method to generate a script and associated configuration to connect the device to the LAN during boot time.</td>
264 </tr> 300 </tr>
265 </table> 301 </table>
266 <h3>Static Methods</h3> 302 <h3>Static Methods</h3>
267 303
268 <table> 304 <table>
269 <tr><td>None</td></tr> 305 <tr><td>None</td></tr>
270 </table> 306 </table>
271 307
272 <a NAME="CircuitPythonDevice.__init__" ID="CircuitPythonDevice.__init__"></a> 308 <a NAME="CircuitPythonDevice.__init__" ID="CircuitPythonDevice.__init__"></a>
273 <h4>CircuitPythonDevice (Constructor)</h4> 309 <h4>CircuitPythonDevice (Constructor)</h4>
274 <b>CircuitPythonDevice</b>(<i>microPythonWidget, deviceType, boardName, hasWorkspace=True, parent=None</i>) 310 <b>CircuitPythonDevice</b>(<i>microPythonWidget, deviceType, boardName, vid=0, pid=0, hasWorkspace=True, parent=None, </i>)
275 311
276 <p> 312 <p>
277 Constructor 313 Constructor
278 </p> 314 </p>
279 <dl> 315 <dl>
287 device type assigned to this device interface 323 device type assigned to this device interface
288 </dd> 324 </dd>
289 <dt><i>boardName</i> (str)</dt> 325 <dt><i>boardName</i> (str)</dt>
290 <dd> 326 <dd>
291 name of the board 327 name of the board
328 </dd>
329 <dt><i>vid</i> (int (optional))</dt>
330 <dd>
331 vendor ID (defaults to 0)
332 </dd>
333 <dt><i>pid</i> (int (optional))</dt>
334 <dd>
335 product ID (defaults to 0)
292 </dd> 336 </dd>
293 <dt><i>hasWorkspace</i> (bool (optional))</dt> 337 <dt><i>hasWorkspace</i> (bool (optional))</dt>
294 <dd> 338 <dd>
295 flag indicating that the devices supports access via 339 flag indicating that the devices supports access via
296 a mounted volume (defaults to True) 340 a mounted volume (defaults to True)
461 <dd> 505 <dd>
462 flag indicating to install a library package 506 flag indicating to install a library package
463 (defaults to False) 507 (defaults to False)
464 </dd> 508 </dd>
465 </dl> 509 </dl>
510 <a NAME="CircuitPythonDevice.__modifySettings" ID="CircuitPythonDevice.__modifySettings"></a>
511 <h4>CircuitPythonDevice.__modifySettings</h4>
512 <b>__modifySettings</b>(<i>changedEntries</i>)
513
514 <p>
515 Private method to modify the 'settings.toml' file as of CircuitPython 8.0.0.
516 </p>
517 <dl>
518
519 <dt><i>changedEntries</i> (dict of {str: str})</dt>
520 <dd>
521 dictionary containing the TOML entries to be changed
522 </dd>
523 </dl>
524 <dl>
525 <dt>Return:</dt>
526 <dd>
527 tuple containing a success flag and an error message
528 </dd>
529 </dl>
530 <dl>
531 <dt>Return Type:</dt>
532 <dd>
533 tuple of (bool, str)
534 </dd>
535 </dl>
466 <a NAME="CircuitPythonDevice.__resetDevice" ID="CircuitPythonDevice.__resetDevice"></a> 536 <a NAME="CircuitPythonDevice.__resetDevice" ID="CircuitPythonDevice.__resetDevice"></a>
467 <h4>CircuitPythonDevice.__resetDevice</h4> 537 <h4>CircuitPythonDevice.__resetDevice</h4>
468 <b>__resetDevice</b>(<i></i>) 538 <b>__resetDevice</b>(<i></i>)
469 539
470 <p> 540 <p>
625 <dt>Return Type:</dt> 695 <dt>Return Type:</dt>
626 <dd> 696 <dd>
627 tuple of (bool, str) 697 tuple of (bool, str)
628 </dd> 698 </dd>
629 </dl> 699 </dl>
700 <a NAME="CircuitPythonDevice.checkInternetViaLan" ID="CircuitPythonDevice.checkInternetViaLan"></a>
701 <h4>CircuitPythonDevice.checkInternetViaLan</h4>
702 <b>checkInternetViaLan</b>(<i></i>)
703
704 <p>
705 Public method to check, if the internet can be reached (LAN variant).
706 </p>
707 <dl>
708 <dt>Return:</dt>
709 <dd>
710 tuple containing a flag indicating reachability and an error string
711 </dd>
712 </dl>
713 <dl>
714 <dt>Return Type:</dt>
715 <dd>
716 tuple of (bool, str)
717 </dd>
718 </dl>
719 <a NAME="CircuitPythonDevice.connectToLan" ID="CircuitPythonDevice.connectToLan"></a>
720 <h4>CircuitPythonDevice.connectToLan</h4>
721 <b>connectToLan</b>(<i>config</i>)
722
723 <p>
724 Public method to connect the connected device to the LAN.
725 </p>
726 <p>
727 Note: The MAC address of the interface is configured with the WIZ
728 </p>
729 <dl>
730
731 <dt><i>config</i> (str or tuple of (str, str, str, str))</dt>
732 <dd>
733 configuration for the connection (either the string 'dhcp'
734 for a dynamic address or a tuple of four strings with the IPv4 parameters.
735 </dd>
736 </dl>
737 <dl>
738 <dt>Return:</dt>
739 <dd>
740 tuple containing a flag indicating success and an error message
741 </dd>
742 </dl>
743 <dl>
744 <dt>Return Type:</dt>
745 <dd>
746 tuple of (bool, str)
747 </dd>
748 </dl>
630 <a NAME="CircuitPythonDevice.connectWifi" ID="CircuitPythonDevice.connectWifi"></a> 749 <a NAME="CircuitPythonDevice.connectWifi" ID="CircuitPythonDevice.connectWifi"></a>
631 <h4>CircuitPythonDevice.connectWifi</h4> 750 <h4>CircuitPythonDevice.connectWifi</h4>
632 <b>connectWifi</b>(<i>ssid, password</i>) 751 <b>connectWifi</b>(<i>ssid, password</i>)
633 752
634 <p> 753 <p>
681 <dt>Raises <b>OSError</b>:</dt> 800 <dt>Raises <b>OSError</b>:</dt>
682 <dd> 801 <dd>
683 raised to indicate an issue with the device 802 raised to indicate an issue with the device
684 </dd> 803 </dd>
685 </dl> 804 </dl>
805 <a NAME="CircuitPythonDevice.deactivateEthernet" ID="CircuitPythonDevice.deactivateEthernet"></a>
806 <h4>CircuitPythonDevice.deactivateEthernet</h4>
807 <b>deactivateEthernet</b>(<i></i>)
808
809 <p>
810 Public method to deactivate the Ethernet interface of the connected device.
811 </p>
812 <dl>
813 <dt>Return:</dt>
814 <dd>
815 tuple containg a flag indicating success and an error message
816 </dd>
817 </dl>
818 <dl>
819 <dt>Return Type:</dt>
820 <dd>
821 tuple of (bool, str)
822 </dd>
823 </dl>
686 <a NAME="CircuitPythonDevice.deactivateInterface" ID="CircuitPythonDevice.deactivateInterface"></a> 824 <a NAME="CircuitPythonDevice.deactivateInterface" ID="CircuitPythonDevice.deactivateInterface"></a>
687 <h4>CircuitPythonDevice.deactivateInterface</h4> 825 <h4>CircuitPythonDevice.deactivateInterface</h4>
688 <b>deactivateInterface</b>(<i>interface</i>) 826 <b>deactivateInterface</b>(<i>interface</i>)
689 827
690 <p> 828 <p>
738 <dt>Return Type:</dt> 876 <dt>Return Type:</dt>
739 <dd> 877 <dd>
740 str 878 str
741 </dd> 879 </dd>
742 </dl> 880 </dl>
881 <a NAME="CircuitPythonDevice.disconnectFromLan" ID="CircuitPythonDevice.disconnectFromLan"></a>
882 <h4>CircuitPythonDevice.disconnectFromLan</h4>
883 <b>disconnectFromLan</b>(<i></i>)
884
885 <p>
886 Public method to disconnect from the LAN.
887 </p>
888 <dl>
889 <dt>Return:</dt>
890 <dd>
891 tuple containing a flag indicating success and an error message
892 </dd>
893 </dl>
894 <dl>
895 <dt>Return Type:</dt>
896 <dd>
897 tuple of (bool, str)
898 </dd>
899 </dl>
743 <a NAME="CircuitPythonDevice.disconnectWifi" ID="CircuitPythonDevice.disconnectWifi"></a> 900 <a NAME="CircuitPythonDevice.disconnectWifi" ID="CircuitPythonDevice.disconnectWifi"></a>
744 <h4>CircuitPythonDevice.disconnectWifi</h4> 901 <h4>CircuitPythonDevice.disconnectWifi</h4>
745 <b>disconnectWifi</b>(<i></i>) 902 <b>disconnectWifi</b>(<i></i>)
746 903
747 <p> 904 <p>
891 <dt>Return Type:</dt> 1048 <dt>Return Type:</dt>
892 <dd> 1049 <dd>
893 list of tuple of (str, str) 1050 list of tuple of (str, str)
894 </dd> 1051 </dd>
895 </dl> 1052 </dl>
1053 <a NAME="CircuitPythonDevice.getEthernetStatus" ID="CircuitPythonDevice.getEthernetStatus"></a>
1054 <h4>CircuitPythonDevice.getEthernetStatus</h4>
1055 <b>getEthernetStatus</b>(<i></i>)
1056
1057 <p>
1058 Public method to get Ethernet status data of the connected board.
1059 </p>
1060 <dl>
1061 <dt>Return:</dt>
1062 <dd>
1063 list of tuples containing the translated status data label and
1064 the associated value
1065 </dd>
1066 </dl>
1067 <dl>
1068 <dt>Return Type:</dt>
1069 <dd>
1070 list of tuples of (str, str)
1071 </dd>
1072 </dl>
1073 <dl>
1074
1075 <dt>Raises <b>OSError</b>:</dt>
1076 <dd>
1077 raised to indicate an issue with the device
1078 </dd>
1079 </dl>
896 <a NAME="CircuitPythonDevice.getWifiData" ID="CircuitPythonDevice.getWifiData"></a> 1080 <a NAME="CircuitPythonDevice.getWifiData" ID="CircuitPythonDevice.getWifiData"></a>
897 <h4>CircuitPythonDevice.getWifiData</h4> 1081 <h4>CircuitPythonDevice.getWifiData</h4>
898 <b>getWifiData</b>(<i></i>) 1082 <b>getWifiData</b>(<i></i>)
899 1083
900 <p> 1084 <p>
970 <dt>Raises <b>OSError</b>:</dt> 1154 <dt>Raises <b>OSError</b>:</dt>
971 <dd> 1155 <dd>
972 raised to indicate an issue with the device 1156 raised to indicate an issue with the device
973 </dd> 1157 </dd>
974 </dl> 1158 </dl>
1159 <a NAME="CircuitPythonDevice.hasEthernet" ID="CircuitPythonDevice.hasEthernet"></a>
1160 <h4>CircuitPythonDevice.hasEthernet</h4>
1161 <b>hasEthernet</b>(<i></i>)
1162
1163 <p>
1164 Public method to check the availability of Ethernet.
1165 </p>
1166 <dl>
1167 <dt>Return:</dt>
1168 <dd>
1169 tuple containing a flag indicating the availability of Ethernet
1170 and the Ethernet type
1171 </dd>
1172 </dl>
1173 <dl>
1174 <dt>Return Type:</dt>
1175 <dd>
1176 tuple of (bool, str)
1177 </dd>
1178 </dl>
1179 <dl>
1180
1181 <dt>Raises <b>OSError</b>:</dt>
1182 <dd>
1183 raised to indicate an issue with the device
1184 </dd>
1185 </dl>
975 <a NAME="CircuitPythonDevice.hasFlashMenuEntry" ID="CircuitPythonDevice.hasFlashMenuEntry"></a> 1186 <a NAME="CircuitPythonDevice.hasFlashMenuEntry" ID="CircuitPythonDevice.hasFlashMenuEntry"></a>
976 <h4>CircuitPythonDevice.hasFlashMenuEntry</h4> 1187 <h4>CircuitPythonDevice.hasFlashMenuEntry</h4>
977 <b>hasFlashMenuEntry</b>(<i></i>) 1188 <b>hasFlashMenuEntry</b>(<i></i>)
978 1189
979 <p> 1190 <p>
1061 <dt>Return Type:</dt> 1272 <dt>Return Type:</dt>
1062 <dd> 1273 <dd>
1063 tuple of (bool, str) 1274 tuple of (bool, str)
1064 </dd> 1275 </dd>
1065 </dl> 1276 </dl>
1277 <a NAME="CircuitPythonDevice.removeLanAutoConnect" ID="CircuitPythonDevice.removeLanAutoConnect"></a>
1278 <h4>CircuitPythonDevice.removeLanAutoConnect</h4>
1279 <b>removeLanAutoConnect</b>(<i></i>)
1280
1281 <p>
1282 Public method to remove the saved IPv4 parameters from the connected device.
1283 </p>
1284 <p>
1285 Note: This disables the LAN auto-connect feature.
1286 </p>
1287 <dl>
1288 <dt>Return:</dt>
1289 <dd>
1290 tuple containing a flag indicating success and an error message
1291 </dd>
1292 </dl>
1293 <dl>
1294 <dt>Return Type:</dt>
1295 <dd>
1296 tuple of (bool, str)
1297 </dd>
1298 </dl>
1066 <a NAME="CircuitPythonDevice.runScript" ID="CircuitPythonDevice.runScript"></a> 1299 <a NAME="CircuitPythonDevice.runScript" ID="CircuitPythonDevice.runScript"></a>
1067 <h4>CircuitPythonDevice.runScript</h4> 1300 <h4>CircuitPythonDevice.runScript</h4>
1068 <b>runScript</b>(<i>script</i>) 1301 <b>runScript</b>(<i>script</i>)
1069 1302
1070 <p> 1303 <p>
1255 SSID of the network to connect to 1488 SSID of the network to connect to
1256 </dd> 1489 </dd>
1257 <dt><i>password</i> (str)</dt> 1490 <dt><i>password</i> (str)</dt>
1258 <dd> 1491 <dd>
1259 password needed to authenticate 1492 password needed to authenticate
1493 </dd>
1494 </dl>
1495 <dl>
1496 <dt>Return:</dt>
1497 <dd>
1498 tuple containing a flag indicating success and an error message
1499 </dd>
1500 </dl>
1501 <dl>
1502 <dt>Return Type:</dt>
1503 <dd>
1504 tuple of (bool, str)
1505 </dd>
1506 </dl>
1507 <a NAME="CircuitPythonDevice.writeLanAutoConnect" ID="CircuitPythonDevice.writeLanAutoConnect"></a>
1508 <h4>CircuitPythonDevice.writeLanAutoConnect</h4>
1509 <b>writeLanAutoConnect</b>(<i>config</i>)
1510
1511 <p>
1512 Public method to generate a script and associated configuration to connect the
1513 device to the LAN during boot time.
1514 </p>
1515 <dl>
1516
1517 <dt><i>config</i> (str or tuple of (str, str, str, str))</dt>
1518 <dd>
1519 configuration for the connection (either the string 'dhcp'
1520 for a dynamic address or a tuple of four strings with the IPv4 parameters.
1260 </dd> 1521 </dd>
1261 </dl> 1522 </dl>
1262 <dl> 1523 <dl>
1263 <dt>Return:</dt> 1524 <dt>Return:</dt>
1264 <dd> 1525 <dd>

eric ide

mercurial