[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

[Python] - 블루투스 모듈 HC-06의 MAC 주소를 이용하여 통신 포트 찾기

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

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

[Raspberry Pi] - 라즈베리 파이에서 멀티미디어 감상에 적절한 비디오 세팅