/* * ***************************************************************** * * * * * Copyright (c) Fast Corporation, 1999 * * * * * * All Rights Reserved. Unpublished rights reserved under * * * the copyright laws of the Japan. * * * * * * The software contained on this media is proprietary to * * * and embodies the confidential technology of Fast * * * Corporation. Possession, use, duplication or * * * dissemination of the software and media is authorized only * * * pursuant to a valid written license from Fast Corporation. * * * * * ***************************************************************** */ /* CSC902 2カメラ同時取込(CSC902−RICEのみ) 2SIM_R.C */ /*[作成者] Fast corp.*/ /* 目的:2カメラ同時取込を実行します。(CSC902(RICE))     関数: 履歴:Ver 1.0 99/03/26 初版。 注記:CSC902(RICE)でのみ実行可能 m_menu.hをインクルードして下さい。 m_menu.c及びm_note.cをリンクして下さい。 */ /* Include compiler runtime library */ #include #include /* CSC902ライブラリ用ヘッダ */ #include "f_stdlib.h" #include "f_time.h" #include "f_gui.h" #include "f_stdio.h" #include "f_graph.h" #include "f_image.h" #include "f_pinf.h" #include "f_video.h" #include "f_gray.h" /* Include CSC90X common local */ #include "m_menu.h" /* 外部参照モジュール */ extern int message_note( void ); /* ファイル内モジュール */ void main( void ); static void init_sys( void ); static void set_sim_mode( void ); static void main_menu_disp( void ); static void disp_help( void ); static void sim_freeze( void ); static void sim_image_disp( void ); static void sim_image_to_memory( void ); #define TITLE_ON_TABLE 0 enum{ SIM_1, SIM_2, SIM_MEM_1, SIM_MEM_2, MAX_MEM_NUM }; enum{ CH0, CH1 }; /** 本モジュール内で有効な変数定義 **/ static int waMemNo[MAX_MEM_NUM]; static int wInputFlg; /*メイン関数 */ void main( void ) { int i, pad_back; /* 初期メッセージ表示 */ if( NORMAL_RETURN != message_note() ) return; /* システムの初期化 */ init_sys(); /* 画像入力フラグ */ wInputFlg = OFF; /* 同時取込モードへ設定 */ set_sim_mode(); /* パッドの表示色は黒 */ pad_back = Lib_get_pad_background(); Lib_set_pad_background( ON ); /* メモリの確保 */ for( i = 0; i < MAX_MEM_NUM; i++ ) { waMemNo[i] = Lib_alloc_gray_memory(); } if( ERROR_RETURN != waMemNo[SIM_1] && ERROR_RETURN != waMemNo[SIM_2] && ERROR_RETURN != waMemNo[SIM_MEM_1] && ERROR_RETURN != waMemNo[SIM_MEM_2] ) { /* メモリのクリア */ for( i = 0; i < MAX_MEM_NUM; i++ ) { Lib_gray_memory_cls( waMemNo[i] ); } /* メインメニューの表示 */ main_menu(); /* メモリの解放 */ for( i = 0; i < MAX_MEM_NUM; i++ ) { Lib_free_gray_memory( waMemNo[i] ); } } else { /* 確保済みのメモリの解放 */ for( i = 0; i < MAX_MEM_NUM; i++ ) { if( ERROR_RETURN != waMemNo[i] ) Lib_free_gray_memory( waMemNo[i] ); } Lib_display_message( 100, 100, "エラー", "ワークメモリが確保できません!!" ); } /* パッドの表示色を元に戻す */ Lib_set_pad_background( pad_back ); } /* メニュー項目 */ #define MAIN_MENU_N 3 static const char *sim_main_menu[MAIN_MENU_N][KIND_LANGUAGE] = { { " EXEC ", "画像取込" }, { " DISP ", "画像表\示"} }; /*メインメニュー*/ static main_menu() { int sts; int xpos, ypos, old_xpos, old_ypos; /* メニューの表示 */ main_menu_disp(); /* マウスカーソルの現在位置取得 */ Lib_look_current_position( &xpos, &ypos ); /* マウスカーソルの表示 */ Lib_draw_cursor( xpos, ypos ); /* メニュー制御 */ for (;;) { sts = 0; /* マウス位置読みとり */ Lib_look_current_position( &xpos, &ypos ); sts = Lib_see_current_position( &xpos, &ypos ); if ( old_xpos != xpos || old_ypos != ypos ) { /* マウス表示位置移動 */ Lib_move_cursor( xpos, ypos ); old_xpos = xpos; old_ypos = ypos; } /* 処理振り分け */ if( CURSOR_EXECUTE == sts ) { /* 同時取込 */ if ( xpos > MENU_1_XS && xpos < MENU_1_XE && ypos > MENU_1_YS && ypos < MENU_1_YE ) { Lib_memory_clear( LINE_PLANE | CHAR_PLANE ); Lib_strtclk_count(); sim_freeze(); /*同時取込*/ Lib_time_disp( 1, 450 ); Lib_display_keyinput( 410, 410, "確認" ); /* 取込映像の待避 */ sim_image_to_memory(); Lib_freerun(); Lib_memory_clear( LINE_PLANE | CHAR_PLANE ); main_menu_disp(); } /* 表示 */ else if ( xpos > MENU_2_XS && xpos < MENU_2_XE && ypos > MENU_2_YS && ypos < MENU_2_YE ) { Lib_memory_clear( LINE_PLANE | CHAR_PLANE ); sim_image_disp(); /* 表示 */ Lib_memory_clear( LINE_PLANE | CHAR_PLANE ); main_menu_disp(); } /* ヘルプ */ else if ( xpos > MENU_H_XS && xpos < MENU_H_XE && ypos > MENU_H_YS && ypos < MENU_H_YE ) { Lib_memory_clear( LINE_PLANE | CHAR_PLANE ); disp_help(); /* ヘルプ */ main_menu_disp(); } /* 終了 */ else if ( xpos > MENU_E_XS && xpos < MENU_E_XE && ypos > MENU_E_YS && ypos < MENU_E_YE ) { break; /* 終了 */ } } } } /* システムの初期化 */ static void init_sys() { /* 入力ビデオ制御 */ Lib_input_video_control( GRAY_PLANE ); /* ビデオ出力表示項目制御 */ Lib_display_control( GRAY_PLANE | LINE_PLANE | CHAR_PLANE ); /* ビデオ表示項目クリア */ Lib_memory_clear( LINE_PLANE | CHAR_PLANE ); /* カーソル初期化 */ Lib_init_cursor(); /* 画像入力開始 */ Lib_freerun(); } /* 同時取込モードへ設定 */ static void set_sim_mode() { int cur_ch; cur_ch = Lib_get_video_channel(); /* カレントチャネル0へ変更 */ if( CH0 != cur_ch ) { Lib_xvideo_channel( WAITING, CH0 ); } /* 同時取込モードへ変更 */ Lib_set_video_input_mode( SIM_VIDEO_MODE, CH0 ); } /* CH0&CH1同時取込実行 */ static void sim_freeze( ) { /* 取り込むメモリの選択 */ Lib_set_sim_gray_memory( CH0, waMemNo[SIM_1] ); Lib_set_sim_gray_memory( CH1, waMemNo[SIM_2] ); Lib_freeze( NOT_TRANSMIT ); wInputFlg = ON; } /* CH0&CH1取込画像表示 */ static void sim_image_disp() { int cur_mem_no; if( ON == wInputFlg ) { cur_mem_no = Lib_get_gray_memory(); Lib_freeze( NOT_TRANSMIT ); Lib_gray_memory_move( waMemNo[SIM_MEM_1], cur_mem_no, 0xFF ); Lib_xvideo_transmit( cur_mem_no, GRAY_PLANE ); Lib_display_keyinput( 410, 410, "CH 0" ); Lib_gray_memory_move( waMemNo[SIM_MEM_2], cur_mem_no, 0xFF ); Lib_xvideo_transmit( cur_mem_no, GRAY_PLANE ); Lib_display_keyinput( 410, 410, "CH 1" ); Lib_memory_clear( GRAY_PLANE ); Lib_freerun(); } else { Lib_display_message( 100, 150, "エラー", "先に画像取込を実行して下さい。" ); } } /* 取込画像をメモリへ待避 */ static void sim_image_to_memory() { Lib_gray_memory_move( waMemNo[SIM_1],waMemNo[SIM_MEM_1],0xFF ); Lib_gray_memory_move( waMemNo[SIM_2],waMemNo[SIM_MEM_2],0xFF ); } /* メインメニュー表示 */ static void main_menu_disp( void ) { int iLanguage; /* 日本語/英語表示文字列切替情報取得 */ iLanguage = Lib_get_disp_language(); /* 整列キー表示 ( m_menu.c の中に実体 ) */ SUB_menu_disp4he( (char *)sim_main_menu[0][iLanguage], (char *)sim_main_menu[1][iLanguage], NULL, NULL ); } /* ヘルプ表示 */ static void disp_help( void ) { int fx_size, fy_size; int column, line; fx_size = Lib_get_fx_size(); fy_size = Lib_get_fy_size(); Lib_view( 0, 0, fx_size-1, fy_size-1, GRAPH_ERAS ); column = 5; line = 3; Lib_chrdisp( column-1, line, "【機能\概要】2チャネル同時取込 2SIM_RX.EXE" ); line+=3; Lib_chrdisp( column, line, "2チャネル同時取込を行います。" ); line++; Lib_chrdisp( column, line, "本サンプルでは「CH0とCH1」の同時取込を行います。" ); line++; Lib_chrdisp( column, line, "本サンプルは902(RICE)のみで実行可能\です。" ); line++; line++; Lib_chrdisp( column, line, "[画像取込] 同時取込を実行します。" ); line++; line++; Lib_chrdisp( column, line, "[画像表\示] 取り込み済みの画像を表\示します。" ); line++; line++; Lib_chrdisp( column, line, "-----------------------------------------------------------" ); line++; Lib_chrdisp( column-1, line, "[備考]2チャネル同時取込には下記の制限があります。" ); line++; line++; Lib_chrdisp( column, line, " ・ 同時取込が可能\な組み合わせは、      " );line++; Lib_chrdisp( column, line, "  「CH0&CH1」か「CH2&CH3」の2通りのみです。" ); line++; Lib_chrdisp( column, line, " ・ カメラの同期信号は「外部で同期」されている" ); line++; Lib_chrdisp( column, line, "   必要があります。             " ); line++; Lib_chrdisp( column, line, " ・ ランダムトリガ取込は使用できません。   " ); line++; Lib_chrdisp( column, line, " ・ カメラ接続モードが「ノーマルカメラモード」" ); line++; Lib_chrdisp( column, line, "   である必要があります。          " ); line++; line++; Lib_chrdisp( column, line, "(詳しくは902取扱説明書をご参照下さい。)" ); line++; Lib_display_keyinput( 430, 410, "確 認" ); Lib_memory_clear( CHAR_PLANE ); Lib_view( 0, 0, fx_size-1, fy_size-1, GRAPH_DRAW ); }