5
|
1 /**
|
|
2 ******************************************************************************
|
|
3 * @file data_exchange_main.c
|
36
|
4 * @author heinrichs weikamp gmbh
|
5
|
5 * @date 13-Oct-2014
|
|
6 * @version V0.0.2
|
|
7 * @since 27-May-2015
|
|
8
|
|
9 * @brief Communication with the second CPU == RTE system
|
|
10 *
|
|
11 @verbatim
|
|
12 ==============================================================================
|
|
13 ##### How to use #####
|
|
14 ==============================================================================
|
|
15
|
|
16 ==============================================================================
|
|
17 ##### Device Data #####
|
|
18 ==============================================================================
|
|
19
|
|
20 main CPU always sends the device data info that it has at the moment
|
|
21
|
|
22 on start it is INT32_MIN, INT32_MAX and 0
|
|
23 as initialized in data_central.c variable declaration
|
|
24
|
|
25 second small CPU gets request to send its device data
|
|
26
|
|
27 on receiption the data is merged with the data in externLogbookFlash,
|
|
28 stored on the externLogbookFlash and from now on send to small CPU
|
|
29
|
|
30 @endverbatim
|
|
31 ******************************************************************************
|
|
32 * @attention
|
|
33 *
|
|
34 * <h2><center>© COPYRIGHT(c) 2014 heinrichs weikamp</center></h2>
|
|
35 *
|
|
36 ******************************************************************************
|
|
37 */
|
|
38
|
|
39 /* Includes ------------------------------------------------------------------*/
|
|
40 #include <string.h> // for memcopy
|
|
41 #include "stm32f4xx_hal.h"
|
|
42 #include "stdio.h"
|
|
43 #include "ostc.h"
|
|
44 #include "data_central.h"
|
|
45 #include "data_exchange_main.h"
|
|
46 #include "base.h"
|
|
47 #include "externLogbookFlash.h"
|
|
48
|
|
49
|
|
50 /* Expoted variables --------------------------------------------------------*/
|
|
51
|
|
52 /* Private variables ---------------------------------------------------------*/
|
|
53
|
|
54 SDataReceiveFromMaster dataOut;
|
|
55 SDataExchangeSlaveToMaster dataIn;
|
|
56
|
|
57 uint8_t data_old__lost_connection_to_slave_counter_temp = 0;
|
|
58 /* Private types -------------------------------------------------------------*/
|
|
59
|
|
60 uint8_t DataEX_check_header_and_footer_ok(void);
|
|
61 void DataEX_control_connection_while_asking_for_sleep(void);
|
|
62
|
|
63 /* Exported functions --------------------------------------------------------*/
|
|
64
|
|
65 uint8_t DataEX_call(void)
|
|
66 {
|
|
67 DataEX_control_connection_while_asking_for_sleep();
|
|
68
|
|
69 for(int i=0;i<EXCHANGE_BUFFERSIZE;i++)
|
|
70 *(uint8_t *)(((uint32_t)&dataOut) + i) = 0;
|
|
71
|
|
72 dataOut.mode = MODE_SHUTDOWN;
|
|
73
|
|
74 dataOut.header.checkCode[0] = 0xBB;
|
|
75 dataOut.header.checkCode[1] = 0x01;
|
|
76 dataOut.header.checkCode[2] = 0x01;
|
|
77 dataOut.header.checkCode[3] = 0xBB;
|
|
78
|
|
79 dataOut.footer.checkCode[0] = 0xF4;
|
|
80 dataOut.footer.checkCode[1] = 0xF3;
|
|
81 dataOut.footer.checkCode[2] = 0xF2;
|
|
82 dataOut.footer.checkCode[3] = 0xF1;
|
|
83
|
|
84 HAL_GPIO_WritePin(SMALLCPU_CSB_GPIO_PORT,SMALLCPU_CSB_PIN,GPIO_PIN_SET);
|
|
85 delayMicros(10);
|
|
86
|
|
87 if(data_old__lost_connection_to_slave_counter_temp >= 3)
|
|
88 {
|
|
89 data_old__lost_connection_to_slave_counter_temp = 0;
|
|
90 }
|
|
91 else
|
|
92 {
|
|
93 HAL_GPIO_WritePin(SMALLCPU_CSB_GPIO_PORT,SMALLCPU_CSB_PIN,GPIO_PIN_RESET);
|
|
94 }
|
|
95
|
|
96 HAL_SPI_TransmitReceive_DMA(&cpu2DmaSpi, (uint8_t *)&dataOut, (uint8_t *)&dataIn, EXCHANGE_BUFFERSIZE+1);
|
|
97 return 1;
|
|
98 }
|
|
99
|
|
100
|
|
101 void DataEX_control_connection_while_asking_for_sleep(void)
|
|
102 {
|
|
103 if(!DataEX_check_header_and_footer_ok())
|
|
104 {
|
|
105 data_old__lost_connection_to_slave_counter_temp += 1;
|
|
106 }
|
|
107 }
|
|
108
|
|
109 uint8_t DataEX_check_header_and_footer_ok(void)
|
|
110 {
|
|
111 if(dataIn.header.checkCode[0] != 0xA1)
|
|
112 return 0;
|
|
113 if(dataIn.header.checkCode[1] != 0xA2)
|
|
114 return 0;
|
|
115 if(dataIn.header.checkCode[2] != 0xA3)
|
|
116 return 0;
|
|
117 if(dataIn.header.checkCode[3] != 0xA4)
|
|
118 return 0;
|
|
119 if(dataIn.footer.checkCode[0] != 0xE1)
|
|
120 return 0;
|
|
121 if(dataIn.footer.checkCode[1] != 0xE2)
|
|
122 return 0;
|
|
123 if(dataIn.footer.checkCode[2] != 0xE3)
|
|
124 return 0;
|
|
125 if(dataIn.footer.checkCode[3] != 0xE4)
|
|
126 return 0;
|
|
127
|
|
128 return 1;
|
|
129 }
|
|
130
|