diff OtherSources/data_exchange_main_mini.c @ 5:e65d01b6a17e

MOVE files for other applications
author JeanDo
date Fri, 15 Dec 2017 01:45:20 +0100
parents
children 7801c5d8a562
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/OtherSources/data_exchange_main_mini.c	Fri Dec 15 01:45:20 2017 +0100
@@ -0,0 +1,130 @@
+/**
+  ******************************************************************************
+  * @file    data_exchange_main.c
+  * @author  heinrichs/weikamp, Christian Weikamp
+  * @date    13-Oct-2014
+  * @version V0.0.2
+  * @since   27-May-2015
+
+	* @brief   Communication with the second CPU == RTE system
+  *
+  @verbatim
+  ==============================================================================
+                        ##### How to use #####
+  ==============================================================================
+
+  ==============================================================================
+                        ##### Device Data #####
+  ==============================================================================
+	
+	main CPU always sends the device data info that it has at the moment
+
+		on start it is INT32_MIN, INT32_MAX and 0 
+		as initialized  in data_central.c variable declaration
+	
+	second small CPU gets request to send its device data
+		
+		on receiption the data is merged with the data in externLogbookFlash,
+		stored on the externLogbookFlash and from now on send to small CPU
+
+	@endverbatim
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 heinrichs weikamp</center></h2>
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include <string.h> // for memcopy
+#include "stm32f4xx_hal.h"
+#include "stdio.h"
+#include "ostc.h"
+#include "data_central.h"
+#include "data_exchange_main.h"
+#include "base.h"
+#include "externLogbookFlash.h"
+
+
+/* Expoted variables --------------------------------------------------------*/
+
+/* Private variables ---------------------------------------------------------*/
+
+SDataReceiveFromMaster dataOut;
+SDataExchangeSlaveToMaster dataIn;
+
+uint8_t data_old__lost_connection_to_slave_counter_temp = 0;
+/* Private types -------------------------------------------------------------*/
+
+uint8_t DataEX_check_header_and_footer_ok(void);
+void DataEX_control_connection_while_asking_for_sleep(void);
+
+/* Exported functions --------------------------------------------------------*/
+
+uint8_t DataEX_call(void)
+{
+	DataEX_control_connection_while_asking_for_sleep();
+	
+	for(int i=0;i<EXCHANGE_BUFFERSIZE;i++)
+		*(uint8_t *)(((uint32_t)&dataOut) + i)  = 0;
+
+	dataOut.mode = MODE_SHUTDOWN;
+
+	dataOut.header.checkCode[0] = 0xBB;
+	dataOut.header.checkCode[1] = 0x01;
+	dataOut.header.checkCode[2] = 0x01;
+	dataOut.header.checkCode[3] = 0xBB;
+
+	dataOut.footer.checkCode[0] = 0xF4;
+	dataOut.footer.checkCode[1] = 0xF3;
+	dataOut.footer.checkCode[2] = 0xF2;
+	dataOut.footer.checkCode[3] = 0xF1;
+
+	HAL_GPIO_WritePin(SMALLCPU_CSB_GPIO_PORT,SMALLCPU_CSB_PIN,GPIO_PIN_SET);
+	delayMicros(10);
+
+	if(data_old__lost_connection_to_slave_counter_temp >= 3)
+	{
+		data_old__lost_connection_to_slave_counter_temp = 0;
+	}
+	else
+	{
+		HAL_GPIO_WritePin(SMALLCPU_CSB_GPIO_PORT,SMALLCPU_CSB_PIN,GPIO_PIN_RESET);
+	}
+
+	HAL_SPI_TransmitReceive_DMA(&cpu2DmaSpi, (uint8_t *)&dataOut, (uint8_t *)&dataIn, EXCHANGE_BUFFERSIZE+1);
+	return 1;
+}
+
+
+void DataEX_control_connection_while_asking_for_sleep(void)
+{
+ 	if(!DataEX_check_header_and_footer_ok())
+	{
+		data_old__lost_connection_to_slave_counter_temp += 1;
+	}
+}
+
+uint8_t DataEX_check_header_and_footer_ok(void)
+{
+	if(dataIn.header.checkCode[0] != 0xA1)
+		return 0;
+	if(dataIn.header.checkCode[1] != 0xA2)
+		return 0;
+	if(dataIn.header.checkCode[2] != 0xA3)
+		return 0;
+	if(dataIn.header.checkCode[3] != 0xA4)
+		return 0;
+	if(dataIn.footer.checkCode[0] != 0xE1)
+		return 0;
+	if(dataIn.footer.checkCode[1] != 0xE2)
+		return 0;
+	if(dataIn.footer.checkCode[2] != 0xE3)
+		return 0;
+	if(dataIn.footer.checkCode[3] != 0xE4)
+		return 0;
+
+	return 1;
+}
+