티스토리 뷰

메뉴 방식 사용자 인터페이스는 직관적인 인터페이스를 가지므로 굳이 사용법을 배우지 않더라도 쉽게 사용할 수 있다.

그러나, 원하는 기능을 수행하기 위해서는 여러 단계를 거쳐야 하고, 또다른 기능을 수행하기 위해서는 최상위 단계까지 나온 다음 새로운 단계로 들어가야 한다.  즉, 사용법은 쉽지만 절차가 복잡하다는 단점이 있다.

이와 다르게 이번에 설명할 CLI 기능은 명령어 방식을 적용하여 필요한 기능을 즉시 수행할 수 있도록 해준다.  특히 임베디드 시스템의 개발 단계에서 필요한 기능을 시험할 때 유용하게 사용할 수 있으므로 알아두면 도움이 될것 같다.

CLI의 단점은 자주 사용하는 명령어는 문제 없지만 가끔씩 사용하는 명령어는 사용법을 기억하지 못하여 문서를 만들어 두거나 소스를 분석해야 하는 경우가 있다.  이러한 단점을 극복하기 위하여 사용법에 대한 설명을 CLI 명령어로 제공하면 어느 정도 해결되기도 한다.

그럼, 본격적으로 CLI 기능을 구현해 보기로 하겠다.

첫번째로 할 일은 CLI 기능을 수행하기 위해 기본이 되는 CLI 구조체를 정의하는 것이다.

cmd_name은 명령어에 해당 되는 문자열 포인터이다.

cmd_help는 명령어가 어떤 용도로 사용되는 것인지 간단한 도움을 줄 수 있는 문자열 포인터이다.

cli_func는 명령어를 입력했을 때 수행되어야 하는 함수에 대한 포인터이다.

이 구조체를 이용하여 다음과 같은 명령어 테이블을 만든다.

메뉴 방식 인터페이스에서 사용했던 항목들을 테이블로 만들어 보았다.  또한 각 명령어에 대한 사용법을 알려주기 위한 help 항목도 추가 하였다.

num_commands는 테이블에 등록된 명령어의 개수를 저장해 둔다.

run_cli() 함수에서는 사용자의 입력을 받아서 15번줄에 있는것처럼 CLI 테이블에 있는 명령어와 비교하여 테이블안에서 찾으면 해당 함수를 실행하고, 만일 테이블안에 사용자가 입력한 명령어가 없으면 그 사실을 사용자에게 알려주고 사용 가능한 명령어가 어떤 것이 있는지 표시해 준다.

do_help() 함수를 이용하여 사용 가능한 명령어와 그 명령어가 어떤 작업을 수행하는지 간단한 설명을 보여주도록 한다.

위의 그림처럼 명령어에 대한 설명을 보기 위하여 help 명령을 수행한 결과와, toys라는 명령을 입력하여 그 결과가 제대로 수행되는 것을 확인할 수 있다.

이처럼 필요한 기능에 따라 각각의 명령어를 정의하여 사용할 수도 있겠지만, 하나의 명령어 안에서 다시 세부 명령을 사용하게 되면 좀더 프로그램을 구조적으로 개발할수도 있을 것이다.

예를 들어, LED를 켜고 끄는 기능을 수행하기 위하여 ledon, ledoff 처럼 명령어를 따로 만들수도 있겠지만 led라는 명령어 하나를 만들고 그 안에서 다시 on, off에 해당되는 옵션을 가지게 하여 led on, led off 처럼 할 수 있을것이다.

books라는 명령어를 실행하였을 때 다시 그 안에서 별도의 세부 항목을 선택할 수 있도록 만든 코드이다.

위의 그림처럼 단순히 books라고 입력할 경우, 세부 옵션을 표시해 주도록 하였고, book comic이라고 입력한 경우 비로소 comic에 해당되는 명령이 실행 되는 것을 볼 수 있다.


이 정도의 기능만으로도 충분히 사용할 수 있겠지만, 사용자 배려 차원에서 조금만 더 코드를 보완해 보기로 하겠다.

사용 가능한 명령어를 보기 위하여 help 명령을 쳤을때 명령어가 테이블에 등록된 순서대로 보여지게 된다.  이 부분을 알파벳 순서로 sorting 하여 보여주면 사용자가 좀더 필요한 명령어를 쉽게 찾을수 있을 것이다.

위의 코드와 같이 수정한 다음 help 명령을 수행하면 명령어들이 알파벳 오름차순으로 표시된다.


ui_cli.zip


'심화' 카테고리의 다른 글

User Interface - CLI2  (0) 2017.07.09
User Interface - 메뉴 방식  (0) 2017.07.08
User Interface - argc, argv  (0) 2017.07.07
User Interface - UART 문자열 입력  (0) 2017.06.29
User Interface - UART 특수키 처리  (0) 2017.06.24
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함