2011-02-05 3 views
1

私は、次のコードに問題があります:私はgcc -o main main.c -lgnokiiでそれをコンパイルするんだけど、それが実行されます時に設定ファイルを探しているときにエラーが発生しgnokii:APIエラー?

#include <stdio.h> 
#include <stdlib.h> 

#include <string.h> 
#include <gnokii.h> 

#define CONFIG_FILE "config" 

struct gn_statemachine *state; 

void terminate(void) { 
    gn_lib_phone_close(state); 
    gn_lib_phoneprofile_free(&state); 
    gn_lib_library_free(); 
} 


int main() { 
    gn_data data; 
    gn_error error;  
    gn_sms_folder_list folderlist; 

    atexit(terminate); 

    if((error = gn_lib_phoneprofile_load(CONFIG_FILE,&state)) 
     != GN_ERR_NONE) 
    { 
     fprintf(stderr,"%s\n",gn_error_print(error)); 
     exit(1); 
    } 

    memset(&folderlist,0,sizeof(gn_sms_folder_list)); 
    gn_data_clear(&data); 
    data.sms_folder_list = &folderlist; 

    error = gn_sm_functions(GN_OP_GetSMSFolders, &data, state); 

    printf("ada %d sms dun\n",folderlist.number); 

    return 0; 
} 

# ./gnokiitest 
No phone_config section in the config file. 
Either global or given phone section cannot be found. 
Segmentation fault 

私は設定が含まれているためにメイン出力の1つのフォルダ内のファイル:

$ cat config 
[global] 
    connection = bluetooth 
    port = 24:22:AB:AB:C1:F8 
    model = AT 
    rfcomm_channel = 2 

何が間違っていますか?

答えて

2

手始めに、以下の問題が発生します。

if((error = gn_lib_phoneprofile_load(CONFIG_FILE,&state)) 

state変数は、ここでは初期化されていません。これにより、ランダムなポインタが渡され、おそらくsegfaultが発生します。

次に、gn_lib_phoneprofile_load()の最初の引数は、設定ファイル名ではなく、接続詳細が提供されているconfigの電話機セクションです。

[phone_config] 
connection = bluetooth 
port = 24:22:AB:AB:C1:F8 
model = AT 
rfcomm_channel = 2 

が、標準gnokiiの設定ファイルの場所に配置された:あなたはあなたが必要があると思います。このパラメータとしてconfigを渡すことを考えます。別の場所で使用するには:

​​

第2引数は電話セクション名です。 NULLの場合、[global]が使用されます。

さらに、gn_lib_phoneprofile_load()は設定ファイルを読み込むだけです。接続を初期化するには、gn_lib_phone_open()を実行する必要があります。

最後に、同様のコードすでに書かれた、車輪の再発明する必要はありませんがあります:http://git.savannah.gnu.org/cgit/gnokii/gnokii-extras.git/tree/snippets/sms/sms_status.c

+0

偉大何の説明:ということであるD、およびIMファイルから取り出していない、変数に設定を設定する方法を疑問に思うが、可能なことは?とにかく、gnokii APIのためにマニュアルライブラリAPIが文書化されていますか? ... – capede

+0

設定変数を処理するための適切なAPIは、TODOリストにあります。おそらく2-3 gnokiiのバージョンでリリースされるでしょう。 http://svn.opensync.org/plugins/gnokii-sync/src/gnokii_config.cを見ると、現在の設定ファイルなしでgnokii configをどのように扱うかを知ることができます。適切なAPIドキュメントはありません。私が示唆できるのは、gnokiiのソースといくつかの使用例をhttp://git.savannah.gnu.org/cgit/gnokii/gnokii-extras.git/ – pkot

+0

から読んでみることです。あなたが(開発者として)期待していることは、 'no適切なAPIドキュメント 'gnokiiの将来の発展に関してそれは自己ですが、私は何を問わずさらなるリリースを楽しみにしています:D – capede

関連する問題