test

Dependencies:   mbed

Committer:
takahashi_tomoya
Date:
Fri Aug 23 04:14:06 2019 +0000
Revision:
0:9d4b535b9c8e
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
takahashi_tomoya 0:9d4b535b9c8e 1 #include "mbed.h"
takahashi_tomoya 0:9d4b535b9c8e 2
takahashi_tomoya 0:9d4b535b9c8e 3 //-------------------------------------------------------------------------
takahashi_tomoya 0:9d4b535b9c8e 4 // F-CAN 制御系(エンジンとか)
takahashi_tomoya 0:9d4b535b9c8e 5 #define VSA_091 0x091
takahashi_tomoya 0:9d4b535b9c8e 6 #define STR_156 0x156
takahashi_tomoya 0:9d4b535b9c8e 7 #define EAT_158 0x158
takahashi_tomoya 0:9d4b535b9c8e 8 #define ENG_17C 0x17C
takahashi_tomoya 0:9d4b535b9c8e 9 #define VSA_1A4 0x1A4
takahashi_tomoya 0:9d4b535b9c8e 10 #define METER_1A6 0x1A6
takahashi_tomoya 0:9d4b535b9c8e 11 #define METER_294 0x294
takahashi_tomoya 0:9d4b535b9c8e 12 #define SRS_305 0x305
takahashi_tomoya 0:9d4b535b9c8e 13 #define ENG_320 0x320
takahashi_tomoya 0:9d4b535b9c8e 14 #define ENG_324 0x324
takahashi_tomoya 0:9d4b535b9c8e 15 #define TPMS_333 0x333
takahashi_tomoya 0:9d4b535b9c8e 16 #define ENG_40C 0x40C
takahashi_tomoya 0:9d4b535b9c8e 17 #define ENG_454 0x454
takahashi_tomoya 0:9d4b535b9c8e 18
takahashi_tomoya 0:9d4b535b9c8e 19
takahashi_tomoya 0:9d4b535b9c8e 20 // B-CAN ボディ系(ドアとか)
takahashi_tomoya 0:9d4b535b9c8e 21 #define HLSW_ICU 0x0AF87010
takahashi_tomoya 0:9d4b535b9c8e 22 #define ACINFO 0x0EF95251
takahashi_tomoya 0:9d4b535b9c8e 23 #define ACSTATE 0x0EF97B51
takahashi_tomoya 0:9d4b535b9c8e 24 #define MICU_ICU 0x12F81010
takahashi_tomoya 0:9d4b535b9c8e 25 #define DOORSW_ICU 0x12F83010
takahashi_tomoya 0:9d4b535b9c8e 26 #define ASDOORSW_ICU 0x12F84010
takahashi_tomoya 0:9d4b535b9c8e 27 #define AT 0x12F85150
takahashi_tomoya 0:9d4b535b9c8e 28 #define ACHV 0x12F85851
takahashi_tomoya 0:9d4b535b9c8e 29 #define ODO_TRIP 0x12F95F50
takahashi_tomoya 0:9d4b535b9c8e 30 #define TRICOM2 0x12F96150
takahashi_tomoya 0:9d4b535b9c8e 31 #define TRICOM3 0x12F96250
takahashi_tomoya 0:9d4b535b9c8e 32 #define TRICOM4 0x12F96B50
takahashi_tomoya 0:9d4b535b9c8e 33 #define ACHTR 0x12F97051
takahashi_tomoya 0:9d4b535b9c8e 34
takahashi_tomoya 0:9d4b535b9c8e 35
takahashi_tomoya 0:9d4b535b9c8e 36 //-------------------------------------------------------------------------
takahashi_tomoya 0:9d4b535b9c8e 37 // Honda Vehicle Data Protocol
takahashi_tomoya 0:9d4b535b9c8e 38
takahashi_tomoya 0:9d4b535b9c8e 39 #define MSG_MAGIC_H 0x5E
takahashi_tomoya 0:9d4b535b9c8e 40 #define MSG_MAGIC_L 0xC0
takahashi_tomoya 0:9d4b535b9c8e 41
takahashi_tomoya 0:9d4b535b9c8e 42 #define MSG_TYPE_DEBUG_LOG 0x01
takahashi_tomoya 0:9d4b535b9c8e 43 #define MSG_TYPE_SUBSCRIBE 0x10
takahashi_tomoya 0:9d4b535b9c8e 44 #define MSG_TYPE_REPORT_CAN_DATA 0x11
takahashi_tomoya 0:9d4b535b9c8e 45 #define MSG_TYPE_SEND_CAN_DATA 0x12
takahashi_tomoya 0:9d4b535b9c8e 46 #define MSG_TYPE_ACK_CAN_DATA 0x13
takahashi_tomoya 0:9d4b535b9c8e 47 #define MSG_TYPE_SET_REAR_CAM 0x20
takahashi_tomoya 0:9d4b535b9c8e 48 #define MSG_TYPE_SET_ACTIVE_CAM 0x21
takahashi_tomoya 0:9d4b535b9c8e 49 #define MSG_TYPE_REPORT_KEY_EVENT 0x30
takahashi_tomoya 0:9d4b535b9c8e 50
takahashi_tomoya 0:9d4b535b9c8e 51 #define MSG_MIN_LEN 4 // minimum bytes of message ( contains header )
takahashi_tomoya 0:9d4b535b9c8e 52 #define MSG_SUBSCRIBE_LEN 4
takahashi_tomoya 0:9d4b535b9c8e 53
takahashi_tomoya 0:9d4b535b9c8e 54 #define MAX_RX_BYTES 16
takahashi_tomoya 0:9d4b535b9c8e 55
takahashi_tomoya 0:9d4b535b9c8e 56 char sppRxBuffer[MAX_RX_BYTES];
takahashi_tomoya 0:9d4b535b9c8e 57 char rxCnt;
takahashi_tomoya 0:9d4b535b9c8e 58
takahashi_tomoya 0:9d4b535b9c8e 59 //-------------------------------------------------------------------------
takahashi_tomoya 0:9d4b535b9c8e 60
takahashi_tomoya 0:9d4b535b9c8e 61 Ticker debugViewer;
takahashi_tomoya 0:9d4b535b9c8e 62 Ticker btSender;
takahashi_tomoya 0:9d4b535b9c8e 63 Serial bluetooth(p13,p14); // p13: TX, p14: RX (LPC1768)
takahashi_tomoya 0:9d4b535b9c8e 64
takahashi_tomoya 0:9d4b535b9c8e 65
takahashi_tomoya 0:9d4b535b9c8e 66 typedef struct CanDataTable {
takahashi_tomoya 0:9d4b535b9c8e 67 bool isUpdated:1; // turns to 1 if first data in period is received. cleared after sending.
takahashi_tomoya 0:9d4b535b9c8e 68 bool needToSend:1; // turns to 1 if data is received.
takahashi_tomoya 0:9d4b535b9c8e 69 bool hasData:1; // turns to 1 if data is received at least once.
takahashi_tomoya 0:9d4b535b9c8e 70 unsigned long id;
takahashi_tomoya 0:9d4b535b9c8e 71 unsigned char dlc;
takahashi_tomoya 0:9d4b535b9c8e 72 unsigned char data[8];
takahashi_tomoya 0:9d4b535b9c8e 73 } CanBuf_t;
takahashi_tomoya 0:9d4b535b9c8e 74
takahashi_tomoya 0:9d4b535b9c8e 75 #define MAX_DATA_FREQ 10 * 1000 // 10 sec
takahashi_tomoya 0:9d4b535b9c8e 76 #define MAX_CAN_TABLE_NUM 32
takahashi_tomoya 0:9d4b535b9c8e 77
takahashi_tomoya 0:9d4b535b9c8e 78
takahashi_tomoya 0:9d4b535b9c8e 79 class SabCan {
takahashi_tomoya 0:9d4b535b9c8e 80 private:
takahashi_tomoya 0:9d4b535b9c8e 81 Serial *serial;
takahashi_tomoya 0:9d4b535b9c8e 82
takahashi_tomoya 0:9d4b535b9c8e 83 public:
takahashi_tomoya 0:9d4b535b9c8e 84 CAN *can;
takahashi_tomoya 0:9d4b535b9c8e 85 char canTableNum;
takahashi_tomoya 0:9d4b535b9c8e 86 CanBuf_t canTableBuffer[MAX_CAN_TABLE_NUM];
takahashi_tomoya 0:9d4b535b9c8e 87 unsigned long retrievedCnt;
takahashi_tomoya 0:9d4b535b9c8e 88 int updatedCnt;
takahashi_tomoya 0:9d4b535b9c8e 89
takahashi_tomoya 0:9d4b535b9c8e 90 public:
takahashi_tomoya 0:9d4b535b9c8e 91 unsigned long canIdToIndex[MAX_CAN_TABLE_NUM];
takahashi_tomoya 0:9d4b535b9c8e 92
takahashi_tomoya 0:9d4b535b9c8e 93 public:
takahashi_tomoya 0:9d4b535b9c8e 94 SabCan( CAN *_can, int baudrate );
takahashi_tomoya 0:9d4b535b9c8e 95
takahashi_tomoya 0:9d4b535b9c8e 96 ~SabCan( void ) {}
takahashi_tomoya 0:9d4b535b9c8e 97
takahashi_tomoya 0:9d4b535b9c8e 98 void initCanTableBuffer( bool isAllClear );
takahashi_tomoya 0:9d4b535b9c8e 99 void setFilter( unsigned long id );
takahashi_tomoya 0:9d4b535b9c8e 100 void debugShow( void );
takahashi_tomoya 0:9d4b535b9c8e 101 void attach( Callback<void()> func );
takahashi_tomoya 0:9d4b535b9c8e 102
takahashi_tomoya 0:9d4b535b9c8e 103 void setSerial( Serial *serial );
takahashi_tomoya 0:9d4b535b9c8e 104 void writeToSerial( void );
takahashi_tomoya 0:9d4b535b9c8e 105 bool sendCanData( CanBuf_t *buf );
takahashi_tomoya 0:9d4b535b9c8e 106
takahashi_tomoya 0:9d4b535b9c8e 107 private:
takahashi_tomoya 0:9d4b535b9c8e 108 // void receiveCallback( void );
takahashi_tomoya 0:9d4b535b9c8e 109 };
takahashi_tomoya 0:9d4b535b9c8e 110
takahashi_tomoya 0:9d4b535b9c8e 111 // SabCan fCan(p30, p29, 500 * 1000);
takahashi_tomoya 0:9d4b535b9c8e 112 CAN _fCan(p30, p29);
takahashi_tomoya 0:9d4b535b9c8e 113 SabCan fCan( &_fCan, 500 * 1000);
takahashi_tomoya 0:9d4b535b9c8e 114 // SabCan bCan(p9, p10, 125 * 1000);
takahashi_tomoya 0:9d4b535b9c8e 115
takahashi_tomoya 0:9d4b535b9c8e 116 void receiveCallback( SabCan *can );
takahashi_tomoya 0:9d4b535b9c8e 117 void fReceiveCallback( void );
takahashi_tomoya 0:9d4b535b9c8e 118 // void bReceiveCallback( void );
takahashi_tomoya 0:9d4b535b9c8e 119
takahashi_tomoya 0:9d4b535b9c8e 120 //-------------------------------------------------------------------------
takahashi_tomoya 0:9d4b535b9c8e 121 SabCan::SabCan( CAN *_can, int baudrate )
takahashi_tomoya 0:9d4b535b9c8e 122 {
takahashi_tomoya 0:9d4b535b9c8e 123 can = _can;
takahashi_tomoya 0:9d4b535b9c8e 124 can->frequency( baudrate );
takahashi_tomoya 0:9d4b535b9c8e 125
takahashi_tomoya 0:9d4b535b9c8e 126 initCanTableBuffer( true );
takahashi_tomoya 0:9d4b535b9c8e 127
takahashi_tomoya 0:9d4b535b9c8e 128 retrievedCnt = 0;
takahashi_tomoya 0:9d4b535b9c8e 129
takahashi_tomoya 0:9d4b535b9c8e 130 }
takahashi_tomoya 0:9d4b535b9c8e 131
takahashi_tomoya 0:9d4b535b9c8e 132 //-------------------------------------------------------------------------
takahashi_tomoya 0:9d4b535b9c8e 133 void
takahashi_tomoya 0:9d4b535b9c8e 134 SabCan::initCanTableBuffer( bool isAllClear )
takahashi_tomoya 0:9d4b535b9c8e 135 {
takahashi_tomoya 0:9d4b535b9c8e 136 updatedCnt = 0;
takahashi_tomoya 0:9d4b535b9c8e 137 for ( int i = 0; i < canTableNum; i++ ) {
takahashi_tomoya 0:9d4b535b9c8e 138 CanBuf_t *buf = &canTableBuffer[i];
takahashi_tomoya 0:9d4b535b9c8e 139 buf->id = canIdToIndex[i];
takahashi_tomoya 0:9d4b535b9c8e 140 if ( isAllClear ) {
takahashi_tomoya 0:9d4b535b9c8e 141 buf->isUpdated = buf->needToSend = buf->hasData = 0;
takahashi_tomoya 0:9d4b535b9c8e 142 } else {
takahashi_tomoya 0:9d4b535b9c8e 143 buf->isUpdated = buf->needToSend = buf->hasData;
takahashi_tomoya 0:9d4b535b9c8e 144 updatedCnt += (buf->hasData == true) ? 1 : 0;
takahashi_tomoya 0:9d4b535b9c8e 145 }
takahashi_tomoya 0:9d4b535b9c8e 146 }
takahashi_tomoya 0:9d4b535b9c8e 147 }
takahashi_tomoya 0:9d4b535b9c8e 148
takahashi_tomoya 0:9d4b535b9c8e 149 //-------------------------------------------------------------------------
takahashi_tomoya 0:9d4b535b9c8e 150 void
takahashi_tomoya 0:9d4b535b9c8e 151 SabCan::setFilter( unsigned long id )
takahashi_tomoya 0:9d4b535b9c8e 152 {
takahashi_tomoya 0:9d4b535b9c8e 153 canIdToIndex[canTableNum++] = id;
takahashi_tomoya 0:9d4b535b9c8e 154 can->filter( id, 0 );
takahashi_tomoya 0:9d4b535b9c8e 155 }
takahashi_tomoya 0:9d4b535b9c8e 156
takahashi_tomoya 0:9d4b535b9c8e 157 //-------------------------------------------------------------------------
takahashi_tomoya 0:9d4b535b9c8e 158 void
takahashi_tomoya 0:9d4b535b9c8e 159 SabCan::attach( Callback<void()> func )
takahashi_tomoya 0:9d4b535b9c8e 160 {
takahashi_tomoya 0:9d4b535b9c8e 161 can->attach(func);
takahashi_tomoya 0:9d4b535b9c8e 162 }
takahashi_tomoya 0:9d4b535b9c8e 163
takahashi_tomoya 0:9d4b535b9c8e 164 //-------------------------------------------------------------------------
takahashi_tomoya 0:9d4b535b9c8e 165 void
takahashi_tomoya 0:9d4b535b9c8e 166 fcanCb( void )
takahashi_tomoya 0:9d4b535b9c8e 167 {
takahashi_tomoya 0:9d4b535b9c8e 168 receiveCallback( &fCan );
takahashi_tomoya 0:9d4b535b9c8e 169 }
takahashi_tomoya 0:9d4b535b9c8e 170
takahashi_tomoya 0:9d4b535b9c8e 171 //-------------------------------------------------------------------------
takahashi_tomoya 0:9d4b535b9c8e 172 void
takahashi_tomoya 0:9d4b535b9c8e 173 receiveCallback( SabCan *can )
takahashi_tomoya 0:9d4b535b9c8e 174 {
takahashi_tomoya 0:9d4b535b9c8e 175 CANMessage msg;
takahashi_tomoya 0:9d4b535b9c8e 176
takahashi_tomoya 0:9d4b535b9c8e 177 can->can->read(msg);
takahashi_tomoya 0:9d4b535b9c8e 178 if ( msg.id == ENG_17C ) {
takahashi_tomoya 0:9d4b535b9c8e 179 can->retrievedCnt++;
takahashi_tomoya 0:9d4b535b9c8e 180 }
takahashi_tomoya 0:9d4b535b9c8e 181
takahashi_tomoya 0:9d4b535b9c8e 182 for ( int i = 0; i < can->canTableNum; i++ ) {
takahashi_tomoya 0:9d4b535b9c8e 183 if ( msg.id == can->canIdToIndex[i] ) {
takahashi_tomoya 0:9d4b535b9c8e 184 CanBuf_t *buf = &can->canTableBuffer[i];
takahashi_tomoya 0:9d4b535b9c8e 185
takahashi_tomoya 0:9d4b535b9c8e 186 // copy data
takahashi_tomoya 0:9d4b535b9c8e 187 for ( int j = 0; j < msg.len; j++ ) {
takahashi_tomoya 0:9d4b535b9c8e 188 if ( buf->data[j] != msg.data[j] ) {
takahashi_tomoya 0:9d4b535b9c8e 189 buf->needToSend = true;
takahashi_tomoya 0:9d4b535b9c8e 190 buf->data[j] = msg.data[j];
takahashi_tomoya 0:9d4b535b9c8e 191 }
takahashi_tomoya 0:9d4b535b9c8e 192 }
takahashi_tomoya 0:9d4b535b9c8e 193 if ( buf->isUpdated || !(buf->needToSend) ) {
takahashi_tomoya 0:9d4b535b9c8e 194 break;
takahashi_tomoya 0:9d4b535b9c8e 195 }
takahashi_tomoya 0:9d4b535b9c8e 196 can->updatedCnt++;
takahashi_tomoya 0:9d4b535b9c8e 197 buf->isUpdated = true;
takahashi_tomoya 0:9d4b535b9c8e 198
takahashi_tomoya 0:9d4b535b9c8e 199 if ( !buf->hasData ) {
takahashi_tomoya 0:9d4b535b9c8e 200 buf->dlc = msg.len;
takahashi_tomoya 0:9d4b535b9c8e 201 buf->hasData = true;
takahashi_tomoya 0:9d4b535b9c8e 202 }
takahashi_tomoya 0:9d4b535b9c8e 203 break;
takahashi_tomoya 0:9d4b535b9c8e 204 }
takahashi_tomoya 0:9d4b535b9c8e 205 }
takahashi_tomoya 0:9d4b535b9c8e 206 }
takahashi_tomoya 0:9d4b535b9c8e 207
takahashi_tomoya 0:9d4b535b9c8e 208 //-------------------------------------------------------------------------
takahashi_tomoya 0:9d4b535b9c8e 209 void
takahashi_tomoya 0:9d4b535b9c8e 210 SabCan::setSerial( Serial *_serial )
takahashi_tomoya 0:9d4b535b9c8e 211 {
takahashi_tomoya 0:9d4b535b9c8e 212 serial = _serial;
takahashi_tomoya 0:9d4b535b9c8e 213 }
takahashi_tomoya 0:9d4b535b9c8e 214
takahashi_tomoya 0:9d4b535b9c8e 215 //-------------------------------------------------------------------------
takahashi_tomoya 0:9d4b535b9c8e 216 bool
takahashi_tomoya 0:9d4b535b9c8e 217 SabCan::sendCanData( CanBuf_t *buf )
takahashi_tomoya 0:9d4b535b9c8e 218 {
takahashi_tomoya 0:9d4b535b9c8e 219
takahashi_tomoya 0:9d4b535b9c8e 220 if ( buf->needToSend ) {
takahashi_tomoya 0:9d4b535b9c8e 221 #ifndef DRY_RUN
takahashi_tomoya 0:9d4b535b9c8e 222 serial->putc( (buf->id >> 24) & 0xFF );
takahashi_tomoya 0:9d4b535b9c8e 223 serial->putc( (buf->id >> 16) & 0xFF );
takahashi_tomoya 0:9d4b535b9c8e 224 serial->putc( (buf->id >> 8) & 0xFF );
takahashi_tomoya 0:9d4b535b9c8e 225 serial->putc( buf->id & 0xFF );
takahashi_tomoya 0:9d4b535b9c8e 226
takahashi_tomoya 0:9d4b535b9c8e 227 serial->putc( buf->dlc );
takahashi_tomoya 0:9d4b535b9c8e 228 for ( int i = 0; i < buf->dlc; i++ ) {
takahashi_tomoya 0:9d4b535b9c8e 229 serial->putc( buf->data[i] );
takahashi_tomoya 0:9d4b535b9c8e 230 }
takahashi_tomoya 0:9d4b535b9c8e 231 #endif // DRY_RUN
takahashi_tomoya 0:9d4b535b9c8e 232
takahashi_tomoya 0:9d4b535b9c8e 233 buf->needToSend = false;
takahashi_tomoya 0:9d4b535b9c8e 234 buf->isUpdated = false;
takahashi_tomoya 0:9d4b535b9c8e 235 return true;
takahashi_tomoya 0:9d4b535b9c8e 236 } else {
takahashi_tomoya 0:9d4b535b9c8e 237 return false;
takahashi_tomoya 0:9d4b535b9c8e 238 }
takahashi_tomoya 0:9d4b535b9c8e 239 }
takahashi_tomoya 0:9d4b535b9c8e 240
takahashi_tomoya 0:9d4b535b9c8e 241 //-------------------------------------------------------------------------
takahashi_tomoya 0:9d4b535b9c8e 242 void
takahashi_tomoya 0:9d4b535b9c8e 243 SabCan::writeToSerial( void )
takahashi_tomoya 0:9d4b535b9c8e 244 {
takahashi_tomoya 0:9d4b535b9c8e 245 #if 0
takahashi_tomoya 0:9d4b535b9c8e 246 if ( !serial ) {
takahashi_tomoya 0:9d4b535b9c8e 247 return;
takahashi_tomoya 0:9d4b535b9c8e 248 }
takahashi_tomoya 0:9d4b535b9c8e 249
takahashi_tomoya 0:9d4b535b9c8e 250 for ( int i = 0; i < canTableNum; i++ ) {
takahashi_tomoya 0:9d4b535b9c8e 251 CanBuf_t *buf = &canTableBuffer[i];
takahashi_tomoya 0:9d4b535b9c8e 252
takahashi_tomoya 0:9d4b535b9c8e 253 if ( buf->needToSend ) {
takahashi_tomoya 0:9d4b535b9c8e 254 serial->printf( "%X : %d : [", buf->id, buf->dlc );
takahashi_tomoya 0:9d4b535b9c8e 255 for ( int j = 0; j < buf->dlc; j++ ) {
takahashi_tomoya 0:9d4b535b9c8e 256 serial->printf( "%02X ", buf->data[j] );
takahashi_tomoya 0:9d4b535b9c8e 257 }
takahashi_tomoya 0:9d4b535b9c8e 258 serial->printf( "]\n" );
takahashi_tomoya 0:9d4b535b9c8e 259 buf->needToSend = false;
takahashi_tomoya 0:9d4b535b9c8e 260 buf->isUpdated = false;
takahashi_tomoya 0:9d4b535b9c8e 261 }
takahashi_tomoya 0:9d4b535b9c8e 262 }
takahashi_tomoya 0:9d4b535b9c8e 263 #endif
takahashi_tomoya 0:9d4b535b9c8e 264 int sent = 0;
takahashi_tomoya 0:9d4b535b9c8e 265 unsigned long curTime = 0;
takahashi_tomoya 0:9d4b535b9c8e 266
takahashi_tomoya 0:9d4b535b9c8e 267 #ifndef DRY_RUN
takahashi_tomoya 0:9d4b535b9c8e 268 // magic
takahashi_tomoya 0:9d4b535b9c8e 269 serial->putc( MSG_MAGIC_H );
takahashi_tomoya 0:9d4b535b9c8e 270 serial->putc( MSG_MAGIC_L );
takahashi_tomoya 0:9d4b535b9c8e 271
takahashi_tomoya 0:9d4b535b9c8e 272 // message type
takahashi_tomoya 0:9d4b535b9c8e 273 serial->putc( MSG_TYPE_REPORT_CAN_DATA );
takahashi_tomoya 0:9d4b535b9c8e 274
takahashi_tomoya 0:9d4b535b9c8e 275 // reception time
takahashi_tomoya 0:9d4b535b9c8e 276 serial->putc( (unsigned char) 0 );
takahashi_tomoya 0:9d4b535b9c8e 277 serial->putc( (unsigned char) 0 );
takahashi_tomoya 0:9d4b535b9c8e 278 serial->putc( (unsigned char) 0 );
takahashi_tomoya 0:9d4b535b9c8e 279 serial->putc( (unsigned char) 0 );
takahashi_tomoya 0:9d4b535b9c8e 280 serial->putc( (curTime >> 24) & 0xFF );
takahashi_tomoya 0:9d4b535b9c8e 281 serial->putc( (curTime >> 16) & 0xFF );
takahashi_tomoya 0:9d4b535b9c8e 282 serial->putc( (curTime >> 8) & 0xFF );
takahashi_tomoya 0:9d4b535b9c8e 283 serial->putc( curTime & 0xFF );
takahashi_tomoya 0:9d4b535b9c8e 284
takahashi_tomoya 0:9d4b535b9c8e 285 // # of frames
takahashi_tomoya 0:9d4b535b9c8e 286 serial->putc( (unsigned char) 0 );
takahashi_tomoya 0:9d4b535b9c8e 287 serial->putc( updatedCnt );
takahashi_tomoya 0:9d4b535b9c8e 288 #endif // DRY_RUN
takahashi_tomoya 0:9d4b535b9c8e 289
takahashi_tomoya 0:9d4b535b9c8e 290 for ( int i = 0; i < canTableNum; i++ ) {
takahashi_tomoya 0:9d4b535b9c8e 291 if ( sendCanData( &canTableBuffer[i] ) ) {
takahashi_tomoya 0:9d4b535b9c8e 292 sent++;
takahashi_tomoya 0:9d4b535b9c8e 293 }
takahashi_tomoya 0:9d4b535b9c8e 294 }
takahashi_tomoya 0:9d4b535b9c8e 295 }
takahashi_tomoya 0:9d4b535b9c8e 296
takahashi_tomoya 0:9d4b535b9c8e 297 //-------------------------------------------------------------------------
takahashi_tomoya 0:9d4b535b9c8e 298 void
takahashi_tomoya 0:9d4b535b9c8e 299 SabCan::debugShow( void )
takahashi_tomoya 0:9d4b535b9c8e 300 {
takahashi_tomoya 0:9d4b535b9c8e 301 printf( "# of updated : %d\n", updatedCnt );
takahashi_tomoya 0:9d4b535b9c8e 302 printf( "# of retrieved : %lu\n", retrievedCnt );
takahashi_tomoya 0:9d4b535b9c8e 303 printf( "# of rd error : %d\n", can->rderror() );
takahashi_tomoya 0:9d4b535b9c8e 304 retrievedCnt = 0;
takahashi_tomoya 0:9d4b535b9c8e 305 for ( int i = 0; i < canTableNum; i++ ) {
takahashi_tomoya 0:9d4b535b9c8e 306 CanBuf_t *buf = &canTableBuffer[i];
takahashi_tomoya 0:9d4b535b9c8e 307 printf( "%lu : %d : [", buf->id, buf->dlc );
takahashi_tomoya 0:9d4b535b9c8e 308 for ( int j = 0; j < buf->dlc; j++ ) {
takahashi_tomoya 0:9d4b535b9c8e 309 printf( "%02X ", buf->data[j] );
takahashi_tomoya 0:9d4b535b9c8e 310 }
takahashi_tomoya 0:9d4b535b9c8e 311 printf( "]\n" );
takahashi_tomoya 0:9d4b535b9c8e 312 }
takahashi_tomoya 0:9d4b535b9c8e 313 }
takahashi_tomoya 0:9d4b535b9c8e 314
takahashi_tomoya 0:9d4b535b9c8e 315 #if 0
takahashi_tomoya 0:9d4b535b9c8e 316 //-------------------------------------------------------------------------
takahashi_tomoya 0:9d4b535b9c8e 317 void
takahashi_tomoya 0:9d4b535b9c8e 318 btCallback( void )
takahashi_tomoya 0:9d4b535b9c8e 319 {
takahashi_tomoya 0:9d4b535b9c8e 320 for ( int i = 0; i < fCanTableNum; i++ ) {
takahashi_tomoya 0:9d4b535b9c8e 321 CanBuf_t *buf = &fCanTableBuffer[i];
takahashi_tomoya 0:9d4b535b9c8e 322 if ( buf->needToSend ) {
takahashi_tomoya 0:9d4b535b9c8e 323 bluetooth.printf( "%X : %d : [", buf->id, buf->dlc );
takahashi_tomoya 0:9d4b535b9c8e 324 for ( int j = 0; j < buf->dlc; j++ ) {
takahashi_tomoya 0:9d4b535b9c8e 325 bluetooth.printf( "%02X ", buf->data[j] );
takahashi_tomoya 0:9d4b535b9c8e 326 }
takahashi_tomoya 0:9d4b535b9c8e 327 bluetooth.printf( "]\n" );
takahashi_tomoya 0:9d4b535b9c8e 328 buf->needToSend = false;
takahashi_tomoya 0:9d4b535b9c8e 329 buf->isUpdated = false;
takahashi_tomoya 0:9d4b535b9c8e 330 }
takahashi_tomoya 0:9d4b535b9c8e 331 }
takahashi_tomoya 0:9d4b535b9c8e 332 for ( int i = 0; i < bCanTableNum; i++ ) {
takahashi_tomoya 0:9d4b535b9c8e 333 CanBuf_t *buf = &bCanTableBuffer[i];
takahashi_tomoya 0:9d4b535b9c8e 334 if ( buf->needToSend ) {
takahashi_tomoya 0:9d4b535b9c8e 335 bluetooth.printf( "%X : %d : [", buf->id, buf->dlc );
takahashi_tomoya 0:9d4b535b9c8e 336 for ( int j = 0; j < buf->dlc; j++ ) {
takahashi_tomoya 0:9d4b535b9c8e 337 bluetooth.printf( "%02X ", buf->data[j] );
takahashi_tomoya 0:9d4b535b9c8e 338 }
takahashi_tomoya 0:9d4b535b9c8e 339 bluetooth.printf( "]\n" );
takahashi_tomoya 0:9d4b535b9c8e 340 buf->needToSend = false;
takahashi_tomoya 0:9d4b535b9c8e 341 buf->isUpdated = false;
takahashi_tomoya 0:9d4b535b9c8e 342 }
takahashi_tomoya 0:9d4b535b9c8e 343 }
takahashi_tomoya 0:9d4b535b9c8e 344 }
takahashi_tomoya 0:9d4b535b9c8e 345 #endif
takahashi_tomoya 0:9d4b535b9c8e 346
takahashi_tomoya 0:9d4b535b9c8e 347 //-------------------------------------------------------------------------
takahashi_tomoya 0:9d4b535b9c8e 348 int
takahashi_tomoya 0:9d4b535b9c8e 349 main( void )
takahashi_tomoya 0:9d4b535b9c8e 350 {
takahashi_tomoya 0:9d4b535b9c8e 351 printf("main()\n");
takahashi_tomoya 0:9d4b535b9c8e 352 CANMessage msg;
takahashi_tomoya 0:9d4b535b9c8e 353
takahashi_tomoya 0:9d4b535b9c8e 354 // bCan.frequency(125 * 1000);
takahashi_tomoya 0:9d4b535b9c8e 355 #if 0
takahashi_tomoya 0:9d4b535b9c8e 356 LPC_CAN1->MOD |= 1; // Disble CAN controller
takahashi_tomoya 0:9d4b535b9c8e 357 LPC_CAN1->MOD |= (1 << 1); // Put into listen only mode
takahashi_tomoya 0:9d4b535b9c8e 358 LPC_CAN1->MOD &= ~(1); // Re-enable CAN controller
takahashi_tomoya 0:9d4b535b9c8e 359 #endif
takahashi_tomoya 0:9d4b535b9c8e 360
takahashi_tomoya 0:9d4b535b9c8e 361 // Initialize index table
takahashi_tomoya 0:9d4b535b9c8e 362 fCan.setFilter( VSA_091 );
takahashi_tomoya 0:9d4b535b9c8e 363 fCan.setFilter( STR_156 );
takahashi_tomoya 0:9d4b535b9c8e 364 fCan.setFilter( EAT_158 );
takahashi_tomoya 0:9d4b535b9c8e 365 fCan.setFilter( ENG_17C );
takahashi_tomoya 0:9d4b535b9c8e 366 fCan.setFilter( VSA_1A4 );
takahashi_tomoya 0:9d4b535b9c8e 367 fCan.setFilter( METER_1A6 );
takahashi_tomoya 0:9d4b535b9c8e 368 fCan.setFilter( METER_294 );
takahashi_tomoya 0:9d4b535b9c8e 369 fCan.setFilter( SRS_305 );
takahashi_tomoya 0:9d4b535b9c8e 370 fCan.setFilter( ENG_320 );
takahashi_tomoya 0:9d4b535b9c8e 371 fCan.setFilter( ENG_324 );
takahashi_tomoya 0:9d4b535b9c8e 372 fCan.setFilter( TPMS_333 );
takahashi_tomoya 0:9d4b535b9c8e 373 fCan.setFilter( ENG_40C );
takahashi_tomoya 0:9d4b535b9c8e 374 fCan.setFilter( ENG_454 );
takahashi_tomoya 0:9d4b535b9c8e 375
takahashi_tomoya 0:9d4b535b9c8e 376 fCan.attach( fcanCb );
takahashi_tomoya 0:9d4b535b9c8e 377 fCan.setSerial( &bluetooth );
takahashi_tomoya 0:9d4b535b9c8e 378
takahashi_tomoya 0:9d4b535b9c8e 379 #if 0
takahashi_tomoya 0:9d4b535b9c8e 380 bCanIdToIndex[bCanTableNum++] = HLSW_ICU;
takahashi_tomoya 0:9d4b535b9c8e 381 bCanIdToIndex[bCanTableNum++] = ACINFO;
takahashi_tomoya 0:9d4b535b9c8e 382 bCanIdToIndex[bCanTableNum++] = ACSTATE;
takahashi_tomoya 0:9d4b535b9c8e 383 bCanIdToIndex[bCanTableNum++] = MICU_ICU;
takahashi_tomoya 0:9d4b535b9c8e 384 bCanIdToIndex[bCanTableNum++] = DOORSW_ICU;
takahashi_tomoya 0:9d4b535b9c8e 385 bCanIdToIndex[bCanTableNum++] = ASDOORSW_ICU;
takahashi_tomoya 0:9d4b535b9c8e 386 bCanIdToIndex[bCanTableNum++] = AT;
takahashi_tomoya 0:9d4b535b9c8e 387 bCanIdToIndex[bCanTableNum++] = ACHTR;
takahashi_tomoya 0:9d4b535b9c8e 388 bCanIdToIndex[bCanTableNum++] = ODO_TRIP;
takahashi_tomoya 0:9d4b535b9c8e 389 bCanIdToIndex[bCanTableNum++] = ACHV;
takahashi_tomoya 0:9d4b535b9c8e 390 bCanIdToIndex[bCanTableNum++] = TRICOM2;
takahashi_tomoya 0:9d4b535b9c8e 391 bCanIdToIndex[bCanTableNum++] = TRICOM3;
takahashi_tomoya 0:9d4b535b9c8e 392 bCanIdToIndex[bCanTableNum++] = TRICOM4;
takahashi_tomoya 0:9d4b535b9c8e 393 bCanIdToIndex[bCanTableNum++] = ACHTR;
takahashi_tomoya 0:9d4b535b9c8e 394 #endif
takahashi_tomoya 0:9d4b535b9c8e 395
takahashi_tomoya 0:9d4b535b9c8e 396 // bCan.attach(&bCanCallback);
takahashi_tomoya 0:9d4b535b9c8e 397
takahashi_tomoya 0:9d4b535b9c8e 398 while ( 1 ) {
takahashi_tomoya 0:9d4b535b9c8e 399 static int cnt;
takahashi_tomoya 0:9d4b535b9c8e 400 fCan.writeToSerial();
takahashi_tomoya 0:9d4b535b9c8e 401 wait( 0.1 );
takahashi_tomoya 0:9d4b535b9c8e 402
takahashi_tomoya 0:9d4b535b9c8e 403 if ( (cnt % 20) == 0 ) {
takahashi_tomoya 0:9d4b535b9c8e 404 fCan.debugShow();
takahashi_tomoya 0:9d4b535b9c8e 405 }
takahashi_tomoya 0:9d4b535b9c8e 406 }
takahashi_tomoya 0:9d4b535b9c8e 407 }