요새 만들고 있는건 이런것. C++ DirectX 11엔진이다.
요새 계속 포스팅했던 내용을 영상으로 찍어서 올려본다.
win32버전을 기본으로 UWP앱 버전을 만들었다.
첫번짼 win32, 두번째는 데스크탑에서의 UWP app , 세번째는 Windows 10 Phone에서의 UWP App.
DX11 Feature를 지원하는 리얼 윈폰 하드웨어에서 실행하고 싶었지만 루미아 950을 구하지 못해서 그냥 에뮬레이터로 돌렸다.
루미아 1520으로도 작동할순 있지만 Feature Level 9.3으로 돌려야하고 그럼 모든 이펙트를 다 꺼야해서 영상씩이나 찍고 싶진 않았다.
안녕하세요. 홀로 프로젝트 테스트를 해보면서 UWP에 대해 알아보다가 여기까지 오게 되었습니다. 부디 하기 문제에 관해 조언해주실 수 있는 내용이 있으시면 가르침 부탁드립니다.
프로젝트 내용
1. 라즈베리파이2에 Windows 10 IoT 설치
2. Windosw 7 PC에서 Visual Studio 2015 설치 후 기본 예제 실행 테스트 완료
3. https://ms-iot.github.io/content/en-US/win10/samples/SerialSample.htm 사이트에서 C++ Serial Sample 다운로드
4. 라즈베리파이 GPIO 핀 중에서 GND, UART TX, UART RX 핀을 사용하고 PC 에는 USB to Serial 젠더를 사용
5. PC에서 기본 시리얼 통신 하는 방법은 기본설정(BaudRate 등) 후 Port Open.
6. 3번의 예제는 연결된 디바이스를 검색 후 디바이스 ID를 받아와서 해당 포트를 Open 하는 방식으로 되어있음.
7. 디바이스 검색 실패.
상기 프로젝트 진행 중에 대해서 궁금한 점이 있습니다.
1) 본래 PC에서 시리얼 통신 하는 C++ 코드는 상대 디바이스와 상관없이 Serial 케이블 연결만 되면 COM3 등에 포트가 열리고 해당 포트를 오픈하는 식이였는데 UWP 프로젝트 예제에서는 상대 디바이스를 검색하기 시작합니다. 이는 같은 UWP APP 끼리만 시리얼 통신을 할 수 있다는 것 일까요?
2) 라즈베리파이2에 핀을 연결해도 연결된 장치 목록은 변함이 없어서 포트 지정 방식에 대해 감이 오지 않습니다. 예제에서는 연결된 디바이스 검색을 하고 해당 디바이스를 선택하면 그 디바이스가 연결된 포트가 열리는 식으로 되어 있어서 테스트 진행이 정지된 상태입니다. 단순히 WIn32 프로젝트 처럼 연결된 시리얼포트를 알아내어 해당 포트를 Open 하는 방식은 불가능 할까요?
여러가지 활동으로 바쁘신줄 알지만 너무 답답하여 무례를 무릅쓰고 질문 남깁니다.
읽어주셔서 감사합니다.
좋아요좋아요
라즈베리파이2로 간단한 테스트를 해본적은 있지만 GPIO를 사용해본적은 없습니다.
원하시는 답변을 드리긴 어렵겠습니다. 다만 UWP App끼리만 시리얼 통신을 하는것은 아니라고 단언할 수 있습니다.
요새 한국어로 된 Windows IoT에 대한 자료도 많고 강좌도 많으니 그 쪽으로 알아보시는게 좋겠습니다.
좋아요좋아요
https://github.com/Jark/FTDISample
저 사이트에서 FTDI 드라이버와 C#으로 된 샘플 코드를 받아서 테스트해보니 시리얼 통신이 잘 되었습니다.
GPIO Pin 으로는 실패하고.. USB to Serial 드라이버 설치 후 테스트하였습니다.
http://www.ftdichip.com/Support/Documents/InstallGuides/AN_271%20D2xx%20WinRT%20Guide.pdf 이곳에 설명이 잘 나와있었습니다.
그런데 C#에서 디바이스 정보를 받아오는 코드부분을 이곳의 강좌 도움을 받아 겨우 C++/CX 로 바꾸어 보았는데 디바이스 정보를 받아오지 못합니다….
C# 예제코드
정의 : private readonly FTManager ftManager;
생성 : ftManager = new FTManager();
디바이스 정보 저장 : var devicesList = ftManager.GetDeviceList();
C++
정의/생성 : FTManager ^ftManager = ref new FTManager();
디바이스 정보 저장 : auto devicesList = ftManager->GetDeviceList();
잘못된 부분이 있다면 도움 말씀 부탁드립니다.
좋아요좋아요
메타데이터(.Winmd) 파일을 다운받아서 참조 등록하고 아래와 같이 코드를 작성하였습니다.
(사이트상 C# 예제는 구동이 잘 되는걸로 봐서 드라이버 설치 및 세팅은 정상입니다…)
using namespace FTDI::D2xx::WinRT;
using namespace FTDI::D2xx::WinRT::Device;
using namespace FTDI::D2xx::WinRT::Device::EEPROM;
이렇게 네임스페이스를 등록한 다음
FTManager ^_ftmanager = ref new FTManager();
로 생성하였습니다.
여기서 _ftmanager->GetDeviceList() 의 원형을 보니
virtual Windows::Foundation::Collections::IVector^ GetDeviceList() new sealed = FTDI::D2xx::WinRT::IFTManagerClass::GetDeviceList
이렇게 되어있어서.. IVector 라는 것을 처음 써보려고 하는데 데이터가 잘 받아지지 않습니다.
제가 작성한 코드는 아래와 같습니다.
IVector ^_myDevice;
_myDevice = _ftmanager->GetDeviceList();
하지만 _myDevice에서는 데이터가 잘 받아지지 않네요..
빌드시 warning 메세지 추가합니다.
MainPage.xaml.cpp(46): warning C4691: ‘Windows::Foundation::Collections::IVector’: 참조된 형식은 참조되지 않은 어셈블리 ‘Windows’에 있어야 합니다. 현재 변환 단위에 정의된 형식이 대신 사용되었습니다.
1> MainPage.xaml.cpp(46): note: ‘FTDI::D2xx::WinRT::IFTManagerClass ‘ 형식을 ‘FTDI.D2xx.WinRT, Version=1.0.2.0, Culture=neutral, PublicKeyToken=null’ 어셈블리에서 가져오는 동안 이 진단이 수행되었습니다.
1> MainPage.xaml.cpp(46): note: ‘FTDI::D2xx::WinRT::FTManager ‘ 형식을 ‘FTDI.D2xx.WinRT, Version=1.0.2.0, Culture=neutral, PublicKeyToken=null’ 어셈블리에서 가져오는 동안 이 진단이 수행되었습니다.
1>MainPage.xaml.cpp(46): warning C4691: ‘Windows::Foundation::IStringable’: 참조된 형식은 참조되지 않은 어셈블리 ‘Windows’에 있어야 합니다. 현재 변환 단위에 정의된 형식이 대신 사용되었습니다.
1> MainPage.xaml.cpp(46): note: ‘FTDI::D2xx::WinRT::FTManager ‘ 형식을 ‘FTDI.D2xx.WinRT, Version=1.0.2.0, Culture=neutral, PublicKeyToken=null’ 어셈블리에서 가져오는 동안 이 진단이 수행되었습니다.
1>MainPage.xaml.cpp(322): warning C4691: ‘Windows::UI::Xaml::Data::INotifyPropertyChanged’: 참조된 형식은 참조되지 않은 어셈블리 ‘Windows’에 있어야 합니다. 현재 변환 단위에 정의된 형식이 대신 사용되었습니다.
1> MainPage.xaml.cpp(322): note: ‘FTDI::D2xx::WinRT::Device::IFTDeviceInfoNode ‘ 형식을 ‘FTDI.D2xx.WinRT, Version=1.0.2.0, Culture=neutral, PublicKeyToken=null’ 어셈블리에서 가져오는 동안 이 진단이 수행되었습니다.
1> MainPage.xaml.cpp(322): note: 컴파일 중인 클래스 제네릭 인스턴스화 ‘Windows::Foundation::Collections::IVector’에 대한 참조를 확인하십시오.
도움부탁드립니다.
좋아요좋아요
IVector는 읽기전용 벡터입니다. _myDevice->Size해서 안에 원소가 있는지 확읺보세요.
C++/cx의 IVector에 대해서는 다음의 링크를 참고하시기 바랍니다.
https://msdn.microsoft.com/ko-kr/library/hh700103.aspx
좋아요좋아요