Mercurial > public > ostc4
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 { |