ASRock BC-250 보드 RAZER CORE X CHROMA 에 설치하기 4

RAZER CORE X CHROMA 에 있는 12V 전원 을 사용하는 허브 보드를 설계중이다. 새로 설계되는 허브에는 4개의 USB 2.0 포트, 이더넷 포트를 통한 오디오 출력, 오디오 엠프 회로, 전원 감지 및 오디오 엠프 컨트롤을 위한 MCU 가 포함되어있다. 전원 소스는 12V 와 5VSB 를 사용하며, MCU 만 5VSB 를 사용하고 나머지 장치들은 12V 를 사용하도록 설계하였다. 보드 고정의 경우 RAZER CORE X CHROMA 에 장착 되어있던 PCIE 허브 카드의 브라켓을 그대로 사용할수 있도록 설계하였다. 핀 헤더를 통해 BC-250 의 USB 2.0 포트에 납땜하여 사용할 목적으로 설계 되었다. USB 2.0 포트 하나를 희생해서 사용한다. USB 허브 전원은 BC-250 에서 가져오지 않고 내부 전원 회로에서 컨버팅 된 5V3A 전원을 커런트 리미트로 제한하여 사용하도록 설계하였다. 그리고 이 보드에는 BC-250 전원이 꺼졌는지 감지하여 먼저 제작 하였던 PSU 컨트롤러로 신호를 보내주는 회로가 설계되어 지난번에 우려 했던 PSU 가 꺼지지 못하는 상황을 방지 할 수 있다.  오디오 엠프를 넣은 것은 개인적인 욕심인데 스피커를 내장하기 위함이다. 엠프를 넣지 않았다면 사이즈도 더 작아지고 설계도 많이 쉬웠을 것이다. 가장 큰 걸림돌은 USB 포트와 이더넷 포트의 위치를 바꿀 수 없다는 것 이다. 아직 수정해야 할 부분이 많아서 먼저 설계했던 브라켓이 오기 전까지는 설계를 확정 할 수 없다.

[Arduino] - 디스플레이 오토피벗 디바이스 "피버시노" 파이썬 프로그램 업데이트 (피버시노 v.1.1.2)


"피벗이노"는 화면 방향을 전환할때 display.exe 라는 외부 프로그램을 사용해왔다.
문제는 핵심적인 기능을 담당하는 이 프로그램에 문제가 생기면 아무것도 하지 못한다.

이렇게 프로그램이 분산되어 있으면 결손, 손상, 수정에 어려움이있다.

MDSN에서 개발자들에게 제공해주는 DEVMODE를 이용하면 연결된 디스플레이 정보를 가져와 컨트롤 패널의 디스플레이 설정을 프로그래밍으로 만져볼 수 있다.

실제로 디스플레이와 관련된 응용프로그램이나 드라이브를 운용하기위한 드라이버를 만들때 사용된다.

DEVMODE를 이용해 rotateTO 함수를 만들었다.
  • rotateTO 함수
작동방식은 오토피벗 기능을 사용할 디스플레이 넘버를 지정해주고 모니터의 현재 방향에 따른 너비와 높이 값 교환 및 회전이다. 이 함수를 이용하면 display.exe에 의존하지 않아도 된다.

파이썬 에서는 win32api를 이용해 DEVMODE를 사용할수 있다.
win32api를 사용하려면 라이브러리가 있어야한다.

pip install pypiwin32

이 함수는 Rotating the Screen in C# 을 참고하여 작성되었다.
Mapping the APIs의  NativeMethods 클래스에 화면 방향에 따른 상수 값이 정해져 있다.
여기서 봐야 할 값들은 다음과 같다.
DMDO_DEFAULT = 0;
DMDO_90 = 1;
DMDO_180 = 2;
DMDO_270 = 3;
이 상수값들이 디스플레이의 회전 방향을 결정해준다.

# Changing Screen Orientation Programmatically
def rotateTO(rotateDic):
   display_num = 0 # display 1
   device = win32.EnumDisplayDevices(None,display_num)
   dm = win32.EnumDisplaySettings(device.DeviceName,win32con.ENUM_CURRENT_SETTINGS)
   if 0 != dm:
       dm.PelsWidth, dm.PelsHeight = dm.PelsHeight, dm.PelsWidth
       dm.DisplayOrientation = int(rotateDic/90)
       iRet = win32.ChangeDisplaySettings(dm, 0);
   if win32con.DISP_CHANGE_SUCCESSFUL != iRet:
       print("Failed(Already) to rotate "+str(rotateDic)+" degrees")
   return win32.ChangeDisplaySettingsEx(device.DeviceName,dm)
# this code referred from "https://docs.microsoft.com/ko-kr/previous-versions/ms812499(v=msdn.10)"
cs

위 함수는 rotateDic로 부터 값을 받아와 해당 방향으로 화면 방향을 바꿔준다.
rotateDic는 다음과 같다 "{"Right":"90", "Idle":"0", "Left":"270"}"
rotateTO는 피버시노 디바이스로 부터 밭은 시리얼 값을 rotateDic을 통해 각도(90, 0, 270)로 알려주는데 이 를 90으로 나누어 사용하면된다.

  • 점유율
다음은 시스템 자원을 얼마나 사용하는지 알아봤다.
일반적인 작업 환경에서 사용하는 디바이스이기 때문에 작업중인 프로그램들은 종료하지 않았다.

1. 피벗이노가 놀고 있을때

2. 피벗이노가 열일 할 때( 1분동안 마구 흔들었다.)


메모리 점유율은 빌드시 5.1MB 정도이고 CPU는 1~3% 정도이다.
실사용에서 1분동안 모니터를 마구 회전해서 사용하는 상황은 극히 드물기 때문에
컴퓨터 이용에 장애가되는 일은 발생하지 않는다.


  • 업데이트 버전
=====================================================
피버시노 v1.0
피버시노 v1.1
피버시노 v1.1.1
피버시노 v1.1.2
피버시노 v1.1.3

Comments

Popular posts from this blog

[POE] - 패스 오브 엑자일 획득키 F 의 사용법 (Path of Exile)

[AD보드] - 맥북 패널을 모니터로 만들기 ( LP154WP4-TLA1 )

[Arduino] - HC-06를 이용해 PC 와 Arduino 블루투스 연결