garlog改造への道 1

ていうか個人的なメモです。(H13.10.27)



今回、common.c内のmain()の後半にある、トラック画面表示部分を書き換えてみました。
ノーマルでは最下段に「軌跡縮尺、高度、速度」の順に表示されますが、パラ用らしく?高度の代わりに上昇/下降速度を表示させてみます。
さらに上昇/下降速度と速度については16×16dotの大きな数字で見やすく表示させるのにも挑戦することにしました。

まずはソースをじっくり眺め、それらしき部分を解読(^-^;していきます。
縮尺はmapzoom、高度はdsppos.alt、速度はcnv.iSpd、上昇/下降速度はcnv.iUp100という変数らしきことが判明。
トラック画面でこれらを描画してる部分を探し、書き換えます。

以下、common.cのソース1330行目付近からです。

----------------------------------------------------------------------------------------------------------

#endif	/* USEIPS */

	if (key == (KEY_A|KEY_B))	/* トリップデータ初期化? */
		trip_clear();	/* 初期化(ここでないと矛盾が発生する) */
	/* ここでは時間が当てにならないのでAUTOの初期化は出来ない */
	/* マニュアル初期化はデータの有無によらず出来なくてはいけない */

	if (cnv.rcvStat>1) {	/* 2Dデータ、トリップ初期化後でないと確定しない処理 */
		if (menu.startT < GPSSEC_OFS)	/* 時間が有り得ないくらい昔のまま(初期化されている) */
			menu.startT = cnv.recTimeSec;	/* 今が開始時間 */
		if (cnv.iSpd > 0)	{	/* 速度がゼロでなく */
			if (menu.lastT)		/* 初期化直後でなければ */
				menu.totalMovTime += cnv.recTimeSec - menu.lastT;	/* 累積移動時間に累積 */
			chk_spd();	/* スピードチェック(ここでするのはちょうど速度が0でない条件だから) */
		}
		chk_udspd();	/* U/Dスピードチェック(ドップラーなので2Dでも測れる..と思う) */
		menu.lastT = cnv.recTimeSec;	/* 最終データ時刻を保存 */
		if (menu.dispMode == DISP_MAIN)	/* (総ての処理が終わったので)メイン画面モードなら */
			disp_data();		/* メイン画面表示 */
	}
	if (menu.dispMode == DISP_TRIP)	/* (総ての処理が終わったので)トリップ画面モードなら */
		disp_trip();	/* トリップ画面表示(有効データがなくても初期化後など表示が必要) */
	if (menu.dispMode == DISP_TRACK) {/* トラック画面モードなら */
		disp_track();	/* トラック画面表示(有効データがなくても書き残しの処理などで呼び出し必要) */
/* 以下オリジナル部分
		sprintf(msgbuff,"1/%07ld %4dm %3dKm/h",mapzoom,(int)dsppos.alt, cnv.iSpd);
		text_put_lin(COL_FILE_TMP,msgbuff);
*/

/* 以下今回改造部分 */

/* 軌跡縮尺を表示 */
		sprintf(msgbuff,"1/%07ld",mapzoom);
		text_put_lin(COL_FILE_TMP,msgbuff);

/* 上昇/下降速度を16×16dotで表示 */
	if (menu.alUpLim && menu.alDwnLim) {	/* 上昇/下降速度アラームが設定されていたら */
		char c = 0x20;
		int i = cnv.iUp100/10;
		if (i > 0)
			c = 0x18;	/* up allow */
		else if (i < 0) {
			c = 0x19;	/* down allow */
			i = -i;
		}
		text_put_char(10,15,c);
		text_put_char(10,16,c);
		sprintf(msgbuff,"%1d.%d",i/10,i%10);
		disp_x22_str(11,15,msgbuff);
		text_put_string(16,16,"m/s");
	} else {
		text_put_string(12,16,"- - -");
	}

/* 速度を16×16dotで表示 */
		sprintf(msgbuff,"%2d",cnv.iSpd);
		disp_x22_str(20,15,msgbuff);
		text_put_string(24,16,"Km/h");

/* 改造部分おわり */


	}

---------------------------------------------------------------------------------------------------

disp_x22_strというのは2×2のキャラクタ(16×16dot)を任意の座標に書く関数かと思います。
上昇/下降速度の表示については、garlog.cにあった表記をそのまま真似ました。

書き換えたcommon.cを上書き保存してコンパイルします。このときbmpsaverが使えるよう、gigoさんのdmcbmpsaver.zipを参考に、BMPSaver内の各ファイルを修正し、C:\WWitch\libフォルダにdmpsaver.libを生成させ、all_bmpsaver.batを使ってコンパイルします。
表示画面がこれです。(ちなみにwslogger.hのBANNER表記を、”GARMIN DATA LOGGER V0.10m-p”というふうにパラ用?を表す-pマークを付けてみました。)

この画面表示に達するために多少の紆余曲折があったものの、やりました! 大成功です。(^^)
内容を理解しないで行き当たりばったりで改造した割には上出来です。(^-^;;

早速、今日SummitとSwanを自転車に乗せてgarlogを軌跡表示画面にして走り回ってみました。
速度はちゃんと表示されました。 が、上昇/下降速度が0.0m/sのまま変わりません。
平坦な地面ばかりのせいかと思って、ちょっとした坂道を見つけて駆け下ってみましたが、やはり0.0m/sのまま。
うーん、やはりパラで飛ばないとだめかな?



目次に戻る