![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
repo time
Dependencies: mbed MAX14720 MAX30205 USBDevice
HspGuiSourceV301/HSPGui/ECGChannel.cs@20:6d2af70c92ab, 2021-04-06 (annotated)
- Committer:
- darienf
- Date:
- Tue Apr 06 06:41:40 2021 +0000
- Revision:
- 20:6d2af70c92ab
another repo
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
darienf | 20:6d2af70c92ab | 1 | /******************************************************************************* |
darienf | 20:6d2af70c92ab | 2 | * Copyright (C) 2016 Maxim Integrated Products, Inc., All rights Reserved. |
darienf | 20:6d2af70c92ab | 3 | * |
darienf | 20:6d2af70c92ab | 4 | * This software is protected by copyright laws of the United States and |
darienf | 20:6d2af70c92ab | 5 | * of foreign countries. This material may also be protected by patent laws |
darienf | 20:6d2af70c92ab | 6 | * and technology transfer regulations of the United States and of foreign |
darienf | 20:6d2af70c92ab | 7 | * countries. This software is furnished under a license agreement and/or a |
darienf | 20:6d2af70c92ab | 8 | * nondisclosure agreement and may only be used or reproduced in accordance |
darienf | 20:6d2af70c92ab | 9 | * with the terms of those agreements. Dissemination of this information to |
darienf | 20:6d2af70c92ab | 10 | * any party or parties not specified in the license agreement and/or |
darienf | 20:6d2af70c92ab | 11 | * nondisclosure agreement is expressly prohibited. |
darienf | 20:6d2af70c92ab | 12 | * |
darienf | 20:6d2af70c92ab | 13 | * The above copyright notice and this permission notice shall be included |
darienf | 20:6d2af70c92ab | 14 | * in all copies or substantial portions of the Software. |
darienf | 20:6d2af70c92ab | 15 | * |
darienf | 20:6d2af70c92ab | 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
darienf | 20:6d2af70c92ab | 17 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
darienf | 20:6d2af70c92ab | 18 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
darienf | 20:6d2af70c92ab | 19 | * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES |
darienf | 20:6d2af70c92ab | 20 | * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
darienf | 20:6d2af70c92ab | 21 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
darienf | 20:6d2af70c92ab | 22 | * OTHER DEALINGS IN THE SOFTWARE. |
darienf | 20:6d2af70c92ab | 23 | * |
darienf | 20:6d2af70c92ab | 24 | * Except as contained in this notice, the name of Maxim Integrated |
darienf | 20:6d2af70c92ab | 25 | * Products, Inc. shall not be used except as stated in the Maxim Integrated |
darienf | 20:6d2af70c92ab | 26 | * Products, Inc. Branding Policy. |
darienf | 20:6d2af70c92ab | 27 | * |
darienf | 20:6d2af70c92ab | 28 | * The mere transfer of this software does not imply any licenses |
darienf | 20:6d2af70c92ab | 29 | * of trade secrets, proprietary technology, copyrights, patents, |
darienf | 20:6d2af70c92ab | 30 | * trademarks, maskwork rights, or any other form of intellectual |
darienf | 20:6d2af70c92ab | 31 | * property whatsoever. Maxim Integrated Products, Inc. retains all |
darienf | 20:6d2af70c92ab | 32 | * ownership rights. |
darienf | 20:6d2af70c92ab | 33 | ******************************************************************************* |
darienf | 20:6d2af70c92ab | 34 | */ |
darienf | 20:6d2af70c92ab | 35 | |
darienf | 20:6d2af70c92ab | 36 | using System; |
darienf | 20:6d2af70c92ab | 37 | using System.Collections.Generic; |
darienf | 20:6d2af70c92ab | 38 | using System.ComponentModel; |
darienf | 20:6d2af70c92ab | 39 | using System.Data; |
darienf | 20:6d2af70c92ab | 40 | using System.Drawing; |
darienf | 20:6d2af70c92ab | 41 | using System.Linq; |
darienf | 20:6d2af70c92ab | 42 | using System.Text; |
darienf | 20:6d2af70c92ab | 43 | using System.Windows.Forms; |
darienf | 20:6d2af70c92ab | 44 | |
darienf | 20:6d2af70c92ab | 45 | namespace HealthSensorPlatform |
darienf | 20:6d2af70c92ab | 46 | { |
darienf | 20:6d2af70c92ab | 47 | // Code for ECG Configuration Tab |
darienf | 20:6d2af70c92ab | 48 | public partial class HspForm |
darienf | 20:6d2af70c92ab | 49 | { |
darienf | 20:6d2af70c92ab | 50 | List<RegisterField> ecgChannelField = new List<RegisterField>(); |
darienf | 20:6d2af70c92ab | 51 | List<RegisterField> ecgGlobalField = new List<RegisterField>(); |
darienf | 20:6d2af70c92ab | 52 | List<RegisterField> rToRField = new List<RegisterField>(); |
darienf | 20:6d2af70c92ab | 53 | |
darienf | 20:6d2af70c92ab | 54 | List<RegisterField> channelEnableField = new List<RegisterField>(); |
darienf | 20:6d2af70c92ab | 55 | |
darienf | 20:6d2af70c92ab | 56 | // Needed for dynamic changing of options |
darienf | 20:6d2af70c92ab | 57 | RegisterField ecgSampleRateField; |
darienf | 20:6d2af70c92ab | 58 | RegisterField ecgDlpfField; |
darienf | 20:6d2af70c92ab | 59 | |
darienf | 20:6d2af70c92ab | 60 | string[][] ecgSampleRateOptions = new string[][] |
darienf | 20:6d2af70c92ab | 61 | { |
darienf | 20:6d2af70c92ab | 62 | new string[] { "512 sps", "256 sps", "128 sps*" }, |
darienf | 20:6d2af70c92ab | 63 | new string[] { "500 sps", "250 sps", "125 sps*" }, |
darienf | 20:6d2af70c92ab | 64 | new string[] { "N/A", "N/A", "200 sps*" }, |
darienf | 20:6d2af70c92ab | 65 | new string[] { "N/A", "N/A", "199.8 sps*" } |
darienf | 20:6d2af70c92ab | 66 | }; |
darienf | 20:6d2af70c92ab | 67 | |
darienf | 20:6d2af70c92ab | 68 | double[][] ecgSampleRates = new double[][] |
darienf | 20:6d2af70c92ab | 69 | { |
darienf | 20:6d2af70c92ab | 70 | new double[] {512, 256, 128, 128}, |
darienf | 20:6d2af70c92ab | 71 | new double[] {500, 250, 125, 125}, |
darienf | 20:6d2af70c92ab | 72 | new double[] {200, 200, 200, 200}, |
darienf | 20:6d2af70c92ab | 73 | new double[] {199.8, 199.8, 199.8, 199.8} // using 200, the error is 0.1% |
darienf | 20:6d2af70c92ab | 74 | }; |
darienf | 20:6d2af70c92ab | 75 | |
darienf | 20:6d2af70c92ab | 76 | string[][][] ecgDlpfOptions; |
darienf | 20:6d2af70c92ab | 77 | |
darienf | 20:6d2af70c92ab | 78 | |
darienf | 20:6d2af70c92ab | 79 | void initalizeECGConfigFields() |
darienf | 20:6d2af70c92ab | 80 | { |
darienf | 20:6d2af70c92ab | 81 | ecgDlpfOptions = new string[4][][]; |
darienf | 20:6d2af70c92ab | 82 | |
darienf | 20:6d2af70c92ab | 83 | for (int i = 0; i < 4; i++) |
darienf | 20:6d2af70c92ab | 84 | { |
darienf | 20:6d2af70c92ab | 85 | ecgDlpfOptions[i] = new string[4][]; |
darienf | 20:6d2af70c92ab | 86 | } |
darienf | 20:6d2af70c92ab | 87 | |
darienf | 20:6d2af70c92ab | 88 | // 32768 Hz |
darienf | 20:6d2af70c92ab | 89 | ecgDlpfOptions[0][0] = new string[] {"Bypass (00)", "40.96 Hz (01)*", "102.4 Hz (10)", "153.6 Hz (11)"}; |
darienf | 20:6d2af70c92ab | 90 | ecgDlpfOptions[0][1] = new string[] {"Bypass (00)", "40.96 Hz (01)*", "102.4 Hz (10)"};//, "40.96 Hz (11)"}; |
darienf | 20:6d2af70c92ab | 91 | ecgDlpfOptions[0][2] = new string[] {"Bypass (00)", "40.96 Hz (01)*"}; //, "40.96 Hz (10)", "40.96 Hz (11)"}; |
darienf | 20:6d2af70c92ab | 92 | ecgDlpfOptions[0][3] = new string[] {"Bypass (00)", "40.96 Hz (01)*"}; //, "40.96 Hz (10)", "40.96 Hz (11)"}; |
darienf | 20:6d2af70c92ab | 93 | // 32000 Hz |
darienf | 20:6d2af70c92ab | 94 | ecgDlpfOptions[1][0] = new string[] { "Bypass (00)", "40.00 Hz (01)*", "100.0 Hz (10)", "150.0 Hz (11)"}; |
darienf | 20:6d2af70c92ab | 95 | ecgDlpfOptions[1][1] = new string[] {"Bypass (00)", "40.00 Hz (01)*", "100.0 Hz (10)"}; //, "40.00 Hz (11)"}; |
darienf | 20:6d2af70c92ab | 96 | ecgDlpfOptions[1][2] = new string[] {"Bypass (00)", "40.00 Hz (01)*"}; //, "40.00 Hz (10)", "40.00 Hz (11)"}; |
darienf | 20:6d2af70c92ab | 97 | ecgDlpfOptions[1][3] = new string[] {"Bypass (00)", "40.00 Hz (01)*"}; //, "40.00 Hz (10)", "40.00 Hz (11)"}; |
darienf | 20:6d2af70c92ab | 98 | //32000 Hz |
darienf | 20:6d2af70c92ab | 99 | ecgDlpfOptions[2][0] = new string[] { "Bypass", "40.00 Hz"}; //, "40.00 Hz", "40.00 Hz" }; |
darienf | 20:6d2af70c92ab | 100 | ecgDlpfOptions[2][1] = new string[] { "Bypass", "40.00 Hz"}; //, "40.00 Hz", "40.00 Hz" }; |
darienf | 20:6d2af70c92ab | 101 | ecgDlpfOptions[2][2] = new string[] { "Bypass", "40.00 Hz"}; //, "40.00 Hz", "40.00 Hz" }; |
darienf | 20:6d2af70c92ab | 102 | ecgDlpfOptions[2][3] = new string[] { "Bypass", "40.00 Hz"}; //, "40.00 Hz", "40.00 Hz" }; |
darienf | 20:6d2af70c92ab | 103 | // 31968 Hz |
darienf | 20:6d2af70c92ab | 104 | ecgDlpfOptions[3][0] = new string[] { "Bypass (00)", "39.96 Hz (01)" }; //, "39.96 Hz (10)", "39.96 Hz (11)" }; |
darienf | 20:6d2af70c92ab | 105 | ecgDlpfOptions[3][1] = new string[] { "Bypass", "39.96 Hz"}; //, "39.96 Hz", "39.96 Hz" }; |
darienf | 20:6d2af70c92ab | 106 | ecgDlpfOptions[3][2] = new string[] { "Bypass", "39.96 Hz"};//, "39.96 Hz", "39.96 Hz" }; |
darienf | 20:6d2af70c92ab | 107 | ecgDlpfOptions[3][3] = new string[] { "Bypass", "39.96 Hz"};//, "39.96 Hz", "39.96 Hz" }; |
darienf | 20:6d2af70c92ab | 108 | |
darienf | 20:6d2af70c92ab | 109 | string[] fastOptions = { "Normal*", "Manual Fast Recovery", "Automatic Fast Recovery" }; |
darienf | 20:6d2af70c92ab | 110 | string[] fastThOptions = new string[64]; |
darienf | 20:6d2af70c92ab | 111 | for (int i = 0; i < 64; i++) |
darienf | 20:6d2af70c92ab | 112 | { |
darienf | 20:6d2af70c92ab | 113 | fastThOptions[i] = i.ToString() + " * 2048 LSB"; |
darienf | 20:6d2af70c92ab | 114 | } |
darienf | 20:6d2af70c92ab | 115 | fastThOptions[0x3F] += "*"; // Default option |
darienf | 20:6d2af70c92ab | 116 | |
darienf | 20:6d2af70c92ab | 117 | string[] channelGainOptions = { "20 V/V*", "40 V/V", "80 V/V", "160 V/V" }; |
darienf | 20:6d2af70c92ab | 118 | |
darienf | 20:6d2af70c92ab | 119 | //string[] sampleRateOptions = { "512 sps", "256 sps", "128 sps*"}; // Assume FMSTR = 32768 Hz |
darienf | 20:6d2af70c92ab | 120 | |
darienf | 20:6d2af70c92ab | 121 | string[] dlpfOptions = { "Bypass", "40.96 Hz*", "102.4 Hz", "153.6 Hz" }; |
darienf | 20:6d2af70c92ab | 122 | string[] dhpfOptions = { "Bypass", "0.50 Hz*" }; |
darienf | 20:6d2af70c92ab | 123 | |
darienf | 20:6d2af70c92ab | 124 | RegisterField fastField = new RegisterField { Name = "FAST", Register = 5, Index = 22, Width = 2, Descriptions = fastOptions, Label = lblFast, Control = cboFast, Device = max30001}; |
darienf | 20:6d2af70c92ab | 125 | RegisterField fastThField = new RegisterField { Name = "FAST_TH", Register = 5, Index = 16, Width = 6, Descriptions = fastThOptions, Label = lblFastTh, Control = cboFastTh, Device = max30001}; |
darienf | 20:6d2af70c92ab | 126 | ecgChannelField.Add(fastField); |
darienf | 20:6d2af70c92ab | 127 | ecgChannelField.Add(fastThField); |
darienf | 20:6d2af70c92ab | 128 | |
darienf | 20:6d2af70c92ab | 129 | RegisterField channelGainField = new RegisterField { Name = "ECG_GAIN", Register = 0x15, Index = 16, Width = 2, Descriptions = channelGainOptions, Label = lblChannelGain, Control = cboChannelGain, Device = max30001}; |
darienf | 20:6d2af70c92ab | 130 | ecgChannelField.Add(channelGainField); |
darienf | 20:6d2af70c92ab | 131 | |
darienf | 20:6d2af70c92ab | 132 | ecgSampleRateField = new RegisterField { Name = "ECG_RATE", Register = 0x15, Index = 22, Width = 2, Descriptions = ecgSampleRateOptions[0], Label = lblSampleRate, Control = cboSampleRate, Device = max30001}; |
darienf | 20:6d2af70c92ab | 133 | ecgChannelField.Add(ecgSampleRateField); |
darienf | 20:6d2af70c92ab | 134 | |
darienf | 20:6d2af70c92ab | 135 | ecgDlpfField = new RegisterField { Name = "ECG_DLPF", Register = 0x15, Index = 12, Width = 2, Descriptions = dlpfOptions, Label = lblDlpf, Control = cboDlpf, Device = max30001}; |
darienf | 20:6d2af70c92ab | 136 | RegisterField dhpfField = new RegisterField { Name = "ECG_DHPF", Register = 0x15, Index = 14, Width = 1, Descriptions = dhpfOptions, Label = lblDhpf, Control = cboDhpf, Device = max30001}; |
darienf | 20:6d2af70c92ab | 137 | ecgChannelField.Add(ecgDlpfField); |
darienf | 20:6d2af70c92ab | 138 | ecgChannelField.Add(dhpfField); |
darienf | 20:6d2af70c92ab | 139 | } |
darienf | 20:6d2af70c92ab | 140 | |
darienf | 20:6d2af70c92ab | 141 | void initalizeECGGlobalControls() |
darienf | 20:6d2af70c92ab | 142 | { |
darienf | 20:6d2af70c92ab | 143 | string[] fmstrDescription = { "32768 Hz (00)*", "32000 Hz (01)", "32000 Hz (10)", "31968 Hz (11)" }; |
darienf | 20:6d2af70c92ab | 144 | string[] enECGDescription = { "Disabled*", "Enabled" }; |
darienf | 20:6d2af70c92ab | 145 | |
darienf | 20:6d2af70c92ab | 146 | RegisterField fmstrField = new RegisterField { Name = "FMSTR", Register = 0x10, Index = 20, Width = 2, Descriptions = fmstrDescription, Control = cboMasterClock, Device = max30001}; |
darienf | 20:6d2af70c92ab | 147 | ecgGlobalField.Add(fmstrField); |
darienf | 20:6d2af70c92ab | 148 | |
darienf | 20:6d2af70c92ab | 149 | //RegisterField enECGField = new RegisterField { Name = "EN_ECG", Register = 0x10, Index = 19, Width = 1, Descriptions = enECGDescription, Label = lblECGChannelEnable }; |
darienf | 20:6d2af70c92ab | 150 | //enECGField.Control = cboECGChannelEnable; |
darienf | 20:6d2af70c92ab | 151 | //ecgGlobalField.Add(enECGField); |
darienf | 20:6d2af70c92ab | 152 | RegisterField enECGField = new RegisterField { Name = "EN_ECG", Register = 0x10, Index = 19, Width = 1, Control = chkEnECG, Device = max30001}; |
darienf | 20:6d2af70c92ab | 153 | RegisterField enBioZField = new RegisterField { Name = "EN_BIOZ", Register = 0x10, Index = 18, Width = 1, Control = chkEnBioZ, Device = max30001}; |
darienf | 20:6d2af70c92ab | 154 | RegisterField enPaceField = new RegisterField { Name = "EN_PACE", Register = 0x10, Index = 17, Width = 1, Control = chkEnPace, Device = max30001}; |
darienf | 20:6d2af70c92ab | 155 | RegisterField enRtorField = new RegisterField { Name = "EN_RTOR", Register = 0x1d, Index = 15, Width = 1, Control = chkEnRtor, Device = max30001}; |
darienf | 20:6d2af70c92ab | 156 | channelEnableField.Add(enECGField); |
darienf | 20:6d2af70c92ab | 157 | channelEnableField.Add(enBioZField); |
darienf | 20:6d2af70c92ab | 158 | channelEnableField.Add(enPaceField); |
darienf | 20:6d2af70c92ab | 159 | channelEnableField.Add(enRtorField); |
darienf | 20:6d2af70c92ab | 160 | } |
darienf | 20:6d2af70c92ab | 161 | |
darienf | 20:6d2af70c92ab | 162 | void initalizeRToRFields() |
darienf | 20:6d2af70c92ab | 163 | { |
darienf | 20:6d2af70c92ab | 164 | string[] wndwOptions = {"6 * 8ms", "8 * 8ms", "10 * 8ms", "12 * 8ms*", "14 * 8ms", "16 * 8ms", "18 * 8ms", "20 * 8ms", |
darienf | 20:6d2af70c92ab | 165 | "22 * 8ms", "24 * 8ms", "26 * 8ms", "28 * 8ms"}; |
darienf | 20:6d2af70c92ab | 166 | string[] gainOptions = { "1", "2", "4", "8", "16", "32", "64", "128", "256", "512", "1024", "2048", "4096", "8192", "16384", "Auto-Scale*" }; |
darienf | 20:6d2af70c92ab | 167 | string[] enableOptions = { "Disable*", "Enable" }; |
darienf | 20:6d2af70c92ab | 168 | string[] pavgOptions = { "2", "4", "8*", "16" }; |
darienf | 20:6d2af70c92ab | 169 | string[] ptsfOptions = { "1/16", "2/16", "3/16", "4/16*", "5/16", "6/16", "7/16", "8/16", |
darienf | 20:6d2af70c92ab | 170 | "9/16", "10/16", "11/16", "12/16", "13/16", "14/16", "15/16", "16/16"}; |
darienf | 20:6d2af70c92ab | 171 | string[] hoffOptions = new string[64]; |
darienf | 20:6d2af70c92ab | 172 | for(int i = 0; i < 64; i ++) |
darienf | 20:6d2af70c92ab | 173 | { |
darienf | 20:6d2af70c92ab | 174 | hoffOptions[i] = i.ToString(); |
darienf | 20:6d2af70c92ab | 175 | if (i == 32) |
darienf | 20:6d2af70c92ab | 176 | hoffOptions[i] += "*"; |
darienf | 20:6d2af70c92ab | 177 | } |
darienf | 20:6d2af70c92ab | 178 | string[] ravgOptions = { "2", "4", "8*", "16" }; |
darienf | 20:6d2af70c92ab | 179 | string[] rhsfOptions = { "0/8", "1/8", "2/8", "3/8", "4/8*", "5/8", "6/8", "7/8" }; |
darienf | 20:6d2af70c92ab | 180 | |
darienf | 20:6d2af70c92ab | 181 | RegisterField wndwField = new RegisterField { Name = "RTOR_WNDW", Register = 0x1d, Index = 20, Width = 4, Descriptions = wndwOptions, Control = cboRRWndw, Label = lblRRWndw, Device = max30001 }; |
darienf | 20:6d2af70c92ab | 182 | RegisterField gainField = new RegisterField { Name = "RTOR_GAIN", Register = 0x1d, Index = 16, Width = 4, Descriptions = gainOptions, Control = cboRRGain, Label = lblRRGain, Device = max30001 }; |
darienf | 20:6d2af70c92ab | 183 | RegisterField enableField = new RegisterField { Name = "EN_RTOR", Register = 0x1d, Index = 15, Width = 1, Descriptions = enableOptions, Control = cboEnRToR, Label = lblEnRToR, Device = max30001 }; |
darienf | 20:6d2af70c92ab | 184 | RegisterField pavgField = new RegisterField { Name = "RTOR_PAVG", Register = 0x1d, Index = 12, Width = 2, Descriptions = pavgOptions, Control = cboRRPavg, Label = lblRRPavg, Device = max30001 }; |
darienf | 20:6d2af70c92ab | 185 | RegisterField ptsfField = new RegisterField { Name = "RTOR_PTSF", Register = 0x1d, Index = 8, Width = 4, Descriptions = ptsfOptions, Control = cboRRPtsf, Label = lblRRPtsf, Device = max30001}; |
darienf | 20:6d2af70c92ab | 186 | RegisterField hoffField = new RegisterField { Name = "RTOR_HOFF", Register = 0x1e, Index = 16, Width = 6, Descriptions = hoffOptions, Control = cboRRHoff, Label = lblRRHoff, Device = max30001 }; |
darienf | 20:6d2af70c92ab | 187 | RegisterField ravgField = new RegisterField { Name = "RTOR_RAVG", Register = 0x1e, Index = 12, Width = 2, Descriptions = ravgOptions, Control = cboRRRavg, Label = lblRRRavg, Device = max30001 }; |
darienf | 20:6d2af70c92ab | 188 | RegisterField rhsfField = new RegisterField { Name = "RTOR_RHSF", Register = 0x1e, Index = 8, Width = 3, Descriptions = rhsfOptions, Control = cboRRRhsf, Label = lblRRRhsf, Device = max30001 }; |
darienf | 20:6d2af70c92ab | 189 | |
darienf | 20:6d2af70c92ab | 190 | rToRField.Add(wndwField); |
darienf | 20:6d2af70c92ab | 191 | rToRField.Add(gainField); |
darienf | 20:6d2af70c92ab | 192 | rToRField.Add(enableField); |
darienf | 20:6d2af70c92ab | 193 | rToRField.Add(pavgField); |
darienf | 20:6d2af70c92ab | 194 | rToRField.Add(ptsfField); |
darienf | 20:6d2af70c92ab | 195 | rToRField.Add(hoffField); |
darienf | 20:6d2af70c92ab | 196 | rToRField.Add(ravgField); |
darienf | 20:6d2af70c92ab | 197 | rToRField.Add(rhsfField); |
darienf | 20:6d2af70c92ab | 198 | } |
darienf | 20:6d2af70c92ab | 199 | |
darienf | 20:6d2af70c92ab | 200 | /// <summary> |
darienf | 20:6d2af70c92ab | 201 | /// Read register values and update GUI accordingly |
darienf | 20:6d2af70c92ab | 202 | /// </summary> |
darienf | 20:6d2af70c92ab | 203 | void ECGChannelUpdateRegisters() |
darienf | 20:6d2af70c92ab | 204 | { |
darienf | 20:6d2af70c92ab | 205 | internalUpdate = true; |
darienf | 20:6d2af70c92ab | 206 | ReadComboBoxesRegisters(ecgChannelField); |
darienf | 20:6d2af70c92ab | 207 | ReadComboBoxesRegisters(rToRField); |
darienf | 20:6d2af70c92ab | 208 | internalUpdate = false; |
darienf | 20:6d2af70c92ab | 209 | } |
darienf | 20:6d2af70c92ab | 210 | |
darienf | 20:6d2af70c92ab | 211 | /// <summary> |
darienf | 20:6d2af70c92ab | 212 | /// Read and update all the MAX30001 global GUI settings (enable bits and clock) |
darienf | 20:6d2af70c92ab | 213 | /// </summary> |
darienf | 20:6d2af70c92ab | 214 | void ECGGlobalUpdateRegisters() |
darienf | 20:6d2af70c92ab | 215 | { |
darienf | 20:6d2af70c92ab | 216 | internalUpdate = true; |
darienf | 20:6d2af70c92ab | 217 | ReadComboBoxesRegisters(ecgGlobalField); |
darienf | 20:6d2af70c92ab | 218 | ReadCheckBoxRegisters(channelEnableField); |
darienf | 20:6d2af70c92ab | 219 | channelEnableMask(chkEnECG); |
darienf | 20:6d2af70c92ab | 220 | internalUpdate = false; |
darienf | 20:6d2af70c92ab | 221 | |
darienf | 20:6d2af70c92ab | 222 | // Update EcgView to maintain consistent state |
darienf | 20:6d2af70c92ab | 223 | ecgView1.EnableBioZ = chkEnBioZ.Checked; |
darienf | 20:6d2af70c92ab | 224 | ecgView1.EnableECG = chkEnECG.Checked; |
darienf | 20:6d2af70c92ab | 225 | ecgView1.EnablePace = chkEnPace.Checked; |
darienf | 20:6d2af70c92ab | 226 | ecgView1.EnableRToR = chkEnRtor.Checked; |
darienf | 20:6d2af70c92ab | 227 | } |
darienf | 20:6d2af70c92ab | 228 | |
darienf | 20:6d2af70c92ab | 229 | /// <summary> |
darienf | 20:6d2af70c92ab | 230 | /// Mask enable bits for features which depend on EN_ECG = 1 and EN_BIOZ = 1 |
darienf | 20:6d2af70c92ab | 231 | /// </summary> |
darienf | 20:6d2af70c92ab | 232 | /// <param name="enEcg">Checkbox representing EN_ECG bit</param> |
darienf | 20:6d2af70c92ab | 233 | void channelEnableMask(MaximStyle.MaximCheckBox enEcg) |
darienf | 20:6d2af70c92ab | 234 | { |
darienf | 20:6d2af70c92ab | 235 | if (enEcg.Checked == false) |
darienf | 20:6d2af70c92ab | 236 | { |
darienf | 20:6d2af70c92ab | 237 | chkEnRtor.Enabled = false; |
darienf | 20:6d2af70c92ab | 238 | chkEnPace.Enabled = false; |
darienf | 20:6d2af70c92ab | 239 | } |
darienf | 20:6d2af70c92ab | 240 | else |
darienf | 20:6d2af70c92ab | 241 | { |
darienf | 20:6d2af70c92ab | 242 | chkEnRtor.Enabled = true; |
darienf | 20:6d2af70c92ab | 243 | if (max30001Model.PartID == Model.MAX30001Model.Part.MAX30001) |
darienf | 20:6d2af70c92ab | 244 | chkEnPace.Enabled = true; |
darienf | 20:6d2af70c92ab | 245 | } |
darienf | 20:6d2af70c92ab | 246 | |
darienf | 20:6d2af70c92ab | 247 | /*if (chkEnBioZ.Checked == false) |
darienf | 20:6d2af70c92ab | 248 | { |
darienf | 20:6d2af70c92ab | 249 | chkEnPace.Enabled = false; |
darienf | 20:6d2af70c92ab | 250 | } |
darienf | 20:6d2af70c92ab | 251 | else |
darienf | 20:6d2af70c92ab | 252 | { |
darienf | 20:6d2af70c92ab | 253 | chkEnPace.Enabled = true; |
darienf | 20:6d2af70c92ab | 254 | }*/ |
darienf | 20:6d2af70c92ab | 255 | |
darienf | 20:6d2af70c92ab | 256 | } |
darienf | 20:6d2af70c92ab | 257 | |
darienf | 20:6d2af70c92ab | 258 | void ReadComboBoxesRegisters(List<RegisterField> fields) |
darienf | 20:6d2af70c92ab | 259 | { |
darienf | 20:6d2af70c92ab | 260 | int bitValue; |
darienf | 20:6d2af70c92ab | 261 | MaximStyle.MaximComboBox cbox; |
darienf | 20:6d2af70c92ab | 262 | |
darienf | 20:6d2af70c92ab | 263 | foreach (RegisterField rf in fields) |
darienf | 20:6d2af70c92ab | 264 | { |
darienf | 20:6d2af70c92ab | 265 | cbox = (MaximStyle.MaximComboBox)rf.Control; |
darienf | 20:6d2af70c92ab | 266 | |
darienf | 20:6d2af70c92ab | 267 | if (rf.AutoUpdate == true) |
darienf | 20:6d2af70c92ab | 268 | { |
darienf | 20:6d2af70c92ab | 269 | //for (int i = 0; i < 3; i++) |
darienf | 20:6d2af70c92ab | 270 | //{ |
darienf | 20:6d2af70c92ab | 271 | // try |
darienf | 20:6d2af70c92ab | 272 | // { |
darienf | 20:6d2af70c92ab | 273 | bitValue = rf.ReadField(); |
darienf | 20:6d2af70c92ab | 274 | |
darienf | 20:6d2af70c92ab | 275 | |
darienf | 20:6d2af70c92ab | 276 | if (bitValue < cbox.Items.Count && cbox.Items.Count != 0) // Bit setting matches combobox setting |
darienf | 20:6d2af70c92ab | 277 | { |
darienf | 20:6d2af70c92ab | 278 | cbox.SelectedItem = rf.Descriptions[bitValue]; |
darienf | 20:6d2af70c92ab | 279 | } |
darienf | 20:6d2af70c92ab | 280 | else // Bit setting value outside of combobox item range |
darienf | 20:6d2af70c92ab | 281 | { |
darienf | 20:6d2af70c92ab | 282 | cbox.Text = "0b" + Convert.ToString(bitValue, 2); |
darienf | 20:6d2af70c92ab | 283 | } |
darienf | 20:6d2af70c92ab | 284 | |
darienf | 20:6d2af70c92ab | 285 | // } |
darienf | 20:6d2af70c92ab | 286 | // catch (System.TimeoutException) |
darienf | 20:6d2af70c92ab | 287 | // { |
darienf | 20:6d2af70c92ab | 288 | // if (i == 2) |
darienf | 20:6d2af70c92ab | 289 | // throw; |
darienf | 20:6d2af70c92ab | 290 | // } |
darienf | 20:6d2af70c92ab | 291 | //} |
darienf | 20:6d2af70c92ab | 292 | |
darienf | 20:6d2af70c92ab | 293 | } |
darienf | 20:6d2af70c92ab | 294 | } |
darienf | 20:6d2af70c92ab | 295 | |
darienf | 20:6d2af70c92ab | 296 | } |
darienf | 20:6d2af70c92ab | 297 | |
darienf | 20:6d2af70c92ab | 298 | void ReadComboBoxesRegister(RegisterField rf) |
darienf | 20:6d2af70c92ab | 299 | { |
darienf | 20:6d2af70c92ab | 300 | int bitValue; |
darienf | 20:6d2af70c92ab | 301 | MaximStyle.MaximComboBox cbox; |
darienf | 20:6d2af70c92ab | 302 | |
darienf | 20:6d2af70c92ab | 303 | cbox = (MaximStyle.MaximComboBox)rf.Control; |
darienf | 20:6d2af70c92ab | 304 | |
darienf | 20:6d2af70c92ab | 305 | if (rf.AutoUpdate == true) |
darienf | 20:6d2af70c92ab | 306 | { |
darienf | 20:6d2af70c92ab | 307 | bitValue = rf.ReadField(); |
darienf | 20:6d2af70c92ab | 308 | |
darienf | 20:6d2af70c92ab | 309 | if (bitValue < cbox.Items.Count && cbox.Items.Count != 0) // Bit setting matches combobox setting |
darienf | 20:6d2af70c92ab | 310 | { |
darienf | 20:6d2af70c92ab | 311 | cbox.SelectedItem = rf.Descriptions[bitValue]; |
darienf | 20:6d2af70c92ab | 312 | } |
darienf | 20:6d2af70c92ab | 313 | else // Bit setting value outside of combobox item range |
darienf | 20:6d2af70c92ab | 314 | { |
darienf | 20:6d2af70c92ab | 315 | cbox.Text = "0b" + Convert.ToString(bitValue, 2); |
darienf | 20:6d2af70c92ab | 316 | } |
darienf | 20:6d2af70c92ab | 317 | } |
darienf | 20:6d2af70c92ab | 318 | } |
darienf | 20:6d2af70c92ab | 319 | |
darienf | 20:6d2af70c92ab | 320 | void ReadCheckBoxRegisters(List<RegisterField> fields) |
darienf | 20:6d2af70c92ab | 321 | { |
darienf | 20:6d2af70c92ab | 322 | int bitValue; |
darienf | 20:6d2af70c92ab | 323 | MaximStyle.MaximCheckBox chk; |
darienf | 20:6d2af70c92ab | 324 | |
darienf | 20:6d2af70c92ab | 325 | foreach (RegisterField rf in fields) |
darienf | 20:6d2af70c92ab | 326 | { |
darienf | 20:6d2af70c92ab | 327 | chk = (MaximStyle.MaximCheckBox)rf.Control; |
darienf | 20:6d2af70c92ab | 328 | |
darienf | 20:6d2af70c92ab | 329 | if (rf.AutoUpdate == true) |
darienf | 20:6d2af70c92ab | 330 | { |
darienf | 20:6d2af70c92ab | 331 | bitValue = rf.ReadField(); |
darienf | 20:6d2af70c92ab | 332 | |
darienf | 20:6d2af70c92ab | 333 | if (bitValue == 0) |
darienf | 20:6d2af70c92ab | 334 | chk.Checked = false; |
darienf | 20:6d2af70c92ab | 335 | else |
darienf | 20:6d2af70c92ab | 336 | chk.Checked = true; |
darienf | 20:6d2af70c92ab | 337 | } |
darienf | 20:6d2af70c92ab | 338 | } |
darienf | 20:6d2af70c92ab | 339 | } |
darienf | 20:6d2af70c92ab | 340 | |
darienf | 20:6d2af70c92ab | 341 | /// <summary> |
darienf | 20:6d2af70c92ab | 342 | /// Get bit value from register |
darienf | 20:6d2af70c92ab | 343 | /// </summary> |
darienf | 20:6d2af70c92ab | 344 | /// <param name="field"></param> |
darienf | 20:6d2af70c92ab | 345 | /// <returns></returns> |
darienf | 20:6d2af70c92ab | 346 | /*int BitValue(RegisterField field) |
darienf | 20:6d2af70c92ab | 347 | { |
darienf | 20:6d2af70c92ab | 348 | int registerData; |
darienf | 20:6d2af70c92ab | 349 | |
darienf | 20:6d2af70c92ab | 350 | registerData = max30001.ReadReg((byte)field.Register); |
darienf | 20:6d2af70c92ab | 351 | |
darienf | 20:6d2af70c92ab | 352 | return (registerData >> field.Index) & ((1 << field.Width) - 1); |
darienf | 20:6d2af70c92ab | 353 | }*/ |
darienf | 20:6d2af70c92ab | 354 | |
darienf | 20:6d2af70c92ab | 355 | /// <summary> |
darienf | 20:6d2af70c92ab | 356 | /// Add tool tips to combo boxes and event to write registers |
darienf | 20:6d2af70c92ab | 357 | /// </summary> |
darienf | 20:6d2af70c92ab | 358 | /// <param name="list"></param> |
darienf | 20:6d2af70c92ab | 359 | void initalizeToolTipEvents(List<RegisterField> list) |
darienf | 20:6d2af70c92ab | 360 | { |
darienf | 20:6d2af70c92ab | 361 | MaximStyle.MaximComboBox cbox; |
darienf | 20:6d2af70c92ab | 362 | Label lbl; |
darienf | 20:6d2af70c92ab | 363 | StringBuilder strBuilder = new StringBuilder(); |
darienf | 20:6d2af70c92ab | 364 | |
darienf | 20:6d2af70c92ab | 365 | foreach (RegisterField field in list) |
darienf | 20:6d2af70c92ab | 366 | { |
darienf | 20:6d2af70c92ab | 367 | cbox = (MaximStyle.MaximComboBox)field.Control; |
darienf | 20:6d2af70c92ab | 368 | lbl = field.Label; |
darienf | 20:6d2af70c92ab | 369 | |
darienf | 20:6d2af70c92ab | 370 | // Tool Tip String |
darienf | 20:6d2af70c92ab | 371 | strBuilder.Append("Bit "); |
darienf | 20:6d2af70c92ab | 372 | strBuilder.Append(field.Name.Replace("\n", String.Empty)); |
darienf | 20:6d2af70c92ab | 373 | strBuilder.Append(" in Register 0x"); |
darienf | 20:6d2af70c92ab | 374 | strBuilder.Append(field.Register.ToString("X2")); |
darienf | 20:6d2af70c92ab | 375 | toolTip1.SetToolTip(cbox, strBuilder.ToString()); |
darienf | 20:6d2af70c92ab | 376 | if (lbl != null) |
darienf | 20:6d2af70c92ab | 377 | toolTip1.SetToolTip(lbl, strBuilder.ToString()); |
darienf | 20:6d2af70c92ab | 378 | strBuilder.Clear(); |
darienf | 20:6d2af70c92ab | 379 | |
darienf | 20:6d2af70c92ab | 380 | // Event to Write Registers |
darienf | 20:6d2af70c92ab | 381 | if (cbox != cboMasterClock && cbox != cboSampleRate && cbox != cboBioZSampleRate) // cboMasterClock has a special handler to support repopulation of comboboxes |
darienf | 20:6d2af70c92ab | 382 | cbox.SelectedIndexChanged += new System.EventHandler(cboECGChannel_SelectedIndexChanged); |
darienf | 20:6d2af70c92ab | 383 | } |
darienf | 20:6d2af70c92ab | 384 | } |
darienf | 20:6d2af70c92ab | 385 | |
darienf | 20:6d2af70c92ab | 386 | /// <summary> |
darienf | 20:6d2af70c92ab | 387 | /// Write corresponding register of cbox |
darienf | 20:6d2af70c92ab | 388 | /// </summary> |
darienf | 20:6d2af70c92ab | 389 | /// <param name="cbox"></param> |
darienf | 20:6d2af70c92ab | 390 | void writeComboBox(MaximStyle.MaximComboBox cbox) |
darienf | 20:6d2af70c92ab | 391 | { |
darienf | 20:6d2af70c92ab | 392 | List<RegisterField>[] fieldLists = { ecgChannelField, ecgInputMuxField, ecgGlobalField, rToRField, bioZChannelField, bioZInputMuxField, bioZLoadField, paceChannelField}; |
darienf | 20:6d2af70c92ab | 393 | RegisterField field = null; |
darienf | 20:6d2af70c92ab | 394 | //int val; |
darienf | 20:6d2af70c92ab | 395 | |
darienf | 20:6d2af70c92ab | 396 | foreach (List<RegisterField> list in fieldLists) |
darienf | 20:6d2af70c92ab | 397 | { |
darienf | 20:6d2af70c92ab | 398 | foreach (RegisterField f in list) |
darienf | 20:6d2af70c92ab | 399 | { |
darienf | 20:6d2af70c92ab | 400 | if (f.Control == cbox) |
darienf | 20:6d2af70c92ab | 401 | { |
darienf | 20:6d2af70c92ab | 402 | field = f; |
darienf | 20:6d2af70c92ab | 403 | break; |
darienf | 20:6d2af70c92ab | 404 | } |
darienf | 20:6d2af70c92ab | 405 | } |
darienf | 20:6d2af70c92ab | 406 | |
darienf | 20:6d2af70c92ab | 407 | if (field != null) |
darienf | 20:6d2af70c92ab | 408 | break; |
darienf | 20:6d2af70c92ab | 409 | } |
darienf | 20:6d2af70c92ab | 410 | |
darienf | 20:6d2af70c92ab | 411 | field.WriteField((((MaximStyle.MaximComboBox)field.Control).SelectedIndex)); |
darienf | 20:6d2af70c92ab | 412 | } |
darienf | 20:6d2af70c92ab | 413 | |
darienf | 20:6d2af70c92ab | 414 | void writeCheckBox(MaximStyle.MaximCheckBox chk) |
darienf | 20:6d2af70c92ab | 415 | { |
darienf | 20:6d2af70c92ab | 416 | List<RegisterField>[] fieldLists = { channelEnableField }; |
darienf | 20:6d2af70c92ab | 417 | RegisterField field = null; |
darienf | 20:6d2af70c92ab | 418 | //int val; |
darienf | 20:6d2af70c92ab | 419 | |
darienf | 20:6d2af70c92ab | 420 | foreach (List<RegisterField> list in fieldLists) |
darienf | 20:6d2af70c92ab | 421 | { |
darienf | 20:6d2af70c92ab | 422 | foreach (RegisterField f in list) |
darienf | 20:6d2af70c92ab | 423 | { |
darienf | 20:6d2af70c92ab | 424 | if (f.Control == chk) |
darienf | 20:6d2af70c92ab | 425 | { |
darienf | 20:6d2af70c92ab | 426 | field = f; |
darienf | 20:6d2af70c92ab | 427 | break; |
darienf | 20:6d2af70c92ab | 428 | } |
darienf | 20:6d2af70c92ab | 429 | } |
darienf | 20:6d2af70c92ab | 430 | |
darienf | 20:6d2af70c92ab | 431 | if (field != null) |
darienf | 20:6d2af70c92ab | 432 | break; |
darienf | 20:6d2af70c92ab | 433 | } |
darienf | 20:6d2af70c92ab | 434 | |
darienf | 20:6d2af70c92ab | 435 | field.WriteField(((MaximStyle.MaximCheckBox)field.Control).Checked == true ? 1 : 0); |
darienf | 20:6d2af70c92ab | 436 | } |
darienf | 20:6d2af70c92ab | 437 | |
darienf | 20:6d2af70c92ab | 438 | /// <summary> |
darienf | 20:6d2af70c92ab | 439 | /// Event to handle when a new item is selected in the comboboxes for ECG Channel tabs |
darienf | 20:6d2af70c92ab | 440 | /// </summary> |
darienf | 20:6d2af70c92ab | 441 | /// <param name="sender"></param> |
darienf | 20:6d2af70c92ab | 442 | /// <param name="e"></param> |
darienf | 20:6d2af70c92ab | 443 | private void cboECGChannel_SelectedIndexChanged(object sender, EventArgs e) |
darienf | 20:6d2af70c92ab | 444 | { |
darienf | 20:6d2af70c92ab | 445 | MaximStyle.MaximComboBox cbox = (MaximStyle.MaximComboBox)sender; |
darienf | 20:6d2af70c92ab | 446 | |
darienf | 20:6d2af70c92ab | 447 | if (connected && !internalUpdate) |
darienf | 20:6d2af70c92ab | 448 | writeComboBox(cbox); |
darienf | 20:6d2af70c92ab | 449 | } |
darienf | 20:6d2af70c92ab | 450 | |
darienf | 20:6d2af70c92ab | 451 | /// <summary> |
darienf | 20:6d2af70c92ab | 452 | /// Update sample rate for ECG View |
darienf | 20:6d2af70c92ab | 453 | /// </summary> |
darienf | 20:6d2af70c92ab | 454 | /// <param name="sender"></param> |
darienf | 20:6d2af70c92ab | 455 | /// <param name="e"></param> |
darienf | 20:6d2af70c92ab | 456 | private void cboSampleRate_SelectedIndexChanged(object sender, EventArgs e) |
darienf | 20:6d2af70c92ab | 457 | { |
darienf | 20:6d2af70c92ab | 458 | MaximStyle.MaximComboBox cbox = (MaximStyle.MaximComboBox)sender; |
darienf | 20:6d2af70c92ab | 459 | |
darienf | 20:6d2af70c92ab | 460 | if (connected && !internalUpdate) |
darienf | 20:6d2af70c92ab | 461 | writeComboBox(cbox); |
darienf | 20:6d2af70c92ab | 462 | |
darienf | 20:6d2af70c92ab | 463 | if (cboMasterClock.SelectedIndex > -1) |
darienf | 20:6d2af70c92ab | 464 | { |
darienf | 20:6d2af70c92ab | 465 | // Set sample rate based on clock |
darienf | 20:6d2af70c92ab | 466 | ecgView1.SampleRateEcg = ecgSampleRates[cboMasterClock.SelectedIndex][cbox.SelectedIndex]; |
darienf | 20:6d2af70c92ab | 467 | |
darienf | 20:6d2af70c92ab | 468 | // Set digital low pass filter |
darienf | 20:6d2af70c92ab | 469 | cboDlpf.Items.Clear(); |
darienf | 20:6d2af70c92ab | 470 | ecgDlpfField.Descriptions = ecgDlpfOptions[cboMasterClock.SelectedIndex][cboSampleRate.SelectedIndex]; |
darienf | 20:6d2af70c92ab | 471 | ecgDlpfField.Control = cboDlpf; // Trigger updating of descriptions |
darienf | 20:6d2af70c92ab | 472 | |
darienf | 20:6d2af70c92ab | 473 | //internalUpdate = true; |
darienf | 20:6d2af70c92ab | 474 | if (connected) |
darienf | 20:6d2af70c92ab | 475 | cboDlpf.SelectedIndex = ecgDlpfField.ReadField(); |
darienf | 20:6d2af70c92ab | 476 | //internalUpdate = false; |
darienf | 20:6d2af70c92ab | 477 | //ReadComboBoxesRegisters(cboDlpf); |
darienf | 20:6d2af70c92ab | 478 | } |
darienf | 20:6d2af70c92ab | 479 | |
darienf | 20:6d2af70c92ab | 480 | } |
darienf | 20:6d2af70c92ab | 481 | |
darienf | 20:6d2af70c92ab | 482 | private void cboChannelGain_SelectedIndexChanged(object sender, EventArgs e) |
darienf | 20:6d2af70c92ab | 483 | { |
darienf | 20:6d2af70c92ab | 484 | MaximStyle.MaximComboBox cbox = (MaximStyle.MaximComboBox)sender; |
darienf | 20:6d2af70c92ab | 485 | |
darienf | 20:6d2af70c92ab | 486 | switch (cbox.SelectedIndex) |
darienf | 20:6d2af70c92ab | 487 | { |
darienf | 20:6d2af70c92ab | 488 | case 0: |
darienf | 20:6d2af70c92ab | 489 | ecgView1.GainECG = 20; |
darienf | 20:6d2af70c92ab | 490 | break; |
darienf | 20:6d2af70c92ab | 491 | case 1: |
darienf | 20:6d2af70c92ab | 492 | ecgView1.GainECG = 40; |
darienf | 20:6d2af70c92ab | 493 | break; |
darienf | 20:6d2af70c92ab | 494 | case 2: |
darienf | 20:6d2af70c92ab | 495 | ecgView1.GainECG = 80; |
darienf | 20:6d2af70c92ab | 496 | break; |
darienf | 20:6d2af70c92ab | 497 | case 3: |
darienf | 20:6d2af70c92ab | 498 | ecgView1.GainECG = 160; |
darienf | 20:6d2af70c92ab | 499 | break; |
darienf | 20:6d2af70c92ab | 500 | } |
darienf | 20:6d2af70c92ab | 501 | } |
darienf | 20:6d2af70c92ab | 502 | |
darienf | 20:6d2af70c92ab | 503 | private void chkChannelEnable_CheckedChanged(object sender, EventArgs e) |
darienf | 20:6d2af70c92ab | 504 | { |
darienf | 20:6d2af70c92ab | 505 | MaximStyle.MaximCheckBox chk = (MaximStyle.MaximCheckBox)sender; |
darienf | 20:6d2af70c92ab | 506 | |
darienf | 20:6d2af70c92ab | 507 | // Write bit |
darienf | 20:6d2af70c92ab | 508 | if (connected && !internalUpdate) |
darienf | 20:6d2af70c92ab | 509 | { |
darienf | 20:6d2af70c92ab | 510 | writeCheckBox(chk); |
darienf | 20:6d2af70c92ab | 511 | |
darienf | 20:6d2af70c92ab | 512 | // Do not allow user to change masked enable bits |
darienf | 20:6d2af70c92ab | 513 | channelEnableMask(chkEnECG); |
darienf | 20:6d2af70c92ab | 514 | |
darienf | 20:6d2af70c92ab | 515 | // Tell ECG View the status |
darienf | 20:6d2af70c92ab | 516 | if (chk == chkEnECG) |
darienf | 20:6d2af70c92ab | 517 | { |
darienf | 20:6d2af70c92ab | 518 | ecgView1.EnableECG = chk.Checked; |
darienf | 20:6d2af70c92ab | 519 | } |
darienf | 20:6d2af70c92ab | 520 | else if (chk == chkEnBioZ) |
darienf | 20:6d2af70c92ab | 521 | { |
darienf | 20:6d2af70c92ab | 522 | ecgView1.EnableBioZ = chk.Checked; |
darienf | 20:6d2af70c92ab | 523 | } |
darienf | 20:6d2af70c92ab | 524 | else if (chk == chkEnPace) |
darienf | 20:6d2af70c92ab | 525 | { |
darienf | 20:6d2af70c92ab | 526 | ecgView1.EnablePace = chk.Checked; |
darienf | 20:6d2af70c92ab | 527 | } |
darienf | 20:6d2af70c92ab | 528 | else if (chk == chkEnRtor) |
darienf | 20:6d2af70c92ab | 529 | { |
darienf | 20:6d2af70c92ab | 530 | ecgView1.EnableRToR = chk.Checked; |
darienf | 20:6d2af70c92ab | 531 | } |
darienf | 20:6d2af70c92ab | 532 | |
darienf | 20:6d2af70c92ab | 533 | // Read all enable bits |
darienf | 20:6d2af70c92ab | 534 | internalUpdate = true; |
darienf | 20:6d2af70c92ab | 535 | ReadCheckBoxRegisters(channelEnableField); |
darienf | 20:6d2af70c92ab | 536 | internalUpdate = false; |
darienf | 20:6d2af70c92ab | 537 | } |
darienf | 20:6d2af70c92ab | 538 | } |
darienf | 20:6d2af70c92ab | 539 | |
darienf | 20:6d2af70c92ab | 540 | private void cboMasterClock_SelectedIndexChanged(object sender, EventArgs e) |
darienf | 20:6d2af70c92ab | 541 | { |
darienf | 20:6d2af70c92ab | 542 | MaximStyle.MaximComboBox cbo = (MaximStyle.MaximComboBox)sender; |
darienf | 20:6d2af70c92ab | 543 | int[] clock = { 32768, 32000, 32000, 31968 }; |
darienf | 20:6d2af70c92ab | 544 | |
darienf | 20:6d2af70c92ab | 545 | if (connected && !internalUpdate) |
darienf | 20:6d2af70c92ab | 546 | writeComboBox(cbo); |
darienf | 20:6d2af70c92ab | 547 | |
darienf | 20:6d2af70c92ab | 548 | ecgView1.FrequencyMasterField = cbo.SelectedIndex; |
darienf | 20:6d2af70c92ab | 549 | //ecgView1.TimeResolution = 1.0/(2*clock[cbo.SelectedIndex]); |
darienf | 20:6d2af70c92ab | 550 | |
darienf | 20:6d2af70c92ab | 551 | ecgSampleRateField.Descriptions = ecgSampleRateOptions[cbo.SelectedIndex]; |
darienf | 20:6d2af70c92ab | 552 | ecgSampleRateField.Control = cboSampleRate; // Trigger updating of descriptions |
darienf | 20:6d2af70c92ab | 553 | |
darienf | 20:6d2af70c92ab | 554 | cboBioZSampleRate.Items.Clear(); |
darienf | 20:6d2af70c92ab | 555 | bioZSampleRateField.Descriptions = bioZSampleRateOptions[cbo.SelectedIndex]; |
darienf | 20:6d2af70c92ab | 556 | bioZSampleRateField.Control = cboBioZSampleRate; // Trigger updating of descriptions |
darienf | 20:6d2af70c92ab | 557 | |
darienf | 20:6d2af70c92ab | 558 | // Trigger update of current selection to new description |
darienf | 20:6d2af70c92ab | 559 | internalUpdate = true; |
darienf | 20:6d2af70c92ab | 560 | if (connected) |
darienf | 20:6d2af70c92ab | 561 | { |
darienf | 20:6d2af70c92ab | 562 | cboSampleRate.SelectedIndex = ecgSampleRateField.ReadField(); |
darienf | 20:6d2af70c92ab | 563 | cboDlpf.SelectedIndex = ecgDlpfField.ReadField(); |
darienf | 20:6d2af70c92ab | 564 | cboBioZSampleRate.SelectedIndex = bioZSampleRateField.ReadField(); |
darienf | 20:6d2af70c92ab | 565 | cboBioZDigitalLpf.SelectedIndex = bioZDlpfField.ReadField(); |
darienf | 20:6d2af70c92ab | 566 | } |
darienf | 20:6d2af70c92ab | 567 | internalUpdate = false; |
darienf | 20:6d2af70c92ab | 568 | } |
darienf | 20:6d2af70c92ab | 569 | |
darienf | 20:6d2af70c92ab | 570 | private void cboRRWndw_SelectedIndexChanged(object sender, EventArgs e) |
darienf | 20:6d2af70c92ab | 571 | { |
darienf | 20:6d2af70c92ab | 572 | MaximStyle.MaximComboBox cbo = (MaximStyle.MaximComboBox)sender; |
darienf | 20:6d2af70c92ab | 573 | ecgView1.RToRWindowField = cbo.SelectedIndex; |
darienf | 20:6d2af70c92ab | 574 | } |
darienf | 20:6d2af70c92ab | 575 | |
darienf | 20:6d2af70c92ab | 576 | private CustomControls.InitArgs.RToRInitStart getRToRArgs() |
darienf | 20:6d2af70c92ab | 577 | { |
darienf | 20:6d2af70c92ab | 578 | CustomControls.InitArgs.RToRInitStart initArgs = new CustomControls.InitArgs.RToRInitStart(); |
darienf | 20:6d2af70c92ab | 579 | |
darienf | 20:6d2af70c92ab | 580 | initArgs.Wndw = cboRRWndw.SelectedIndex; |
darienf | 20:6d2af70c92ab | 581 | initArgs.Gain = cboRRGain.SelectedIndex; |
darienf | 20:6d2af70c92ab | 582 | initArgs.En_rtor = chkEnRtor.Checked == true ? 1 : 0; |
darienf | 20:6d2af70c92ab | 583 | initArgs.Pavg = cboRRPavg.SelectedIndex; |
darienf | 20:6d2af70c92ab | 584 | initArgs.Ptsf = cboRRPtsf.SelectedIndex; |
darienf | 20:6d2af70c92ab | 585 | initArgs.Hoff = cboRRHoff.SelectedIndex; |
darienf | 20:6d2af70c92ab | 586 | initArgs.Ravg = cboRRRavg.SelectedIndex; |
darienf | 20:6d2af70c92ab | 587 | initArgs.Rhsf = cboRRRhsf.SelectedIndex; |
darienf | 20:6d2af70c92ab | 588 | initArgs.Clr_rrint = 1; // Default from Jerry's GUI |
darienf | 20:6d2af70c92ab | 589 | |
darienf | 20:6d2af70c92ab | 590 | return initArgs; |
darienf | 20:6d2af70c92ab | 591 | } |
darienf | 20:6d2af70c92ab | 592 | |
darienf | 20:6d2af70c92ab | 593 | private void setRToRArgs(CustomControls.InitArgs.RToRInitStart initArgs) |
darienf | 20:6d2af70c92ab | 594 | { |
darienf | 20:6d2af70c92ab | 595 | cboRRWndw.SelectedIndex = initArgs.Wndw; |
darienf | 20:6d2af70c92ab | 596 | cboRRGain.SelectedIndex = initArgs.Gain; |
darienf | 20:6d2af70c92ab | 597 | //initArgs.En_rtor = chkEnRtor.Checked == true ? 1 : 0; //cboEnRToR.SelectedIndex; |
darienf | 20:6d2af70c92ab | 598 | cboRRPavg.SelectedIndex = initArgs.Pavg; |
darienf | 20:6d2af70c92ab | 599 | cboRRPtsf.SelectedIndex = initArgs.Ptsf; |
darienf | 20:6d2af70c92ab | 600 | cboRRHoff.SelectedIndex = initArgs.Hoff; |
darienf | 20:6d2af70c92ab | 601 | cboRRRavg.SelectedIndex = initArgs.Ravg; |
darienf | 20:6d2af70c92ab | 602 | cboRRRhsf.SelectedIndex = initArgs.Rhsf; |
darienf | 20:6d2af70c92ab | 603 | //initArgs.Clr_rrint = 2; // Default from Jerry's GUI |
darienf | 20:6d2af70c92ab | 604 | } |
darienf | 20:6d2af70c92ab | 605 | |
darienf | 20:6d2af70c92ab | 606 | } |
darienf | 20:6d2af70c92ab | 607 | } |