@@ -29,53 +29,72 @@ bool ProjMgrRunDebug::CollectSettings(const vector<ContextItem*>& contexts) {
2929 m_runDebug.targetType = context->type .target ;
3030 m_runDebug.compiler = context->compiler ;
3131 if (!context->device .empty ()) {
32- m_runDebug.device = context->deviceItem .vendor + " ::" + context->deviceItem .name +
33- (context->deviceItem .pname .empty () ? " " : " :" + context->deviceItem .pname );
32+ m_runDebug.device = context->deviceItem .vendor + " ::" + context->deviceItem .name ;
3433 }
3534 if (!context->board .empty ()) {
3635 m_runDebug.board = context->boardItem .vendor + " ::" + context->boardItem .name +
3736 (context->boardItem .revision .empty () ? " " : " :" + context->boardItem .revision );
3837 }
3938
4039 // programming algorithms
41- Collection< RteItem*> algorithms;
40+ vector<pair< const RteItem*, vector<string>> > algorithms;
4241 // debug infos
43- Collection< RteItem*> debugs;
42+ vector<pair< const RteItem*, vector<string>> > debugs;
4443 // debug sequences
45- Collection<RteItem*> debugSequences;
44+ vector<pair<const RteItem*, vector<string>>> debugSequences;
45+
46+ // processor names
47+ map<string, ContextItem*> pnames;
48+ for (const auto & context : contexts) {
49+ pnames.emplace (context->deviceItem .pname , context);
50+ }
4651
4752 // device collections
48- if (context->devicePack ) {
49- m_runDebug.devicePack = context->devicePack ->GetPackageID (true );
50- const auto & deviceAlgorithms = context->rteDevice ->GetEffectiveProperties (" algorithm" , context->deviceItem .pname );
51- for (const auto & deviceAlgorithm : deviceAlgorithms) {
52- algorithms.push_back (deviceAlgorithm);
53- }
54- const auto & deviceDebugs = context->rteDevice ->GetEffectiveProperties (" debug" , context->deviceItem .pname );
55- for (const auto & deviceDebug : deviceDebugs) {
56- debugs.push_back (deviceDebug);
57- }
58- const auto & deviceDebugSequences = context->rteDevice ->GetEffectiveProperties (" sequence" , context->deviceItem .pname );
59- for (const auto & deviceDebugSequence : deviceDebugSequences) {
60- debugSequences.push_back (deviceDebugSequence);
53+ for (const auto & [pname, context] : pnames) {
54+ if (context->devicePack ) {
55+ m_runDebug.devicePack = context->devicePack ->GetPackageID (true );
56+ const auto & deviceAlgorithms = context->rteDevice ->GetEffectiveProperties (" algorithm" , pname);
57+ for (const auto & deviceAlgorithm : deviceAlgorithms) {
58+ PushBackUniquely (algorithms, deviceAlgorithm, pname);
59+ }
60+ const auto & deviceDebugs = context->rteDevice ->GetEffectiveProperties (" debug" , pname);
61+ for (const auto & deviceDebug : deviceDebugs) {
62+ PushBackUniquely (debugs, deviceDebug, pname);
63+ }
64+ const auto & deviceDebugSequences = context->rteDevice ->GetEffectiveProperties (" sequence" , pname);
65+ for (const auto & deviceDebugSequence : deviceDebugSequences) {
66+ PushBackUniquely (debugSequences, deviceDebugSequence, pname);
67+ }
6168 }
6269 }
6370
6471 // board collections
6572 if (context->boardPack ) {
6673 m_runDebug.boardPack = context->boardPack ->GetPackageID (true );
67- context->rteBoard ->GetChildrenByTag (" algorithm" , algorithms);
74+ Collection<RteItem*> boardAlgorithms;
75+ context->rteBoard ->GetChildrenByTag (" algorithm" , boardAlgorithms);
76+ for (const auto & boardAlgorithm : boardAlgorithms) {
77+ PushBackUniquely (algorithms, boardAlgorithm, boardAlgorithm->GetAttribute (" Pname" ));
78+ }
79+ }
80+
81+ // sort collections starting with specific pnames
82+ for (auto vec : { &algorithms, &debugs, &debugSequences }) {
83+ sort (vec->begin (), vec->end (), [](auto & left, auto & right) {
84+ return left.second .size () < right.second .size ();
85+ });
6886 }
6987
7088 // set device/board programming algorithms
71- for (const auto & algorithm : algorithms) {
89+ for (const auto & [ algorithm, pname] : algorithms) {
7290 AlgorithmType item;
7391 item.algorithm = algorithm->GetOriginalAbsolutePath ();
7492 item.start = algorithm->GetAttributeAsULL (" start" );
7593 item.size = algorithm->GetAttributeAsULL (" size" );
7694 item.ramStart = algorithm->GetAttributeAsULL (" RAMstart" );
7795 item.ramSize = algorithm->GetAttributeAsULL (" RAMsize" );
7896 item.bDefault = algorithm->GetAttributeAsBool (" default" );
97+ item.pname = pname.size () == 1 ? pname.front () : " " ;
7998 m_runDebug.algorithms .push_back (item);
8099 }
81100
@@ -89,12 +108,13 @@ bool ProjMgrRunDebug::CollectSettings(const vector<ContextItem*>& contexts) {
89108 }
90109
91110 // system descriptions
92- for (const auto & debug : debugs) {
111+ for (const auto & [ debug, pname] : debugs) {
93112 const auto & svd = debug->GetAttribute (" svd" );
94113 if (!svd.empty ()) {
95114 FilesType item;
96115 item.file = debug->GetAbsolutePackagePath () + svd;
97116 item.type = " svd" ;
117+ item.pname = pname.size () == 1 ? pname.front () : " " ;
98118 m_runDebug.systemDescriptions .push_back (item);
99119 }
100120 }
@@ -113,7 +133,7 @@ bool ProjMgrRunDebug::CollectSettings(const vector<ContextItem*>& contexts) {
113133 }
114134
115135 // debug sequences
116- for (const auto & debugSequence : debugSequences) {
136+ for (const auto & [ debugSequence, pname] : debugSequences) {
117137 DebugSequencesType sequence;
118138 sequence.name = debugSequence->GetName ();
119139 sequence.info = debugSequence->GetAttribute (" info" );
@@ -122,6 +142,7 @@ bool ProjMgrRunDebug::CollectSettings(const vector<ContextItem*>& contexts) {
122142 GetDebugSequenceBlock (debugSequenceBlock, block);
123143 sequence.blocks .push_back (block);
124144 }
145+ sequence.pname = pname.size () == 1 ? pname.front () : " " ;
125146 m_runDebug.debugSequences .push_back (sequence);
126147 }
127148
@@ -161,3 +182,13 @@ void ProjMgrRunDebug::GetDebugSequenceBlock(const RteItem* item, DebugSequencesB
161182 block.blocks .push_back (childBlock);
162183 }
163184}
185+
186+ void ProjMgrRunDebug::PushBackUniquely (vector<pair<const RteItem*, vector<string>>>& vec, const RteItem* item, const string pname) {
187+ for (auto & [rteItem, pnames] : vec) {
188+ if (rteItem == item) {
189+ CollectionUtils::PushBackUniquely (pnames, pname);
190+ return ;
191+ }
192+ }
193+ vec.push_back ({ item, { pname } });
194+ }
0 commit comments