tomoya takahashi
/
mbed_work
test
main.cpp@0:9d4b535b9c8e, 2019-08-23 (annotated)
- Committer:
- takahashi_tomoya
- Date:
- Fri Aug 23 04:14:06 2019 +0000
- Revision:
- 0:9d4b535b9c8e
test
Who changed what in which revision?
User | Revision | Line number | New 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 | } |