Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
hspguisourcev301/HspGuiSourceV301/HSPGui/CustomControls/RegisterView.cs@5:bc128a16232f, 2021-05-02 (annotated)
- Committer:
- darienf
- Date:
- Sun May 02 23:09:04 2021 +0000
- Revision:
- 5:bc128a16232f
- Parent:
- 3:36de8b9e4b1a
This is the program that was last used, that has the working temperature and some comments
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
darienf | 3:36de8b9e4b1a | 1 | /******************************************************************************* |
darienf | 3:36de8b9e4b1a | 2 | * Copyright (C) 2016 Maxim Integrated Products, Inc., All rights Reserved. |
darienf | 3:36de8b9e4b1a | 3 | * |
darienf | 3:36de8b9e4b1a | 4 | * This software is protected by copyright laws of the United States and |
darienf | 3:36de8b9e4b1a | 5 | * of foreign countries. This material may also be protected by patent laws |
darienf | 3:36de8b9e4b1a | 6 | * and technology transfer regulations of the United States and of foreign |
darienf | 3:36de8b9e4b1a | 7 | * countries. This software is furnished under a license agreement and/or a |
darienf | 3:36de8b9e4b1a | 8 | * nondisclosure agreement and may only be used or reproduced in accordance |
darienf | 3:36de8b9e4b1a | 9 | * with the terms of those agreements. Dissemination of this information to |
darienf | 3:36de8b9e4b1a | 10 | * any party or parties not specified in the license agreement and/or |
darienf | 3:36de8b9e4b1a | 11 | * nondisclosure agreement is expressly prohibited. |
darienf | 3:36de8b9e4b1a | 12 | * |
darienf | 3:36de8b9e4b1a | 13 | * The above copyright notice and this permission notice shall be included |
darienf | 3:36de8b9e4b1a | 14 | * in all copies or substantial portions of the Software. |
darienf | 3:36de8b9e4b1a | 15 | * |
darienf | 3:36de8b9e4b1a | 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
darienf | 3:36de8b9e4b1a | 17 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
darienf | 3:36de8b9e4b1a | 18 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
darienf | 3:36de8b9e4b1a | 19 | * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES |
darienf | 3:36de8b9e4b1a | 20 | * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
darienf | 3:36de8b9e4b1a | 21 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
darienf | 3:36de8b9e4b1a | 22 | * OTHER DEALINGS IN THE SOFTWARE. |
darienf | 3:36de8b9e4b1a | 23 | * |
darienf | 3:36de8b9e4b1a | 24 | * Except as contained in this notice, the name of Maxim Integrated |
darienf | 3:36de8b9e4b1a | 25 | * Products, Inc. shall not be used except as stated in the Maxim Integrated |
darienf | 3:36de8b9e4b1a | 26 | * Products, Inc. Branding Policy. |
darienf | 3:36de8b9e4b1a | 27 | * |
darienf | 3:36de8b9e4b1a | 28 | * The mere transfer of this software does not imply any licenses |
darienf | 3:36de8b9e4b1a | 29 | * of trade secrets, proprietary technology, copyrights, patents, |
darienf | 3:36de8b9e4b1a | 30 | * trademarks, maskwork rights, or any other form of intellectual |
darienf | 3:36de8b9e4b1a | 31 | * property whatsoever. Maxim Integrated Products, Inc. retains all |
darienf | 3:36de8b9e4b1a | 32 | * ownership rights. |
darienf | 3:36de8b9e4b1a | 33 | ******************************************************************************* |
darienf | 3:36de8b9e4b1a | 34 | */ |
darienf | 3:36de8b9e4b1a | 35 | |
darienf | 3:36de8b9e4b1a | 36 | using System; |
darienf | 3:36de8b9e4b1a | 37 | using System.Collections.Generic; |
darienf | 3:36de8b9e4b1a | 38 | using System.ComponentModel; |
darienf | 3:36de8b9e4b1a | 39 | using System.Drawing; |
darienf | 3:36de8b9e4b1a | 40 | using System.Data; |
darienf | 3:36de8b9e4b1a | 41 | using System.Linq; |
darienf | 3:36de8b9e4b1a | 42 | using System.Text; |
darienf | 3:36de8b9e4b1a | 43 | using System.Text.RegularExpressions; |
darienf | 3:36de8b9e4b1a | 44 | using System.Windows.Forms; |
darienf | 3:36de8b9e4b1a | 45 | using System.IO; |
darienf | 3:36de8b9e4b1a | 46 | |
darienf | 3:36de8b9e4b1a | 47 | using HealthSensorPlatform.DeviceDescriptions; |
darienf | 3:36de8b9e4b1a | 48 | using HealthSensorPlatform.CustomControls; |
darienf | 3:36de8b9e4b1a | 49 | using RPCSupport.DeviceSupport; |
darienf | 3:36de8b9e4b1a | 50 | //using Maxim.MAX30101GUI.DeviceDescriptions; |
darienf | 3:36de8b9e4b1a | 51 | //using Maxim.MAX30101; |
darienf | 3:36de8b9e4b1a | 52 | |
darienf | 3:36de8b9e4b1a | 53 | namespace Maxim.CustomControls |
darienf | 3:36de8b9e4b1a | 54 | { |
darienf | 3:36de8b9e4b1a | 55 | public partial class RegisterView : UserControl, IDeviceView |
darienf | 3:36de8b9e4b1a | 56 | { |
darienf | 3:36de8b9e4b1a | 57 | private bool connected = false; |
darienf | 3:36de8b9e4b1a | 58 | public bool Connected |
darienf | 3:36de8b9e4b1a | 59 | { |
darienf | 3:36de8b9e4b1a | 60 | get |
darienf | 3:36de8b9e4b1a | 61 | { |
darienf | 3:36de8b9e4b1a | 62 | return connected; |
darienf | 3:36de8b9e4b1a | 63 | } |
darienf | 3:36de8b9e4b1a | 64 | set |
darienf | 3:36de8b9e4b1a | 65 | { |
darienf | 3:36de8b9e4b1a | 66 | connected = value; |
darienf | 3:36de8b9e4b1a | 67 | } |
darienf | 3:36de8b9e4b1a | 68 | } |
darienf | 3:36de8b9e4b1a | 69 | |
darienf | 3:36de8b9e4b1a | 70 | public string DeviceName; |
darienf | 3:36de8b9e4b1a | 71 | |
darienf | 3:36de8b9e4b1a | 72 | public DeviceController Controller |
darienf | 3:36de8b9e4b1a | 73 | { |
darienf | 3:36de8b9e4b1a | 74 | get { return controller; } |
darienf | 3:36de8b9e4b1a | 75 | } |
darienf | 3:36de8b9e4b1a | 76 | private DeviceController controller; |
darienf | 3:36de8b9e4b1a | 77 | |
darienf | 3:36de8b9e4b1a | 78 | |
darienf | 3:36de8b9e4b1a | 79 | /// <summary> |
darienf | 3:36de8b9e4b1a | 80 | /// Value of current selected register |
darienf | 3:36de8b9e4b1a | 81 | /// </summary> |
darienf | 3:36de8b9e4b1a | 82 | int RegisterValue; |
darienf | 3:36de8b9e4b1a | 83 | |
darienf | 3:36de8b9e4b1a | 84 | Label[] bitLabels = new Label[24]; |
darienf | 3:36de8b9e4b1a | 85 | |
darienf | 3:36de8b9e4b1a | 86 | Font RegularFont; |
darienf | 3:36de8b9e4b1a | 87 | Font BoldFont; |
darienf | 3:36de8b9e4b1a | 88 | |
darienf | 3:36de8b9e4b1a | 89 | public event RegisterWriteCompleteHandler RegisterWriteComplete; |
darienf | 3:36de8b9e4b1a | 90 | public delegate void RegisterWriteCompleteHandler(object sender, RegisterArgs e); |
darienf | 3:36de8b9e4b1a | 91 | |
darienf | 3:36de8b9e4b1a | 92 | public event CellBeginEditHandler CellBeginEdit; |
darienf | 3:36de8b9e4b1a | 93 | public delegate void CellBeginEditHandler(object sender, DataGridViewCellCancelEventArgs e); |
darienf | 3:36de8b9e4b1a | 94 | |
darienf | 3:36de8b9e4b1a | 95 | public RegisterView() |
darienf | 3:36de8b9e4b1a | 96 | { |
darienf | 3:36de8b9e4b1a | 97 | //accelDevice = new AccelDevice(); |
darienf | 3:36de8b9e4b1a | 98 | InitializeComponent(); |
darienf | 3:36de8b9e4b1a | 99 | |
darienf | 3:36de8b9e4b1a | 100 | // Initialize font styles for label |
darienf | 3:36de8b9e4b1a | 101 | RegularFont = new Font(lblBit00.Font, FontStyle.Regular); |
darienf | 3:36de8b9e4b1a | 102 | BoldFont = new Font(lblBit00.Font, FontStyle.Bold); |
darienf | 3:36de8b9e4b1a | 103 | |
darienf | 3:36de8b9e4b1a | 104 | // References to all bit labels |
darienf | 3:36de8b9e4b1a | 105 | for(int i = 0; i < 24; i++) |
darienf | 3:36de8b9e4b1a | 106 | { |
darienf | 3:36de8b9e4b1a | 107 | string labelName = "lblBit" + i.ToString("D2"); |
darienf | 3:36de8b9e4b1a | 108 | bitLabels[i] = (Label)panelRegisterBits.Controls[labelName]; |
darienf | 3:36de8b9e4b1a | 109 | } |
darienf | 3:36de8b9e4b1a | 110 | |
darienf | 3:36de8b9e4b1a | 111 | dgv_Registers.CellBeginEdit += OnCellBeginEdit; // Pass thru event |
darienf | 3:36de8b9e4b1a | 112 | dgv_Registers.SelectionChanged += dgv_Registers_SelectionChanged; |
darienf | 3:36de8b9e4b1a | 113 | dgv_Registers.CellEndEdit += dgv_Registers_CellEndEdit; |
darienf | 3:36de8b9e4b1a | 114 | } |
darienf | 3:36de8b9e4b1a | 115 | |
darienf | 3:36de8b9e4b1a | 116 | public void SetController(DeviceController controller) |
darienf | 3:36de8b9e4b1a | 117 | { |
darienf | 3:36de8b9e4b1a | 118 | Clear(); |
darienf | 3:36de8b9e4b1a | 119 | this.controller = controller; |
darienf | 3:36de8b9e4b1a | 120 | } |
darienf | 3:36de8b9e4b1a | 121 | |
darienf | 3:36de8b9e4b1a | 122 | /// <summary> |
darienf | 3:36de8b9e4b1a | 123 | /// RegisterInfo register value to string |
darienf | 3:36de8b9e4b1a | 124 | /// </summary> |
darienf | 3:36de8b9e4b1a | 125 | /// <param name="reg"></param> |
darienf | 3:36de8b9e4b1a | 126 | /// <returns></returns> |
darienf | 3:36de8b9e4b1a | 127 | private string FormatData(RegisterInfo reg) |
darienf | 3:36de8b9e4b1a | 128 | { |
darienf | 3:36de8b9e4b1a | 129 | return reg.dataField.ToString("X" + (reg.numBytes * 2).ToString()); |
darienf | 3:36de8b9e4b1a | 130 | } |
darienf | 3:36de8b9e4b1a | 131 | |
darienf | 3:36de8b9e4b1a | 132 | /// <summary> |
darienf | 3:36de8b9e4b1a | 133 | /// Populate register tables |
darienf | 3:36de8b9e4b1a | 134 | /// </summary> |
darienf | 3:36de8b9e4b1a | 135 | public void DisplayRegisters() |
darienf | 3:36de8b9e4b1a | 136 | { |
darienf | 3:36de8b9e4b1a | 137 | if (dgv_Registers.RowCount == 0) |
darienf | 3:36de8b9e4b1a | 138 | { |
darienf | 3:36de8b9e4b1a | 139 | //add rows to table |
darienf | 3:36de8b9e4b1a | 140 | foreach (RegisterInfo reg in controller.InfoArray) |
darienf | 3:36de8b9e4b1a | 141 | { |
darienf | 3:36de8b9e4b1a | 142 | //get the number of bytes of the register |
darienf | 3:36de8b9e4b1a | 143 | int numBytes = reg.numBytes; |
darienf | 3:36de8b9e4b1a | 144 | |
darienf | 3:36de8b9e4b1a | 145 | String dataStr = FormatData(reg); |
darienf | 3:36de8b9e4b1a | 146 | //add a row to the table with the register address, name, and value |
darienf | 3:36de8b9e4b1a | 147 | dgv_Registers.Rows.Add(reg.address.ToString("X2") + "h", reg.detailedName, dataStr); |
darienf | 3:36de8b9e4b1a | 148 | } |
darienf | 3:36de8b9e4b1a | 149 | |
darienf | 3:36de8b9e4b1a | 150 | //resize length of table to the number of rows |
darienf | 3:36de8b9e4b1a | 151 | if (dgv_Registers.RowCount > 8) |
darienf | 3:36de8b9e4b1a | 152 | { |
darienf | 3:36de8b9e4b1a | 153 | dgv_Registers.Height = (dgv_Registers.RowCount - 1) * 23 + 42; |
darienf | 3:36de8b9e4b1a | 154 | dgv_RegDes.Height = dgv_Registers.Height; |
darienf | 3:36de8b9e4b1a | 155 | } |
darienf | 3:36de8b9e4b1a | 156 | else |
darienf | 3:36de8b9e4b1a | 157 | { |
darienf | 3:36de8b9e4b1a | 158 | dgv_Registers.Height = 7 * 23 + 42; |
darienf | 3:36de8b9e4b1a | 159 | dgv_RegDes.Height = dgv_Registers.Height; |
darienf | 3:36de8b9e4b1a | 160 | } |
darienf | 3:36de8b9e4b1a | 161 | } |
darienf | 3:36de8b9e4b1a | 162 | else //the table has already been populated with rows |
darienf | 3:36de8b9e4b1a | 163 | { |
darienf | 3:36de8b9e4b1a | 164 | //update the value column with the new value in the ADC registers |
darienf | 3:36de8b9e4b1a | 165 | for (int i = 0; i < dgv_Registers.Rows.Count; i++) |
darienf | 3:36de8b9e4b1a | 166 | { |
darienf | 3:36de8b9e4b1a | 167 | RegisterInfo reg = controller.InfoArray[i]; |
darienf | 3:36de8b9e4b1a | 168 | int numBytes = reg.numBytes; |
darienf | 3:36de8b9e4b1a | 169 | String dataStr = FormatData(reg); |
darienf | 3:36de8b9e4b1a | 170 | //add a row to the table with the register address, name, and value |
darienf | 3:36de8b9e4b1a | 171 | dgv_Registers[col_Value.Index, i].Value = dataStr; |
darienf | 3:36de8b9e4b1a | 172 | } |
darienf | 3:36de8b9e4b1a | 173 | } |
darienf | 3:36de8b9e4b1a | 174 | } |
darienf | 3:36de8b9e4b1a | 175 | |
darienf | 3:36de8b9e4b1a | 176 | public void Clear() |
darienf | 3:36de8b9e4b1a | 177 | { |
darienf | 3:36de8b9e4b1a | 178 | dgv_Registers.Rows.Clear(); |
darienf | 3:36de8b9e4b1a | 179 | dgv_Registers.Refresh(); |
darienf | 3:36de8b9e4b1a | 180 | } |
darienf | 3:36de8b9e4b1a | 181 | |
darienf | 3:36de8b9e4b1a | 182 | public string RegistersToString() |
darienf | 3:36de8b9e4b1a | 183 | { |
darienf | 3:36de8b9e4b1a | 184 | //RegisterProcess registerProcess; |
darienf | 3:36de8b9e4b1a | 185 | StringBuilder sb = new StringBuilder(); |
darienf | 3:36de8b9e4b1a | 186 | string dataStr; |
darienf | 3:36de8b9e4b1a | 187 | string[][] bitDescriptions; |
darienf | 3:36de8b9e4b1a | 188 | int longestRow; |
darienf | 3:36de8b9e4b1a | 189 | |
darienf | 3:36de8b9e4b1a | 190 | //registerProcess = new RegisterProcess(controller.InfoArray); |
darienf | 3:36de8b9e4b1a | 191 | |
darienf | 3:36de8b9e4b1a | 192 | bitDescriptions = new string[controller.InfoArray.Length + 4][]; |
darienf | 3:36de8b9e4b1a | 193 | |
darienf | 3:36de8b9e4b1a | 194 | UpdateRegisterIndexWidth(); |
darienf | 3:36de8b9e4b1a | 195 | |
darienf | 3:36de8b9e4b1a | 196 | // Generate register data to string |
darienf | 3:36de8b9e4b1a | 197 | for (int i = 0; i < controller.InfoArray.Length; i++) |
darienf | 3:36de8b9e4b1a | 198 | { |
darienf | 3:36de8b9e4b1a | 199 | RegisterInfo reg = controller.InfoArray[i]; |
darienf | 3:36de8b9e4b1a | 200 | |
darienf | 3:36de8b9e4b1a | 201 | bitDescriptions[i] = new string[reg.description.list.Count]; |
darienf | 3:36de8b9e4b1a | 202 | |
darienf | 3:36de8b9e4b1a | 203 | for (int k = 0; k < reg.description.list.Count; k++) |
darienf | 3:36de8b9e4b1a | 204 | { |
darienf | 3:36de8b9e4b1a | 205 | RegisterBitDescriptions.RegisterBitDescription b = reg.description.list[k]; |
darienf | 3:36de8b9e4b1a | 206 | int bitValue = (reg.dataField >> b.Index) & ((1 << b.Width) - 1); // MAX30001 only |
darienf | 3:36de8b9e4b1a | 207 | bitDescriptions[i][k] = b.name + " = " + bitValue.ToString("X") + "h"; |
darienf | 3:36de8b9e4b1a | 208 | } |
darienf | 3:36de8b9e4b1a | 209 | } |
darienf | 3:36de8b9e4b1a | 210 | |
darienf | 3:36de8b9e4b1a | 211 | // Find longest row for how deep to loop to print out all registers bits |
darienf | 3:36de8b9e4b1a | 212 | longestRow = controller.InfoArray.Length + 1; |
darienf | 3:36de8b9e4b1a | 213 | for (int j = 0; j < controller.InfoArray.Length; j++ ) |
darienf | 3:36de8b9e4b1a | 214 | { |
darienf | 3:36de8b9e4b1a | 215 | if (controller.InfoArray[j].description.list.Count > longestRow) |
darienf | 3:36de8b9e4b1a | 216 | { |
darienf | 3:36de8b9e4b1a | 217 | longestRow = controller.InfoArray[j].description.list.Count + 1; |
darienf | 3:36de8b9e4b1a | 218 | } |
darienf | 3:36de8b9e4b1a | 219 | } |
darienf | 3:36de8b9e4b1a | 220 | |
darienf | 3:36de8b9e4b1a | 221 | for (int i = 0; i < longestRow; i++) |
darienf | 3:36de8b9e4b1a | 222 | { |
darienf | 3:36de8b9e4b1a | 223 | if (i < controller.InfoArray.Length) // register map |
darienf | 3:36de8b9e4b1a | 224 | { |
darienf | 3:36de8b9e4b1a | 225 | RegisterInfo reg = controller.InfoArray[i]; |
darienf | 3:36de8b9e4b1a | 226 | |
darienf | 3:36de8b9e4b1a | 227 | dataStr = FormatData(reg); |
darienf | 3:36de8b9e4b1a | 228 | |
darienf | 3:36de8b9e4b1a | 229 | sb.Append(this.DeviceName); |
darienf | 3:36de8b9e4b1a | 230 | sb.Append(", "); |
darienf | 3:36de8b9e4b1a | 231 | sb.Append(reg.address.ToString("X2")); |
darienf | 3:36de8b9e4b1a | 232 | sb.Append("h, "); |
darienf | 3:36de8b9e4b1a | 233 | sb.Append(reg.detailedName); |
darienf | 3:36de8b9e4b1a | 234 | sb.Append(", "); |
darienf | 3:36de8b9e4b1a | 235 | sb.Append(dataStr); |
darienf | 3:36de8b9e4b1a | 236 | sb.Append("h"); |
darienf | 3:36de8b9e4b1a | 237 | sb.Append(", "); |
darienf | 3:36de8b9e4b1a | 238 | sb.Append(", "); |
darienf | 3:36de8b9e4b1a | 239 | } |
darienf | 3:36de8b9e4b1a | 240 | else // finished with register map, just have descriptions |
darienf | 3:36de8b9e4b1a | 241 | { |
darienf | 3:36de8b9e4b1a | 242 | sb.Append(", "); |
darienf | 3:36de8b9e4b1a | 243 | sb.Append(", "); |
darienf | 3:36de8b9e4b1a | 244 | sb.Append(", "); |
darienf | 3:36de8b9e4b1a | 245 | sb.Append(", "); |
darienf | 3:36de8b9e4b1a | 246 | sb.Append(", "); |
darienf | 3:36de8b9e4b1a | 247 | } |
darienf | 3:36de8b9e4b1a | 248 | |
darienf | 3:36de8b9e4b1a | 249 | if (i == 0) // Register name and values |
darienf | 3:36de8b9e4b1a | 250 | { |
darienf | 3:36de8b9e4b1a | 251 | for (int k = 0; k < controller.InfoArray.Length; k++) |
darienf | 3:36de8b9e4b1a | 252 | { |
darienf | 3:36de8b9e4b1a | 253 | if (controller.InfoArray[k].type != RegisterInfo.RegisterType.WriteOnly) |
darienf | 3:36de8b9e4b1a | 254 | { |
darienf | 3:36de8b9e4b1a | 255 | sb.Append(controller.InfoArray[k].name); |
darienf | 3:36de8b9e4b1a | 256 | sb.Append(" = "); |
darienf | 3:36de8b9e4b1a | 257 | sb.Append(FormatData(controller.InfoArray[k])); |
darienf | 3:36de8b9e4b1a | 258 | sb.Append("h"); |
darienf | 3:36de8b9e4b1a | 259 | sb.Append(", "); |
darienf | 3:36de8b9e4b1a | 260 | } |
darienf | 3:36de8b9e4b1a | 261 | } |
darienf | 3:36de8b9e4b1a | 262 | } |
darienf | 3:36de8b9e4b1a | 263 | else // descriptions |
darienf | 3:36de8b9e4b1a | 264 | { |
darienf | 3:36de8b9e4b1a | 265 | for (int k = 0; k < controller.InfoArray.Length; k++) |
darienf | 3:36de8b9e4b1a | 266 | { |
darienf | 3:36de8b9e4b1a | 267 | if (controller.InfoArray[k].type != RegisterInfo.RegisterType.WriteOnly) |
darienf | 3:36de8b9e4b1a | 268 | { |
darienf | 3:36de8b9e4b1a | 269 | if (i - 1 < bitDescriptions[k].Length) |
darienf | 3:36de8b9e4b1a | 270 | { |
darienf | 3:36de8b9e4b1a | 271 | sb.Append(bitDescriptions[k][i - 1]); |
darienf | 3:36de8b9e4b1a | 272 | } |
darienf | 3:36de8b9e4b1a | 273 | sb.Append(','); |
darienf | 3:36de8b9e4b1a | 274 | } |
darienf | 3:36de8b9e4b1a | 275 | } |
darienf | 3:36de8b9e4b1a | 276 | } |
darienf | 3:36de8b9e4b1a | 277 | sb.Append(Environment.NewLine); |
darienf | 3:36de8b9e4b1a | 278 | } |
darienf | 3:36de8b9e4b1a | 279 | |
darienf | 3:36de8b9e4b1a | 280 | /* |
darienf | 3:36de8b9e4b1a | 281 | foreach(RegisterInfo reg in controller.InfoArray) |
darienf | 3:36de8b9e4b1a | 282 | { |
darienf | 3:36de8b9e4b1a | 283 | if (reg.address == 1 || reg.address == 8 || reg.address == 9 || reg.address == 10) |
darienf | 3:36de8b9e4b1a | 284 | continue; |
darienf | 3:36de8b9e4b1a | 285 | |
darienf | 3:36de8b9e4b1a | 286 | sb.Append("% "); |
darienf | 3:36de8b9e4b1a | 287 | sb.Append(reg.name); |
darienf | 3:36de8b9e4b1a | 288 | sb.Append(" ("); |
darienf | 3:36de8b9e4b1a | 289 | sb.Append(reg.address.ToString("X2")); |
darienf | 3:36de8b9e4b1a | 290 | sb.Append("h)"); |
darienf | 3:36de8b9e4b1a | 291 | sb.Append(" = "); |
darienf | 3:36de8b9e4b1a | 292 | sb.Append(FormatData(reg)); |
darienf | 3:36de8b9e4b1a | 293 | sb.Append("h\n"); |
darienf | 3:36de8b9e4b1a | 294 | |
darienf | 3:36de8b9e4b1a | 295 | foreach(RegisterBitDescriptions.RegisterBitDescription b in reg.description.list) |
darienf | 3:36de8b9e4b1a | 296 | { |
darienf | 3:36de8b9e4b1a | 297 | int bitValue = (RegisterData(reg) >> b.Index) & ((1 << b.Width) - 1); // MAX30001 only |
darienf | 3:36de8b9e4b1a | 298 | sb.Append("% "); |
darienf | 3:36de8b9e4b1a | 299 | sb.Append(b.name); |
darienf | 3:36de8b9e4b1a | 300 | sb.Append(" = "); |
darienf | 3:36de8b9e4b1a | 301 | sb.Append(bitValue.ToString("X")); |
darienf | 3:36de8b9e4b1a | 302 | sb.Append("h\n"); |
darienf | 3:36de8b9e4b1a | 303 | } |
darienf | 3:36de8b9e4b1a | 304 | } |
darienf | 3:36de8b9e4b1a | 305 | */ |
darienf | 3:36de8b9e4b1a | 306 | return sb.ToString().TrimEnd(Environment.NewLine.ToCharArray()); |
darienf | 3:36de8b9e4b1a | 307 | } |
darienf | 3:36de8b9e4b1a | 308 | |
darienf | 3:36de8b9e4b1a | 309 | /// <summary> |
darienf | 3:36de8b9e4b1a | 310 | /// Register selection change display register description and update display bits |
darienf | 3:36de8b9e4b1a | 311 | /// </summary> |
darienf | 3:36de8b9e4b1a | 312 | /// <param name="sender"></param> |
darienf | 3:36de8b9e4b1a | 313 | /// <param name="e"></param> |
darienf | 3:36de8b9e4b1a | 314 | private void dgv_Registers_SelectionChanged(object sender, EventArgs e) |
darienf | 3:36de8b9e4b1a | 315 | { |
darienf | 3:36de8b9e4b1a | 316 | UpdateRegisters(); |
darienf | 3:36de8b9e4b1a | 317 | } |
darienf | 3:36de8b9e4b1a | 318 | |
darienf | 3:36de8b9e4b1a | 319 | private void UpdateRegisters() |
darienf | 3:36de8b9e4b1a | 320 | { |
darienf | 3:36de8b9e4b1a | 321 | //get the index of the row selected |
darienf | 3:36de8b9e4b1a | 322 | int row = dgv_Registers.CurrentRow.Index; |
darienf | 3:36de8b9e4b1a | 323 | |
darienf | 3:36de8b9e4b1a | 324 | //make sure there is bit description info and then display it |
darienf | 3:36de8b9e4b1a | 325 | if (controller.InfoArray[row].description != null) |
darienf | 3:36de8b9e4b1a | 326 | { |
darienf | 3:36de8b9e4b1a | 327 | lbl_bitDes.Text = "Bit Description: " + controller.InfoArray[row].name + " Register"; |
darienf | 3:36de8b9e4b1a | 328 | UpdateRegisterDesTable(controller.InfoArray[row].description); |
darienf | 3:36de8b9e4b1a | 329 | RegisterValue = Int32.Parse((string)(dgv_Registers[2, row].Value), System.Globalization.NumberStyles.HexNumber); |
darienf | 3:36de8b9e4b1a | 330 | UpdateRegisterBits(controller.InfoArray[row].description, RegisterValue); |
darienf | 3:36de8b9e4b1a | 331 | } |
darienf | 3:36de8b9e4b1a | 332 | } |
darienf | 3:36de8b9e4b1a | 333 | |
darienf | 3:36de8b9e4b1a | 334 | /// <summary> |
darienf | 3:36de8b9e4b1a | 335 | /// Fill register description table |
darienf | 3:36de8b9e4b1a | 336 | /// </summary> |
darienf | 3:36de8b9e4b1a | 337 | /// <param name="bitsDes"></param> |
darienf | 3:36de8b9e4b1a | 338 | public void UpdateRegisterDesTable(RegisterBitDescriptions bitsDes) |
darienf | 3:36de8b9e4b1a | 339 | { |
darienf | 3:36de8b9e4b1a | 340 | //int numBits = bitsDes.Count; |
darienf | 3:36de8b9e4b1a | 341 | |
darienf | 3:36de8b9e4b1a | 342 | dgv_RegDes.Rows.Clear(); |
darienf | 3:36de8b9e4b1a | 343 | |
darienf | 3:36de8b9e4b1a | 344 | foreach (RegisterBitDescriptions.RegisterBitDescription b in bitsDes.list) |
darienf | 3:36de8b9e4b1a | 345 | { |
darienf | 3:36de8b9e4b1a | 346 | dgv_RegDes.Rows.Add(b.bit, b.name, b.description); |
darienf | 3:36de8b9e4b1a | 347 | } |
darienf | 3:36de8b9e4b1a | 348 | |
darienf | 3:36de8b9e4b1a | 349 | } |
darienf | 3:36de8b9e4b1a | 350 | |
darienf | 3:36de8b9e4b1a | 351 | public void UpdateRegisterBits() |
darienf | 3:36de8b9e4b1a | 352 | { |
darienf | 3:36de8b9e4b1a | 353 | int row; |
darienf | 3:36de8b9e4b1a | 354 | |
darienf | 3:36de8b9e4b1a | 355 | if (dgv_Registers.CurrentRow != null) |
darienf | 3:36de8b9e4b1a | 356 | { |
darienf | 3:36de8b9e4b1a | 357 | row = dgv_Registers.CurrentRow.Index; |
darienf | 3:36de8b9e4b1a | 358 | |
darienf | 3:36de8b9e4b1a | 359 | if (controller.InfoArray[row].description != null) |
darienf | 3:36de8b9e4b1a | 360 | { |
darienf | 3:36de8b9e4b1a | 361 | RegisterValue = Int32.Parse((string)(dgv_Registers[2, row].Value), System.Globalization.NumberStyles.HexNumber); |
darienf | 3:36de8b9e4b1a | 362 | UpdateRegisterBits(controller.InfoArray[row].description, RegisterValue); |
darienf | 3:36de8b9e4b1a | 363 | } |
darienf | 3:36de8b9e4b1a | 364 | } |
darienf | 3:36de8b9e4b1a | 365 | } |
darienf | 3:36de8b9e4b1a | 366 | |
darienf | 3:36de8b9e4b1a | 367 | public void UpdateRegisterIndexWidth() |
darienf | 3:36de8b9e4b1a | 368 | { |
darienf | 3:36de8b9e4b1a | 369 | RegisterInfo[] info = controller.InfoArray; |
darienf | 3:36de8b9e4b1a | 370 | |
darienf | 3:36de8b9e4b1a | 371 | foreach(RegisterInfo regInfo in info) // Registers |
darienf | 3:36de8b9e4b1a | 372 | { |
darienf | 3:36de8b9e4b1a | 373 | foreach (RegisterBitDescriptions.RegisterBitDescription b in regInfo.description.list) // Bits |
darienf | 3:36de8b9e4b1a | 374 | { |
darienf | 3:36de8b9e4b1a | 375 | string[] numbers = Regex.Split(b.bit, @"\D+"); // Bits [20:17] |
darienf | 3:36de8b9e4b1a | 376 | string registerBitName; |
darienf | 3:36de8b9e4b1a | 377 | int number1 = -1; |
darienf | 3:36de8b9e4b1a | 378 | int number2 = -1; |
darienf | 3:36de8b9e4b1a | 379 | |
darienf | 3:36de8b9e4b1a | 380 | // Find Bit Range |
darienf | 3:36de8b9e4b1a | 381 | foreach (string value in numbers) |
darienf | 3:36de8b9e4b1a | 382 | { |
darienf | 3:36de8b9e4b1a | 383 | if (value != String.Empty) |
darienf | 3:36de8b9e4b1a | 384 | { |
darienf | 3:36de8b9e4b1a | 385 | if (number1 == -1) // First number found |
darienf | 3:36de8b9e4b1a | 386 | number1 = Int32.Parse(value); |
darienf | 3:36de8b9e4b1a | 387 | else // Second number found |
darienf | 3:36de8b9e4b1a | 388 | number2 = Int32.Parse(value); |
darienf | 3:36de8b9e4b1a | 389 | } |
darienf | 3:36de8b9e4b1a | 390 | } |
darienf | 3:36de8b9e4b1a | 391 | |
darienf | 3:36de8b9e4b1a | 392 | if (number2 == -1) // Single Number: single bit field (example: Bit 20) |
darienf | 3:36de8b9e4b1a | 393 | { |
darienf | 3:36de8b9e4b1a | 394 | b.Width = 1; |
darienf | 3:36de8b9e4b1a | 395 | b.Index = number1; |
darienf | 3:36de8b9e4b1a | 396 | } |
darienf | 3:36de8b9e4b1a | 397 | else // Multiple Bits: multiple bit field (example: Bit [20:17]) |
darienf | 3:36de8b9e4b1a | 398 | { |
darienf | 3:36de8b9e4b1a | 399 | registerBitName = Regex.Replace(b.name, @"\[\d+:\d+\]", String.Empty); // Remove [#.#] from bit field name |
darienf | 3:36de8b9e4b1a | 400 | |
darienf | 3:36de8b9e4b1a | 401 | for (int i = number1; i >= number2; i--) |
darienf | 3:36de8b9e4b1a | 402 | { |
darienf | 3:36de8b9e4b1a | 403 | bitLabels[i].Text = registerBitName + "[" + (i - number2) + "]"; // Calculate bit field number |
darienf | 3:36de8b9e4b1a | 404 | } |
darienf | 3:36de8b9e4b1a | 405 | |
darienf | 3:36de8b9e4b1a | 406 | b.Index = number2; |
darienf | 3:36de8b9e4b1a | 407 | b.Width = number1 - number2 + 1; |
darienf | 3:36de8b9e4b1a | 408 | |
darienf | 3:36de8b9e4b1a | 409 | } |
darienf | 3:36de8b9e4b1a | 410 | } |
darienf | 3:36de8b9e4b1a | 411 | } |
darienf | 3:36de8b9e4b1a | 412 | } |
darienf | 3:36de8b9e4b1a | 413 | |
darienf | 3:36de8b9e4b1a | 414 | /// <summary> |
darienf | 3:36de8b9e4b1a | 415 | /// Fill bit table |
darienf | 3:36de8b9e4b1a | 416 | /// </summary> |
darienf | 3:36de8b9e4b1a | 417 | /// <param name="bitDes"></param> |
darienf | 3:36de8b9e4b1a | 418 | /// <param name="regValue"></param> |
darienf | 3:36de8b9e4b1a | 419 | public void UpdateRegisterBits(RegisterBitDescriptions bitDes, int regValue) |
darienf | 3:36de8b9e4b1a | 420 | { |
darienf | 3:36de8b9e4b1a | 421 | // Reset Bit State |
darienf | 3:36de8b9e4b1a | 422 | for (int i = 0; i < 24; i++ ) |
darienf | 3:36de8b9e4b1a | 423 | { |
darienf | 3:36de8b9e4b1a | 424 | bitLabels[i].Text = "-"; |
darienf | 3:36de8b9e4b1a | 425 | |
darienf | 3:36de8b9e4b1a | 426 | // Set label based on bit state |
darienf | 3:36de8b9e4b1a | 427 | if (((regValue >> i) & 0x01) == 0x01) |
darienf | 3:36de8b9e4b1a | 428 | bitLabels[i].Font = BoldFont; |
darienf | 3:36de8b9e4b1a | 429 | else |
darienf | 3:36de8b9e4b1a | 430 | bitLabels[i].Font = RegularFont; |
darienf | 3:36de8b9e4b1a | 431 | } |
darienf | 3:36de8b9e4b1a | 432 | |
darienf | 3:36de8b9e4b1a | 433 | foreach (RegisterBitDescriptions.RegisterBitDescription b in bitDes.list) |
darienf | 3:36de8b9e4b1a | 434 | { |
darienf | 3:36de8b9e4b1a | 435 | string[] numbers = Regex.Split(b.bit, @"\D+"); // Bits [20:17] |
darienf | 3:36de8b9e4b1a | 436 | string registerBitName; |
darienf | 3:36de8b9e4b1a | 437 | int number1 = -1; |
darienf | 3:36de8b9e4b1a | 438 | int number2 = -1; |
darienf | 3:36de8b9e4b1a | 439 | |
darienf | 3:36de8b9e4b1a | 440 | // Find Bit Range |
darienf | 3:36de8b9e4b1a | 441 | foreach (string value in numbers) |
darienf | 3:36de8b9e4b1a | 442 | { |
darienf | 3:36de8b9e4b1a | 443 | if (value != String.Empty) |
darienf | 3:36de8b9e4b1a | 444 | { |
darienf | 3:36de8b9e4b1a | 445 | if (number1 == -1) // First number found |
darienf | 3:36de8b9e4b1a | 446 | number1 = Int32.Parse(value); |
darienf | 3:36de8b9e4b1a | 447 | else // Second number found |
darienf | 3:36de8b9e4b1a | 448 | number2 = Int32.Parse(value); |
darienf | 3:36de8b9e4b1a | 449 | } |
darienf | 3:36de8b9e4b1a | 450 | } |
darienf | 3:36de8b9e4b1a | 451 | |
darienf | 3:36de8b9e4b1a | 452 | if (number2 == -1) // Single Number: single bit field (example: Bit 20) |
darienf | 3:36de8b9e4b1a | 453 | { |
darienf | 3:36de8b9e4b1a | 454 | bitLabels[number1].Text = b.name; |
darienf | 3:36de8b9e4b1a | 455 | } |
darienf | 3:36de8b9e4b1a | 456 | else // Multiple Bits: multiple bit field (example: Bit [20:17]) |
darienf | 3:36de8b9e4b1a | 457 | { |
darienf | 3:36de8b9e4b1a | 458 | registerBitName = Regex.Replace(b.name, @"\[\d+:\d+\]", String.Empty); // Remove [#.#] from bit field name |
darienf | 3:36de8b9e4b1a | 459 | |
darienf | 3:36de8b9e4b1a | 460 | for (int i = number1; i >= number2; i--) |
darienf | 3:36de8b9e4b1a | 461 | { |
darienf | 3:36de8b9e4b1a | 462 | bitLabels[i].Text = registerBitName + "[" + (i - number2) + "]"; // Calculate bit field number |
darienf | 3:36de8b9e4b1a | 463 | } |
darienf | 3:36de8b9e4b1a | 464 | |
darienf | 3:36de8b9e4b1a | 465 | } |
darienf | 3:36de8b9e4b1a | 466 | } |
darienf | 3:36de8b9e4b1a | 467 | } |
darienf | 3:36de8b9e4b1a | 468 | |
darienf | 3:36de8b9e4b1a | 469 | /// <summary> |
darienf | 3:36de8b9e4b1a | 470 | /// Parse user input and write register |
darienf | 3:36de8b9e4b1a | 471 | /// </summary> |
darienf | 3:36de8b9e4b1a | 472 | /// <param name="sender"></param> |
darienf | 3:36de8b9e4b1a | 473 | /// <param name="e"></param> |
darienf | 3:36de8b9e4b1a | 474 | private void dgv_Registers_CellEndEdit(object sender, DataGridViewCellEventArgs e) |
darienf | 3:36de8b9e4b1a | 475 | { |
darienf | 3:36de8b9e4b1a | 476 | //check if hardware is connected |
darienf | 3:36de8b9e4b1a | 477 | //if (online && !COMMConnected()) |
darienf | 3:36de8b9e4b1a | 478 | // return; |
darienf | 3:36de8b9e4b1a | 479 | |
darienf | 3:36de8b9e4b1a | 480 | RegisterInfo reg = controller.InfoArray[e.RowIndex]; |
darienf | 3:36de8b9e4b1a | 481 | byte address = (byte)reg.address; |
darienf | 3:36de8b9e4b1a | 482 | byte numBytes = (byte)reg.numBytes; |
darienf | 3:36de8b9e4b1a | 483 | |
darienf | 3:36de8b9e4b1a | 484 | int[] data = reg.data; |
darienf | 3:36de8b9e4b1a | 485 | |
darienf | 3:36de8b9e4b1a | 486 | string value = (string)dgv_Registers[col_Value.Index, e.RowIndex].Value; |
darienf | 3:36de8b9e4b1a | 487 | string error = ValidateHexValue(value, numBytes); |
darienf | 3:36de8b9e4b1a | 488 | |
darienf | 3:36de8b9e4b1a | 489 | if (error == "Valid") |
darienf | 3:36de8b9e4b1a | 490 | { |
darienf | 3:36de8b9e4b1a | 491 | //erase error text if one exist |
darienf | 3:36de8b9e4b1a | 492 | if (dgv_Registers[col_Value.Index, e.RowIndex].ErrorText != String.Empty) |
darienf | 3:36de8b9e4b1a | 493 | dgv_Registers[col_Value.Index, e.RowIndex].ErrorText = String.Empty; |
darienf | 3:36de8b9e4b1a | 494 | |
darienf | 3:36de8b9e4b1a | 495 | //convert string hex to number hex |
darienf | 3:36de8b9e4b1a | 496 | int hex = Int32.Parse(value, System.Globalization.NumberStyles.HexNumber); |
darienf | 3:36de8b9e4b1a | 497 | |
darienf | 3:36de8b9e4b1a | 498 | //write value back to GUI with correct number of characters |
darienf | 3:36de8b9e4b1a | 499 | dgv_Registers[col_Value.Index, e.RowIndex].Value = hex.ToString("X" + numBytes * 2); |
darienf | 3:36de8b9e4b1a | 500 | |
darienf | 3:36de8b9e4b1a | 501 | WriteRegister(reg, hex); |
darienf | 3:36de8b9e4b1a | 502 | |
darienf | 3:36de8b9e4b1a | 503 | if (RegisterWriteComplete != null) |
darienf | 3:36de8b9e4b1a | 504 | { |
darienf | 3:36de8b9e4b1a | 505 | RegisterWriteComplete(this, new RegisterArgs { Register = address }); |
darienf | 3:36de8b9e4b1a | 506 | } |
darienf | 3:36de8b9e4b1a | 507 | |
darienf | 3:36de8b9e4b1a | 508 | } |
darienf | 3:36de8b9e4b1a | 509 | else//value is not valid |
darienf | 3:36de8b9e4b1a | 510 | { |
darienf | 3:36de8b9e4b1a | 511 | byte zero = 0; |
darienf | 3:36de8b9e4b1a | 512 | dgv_Registers[col_Value.Index, e.RowIndex].Value = zero.ToString("X" + numBytes * 2); //enter zeros with correct number of characters |
darienf | 3:36de8b9e4b1a | 513 | dgv_Registers[col_Value.Index, e.RowIndex].ErrorText = error; //add error text |
darienf | 3:36de8b9e4b1a | 514 | } |
darienf | 3:36de8b9e4b1a | 515 | |
darienf | 3:36de8b9e4b1a | 516 | UpdateRegisters(); |
darienf | 3:36de8b9e4b1a | 517 | } |
darienf | 3:36de8b9e4b1a | 518 | |
darienf | 3:36de8b9e4b1a | 519 | /// <summary> |
darienf | 3:36de8b9e4b1a | 520 | /// Write data to register |
darienf | 3:36de8b9e4b1a | 521 | /// </summary> |
darienf | 3:36de8b9e4b1a | 522 | /// <param name="reg"></param> |
darienf | 3:36de8b9e4b1a | 523 | /// <param name="hex"></param> |
darienf | 3:36de8b9e4b1a | 524 | public void WriteRegister(RegisterInfo reg, int hex) |
darienf | 3:36de8b9e4b1a | 525 | { |
darienf | 3:36de8b9e4b1a | 526 | byte numBytes = (byte)reg.numBytes; |
darienf | 3:36de8b9e4b1a | 527 | int[] data = reg.data; |
darienf | 3:36de8b9e4b1a | 528 | |
darienf | 3:36de8b9e4b1a | 529 | switch (numBytes) |
darienf | 3:36de8b9e4b1a | 530 | { |
darienf | 3:36de8b9e4b1a | 531 | case 4: |
darienf | 3:36de8b9e4b1a | 532 | data[0] = (byte)(hex >> 24); |
darienf | 3:36de8b9e4b1a | 533 | data[1] = (byte)(hex >> 16); |
darienf | 3:36de8b9e4b1a | 534 | data[2] = (byte)(hex >> 8); |
darienf | 3:36de8b9e4b1a | 535 | data[3] = (byte)hex; |
darienf | 3:36de8b9e4b1a | 536 | break; |
darienf | 3:36de8b9e4b1a | 537 | case 3: |
darienf | 3:36de8b9e4b1a | 538 | hex &= 0x00FFFFFF;//clear bits not used |
darienf | 3:36de8b9e4b1a | 539 | data[0] = (byte)(hex >> 16); |
darienf | 3:36de8b9e4b1a | 540 | data[1] = (byte)(hex >> 8); |
darienf | 3:36de8b9e4b1a | 541 | data[2] = (byte)hex; |
darienf | 3:36de8b9e4b1a | 542 | break; |
darienf | 3:36de8b9e4b1a | 543 | case 2: |
darienf | 3:36de8b9e4b1a | 544 | hex &= 0x0000FFFF;//clear bits not used |
darienf | 3:36de8b9e4b1a | 545 | data[0] = (byte)(hex >> 8); |
darienf | 3:36de8b9e4b1a | 546 | data[1] = (byte)hex; |
darienf | 3:36de8b9e4b1a | 547 | break; |
darienf | 3:36de8b9e4b1a | 548 | case 1: |
darienf | 3:36de8b9e4b1a | 549 | hex &= 0x000000FF;//clear bits not used |
darienf | 3:36de8b9e4b1a | 550 | data[0] = (byte)hex; |
darienf | 3:36de8b9e4b1a | 551 | break; |
darienf | 3:36de8b9e4b1a | 552 | } |
darienf | 3:36de8b9e4b1a | 553 | controller.WriteRegister(reg); |
darienf | 3:36de8b9e4b1a | 554 | } |
darienf | 3:36de8b9e4b1a | 555 | |
darienf | 3:36de8b9e4b1a | 556 | /// <summary> |
darienf | 3:36de8b9e4b1a | 557 | /// Verify hex |
darienf | 3:36de8b9e4b1a | 558 | /// </summary> |
darienf | 3:36de8b9e4b1a | 559 | /// <param name="value"></param> |
darienf | 3:36de8b9e4b1a | 560 | /// <param name="numBytes"></param> |
darienf | 3:36de8b9e4b1a | 561 | /// <returns></returns> |
darienf | 3:36de8b9e4b1a | 562 | public String ValidateHexValue(String value, byte numBytes) |
darienf | 3:36de8b9e4b1a | 563 | { |
darienf | 3:36de8b9e4b1a | 564 | char[] character = new char[numBytes * 2]; |
darienf | 3:36de8b9e4b1a | 565 | String error = "Valid"; |
darienf | 3:36de8b9e4b1a | 566 | |
darienf | 3:36de8b9e4b1a | 567 | if (value == null) |
darienf | 3:36de8b9e4b1a | 568 | { |
darienf | 3:36de8b9e4b1a | 569 | error = "Empty Value"; |
darienf | 3:36de8b9e4b1a | 570 | return error; |
darienf | 3:36de8b9e4b1a | 571 | } |
darienf | 3:36de8b9e4b1a | 572 | |
darienf | 3:36de8b9e4b1a | 573 | //check to see if too many characters were entered |
darienf | 3:36de8b9e4b1a | 574 | if (value.Length > numBytes * 2) |
darienf | 3:36de8b9e4b1a | 575 | error = "Too many characters"; |
darienf | 3:36de8b9e4b1a | 576 | else |
darienf | 3:36de8b9e4b1a | 577 | { |
darienf | 3:36de8b9e4b1a | 578 | character = value.ToCharArray(); //split string into character array |
darienf | 3:36de8b9e4b1a | 579 | |
darienf | 3:36de8b9e4b1a | 580 | for (int i = 0; i < value.Length; i++) |
darienf | 3:36de8b9e4b1a | 581 | { |
darienf | 3:36de8b9e4b1a | 582 | if (Char.IsLetterOrDigit(character[i])) //check for letter and digits |
darienf | 3:36de8b9e4b1a | 583 | { |
darienf | 3:36de8b9e4b1a | 584 | if (Char.IsLower(character[i])) |
darienf | 3:36de8b9e4b1a | 585 | character[i] = Char.ToUpper(character[i]); //changed letter to upper case |
darienf | 3:36de8b9e4b1a | 586 | |
darienf | 3:36de8b9e4b1a | 587 | //check A-F |
darienf | 3:36de8b9e4b1a | 588 | if (character[i] > 'F') |
darienf | 3:36de8b9e4b1a | 589 | error = "Invalid Letter"; |
darienf | 3:36de8b9e4b1a | 590 | } |
darienf | 3:36de8b9e4b1a | 591 | else |
darienf | 3:36de8b9e4b1a | 592 | error = "Invalid Character"; |
darienf | 3:36de8b9e4b1a | 593 | } |
darienf | 3:36de8b9e4b1a | 594 | } |
darienf | 3:36de8b9e4b1a | 595 | return error; |
darienf | 3:36de8b9e4b1a | 596 | } |
darienf | 3:36de8b9e4b1a | 597 | |
darienf | 3:36de8b9e4b1a | 598 | public void WriteAll() |
darienf | 3:36de8b9e4b1a | 599 | { |
darienf | 3:36de8b9e4b1a | 600 | if (Connected) |
darienf | 3:36de8b9e4b1a | 601 | controller.WriteAll(); |
darienf | 3:36de8b9e4b1a | 602 | DisplayRegisters(); |
darienf | 3:36de8b9e4b1a | 603 | } |
darienf | 3:36de8b9e4b1a | 604 | |
darienf | 3:36de8b9e4b1a | 605 | /// <summary> |
darienf | 3:36de8b9e4b1a | 606 | /// Read all button handler |
darienf | 3:36de8b9e4b1a | 607 | /// </summary> |
darienf | 3:36de8b9e4b1a | 608 | /// <param name="sender"></param> |
darienf | 3:36de8b9e4b1a | 609 | /// <param name="e"></param> |
darienf | 3:36de8b9e4b1a | 610 | private void btn_ReadAll_Click(object sender, EventArgs e) |
darienf | 3:36de8b9e4b1a | 611 | { |
darienf | 3:36de8b9e4b1a | 612 | ReadAll(); |
darienf | 3:36de8b9e4b1a | 613 | } |
darienf | 3:36de8b9e4b1a | 614 | |
darienf | 3:36de8b9e4b1a | 615 | /// <summary> |
darienf | 3:36de8b9e4b1a | 616 | /// Read all registers and display results |
darienf | 3:36de8b9e4b1a | 617 | /// </summary> |
darienf | 3:36de8b9e4b1a | 618 | public void ReadAll() |
darienf | 3:36de8b9e4b1a | 619 | { |
darienf | 3:36de8b9e4b1a | 620 | if (Connected) |
darienf | 3:36de8b9e4b1a | 621 | controller.ReadAll(); |
darienf | 3:36de8b9e4b1a | 622 | DisplayRegisters(); |
darienf | 3:36de8b9e4b1a | 623 | UpdateRegisterBits(); |
darienf | 3:36de8b9e4b1a | 624 | } |
darienf | 3:36de8b9e4b1a | 625 | |
darienf | 3:36de8b9e4b1a | 626 | public RegisterInfo RegisterAddress(int address) |
darienf | 3:36de8b9e4b1a | 627 | { |
darienf | 3:36de8b9e4b1a | 628 | for(int i = 0; i < controller.InfoArray.Length; i++) |
darienf | 3:36de8b9e4b1a | 629 | { |
darienf | 3:36de8b9e4b1a | 630 | if (controller.InfoArray[i].address == address) |
darienf | 3:36de8b9e4b1a | 631 | return controller.InfoArray[i]; |
darienf | 3:36de8b9e4b1a | 632 | } |
darienf | 3:36de8b9e4b1a | 633 | |
darienf | 3:36de8b9e4b1a | 634 | return null; |
darienf | 3:36de8b9e4b1a | 635 | } |
darienf | 3:36de8b9e4b1a | 636 | |
darienf | 3:36de8b9e4b1a | 637 | /// <summary> |
darienf | 3:36de8b9e4b1a | 638 | /// Read register handler |
darienf | 3:36de8b9e4b1a | 639 | /// </summary> |
darienf | 3:36de8b9e4b1a | 640 | /// <param name="sender"></param> |
darienf | 3:36de8b9e4b1a | 641 | /// <param name="e"></param> |
darienf | 3:36de8b9e4b1a | 642 | private void btnRead_Click(object sender, EventArgs e) |
darienf | 3:36de8b9e4b1a | 643 | { |
darienf | 3:36de8b9e4b1a | 644 | if (connected) |
darienf | 3:36de8b9e4b1a | 645 | { |
darienf | 3:36de8b9e4b1a | 646 | controller.ReadRegister(controller.InfoArray[dgv_Registers.SelectedRows[0].Index]); |
darienf | 3:36de8b9e4b1a | 647 | DisplayRegisters(); |
darienf | 3:36de8b9e4b1a | 648 | UpdateRegisterBits(); |
darienf | 3:36de8b9e4b1a | 649 | } |
darienf | 3:36de8b9e4b1a | 650 | } |
darienf | 3:36de8b9e4b1a | 651 | |
darienf | 3:36de8b9e4b1a | 652 | /// <summary> |
darienf | 3:36de8b9e4b1a | 653 | /// Toggle register bit handler |
darienf | 3:36de8b9e4b1a | 654 | /// </summary> |
darienf | 3:36de8b9e4b1a | 655 | /// <param name="sender"></param> |
darienf | 3:36de8b9e4b1a | 656 | /// <param name="e"></param> |
darienf | 3:36de8b9e4b1a | 657 | private void lblBit_Click(object sender, EventArgs e) |
darienf | 3:36de8b9e4b1a | 658 | { |
darienf | 3:36de8b9e4b1a | 659 | Label lbl = (Label)sender; |
darienf | 3:36de8b9e4b1a | 660 | |
darienf | 3:36de8b9e4b1a | 661 | string[] number = Regex.Split(lbl.Name, @"\D+"); |
darienf | 3:36de8b9e4b1a | 662 | |
darienf | 3:36de8b9e4b1a | 663 | if (lbl.Font.Bold == true) |
darienf | 3:36de8b9e4b1a | 664 | lbl.Font = RegularFont; |
darienf | 3:36de8b9e4b1a | 665 | else |
darienf | 3:36de8b9e4b1a | 666 | lbl.Font = BoldFont; |
darienf | 3:36de8b9e4b1a | 667 | |
darienf | 3:36de8b9e4b1a | 668 | foreach(string value in number) |
darienf | 3:36de8b9e4b1a | 669 | { |
darienf | 3:36de8b9e4b1a | 670 | if (value != String.Empty) |
darienf | 3:36de8b9e4b1a | 671 | { |
darienf | 3:36de8b9e4b1a | 672 | int bitNumber = Int32.Parse(value); |
darienf | 3:36de8b9e4b1a | 673 | |
darienf | 3:36de8b9e4b1a | 674 | RegisterValue &= ~(1 << bitNumber); // clear bit |
darienf | 3:36de8b9e4b1a | 675 | RegisterValue |= ((lbl.Font.Bold == true ? 1 : 0) << bitNumber); // set bit |
darienf | 3:36de8b9e4b1a | 676 | } |
darienf | 3:36de8b9e4b1a | 677 | } |
darienf | 3:36de8b9e4b1a | 678 | } |
darienf | 3:36de8b9e4b1a | 679 | |
darienf | 3:36de8b9e4b1a | 680 | /// <summary> |
darienf | 3:36de8b9e4b1a | 681 | /// Write register button handler |
darienf | 3:36de8b9e4b1a | 682 | /// </summary> |
darienf | 3:36de8b9e4b1a | 683 | /// <param name="sender"></param> |
darienf | 3:36de8b9e4b1a | 684 | /// <param name="e"></param> |
darienf | 3:36de8b9e4b1a | 685 | private void btnWrite_Click(object sender, EventArgs e) |
darienf | 3:36de8b9e4b1a | 686 | { |
darienf | 3:36de8b9e4b1a | 687 | if (connected) |
darienf | 3:36de8b9e4b1a | 688 | { |
darienf | 3:36de8b9e4b1a | 689 | WriteRegister(controller.InfoArray[dgv_Registers.SelectedRows[0].Index], RegisterValue); |
darienf | 3:36de8b9e4b1a | 690 | controller.ReadRegister(controller.InfoArray[dgv_Registers.SelectedRows[0].Index]); |
darienf | 3:36de8b9e4b1a | 691 | DisplayRegisters(); |
darienf | 3:36de8b9e4b1a | 692 | } |
darienf | 3:36de8b9e4b1a | 693 | } |
darienf | 3:36de8b9e4b1a | 694 | |
darienf | 3:36de8b9e4b1a | 695 | /// <summary> |
darienf | 3:36de8b9e4b1a | 696 | /// On cell begin edit |
darienf | 3:36de8b9e4b1a | 697 | /// </summary> |
darienf | 3:36de8b9e4b1a | 698 | /// <param name="sender"></param> |
darienf | 3:36de8b9e4b1a | 699 | /// <param name="e"></param> |
darienf | 3:36de8b9e4b1a | 700 | private void OnCellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) |
darienf | 3:36de8b9e4b1a | 701 | { |
darienf | 3:36de8b9e4b1a | 702 | if (CellBeginEdit != null) |
darienf | 3:36de8b9e4b1a | 703 | { |
darienf | 3:36de8b9e4b1a | 704 | CellBeginEdit(sender, e); |
darienf | 3:36de8b9e4b1a | 705 | } |
darienf | 3:36de8b9e4b1a | 706 | } |
darienf | 3:36de8b9e4b1a | 707 | |
darienf | 3:36de8b9e4b1a | 708 | private void DataGridViewColumns(DataGridView listview, SizeF factor) |
darienf | 3:36de8b9e4b1a | 709 | { |
darienf | 3:36de8b9e4b1a | 710 | foreach (DataGridViewColumn column in listview.Columns) |
darienf | 3:36de8b9e4b1a | 711 | { |
darienf | 3:36de8b9e4b1a | 712 | column.Width = (int)Math.Round(column.Width * factor.Width); |
darienf | 3:36de8b9e4b1a | 713 | } |
darienf | 3:36de8b9e4b1a | 714 | } |
darienf | 3:36de8b9e4b1a | 715 | |
darienf | 3:36de8b9e4b1a | 716 | protected override void ScaleControl(SizeF factor, BoundsSpecified specified) |
darienf | 3:36de8b9e4b1a | 717 | { |
darienf | 3:36de8b9e4b1a | 718 | base.ScaleControl(factor, specified); |
darienf | 3:36de8b9e4b1a | 719 | DataGridViewColumns(dgv_RegDes, factor); |
darienf | 3:36de8b9e4b1a | 720 | DataGridViewColumns(dgv_Registers, factor); |
darienf | 3:36de8b9e4b1a | 721 | } |
darienf | 3:36de8b9e4b1a | 722 | /* |
darienf | 3:36de8b9e4b1a | 723 | public class RegisterProcess |
darienf | 3:36de8b9e4b1a | 724 | { |
darienf | 3:36de8b9e4b1a | 725 | RegisterBit[][] Data; |
darienf | 3:36de8b9e4b1a | 726 | |
darienf | 3:36de8b9e4b1a | 727 | public RegisterProcess(RegisterInfo[] info) |
darienf | 3:36de8b9e4b1a | 728 | { |
darienf | 3:36de8b9e4b1a | 729 | Data = new RegisterBit[info.Length][]; |
darienf | 3:36de8b9e4b1a | 730 | |
darienf | 3:36de8b9e4b1a | 731 | for (int i = 0; i < info.Length; i++) |
darienf | 3:36de8b9e4b1a | 732 | { |
darienf | 3:36de8b9e4b1a | 733 | Data[i] = new RegisterBit[info[i].description.list.Count]; |
darienf | 3:36de8b9e4b1a | 734 | |
darienf | 3:36de8b9e4b1a | 735 | for (int j = 0; j < info[i].description.list.Count; j++) |
darienf | 3:36de8b9e4b1a | 736 | { |
darienf | 3:36de8b9e4b1a | 737 | int fieldValue; |
darienf | 3:36de8b9e4b1a | 738 | fieldValue = (info[i].dataField >> info[i].description.list[j].Index) & info[i].description.list[j].Width; |
darienf | 3:36de8b9e4b1a | 739 | Data[i][j] = new RegisterBit(info[i].description.list[j].name, fieldValue); |
darienf | 3:36de8b9e4b1a | 740 | } |
darienf | 3:36de8b9e4b1a | 741 | } |
darienf | 3:36de8b9e4b1a | 742 | } |
darienf | 3:36de8b9e4b1a | 743 | |
darienf | 3:36de8b9e4b1a | 744 | class RegisterBit |
darienf | 3:36de8b9e4b1a | 745 | { |
darienf | 3:36de8b9e4b1a | 746 | string Name; |
darienf | 3:36de8b9e4b1a | 747 | int Data; |
darienf | 3:36de8b9e4b1a | 748 | |
darienf | 3:36de8b9e4b1a | 749 | public RegisterBit(string name, int data) |
darienf | 3:36de8b9e4b1a | 750 | { |
darienf | 3:36de8b9e4b1a | 751 | Name = name; |
darienf | 3:36de8b9e4b1a | 752 | Data = data; |
darienf | 3:36de8b9e4b1a | 753 | } |
darienf | 3:36de8b9e4b1a | 754 | } |
darienf | 3:36de8b9e4b1a | 755 | } |
darienf | 3:36de8b9e4b1a | 756 | */ |
darienf | 3:36de8b9e4b1a | 757 | |
darienf | 3:36de8b9e4b1a | 758 | public class RegisterArgs : EventArgs |
darienf | 3:36de8b9e4b1a | 759 | { |
darienf | 3:36de8b9e4b1a | 760 | public int Register; |
darienf | 3:36de8b9e4b1a | 761 | } |
darienf | 3:36de8b9e4b1a | 762 | |
darienf | 3:36de8b9e4b1a | 763 | |
darienf | 3:36de8b9e4b1a | 764 | } |
darienf | 3:36de8b9e4b1a | 765 | } |