출처 : http://furmuwon.egloos.com/11074224


내가 지금 필요한 정보랑 맞는지 모르겠지만 

리눅스 응용프로그램 개발 과정 중 

sound 업무를 진행 중이다


sound file(/dev/snd/pcmC0D0p)에 직접 write 하는데

state 가 안맞아서 그런지 ioctl_start 시 Broken pipe error 를 return 함

관련해서 구글링 하던 중 찾은 정보 임

--------------------------------------------------------------------------------------------------------------------

snd_pcm_attach_substream (open시)  SNDRV_PCM_STATE_OPEN 로 세팅

snd_pcm_hw_params 에서 SNDRV_PCM_STATE_SETUP 로 세팅

snd_pcm_post_prepare(prepare) 에서 SNDRV_PCM_STATE_PREPARED 로 세팅
 prepare시 SNDRV_PCM_STATE_OPEN 이나 SNDRV_PCM_STATE_DISCONNECTED 상태면 에러 -EBADFD
           SNDRV_PCM_STATE_RUNNING, SNDRV_PCM_STATE_DRAINING && SNDRV_PCM_STREAM_PLAYBACK 상태면 에러 -BUSY
           
           snd_pcm_do_reset 함수로  하여 포지션값 거의 리셋됨.
           
SNDRV_PCM_IOCTL_START ioctl 로 SNDRV_PCM_STATE_RUNNING 로 세팅
SNDRV_PCM_STATE_PREPARED 상태가 아니면 -EBADFD

SNDRV_PCM_IOCTL_WRITEI_FRAMES ioctl 에서 
SNDRV_PCM_STATE_OPEN 상태면 -EBADFD
SNDRV_PCM_STATE_PREPARED,SNDRV_PCM_STATE_RUNNING,SNDRV_PCM_STATE_PAUSED 상태면 OK
그 외 상태는 모두 ERROR -EBADFD
SNDRV_PCM_STATE_XRUN - EPIPE
SNDRV_PCM_STATE_SUSPENDED -ESTRPIPE
snd_pcm_start 함수 에서 SNDRV_PCM_STATE_RUNNING 로 세팅. ( 이전에 꼭 SNDRV_PCM_STATE_PREPARED 상태어야 한다 )

SNDRV_PCM_IOCTL_DROP ioctl snd_pcm_drop(stop) 이면
SNDRV_PCM_STATE_OPEN,SNDRV_PCM_STATE_DISCONNECTED,SNDRV_PCM_STATE_SUSPENDED 상태면 -EBADFD
SNDRV_PCM_STATE_PAUSED 상태면 pause 푼다.
snd_pcm_stop 호출 하면서 SNDRV_PCM_STATE_SETUP로 변경 한다.
pause 에서
push 1 이면 SNDRV_PCM_STATE_PAUSED 로
push 0 이면 SNDRV_PCM_STATE_RUNNING 상태로


drop 이후에 꼭 prepare 와 write 상태로 호출 되어야 한다.


#define SNDRV_PCM_STATE_OPEN ((__force snd_pcm_state_t) 0) /* stream is open */
#define SNDRV_PCM_STATE_SETUP ((__force snd_pcm_state_t) 1) /* stream has a setup */
#define SNDRV_PCM_STATE_PREPARED ((__force snd_pcm_state_t) 2) /* stream is ready to start */
#define SNDRV_PCM_STATE_RUNNING ((__force snd_pcm_state_t) 3) /* stream is running */
#define SNDRV_PCM_STATE_XRUN ((__force snd_pcm_state_t) 4) /* stream reached an xrun */
#define SNDRV_PCM_STATE_DRAINING ((__force snd_pcm_state_t) 5) /* stream is draining */
#define SNDRV_PCM_STATE_PAUSED ((__force snd_pcm_state_t) 6) /* stream is paused */
#define SNDRV_PCM_STATE_SUSPENDED ((__force snd_pcm_state_t) 7) /* hardware is suspended */
#define SNDRV_PCM_STATE_DISCONNECTED ((__force snd_pcm_state_t) 8) /* hardware is disconnected */


Posted by 장태호
,

[sh] 쉘스크립트에서 성공여부 확인 방법

http://mcchae.egloos.com/11221790


기초 

http://bban2.tistory.com/83


ansi 컬러 코드

https://wiki.ubuntu-kr.org/index.php/ANSI_%EC%BB%AC%EB%9F%AC_%EC%BD%94%EB%93%9C


cmake 설치 

http://radiation.tistory.com/entry/Ubuntu%EC%97%90-cmake-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0


문법

https://blog.gaerae.com/2015/01/bash-hello-world.html

'개발 관련 > Shell script' 카테고리의 다른 글

쉘 스크립트에서 cmake 변수 제거  (0) 2019.01.07
문법 - if 문 (작성 중)  (0) 2019.01.03
Posted by 장태호
,

cmake 에서 현재 위치를 갖는 variables string 제거하기 

${CMAKE_CURRENT_SOURCE_DIR} 를 string 그대로 사용하기 위해서 

일반적으로 sed 명령어 에서는 " 쌍따옴표를 사용하지만 ' 외따옴표로 변경

혹은 $ 앞에 특수문자임을 표시하는 \를 사용 해도 됨

예)

sed -e "s/\${CMAKE_CURRENT_SOURCE_DIR}/\./g"

| |

sed -e 's/${CMAKE_CURRENT_SOURCE_DIR}/\./g'


혹시 일반적인 매개변수를 사용하기 위해서는 

%{valiable} 을 " 쌍따옴표로 묶고 

전체를 ' 외 따옴표로 묶음

'개발 관련 > Shell script' 카테고리의 다른 글

나중에 정리  (0) 2019.01.07
문법 - if 문 (작성 중)  (0) 2019.01.03
Posted by 장태호
,