winIDEA SDK
advanced_local_launching.py
1# This script is licensed under BSD License, see file LICENSE.txt.
2#
3# (c) TASKING Germany GmbH, 2023
4
5import sys
6import time
7import isystem.connect as ic
8
9
10# Instantiate the main object for managing connections to winIDEA.
11connectionMgr = ic.ConnectionMgr()
12
13
14def connectAndDisconnect(port, connectionConfig):
15
16 if port < 0:
17 print('No winIDEA with the specified configuration found, port = :', port,
18 '\n :', connectionConfig.toString(), '\n')
19 else:
20 print('Found winIDEA on port: ', port)
21 connectionMgr.connect(ic.CConnectionConfig().host('').udpDiscoveryPort(port))
22 ideCtrl = ic.CIDEController(connectionMgr)
23 ideCtrl.maximize()
24 time.sleep(2)
25 ideCtrl.restore()
26 connectionMgr.disconnect_close(bSaveAll=False)
27
28
29# Let's connect to winIDEA with known ID
30connectionConfig = ic.CConnectionConfig()
31connectionConfig.instanceId('myID')
32
33# since most likely there is no winIDEA with the specified ID running,
34# this call will raturn processID == 0
35print("Looking for winIDEA with ID 'myID' ... ")
36try:
37 connectionMgr.connect(connectionConfig.start_if_required())
38 port = connectionConfig.getUdpDiscoveryPort()
39 connectionMgr.disconnect_keep()
40 connectAndDisconnect(port, connectionConfig)
41except Exception as ex:
42 print(f' winIDEA not found: {ex}')
43
44# Now we'll start new instance with the given workspace and ID:
45print('Start new instance of winIDEA')
46connectionConfig.instanceId('myID').workspace('../../../targetProjects/SampleSTM32.xjrf')
47connectionMgr.connect(connectionConfig.start_always())
48port = connectionConfig.getUdpDiscoveryPort()
49connectionMgr.disconnect_close(bSaveAll=False)
50connectAndDisconnect(port, connectionConfig)
51
52# Most often we want to start a new instance of winIDEA only
53# if the workspace is not already opened:
54print('Start new instance of winIDEA started only if it is not running.')
55connectionConfig.instanceId('myID').workspace('../../../targetProjects/SampleSTM32.xjrf')
56connectionConfig.start_if_required()
57connectionMgr.connect(connectionConfig)
58port = connectionConfig.getUdpDiscoveryPort()
59connectionMgr.disconnect_close(bSaveAll=False)
60connectAndDisconnect(port, connectionConfig)
61
62
63# Let's start invisible winIDEA - you can control it only via isystem.connect
64print('Start hidden winIDEA.')
65invisibleConnectionConfig = ic.CConnectionConfig()
66invisibleConnectionConfig.visibility(ic.IConnect.lfShowHidden).workspace(r'../../../targetProjects/SampleSTM32.xjrf')
67invisibleConnectionConfig.start_always()
68connectionMgr.connect(invisibleConnectionConfig)
69print(f'Connected: {connectionMgr.isAttached()}')
70
71debugCtrl = ic.CDebugFacade(connectionMgr)
72print('downloading to invisible winIDEA')
73debugCtrl.download()
74print('Downloading finished')
75debugCtrl.reset()
76debugCtrl.run()
77time.sleep(1)
78debugCtrl.stop()
79debugCtrl.waitUntilStopped(3000)
80print('main_loop_counter = ', debugCtrl.evaluate(ic.IConnectDebug.fMonitor, 'main_loop_counter').getResult())
81
82# shut down the invisible winIDEA
83connectionMgr.disconnect_close(bSaveAll=False)
84print('Invisible winIDEA has been shut down')
85