comparison Discovery/Src/data_exchange_main.c @ 278:cc30d1aa03a7

Merged in Ideenmodellierer/ostc4/IPC_Sync_Improvment_3 (pull request #21) IPC Sync Improvment 3
author heinrichsweikamp <bitbucket@heinrichsweikamp.com>
date Sun, 28 Apr 2019 15:54:46 +0000
parents 2e58a4094770 189387bf23a8
children ba229a012ac7
comparison
equal deleted inserted replaced
274:2f0eb65df557 278:cc30d1aa03a7
777 DataEX_copy_to_DeviceData(); 777 DataEX_copy_to_DeviceData();
778 DataEX_merge_DeviceData_and_store(); 778 DataEX_merge_DeviceData_and_store();
779 DataEX_copy_to_VpmRepetitiveData(); 779 DataEX_copy_to_VpmRepetitiveData();
780 data_old__lost_connection_to_slave_counter_temp = 0; 780 data_old__lost_connection_to_slave_counter_temp = 0;
781 data_old__lost_connection_to_slave_counter_retry = 0; 781 data_old__lost_connection_to_slave_counter_retry = 0;
782 pStateReal->data_old__lost_connection_to_slave = 0; 782 /* Do not yet reset state. Wait till common data has been received in next cycle. Otherwise invalid data may be forwarded for processing */
783 /* pStateReal->data_old__lost_connection_to_slave = 0; */
783 dataOut.header.checkCode[SPI_HEADER_INDEX_RX_STATE] = SPI_RX_STATE_OK; 784 dataOut.header.checkCode[SPI_HEADER_INDEX_RX_STATE] = SPI_RX_STATE_OK;
784 } 785 }
785 else 786 else
786 { 787 {
787 pStateReal->data_old__lost_connection_to_slave = 1; 788 pStateReal->data_old__lost_connection_to_slave = 1;
964 /* battery and ambient light sensors 965 /* battery and ambient light sensors
965 */ 966 */
966 pStateReal->lifeData.ambient_light_level = dataIn.data[dataIn.boolAmbientLightData].ambient_light_level; 967 pStateReal->lifeData.ambient_light_level = dataIn.data[dataIn.boolAmbientLightData].ambient_light_level;
967 pStateReal->lifeData.battery_charge = dataIn.data[dataIn.boolBatteryData].battery_charge; 968 pStateReal->lifeData.battery_charge = dataIn.data[dataIn.boolBatteryData].battery_charge;
968 pStateReal->lifeData.battery_voltage = dataIn.data[dataIn.boolBatteryData].battery_voltage; 969 pStateReal->lifeData.battery_voltage = dataIn.data[dataIn.boolBatteryData].battery_voltage;
970
971 /* PIC data
972 */
973 for(int i=0;i<4;i++)
974 {
975 pStateReal->lifeData.buttonPICdata[i] = dataIn.data[dataIn.boolPICdata].button_setting[i];
976 }
977
978 /* sensorErrors
979 */
980 pStateReal->sensorErrorsRTE = dataIn.sensorErrors;
969 } 981 }
970 982
971 /* apnea specials 983 /* apnea specials
972 */ 984 */
973 if(pStateReal->diveSettings.diveMode == DIVEMODE_Apnea) 985 if(pStateReal->diveSettings.diveMode == DIVEMODE_Apnea)
1038 { 1050 {
1039 pStateReal->lifeData.internal.stopwatch_start_at_this_dive_time_seconds = pStateReal->lifeData.dive_time_seconds; 1051 pStateReal->lifeData.internal.stopwatch_start_at_this_dive_time_seconds = pStateReal->lifeData.dive_time_seconds;
1040 pStateReal->lifeData.boolResetStopwatch = 0; 1052 pStateReal->lifeData.boolResetStopwatch = 0;
1041 } 1053 }
1042 pStateReal->lifeData.stopwatch_seconds = pStateReal->lifeData.dive_time_seconds - pStateReal->lifeData.internal.stopwatch_start_at_this_dive_time_seconds; 1054 pStateReal->lifeData.stopwatch_seconds = pStateReal->lifeData.dive_time_seconds - pStateReal->lifeData.internal.stopwatch_start_at_this_dive_time_seconds;
1043
1044 /* wireless data
1045 */
1046 uint16_t wirelessData[4][3];
1047 for(int i=0;i<4;i++)
1048 {
1049 pStateReal->lifeData.wireless_data[i].ageInMilliSeconds = dataIn.data[dataIn.boolWirelessData].wireless_data[i].ageInMilliSeconds;
1050 pStateReal->lifeData.wireless_data[i].status = dataIn.data[dataIn.boolWirelessData].wireless_data[i].status;
1051 pStateReal->lifeData.wireless_data[i].numberOfBytes = dataIn.data[dataIn.boolWirelessData].wireless_data[i].numberOfBytes;
1052 for(int j=0;j<12;j++)
1053 pStateReal->lifeData.wireless_data[i].data[j] = dataIn.data[dataIn.boolWirelessData].wireless_data[i].data[j];
1054 }
1055
1056 // neu 160412
1057 for(int i=0;i<4;i++)
1058 {
1059 if(pStateReal->lifeData.wireless_data[i].numberOfBytes == 10)
1060 {
1061 wirelessData[i][0] = (pStateReal->lifeData.wireless_data[i].data[0] >> 4) & 0x7F;
1062 wirelessData[i][1] = 0;
1063 wirelessData[i][2] = pStateReal->lifeData.wireless_data[i].ageInMilliSeconds;
1064 }
1065 else
1066 {
1067 wirelessData[i][0] = 0;
1068 wirelessData[i][1] = 0;
1069 wirelessData[i][2] = 0;
1070 }
1071 }
1072
1073 // aussortieren doppelte ids, j�ngster datensatz ist relevant
1074 for(int i=0;i<3;i++)
1075 {
1076 if(wirelessData[i][0])
1077 {
1078 for(int j=i+1; j<4; j++)
1079 {
1080 if(wirelessData[i][0] == wirelessData[j][0])
1081 {
1082 if(wirelessData[i][2] > wirelessData[j][2])
1083 {
1084 wirelessData[i][0] = wirelessData[j][0];
1085 wirelessData[i][1] = wirelessData[j][1];
1086 wirelessData[i][2] = wirelessData[j][2];
1087 }
1088 wirelessData[j][0] = 0;
1089 wirelessData[j][1] = 0;
1090 wirelessData[j][2] = 0;
1091 }
1092 }
1093 }
1094 }
1095
1096 /* PIC data
1097 */
1098 for(int i=0;i<4;i++)
1099 {
1100 pStateReal->lifeData.buttonPICdata[i] = dataIn.data[dataIn.boolPICdata].button_setting[i];
1101 }
1102
1103 /* sensorErrors
1104 */
1105 pStateReal->sensorErrorsRTE = dataIn.sensorErrors;
1106 } 1055 }
1107 1056
1108 1057
1109 uint8_t DataEX_check_RTE_version__needs_update(void) 1058 uint8_t DataEX_check_RTE_version__needs_update(void)
1110 { 1059 {