Пример #1
0
/*
 * Enable IRQs for the interface.
 */
static void test_enable_irq(void)
{
    uint8_t rsp[20];
    unsigned int rsplen = sizeof(rsp);

    bt_cmd(set_bmc_globals_cmd, sizeof(set_bmc_globals_cmd), rsp, &rsplen);
    g_assert(rsplen == sizeof(set_bmc_globals_rsp));
    g_assert(memcmp(set_bmc_globals_rsp, rsp, rsplen) == 0);
    bt_write_irqreg(0x01);
    bt_ints_enabled = 1;
}
Пример #2
0
/* コマンドモード(mode)に入るための送受信を行う関数 */
int bt_cmd_mode(char mode){
    int i;
    char cmd[4];
    if( bt_cmd("GK") > 0 ){                     // コマンドに応答があった場合で、かつ、
        if( rx_data[0]=='1') bt_cmd("K,");      // ネットワーク接続されている場合は切断
        else bt_cmd("---");                     // 接続していない時はコマンドモード解除
        sleep(1);                               // (RN-42が応答するまでの)1秒の待ち時間
    }
    bt_rx_clear();                              // シリアルの受信バッファを消去する
    for(i=0;i<3;i++) cmd[i]=mode;               // コマンドモードに入る命令「$$$」を作成
    cmd[3]='\0';                                // 文字列の終端(念のための代入)
    write(ComFd, cmd, 3 );                      // コマンドモードに入る命令を実行
    i = bt_rx();                                // 結果を受信(正常なら「CMD」が返る)
    if( i>=5 ){                                 // 何らかの応答があった場合
        if( rx_data[i-5]=='C' && rx_data[i-4]=='M' && rx_data[i-3]=='D'){
            return(1);                          // 成功(CMDの応答があった時)
        }
    }
    return(0);                                  // 失敗(CMDの応答が無かった時)
}
Пример #3
0
/* ローカルMaster機の設定用 */
void bt_init_local(void){
    printf("Config BT \n"); 
    if( !bt_cmd_mode('$') ){                    // ローカルコマンドモードへの移行を実行
        bt_error("Config FAILED");
    }
    bt_cmd("SF,1");                             // 工場出荷時の設定に戻す
    bt_cmd("SM,1");                             // BluetoothのMasterデバイスに設定する
    bt_cmd("SA,4");                             // PINペアリング方式に変更する。
    bt_cmd("SO,%");                             // 接続・切断時にメッセージを表示する
    bt_cmd("ST,255");                           // コマンドモードの時間制限を解除する
    bt_cmd("R,1");                              // 再起動
    printf("DONE\n");
    sleep(1);                                   // 再起動待ち

    /* デバイス探索の実行 */
    if( !bt_cmd_mode('$') ){                    // ローカルコマンドモードへの移行を実行
        bt_error("FAILED to open");
    }
    printf("Inquiry \n");
    bt_repeat_cmd("I","Found",5);               // デバイスが見つかるまで探索を繰り返す
    printf("Found\n");
    while( bt_rx()==0 );                        // アドレスの取得待ち
    
    /* ペアリングの実行 */
    printf("Pairing \n");
    bt_cmd("SR,I");                             // 発見したデバイスのアドレスを保存
    bt_repeat_cmd("C","%CONNECT",8);            // 接続するまで接続コマンドを繰り返す
    printf("DONE\n");
    sleep(1);                                   // 接続後の待ち時間
    
    /* リモート機の設定 */
    printf("RemoteCnf \n");
    if( !bt_cmd_mode('$') ){                    // ローカルコマンドモードへの移行
        bt_error("RemoteCnf Failed");
    }
    bt_cmd("ST,255");                           // コマンドモードの時間制限を解除する
    bt_cmd("R,1");                              // 再起動
    printf("DONE\n");
    sleep(1);                                   // 再起動待ち
}
Пример #4
0
/* コマンド(cmd)を期待の応答(res)が得られるまで永続的に発行し続ける関数 */
void bt_repeat_cmd(char *cmd, char *res, int SizeOfRes){
    int i=0,j;
    bt_rx_clear();                              // シリアルの受信バッファを消去する
    if(SizeOfRes >= RX_MAX)SizeOfRes=RX_MAX-1;  // 文字制限の調整
    do{
        if( i==0 ) bt_cmd(cmd);                 // コマンドの発行(10秒に1回)
        if( ++i > 10 ) i=0;                     // iのインクリメント
        sleep(1);                               // 1秒間の応答待ち
        if( bt_rx() ){                          // 受信データを取得
            if( SizeOfRes == 0 ) i=-1;          // SizeOfResが0の時は受信内容の確認なし
            for(j=0; j <= SizeOfRes ; j++ ){    // 内容を確認
                if( res[j] == '\0' ){           // 期待文字がすべて一致した
                    i=-1;                       // do-whileループを抜ける
                    break;                      // 本forループを抜ける
                }
                if( res[j] != rx_data[j] || rx_data[j] == '\0') break;
            }                                   // 不一致があればforループを抜ける
            if( j == SizeOfRes ) i=-1;          // 
        }
    }while( i >= 0 );                           // 期待の応答があるまで繰り返し
}