윈도7 기반 서버 컴퓨터와 소켓 프로그래밍이 안될 때

공대생의 팁 2014. 11. 1. 23:36

 프로그래밍 언어로 소켓 프로그래밍을 하시는 분들이라면 보통 C의 경우 리눅스 서버와의 통신, Java의 경우 안드로이드 통신을 하시는 분들이 많으시리라 생각합니다.


 그런데 종종 Windows 기반의 컴퓨터를 서버로 하여 소켓 프로그래밍을 시도하려 하면 알 수 없는 이유로 통신이 안되거나 연결이 거부되는 경우가 발생하는 것을 보실 수 있습니다. 이는 컴퓨터의 방화벽 설정으로 인해 외부의 접속을 제한하기 때문인 경우가 많습니다.


 그렇다면 어떻게 하면 윈도 기반의 PC와 소켓 프로그래밍을 할 수 있는지 알아보도록 하겠습니다.


※본 포스팅은 Windows7 기반의 PC를 기준으로 작성되었습니다.


1. 시작메뉴를 선택하신 후 '방화벽'을 검색하시면 아래와 같은 화면을 보실 수 있습니다.

'고급 보안이 포함된 Windows 방화벽'을 선택합니다.



2. 창이 열린 것을 확인하시면 왼쪽 메뉴에서 '인바운드 규칙'을 선택하면 해당 컴퓨터에 접속할 수 있도록 허용된 프로그램들의 명단을 확인하실 수 있습니다.



3. 오른쪽 부분에서 '인바운드 규칙' -> '새 규칙...'을 실행합니다.



4. 새 인바운드 규칙 마법사 창을 확인하시면 규칙 종류로 포트(O)를 선택합니다.



5. 자신이 설정하고자 하는 소켓 통신 방식(TCP/UDP)을 선택하신 후 아래 부분에서 포트 사용 여부를 선택합니다.

특정 포트 번호만 사용하고 싶으신 분의 경우 '특정 로컬 포트'를 선택하신 후 포트번호를 입력합니다.



6. 자신의 컴퓨터가 접속한 모드에 따른 통신 여부를 선택합니다.



7. 자신이 확인할 수 있는 이름과 설명을 적으면 통신 설정이 완료됩니다.



이제 자신의 컴퓨터의 IP 주소와 접속 포트번호만 기억하시면 윈도 기반 서버 컴퓨터와 소켓 프로그래밍을 하실 수 있습니다.



300x250

데이터베이스 ER 다이어그램 작성 프로그램 - yED

공대생의 팁 2014. 10. 7. 13:30

 MySQL 등의 프로그램을 통해 데이터베이스를 제작할 때 전체 데이터베이스의 밑바탕을 짜는 작업으로 ER 다이어그램을 작성합니다. 보통 이 과정에서 그려지는 다이어그램의 모습을 더 구체적으로 그리고 싶으신 분들이 계시리라 생각합니다. 그러한 분들께 ER 다이어그램을 직접 작성할 수 있는 yED를 추천 해드립니다.

 

yED 프로그램 다운로드

http://www.yworks.com/en/products_yed_download.html







300x250

<Project name> does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare uses-library android.test.runner in its AndroidManifest.xml

 블로그에 올라와 있는 안드로이드 프로젝트 파일을 받은 후 이를 실행하기 위해 실행을 하려 했더니 다음과 같은 에러가 뜨면서 프로그램이 실행되지 않는 상황을 맟게 되었습니다.


 "<Project name> does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare uses-library android.test.runner in its AndroidManifest.xml"



이렇게 나오는 경우 다음과 같이 진행해 주시면 되겠습니다.



해당 프로젝트 폴더 위에 마우스 우클릭 -> Run As(또는 Debug As) -> 1 Android Application


다음과 같이 프로그램을 실행하면 정상적으로 동작되는 것을 확인하실 수 있습니다.


만약 위와 같은 방법으로 실행이 되지 않으신 분들은

Run As -> Run Configurations... 를 선택하신 후

동작 시킬 프로그램을 선택하신 후 수동으로 프로그램을 실행할 타겟을 선택합니다.

300x250

fedora 20 에서 virtualbox 설치가 안될 때

공대생의 팁 2014. 10. 5. 09:53

 한국에서 순수 리눅스를 사용하고 싶으신 분들은 꽤 많으시라 생각됩니다만 아직까지도 Active X 환경의 국내 인터넷의 현 상황을 지켜볼 땐 절대적으로 리눅스에 의지하는 것은 아직까지도 힘든 일이라 생각합니다.

 그러기 위해 리눅스 상에서 virtualbox를 설치하여 windows를 사용하시는 분들이 많으실 거라 생각합니다. 페도라를 사용하는 저 또한 virtualbox를 설치한 후 실행을 하려 했더니 다음과 같은 상콤한 오류가 뜨면서 작동이 되지 않는군요,







경고 표시의 내용을 읽어보자 하니 /etc/init.d/vboxdrv setup를 실행하라는 듯한 의미인 듯 합니다.

무언가 상황이 복잡해 보이는 상황이 펼쳐지는군요,


우선 해당 패키지를 설치한 후 진행하도록 합니다.


$ sudo yum install DKMS


 DKMS 패키지를 실행한 후 커널을 재설치 해보도록 합니다.


$ sudo /etc/init.d/vboxdrv setup


 여기까지 진행한 후 정상적으로 완료가 되시는 분이라면 재부팅후 virtualbox를 실행해 주시면 되겠습니다.


 그러나 이 단계에서 완료가 되지 않으신 분들의 경우 다음과 같은 화면을 맟닥트리게 될 것입니다.




 이러한 화면이 나오더라도 당황하지 마시고 다음과 같은 명령어를 입력해 봅니다.


$ sudo yum -y install kernel*


 위의 명령어를 입력하신 후 재부팅 하시면 드디어 다음과 같이 버추얼박스가 실행되는 것을 확인하실 수 있습니다.



300x250

[JAVA]윈도 CMD를 통해 자바 Command Line 명령어 활용하기

프로그래밍 팁 2014. 10. 4. 01:54

 자바로 프로그래밍을 하시는 분들이라면 많은 분들께서 eclipse를 통해 프로그램을 컴파일 하고 실행하실 겁니다. 아시는 분들이라면 아시겠지만 사실 eclipse는 자바를 좀 더 편하게 작업할 수 있게 해주는 IDE(통합 개발 환경)입니다. 자바를 처음 접하는 분들에게 마치 eclipse 자체가 자바인 것처럼 이해하셨던 분들도 많으셨으리라 생각합니다.

 그렇다면 아마 어떤 분들은 '그렇다면 eclipse를 사용하지 않고도 자바 프로그래밍이 가능하다는 건가?'라는 생각을 하시는 분도 계실겁니다. 정답은 '그렇다'입니다! 그것도 Windows 의 CMD(명령 프롬프트)만으로도 컴파일 및 실행이 된다는 것이지요!

 이번 포스팅에서는 윈도의 CMD를 활용하여 자바 프로그램을 간단하게 만들어보도록 하겠습니다.


※본 포스팅을 읽기 전에 자신의 컴퓨터에 자바 JDK가 설치되어있는지 확인합니다. 만약 설치가 되어있지 않다면 최신 버전의 JAVA JDK를 설치하도록 합니다.


http://www.oracle.com/technetwork/java/javase/downloads/index.html



 위의 사진과 같이 JAVA SE 다운로드 페이지가 나오면 왼쪽의 Java Platform (JDK) 를 선택 후 자신의 운영체제에 맞는 버전을 설치하면 된다.


1. 자신의 컴퓨터에 JDK가 설치되었다면 환경변수를 변경하에 JAVA 컴파일을 할 수 있도록 설정해줍니다. 먼저 자신의 컴퓨터에 JDK가 설치된 폴더로 이동한 후 bin 폴더 내의 javac가 있는 것을 확인합니다.



 JDK가 정상적으로 설치되었다면 다음과 같이 javac 파일을 확인하실 수 있습니다. JDK에서 기본설정된 폴더대로 설치하셨다면 C:\Program Files\Java\자신의 컴퓨터에 깔린 JDK의 버전(jdkX.X.X_XX)\bin


2.창의 윗부분을 오른쪽 클릭을 한 후 '주소 복사'를 클릭힙니다.



3. 컴퓨터에서 마우스 우측 클릭후 '속성'을 클릭합니다.



4. '고급 시스템 설정'을 클릭합니다.



5. 시스템 속성에서 '고급' 탭을 선택한 후 '환경 변수'를 클릭합니다.



6. 환경변수 창에서 시스템변수(S) 내에 Path를 더블클릭합니다.



7. 변수 값의 뒷부분에 다음 값을 추가합니다.

위의 과정에서 복사한 주소를 Ctrl+v로 붙여넣기 후 '\bin;'를 붙여줍니다.



※주의!!

 절대로 변수 값의 내용을 지우시면 안됩니다! 만약 실수로 변수 값을 덮어쓰셨다면 바로 취소 버튼을 누릅니다. 만약 기존의 환경변수를 덮어쓰기로 모두 삭제할 경우 연결된 프로그램들이 동작을 하지 못하게 되는 참사가 발생합니다!

 만약 실수로 덮어쓰기 후 확인 버튼을 눌러 변수가 지워지신 분들은 절대로 당황하지 마시고 제가 이전에 포스팅한 내용을 따라가며 원래 환경 변수값을 복구하시길 바랍니다.


[윈도7] 환경변수 path 삭제시 복구하는 방법 ← 클릭하시면 새창으로 이동합니다.


========================================================================================================

 여기까지 진행하셨다면 Windows의 CMD를 통한 자바 프로그래밍의 설정을 완료하였습니다. 이제부터 본격적으로 CMD를 통해 자바 프로그래밍을 진행해 보도록 하겠습니다.


8. 메모장을 열고 코드를 간단하게 작성합니다.



9. 작성한 코드를 .java 확장명으로 저장합니다.

여기서 주의할 점은 파일명은 반드시 public로 설정된 class의 명칭으로 하여야 합니다!



10. dir 명령어를 입력하여 java 파일이 생성된 것을 확인합니다.



11. 명령어를 입력하여 java 파일을 컴파일 합니다. 컴파일 명령어는 다음과 같이 입력합니다.


> javac 파일명.java



컴파일이 완료되면 위의 그림에서 보는 바와 같이 class 파일이 생성된 것을 확인할 수 있습니다.


12. 생성된 class 파일을 실행합니다. 실행 명령어는 다음과 같이 입력합니다.


> java 클래스명



class 파일을 실행하면 프로그램일 정상적으로 실행되고 있는 것을 확인할 수 있다.

다음은 커맨드 라인으로 입력된 값을 그대로 출력하는 프로그램을 작성해 보겠습니다.


13. Command Line을 통해 입력된 값들을 처리하는 부분을 추가합니다.

Command Line에 추가로 입력된 값들은 main 함수의 인자인 String 배열 변수인 args를 통해 프로그램에 적용됩니다.


14. 위에서 진행했던 과정대로 컴파일한 후 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.



위에서 입력된 값은 다음과 같은 구성을 하고 있습니다.


>java 클래스명 args[0] args[1] args[2] .....


이와 같이 입력된 String 값들이 main의 args 인자로 출력할 수 있게 됨을 확인하실 수 있습니다.

300x250

MediaPlayer, VideoView 재생이 끝났을 때 이벤트 처리하기 (setOnCompletionListener)

public void setOnCompletionListener (MediaPlayer.OnCompletionListener listener)


 안드로이드를 통해 동영상이나 mp3 파일 등을 재생한 후 해당 미디어를 모두 재생이 되었을 때 설정하는 이벤트입니다. 사운드를 재생하는 MediaPlayer라던가 동영상을 재생하는 VideoView에서 사용할 수 있습니다.


 함수의 인자로 OnCompletionListener()가 사용됩니다. 이 함수는 인터페이스로 new 로 함수를 새로 선언함으로서 적용할 수 있습니다.


 아래는 MediaPlayer에 setOnCompletionListener 함수를 적용한 예제입니다. 음악이 모두 재생된 후 이벤트가 정상적으로 발생되는 것을 확인하실 수 있습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
MediaPlayer mp;
mp = MediaPlayer.create(this, R.raw.melody);
mp.start();
mp.setOnCompletionListener(new OnCompletionListener(){
 
        @Override
        public void onCompletion(MediaPlayer mp) {
            // TODO Auto-generated method stub
            l1.setBackgroundColor(Color.TRANSPARENT);
            l2.setBackgroundColor(Color.TRANSPARENT);
            l3.setBackgroundColor(Color.TRANSPARENT);
            pb1.setVisibility(View.INVISIBLE);
            pb2.setVisibility(View.INVISIBLE);
            pb3.setVisibility(View.INVISIBLE);
            tv4.setText("");
            tag = 0;
        }
        
    });


300x250

크롬으로 티스토리 블로그 구조 파악하기

공대생의 팁 2014. 10. 1. 22:21

 티스토리 블로그의 가장 큰 매력은 바로 자신만의 디자인을 가진 블로그를 만들 수 있다는 점이 있지요. 저 또한 이런 매력때문에 제 블로그를 티스토리에 차리게 되었기도 하지요. 그러나 이제 갓 블로그를 시작하는 초보 분들이라면 이러한 티스토리의 장접이 단점이 되는 경우가 발생합니다. 기본적으로 HTML과 CSS의 동작 방식을 이해하고 이를 수정할 줄 알아야 멋진 블로그를 만들 수 있기 때문이기도 하지요.

 인터넷을 검색하며 어떻게든 스킨을 이것 저것 수정해 나가면 코드의 구성을 어느정도 까지는 이해하실 수 있는 단계에 도달하실 것입니다. 하지만 초보자에게 있어 이러한 소스의 수정도 한계가 있는법!

 이번에 소개해드리는 것은 크롬의 기능을 활용하여 블로그의 디자인을 보면서 해당 디자인이 코드로 어떤 방식으로 구현했는지를 확인할 수 있는 방법입니다.


 보시는 화면은 제가 티스토리를 처음 시작할 때 처음으로 작성한 글입니다.

 자신이 원하는 화면을 선택하신 후 오른쪽 버튼을 클릭하신 후 '요소 검사'를 클릭합니다.



 그렇게 하면 다음과 같은 화면을 보실 수 있습니다.

 위쪽의 회면은 자신의 블로그이고요 아랫쪽 왼쪽 부분은 skin.html, 아랫쪽 오른쪽 부분은 style.css 파일입니다.

 skin.html에서 자신이 원하는 영역을 클릭하면 위쪽 화면에서 선택한 부분이 어느 영역인지를 표시해 주며

 왼쪽 윗부분에서는 해당 부분의 명칭과 픽셀 크기를 나타냅니다.

 그리고 style.css에서는 선택한 부분이 적용된 코드 부분을 함께 볼 수 있습니다.


 위의 방법을 사용하여 자신의 코드를 수정해서 멋진 사이트를 만들어 보도록 합니다!

300x250

fedora 바탕화면에 파이어폭스 바로가기 추가하기

공대생의 팁 2014. 9. 29. 16:04

 평소 우분투에만 익숙한 상황에서 막무가내로 페도라를 접하니 불편한 점이 한 두가지가 아니군요. 페도라 자체도 상당히 큰 매력을 가지고 있는 운영체제 입니다만 같은 리눅스인 우분투에 비하면 사용자 수가 턱없이 적다보니 문제점에 관한 자세한 피드백을 얻기 힘든 점도 참으로 안타까운 점 중 하나이지요. 특히 페도라의 바탕화면은 초기 설정부터 쓰지 않는 것으로 되어있기 때문에 바탕화면을 제대로 쓰기 위해서는 gnome-tweak-tool을 설치해서 바탕화면을 쓸 수 있게 해줘야 한다는 것이지요.


 이번 포스팅에서는 바탕화면 사용을 해금시킨 이후에서 부터 진행하며 바탕화면에 바로가기를 등록하는 것을 목표로 하겠습니다.


1.우선 Super키(Windows 키)를 누른 후 왼쪽 즐겨찾기 메뉴에서 파일을 실행하거나 검색창에 'file'을 입력하신 후 창을 엽니다.



2. 다음과 같이 파일 창을 연 후 장치에서 '컴퓨터'를 선택합니다.



3. /usr/share/applications 폴더로 이동하면 설치된 프로그램 목록을 확인하실 수 있습니다.



4. 바탕화면에 바로가기를 설정하고자 하는 프로그램을 선택하신 후 오른쪽 마우스 클릭 후 '다른 위치로 복사'를 클릭합니다. 그 다음 바탕화면 폴더로 이동하신 후 선택(S) 버튼을 누릅니다.



5. 다음과 같아 바탕화면에 Firefox와 Google Chrome의 바로가기 아이콘이 생성된 것을 확인하실 수 있습니다.




300x250

안드로이드 SDK 업데이트 후 이클립스에서 실행이 안될 때(Android ADT 재설치)

 모처럼 안드로이드 SDK Manager를 실행시켜 업그레이드를 시켜준 후 이클립스를 실행시켰더니 다음과 같이 빨간 줄들이 난무하면서 실행이 되지를 않는군요.


 지금까지 열심히 만들어왔던 애플리케이션 프로젝트가 이렇게 갑작스럽게 실행조차 되지 않는다면 상당히 당황스러울 것이라 생각합니다. 보통 일반적으로는 이클립스를 업데이트 하는 것 만으로 해결이 되는 경우가 많습니다.


이클립스를 업데이트 하는 방법은 다음과 같습니다.

Menu->Help->Check for Updates


 그런데 종종 이렇게 이클립스를 업데이트 시켰음에도 불구하고 위의 화면과 같이 계속 먹통을 일으키는 경우가 발생합니다. 이 경우 이클립스에 설치되었던 Android ADT를 완전히 삭제한 후 다시 설치해야 합니다.



1. 메뉴에서 Help->Install New Software... 를 실행합니다.


2. 다음과 같은 화면이 나왔을 경우 오른쪽 윗 부분의 Add를 클릭합니다.



3. Name은 자신이 원하는 대로 작성하셔도 됩니다.

Location에는 다음과 같은 주소를 입력합니다.

https://dl-ssl.google.com/android/eclipse/

입력을 마친 후 OK 버튼을 클릭합니다.



4. 정상적으로 수행되었을 경우 위와 같이 Developer Tools 메뉴가 나타납니다.

확인후 위의 그림과 같이 빨간색으로 표시한 'already installed'를 클릭합니다.



5. 현재 이클립스에 설치된 소프트웨어들의 목록이 나타납니다.

Id 부분에서 안드로이드와 관련된 소프트웨어를 모두 선택하신 후 Uninstall을 클릭합니다.



6. 목록들을 다시 한 번 확인한 후 Finish를 눌러 모두 삭제해줍니다.



7. Yes를 누른 후 이클립스를 다시 실행합니다.



8. 다시 이클립스를 실행한 후 Help->Install New Software를 클릭한 후 위에서 수행하였던 Add버튼을 누른 후 안드로이드 ADT를 다시 설치합니다.


설치를 완료하면 아래와 같이 프로그램이 정상적으로 수행되고 있음을 확인하실 수 있습니다.




300x250

fedora 20에 Adobe Flash Player 설치하기

공대생의 팁 2014. 9. 21. 01:09

 페도라를 처음 접하게 되면서 불편한 점이 하나 있다면 인터넷을 서핑할 때 흔히 쓰이는 플래시가 처음부터 설치가 되어있지 않아 플래시 기반의 사이트가 깨져서 보이는 등의 불편함이 많습니다. 특히 플래시 기반으로 업로드를 하는 자료를 올리는 것도 쉽지 않습니다.


 다음은 페도라에 Adobe Flash Player를 설치하는 방법입니다.

 ※본 글은 fedora 20 32bit 환경의 컴퓨터에서 동작을 확인하였습니다.


1. 터미널을 얻어 root 권한을 얻습니다. 다음 중 하나만 쓰셔도 가능합니다.

$ su -
$ sudo -s

$ sudo -i


2. yum rpm에 저장소를 만듭니다.

32비트

# rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-i386-1.0-1.noarch.rpm


64비트

# rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-x86_64-1.0-1.noarch.rpm


3. yum을 활용하여 Adobe Flash Player를 설치합니다.

# yum install flash-plugin


4. Adobe Flash Player가 정상적으로 설치되었는지 확인합니다.

파이어폭스의 경우 다음을 주소창에 입력하시면 됩니다.

about:plugins





출저 : http://www.cyberciti.biz/faq/fedora-linux-1920-install-adobe-flash-player/

300x250

[윈도7] 환경변수 path 삭제시 복구하는 방법

공대생의 팁 2014. 9. 15. 21:41

 환경변수를 다루던 도중 실수로 전체 변수들을 덮어 씌우는 바람에 컴퓨터가 잠시 먹통이 된 적이 있습니다. 일단 환경변수가 지워져 버리면 JAVA가 실행이 되지를 않고 이것 저것 불편한게 많아져 버리기 때문에 순간 당황하시는 분들도 많으실 것이라 생각합니다.


 하지만 다시 복구할 수 있는 방법이 있으니 가슴을 다시 가다듬고 차근차근 해결해 보도록 합니다.


1. 컴퓨터에서 마우스 우측 클릭후 '속성'을 클릭합니다.



2. '고급 시스템 설정'을 클릭합니다.



3. 시스템 속성에서 '고급' 탭을 선택한 후 '환경 변수'를 클릭합니다.



4. 환경변수 창에서 시스템변수(S) 내에 Path를 더블클릭합니다.



5. 변수 값에 다음 값을 뒷부분에 추가합니다.

C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;

(64비트 사용자는 위의 숫자를 64로 바꾸시면 될 듯..)



6. 시작버튼을 클릭후 CMD를 검색하여 실행합니다.




7. 명령어로 regedit를 입력후 엔터키를 누릅니다.



다음과 같으 레지스트리 편집기 창을 보실 수 있습니다.



8. 다음과 같은 폴더 경로를 따라간다.

 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Session Manager\Enviroment\Path

해당 경로의 폴더를 열면 위의 화면과 같이 Path 폴더가 보일 것입니다. 해당 Path를 더블클릭 하면



위와 같이 삭제되기 전의 환경변수가 저장되어 있음을 확인하실 수 있습니다.

다시 5번 과정으로 돌아가 삭제되기 전의 환경변수를 입력하시면 이전의 환경변수로 다시 복원하실 수 있습니다.



참고 사이트 : http://blog.naver.com/tomato100vs1/140172845632

300x250

[Tiva] Tiva 기반 MCU로 블루투스 모듈을 활용하여 UART 통신하기

임베디드/TI 2014. 9. 13. 02:04

 MCU를 활용하여 다른 기기와의 통신으로 UART를 많이 사용할 겁니다. 이러한 MCU에 블루투스 모듈을 사용하면 간단한 설정으로 무선으로 UART를 활용할 수 있다는 점은 상당히 매력적이지요.

 다만 아쉬운 점이라면 블루투스 모듈을 사용시 AT 커맨드 등 기본적인 활용 지식이 없는 상태에서 입문하기에는 공부할 것이 많다는 점이 블루투스에 입문하는데 장벽이 되고 있기도 하지요.


 아래의 코드는 MCU와 블루투스 모듈이 연결되어 있을 때 해당 코드를 활용하면 바로 다른 기기와 연결모드에 진입할 수 있습니다. 이후 다른 기기와 블루투스를 연결하면 UART 통신을 통해 블루투스와 연결된 기기간에 통신을 할 수 있게 됩니다.


 해당 코드는 TI사의 TM4C123GH6PM MCU를 활용하였으며 소스코드는 TI사의 Tivaware 라이브러리 내의 소스코드를 활용하였습니다. 블루투스 모듈은 FirmTech 사의 FB155BC를 사용하였음을 알립니다.


※UART0은 PC와 연결되어 있으며 UART7은 블루투스 모듈과 연결되어 있습니다.

※블루투스 모듈의 모드는 AT COMMAND를 받는 모드로 설정되어 있습니다.

※블루투스 모듈에 UART로 'AT+BTSCAN'을 전송하면 블루투스 모듈이 다른 기기의 연결을 기다리게 됩니다.




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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/adc.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
 
#ifdef DEBUG
void
__error__(char *pcFilename, uint32_t ui32Line)
{
}
#endif
 
void ConfigureUART(void) {
    //
    // Enable the GPIO Peripheral used by the UART.
    //
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
 
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART7);
 
    //
    // Configure GPIO Pins for UART mode.
    //
    ROM_GPIOPinConfigure(GPIO_PA0_U0RX);
    ROM_GPIOPinConfigure(GPIO_PA1_U0TX);
    ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
    ROM_GPIOPinConfigure(GPIO_PE0_U7RX);
    ROM_GPIOPinConfigure(GPIO_PE1_U7TX);
    ROM_GPIOPinTypeUART(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1);
 
    //
    // Use the internal 16MHz oscillator as the UART clock source.
    //
    UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);
    
    UARTClockSourceSet(UART7_BASE, UART_CLOCK_PIOSC);
 
    //
    // Initialize the UART for console I/O.
    //
    ROM_UARTConfigSetExpClk(UART0_BASE, ROM_SysCtlClockGet(), 115200,
            (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
            UART_CONFIG_PAR_NONE));
    ROM_UARTConfigSetExpClk(UART7_BASE, ROM_SysCtlClockGet(), 9600,
            (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
            UART_CONFIG_PAR_NONE));
}
 
void findDevice() {
    UARTCharPut(UART7_BASE, 'A');
    UARTCharPut(UART7_BASE, 'T');
    UARTCharPut(UART7_BASE, '+');
    UARTCharPut(UART7_BASE, 'B');
    UARTCharPut(UART7_BASE, 'T');
    UARTCharPut(UART7_BASE, 'S');
    UARTCharPut(UART7_BASE, 'C');
    UARTCharPut(UART7_BASE, 'A');
    UARTCharPut(UART7_BASE, 'N');
    UARTCharPut(UART7_BASE, 0x0D);
}
 
void AT() {
    UARTCharPut(UART7_BASE, 'A');
    UARTCharPut(UART7_BASE, 'T');
    UARTCharPut(UART7_BASE, 0x0D);
    UARTCharPut(UART0_BASE, '0');
}
 
void UARTIntHandler() {
    unsigned char get;
    get = UARTCharGet(UART7_BASE);
    if (get == '\r') {
        UARTCharPut(UART0_BASE, '\n');
        UARTCharPut(UART0_BASE, '\r');
    } else
        UARTCharPut(UART0_BASE, get);
}
 
void InsertUART2() {
    unsigned char get;
    get = UARTCharGet(UART0_BASE);
    
    if (get == '\r') {
        UARTCharPut(UART7_BASE, '\r');
        UARTCharPut(UART7_BASE, '\n');
    } else
        UARTCharPut(UART7_BASE, get);
}
 
void SendString(char *str) {
    while (*str) {
        UARTCharPut(UART7_BASE, *str);
        SysCtlDelay(SysCtlClockGet() / 100);
        str++;
    }
    
}
 
int main(void) {
    ROM_FPULazyStackingEnable();
 
    //
    // Set the clocking to run directly from the crystal.
    //
    ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
    SYSCTL_XTAL_16MHZ);
 
    //
    // Enable the GPIO port that is used for the on-board LED.
    //
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
 
    //
    // Enable the GPIO pins for the LED (PF2 & PF3).
    //
    ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2);
 
    //
    // Initialize the UART.
    //
    ConfigureUART();
 
    IntMasterEnable();
 
    IntEnable(79);
    UARTIntEnable(UART7_BASE, UART_INT_RX | UART_INT_RT);
    UARTIntRegister(UART7_BASE, UARTIntHandler);
 
    IntEnable(21);
    UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT);
    UARTIntRegister(UART0_BASE, InsertUART2);
 
    SysCtlDelay(SysCtlClockGet() / 4);
    findDevice();
 
    while (1) {
    
    UARTCharPut(UART7_BASE, 'H');
    UARTCharPut(UART7_BASE, 'e');
    UARTCharPut(UART7_BASE, 'l');
    UARTCharPut(UART7_BASE, 'l');
    UARTCharPut(UART7_BASE, 'o');
    UARTCharPut(UART7_BASE, ',');
    UARTCharPut(UART7_BASE, 'W');
    UARTCharPut(UART7_BASE, 'o');
    UARTCharPut(UART7_BASE, 'r');
    UARTCharPut(UART7_BASE, 'l');
    UARTCharPut(UART7_BASE, 'd');
    UARTCharPut(UART7_BASE, '!');
    UARTCharPut(UART7_BASE, '\n');
    UARTCharPut(UART7_BASE, '\r');
    SysCtlDelay(SysCtlClockGet());
    
    }
}
 


300x250