_CAN_func.h 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. void CAN_READ(
  2. Slave_Ports_Status_T* Slave_Ports_Status_A ,
  3. Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_T &Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A ,
  4. Slave_Ports_Status_T_ARDUINO_ARRAY_INDEX_TABLE_T* Slave_Ports_Status_T_ARDUINO_ARRAY_INDEX_TABLE_A,
  5. Slave_Ports_Status_T_ARDUINO_ARRAY_INDEX_T_TO_DELETE_T* Slave_Ports_Status_T_ARDUINO_ARRAY_INDEX_T_TO_DELETE_A,
  6. Slave_Ports_Status_T_ARDUINO_ARRAY_ASSOC_TABLE_S_Port_ID_T* Slave_Ports_Status_T_ARDUINO_ARRAY_ASSOC_TABLE_S_Port_ID_A,
  7. DISPLAY_T* DISPLAY_A , DISPLAY_T_ARDUINO_ATTR_ARRAY_T &DISPLAY_T_ARDUINO_ATTR_ARRAY_A, long time
  8. ) {
  9. // If pin 2 is low, read receive buffer
  10. {
  11. CAN0.readMsgBuf(&CANrxId, &CANlen, CANrxBuf); // Read data: len = data length, buf = data byte(s)
  12. #if not defined(DISABLE_ANY_PRINT)
  13. Serial.print("#5555CAN_READ read ID: ");
  14. Serial.print(CANrxId, HEX);
  15. Serial.print(" Data: [");Serial.print(CANlen); Serial.print("]");
  16. #endif
  17. if(CANlen == CAN_MSG_DATA8_LEN) {
  18. // DISPLAY__print_loop(DISPLAY_CURSOR_Y_CHARS_CAN_DEBUG, "CAN RECV DATA", 13, DISPLAY__print_loop_ACTION_ADD ) ;
  19. _CAN_REMOTE_ID_T _CAN_REMOTE_ID = CANrxId ;
  20. CAN_MSG8_BIT_1_T CAN_MSG8_BIT_1_A = CANrxBuf[0] ;//< 0x10
  21. CAN_MSG8_BIT_2_T CAN_MSG8_BIT_2_A = CANrxBuf[1] ;
  22. CAN_MSG8_BIT_3_T CAN_MSG8_BIT_3_A = CANrxBuf[2] ;
  23. CAN_MSG8_BIT_4_T CAN_MSG8_BIT_4_A = CANrxBuf[3] ;
  24. CAN_MSG8_BIT_5_T CAN_MSG8_BIT_5_A = CANrxBuf[4] ;
  25. CAN_MSG8_BIT_6_T CAN_MSG8_BIT_6_A = CANrxBuf[5] ;
  26. CAN_MSG8_BIT_7_T CAN_MSG8_BIT_7_A = CANrxBuf[6] ;
  27. CAN_MSG8_BIT_8_T CAN_MSG8_BIT_8_A = CANrxBuf[7] ;
  28. #if not defined(DISABLE_ANY_PRINT)
  29. // Serial.print();
  30. Serial.print("1.REM::");Serial.print(CAN_MSG8_BIT_1_A, HEX);
  31. Serial.print(", 2.SEND:");Serial.print(CAN_MSG8_BIT_2_A, HEX);
  32. Serial.print(", PortID.3:");Serial.print(CAN_MSG8_BIT_3_A, BIN);
  33. Serial.print(", PortTyp.4:");Serial.print(CAN_MSG8_BIT_4_A, BIN);
  34. Serial.print(", ExpS.5:");Serial.print(CAN_MSG8_BIT_5_A, BIN);
  35. Serial.print(", ExpT.6:");Serial.print(CAN_MSG8_BIT_6_A, HEX);
  36. Serial.print(", BcSt.7:");Serial.print(CAN_MSG8_BIT_7_A, HEX);
  37. Serial.print(", TaskT?.8:");Serial.print(CAN_MSG8_BIT_8_A, HEX);Serial.println(" ] ");
  38. Serial.println("64[ Debug STD]") ;
  39. for(int i = 0; i<CANlen; i++) // Print each byte of the data
  40. {
  41. Serial.print("[");Serial.print(i);Serial.print("]");
  42. if(CANrxBuf[i] < 0x10) // If data byte is less than 0x10, add a leading zero
  43. {
  44. Serial.print("0");
  45. }
  46. Serial.print(CANrxBuf[i], HEX);
  47. Serial.print(" ");
  48. }
  49. #endif
  50. if(CAN_MSG8_BIT_2_A == _CAN_REMOTE_ID ) {
  51. if(CAN_MSG8_BIT_8_A == TASK_TYPE_T_Slave_Ports_broadcast____) {
  52. #if not defined(DISABLE_ANY_PRINT)
  53. Serial.println("[CAN_MSG8_BIT_8_A]==[T_BCAST]->[ADD][PORTS]") ;
  54. #endif
  55. Slave_Ports_Status_add_port(
  56. Slave_Ports_Status_A ,
  57. Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A,
  58. Slave_Ports_Status_T_ARDUINO_ARRAY_INDEX_TABLE_A,
  59. Slave_Ports_Status_T_ARDUINO_ARRAY_INDEX_T_TO_DELETE_A,
  60. Slave_Ports_Status_T_ARDUINO_ARRAY_ASSOC_TABLE_S_Port_ID_A,
  61. CAN_MSG8_BIT_3_A, // int Port_ID,
  62. CANrxId , //int _Slave_ID,
  63. CAN_MSG8_BIT_4_A , //int PortTypes,
  64. 0 , //int Address,
  65. 0 , //int LocalPort,
  66. CAN_MSG8_BIT_5_A , //Exp_state_BLINK, //int Exp_state,
  67. CAN_MSG8_BIT_6_A, //Exp_state_ttl_TO_REFRESH, //int Exp_state_ttl,
  68. CAN_MSG8_BIT_7_A, //Broadcast_state_TO_REFRESH, //int Broadcast_state,
  69. 0 , //int I2C_port,
  70. 0 ,//int I2C_driver
  71. IS_Local_FALSE
  72. );
  73. } else if(CAN_MSG8_BIT_8_A == TASK_TYPE_T_request_set_new_Exp_state) { // if(CAN_MSG8_BIT_8_A == TASK_TYPE_T_Slave_Ports_broadcast____)
  74. /*CAN_MSG8_A_Slave_Ports_Protocol_CAN_request_set_new_Exp_state_T
  75. 1 _Slave_Ports_Protocol_CAN_A._CAN_REMOTE_ID; // 0xFF;
  76. 2 = _Slave_Ports_Protocol_CAN_A._CAN_SENDER_ID; // 0xFF;
  77. 3 =_Slave_Ports_Protocol_CAN_A.Port_ID ; //0xFF;
  78. 4 = _Slave_Ports_Protocol_CAN_A.PortTypes ;//0xFF;
  79. 5 = _Slave_Ports_Protocol_CAN_A.Exp_state; // 0xFF;
  80. 6 _Slave_Ports_Protocol_CAN_A.Exp_state_ttl ;// 0xFF;
  81. 7= _Slave_Ports_Protocol_CAN_A.Exp_state_level_A;// 0xFF;
  82. 8 = _Slave_Ports_Protocol_CAN_A._CAN_8; // 0xFF;
  83. */
  84. #if not defined(DISABLE_ANY_PRINT)
  85. Serial.println("[CAN_MSG8_BIT_8_A]==[request_set_new_Exp_state]->[SET][PORTS]") ;
  86. #endif
  87. TASK_PORT_ASSOC_T TASK_PORT_ASSOC_A={
  88. CAN_MSG8_BIT_3_A,
  89. CAN_MSG8_BIT_1_A,
  90. 0
  91. };
  92. Slave_Ports_action_func(Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A, Slave_Ports_Status_A , Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A ,
  93. TASK_TYPE_T_request_set_new_Exp_state , TASK_PORT_ASSOC_A, time, time, ARDUINO_ARRAY_INDEX_NOT_SET ,
  94. CAN_MSG8_BIT_5_A , CAN_MSG8_BIT_7_A);
  95. } else {
  96. #if not defined(DISABLE_ANY_PRINT)
  97. Serial.println("81[CAN][RECV][UNKNOWN][CAN_MSG8_BIT_8_A][") ;
  98. Serial.print(CAN_MSG8_BIT_8_A, HEX) ;
  99. Serial.print("] ");
  100. #endif
  101. }
  102. } else { //if(CAN_MSG8_BIT_2_A == _CAN_REMOTE_ID ) {
  103. #if not defined(DISABLE_ANY_PRINT)
  104. Serial.println("81[CAN][RECV][ERROR][_CAN_REMOTE_ID<>CAN_MSG8_BIT_2_A][") ;
  105. Serial.print(CAN_MSG8_BIT_2_A, HEX) ; Serial.print("]["); Serial.print(_CAN_REMOTE_ID, HEX) ;
  106. Serial.print("] ");
  107. #endif
  108. }
  109. } else { //if(CANlen == CAN_MSG_DATA8_LEN)
  110. #if not defined(DISABLE_ANY_PRINT)
  111. for(int i = 0; i<CANlen; i++) // Print each byte of the data
  112. {
  113. if(CANrxBuf[i] < 0x10) // If data byte is less than 0x10, add a leading zero
  114. {
  115. Serial.print("0");
  116. }
  117. Serial.print(CANrxBuf[i], HEX);
  118. Serial.print(" ");
  119. }
  120. #endif
  121. }
  122. Serial.println();
  123. // else Serial.println(" [CAN] [NOT][digitalRead(CAN_INTpin)] ");
  124. }
  125. }