This is default featured slide 1 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 2 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 3 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

*/

석촌호수 일시 폐쇄

석촌호수가 코로나로 인해 4월 12일까지 진입 금지되었다..



CommonAPI stub, proxy, common 분류하여 동적 라이브러리 만들기

CommonAPI Generator로 생성되는 file에서 Stub, Proxy, Common으로 어떤 파일들이 생성되는지 확인할 수 있었는데, 각자의 디렉토리에 해당 화일 생성하는 방법을 알아보자.
파일을 나눠서 생성하는것은 SOME/IP나 DBUS와 같이 바인딩 라이브러리를 만들때 활용한다.
동적으로 바인딩 라이브러리를 구성하면 실행파일을 실행시킬때 CommonAPI 관련 환경파일(commonapi.ini, commonapi-somip.ini)도 같이 구성하여야 한다. - 추후 정리

commonapi Someip Generator의 옵션을 조정해서 각각의 위치로 파일을 생성한다.
  -dc directory : Common file들을 directory에 생성
  -dp directory : Proxy file들을 directory에 생성
  -ds directory : Stub file들을 directory에 생성

예제에서
  hello$ ../commonapi_someip_generator/commonapi-someip-generator-linux-x86 -ll verbose /fidl/HelloWorld.fdepl
와 같이 수행했던 명령을 아래와 같이 변경한다.
  hello$ ../commonapi_someip_generator/commonapi-someip-generator-linux-x86 -ll verbose /fidl/HelloWorld.fdepl  -dc src-gen_someip/common -dp src-gen_someip/proxy -ds src-gen_someip/stub


이제 Common, Stub, Proxy 용 SOME/IP 동적 바인딩 라이브러리(.so)를 만들어보자.
CMakeLists.txt를 아래와 같이 변경한다.
  • CMakeLists.txt
cmake_minimum_required(VERSION 2.8)

OPTION(USE_INSTALLED_COMMONAPI "Set to OFF to use the local (build tree) version of CommonAPI" OFF)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -std=c++0x -Wl,--no-as-needed")

include_directories(
     src-gen
     src-gen_someip/common
     src-gen_someip/proxy
     src-gen_someip/stub
     ~/capicxx-core-runtime/include      #capixx-core-runtime이 설치되어 있는 폴더
     ~/capicxx-someip-runtime/include    #capixx-someip-runtime이 설치되어 있는 폴더
     ~/vSomeIP/interface                 #vSomeIP가 설치되어 있는 폴더
)

link_directories(
     ~/COMMONAPI                         #CommonAPI 라이브러리가 설치되어 있는 폴더
)

add_library(HelloWorldsomeipCommon SHARED 
                src-gen_someip/common/v1/commonapi/HelloWorldSomeIPDeployment.cpp )
target_link_libraries(HelloWorldsomeipCommon ~/COMMONAPI/libCommonAPI-SomeIP.so vsomeip )
add_library(HelloWorldsomeipProxy SHARED 
  src-gen_someip/proxy/v1/commonapi/HelloWorldSomeIPProxy.cpp )
target_link_libraries(HelloWorldsomeipProxy ~/COMMONAPI/libCommonAPI-SomeIP.so vsomeip )
add_library(HelloWorldsomeipStub SHARED 
  src-gen_someip/stub/v1/commonapi/HelloWorldSomeIPStubAdapter.cpp )
target_link_libraries(HelloWorldsomeipStub ~/COMMONAPI/libCommonAPI-SomeIP.so vsomeip )


build 디렉토리로 이동하여
$ cmake ..

$ make

관련 페이지

CommonAPI stub, proxy ?

작성된 FIDL을 이용하여 CommonAPI Generator를 돌리면 stub code들과 proxy코드들이 생성된다.
stub과 proxy는 어떻게 구분하여 사용해야 할까?

Stub 속성
  Service 제공자
  영구적

Proxy 속성
  Client
  일시적


관련 페이지

CommonAPI Generator로 생성되는 file

CommonAPI Generator를 이용하여 하나의 FIDL 파일로 proxy와 stub 코드를 생성할 수 있다. 여기에서 만들어지는 코드는 IPC의 종류(dbus, some/ip)에 상관없이 독립적으로 동작되는 코드이다.

기본절차
  1. FIDL 작성
  2. CommonAPI Code Generator를 이용하여 Proxy/Stub 코드 생성
  3. Generation Stub 코드를 상속받아 Stub implement 코드 작성(xxxStubImpl.hpp, xxxStubImple.cpp). 
  4. Client Application에서 Proxy function을 호출 했을때 동작할 기능을 구현.
  5. Deployment 사양서( xxx.fdepl ) 작성 후 해당 IPC Generator 실행(Some/IP 혹은 dbus  generator)
  6. CMake 파일 생성





CommonaAPI C++ SOME/IP Example 에서 만든 HelloWorld.fidl과 HelloWorld.fdepl로 Generation시키면 Client(Proxy)와 Service(Stub)에 사용할 소스파일들이 생성된다.
  • HelloWorld.fdepl
import "platform:/plugin/org.genivi.commonapi.someip/deployment/CommonAPI-SOMEIP_deployment_spec.fdepl"
import "HelloWorld.fidl"
define org.genivi.commonapi.someip.deployment for interface commonapi.HelloWorld {
  SomeIpServiceID = 4660 method sayHello {
     SomeIpMethodID = 31000
  }
}
define org.genivi.commonapi.someip.deployment for provider MyService {
  instance commonapi.HelloWorld {
     InstanceId = "test"
     SomeIpInstanceID = 22136
  }
}
  • HelloWorld.fidl
package commonapi
interface HelloWorld {
   version {major 1 minor 0}
   method sayHello {
      in {
         String name
      }
      out {
         String message
      }
   } 
}


CommonAPI Generator로 생성시킨 파일들은 아래와 같고
공용
    HelloWorld.hpp

Client에 사용               
    HelloWorldProxy.hpp
    HelloWorldProxyBase.hpp

Stub/Service에 사용
    HelloWorldStub.hpp
    HelloWorldStubDefault.cpp
    HelloWorldStubDefault.hpp

CommonAPI Some/IP Generator로 생성시킨 파일들은 다음과 같다.
Client에 사용               
    HelloWorldSomeIPProxy.hpp
    HelloWorldSomeIPProxy.cpp     
    HelloWorldSomeIPDeployment.hpp
    HelloWorldSomeIPDeployment.cpp
Stub/Service에 사용
    HelloWorldSomeIPStubAdapter.hpp
    HelloWorldSomeIPStubAdapter.cpp


Ref.
 - GENIVI CommonAPI tools (capicxx-core-tools)

관련 페이지

일회용 마스크 재사용 하기

우한폐렴(코로나19)으로 마스크 구하기가 하늘에 별따기다.. ㅡ.ㅡ
그나마 작년도에 미세먼지때문에 사놓은 거 가지고 버티고 있는데 언제까지 버틸 수 있을지...
일회용 마스크를 세탁하거나 알코올로 소독하면 기존 성능이 3~40% 하락한다고 한다.
소독을 UVC(자외선)로 하면 어떨까 싶다. 성능이 떨어질까?
집에서 사용하고 식기 건조기에 있는 살균 기능을 이용해 보았다..

UVC를 쬔다고 마스크 필터가 손상되지 않는다고 한다.

마스크 한장당 1주일 쓰기