3/20/2016

UML(The Unified Modeling Language)

UML(The Unified Modeling Language) 이라고 하는데, 사실 오래전에 한번 보고 그 이후로 다루지 않아 이부분에 관심을 다시 가지게 되어 관련부분을 정리한다.

UML은 Class나 구조체등을 구조를 연결하여 Program의 구조를 쉽게 이해하도록 만든 도식도 이며, 이를 다루는 프로그램은 많다.

  http://www.nextree.co.kr/p6753/

  https://www.uml-diagrams.org/class-diagrams-overview.html
  https://www.uml-diagrams.org/sequence-diagrams.html

  http://infinitejava.tistory.com/61


Microsoft Office의 Visio Program


Visual Paradigm
  https://www.visual-paradigm.com/solution/freeumltool/

UML 추천관련자료

umlet
starUML: 유료
gliffy

  http://www.gamecodi.com/board/zboard.php?id=GAMECODI_Talkdev&no=4463


PlantUML

  http://plantuml.com/eclipse
  http://plantuml.com/sitemap

  http://www.nextree.co.kr/p6753/

Doxygen


Graphviz
  https://graphviz.gitlab.io/about/
  https://developers.google.com/chart/image/docs/gallery/graphviz?csw=1
  https://developers.google.com/chart/interactive/docs/gallery/histogram
  https://developers.google.com/chart/interactive/docs/gallery

CTAGS Website
  https://www.gnu.org/software/global/

Javascript UML/Chart
  https://gojs.net/latest/samples/flowchart.html







3/10/2016

DM368-AUDIO 수정사항

1. KERNEL 

DM368 관련 Audio 를 비롯하여, 관련설정 부분을 간단히 요약한다. 
관련 기초내용들은 전부생략한다.

ALSA Flow 간단히 설명 
  https://ahyuo79.blogspot.com/2016/02/audio-alsa-3-kernel-playback-and-capture.html


1.1 KERNEL CONFIG

DM368인 경우, 외부 AUDIO CODEC(ADC,DAC)로 변경을 할 경우, McBSP의 Driver가 변경이 된다.
잘못이해한 부분은 VOICE CODEC (ADC와 DAC를 비롯하여 G.711 , AAC 기능까지 전부 한 HW로 합쳐진줄 오해했다, 그럼 그렇지) 

현재 TI에서 제공하는 VOICE CODEC은 MIC는 MONO 이므로, 이부분은 추후 수정하도록해야함

$ cd ~/dm368/mt5/Source/dvsdk_ipnctools/ipnc_psp_03_21_00_04/kernel
$ vi ./arch/arm/configs/davinci_dm368_ipnc_ubifs_defconfig 

CONFIG_SND_SOC=y
CONFIG_SND_DAVINCI_SOC=y
CONFIG_SND_DAVINCI_SOC_VCIF=y
CONFIG_SND_DAVINCI_SOC_EVM=y
# CONFIG_SND_DM365_AIC3X_CODEC is not set
CONFIG_SND_DM365_VOICE_CODEC=y
CONFIG_SND_SOC_I2C_AND_SPI=y
# CONFIG_SND_SOC_ALL_CODECS is not set
CONFIG_SND_SOC_CQ0093VC=y

// 추가사항 (AIC3100)
    CONFIG_SND_DM365_AIC3X_CODEC,
    CONFIG_SND_DAVINCI_SOC_I2S,
    CONFIG_SND_SOC_TLV320AIC3X
 
// 제거사항 (VOICE CODEC)
     CONFIG_DAVINCI_MCBSP
     CONFIG_SND_DAVINCI_SOC_VCIF
     CONFIG_SND_DM365_VOICE_CODEC
     CONFIG_SND_SOC_CQ0093VC


1.2 AIC3100 driver 수정

DM368에 AIC3x는 Driver는 제공하지만, Register Map 차이가 많이나서 수정함
AIC3100 Driver는 인터넷에 tlv320aic3100.c는 있지만  i2c regmap이 필요
현재 AIC3x에서 수정하고 수정, 추후 시간여유가 있다면, aic3100.c로 수정하고 추가.

$ vi ./arch/arm/mach-davinci/board-dm368-ipnc.c           // Kernle 소스 수정, 61 Reset
                                                                           //I2C Device 등록 AIC3100 

$ vi ./arch/arm/mach-davinci/dm365.c      
$ vi ./arch/arm/mach-davinci/mcbsp.c      MCBSP  //CONFIG_DAVINCI_MCBSP
$ vi ./sound/soc/davinci/davinci-i2s.c       MCBSP  //CONFIG_SND_DAVINCI_SOC_I2S 

$ vi ./sound/soc/davinci/davinci-evm.c    // I2C driver 등록  수정    AUDIO_FORMAT 변경
$ vi ./sound/soc/codecs/tlv320aic3x.c     // AIC3100 변경 


2. APP 관련 수정사항

DM368 IPNC에서 Application에서 Kernel의 Device를 Control하는 Main Application은 AV Server라는 프로그램이다.  
이 APP은 기본적으로 Audio 및 Video , 및 기타기능를 모두 조절하므로, Driver를 Porting 해서 Driver를 검증을 완료하고 문제가 발생했다면, 
그 다음에 봐야 할 부분이, AV Server이므로 Debug를 해야 할 포인트와 관련부분을 기억해야겠다.

관련메뉴얼은 appropho에서 제공을 하고 있다.

2.1 AV SERVER-AUDIO-DEBUG 

$ vi ./av_capture/application/ipnc/av_server/inc/avserver_debug.h
                      //#define AVSERVER_DEBUG_AUDIO_THR  해제 

$ vi ./av_capture/framework/alg/inc/alg_audEncDec.h 
                      // Audio Encode Decode Debug을 담당 AAC와 G.711 
                      //#define ALG_AUD_ENC_DEBUG  해제 
                      //#define ALG_AUD_INP_FILE_DUMP_DEBUG  audioInp.pcm 파일 생성 
                      //#define ALG_AUD_ENC_FILE_DUMP_DEBUG  audioOut.aac 파일 생성 

$ vi ./av_capture/framework/drv/usermod/src/drv_audio.c   
                      // Audio ALSA API Interface 부분 Debuging 
                      //#define DRV_AUDIO_DEBUG 해제하면됨 


2.2 AV SERVER-AUDIO 

각 AV Server Audio 부분을 수정하여 검증 및 테스트를 진행하도록 한다. 

$ vi ./av_capture/application/ipnc/av_server/src/audio/audioThr.c                 
                      // G.711 and AAC   , avserver.h->avserver_debug.h 포함 
                      //#define NUM_CHANNELS      (1->2)   수정 ,     
                      // 위와 같이 수정시 RTSP의 SDP부분 수정요구 Channel? or Mono 녹음

$ vi ./av_capture/framework/drv/usermod/src/drv_audio.c   
                       // ALSA Interface  API open 및 설정 (parameter)
                      - 아래와 같이 Serial에서 Capture debug , Encoding 상태시  
                      # cat /proc/asound/card0/pcm0c/sub0/status 
                      # cat /proc/asound/card0/pcm0c/sub0/sw_params
                      # cat /proc/asound/card0/pcm0c/sub0/hw_params 

$ vi ./av_capture/framework/alg/src/alg_audEnc.c  
                      //  AAC or G.711 설정      ALG_AUD_CODEC_AAC 

  • Motion Detection과 관련부분 
DM368에서 제공하는 Motion Detection 기능이며, 관련 세부사항은 생략 
$ vi ./av_capture/application/ipnc/av_server/src/video/videoMotionThr.c

$ vi ./av_capture/framework/alg/src/alg_motionDetect.c 

$ vi ipnc_app/sys_server/src/proc_alarm.c  
                      //id_motion_sem , Semaphore 1729 initialized.  

$ grep -r DRV_gpioSetMode  
                      // GPIO 관련부분 검색 


  • Audio 부분 수정포인트 
  http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/252454/888321
  https://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/t/252454


3.  How To TEST 

테스트 방법은 ALSA의 Tools을 이용하여 간단하게 테스트를 진행 

3.1 ALSA AUDIO TEST

초반에 Audio Driver는 수정완료 한 후, 아래와 같이 ALSA에서 제공하는 프로그램으로 TEST

  • 문제점 
현재의 문제점은 Mono로 Capture가 진행하고, Playback을 했을때, 진행이 되어야한다.
하지만 진행이 되지 않는다. 이 부분 추후 진행
**아래의 TEST 하기전에 반드시 av_server를 사전에 차단하고 실행해야함.

 
$ arecord -f S16_LE -r48000 -c 2  -d 10 /root/test.wav     // CAPTURE 

$ aplay  /root/test.wav    //PLAYBACK 

간단하게 PCM S16_LE format으로 Sample rate를 정해서 저장 


3.2  RTSP AUDIO TEST 

RTP로 H.264 or MPEG4를 전송을 한다, 이때, Audio 부분을 포함하기에 이부분을 Web에서 설정만 해주면 제대로 동작을 해야한다.

만약 동작하지 않는다면 AV Server Debug 및 Driver TEST를 다시 진행 

Web->Audio->Enable Audio 설정 및  AAC-LC로 변경, 모드, Samplerate 및 Bitrate 변경.

Live Video 에서 Audio 체크 후 확인 or VLC에서 rtsp로 확인


4. 문제점 
                                     
현재 Codec Driver 문제로 인하여, av server의 오 동작이 발생하며, 추후 시간이 있다면,이 부분을 수정한다.  
이 부분은 데모수준으로 끝내며, 현재 내일이 아니므로 추후에 다시 보도록하자 

3/09/2016

DM368 IPNC-MT5 관련정리

1. DM368 IPNC-MT  관련 파일 정리 
  • dm3xx_sd_boot-6.1.zip                                 // 이전 참좀  
  • GUI_VideoPlayer_SDK_V2.2.0.0.exe                  //  현재 사용안함  
  • ImageTuningTool_DM36x_V2.1.0.zip                //  현재 사용안함  
  • Release_Notes_IPNC_DM36x.pdf                     //  Release Note  
  • UserGuide_IPNC_RDK_DM36x.pdf                   //  UserGuide 
  • IPNC_RDK_DM36x_V5.1.0-Linux-x86-Install.bin  //   RDK 

1.1 DM368IPNC-MT5 RDK 구성

   
     IPNC_RDK_DM36x_Version5.0.0.tar.gz
   
     상위 RDK 파일은 아래와 같은 구성존재하며 개별설치.
  • Appro_IPNC_RDK_DM36x_v5.0.0.0.tar.gz          //av_capture - 2A and AEW lib 
  • OpenSrc_IPNC_RDK_DM36x_v5.0.0.0.tar.gz    //ipnc_app & file system , kernel , uboot 포함 
  • PrivateTI_IPNC_RDK_DM36x_v5.0.0.0-Linux-x86-Install.bin   //TI DVSDK 


            * 참고사항
            TI-DVSDK  ( CROSS COMPILE 포함)
            http://www.ti.com/product/tms320dm368/toolssoftware


2. DM368 RDK 전체구조

  • DM368 IPNC MT RDK 전체 구조 
     TI SDK 와 APPROPHO에서 제공하는 IPNC APP 제공.


├── Binaries
│   └── dm368   // 기본 Image들  
│                ├── diagnostic_ipnc_dm368.bin      // 진단 BIN .(CAMERA TEST 및 각 DEVICE TEST, CCS UTIL 참좀) 
│                │
│                ├── ipnc_dm368_ubifs                  //  FILE SYTEM BIN
│                ├── nandwriter_ipnc_dm368.out     //  CCS NANDWRITER 실행파일
│                │
│                │      //LINUX 관련 Image들 
│                ├── u-boot-1.3.4-dm368_ipnc.bin     
│                ├── uImage_ipnc_dm368
│                ├── ubl_432arm_340ddr_ipnc_dm368.bin
│                └── ubl_486arm_360ddr_ipnc_dm368.bin
│  
│                        // 반드시 참고 AV-SERVER 및 기타 문서 
├── Collaterals    // DM368 IPNC-MT5 관련 문서  
│  
│  
├── Hardware     // 관련 HW문서 
│  
├── Source        //  관련 전체소스   
│   │
│   ├── dvsdk_ipnctools   //TI-DVSDK (KERNEL 및 UBOOT, CODEC )    
│   │   │ 
│   │   ├── codec-engine_2_26_02_11  
│   │   ├── codecs-dm365
│   │   ├── dm365mm-module_01_00_03
│   │   ├── dvsdk_docs
│   │   ├── framework-components_2_26_00_01
│   │   ├── xdctools_3_16_03_36
│   │   ├── linuxutils_2_26_02_05
│   │   ├── xdais_6_26_01_03
│   │   │
│   │   ├── linux-devkit                //CROSS-COMPILER 
│   │   │   
│   │   │                                     // UBOOT, KERNEL (상위 OpenSrc_IPNC_RDK에 포함)
│   │   └── ipnc_psp_03_21_00_04  // 빌드시 make lsp 
│   │         ├── docs
│   │         ├── kernel
│   │         └── u-boot               
│   │    
│   │
│   └── ipnc_rdk                 //  IPNC-APPLICATION 
│       │                              //  $ make (application 전체 빌드시)
│       ├── av_capture          //  av_server source  
│       │   ├── application    
│       │   ├── bin
│       │   ├── build
│       │   └── framework    //  av_server device control (drv) 부분  
│       │
│       ├── ipnc_app
│       │   ├── interface
│       │   ├── multimedia
│       │   ├── network
│       │   ├── root_filesys
│       │   ├── sys_server
│       │   ├── utils
│       │   └── webdata
│       │                              //  $ make ubifs (File system Image 생성시) 
│       ├── target                //  현재 File system     
│       │
│       └── tftp                   // 최종결과 이미지 확인 
│     
└── Utils                              //CCS 관련 소스파일 
    ├── diagnostic_ipnc_dm36x  // CCS 진단프로그램 Source 
    ├── flash_utils_dm36x          // CCS UBL & NandWriter 
    └── gel_dm36x                  //  GEL 파일  


3. 관련 문서정리


3.1  DM368 관련 문서 링크 


  • 기본 TI사이트 및 DM368 기본정보

      http://www.ti.com/product/TMS320DM368/technicaldocuments
      http://processors.wiki.ti.com/index.php/DM368

  • H.264/MPEG4의 기본이해  (Profile과 Level 파악)
      Profile은 encoder에서 정해지는 제약된 표준을 말하며, 이들은 주요 특징을 가지고 있다.
   
      https://ko.wikipedia.org/wiki/H.264/MPEG-4_AVC


      Profiles의 전체특징을 자세히 기술을 했으며, Profile 약어 기준으로 개별특징을 확인가능하다.
     아래의 Feature support in particular profiles 에서 Profile들의 특징을 자세히 알아보자.

  • Baseline Profile (BP, 66)
  • Constrained Baseline Profile (CBP, 66 with constraint set 1)

      Levels 은 profile에 대한 decoder 성능을 나타내주는 척도를 말해준다.
      이는 Streaming에 중요하다,

      https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC

  • Codec 관련 정보 
      Codec Interface는 기본적으로 DVSDK에 포함되어져있다.

      http://software-dl.ti.com/dsps/dsps_public_sw/codecs/DM365/index_FDS.html
      http://processors.wiki.ti.com/index.php/DM365_Codec_Availability_Schedule
      http://processors.wiki.ti.com/index.php/DM365_Codecs_FAQ

      http://nahsun.com/index.php/technology/audio-codec

3.2 DM368 IPNC-MT5 관련 중요 문서 정리 

  • GettingStartedGuide      
      초반에 VLC 설정 및 설치할때 읽어야 기본 작동설치문서
      http://www.appropho.com/NewWeb/DOC_DM365IPNC/GettingStartedGuide.pdf

  • APPROPHO에서 제공  
        A. UserGuide_IPNC_RDK_DM36x.pdf  (설치 및 TEST 시 중요) 
            -  GettingStartedGuide 내용포함
            -  처음설치 및 각각 빌드하는 방법  ( 2.9 참조)
            -  CCS 관련 프로그램 사용법    
            -  제공하는 APP 기본 사용법  
            -  Face Recognition  및 SALDRE   (release version 미제공)  (3.3.1)

      B. Collaterals  (개발시 중요)
            - Application_DesignGuide_IPNC_DM36x.pdf  //전체 APPLICATION 구조   
            - AVServer_DesignGuide_IPNC_DM36x.pdf    // AVServer 기본사용법 및 관련 API    


4. 빌드 방법 

      초반에 make sysall로 전체 빌드한 후 필요한 부분만 재빌드해서 사용하자.
      자세한 내용은 Makefile과 Rules.make 를 참조하자
  • Kernel 및 U-BOOT 

$ cd ~/dm368/mt5/Source/ipnc_rdk
$ make lsp  or make lspall                // Kernel 및 Kernel Module 
$ ll tftp/DM368/                             // 최종이미지 변경날짜 확인 

$ make uboot                                // U-BOOT
$ ll tftp/DM368/                             // 최종이미지 변경날짜 확인 

  • APPLICATION (av_server 및 기타 )

$ cd ~/dm368/mt5/Source/ipnc_rdk
$ make                                        // make app 동일 
$ ll target/filesys_dm368/opt/ipnc/     // 변경된 실행파일 날짜 확인 
$ make ubifs 
$ ll tftp/DM368/                            // 최종이미지확인    


Shell Script의 Sed 와 AWK (수정중)

1. Shell Script 기본예제 

기존보다 더 정리가 잘된 사이트를 찾음
  https://blog.gaerae.com/2015/01/bash-hello-world.html
  https://ryanstutorials.net/bash-scripting-tutorial/bash-if-statements.php

2. sed 기본사용

sed(stream editor) 약자이며, 흔히 Shell Script or vim에서 사용되는 교환 command이다.

문자열을 치환하거나 삭제할때 많이 사용되어지고 있다.
현재 간단히 테스트만 해보고 자세한 부분은 추후 시간이 될때 테스트해봐가면 익히자


$ vi test.sh 
#!/bin/bash

STR1="abc"
STR2="abc"
STR3="abc"

echo "Check STRING:  $STR1 $STR2 $STR3"
$ cp test.sh test1.sh

$ bash test.sh
Check STRING:  abc abc abc

$ sed -i 's/abc/def/g' test1.sh //  test.sh 파일에서 abc -> def 변환 한 후 저장 (미출력)
$ bash test1.sh
Check STRING:  def def def

$ sed 's/abc/def/g' test.sh   //  test.sh 파일에서 abc -> def 변환한 것을 화면에 출력만 하고 변경사항 test.sh 미저장 
#!/bin/bash

STR1="def"
STR2="def"
STR3="def"

echo "Check STRING:  $STR1 $STR2 $STR3"


관련링크 (설명이 잘되어있음)

  https://en.wikipedia.org/wiki/Sed
  http://vim.wikia.com/wiki/Search_and_replace
  http://milli.tistory.com/14

  https://www.shellscript.sh/variables2.html

3. awk 사용

Shell Script 혹은 명령어를 사용 도중에 특정 Column의 Row의 출력을 하고 싶을때 유용한것 같다
이밖에 다양한 기능이 있는 것 같은데, 좀 더 익숙해지면 익히자


$ df | awk 'NR == 2 {print $4}'    // NR Column , print $4 Row 
$ df | awk 'NR == 1 {print $4}'                         


관련링크 (설명)
  https://en.wikipedia.org/wiki/AWK
  https://www.gnu.org/software/gawk/manual/html_node/index.html#SEC_Contents
  http://ra2kstar.tistory.com/153
  http://www.thegeekstuff.com/2010/01/awk-tutorial-understand-awk-variables-with-3-practical-examples