voiceinit.c 2.15 KB
/*---------------------------------------------------------------------
 	Copyright (C) 1997,1998 Nintendo.
 	
 	File		voiceinit.c
 	Coded    by	Koji Mitsunari.	Dec 10, 1997.
 	Modified by	Koji Mitsunari.	Jul  3, 1998.
 	Comments	Voice Recognition System
   
 	$Id: voiceinit.c,v 1.1.1.1 2002/05/02 03:28:44 blythe Exp $
   ---------------------------------------------------------------------*/
/**************************************************************************
 *
 *  $Revision: 1.1.1.1 $
 *  $Date: 2002/05/02 03:28:44 $
 *  $Source: 
 *
 **************************************************************************/

#include "osint.h"
#include "controller.h"
#include "siint.h"

s32
osVoiceInit(OSMesgQueue *mq, OSVoiceHandle *handle, int channel) {
  s32		ret, i;
  u8		stat = 0;
  u8		buf[4];		/*--- 4バイトライト用のバッファ ---*/
  static u8	cmd[] = { 	/*--- A/Dコンバータ用のコマンド ---*/
    0x1e,	       			/* パワーアップ */
    0x6e,				/* 外部クロックモード */
    0x08,				/* 入出力アンプ制御 */
    0x56,				/* デジタル信号処理制御 */
    0x03				/* テスト制御 */
  };

  handle->__channel = channel;
  handle->__mq	= mq;
  handle->__mode = 0;
  
  /*--- 音声認識システムに問題はないか? ---*/
  if ( (ret = __osVoiceGetStatus(mq, channel, &stat)) != 0 ) {
    return(ret);
  }

  /*--- A/Dコンバータの設定 ---*/
  if ((ret = __osContChannelReset(mq, channel)) != 0 ) {
    return(CONT_ERR_CONTRFAIL);
  }

  /*--- A/Dコンバータの設定 ---*/
  for ( i = 0 ; i < (s32)(sizeof(cmd)/sizeof(u8)) ; i ++ ) {
    if ((ret = __osVoiceSetADConverter(mq, channel, cmd[i])) != 0 ) {
      return(ret);
    }
  }

  /*--- 音声認識 LSI にコマンドを転送できるか? ---*/
  if ( (ret = __osVoiceGetStatus(mq, channel, &stat)) != 0 ) {
    return(ret);
  }
  if (stat & VOICE_WRITE_READY) {
    return(CONT_ERR_VOICE_NO_RESPONSE);
  }
  
  /*--- リセット・コマンドを送る ---*/
  ((u32 *)buf)[0] = 0x0100;		/* Reset Command */
  ret = __osVoiceContWrite4(mq, channel, VOICE_RW_ADDR, buf);
  if (ret != 0 ) {
    return(ret);
  }
  
  /*--- コマンド転送に成功したか? ---*/
  ret = __osVoiceCheckResult(handle, &stat);
  if (ret & 0xff00) {
    ret = CONT_ERR_INVALID;
  }

  return(ret);
}