Darien Figueroa / Mbed OS Final_Program

Dependencies:   USBDevice

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?

UserRevisionLine numberNew 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 }