Palm Programmer's Laboratory

トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

【SDK】 デバイスの ROM シリアルナンバーの取得について

[開発情報]

概要

 このトピックでは、Palm OS デバイスの ROM シリアルナンバーを取得する方法について説明します。

 

説明

 基本的には、SysGetROMToken API に sysROMTokenSnum を渡して 12 桁のシリアルナンバーを取得します。

char*  p      = NULL;
UInt16 bufLen = 0;
Err    ret    = errNone;
 
ret = SysGetROMToken( 0, sysROMTokenSnum, (UInt8**)&p, &bufLen );

 復帰値に問題がなく、p が NULL でなく、かつ *p が 0xFF でなければ ROM シリアルナンバーの取得は成功です。p が指しているのは NULL 終端文字列ではありませんし、フラッシュROMの中にある文字列のアドレスなので、直接 NULL 終端文字列化することはできません。以下の要領で自前の文字列バッファに転記して NULL 終端を付加する必要があります。

char buf[12+1];
if( !ret && !!p && (UInt8)*p != 0xFF ) {
    StrNCopy( buf, p, 12 );
    buf[12] = '\0';
}

 ここまでは、Palm OS Programmer's Companion Volume I の 11章 7節に書かれているとおりです。しかし、デバイスによってはこの方法では取得できない場合があります。HandSpring のデバイスは、HsGetVersionString 関数に hsVerStrSerialNo を渡してシリアルナンバーを取得する必要があります。

char   buf[12+1];
UInt16 size = 12;
 
HsGetVersionString( hsVerStrSerialNo, buf, &size ); 
buf[12] = '\0'; 

 『HandSpring のデバイス』は、具体的にはデバイスの製造元会社コードが 'hspr' であるようなデバイスを意味します。したがって、Treo600/650 では HsGetVersionString 関数を使用する必要があります。デバイスの製造元会社コード取得に関する詳細は「【SDK】 デバイスの CompanyID とその取得について」を参照してください。

 

注意事項

 この情報は、筆者が CodeWarrior を使用した際に気付いた点について、手探り( と google 検索 )で原因を調査した結果を書き記したものです。そのため、誤りがあるかもしれません。お気づきの方はご指摘いただけると幸いです。

コメント

お名前: コメント:


表示された文字列