Palm Programmer's Laboratory
【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 検索 )で原因を調査した結果を書き記したものです。そのため、誤りがあるかもしれません。お気づきの方はご指摘いただけると幸いです。