Rev 2200 | Details | Compare with Previous | Last modification | View Log | SVN | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 1922 | arune | 1 | |
| 2 | #include "sns_rfTransceive.h" |
||
| 3 | |||
| 1996 | arune | 4 | #if IR_RX_ENABLE==1 |
| 1922 | arune | 5 | StdCan_Msg_t rfTxMsg; |
| 6 | uint8_t rfRxChannel_newData; |
||
| 2199 | arune | 7 | uint8_t rfRxChannel_len; |
| 8 | uint8_t rfRxChannel_index; |
||
| 1922 | arune | 9 | uint8_t rfRxChannel_state; |
| 10 | Ir_Protocol_Data_t rfRxChannel_proto; |
||
| 1927 | arune | 11 | uint16_t rfRxChannel_buf[MAX_NR_TIMES]; |
| 1922 | arune | 12 | |
| 2198 | arune | 13 | void sns_rfTransceive_RX_done_callback(uint8_t channel, uint16_t *buffer, uint8_t len, uint8_t index) |
| 1922 | arune | 14 | { |
| 2198 | arune | 15 | #if IR_RX_CONTINUOUS_MODE==0 |
| 1922 | arune | 16 | rfRxChannel_newData = TRUE; |
| 2199 | arune | 17 | rfRxChannel_len = len; |
| 2198 | arune | 18 | #else |
| 19 | if (len > sns_rfTransceive_MIN_NUM_PULSES) |
||
| 20 | { |
||
| 21 | rfRxChannel_newData = TRUE; |
||
| 2199 | arune | 22 | rfRxChannel_len = len; |
| 23 | rfRxChannel_index = index; |
||
| 2200 | arune | 24 | //gpio_set_pin(EXP_B); |
| 2198 | arune | 25 | } |
| 26 | #endif |
||
| 1922 | arune | 27 | } |
| 28 | #endif |
||
| 29 | |||
| 30 | |||
| 31 | #if IR_TX_ENABLE==1 |
||
| 1927 | arune | 32 | uint8_t rfTxChannel_sendComplete; |
| 33 | uint8_t rfTxChannel_state; |
||
| 2199 | arune | 34 | uint8_t rfTxChannel_len; |
| 1927 | arune | 35 | Ir_Protocol_Data_t rfTxChannel_proto; |
| 36 | uint16_t rfTxChannel_buf[MAX_NR_TIMES]; |
||
| 37 | uint8_t rfTxChannel_repeatCount; |
||
| 38 | uint8_t rfTxChannel_stopSend; |
||
| 39 | |||
| 1922 | arune | 40 | void sns_rfTransceive_TX_done_callback(uint8_t channel) |
| 41 | { |
||
| 42 | rfTxChannel_sendComplete = TRUE; |
||
| 43 | } |
||
| 44 | #endif |
||
| 45 | |||
| 46 | void sns_rfTransceive_Init(void) |
||
| 47 | { |
||
| 1996 | arune | 48 | #if IR_RX_ENABLE==1 |
| 1922 | arune | 49 | StdCan_Set_class(rfTxMsg.Header, CAN_MODULE_CLASS_SNS); |
| 50 | StdCan_Set_direction(rfTxMsg.Header, DIRECTIONFLAG_FROM_OWNER); |
||
| 51 | rfTxMsg.Header.ModuleType = CAN_MODULE_TYPE_SNS_RFTRANSCEIVE; |
||
| 52 | rfTxMsg.Header.ModuleId = sns_rfTransceive_ID; |
||
| 1996 | arune | 53 | rfTxMsg.Header.Command = CAN_MODULE_CMD_PHYSICAL_IR; |
| 1922 | arune | 54 | rfTxMsg.Length = 8; |
| 55 | |||
| 56 | rfRxChannel_newData = FALSE; |
||
| 2199 | arune | 57 | rfRxChannel_len = 0; |
| 1922 | arune | 58 | rfRxChannel_proto.timeout=0; |
| 59 | rfRxChannel_proto.data=0; |
||
| 60 | rfRxChannel_proto.repeats=0; |
||
| 61 | rfRxChannel_proto.protocol=0; |
||
| 1927 | arune | 62 | #endif |
| 63 | |||
| 64 | #if IR_TX_ENABLE==1 |
||
| 1922 | arune | 65 | rfTxChannel_sendComplete = FALSE; |
| 2199 | arune | 66 | rfTxChannel_len = 0; |
| 1922 | arune | 67 | rfTxChannel_proto.data=0; |
| 68 | rfTxChannel_proto.repeats=0; |
||
| 69 | rfTxChannel_proto.framecnt=0; |
||
| 70 | rfTxChannel_proto.protocol=0; |
||
| 71 | rfTxChannel_repeatCount = 0; |
||
| 1927 | arune | 72 | #endif |
| 1922 | arune | 73 | |
| 74 | IrTransceiver_Init(); |
||
| 75 | /* TX-pin must be set in case transmitter is nexa */ |
||
| 76 | gpio_set_out(sns_rfTransceive_TX_PIN); |
||
| 77 | #if IR_TX_ACTIVE_LOW==1 |
||
| 78 | gpio_set_pin(sns_rfTransceive_TX_PIN); |
||
| 79 | #else |
||
| 80 | gpio_clr_pin(sns_rfTransceive_TX_PIN); |
||
| 81 | #endif |
||
| 82 | |||
| 1923 | arune | 83 | #if IR_RX_ENABLE==1 |
| 1927 | arune | 84 | IrTransceiver_InitRxChannel(0, rfRxChannel_buf, sns_rfTransceive_RX_done_callback, sns_rfTransceive_RX_PCINT, sns_rfTransceive_RX_PIN); |
| 1922 | arune | 85 | rfRxChannel_state = sns_rfTransceive_STATE_RECEIVING; |
| 1923 | arune | 86 | #endif |
| 1922 | arune | 87 | |
| 1923 | arune | 88 | #if IR_TX_ENABLE==1 |
| 1922 | arune | 89 | IrTransceiver_InitTxChannel(0, sns_rfTransceive_TX_done_callback, sns_rfTransceive_TX_PIN); |
| 90 | rfTxChannel_state = sns_rfTransceive_STATE_IDLE; |
||
| 1923 | arune | 91 | #endif |
| 1922 | arune | 92 | } |
| 93 | |||
| 2198 | arune | 94 | |
| 95 | ///////////// DEBUG!!!! |
||
| 2236 | linlun | 96 | #if (sns_rfTransceive_SEND_DEBUG==1) |
| 2198 | arune | 97 | StdCan_Msg_t irTxMsg; |
| 2236 | linlun | 98 | void send_debug(uint16_t *buffer, uint8_t startindex, uint8_t endindex) { |
| 2198 | arune | 99 | |
| 100 | /* the protocol is unknown so the raw ir-data is sent, makes it easier to develop a new protocol */ |
||
| 101 | |||
| 102 | StdCan_Set_class(irTxMsg.Header, CAN_MODULE_CLASS_SNS); |
||
| 103 | StdCan_Set_direction(irTxMsg.Header, DIRECTIONFLAG_FROM_OWNER); |
||
| 104 | irTxMsg.Length = 8; |
||
| 2236 | linlun | 105 | irTxMsg.Header.ModuleType = CAN_MODULE_TYPE_SNS_RFTRANSCEIVE; |
| 2198 | arune | 106 | irTxMsg.Header.ModuleId = 0; |
| 107 | irTxMsg.Header.Command = CAN_MODULE_CMD_IRRECEIVE_IRRAW; |
||
| 2236 | linlun | 108 | while (StdCan_Put(&irTxMsg) != StdCan_Ret_OK) {} |
| 109 | _delay_ms(1); |
||
| 110 | //_------------------ |
||
| 111 | uint8_t i= startindex; |
||
| 112 | while(i != endindex) { |
||
| 113 | irTxMsg.Length = 2; |
||
| 114 | irTxMsg.Data[0] = (buffer[i]>>8)&0xff; |
||
| 115 | irTxMsg.Data[1] = (buffer[i]>>0)&0xff; |
||
| 116 | i++; |
||
| 117 | if (i == MAX_NR_TIMES) { |
||
| 118 | i=0; |
||
| 119 | } |
||
| 120 | if(i != endindex) { |
||
| 121 | irTxMsg.Length = 4; |
||
| 122 | irTxMsg.Data[2] = (buffer[i]>>8)&0xff; |
||
| 123 | irTxMsg.Data[3] = (buffer[i]>>0)&0xff; |
||
| 124 | i++; |
||
| 125 | if (i == MAX_NR_TIMES) { |
||
| 126 | i=0; |
||
| 127 | } |
||
| 128 | if(i != endindex) { |
||
| 129 | irTxMsg.Length = 6; |
||
| 130 | irTxMsg.Data[4] = (buffer[i]>>8)&0xff; |
||
| 131 | irTxMsg.Data[5] = (buffer[i]>>0)&0xff; |
||
| 132 | i++; |
||
| 133 | if (i == MAX_NR_TIMES) { |
||
| 134 | i=0; |
||
| 135 | } |
||
| 136 | if(i != endindex) { |
||
| 137 | irTxMsg.Length = 8; |
||
| 138 | irTxMsg.Data[6] = (buffer[i]>>8)&0xff; |
||
| 139 | irTxMsg.Data[7] = (buffer[i]>>0)&0xff; |
||
| 140 | i++; |
||
| 141 | if (i == MAX_NR_TIMES) { |
||
| 142 | i=0; |
||
| 2198 | arune | 143 | } |
| 2236 | linlun | 144 | } |
| 145 | } |
||
| 146 | } |
||
| 147 | /* buffers will be filled when sending more than 2-3 messages, so retry until sent */ |
||
| 148 | while (StdCan_Put(&irTxMsg) != StdCan_Ret_OK) {} |
||
| 149 | _delay_ms(1); |
||
| 2198 | arune | 150 | } |
| 151 | } |
||
| 152 | #endif |
||
| 153 | |||
| 1922 | arune | 154 | void sns_rfTransceive_Process(void) |
| 155 | { |
||
| 156 | #if IR_RX_ENABLE==1 |
||
| 157 | switch (rfRxChannel_state) |
||
| 158 | { |
||
| 159 | case sns_rfTransceive_STATE_IDLE: |
||
| 160 | { |
||
| 1931 | arune | 161 | /* If known protocol and timeout is not 0 (0 means burst) */ |
| 162 | if (rfRxChannel_proto.protocol != IR_PROTO_UNKNOWN && rfRxChannel_proto.timeout != 0) { |
||
| 1922 | arune | 163 | /* Send button release command on CAN */ |
| 1996 | arune | 164 | rfTxMsg.Data[0] = CAN_MODULE_ENUM_PHYSICAL_IR_STATUS_RELEASED; |
| 1922 | arune | 165 | rfTxMsg.Data[1] = rfRxChannel_proto.protocol; |
| 2040 | arune | 166 | /* Data content is kept from last transmit (pressed) */ |
| 1922 | arune | 167 | |
| 168 | StdCan_Put(&rfTxMsg); |
||
| 169 | } |
||
| 170 | rfRxChannel_state = sns_rfTransceive_STATE_START_RECEIVE; |
||
| 171 | break; |
||
| 172 | } |
||
| 173 | |||
| 174 | case sns_rfTransceive_STATE_START_RECEIVE: |
||
| 175 | cli(); |
||
| 176 | rfRxChannel_newData = FALSE; |
||
| 177 | sei(); |
||
| 178 | rfRxChannel_state = sns_rfTransceive_STATE_RECEIVING; |
||
| 179 | |||
| 180 | break; |
||
| 181 | |||
| 182 | case sns_rfTransceive_STATE_RECEIVING: |
||
| 183 | if (rfRxChannel_newData == TRUE) { |
||
| 184 | cli(); |
||
| 185 | rfRxChannel_newData = FALSE; |
||
| 186 | sei(); |
||
| 187 | /* Let protocol driver parse and then send on CAN */ |
||
| 2199 | arune | 188 | uint8_t res2 = parseProtocol(rfRxChannel_buf, rfRxChannel_len, rfRxChannel_index, &rfRxChannel_proto); |
| 2200 | arune | 189 | if (res2 == IR_OK && rfRxChannel_proto.protocol != IR_PROTO_UNKNOWN) |
| 190 | { |
||
| 191 | //gpio_clr_pin(EXP_B); |
||
| 2199 | arune | 192 | //send_debug(rfRxChannel_buf, rfRxChannel_len); |
| 1931 | arune | 193 | /* If timeout is 0, protocol is burst protocol */ |
| 194 | if (rfRxChannel_proto.timeout > 0) |
||
| 195 | { |
||
| 1996 | arune | 196 | rfTxMsg.Data[0] = CAN_MODULE_ENUM_PHYSICAL_IR_STATUS_PRESSED; |
| 1931 | arune | 197 | rfRxChannel_state = sns_rfTransceive_STATE_START_PAUSE; |
| 198 | } |
||
| 199 | else |
||
| 200 | { |
||
| 1996 | arune | 201 | rfTxMsg.Data[0] = CAN_MODULE_ENUM_PHYSICAL_IR_STATUS_BURST; |
| 1931 | arune | 202 | rfRxChannel_state = sns_rfTransceive_STATE_START_RECEIVE; |
| 203 | } |
||
| 1922 | arune | 204 | rfTxMsg.Data[1] = rfRxChannel_proto.protocol; |
| 205 | rfTxMsg.Data[2] = (rfRxChannel_proto.data>>40)&0xff; |
||
| 206 | rfTxMsg.Data[3] = (rfRxChannel_proto.data>>32)&0xff; |
||
| 207 | rfTxMsg.Data[4] = (rfRxChannel_proto.data>>24)&0xff; |
||
| 208 | rfTxMsg.Data[5] = (rfRxChannel_proto.data>>16)&0xff; |
||
| 209 | rfTxMsg.Data[6] = (rfRxChannel_proto.data>>8)&0xff; |
||
| 210 | rfTxMsg.Data[7] = rfRxChannel_proto.data&0xff; |
||
| 211 | |||
| 212 | StdCan_Put(&rfTxMsg); |
||
| 213 | } |
||
| 214 | else if (rfRxChannel_proto.protocol == IR_PROTO_UNKNOWN) |
||
| 215 | { |
||
| 216 | #if (sns_rfTransceive_SEND_DEBUG==1) |
||
| 2199 | arune | 217 | //send_debug(rfRxChannel_buf, rfRxChannel_len); |
| 1922 | arune | 218 | //rfRxChannel_proto.timeout=300; |
| 219 | #endif |
||
| 220 | rfRxChannel_state = sns_rfTransceive_STATE_START_RECEIVE; |
||
| 221 | } |
||
| 2236 | linlun | 222 | #if (sns_rfTransceive_SEND_DEBUG==1) |
| 223 | else if (res2 == IR_SEND_DEBUG) |
||
| 224 | { |
||
| 225 | send_debug(rfRxChannel_buf, rfRxChannel_proto.data & 0xFFu, rfRxChannel_index); |
||
| 226 | rfRxChannel_state = sns_rfTransceive_STATE_START_RECEIVE; |
||
| 227 | } |
||
| 228 | #endif |
||
| 1922 | arune | 229 | } |
| 230 | break; |
||
| 231 | |||
| 232 | case sns_rfTransceive_STATE_START_PAUSE: |
||
| 233 | /* set a timer so we can send release button event when no new RF is arriving */ |
||
| 234 | Timer_SetTimeout(sns_rfTransceive_RX_REPEATE_TIMER, rfRxChannel_proto.timeout, TimerTypeOneShot, 0); |
||
| 235 | rfRxChannel_state = sns_rfTransceive_STATE_PAUSING; |
||
| 236 | break; |
||
| 237 | |||
| 238 | case sns_rfTransceive_STATE_PAUSING: |
||
| 239 | /* reset timer if new IR arrived */ |
||
| 240 | if (rfRxChannel_newData == TRUE) { |
||
| 241 | cli(); |
||
| 242 | rfRxChannel_newData = FALSE; |
||
| 243 | sei(); |
||
| 244 | |||
| 245 | Ir_Protocol_Data_t protoDummy; |
||
| 2199 | arune | 246 | if (parseProtocol(rfRxChannel_buf, rfRxChannel_len, rfRxChannel_index, &protoDummy) == IR_OK) { |
| 1922 | arune | 247 | if (protoDummy.protocol == rfRxChannel_proto.protocol) { |
| 248 | /* re-set timer so we can send release button event when no new RF is arriving */ |
||
| 249 | Timer_SetTimeout(sns_rfTransceive_RX_REPEATE_TIMER, rfRxChannel_proto.timeout, TimerTypeOneShot, 0); |
||
| 250 | } |
||
| 251 | } |
||
| 252 | } |
||
| 253 | |||
| 254 | if (Timer_Expired(sns_rfTransceive_RX_REPEATE_TIMER)) { |
||
| 255 | rfRxChannel_state = sns_rfTransceive_STATE_IDLE; |
||
| 256 | } |
||
| 257 | break; |
||
| 258 | |||
| 259 | default: |
||
| 260 | break; |
||
| 261 | } |
||
| 262 | #endif |
||
| 263 | |||
| 1927 | arune | 264 | #if IR_TX_ENABLE==1 |
| 265 | switch (rfTxChannel_state) |
||
| 1922 | arune | 266 | { |
| 1927 | arune | 267 | case sns_rfTransceive_STATE_IDLE: |
| 1922 | arune | 268 | { |
| 269 | /* transmission is started when a command is received on can */ |
||
| 1927 | arune | 270 | rfTxChannel_stopSend = FALSE; |
| 271 | rfTxChannel_repeatCount = 0; |
||
| 272 | rfTxChannel_proto.framecnt = 0; |
||
| 1922 | arune | 273 | break; |
| 274 | } |
||
| 275 | |||
| 1927 | arune | 276 | case sns_rfTransceive_STATE_START_TRANSMIT: |
| 1922 | arune | 277 | { |
| 278 | /* Expand protocol. */ |
||
| 2199 | arune | 279 | if (expandProtocol(rfTxChannel_buf, &rfTxChannel_len, &rfTxChannel_proto) != IR_OK) { |
| 1922 | arune | 280 | /* Failed to expand protocol -> enter idle state. */ |
| 1927 | arune | 281 | rfTxChannel_state = sns_rfTransceive_STATE_IDLE; |
| 1922 | arune | 282 | break; |
| 283 | } |
||
| 284 | |||
| 1927 | arune | 285 | /* Start RF transmission. */ |
| 2199 | arune | 286 | IrTransceiver_Transmit(0, rfTxChannel_buf, 0, rfTxChannel_len, rfTxChannel_proto.modfreq); |
| 1922 | arune | 287 | |
| 288 | /* Enter transmitting state. */ |
||
| 1927 | arune | 289 | rfTxChannel_state = sns_rfTransceive_STATE_TRANSMITTING; |
| 1922 | arune | 290 | break; |
| 291 | } |
||
| 292 | |||
| 1927 | arune | 293 | case sns_rfTransceive_STATE_TRANSMITTING: |
| 1922 | arune | 294 | { |
| 1927 | arune | 295 | if (rfTxChannel_sendComplete == TRUE) |
| 1922 | arune | 296 | { |
| 297 | cli(); |
||
| 1927 | arune | 298 | rfTxChannel_sendComplete = FALSE; |
| 1922 | arune | 299 | sei(); |
| 300 | |||
| 1927 | arune | 301 | rfTxChannel_state = sns_rfTransceive_STATE_START_PAUSE; |
| 1922 | arune | 302 | } |
| 303 | break; |
||
| 304 | } |
||
| 305 | |||
| 1927 | arune | 306 | case sns_rfTransceive_STATE_START_PAUSE: |
| 1922 | arune | 307 | { |
| 1927 | arune | 308 | if (rfTxChannel_repeatCount < rfTxChannel_proto.repeats) |
| 1922 | arune | 309 | { |
| 1927 | arune | 310 | rfTxChannel_repeatCount++; |
| 1922 | arune | 311 | } |
| 312 | |||
| 1927 | arune | 313 | Timer_SetTimeout(sns_rfTransceive_TX_REPEATE_TIMER, rfTxChannel_proto.timeout, TimerTypeOneShot, 0); |
| 1922 | arune | 314 | |
| 1927 | arune | 315 | if (rfTxChannel_proto.framecnt != 255) |
| 1922 | arune | 316 | { |
| 1927 | arune | 317 | rfTxChannel_proto.framecnt++; |
| 1922 | arune | 318 | } |
| 319 | |||
| 1927 | arune | 320 | rfTxChannel_state = sns_rfTransceive_STATE_PAUSING; |
| 1922 | arune | 321 | break; |
| 322 | } |
||
| 323 | |||
| 1927 | arune | 324 | case sns_rfTransceive_STATE_PAUSING: |
| 1922 | arune | 325 | { |
| 1927 | arune | 326 | if (Timer_Expired(sns_rfTransceive_TX_REPEATE_TIMER)) |
| 1922 | arune | 327 | { |
| 1927 | arune | 328 | rfTxChannel_state = sns_rfTransceive_STATE_START_TRANSMIT; |
| 1922 | arune | 329 | } |
| 330 | |||
| 331 | /* Transmission is stopped when such command is recevied on can */ |
||
| 1927 | arune | 332 | if (rfTxChannel_stopSend == TRUE && rfTxChannel_repeatCount >= rfTxChannel_proto.repeats) |
| 1922 | arune | 333 | { |
| 1927 | arune | 334 | rfTxChannel_state = sns_rfTransceive_STATE_IDLE; |
| 1922 | arune | 335 | } |
| 336 | break; |
||
| 337 | } |
||
| 338 | default: |
||
| 339 | break; |
||
| 340 | } |
||
| 341 | #endif |
||
| 342 | } |
||
| 343 | |||
| 344 | void sns_rfTransceive_HandleMessage(StdCan_Msg_t *rxMsg) |
||
| 345 | { |
||
| 346 | if ( StdCan_Ret_class(rxMsg->Header) == CAN_MODULE_CLASS_SNS && |
||
| 347 | StdCan_Ret_direction(rxMsg->Header) == DIRECTIONFLAG_TO_OWNER && |
||
| 348 | rxMsg->Header.ModuleType == CAN_MODULE_TYPE_SNS_RFTRANSCEIVE && |
||
| 349 | rxMsg->Header.ModuleId == sns_rfTransceive_ID) |
||
| 350 | { |
||
| 351 | switch (rxMsg->Header.Command) |
||
| 352 | { |
||
| 353 | #if IR_TX_ENABLE==1 |
||
| 1996 | arune | 354 | case CAN_MODULE_CMD_PHYSICAL_IR: |
| 1927 | arune | 355 | { |
| 2040 | arune | 356 | if (rfTxChannel_state == sns_rfTransceive_STATE_IDLE && |
| 1996 | arune | 357 | (rxMsg->Data[0] == CAN_MODULE_ENUM_PHYSICAL_IR_STATUS_PRESSED || |
| 358 | rxMsg->Data[0] == CAN_MODULE_ENUM_PHYSICAL_IR_STATUS_BURST)) |
||
| 359 | { |
||
| 360 | rfTxChannel_stopSend = (uint8_t)(rxMsg->Data[0] == CAN_MODULE_ENUM_PHYSICAL_IR_STATUS_BURST); |
||
| 1927 | arune | 361 | |
| 1996 | arune | 362 | rfTxChannel_proto.protocol = rxMsg->Data[1]; |
| 363 | rfTxChannel_proto.data = rxMsg->Data[2]; |
||
| 364 | rfTxChannel_proto.data = rfTxChannel_proto.data<<8; |
||
| 365 | rfTxChannel_proto.data |= rxMsg->Data[3]; |
||
| 366 | rfTxChannel_proto.data = rfTxChannel_proto.data<<8; |
||
| 367 | rfTxChannel_proto.data |= rxMsg->Data[4]; |
||
| 368 | rfTxChannel_proto.data = rfTxChannel_proto.data<<8; |
||
| 369 | rfTxChannel_proto.data |= rxMsg->Data[5]; |
||
| 370 | rfTxChannel_proto.data = rfTxChannel_proto.data<<8; |
||
| 371 | rfTxChannel_proto.data |= rxMsg->Data[6]; |
||
| 372 | rfTxChannel_proto.data = rfTxChannel_proto.data<<8; |
||
| 373 | rfTxChannel_proto.data |= rxMsg->Data[7]; |
||
| 374 | |||
| 375 | rfTxChannel_state = sns_rfTransceive_STATE_START_TRANSMIT; |
||
| 376 | } |
||
| 377 | else if (rfTxChannel_state != sns_rfTransceive_STATE_IDLE && rxMsg->Data[0] == CAN_MODULE_ENUM_PHYSICAL_IR_STATUS_RELEASED) |
||
| 378 | { |
||
| 379 | rfTxChannel_stopSend = TRUE; |
||
| 380 | } |
||
| 1927 | arune | 381 | } |
| 1922 | arune | 382 | #endif |
| 383 | } |
||
| 384 | } |
||
| 385 | } |
||
| 386 | |||
| 387 | void sns_rfTransceive_List(uint8_t ModuleSequenceNumber) |
||
| 388 | { |
||
| 389 | StdCan_Msg_t txMsg; |
||
| 390 | |||
| 391 | StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_SNS); |
||
| 392 | StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER); |
||
| 393 | txMsg.Header.ModuleType = CAN_MODULE_TYPE_SNS_RFTRANSCEIVE; |
||
| 394 | txMsg.Header.ModuleId = sns_rfTransceive_ID; |
||
| 395 | txMsg.Header.Command = CAN_MODULE_CMD_GLOBAL_LIST; |
||
| 396 | txMsg.Length = 6; |
||
| 397 | |||
| 1927 | arune | 398 | uint32_t HwId=BIOS_GetHwId(); |
| 399 | txMsg.Data[0] = HwId&0xff; |
||
| 400 | txMsg.Data[1] = (HwId>>8)&0xff; |
||
| 401 | txMsg.Data[2] = (HwId>>16)&0xff; |
||
| 402 | txMsg.Data[3] = (HwId>>24)&0xff; |
||
| 1922 | arune | 403 | |
| 404 | txMsg.Data[4] = NUMBER_OF_MODULES; |
||
| 405 | txMsg.Data[5] = ModuleSequenceNumber; |
||
| 406 | |||
| 407 | while (StdCan_Put(&txMsg) != StdCan_Ret_OK); |
||
| 408 | } |