-
Notifications
You must be signed in to change notification settings - Fork 60
/
RteCallback.cpp
118 lines (96 loc) · 3.01 KB
/
RteCallback.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/******************************************************************************/
/* RTE - CMSIS Run-Time Environment */
/******************************************************************************/
/** @file RteCallback.cpp
* @brief CMSIS RTE Data Model
*/
/******************************************************************************/
/*
* Copyright (c) 2020-2021 Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*/
/******************************************************************************/
#include "RteCallback.h"
#include "RteKernel.h"
#include "RteProject.h"
#include "RteTarget.h"
#include "RteBoard.h"
#include "RteUtils.h"
using namespace std;
RteCallback* RteCallback::theGlobalCallback = nullptr;
RteCallback::RteCallback():
m_rteKernel(nullptr)
{
}
void RteCallback::OutputMessages(const std::list<string>& messages)
{
for (auto& msg: messages) {
OutputMessage(msg);
}
};
long RteCallback::QueryMessage(const string& message, unsigned int type, long defaultVal)
{
OutputMessage(message);
return defaultVal;
}
long RteCallback::ShowMessageBox(const string& title, const string& message, unsigned int type, long defaultVal)
{
OutputMessage(message);
return defaultVal;
}
RteGenerator* RteCallback::GetExternalGenerator(const std::string& id) const
{
if(GetRteKernel()) {
return GetRteKernel()->GetExternalGenerator(id);
}
return nullptr;
}
RteCallback* RteCallback::GetGlobal()
{
if(theGlobalCallback) {
return theGlobalCallback;
}
static RteCallback nullCallback;
return &nullCallback;
}
void RteCallback::SetGlobal(RteCallback* callback)
{
theGlobalCallback = callback;
}
string RteCallback::ExpandString(const string& str) {
const RteKernel* kernel = GetRteKernel();
if (!kernel) {
return RteUtils::EMPTY_STRING;
}
const auto activeProject = kernel->GetActiveProject();
if (!activeProject) {
return RteUtils::EMPTY_STRING;
}
const auto activeTarget = kernel->GetActiveTarget();
if (!activeTarget) {
return RteUtils::EMPTY_STRING;
}
const auto devicePackage = activeTarget->GetDevicePackage();
if (!devicePackage) {
return RteUtils::EMPTY_STRING;
}
const string& prjPath(activeProject->GetProjectPath());
const string& prjPathFile(prjPath + activeProject->GetName() + ".cprj");
const string& packPath(devicePackage->GetAbsolutePackagePath());
const string& deviceName(activeTarget->GetDeviceName());
const string& generatorInputFile(activeTarget->GetGeneratorInputFile());
if (prjPath.empty() || prjPathFile.empty() || packPath.empty() || deviceName.empty()) {
return RteUtils::EMPTY_STRING;
}
const string& boardName = activeTarget->GetAttribute("Bname");
string res(str);
RteUtils::ReplaceAll(res, "$P", prjPath);
RteUtils::ReplaceAll(res, "#P", prjPathFile);
RteUtils::ReplaceAll(res, "$S", packPath);
RteUtils::ReplaceAll(res, "$D", deviceName);
RteUtils::ReplaceAll(res, "$B", boardName);
RteUtils::ReplaceAll(res, "$G", generatorInputFile);
return res;
}
// end of RteCallback.cpp