トップ 一覧 検索 ヘルプ RSS ログイン

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

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{category 開発情報}}
{{category 陰郎の書いた記事,nolink}}

!!概要
 このトピックでは、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節に書かれている|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 検索 )で原因を調査した結果を書き記したものです。そのため、誤りがあるかもしれません。お気づきの方はご指摘いただけると幸いです。

!!コメント
{{comment multi}}