Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
monticore
EmbeddedMontiArc
generators
EMAM2SomeIP
Commits
8ae1a80a
Commit
8ae1a80a
authored
Aug 30, 2019
by
Florian Raeth
Browse files
get ports from model
parent
93bef2ca
Pipeline
#178209
failed with stages
in 1 minute and 37 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
src/main/resources/de/monticore/lang/monticar/generator/someip/template/Adapter.cpp.ftl
View file @
8ae1a80a
...
...
@@ -3,107 +3,91 @@
#
include
"<@m.mwIdent/>Adapter_$
{
model
.getEscapedCompName
()}
.h"
<@
m
.mwIdent
/>
Adapter_
${
model
.getEscapedCompName
()}::<@
m
.mwIdent
/>
Adapter_
${
model
.getEscapedCompName
()}()
: public IAdapter_$
{
model
.getEscapedCompName
()}
{
//
choose
random
ids
in1_service_id
=
11
;
in1_instance_id
=
12
;
in1_method_id
=
13
;
in1_event_id
=
14
;
in1_eventgroup_id
=
15
;
in2_service_id
=
21
;
in2_instance_id
=
22
;
in2_method_id
=
23
;
in2_event_id
=
24
;
in2_eventgroup_id
=
25
;
out1_service_id
=
111
;
out1_instance_id
=
112
;
out1_method_id
=
113
;
out1_event_id
=
114
;
out1_eventgroup_id
=
115
;
out2_service_id
=
121
;
out2_instance_id
=
122
;
out2_method_id
=
123
;
out2_event_id
=
124
;
out2_eventgroup_id
=
125
;
<#--
<#
list
model
.getIncomingPorts
()
as
sub
>
$
{
sub
.getName
()}
_
service_id
=
11
;
$
{
sub
.getName
()}
_
instance_id
=
12
;
$
{
sub
.getName
()}
_
method_id
=
13
;
$
{
sub
.getName
()}
_
event_id
=
14
;
$
{
sub
.getName
()}
_
eventgroup_id
=
15
;
</#
list
>
<#
list
model
.getOutgoingPorts
()
as
pub
>
$
{
pub
.getName
()}
_
service_id
=
111
;
$
{
pub
.getName
()}
_
instance_id
=
112
;
$
{
pub
.getName
()}
_
method_id
=
113
;
$
{
pub
.getName
()}
_
event_id
=
114
;
$
{
pub
.getName
()}
_
eventgroup_id
=
115
;
</#
list
>
-
->
}
void
<@m.mwIdent/>Adapter_$
{
model
.getEscapedCompName
()}
::init($
{
model
.getEscapedCompName
()}
*
comp)
{
//
I
nitialize
component
this-
>
component
=
comp
;
//
I
ntitialize
subscriber
for
in1
in1_Subscriber
=
vsomeip
::
runtime
::
get
()->
create_application
(
"Subscriber"
)
;
in1_Subscriber-
>
init
()
;
in1_Subscriber-
>
request_service
(
in1_service_id
,
in1_instance_id
)
;
in1_Subscriber-
>
register_message_handler
(
in1_service_id
,
in1_instance_id
,
in1_method_id
,
std
::
bind
(
&
S
omeIPAdapter_
$
{
model
.getEscapedCompName
()}::
on_message_in1
,
this
,
std
::
placeholders
::
_
1
))
;
//
S
ubscribe
std
::
set
<
vsomeip
::
eventgroup_t
>
in1_event_group
;
in1_event_group
.insert
(
in1_eventgroup_id
)
;
in1_Subscriber-
>
request_event
(
in1_service_id
,
in1_instance_id
,
in1_event_id
,
in1_event_group
,
true
)
;
in1_Subscriber-
>
subscribe
(
in1_service_id
,
in1_instance_id
,
in1_eventgroup_id
)
;
in1_Subscriber-
>
start
()
;
//
I
ntitialize
subscriber
for
in2
in2_Subscriber
=
vsomeip
::
runtime
::
get
()->
create_application
(
"Subscriber"
)
;
in2_Subscriber-
>
init
()
;
in2_Subscriber-
>
request_service
(
in2_service_id
,
in2_instance_id
)
;
in2_Subscriber-
>
register_message_handler
(
in2_service_id
,
in2_instance_id
,
in2_method_id
,
std
::
bind
(
&
S
omeIPAdapter_
$
{
model
.getEscapedCompName
()}::
on_message_in2
,
this
,
std
::
placeholders
::
_
1
))
;
//
S
ubscribe
std
::
set
<
vsomeip
::
eventgroup_t
>
in2_event_group
;
in2_event_group
.insert
(
in2_eventgroup_id
)
;
in2_Subscriber-
>
request_event
(
in2_service_id
,
in2_instance_id
,
in2_event_id
,
in2_event_group
,
true
)
;
in2_Subscriber-
>
subscribe
(
in2_service_id
,
in2_instance_id
,
in2_eventgroup_id
)
;
in2_Subscriber-
>
start
()
;
//
I
ntitialize
P
ublisher
for
out1
out1_Publisher
=
vsomeip
::
runtime
::
get
()->
create_application
(
"Publisher"
)
;
out1_Publisher-
>
init
()
;
out1_Publisher-
>
offer_service
(
out1_service_id
,
out1_instance_id
)
;
out1_Publisher-
>
start
()
;
//
I
ntitialize
P
ublisher
for
out2
out2_Publisher
=
vsomeip
::
runtime
::
get
()->
create_application
(
"Publisher"
)
;
out2_Publisher-
>
init
()
;
out2_Publisher-
>
offer_service
(
out2_service_id
,
out2_instance_id
)
;
out2_Publisher-
>
start
()
;
}
void
<@m.mwIdent/>Adapter_$
{
model
.getEscapedCompName
()}
::on_message_in1(const std::shared_ptr<vsomeip::message> &_request)
{
//
read
received
message
std
::
shared_ptr
<
vsomeip
::
payload
>
its_payload
=
_
request-
>
get_payload
()
;
vsomeip
::
length_t
l
=
its_payload-
>
get_length
()
;
double
dataFromMessage
=
*
((
double
*
)
its_payload-
>
get_data
())
;
component-
>
in1
=
dataFromMessage
;
//
print
data
to
std
out
std
::
cout
<<
"SERVICE: Received message from ["
<<
std
::
setw
(
4
)
<<
std
::
setfill
(
'
0
'
)
<<
std
::
hex
<<
_
request-
>
get_client
()
<<
"/"
<<
std
::
setw
(
4
)
<<
std
::
setfill
(
'
0
'
)
<<
std
::
hex
<<
_
request-
>
get_session
()
<<
"]: "
<<
dataFromMessage
<<
std
::
endl
;
//
I
ntitialize
S
ubscriber
<#
list
model
.getIncomingPorts
()
as
sub
>
$
{
sub
.getName
()}
_
S
ubscriber
=
vsomeip
::
runtime
::
get
()->
create_application
(
"Subscriber"
)
;
if
(
!$
{
sub
.getName
()}
_
S
ubscriber-
>
init
())
{
std
::
cerr
<<
"Couldn't initialize Subscriber ${sub.getName()}"
<<
std
::
endl
;
return
false
;
}
$
{
sub
.getName
()}
_
S
ubscriber-
>
register_state_handler
(
std
::
bind
(
&
S
omeIPAdapter_
$
{
model
.getEscapedCompName
()}::
on_state
,
this
,
std
::
placeholders
::
_
1
)
;
$
{
sub
.getName
()}
_
S
ubscriber-
>
register_message_handler
(
$
{
sub
.getSomeIPConnectionSymbol
()
.getserviceID
()},
$
{
sub
.getSomeIPConnectionSymbol
()
.getinstanceID
()},
$
{
sub
.getSomeIPConnectionSymbol
()
.getmethodID
()},
std
::
bind
(
&
S
omeIPAdapter_
$
{
model
.getEscapedCompName
()}::
on_message_
$
{
sub
.getName
()},
this
,
std
::
placeholders
::
_
1
))
;
$
{
sub
.getName
()}
_
S
ubscriber-
>
register_availability_handler
(
$
{
sub
.getSomeIPConnectionSymbol
()
.getserviceID
()},
$
{
sub
.getSomeIPConnectionSymbol
()
.getinstanceID
()},
std
::
bind
(
&
S
omeIPAdapter_
$
{
model
.getEscapedCompName
()}::
on_availability
,
this
,
std
::
placeholders
::
_
1
,
std
::
placeholders
::
_
2
,
std
::
placeholders
::
_
3
))
;
//
S
ubscribe
std
::
set
<
vsomeip
::
eventgroup_t
>
event_group
;
event_group
.insert
(
$
{
sub
.getSomeIPConnectionSymbol
()
.geteventgroupID
()})
;
$
{
sub
.getName
()}
_
S
ubscriber-
>
request_event
(
$
{
sub
.getSomeIPConnectionSymbol
()
.getserviceID
()},
$
{
sub
.getSomeIPConnectionSymbol
()
.getinstanceID
()},
$
{
sub
.getSomeIPConnectionSymbol
()
.geteventID
()},
event_group
,
true
)
;
$
{
sub
.getName
()}
_
S
ubscriber-
>
subscribe
(
$
{
sub
.getSomeIPConnectionSymbol
()
.getserviceID
()},
$
{
sub
.getSomeIPConnectionSymbol
()
.getinstanceID
()},
$
{
sub
.getSomeIPConnectionSymbol
()
.geteventgroupID
()})
;
</#
list
>
//
I
ntitialize
P
ublisher
<#
list
model
.getOutgoingPorts
()
as
pub
>
$
{
pub
.getName
()}
_
P
ublisher
=
vsomeip
::
runtime
::
get
()->
create_application
(
"Publisher"
)
;
if
(
!$
{
pub
.getName
()}
_
P
ublisher-
>
init
())
{
std
::
cerr
<<
"Couldn't initialize Publisher ${pub.getName()}"
<<
std
::
endl
;
return
false
;
}
$
{
pub
.getName
()}
_
P
ublisher-
>
offer_service
(
$
{
pub
.getSomeIPConnectionSymbol
()
.getserviceID
()},
$
{
pub
.getSomeIPConnectionSymbol
()
.getinstanceID
()})
;
</#
list
>
//
S
tart
S
ubscriber
<#
list
model
.getIncomingPorts
()
as
sub
>
$
{
sub
.getName
()}
_
S
ubscriber-
>
start
()
;
</#
list
>
//
S
tart
P
ublisher
<#
list
model
.getOutgoingPorts
()
as
pub
>
$
{
pub
.getName
()}
_
P
ublisher-
>
start
()
;
</#
list
>
}
void
<@m.mwIdent/>Adapter_$
{
model
.getEscapedCompName
()}
::on_message_in2(const std::shared_ptr<vsomeip::message> &_request)
{
<#
list
model.getIncomingPorts() as sub>
void
<@m.mwIdent/>Adapter_$
{
model
.getEscapedCompName
()}
::on_message_$
{
sub
.getName
()}
(const std::shared_ptr<vsomeip::message> &_request)
{
//
read
received
message
std
::
shared_ptr
<
vsomeip
::
payload
>
its_payload
=
_
request-
>
get_payload
()
;
vsomeip
::
length_t
l
=
its_payload-
>
get_length
()
;
double
dataFromMessage
=
*
((
double
*
)
its_payload-
>
get_data
())
;
component-
>
in2
=
dataFromMessage
;
component-
>
$
{
sub
.getName
()}
=
dataFromMessage
;
//
print
data
to
std
out
std
::
cout
<<
"SERVICE: Received message from ["
<<
std
::
setw
(
4
)
<<
std
::
setfill
(
'
0
'
)
<<
std
::
hex
<<
_
request-
>
get_client
()
<<
"/"
<<
std
::
setw
(
4
)
<<
std
::
setfill
(
'
0
'
)
<<
std
::
hex
<<
_
request-
>
get_session
()
<<
"]: "
<<
dataFromMessage
<<
std
::
endl
;
std
::
cout
<<
"SERVICE
${sub.getName()}
: Received message from ["
<<
std
::
setw
(
4
)
<<
std
::
setfill
(
'
0
'
)
<<
std
::
hex
<<
_
request-
>
get_client
()
<<
"/"
<<
std
::
setw
(
4
)
<<
std
::
setfill
(
'
0
'
)
<<
std
::
hex
<<
_
request-
>
get_session
()
<<
"]: "
<<
dataFromMessage
<<
std
::
endl
;
}
</#
list
>
void
<@m.mwIdent/>Adapter_$
{
model
.getEscapedCompName
()}
::publishout1_Publisher()
<#
list
model.getOutgoingPorts() as pub>
void
<@m.mwIdent/>Adapter_$
{
model
.getEscapedCompName
()}
::publish$
{
pub
.getName
()}
_Publisher()
{
//Read data from component
double d = component->
out1
;
double d = component->
$
{
pub
.getName
()}
;
//Create message
uint8_t
*
byteArray = (uint8_t
*
)&d;
...
...
@@ -112,32 +96,34 @@ void <@m.mwIdent/>Adapter_${model.getEscapedCompName()}::publishout1_Publisher()
std::shared_ptr< vsomeip::payload > payload = vsomeip::runtime::get()->create_payload(p,8);
//Publish
std::set<vsomeip::eventgroup_t>
out1_
event_group;
out1_
event_group.insert(
out1_
eventgroup
_id
);
out1
_Publisher->offer_event(
out1_service_id, out1_instance_id, out1_event_id, out1_
event_group, true);
out1
_Publisher->notify(
out1_service_id, out1_instance_id, out1_event_id
, payload);
std::set<vsomeip::eventgroup_t> event_group;
event_group.insert(
$
{
pub
.getSomeIPConnectionSymbol
()
.get
eventgroup
ID
()}
);
$
{
pub
.getName
()}
_Publisher->offer_event(
$
{
pub
.getSomeIPConnectionSymbol
()
.getserviceID
()}
, $
{
pub
.getSomeIPConnectionSymbol
()
.getinstanceID
()}
, $
{
pub
.getSomeIPConnectionSymbol
()
.geteventID
()}
,
event_group, true);
$
{
pub
.getName
()}
_Publisher->notify(
$
{
pub
.getSomeIPConnectionSymbol
()
.getserviceID
()}
, $
{
pub
.getSomeIPConnectionSymbol
()
.getinstanceID
()}
, $
{
pub
.getSomeIPConnectionSymbol
()
.geteventID
()}
, payload);
}
</#
list
>
void
<@m.mwIdent/>Adapter_$
{
model
.getEscapedCompName
()}
::publishout2_Publisher()
{
//Read data from component
double d = component->out2;
<#
list
model.getIncomingPorts() as sub>
void
<@m.mwIdent/>Adapter_$
{
model
.getEscapedCompName
()}
::on_state_$
{
sub
.getName
()}
(vsomeip::state_type_e _state)
{
if
(
_
state
==
vsomeip
::
state_type_e
::
ST
_
REGISTERED
)
{
$
{
sub
.getName
()}
_
S
ubscriber-
>
request_service
(
$
{
pub
.getSomeIPConnectionSymbol
()
.getserviceID
()},
$
{
pub
.getSomeIPConnectionSymbol
()
.getinstanceID
()})
;
}
}
</#
list
>
//Create message
uint8_t
*
byteArray = (uint8_t
*
)&d;
vsomeip::byte_t
*
p;
p = byteArray;
std::shared_ptr< vsomeip::payload > payload = vsomeip::runtime::get()->create_payload(p,8);
//Publish
std::set<vsomeip::eventgroup_t> out2_event_group;
out2_event_group.insert(out2_eventgroup_id);
out2_Publisher->offer_event(out2_service_id, out2_instance_id, out2_event_id, out2_event_group, true);
out2_Publisher->notify(out2_service_id, out2_instance_id, out2_event_id, payload);
void
<@m.mwIdent/>Adapter_$
{
model
.getEscapedCompName
()}
::on_availability(vsomeip::service_t _service, vsomeip::instance_t _instance, bool _is_available)
{
std
::
cout
<<
"Service ["
<<
std
::
setw
(
4
)
<<
std
::
setfill
(
'
0
'
)
<<
std
::
hex
<<
_
service
<<
"."
<<
_
instance
<<
"] is "
<<
(
_
is_available
?
"available."
:
"NOT available."
)
<<
std
::
endl
;
}
void
<@m.mwIdent/>Adapter_$
{
model
.getEscapedCompName
()}
::tick()
{
publishout1_Publisher();
publishout2_Publisher();
<#list model.getOutgoingPorts() as pub>
publish$
{
pub
.getName
()}
_Publisher();
</#list>
}
src/main/resources/de/monticore/lang/monticar/generator/someip/template/Adapter.h.ftl
View file @
8ae1a80a
...
...
@@ -23,14 +23,6 @@ public:
void
init
(
$
{
model
.getEscapedCompName
()}
*
comp
)
;
void
on_message_in1
(
const
std
::
shared_ptr
<
vsomeip
::
message
>
&_
request
)
;
void
on_message_in2
(
const
std
::
shared_ptr
<
vsomeip
::
message
>
&_
request
)
;
void
publishout1_Publisher
()
;
void
publishout2_Publisher
()
;
void
tick
()
;
...
...
@@ -38,35 +30,35 @@ private:
$
{
model
.getEscapedCompName
()}
*
component
=
nullptr
;
std
::
shared_ptr
<
vsomeip
::
application
>
in1_Subscriber
;
<#
list
model
.getIncomingPorts
()
as
sub
>
std
::
shared_ptr
<
vsomeip
::
application
>
$
{
sub
.getName
()}
_
S
ubscriber
;
std
::
shared_ptr
<
vsomeip
::
application
>
in2_Subscriber
;
void
on_message_
$
{
sub
.getName
()}(
const
std
::
shared_ptr
<
vsomeip
::
message
>
&_
request
)
;
void
on_state_
$
{
sub
.getName
()}(
vsomeip
::
state_type_e
_
state
)
;
</#
list
>
std
::
shared_ptr
<
vsomeip
::
application
>
out1_Publisher
;
<#
list
model
.getOutgoingPorts
()
as
pub
>
std
::
shared_ptr
<
vsomeip
::
application
>
$
{
pub
.getName
()}
_
P
ublisher
;
std
::
shared_ptr
<
vsomeip
::
application
>
out2_Publisher
;
void
publish
$
{
pub
.getName
()}
_
P
ublisher
()()
;
</#
list
>
int
in1_service_id
;
int
in1_instance_id
;
int
in1_method_id
;
int
in1_event_id
;
int
in1_eventgroup_id
;
void
on_availability
(
vsomeip
::
service_t
_
service
,
vsomeip
::
instance_t
_
instance
,
bool
_
is_available
)
;
int
in2_service_id
;
int
in2_instance_id
;
int
in2_method_id
;
int
in2_event_id
;
int
in2_eventgroup_id
;
int
out1_service_id
;
int
out1_instance_id
;
int
out1_method_id
;
int
out1_event_id
;
int
out1_eventgroup_id
;
<#--
<#
list
model
.getIncomingPorts
()
as
sub
>
int
$
{
sub
.getName
()}
_
service_id
;
int
$
{
sub
.getName
()}
_
instance_id
;
int
$
{
sub
.getName
()}
_
method_id
;
int
$
{
sub
.getName
()}
_
event_id
;
int
$
{
sub
.getName
()}
_
eventgroup_id
;
</#
list
>
int
out2_service_id
;
int
out2_instance_id
;
int
out2_method_id
;
int
out2_event_id
;
int
out2_eventgroup_id
;
<#
list
model
.getOutgoingPorts
()
as
pub
>
int
$
{
pub
.getName
()}
_
service_id
;
int
$
{
pub
.getName
()}
_
instance_id
;
int
$
{
pub
.getName
()}
_
method_id
;
int
$
{
pub
.getName
()}
_
event_id
;
int
$
{
pub
.getName
()}
_
eventgroup_id
;
</#
list
>
-
->
}
;
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment