// // // KCB1共通設定および関数群 // // rcb3.hに定義されていない関数群 // //-------------------------------------------------- #ifndef _KCB1_RCB3SUB #define _KCB1_RCB3SUB #include #include // 関数定義 char rcb3_scenario_play (unsigned int); char rcb3_get_motion_count(unsigned int); //-------------------------------------------------- // // RCB3に記録されているシナリオを再生します // // rcb3_motion_playとの違いは、シナリオ再生時にRCB3からモーション再生終了毎に // 32バイトデータが帰ってくる為、シナリオ再生の前にシナリオに登録されている // モーション数を取得する // シナリオ再生終了待ちの処理で、取得したモーション数X32バイトの受信する // //-------------------------------------------------- char rcb3_scenario_play ( unsigned int mn // 再生するモーション番号0 ~ 84 ) { char cmd[4], ret; unsigned int i; unsigned char count; count = rcb3_get_motion_count(mn); // いったんプロポからのデータ受信を拒否します rcb3_transmitter_suspend (); if (rcb3_confirm() != TRUE) { // ACKを送る return 0; } cmd[0] = 0xF4; // COMMAND: モーション再生 cmd[1] = 3; // OPTION: 強制再生しない、EEPROM、ACKあり cmd[2] = mn-1; // モーション番号 cmd[3] = cmd[0] + cmd[1] + cmd[2]; // 上位1バイトは捨てる rcb3_tx (cmd, 4); // コマンドを送信します ret = uart1_getchar (); // ACK = 0x06を受け取ります //-------------------------------------------------- // ここからシナリオ再生終了を待ちます ret = uart1_getchar (); // コマンドを受信するまで待ちます for (i = 0; i < 32*count-1; i++) { // 再生終了時はモーション数 X 32バイトデータが帰ってきます ret = uart1_getchar (); } // プロポからのデータを許可します rcb3_transmitter_restart (); return ret; } //-------------------------------------------------- // // RCB3に記録されているモーションのパラメータ数を取得します // // シナリオの場合は、モーション数を取得します // //-------------------------------------------------- char rcb3_get_motion_count( unsigned int mn // 確認するモーション番号0 ~ 84 ) { char cmd[3], ret[43]; unsigned int i; if (rcb3_confirm() != TRUE) { // ACKを送る return 0; } cmd[0] = 0xF5; // COMMAND: モーションデータのパラメータ数・使用ポート・タグ・テキストの確認 cmd[1] = mn-1; // モーション番号 cmd[2] = cmd[0] + cmd[1]; // 上位1バイトは捨てる rcb3_tx (cmd, 3); // コマンドを送信します ret[0] = uart1_getchar (); for (i = 1; i < 43; i++) { // 再生終了時は43バイトデータが帰ってきます ret[i] = uart1_getchar (); // 受信をして、配列にセットします } return ret[0]; // 受信データの1バイト目を返す(ポジション数またはモーション数) } #endif // _KCB1_RCB3SUB