
データ構造 | |
| struct | EXTMETER |
マクロ定義 | |
| #define | EXTMETER_SETTING (0) |
| #define | EXTMETER_SPEED (1) |
| #define | EXTMETER_ENGINE (2) |
| #define | EXTMETER_BOOST (3) |
| #define | EXTMETER_THROTTLE (4) |
| #define | EXTMETER_COOLANT (5) |
| #define | EXTMETER_INTAKEAIR (6) |
| #define | EXTMETER_DIV 16 |
型定義 | |
| typedef struct EXTMETER | EXTMETER_T |
| typedef EXTMETER_T * | pEXTMETER_T |
関数 | |
| void | EXTMETER_init (unsigned char target) |
| BOOL | EXTMETER_main (void) |
変数 | |
| EXTMETER_T | extmeter |
| #define EXTMETER_BOOST (3) |
extmeter.h の 25 行で定義されています。
参照元 EXTMETER_init(), EXTMETER_main(), と main().
| #define EXTMETER_COOLANT (5) |
extmeter.h の 27 行で定義されています。
参照元 EXTMETER_init(), と EXTMETER_main().
| #define EXTMETER_DIV 16 |
extmeter.h の 30 行で定義されています。
| #define EXTMETER_ENGINE (2) |
extmeter.h の 24 行で定義されています。
参照元 EXTMETER_init(), と EXTMETER_main().
| #define EXTMETER_INTAKEAIR (6) |
extmeter.h の 28 行で定義されています。
参照元 EXTMETER_init(), と EXTMETER_main().
| #define EXTMETER_SETTING (0) |
extmeter.h の 22 行で定義されています。
参照元 EXTMETER_main().
| #define EXTMETER_SPEED (1) |
extmeter.h の 23 行で定義されています。
参照元 EXTMETER_init(), と EXTMETER_main().
| #define EXTMETER_THROTTLE (4) |
extmeter.h の 26 行で定義されています。
参照元 EXTMETER_init(), と EXTMETER_main().
| typedef struct EXTMETER EXTMETER_T |
| typedef EXTMETER_T* pEXTMETER_T |
extmeter.h の 41 行で定義されています。
| void EXTMETER_init | ( | unsigned char | target | ) |
extmeter.c の 51 行で定義されています。
参照先 EXTMETER_BOOST, EXTMETER_COOLANT, EXTMETER_ENGINE, EXTMETER_INTAKEAIR, EXTMETER_SPEED, EXTMETER_THROTTLE, EXTMETER::map, と EXTMETER::target.
参照元 main().
{
extmeter.target = target;
/* extmeter.mapを 2次元配列にする方法もあるが... */
switch(target){
case EXTMETER_SPEED:
extmeter.map[ 0 ] = 0;
extmeter.map[ 1 ] = 12;
extmeter.map[ 2 ] = 24;
extmeter.map[ 3 ] = 36;
extmeter.map[ 4 ] = 48;
extmeter.map[ 5 ] = 60;
extmeter.map[ 6 ] = 72;
extmeter.map[ 7 ] = 84;
extmeter.map[ 8 ] = 96;
extmeter.map[ 9 ] = 108;
extmeter.map[ 10 ] = 120;
extmeter.map[ 11 ] = 132;
extmeter.map[ 12 ] = 144;
extmeter.map[ 13 ] = 156;
extmeter.map[ 14 ] = 168;
extmeter.map[ 15 ] = 180;
break;
case EXTMETER_ENGINE:
extmeter.map[ 0 ] = 0;
extmeter.map[ 1 ] = 600;
extmeter.map[ 2 ] = 1200;
extmeter.map[ 3 ] = 2800;
extmeter.map[ 4 ] = 3400;
extmeter.map[ 5 ] = 4000;
extmeter.map[ 6 ] = 4600;
extmeter.map[ 7 ] = 5200;
extmeter.map[ 8 ] = 5800;
extmeter.map[ 9 ] = 6400;
extmeter.map[ 10 ] = 7000;
extmeter.map[ 11 ] = 7600;
extmeter.map[ 12 ] = 8200;
extmeter.map[ 13 ] = 8800;
extmeter.map[ 14 ] = 9400;
extmeter.map[ 15 ] = 10000;
break;
case EXTMETER_BOOST:
extmeter.map[ 0 ] = -1.000;
extmeter.map[ 1 ] = -0.900;
extmeter.map[ 2 ] = -0.700;
extmeter.map[ 3 ] = -0.500;
extmeter.map[ 4 ] = -0.300;
extmeter.map[ 5 ] = -0.180;
extmeter.map[ 6 ] = -0.000;
extmeter.map[ 7 ] = 0.200;
extmeter.map[ 8 ] = 0.350;
extmeter.map[ 9 ] = 0.510;
extmeter.map[ 10 ] = 0.700;
extmeter.map[ 11 ] = 0.900;
extmeter.map[ 12 ] = 1.050;
extmeter.map[ 13 ] = 1.200;
extmeter.map[ 14 ] = 1.400;
extmeter.map[ 15 ] = 1.600;
break;
case EXTMETER_THROTTLE:
extmeter.map[ 0 ] = 00;
extmeter.map[ 1 ] = 6.60;
extmeter.map[ 2 ] = 13.20;
extmeter.map[ 3 ] = 19.80;
extmeter.map[ 4 ] = 26.40;
extmeter.map[ 5 ] = 33.00;
extmeter.map[ 6 ] = 39.60;
extmeter.map[ 7 ] = 46.20;
extmeter.map[ 8 ] = 52.80;
extmeter.map[ 9 ] = 59.40;
extmeter.map[ 10 ] = 66.00;
extmeter.map[ 11 ] = 72.60;
extmeter.map[ 12 ] = 79.20;
extmeter.map[ 13 ] = 85.80;
extmeter.map[ 14 ] = 92.40;
extmeter.map[ 15 ] = 100.00;
break;
case EXTMETER_COOLANT:
case EXTMETER_INTAKEAIR:
default:
extmeter.map[ 0 ] = -40;
extmeter.map[ 1 ] = -28;
extmeter.map[ 2 ] = -16;
extmeter.map[ 3 ] = -4;
extmeter.map[ 4 ] = 8;
extmeter.map[ 5 ] = 20;
extmeter.map[ 6 ] = 32;
extmeter.map[ 7 ] = 44;
extmeter.map[ 8 ] = 56;
extmeter.map[ 9 ] = 68;
extmeter.map[ 10 ] = 80;
extmeter.map[ 11 ] = 92;
extmeter.map[ 12 ] = 104;
extmeter.map[ 13 ] = 116;
extmeter.map[ 14 ] = 128;
extmeter.map[ 15 ] = 140;
break;
}
return;
}

| BOOL EXTMETER_main | ( | void | ) |
extmeter.c の 165 行で定義されています。
参照先 SSM_DATA::boost, SSM_DATA::coolant, DAC_setvalue(), SSM_DATA::engine, EXTMETER_BOOST, EXTMETER_COOLANT, EXTMETER_ENGINE, EXTMETER_INTAKEAIR, EXTMETER_SETTING, EXTMETER_SPEED, EXTMETER_THROTTLE, SSM_DATA::intakeair, EXTMETER::map, EXTMETER::setting, SSM_DATA::speed, ssm_data, EXTMETER::target, SSM_DATA::throttle, と TRUE.
参照元 main().
{
unsigned int i;
double data;
/* 出力するデータを選ぶ */
switch(extmeter.target){
case EXTMETER_SETTING: DAC_setvalue(extmeter.setting); return(TRUE);
case EXTMETER_SPEED: data = ssm_data.speed; break;
case EXTMETER_ENGINE: data = ssm_data.engine; break;
case EXTMETER_BOOST: data = ssm_data.boost; break;
case EXTMETER_THROTTLE: data = ssm_data.throttle; break;
case EXTMETER_COOLANT: data = ssm_data.coolant; break;
case EXTMETER_INTAKEAIR: data = ssm_data.intakeair; break;
default: break;
}
/*
ssm_data.boost += 0.00001;
if(ssm_data.boost > 2.0) ssm_data.boost = -1.1;
*/
/* マップから出力値を選ぶ */
for(i = 1; i < EXTMETER_DIV; i++){
if(extmeter.map[i - 1] <= data && data < extmeter.map[i]){
DAC_setvalue(((i << 4) & 0xf0) | ((unsigned char)(((data - extmeter.map[i - 1]) / (extmeter.map[i] - extmeter.map[i - 1])) * EXTMETER_DIV) & 0x0f));
}
}
#if 0
/* マップより小さいとき */
if(extmeter.map[0] > data){
DAC_setvalue(0x00);
/* マップより大きいとき */
} else if (extmeter.map[15] < data){
DAC_setvalue(0xff);
/* それ以外 */
} else {
/* 探索する */
for(i = 1; i < EXTMETER_DIV; i++){
if(extmeter.map[i - 1] <= data && data < extmeter.map[i]){
DAC_setvalue((((i - 1) << 4) & 0xf0) | ((unsigned char)(((data - extmeter.map[i - 1]) / (extmeter.map[i] - extmeter.map[i - 1])) * EXTMETER_DIV) & 0x0f));
}
}
}
#endif
return(TRUE);
}


extmeter.c の 40 行で定義されています。
1.7.1