├── Serial Comm Tester - V2 ├── AutoReplySampleText.txt ├── serial image 2.ico ├── Unicode_characters.txt ├── AutoReplySampleHexadecimal.txt ├── App.config ├── Properties │ ├── Settings.settings │ ├── Settings.Designer.cs │ ├── AssemblyInfo.cs │ ├── app.manifest │ ├── Resources.Designer.cs │ └── Resources.resx ├── Program.cs ├── Serial Comm Tester.sln ├── Modulo_256.cs ├── BCC_Calculation.cs ├── Crc32.cs ├── TwosComplement.cs ├── HexChart.cs ├── AboutBox1.cs ├── Crc8.cs ├── HexChart.resx ├── HEX_to_ASCII.txt ├── Serial Comm Tester.csproj ├── HexChart.Designer.cs ├── ChecksumCalc.resx ├── CRC16.cs ├── AboutBox1.Designer.cs ├── Conversion_Table.cs ├── ChecksumCalc.Designer.cs └── AboutBox1.resx ├── CONTRIBUTING.md ├── CODE_OF_CONDUCT.md ├── .gitignore ├── README.md └── LICENSE.txt /Serial Comm Tester - V2/AutoReplySampleText.txt: -------------------------------------------------------------------------------- 1 | Hello,Hi There 2 | count,123456 3 | what colour is the grass,green of course -------------------------------------------------------------------------------- /Serial Comm Tester - V2/serial image 2.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PhilipMur/Serial-Comm-Tester/HEAD/Serial Comm Tester - V2/serial image 2.ico -------------------------------------------------------------------------------- /Serial Comm Tester - V2/Unicode_characters.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PhilipMur/Serial-Comm-Tester/HEAD/Serial Comm Tester - V2/Unicode_characters.txt -------------------------------------------------------------------------------- /Serial Comm Tester - V2/AutoReplySampleHexadecimal.txt: -------------------------------------------------------------------------------- 1 | 48656c6c6f,4869205468657265 2 | 636f756e74,313233343536 3 | 7768617420636f6c6f757220697320746865206772617373,677265656e206f6620636f75727365 -------------------------------------------------------------------------------- /Serial Comm Tester - V2/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using System.Windows.Forms; 6 | 7 | namespace Serial_Comm_Tester 8 | { 9 | static class Program 10 | { 11 | /// 12 | /// The main entry point for the application. 13 | /// 14 | [STAThread] 15 | static void Main() 16 | { 17 | Application.EnableVisualStyles(); 18 | Application.SetCompatibleTextRenderingDefault(false); 19 | Application.Run(new Form1()); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/Serial Comm Tester.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Express 14 for Windows Desktop 4 | VisualStudioVersion = 14.0.25123.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Serial Comm Tester", "Serial Comm Tester.csproj", "{C22AE764-1206-414F-BCD3-AEBFE71C08B1}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {C22AE764-1206-414F-BCD3-AEBFE71C08B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {C22AE764-1206-414F-BCD3-AEBFE71C08B1}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {C22AE764-1206-414F-BCD3-AEBFE71C08B1}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {C22AE764-1206-414F-BCD3-AEBFE71C08B1}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Serial_Comm_Tester.Properties 12 | { 13 | 14 | 15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 18 | { 19 | 20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 21 | 22 | public static Settings Default 23 | { 24 | get 25 | { 26 | return defaultInstance; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Contribution 2 | 3 | Thank you for considering contribution to the Serial-Comm-Tester Project! 4 | How to contribute? 5 | 6 | It's very simple! 7 | 8 | 1.Fork the project 9 | 2.Make the changes 10 | 3.Issue a pull request 11 | 4.I will do a merge after verifying (in some cases changing) the code 12 | 13 | How to report bugs? 14 | 15 | You can simply use the Issues section on github 16 | Just write an issue, and i will try to respond within 24 hours! 17 | How to contribute? (without writing code) 18 | 19 | You can also do this on the Issues section, and i will label it as enhancement 20 | This way you can suggest new features, or change an older one without coding. 21 | I will try to respond within 24 hours! 22 | How to run / compile 23 | 24 | I use Visual Studio 2017 Community Edition or Visual Studio 2015 Express for Windows Desktop. 25 | The project is in c#, built with .NET Framework 4.5 26 | 27 | How to ask questions? 28 | 29 | You can also use the Issues section on GitHub, i will assign a label to it, so it's different from bugs. 30 | I will try to respond within 24 hours! 31 | You can also contact me at [My Youtube Channel](https://www.youtube.com/channel/UCAnWN8gy4oA1YbA9m8aVZ4Q) 32 | Either a comment on the video about the topic, or a message at the Discussion section on my channel page 33 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/Modulo_256.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of Serial-Comm-Tester source code. All Rights Reserved. 3 | * 4 | * Serial-Comm-Tetster is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License. 7 | * 8 | * This software is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this software; if not, write to the Free Software 15 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 16 | * USA. 17 | */ 18 | 19 | 20 | /* 21 | * Author: Philip Murray 22 | * Project Homepage: https://github.com/PhilipMur/Serial-Comm-Tester 23 | */ 24 | 25 | using System; 26 | using System.Collections.Generic; 27 | using System.Linq; 28 | using System.Text; 29 | using System.Threading.Tasks; 30 | 31 | namespace Serial_Comm_Tester 32 | { 33 | public class Modulo_256 34 | { 35 | 36 | //cheksum8 Modulo 256 37 | public string GetModulo256(byte[] data) 38 | { 39 | int checksum = 0; 40 | foreach (byte chData in data) 41 | { 42 | checksum += chData; 43 | } 44 | checksum &= 0xff; 45 | 46 | 47 | return checksum.ToString("X2"); 48 | } 49 | 50 | public byte[] HexToBytes(string input) 51 | { 52 | StringBuilder sb = new StringBuilder(input); //---get rid of null or white space 53 | sb.Replace(" ", ""); 54 | sb.Replace(" ", ""); 55 | input = sb.ToString(); 56 | 57 | byte[] result = new byte[input.Length / 2]; 58 | for (int i = 0; i < result.Length; i++) 59 | { 60 | result[i] = Convert.ToByte(input.Substring(2 * i, 2), 16); 61 | } 62 | return result; 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/BCC_Calculation.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of Serial-Comm-Tester source code. All Rights Reserved. 3 | * 4 | * Serial-Comm-Tetster is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License. 7 | * 8 | * This software is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this software; if not, write to the Free Software 15 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 16 | * USA. 17 | */ 18 | 19 | 20 | /* 21 | * Author: Philip Murray 22 | * Project Homepage: https://github.com/PhilipMur/Serial-Comm-Tester 23 | */ 24 | 25 | 26 | using System; 27 | using System.Collections.Generic; 28 | using System.Linq; 29 | using System.Text; 30 | using System.Threading.Tasks; 31 | 32 | namespace Serial_Comm_Tester 33 | { 34 | public class BCC_Calculation 35 | { 36 | /// 37 | /// Takes in a byte array and gives bacl the Block Check Character 38 | /// 39 | /// 40 | /// 41 | public string GetBCC(byte[] inputStream) 42 | { 43 | byte bcc = 0; 44 | int numOut = 0; 45 | 46 | if (inputStream != null && inputStream.Length > 0) 47 | { 48 | 49 | for (int i = 0; i < inputStream.Length; i++) 50 | { 51 | bcc ^= inputStream[i]; 52 | } 53 | } 54 | 55 | numOut = bcc; 56 | 57 | return numOut.ToString("X2"); 58 | } 59 | public byte[] HexToBytes(string input) 60 | { 61 | StringBuilder sb = new StringBuilder(input); //---get rid of null or white space 62 | sb.Replace(" ", ""); 63 | sb.Replace(" ", ""); 64 | input = sb.ToString(); 65 | 66 | byte[] result = new byte[input.Length / 2]; 67 | for (int i = 0; i < result.Length; i++) 68 | { 69 | result[i] = Convert.ToByte(input.Substring(2 * i, 2), 16); 70 | } 71 | return result; 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Serial Comm Tester")] 9 | [assembly: AssemblyDescription("This Program allows users to test hardware like RS232-USB for functionality \"Join Tx to Rx \" for an internal loop test or " + 10 | "test com port settings between devices or trouble shooting hardware and software. >> Open this program twice to send / receive from 2 com ports on the same computer/device. <<" + 11 | "\r\n" + "\r\n" + "If one of these options (\"Auto Read Bytes To Hex or Auto Read Bytes To Decimal or Auto Read \") are checked the current serial data will only be sent to that option. " + 12 | "\r\n" + "\r\n" + "If (\" Request To Send or Request To Send XOnXOff \") is selected then \"Clear To Send \" button should be \"ON\" to send data." + 13 | "\r\n" + "\r\n" + "This Serial Comm Tester is capable of reading a possible 1,112,064 characters in ASCII / UNICODE ( up to , UTF-16)8-bit enviroments and 0-255 7 bit enviroments" 14 | + " , Although not all characters will be displayed but the U+ (Unicode) number will be given and Hex and Dec equivalent to the Received Bytes." 15 | + "\r\n" + "\r\n" + " New features added :- Manual save also added , Automatic Logging is now added, Visual graph added, change Font Size added, Sending hex and Decimal values through the comport is now possible ," 16 | + "Conversion Tables :- HEX to DEC / HEX to ASCII etc... ALSO Reference Charts : Hex chart and Unicode chart. Function to verify and calculate CRC Checksums 8bit , 16bit , 32bit. ")] 17 | [assembly: AssemblyConfiguration("")] 18 | [assembly: AssemblyCompany("Created by: Philip Murray")] 19 | [assembly: AssemblyProduct("Serial Comm Tester")] 20 | [assembly: AssemblyCopyright("Copyright © Philip Murray All Rights Reserved 2020")] 21 | [assembly: AssemblyTrademark("")] 22 | [assembly: AssemblyCulture("")] 23 | 24 | // Setting ComVisible to false makes the types in this assembly not visible 25 | // to COM components. If you need to access a type in this assembly from 26 | // COM, set the ComVisible attribute to true on that type. 27 | [assembly: ComVisible(false)] 28 | 29 | // The following GUID is for the ID of the typelib if this project is exposed to COM 30 | [assembly: Guid("c22ae764-1206-414f-bcd3-aebfe71c08b1")] 31 | 32 | // Version information for an assembly consists of the following four values: 33 | // 34 | // Major Version 35 | // Minor Version 36 | // Build Number 37 | // Revision 38 | // 39 | // You can specify all the values or you can default the Build and Revision Numbers 40 | // by using the '*' as shown below: 41 | // [assembly: AssemblyVersion("1.0.*")] 42 | [assembly: AssemblyVersion("3.4.0.16")] 43 | [assembly: AssemblyFileVersion("3.4.0.16")] 44 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. 6 | 7 | ## Our Standards 8 | 9 | Examples of behavior that contributes to creating a positive environment include: 10 | 11 | * Using welcoming and inclusive language 12 | * Being respectful of differing viewpoints and experiences 13 | * Gracefully accepting constructive criticism 14 | * Focusing on what is best for the community 15 | * Showing empathy towards other community members 16 | 17 | Examples of unacceptable behavior by participants include: 18 | 19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances 20 | * Trolling, insulting/derogatory comments, and personal or political attacks 21 | * Public or private harassment 22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission 23 | * Other conduct which could reasonably be considered inappropriate in a professional setting 24 | 25 | ## Our Responsibilities 26 | 27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. 28 | 29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. 30 | 31 | ## Scope 32 | 33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. 34 | 35 | ## Enforcement 36 | 37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [My Youtube Channel](https://www.youtube.com/channel/UCAnWN8gy4oA1YbA9m8aVZ4Q) The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. 38 | 39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. 40 | 41 | ## Attribution 42 | 43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] 44 | 45 | [homepage]: http://contributor-covenant.org 46 | [version]: http://contributor-covenant.org/version/1/4/ 47 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/Crc32.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of Serial-Comm-Tester source code. All Rights Reserved. 3 | * 4 | * Serial-Comm-Tetster is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License. 7 | * 8 | * This software is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this software; if not, write to the Free Software 15 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 16 | * USA. 17 | */ 18 | 19 | 20 | /* 21 | * Author: Philip Murray 22 | * Project Homepage: https://github.com/PhilipMur/Serial-Comm-Tester 23 | */ 24 | 25 | using System; 26 | using System.Collections.Generic; 27 | using System.Text; 28 | 29 | namespace Serial_Comm_Tester 30 | { 31 | 32 | public class Crc32 33 | { 34 | public static uint[] table = new uint[256]; 35 | 36 | public static uint poly = 0xedb88320; 37 | // public static uint poly = 0x1EDC6F41; 38 | // public ushort initialValue; 39 | 40 | public static uint ComputeChecksum(byte[] bytes) 41 | { 42 | uint crc = 0xffffffff; 43 | for (int i = 0; i < bytes.Length; ++i) 44 | { 45 | byte index = (byte)(((crc) & 0xffffffff) ^ bytes[i]); 46 | crc = (crc >> 8) ^ table[index]; 47 | } 48 | return ~crc; 49 | } 50 | 51 | public static byte[] ComputeChecksumBytes(byte[] bytes) 52 | { 53 | return BitConverter.GetBytes(ComputeChecksum(bytes)); 54 | } 55 | 56 | public Crc32(uint Poly) 57 | { 58 | // uint poly = 0xedb88320; 59 | // uint poly; 60 | poly = Poly; 61 | 62 | // table = new uint[256]; 63 | 64 | uint temp = 0; 65 | for (uint i = 0; i < table.Length; ++i) 66 | { 67 | temp = i; 68 | for (int j = 8; j > 0; --j) 69 | { 70 | if ((temp & 1) == 1) 71 | { 72 | temp = (uint)((temp >> 1) ^ poly); 73 | } 74 | else 75 | { 76 | temp >>= 1; 77 | } 78 | } 79 | table[i] = temp; 80 | } 81 | } 82 | public byte[] HexToBytes(string input) 83 | { 84 | //StringBuilder sb = new StringBuilder(input); //---get rid of null or white space 85 | //sb.Replace(" ", ""); 86 | //sb.Replace(" ", ""); 87 | //input = sb.ToString(); 88 | 89 | byte[] result = new byte[input.Length / 2]; 90 | for (int i = 0; i < result.Length; i++) 91 | { 92 | result[i] = Convert.ToByte(input.Substring(2 * i, 2), 16); 93 | } 94 | return result; 95 | } 96 | } 97 | } 98 | 99 | 100 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/TwosComplement.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of Serial-Comm-Tester source code. All Rights Reserved. 3 | * 4 | * Serial-Comm-Tetster is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License. 7 | * 8 | * This software is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this software; if not, write to the Free Software 15 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 16 | * USA. 17 | */ 18 | 19 | 20 | /* 21 | * Author: Philip Murray 22 | * Project Homepage: https://github.com/PhilipMur/Serial-Comm-Tester 23 | */ 24 | 25 | using System; 26 | using System.Collections.Generic; 27 | using System.Linq; 28 | using System.Text; 29 | using System.Threading.Tasks; 30 | 31 | namespace Serial_Comm_Tester 32 | { 33 | public class TwosComplement 34 | { 35 | /// 36 | /// Takes byte data in and Gives back 2s complemet 8 bit by modulus( 0xff / 255) 37 | /// 38 | /// 39 | /// 40 | public string TwosComplement8bit(byte[] data) 41 | { 42 | byte bytesIn = 0; 43 | 44 | int numOut = 0; 45 | 46 | 47 | 48 | unchecked 49 | { 50 | for (int i = 0; i < data.Length; i++) 51 | { 52 | bytesIn = data[i]; 53 | 54 | numOut += ~bytesIn + 0x01 % 0xff; 55 | 56 | } 57 | 58 | } 59 | 60 | numOut = numOut & 255; 61 | 62 | return numOut.ToString("X2"); 63 | } 64 | /// 65 | /// Takes byte data in and Gives back 2s complemet 16 bit by modulus( 0xffff / 65535) 66 | /// 67 | /// 68 | /// 69 | public string TwosComplement16bit(byte[] data) 70 | { 71 | byte bytesIn = 0; 72 | 73 | int numOut = 0; 74 | 75 | 76 | 77 | unchecked 78 | { 79 | for (int i = 0; i < data.Length; i++) 80 | { 81 | bytesIn = data[i]; 82 | 83 | numOut += ~bytesIn + 0x01 % 0xffff; 84 | 85 | } 86 | 87 | } 88 | 89 | numOut = numOut & 65535; 90 | 91 | return numOut.ToString("X2"); 92 | } 93 | 94 | public byte[] HexToBytes(string input) 95 | { 96 | StringBuilder sb = new StringBuilder(input); //---get rid of null or white space 97 | sb.Replace(" ", ""); 98 | sb.Replace(" ", ""); 99 | input = sb.ToString(); 100 | 101 | byte[] result = new byte[input.Length / 2]; 102 | for (int i = 0; i < result.Length; i++) 103 | { 104 | result[i] = Convert.ToByte(input.Substring(2 * i, 2), 16); 105 | } 106 | return result; 107 | } 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/Properties/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 48 | 55 | 56 | 70 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/HexChart.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of Serial-Comm-Tester source code. All Rights Reserved. 3 | * 4 | * Serial-Comm-Tetster is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License. 7 | * 8 | * This software is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this software; if not, write to the Free Software 15 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 16 | * USA. 17 | */ 18 | 19 | 20 | /* 21 | * Author: Philip Murray 22 | * Project Homepage: https://github.com/PhilipMur/Serial-Comm-Tester 23 | */ 24 | 25 | using System; 26 | using System.Windows.Forms; 27 | 28 | namespace Serial_Comm_Tester 29 | { 30 | public partial class HexChart : Form 31 | { 32 | public static string StartupPath { get; } 33 | public HexChart() 34 | { 35 | InitializeComponent(); 36 | } 37 | 38 | private void btnHexChart_Click(object sender, EventArgs e) 39 | { 40 | richTextBox1.Text = ""; 41 | // const string app = Application.StartupPath(); 42 | 43 | // using (StreamReader sr = new StreamReader(Application.StartupPath + "\\" + "HEX_to_ASCII.txt")) 44 | 45 | try 46 | { 47 | richTextBox1.Text = Properties.Resources.HEX_to_ASCII; 48 | 49 | 50 | } 51 | catch 52 | { 53 | 54 | MessageBox.Show( "File missing or wrong directory" , "ERROR",MessageBoxButtons.OK,MessageBoxIcon.Error); 55 | } 56 | 57 | 58 | 59 | } 60 | 61 | private void btnExit_Click(object sender, EventArgs e) 62 | { 63 | Close(); 64 | } 65 | 66 | private void btnUnicodeChart_Click(object sender, EventArgs e) 67 | { 68 | richTextBox1.Text = ""; 69 | 70 | try 71 | { 72 | richTextBox1.Text = Properties.Resources.Unicode_characters; 73 | 74 | } 75 | catch 76 | { 77 | MessageBox.Show("File missing or wrong directory", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); 78 | 79 | } 80 | 81 | 82 | } 83 | 84 | private void contextMenuStrip1_Opening(object sender, System.ComponentModel.CancelEventArgs e) 85 | { 86 | 87 | } 88 | 89 | private void contextMenuStrip1_Click(object sender, EventArgs e) 90 | { 91 | 92 | 93 | } 94 | 95 | private void copySelectedToolStripMenuItem_Click(object sender, EventArgs e) 96 | { 97 | if (richTextBox1.SelectedText == "" && richTextBox1.Text != "") 98 | { 99 | Clipboard.SetText(richTextBox1.Text); 100 | } 101 | 102 | if (richTextBox1.SelectedText != "") 103 | { 104 | Clipboard.SetText(richTextBox1.SelectedText); 105 | } 106 | 107 | } 108 | 109 | private void checkBoxBringToFront_CheckedChanged(object sender, EventArgs e) 110 | { 111 | if(checkBoxBringToFront.Checked == true) 112 | { 113 | TopMost = true; 114 | } 115 | if (checkBoxBringToFront.Checked == false) 116 | { 117 | TopMost = false; 118 | } 119 | } 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/AboutBox1.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | using System.Windows.Forms; 4 | 5 | namespace Serial_Comm_Tester 6 | { 7 | partial class AboutBox1 : Form 8 | { 9 | public AboutBox1() 10 | { 11 | InitializeComponent(); 12 | this.Text = String.Format("About {0}", AssemblyTitle); 13 | this.labelProductName.Text = AssemblyProduct; 14 | this.labelVersion.Text = String.Format("Version {0}", AssemblyVersion); 15 | this.labelCopyright.Text = AssemblyCopyright; 16 | this.labelCompanyName.Text = AssemblyCompany; 17 | this.textBoxDescription.Text = AssemblyDescription; 18 | } 19 | 20 | #region Assembly Attribute Accessors 21 | 22 | public string AssemblyTitle 23 | { 24 | get 25 | { 26 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); 27 | if (attributes.Length > 0) 28 | { 29 | AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; 30 | if (titleAttribute.Title != "") 31 | { 32 | return titleAttribute.Title; 33 | } 34 | } 35 | return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); 36 | } 37 | } 38 | 39 | public string AssemblyVersion 40 | { 41 | get 42 | { 43 | return Assembly.GetExecutingAssembly().GetName().Version.ToString(); 44 | } 45 | } 46 | 47 | public string AssemblyDescription 48 | { 49 | get 50 | { 51 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); 52 | if (attributes.Length == 0) 53 | { 54 | return ""; 55 | } 56 | return ((AssemblyDescriptionAttribute)attributes[0]).Description; 57 | } 58 | } 59 | 60 | public string AssemblyProduct 61 | { 62 | get 63 | { 64 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); 65 | if (attributes.Length == 0) 66 | { 67 | return ""; 68 | } 69 | return ((AssemblyProductAttribute)attributes[0]).Product; 70 | } 71 | } 72 | 73 | public string AssemblyCopyright 74 | { 75 | get 76 | { 77 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); 78 | if (attributes.Length == 0) 79 | { 80 | return ""; 81 | } 82 | return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; 83 | } 84 | } 85 | 86 | public string AssemblyCompany 87 | { 88 | get 89 | { 90 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); 91 | if (attributes.Length == 0) 92 | { 93 | return ""; 94 | } 95 | return ((AssemblyCompanyAttribute)attributes[0]).Company; 96 | } 97 | } 98 | #endregion 99 | 100 | private void labelCopyright_Click(object sender, EventArgs e) 101 | { 102 | 103 | } 104 | 105 | private void textBoxDescription_TextChanged(object sender, EventArgs e) 106 | { 107 | 108 | } 109 | 110 | private void AboutBox1_Load(object sender, EventArgs e) 111 | { 112 | 113 | } 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/Crc8.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of Serial-Comm-Tester source code. All Rights Reserved. 3 | * 4 | * Serial-Comm-Tetster is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License. 7 | * 8 | * This software is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this software; if not, write to the Free Software 15 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 16 | * USA. 17 | */ 18 | 19 | 20 | /* 21 | * Author: Philip Murray 22 | * Project Homepage: https://github.com/PhilipMur/Serial-Comm-Tester 23 | */ 24 | 25 | using System; 26 | using System.Text; 27 | 28 | namespace Serial_Comm_Tester 29 | { 30 | 31 | public class Crc8 32 | { 33 | public byte poly; 34 | 35 | 36 | static byte[] table = new byte[256]; 37 | // x8 + x7 + x6 + x4 + x2 + 1 38 | //public const byte poly = 0xD5; 39 | 40 | // const byte poly = 0x7; 41 | //const byte poly = 0xea; 42 | //public enum CRC8_POLY 43 | //{ 44 | // CRC8 = 0xd5, 45 | // CRC8_CCITT = 0x07, 46 | // CRC8_DALLAS_MAXIM = 0x31, 47 | // CRC8_SAE_J1850 = 0x1D, 48 | // CRC_8_WCDMA = 0x9b, 49 | //}; 50 | 51 | 52 | 53 | 54 | public byte ComputeChecksum( byte[] bytes) 55 | { 56 | // ChecksumCalc c = new ChecksumCalc(); 57 | // poly = c.getpolynominal; 58 | 59 | byte crc = 0x00; 60 | if (bytes != null && bytes.Length > 0) 61 | { 62 | foreach (byte b in bytes) 63 | { 64 | crc = table[crc ^ b]; 65 | } 66 | } 67 | return crc; 68 | } 69 | 70 | public Crc8(byte Poly) 71 | { 72 | poly = Poly; 73 | 74 | for (int i = 0; i < 256; ++i) 75 | { 76 | int temp = i; 77 | for (int j = 0; j < 8; ++j) 78 | { 79 | if ((temp & 0x80) != 0) 80 | { 81 | temp = (temp << 1) ^ poly; 82 | 83 | } 84 | else 85 | { 86 | temp <<= 1; 87 | } 88 | } 89 | table[i] = (byte)temp; 90 | } 91 | } 92 | public byte[] HexToBytes(string input) 93 | { 94 | StringBuilder sb = new StringBuilder(input); //---get rid of null or white space 95 | sb.Replace(" ", ""); 96 | sb.Replace(" ", ""); 97 | input = sb.ToString(); 98 | 99 | //// string input = "hello world"; 100 | // char[] inputarray = input.ToCharArray(); 101 | // Array.Reverse(inputarray); 102 | // string output = new string(inputarray); 103 | 104 | // byte[] result = new byte[output.Length / 2]; 105 | // for (int i = 0; i < result.Length; i++) 106 | // { 107 | // result[i] = Convert.ToByte(output.Substring(2 * i, 2), 16); 108 | // } 109 | // return result; 110 | //byte[] getByte = new byte[input.Length]; 111 | 112 | //foreach(char t in input) 113 | //{ 114 | // getByte[t] = Convert.ToByte(t); 115 | //} 116 | //return getByte; 117 | 118 | byte[] result = new byte[input.Length / 2]; //------------------------------------14/7/17 119 | for (int i = 0; i < result.Length; i++) 120 | { 121 | result[i] = Convert.ToByte(input.Substring(2 * i, 2), 16); 122 | } 123 | return result; 124 | } 125 | //public ushort Reflect16(ushort val) 126 | //{ 127 | // ushort resVal = 0; 128 | 129 | // for (ushort i = 0; i < 8; i++) 130 | // { 131 | // if ((val & (1 << i)) != 0) 132 | // { 133 | // resVal |= (ushort)(1 << (15 - i)); 134 | // } 135 | // } 136 | 137 | // return resVal; 138 | //} 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Serial_Comm_Tester.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Serial_Comm_Tester.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized string similar to ASCII control characters 65 | /// 66 | /// 67 | ///Dec Hex Binary Character Description 68 | /// 69 | ///0 00 00000000 NUL null 70 | ///1 01 00000001 SOH start of header 71 | ///2 02 00000010 STX start of text 72 | ///3 03 00000011 ETX end of text 73 | ///4 04 00000100 EOT end of transmission 74 | ///5 05 00000101 ENQ enquiry 75 | ///6 06 00000110 ACK acknowledge 76 | ///7 07 00000111 BEL bell 77 | ///8 08 00001000 BS backspace 78 | ///9 09 00001001 HT horizontal tab 79 | ///10 0A 00001010 LF line feed 80 | ///11 0B 00001011 VT vertical tab 81 | ///12 [rest of string was truncated]";. 82 | /// 83 | internal static string HEX_to_ASCII { 84 | get { 85 | return ResourceManager.GetString("HEX_to_ASCII", resourceCulture); 86 | } 87 | } 88 | 89 | /// 90 | /// Looks up a localized string similar to THIS IS ONLY SOME UNICODE CHARACTERS AS EXAMPLE: 91 | /// 92 | ///Symbols codes 93 | ///& • ◦ ∙ ‣ ⁃ ° ∞ 94 | /// 95 | ///Currency codes 96 | /// $ ₨ ₱ ₩ ฿ ₫ ₪ 97 | /// 98 | ///Intellectual property codes 99 | ///© ® ℗ ™ ℠ 100 | /// 101 | ///Greek alphabet codes 102 | ///α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω 103 | /// 104 | /// 105 | /// 106 | /// ! " # $ % & ' ( ) * + , - . / 107 | ///0 1 2 3 4 5 6 7 8 9 : ; < = > ? 108 | ///@ A B C D E F G H I J K L M N O 109 | ///P Q R S T U V W X Y Z [ \ ] ^ _ 110 | ///` a b c d e f g h i j k [rest of string was truncated]";. 111 | /// 112 | internal static string Unicode_characters { 113 | get { 114 | return ResourceManager.GetString("Unicode_characters", resourceCulture); 115 | } 116 | } 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.suo 8 | *.user 9 | *.userosscache 10 | *.sln.docstates 11 | 12 | # User-specific files (MonoDevelop/Xamarin Studio) 13 | *.userprefs 14 | 15 | # Build results 16 | [Dd]ebug/ 17 | [Dd]ebugPublic/ 18 | [Rr]elease/ 19 | [Rr]eleases/ 20 | x64/ 21 | x86/ 22 | bld/ 23 | [Bb]in/ 24 | [Oo]bj/ 25 | [Ll]og/ 26 | 27 | # Visual Studio 2015 cache/options directory 28 | .vs/ 29 | # Uncomment if you have tasks that create the project's static files in wwwroot 30 | #wwwroot/ 31 | 32 | # MSTest test Results 33 | [Tt]est[Rr]esult*/ 34 | [Bb]uild[Ll]og.* 35 | 36 | # NUNIT 37 | *.VisualState.xml 38 | TestResult.xml 39 | 40 | # Build Results of an ATL Project 41 | [Dd]ebugPS/ 42 | [Rr]eleasePS/ 43 | dlldata.c 44 | 45 | # .NET Core 46 | project.lock.json 47 | project.fragment.lock.json 48 | artifacts/ 49 | **/Properties/launchSettings.json 50 | 51 | *_i.c 52 | *_p.c 53 | *_i.h 54 | *.ilk 55 | *.meta 56 | *.obj 57 | *.pch 58 | *.pdb 59 | *.pgc 60 | *.pgd 61 | *.rsp 62 | *.sbr 63 | *.tlb 64 | *.tli 65 | *.tlh 66 | *.tmp 67 | *.tmp_proj 68 | *.log 69 | *.vspscc 70 | *.vssscc 71 | .builds 72 | *.pidb 73 | *.svclog 74 | *.scc 75 | 76 | # Chutzpah Test files 77 | _Chutzpah* 78 | 79 | # Visual C++ cache files 80 | ipch/ 81 | *.aps 82 | *.ncb 83 | *.opendb 84 | *.opensdf 85 | *.sdf 86 | *.cachefile 87 | *.VC.db 88 | *.VC.VC.opendb 89 | 90 | # Visual Studio profiler 91 | *.psess 92 | *.vsp 93 | *.vspx 94 | *.sap 95 | 96 | # TFS 2012 Local Workspace 97 | $tf/ 98 | 99 | # Guidance Automation Toolkit 100 | *.gpState 101 | 102 | # ReSharper is a .NET coding add-in 103 | _ReSharper*/ 104 | *.[Rr]e[Ss]harper 105 | *.DotSettings.user 106 | 107 | # JustCode is a .NET coding add-in 108 | .JustCode 109 | 110 | # TeamCity is a build add-in 111 | _TeamCity* 112 | 113 | # DotCover is a Code Coverage Tool 114 | *.dotCover 115 | 116 | # Visual Studio code coverage results 117 | *.coverage 118 | *.coveragexml 119 | 120 | # NCrunch 121 | _NCrunch_* 122 | .*crunch*.local.xml 123 | nCrunchTemp_* 124 | 125 | # MightyMoose 126 | *.mm.* 127 | AutoTest.Net/ 128 | 129 | # Web workbench (sass) 130 | .sass-cache/ 131 | 132 | # Installshield output folder 133 | [Ee]xpress/ 134 | 135 | # DocProject is a documentation generator add-in 136 | DocProject/buildhelp/ 137 | DocProject/Help/*.HxT 138 | DocProject/Help/*.HxC 139 | DocProject/Help/*.hhc 140 | DocProject/Help/*.hhk 141 | DocProject/Help/*.hhp 142 | DocProject/Help/Html2 143 | DocProject/Help/html 144 | 145 | # Click-Once directory 146 | publish/ 147 | 148 | # Publish Web Output 149 | *.[Pp]ublish.xml 150 | *.azurePubxml 151 | # TODO: Comment the next line if you want to checkin your web deploy settings 152 | # but database connection strings (with potential passwords) will be unencrypted 153 | *.pubxml 154 | *.publishproj 155 | 156 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 157 | # checkin your Azure Web App publish settings, but sensitive information contained 158 | # in these scripts will be unencrypted 159 | PublishScripts/ 160 | 161 | # NuGet Packages 162 | *.nupkg 163 | # The packages folder can be ignored because of Package Restore 164 | **/packages/* 165 | # except build/, which is used as an MSBuild target. 166 | !**/packages/build/ 167 | # Uncomment if necessary however generally it will be regenerated when needed 168 | #!**/packages/repositories.config 169 | # NuGet v3's project.json files produces more ignorable files 170 | *.nuget.props 171 | *.nuget.targets 172 | 173 | # Microsoft Azure Build Output 174 | csx/ 175 | *.build.csdef 176 | 177 | # Microsoft Azure Emulator 178 | ecf/ 179 | rcf/ 180 | 181 | # Windows Store app package directories and files 182 | AppPackages/ 183 | BundleArtifacts/ 184 | Package.StoreAssociation.xml 185 | _pkginfo.txt 186 | 187 | # Visual Studio cache files 188 | # files ending in .cache can be ignored 189 | *.[Cc]ache 190 | # but keep track of directories ending in .cache 191 | !*.[Cc]ache/ 192 | 193 | # Others 194 | ClientBin/ 195 | ~$* 196 | *~ 197 | *.dbmdl 198 | *.dbproj.schemaview 199 | *.jfm 200 | *.pfx 201 | *.publishsettings 202 | orleans.codegen.cs 203 | 204 | # Since there are multiple workflows, uncomment next line to ignore bower_components 205 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 206 | #bower_components/ 207 | 208 | # RIA/Silverlight projects 209 | Generated_Code/ 210 | 211 | # Backup & report files from converting an old project file 212 | # to a newer Visual Studio version. Backup files are not needed, 213 | # because we have git ;-) 214 | _UpgradeReport_Files/ 215 | Backup*/ 216 | UpgradeLog*.XML 217 | UpgradeLog*.htm 218 | 219 | # SQL Server files 220 | *.mdf 221 | *.ldf 222 | *.ndf 223 | 224 | # Business Intelligence projects 225 | *.rdl.data 226 | *.bim.layout 227 | *.bim_*.settings 228 | 229 | # Microsoft Fakes 230 | FakesAssemblies/ 231 | 232 | # GhostDoc plugin setting file 233 | *.GhostDoc.xml 234 | 235 | # Node.js Tools for Visual Studio 236 | .ntvs_analysis.dat 237 | node_modules/ 238 | 239 | # Typescript v1 declaration files 240 | typings/ 241 | 242 | # Visual Studio 6 build log 243 | *.plg 244 | 245 | # Visual Studio 6 workspace options file 246 | *.opt 247 | 248 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 249 | *.vbw 250 | 251 | # Visual Studio LightSwitch build output 252 | **/*.HTMLClient/GeneratedArtifacts 253 | **/*.DesktopClient/GeneratedArtifacts 254 | **/*.DesktopClient/ModelManifest.xml 255 | **/*.Server/GeneratedArtifacts 256 | **/*.Server/ModelManifest.xml 257 | _Pvt_Extensions 258 | 259 | # Paket dependency manager 260 | .paket/paket.exe 261 | paket-files/ 262 | 263 | # FAKE - F# Make 264 | .fake/ 265 | 266 | # JetBrains Rider 267 | .idea/ 268 | *.sln.iml 269 | 270 | # CodeRush 271 | .cr/ 272 | 273 | # Python Tools for Visual Studio (PTVS) 274 | __pycache__/ 275 | *.pyc 276 | 277 | # Cake - Uncomment if you are using it 278 | # tools/** 279 | # !tools/packages.config 280 | 281 | # Telerik's JustMock configuration file 282 | *.jmconfig 283 | 284 | # BizTalk build output 285 | *.btp.cs 286 | *.btm.cs 287 | *.odx.cs 288 | *.xsd.cs 289 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/HexChart.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | 72 125 | 126 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\HEX_to_ASCII.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 123 | 124 | 125 | ..\Unicode_characters.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16 126 | 127 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Serial-Comm-Tester 2 | Serial Communications Test Tool written in C# (csharp) .Net (dotNet) Framework in Visual Studio. 3 | 4 | Serial Comm Tester is written by Philip Murray and released under the GPL-V2 License. 5 | 6 | Contributors and collaborators are welcome !!!!! 7 | 8 | This started as a basic Serial communications test tool that i created for when at work to make my life easier working with rs232 , rs485 / serial com ports and to monitor data sent and recieved. 9 | 10 | Alot of other Serial programs are BUGGY as hell so i made my own and added to it over time. 11 | 12 | My Goal is to add features like Modbus , 12c and other protocols or if someone want's to contribute or collaborate i would be very gratefull aswell as everyone knows time is money now and a succesful commit will be added to a changelog. 13 | 14 | This is licensed under the GPL-V2 as to keep any versions of this OPEN-SOURCED and maybe grow into a bigger more comprehensive program and keep it free for all to use and modify as alot of programs like this expect payment. 15 | 16 | # [Download](https://goo.gl/1C23rv) 17 | Current working Software can be downloaded here [Serial-Comm-Tester Download](https://goo.gl/1C23rv) 18 | 19 | # [Usage](https://www.youtube.com/watch?v=0xCK9FXaT0o) 20 | To see a Basic operation of the software click here [My Youtube Channel](https://www.youtube.com/watch?v=0xCK9FXaT0o) 21 | 22 | # Features..... 23 | 24 | ![screenshot 283](https://user-images.githubusercontent.com/27295232/35466943-ba659332-0300-11e8-9ed0-1cf4c33e81c3.png) 25 | https://github.com/PhilipMur/Serial-Comm-Tester/wiki 26 | 27 | 28 | ![screenshot 625](https://user-images.githubusercontent.com/27295232/35466956-e85d7746-0300-11e8-8fc0-320ff75113e7.png) 29 | 30 | 31 | 32 | 33 | # Multi Encodings : 34 | 35 | utf-8 36 | utf-16 37 | utf-16-BigEndian 38 | utf-32 39 | utf-32-BigEndian 40 | us-ASCII 41 | windows-1252 42 | extended-ASCII 43 | IBM-437 44 | iso-8859-1 45 | 46 | # Serial Read/ Write : 47 | 48 | Hexadecimal 49 | Decimal 50 | Encodings listed above 51 | 52 | # Full Serial Port Control. 53 | 54 | > Send To the Serial port from a file. 55 | 56 | > Send with automatic Control characters (Break / carrige return / Line feed or both). 57 | 58 | > Multiple repeat send commands (repeat values and delay fully adjustable). 59 | 60 | > Auto send Keystrokes as typed. 61 | 62 | > Convert text automatically to Hexadecimal and Decimal values. 63 | 64 | > Graph functions ( Set Interval / RX & TX Counter). 65 | 66 | > Find Active Com ports 67 | 68 | ![screenshot 627](https://user-images.githubusercontent.com/27295232/35466963-02b920b8-0301-11e8-890b-668ec7283ed5.png) 69 | 70 | # Realtime Serial Port Information : 71 | 72 | RTS 73 | DTR 74 | TX 75 | RX 76 | CD 77 | DSR 78 | CTS 79 | RI 80 | BI 81 | Send Counter 82 | Read Counter 83 | 84 | > Clear In/Out Buffers 85 | 86 | > Manual Control Over (RTS) Ready To Send and (CTS) Clear To Send. 87 | 88 | > Set Font on all Fields. 89 | 90 | > Save To File. 91 | 92 | > Auto Save to file (option to append or overwrite last data). 93 | 94 | ![screenshot 647](https://user-images.githubusercontent.com/27295232/35467004-6f5f418e-0301-11e8-9fc3-0f8bd2e0bcbe.png) 95 | 96 | 97 | # Conversion Tables : 98 | 99 | Ascii text to Hexadecimal 100 | Ascii text to Decimal 101 | Ascii text to Octal 102 | Ascii text to Binary 103 | Hex to Decimal 104 | Hex to Ascii 105 | Decimal to Hex 106 | Hex Chart 107 | Unicode Chart 108 | 109 | ![screenshot 649](https://user-images.githubusercontent.com/27295232/35466994-455de7be-0301-11e8-817d-36dd2d90b602.png) 110 | 111 | # CRC /Checksum /BCC / Calculator : 112 | 113 | CRC8 114 | CRC8_DVB 115 | CRC8_SAE_J1850 116 | 117 | CRC_16_CCITT_ZERO 118 | CRC_16_XMODEM 119 | CRC_16_CCITT_FALSE 120 | CRC_16_AUG_CCITT 121 | CRC_16_TELEDISK 122 | CRC_16_T10_DIF 123 | CRC_16_DECT_X 124 | CRC_16_DDS_110 125 | CRC_16_CDMA2000 126 | CRC_16_BUYPASS 127 | CRC_16_MODBUS 128 | 129 | CRC_32 130 | 131 | 2s Complement 8 bit 132 | 2s Complement 16 bit 133 | 134 | Modulo 256 135 | 136 | BCC (Block Check Character) 137 | 138 | # Uses In The Real World 139 | 140 | > Test USB To Serail Convertes (loop TX - RX) 141 | 142 | > Check for data Loss 143 | 144 | > Test cables (where cable lenghts maybe an issue etc...). 145 | 146 | # Test communications on devices : 147 | 148 | Arduino 149 | Rasberry Pi 150 | Modems 151 | Embedded Hardware 152 | Printers 153 | RFID 154 | etc... 155 | 156 | # Test different Serial protocols : 157 | 158 | UART Protocol 159 | USART Protocol 160 | USB Protocol 161 | I2C Protocol 162 | SPI Protocol 163 | CAN Protocol 164 | Modbus RTU 165 | Modbus ASCII 166 | LON 167 | Proprietary Protocols 168 | 169 | # Test functions on : 170 | 171 | RS232 172 | RS485 173 | RS422 174 | LON 175 | 1-Wire 176 | I2C 177 | etc... 178 | 179 | > Test CRC / Checksums /BCC and others to verify commands sent and recieved. 180 | 181 | > Use as a Listener on RS485 , 422 etc.. 182 | 183 | # Plans for the future 184 | 185 | I wish to add other protocols and additional features , hopefully with the help of Contributors from Github and make this an easy to use , fucntional and comprehesive FREE Serial communcations test tool available . 186 | 187 | This is an essential tool for any developer wanting to Implement a proprietary Protocol or to get a project up and running faster for popular protocols. 188 | 189 | I will update the usage when i get time , i thought i would share this project and see if it can grow further here. 190 | 191 | Happy coding. 192 | 193 | Philip 194 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/HEX_to_ASCII.txt: -------------------------------------------------------------------------------- 1 | ASCII control characters 2 | 3 | 4 | Dec Hex Binary Character Description 5 | 6 | 0 00 00000000 NUL null 7 | 1 01 00000001 SOH start of header 8 | 2 02 00000010 STX start of text 9 | 3 03 00000011 ETX end of text 10 | 4 04 00000100 EOT end of transmission 11 | 5 05 00000101 ENQ enquiry 12 | 6 06 00000110 ACK acknowledge 13 | 7 07 00000111 BEL bell 14 | 8 08 00001000 BS backspace 15 | 9 09 00001001 HT horizontal tab 16 | 10 0A 00001010 LF line feed 17 | 11 0B 00001011 VT vertical tab 18 | 12 0C 00001100 FF form feed 19 | 13 0D 00001101 CR enter / carriage return 20 | 14 0E 00001110 SO shift out 21 | 15 0F 00001111 SI shift in 22 | 16 10 00010000 DLE data link escape 23 | 17 11 00010001 DC1 device control 1 24 | 18 12 00010010 DC2 device control 2 25 | 19 13 00010011 DC3 device control 3 26 | 20 14 00010100 DC4 device control 4 27 | 21 15 00010101 NAK negative acknowledge 28 | 22 16 00010110 SYN synchronize 29 | 23 17 00010111 ETB end of trans. block 30 | 24 18 00011000 CAN cancel 31 | 25 19 00011001 EM end of medium 32 | 26 1A 00011010 SUB substitute 33 | 27 1B 00011011 ESC escape 34 | 28 1C 00011100 FS file separator 35 | 29 1D 00011101 GS group separator 36 | 30 1E 00011110 RS record separator 37 | 31 1F 00011111 US unit separator 38 | 127 7F 01111111 DEL delete 39 | 40 | 41 | ASCII printable characters 42 | Dec Hex Binary Character Description 43 | 44 | 32 20 00100000 Space space 45 | 33 21 00100001 ! exclamation mark 46 | 34 22 00100010 " double quote 47 | 35 23 00100011 # number 48 | 36 24 00100100 $ dollar 49 | 37 25 00100101 % percent 50 | 38 26 00100110 & ampersand 51 | 39 27 00100111 ' single quote 52 | 40 28 00101000 ( left parenthesis 53 | 41 29 00101001 ) right parenthesis 54 | 42 2A 00101010 * asterisk 55 | 43 2B 00101011 + plus 56 | 44 2C 00101100 , comma 57 | 45 2D 00101101 - minus 58 | 46 2E 00101110 . period 59 | 47 2F 00101111 / slash 60 | 48 30 00110000 0 zero 61 | 49 31 00110001 1 one 62 | 50 32 00110010 2 two 63 | 51 33 00110011 3 three 64 | 52 34 00110100 4 four 65 | 53 35 00110101 5 five 66 | 54 36 00110110 6 six 67 | 55 37 00110111 7 seven 68 | 56 38 00111000 8 eight 69 | 57 39 00111001 9 nine 70 | 58 3A 00111010 : colon 71 | 59 3B 00111011 ; semicolon 72 | 60 3C 00111100 < less than 73 | 61 3D 00111101 = equality sign 74 | 62 3E 00111110 > greater than 75 | 63 3F 00111111 ? question mark 76 | 64 40 01000000 @ at sign 77 | 65 41 01000001 A 78 | 66 42 01000010 B 79 | 67 43 01000011 C 80 | 68 44 01000100 D 81 | 69 45 01000101 E 82 | 70 46 01000110 F 83 | 71 47 01000111 G 84 | 72 48 01001000 H 85 | 73 49 01001001 I 86 | 74 4A 01001010 J 87 | 75 4B 01001011 K 88 | 76 4C 01001100 L 89 | 77 4D 01001101 M 90 | 78 4E 01001110 N 91 | 79 4F 01001111 O 92 | 80 50 01010000 P 93 | 81 51 01010001 Q 94 | 82 52 01010010 R 95 | 83 53 01010011 S 96 | 84 54 01010100 T 97 | 85 55 01010101 U 98 | 86 56 01010110 V 99 | 87 57 01010111 W 100 | 88 58 01011000 X 101 | 89 59 01011001 Y 102 | 90 5A 01011010 Z 103 | 91 5B 01011011 [ left square bracket 104 | 92 5C 01011100 \ backslash 105 | 93 5D 01011101 ] right square bracket 106 | 94 5E 01011110 ^ caret / circumflex 107 | 95 5F 01011111 _ underscore 108 | 96 60 01100000 ` grave / accent 109 | 97 61 01100001 a 110 | 98 62 01100010 b 111 | 99 63 01100011 c 112 | 100 64 01100100 d 113 | 101 65 01100101 e 114 | 102 66 01100110 f 115 | 103 67 01100111 g 116 | 104 68 01101000 h 117 | 105 69 01101001 i 118 | 106 6A 01101010 j 119 | 107 6B 01101011 k 120 | 108 6C 01101100 l 121 | 109 6D 01101101 m 122 | 110 6E 01101110 n 123 | 111 6F 01101111 o 124 | 112 70 01110000 p 125 | 113 71 01110001 q 126 | 114 72 01110010 r 127 | 115 73 01110011 s 128 | 116 74 01110100 t 129 | 117 75 01110101 u 130 | 118 76 01110110 v 131 | 119 77 01110111 w 132 | 120 78 01111000 x 133 | 121 79 01111001 y 134 | 122 7A 01111010 z 135 | 123 7B 01111011 { left curly bracket 136 | 124 7C 01111100 | vertical bar 137 | 125 7D 01111101 } right curly bracket 138 | 126 7E 01111110 ~ tilde 139 | 127 7F 01111111 DEL delete 140 | Extended ASCII characters 141 | Dec Hex Binary Char- 142 | 143 | acter 144 | Description 145 | 128 80 10000000 € euro 146 | 129 81 10000001  147 | 130 82 10000010 ‚ 148 | 131 83 10000011 ƒ florin 149 | 132 84 10000100 „ 150 | 133 85 10000101 … 151 | 134 86 10000110 † dagger 152 | 135 87 10000111 ‡ double dagger 153 | 136 88 10001000 ˆ 154 | 137 89 10001001 ‰ per-mille 155 | 138 8A 10001010 Š 156 | 139 8B 10001011 ‹ 157 | 140 8C 10001100 Œ 158 | 141 8D 10001101  159 | 142 8E 10001110 Ž 160 | 143 8F 10001111  161 | 144 90 10010000  162 | 145 91 10010001 ‘ 163 | 146 92 10010010 ’ 164 | 147 93 10010011 “ 165 | 148 94 10010100 ” 166 | 149 95 10010101 • 167 | 150 96 10010110 – 168 | 151 97 10010111 — 169 | 152 98 10011000 ˜ 170 | 153 99 10011001 ™ trademark 171 | 154 9A 10011010 š 172 | 155 9B 10011011 › 173 | 156 9C 10011100 œ 174 | 157 9D 10011101  175 | 158 9E 10011110 ž 176 | 159 9F 10011111 Ÿ 177 | 160 A0 10100000 178 | 161 A1 10100001 ¡ 179 | 162 A2 10100010 ¢ cent 180 | 163 A3 10100011 £ pound 181 | 164 A4 10100100 ¤ currency sign 182 | 165 A5 10100101 ¥ yen, yuan 183 | 166 A6 10100110 ¦ broken bar 184 | 167 A7 10100111 § section sign 185 | 168 A8 10101000 ¨ 186 | 169 A9 10101001 © copyright 187 | 170 AA 10101010 ª ordinal indicator 188 | 171 AB 10101011 « 189 | 172 AC 10101100 ¬ 190 | 173 AD 10101101 ­ 191 | 174 AE 10101110 ® registered trademark 192 | 175 AF 10101111 ¯ 193 | 176 B0 10110000 ° degree 194 | 177 B1 10110001 ± plus-minus 195 | 178 B2 10110010 ² 196 | 179 B3 10110011 ³ 197 | 180 B4 10110100 ´ 198 | 181 B5 10110101 µ mu 199 | 182 B6 10110110 ¶ pilcrow 200 | 183 B7 10110111 · 201 | 184 B8 10111000 ¸ 202 | 185 B9 10111001 ¹ 203 | 186 BA 10111010 º ordinal indicator 204 | 187 BB 10111011 » 205 | 188 BC 10111100 ¼ 206 | 189 BD 10111101 ½ 207 | 190 BE 10111110 ¾ 208 | 191 BF 10111111 ¿ inverted question mark 209 | 192 C0 11000000 À 210 | 193 C1 11000001 Á 211 | 194 C2 11000010  212 | 195 C3 11000011 à 213 | 196 C4 11000100 Ä 214 | 197 C5 11000101 Å 215 | 198 C6 11000110 Æ 216 | 199 C7 11000111 Ç 217 | 200 C8 11001000 È 218 | 201 C9 11001001 É 219 | 202 CA 11001010 Ê 220 | 203 CB 11001011 Ë 221 | 204 CC 11001100 Ì 222 | 205 CD 11001101 Í 223 | 206 CE 11001110 Î 224 | 207 CF 11001111 Ï 225 | 208 D0 11010000 Ð 226 | 209 D1 11010001 Ñ 227 | 210 D2 11010010 Ò 228 | 211 D3 11010011 Ó 229 | 212 D4 11010100 Ô 230 | 213 D5 11010101 Õ 231 | 214 D6 11010110 Ö 232 | 215 D7 11010111 × multiplication sign 233 | 216 D8 11011000 Ø 234 | 217 D9 11011001 Ù 235 | 218 DA 11011010 Ú 236 | 219 DB 11011011 Û 237 | 220 DC 11011100 Ü 238 | 221 DD 11011101 Ý 239 | 222 DE 11011110 Þ 240 | 223 DF 11011111 ß 241 | 224 E0 11100000 à 242 | 225 E1 11100001 á 243 | 226 E2 11100010 â 244 | 227 E3 11100011 ã 245 | 228 E4 11100100 ä 246 | 229 E5 11100101 å 247 | 230 E6 11100110 æ 248 | 231 E7 11100111 ç 249 | 232 E8 11101000 è 250 | 233 E9 11101001 é 251 | 234 EA 11101010 ê 252 | 235 EB 11101011 ë 253 | 236 EC 11101100 ì 254 | 237 ED 11101101 í 255 | 238 EE 11101110 î 256 | 239 EF 11101111 ï 257 | 240 F0 11110000 ð 258 | 241 F1 11110001 ñ 259 | 242 F2 11110010 ò 260 | 243 F3 11110011 ó 261 | 244 F4 11110100 ô 262 | 245 F5 11110101 õ 263 | 246 F6 11110110 ö 264 | 247 F7 11110111 ÷ obelus 265 | 248 F8 11111000 ø 266 | 249 F9 11111001 ù 267 | 250 FA 11111010 ú 268 | 251 FB 11111011 û 269 | 252 FC 11111100 ü 270 | 253 FD 11111101 ý 271 | 254 FE 11111110 þ 272 | 255 FF 11111111 ÿ -------------------------------------------------------------------------------- /Serial Comm Tester - V2/Serial Comm Tester.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {C22AE764-1206-414F-BCD3-AEBFE71C08B1} 8 | WinExe 9 | Properties 10 | Serial_Comm_Tester 11 | Serial Comm Tester 12 | v4.5 13 | 512 14 | false 15 | C:\Users\User\Desktop\PM Serial Com Tester 2020\ 16 | true 17 | Disk 18 | false 19 | Foreground 20 | 7 21 | Days 22 | false 23 | false 24 | true 25 | SerialCommTester 26 | Philip Murray 27 | SerialCommTester 28 | 17 29 | 3.4.0.%2a 30 | true 31 | true 32 | true 33 | true 34 | 35 | 36 | AnyCPU 37 | true 38 | full 39 | false 40 | bin\Debug\ 41 | DEBUG;TRACE 42 | prompt 43 | 4 44 | false 45 | 46 | 47 | AnyCPU 48 | pdbonly 49 | true 50 | bin\Release\ 51 | TRACE 52 | prompt 53 | 4 54 | false 55 | 56 | 57 | serial image 2.ico 58 | 59 | 60 | 0D5DD7DDCA74354E735670D3C7EEF40F513ABE30 61 | 62 | 63 | Serial Comm Tester_2_TemporaryKey.pfx 64 | 65 | 66 | true 67 | 68 | 69 | false 70 | 71 | 72 | LocalIntranet 73 | 74 | 75 | Properties\app.manifest 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | Form 96 | 97 | 98 | AboutBox1.cs 99 | 100 | 101 | 102 | Form 103 | 104 | 105 | ChecksumCalc.cs 106 | 107 | 108 | Form 109 | 110 | 111 | Conversion_Table.cs 112 | 113 | 114 | 115 | 116 | 117 | Form 118 | 119 | 120 | Form1.cs 121 | 122 | 123 | Form 124 | 125 | 126 | HexChart.cs 127 | 128 | 129 | 130 | 131 | 132 | 133 | AboutBox1.cs 134 | 135 | 136 | ChecksumCalc.cs 137 | 138 | 139 | Conversion_Table.cs 140 | 141 | 142 | Form1.cs 143 | 144 | 145 | HexChart.cs 146 | 147 | 148 | ResXFileCodeGenerator 149 | Resources.Designer.cs 150 | Designer 151 | 152 | 153 | True 154 | Resources.resx 155 | True 156 | 157 | 158 | 159 | SettingsSingleFileGenerator 160 | Settings.Designer.cs 161 | 162 | 163 | True 164 | Settings.settings 165 | True 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | False 179 | Microsoft .NET Framework 4.5 %28x86 and x64%29 180 | true 181 | 182 | 183 | False 184 | .NET Framework 3.5 SP1 185 | false 186 | 187 | 188 | False 189 | Windows Installer 4.5 190 | true 191 | 192 | 193 | 194 | 195 | 196 | 203 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/HexChart.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Serial_Comm_Tester 2 | { 3 | partial class HexChart 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.components = new System.ComponentModel.Container(); 32 | this.richTextBox1 = new System.Windows.Forms.RichTextBox(); 33 | this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); 34 | this.copySelectedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 35 | this.btnHexChart = new System.Windows.Forms.Button(); 36 | this.btnUnicodeChart = new System.Windows.Forms.Button(); 37 | this.btnExit = new System.Windows.Forms.Button(); 38 | this.checkBoxBringToFront = new System.Windows.Forms.CheckBox(); 39 | this.contextMenuStrip1.SuspendLayout(); 40 | this.SuspendLayout(); 41 | // 42 | // richTextBox1 43 | // 44 | this.richTextBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 45 | | System.Windows.Forms.AnchorStyles.Left) 46 | | System.Windows.Forms.AnchorStyles.Right))); 47 | this.richTextBox1.ContextMenuStrip = this.contextMenuStrip1; 48 | this.richTextBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 49 | this.richTextBox1.Location = new System.Drawing.Point(12, 12); 50 | this.richTextBox1.Name = "richTextBox1"; 51 | this.richTextBox1.Size = new System.Drawing.Size(706, 561); 52 | this.richTextBox1.TabIndex = 0; 53 | this.richTextBox1.Text = "Press a Button Below To See Selected Charts ."; 54 | // 55 | // contextMenuStrip1 56 | // 57 | this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 58 | this.copySelectedToolStripMenuItem}); 59 | this.contextMenuStrip1.Name = "contextMenuStrip1"; 60 | this.contextMenuStrip1.Size = new System.Drawing.Size(106, 26); 61 | this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip1_Opening); 62 | this.contextMenuStrip1.Click += new System.EventHandler(this.contextMenuStrip1_Click); 63 | // 64 | // copySelectedToolStripMenuItem 65 | // 66 | this.copySelectedToolStripMenuItem.Name = "copySelectedToolStripMenuItem"; 67 | this.copySelectedToolStripMenuItem.Size = new System.Drawing.Size(105, 22); 68 | this.copySelectedToolStripMenuItem.Text = "Copy "; 69 | this.copySelectedToolStripMenuItem.Click += new System.EventHandler(this.copySelectedToolStripMenuItem_Click); 70 | // 71 | // btnHexChart 72 | // 73 | this.btnHexChart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 74 | this.btnHexChart.BackColor = System.Drawing.Color.Yellow; 75 | this.btnHexChart.Cursor = System.Windows.Forms.Cursors.Hand; 76 | this.btnHexChart.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Lime; 77 | this.btnHexChart.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 78 | this.btnHexChart.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 79 | this.btnHexChart.Location = new System.Drawing.Point(12, 579); 80 | this.btnHexChart.Name = "btnHexChart"; 81 | this.btnHexChart.Size = new System.Drawing.Size(229, 32); 82 | this.btnHexChart.TabIndex = 1; 83 | this.btnHexChart.Text = "Hex / Dec / Bin / ASCII"; 84 | this.btnHexChart.UseVisualStyleBackColor = false; 85 | this.btnHexChart.Click += new System.EventHandler(this.btnHexChart_Click); 86 | // 87 | // btnUnicodeChart 88 | // 89 | this.btnUnicodeChart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 90 | this.btnUnicodeChart.BackColor = System.Drawing.Color.Yellow; 91 | this.btnUnicodeChart.Cursor = System.Windows.Forms.Cursors.Hand; 92 | this.btnUnicodeChart.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Lime; 93 | this.btnUnicodeChart.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 94 | this.btnUnicodeChart.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 95 | this.btnUnicodeChart.Location = new System.Drawing.Point(247, 579); 96 | this.btnUnicodeChart.Name = "btnUnicodeChart"; 97 | this.btnUnicodeChart.Size = new System.Drawing.Size(128, 32); 98 | this.btnUnicodeChart.TabIndex = 2; 99 | this.btnUnicodeChart.Text = "Unicode"; 100 | this.btnUnicodeChart.UseVisualStyleBackColor = false; 101 | this.btnUnicodeChart.Click += new System.EventHandler(this.btnUnicodeChart_Click); 102 | // 103 | // btnExit 104 | // 105 | this.btnExit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 106 | this.btnExit.BackColor = System.Drawing.Color.Red; 107 | this.btnExit.Cursor = System.Windows.Forms.Cursors.Hand; 108 | this.btnExit.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Lime; 109 | this.btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 110 | this.btnExit.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 111 | this.btnExit.Location = new System.Drawing.Point(603, 579); 112 | this.btnExit.Name = "btnExit"; 113 | this.btnExit.Size = new System.Drawing.Size(116, 32); 114 | this.btnExit.TabIndex = 3; 115 | this.btnExit.Text = "CLOSE"; 116 | this.btnExit.UseVisualStyleBackColor = false; 117 | this.btnExit.Click += new System.EventHandler(this.btnExit_Click); 118 | // 119 | // checkBoxBringToFront 120 | // 121 | this.checkBoxBringToFront.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 122 | this.checkBoxBringToFront.AutoSize = true; 123 | this.checkBoxBringToFront.Cursor = System.Windows.Forms.Cursors.Hand; 124 | this.checkBoxBringToFront.Location = new System.Drawing.Point(419, 589); 125 | this.checkBoxBringToFront.Name = "checkBoxBringToFront"; 126 | this.checkBoxBringToFront.Size = new System.Drawing.Size(89, 17); 127 | this.checkBoxBringToFront.TabIndex = 4; 128 | this.checkBoxBringToFront.Text = "Bring to Front"; 129 | this.checkBoxBringToFront.UseVisualStyleBackColor = true; 130 | this.checkBoxBringToFront.CheckedChanged += new System.EventHandler(this.checkBoxBringToFront_CheckedChanged); 131 | // 132 | // HexChart 133 | // 134 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 135 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 136 | this.BackColor = System.Drawing.Color.DarkGray; 137 | this.ClientSize = new System.Drawing.Size(730, 623); 138 | this.Controls.Add(this.checkBoxBringToFront); 139 | this.Controls.Add(this.btnExit); 140 | this.Controls.Add(this.btnUnicodeChart); 141 | this.Controls.Add(this.btnHexChart); 142 | this.Controls.Add(this.richTextBox1); 143 | this.Name = "HexChart"; 144 | this.ShowIcon = false; 145 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 146 | this.Text = "Charts"; 147 | this.contextMenuStrip1.ResumeLayout(false); 148 | this.ResumeLayout(false); 149 | this.PerformLayout(); 150 | 151 | } 152 | 153 | #endregion 154 | 155 | private System.Windows.Forms.RichTextBox richTextBox1; 156 | private System.Windows.Forms.Button btnHexChart; 157 | private System.Windows.Forms.Button btnUnicodeChart; 158 | private System.Windows.Forms.Button btnExit; 159 | private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; 160 | private System.Windows.Forms.ToolStripMenuItem copySelectedToolStripMenuItem; 161 | private System.Windows.Forms.CheckBox checkBoxBringToFront; 162 | } 163 | } -------------------------------------------------------------------------------- /Serial Comm Tester - V2/ChecksumCalc.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | True 122 | 123 | 124 | True 125 | 126 | 127 | True 128 | 129 | 130 | True 131 | 132 | 133 | True 134 | 135 | 136 | True 137 | 138 | 139 | True 140 | 141 | 142 | True 143 | 144 | 145 | True 146 | 147 | 148 | True 149 | 150 | 151 | True 152 | 153 | 154 | True 155 | 156 | 157 | True 158 | 159 | 160 | True 161 | 162 | 163 | True 164 | 165 | 166 | True 167 | 168 | 169 | True 170 | 171 | 172 | True 173 | 174 | 175 | True 176 | 177 | 178 | True 179 | 180 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/CRC16.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of Serial-Comm-Tester source code. All Rights Reserved. 3 | * 4 | * Serial-Comm-Tetster is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License. 7 | * 8 | * This software is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this software; if not, write to the Free Software 15 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 16 | * USA. 17 | */ 18 | 19 | 20 | /* 21 | * Author: Philip Murray 22 | * Project Homepage: https://github.com/PhilipMur/Serial-Comm-Tester 23 | */ 24 | 25 | 26 | using System; 27 | using System.Text; 28 | 29 | namespace Serial_Comm_Tester 30 | { 31 | public class CRC16 32 | { 33 | public ushort polynomial; 34 | // const ushort polynomial = 4129; 35 | //public ushort polynomial = 0x1021; //standard crc16 ccitt 36 | // const ushort polynomial = 0x8408; //kermit 37 | // const ushort polynomial = 0xA097; //TELEDISK 38 | // const ushort polynomial = 0x8BB7; //T10_DIF 39 | // const ushort polynomial = 0x589; //DECT_X 40 | // const ushort polynomial = 0x8005; //DDS_110 / BUYPASS 41 | // const ushort polynomial = 0xC867; //CDMA2000 42 | public ushort[] table = new ushort[256]; 43 | // static ushort initialValue = 0x0000; //CRC-CCITT (XModem) /TELEDISK/ 44 | // static ushort initialValue = 0xffff; //CRC-CCITT (0xFFFF) 45 | // static ushort initialValue = 0x1D0F; //CRC-CCITT (0x1D0F) 46 | //public ushort initialValue = 0x0000; //kermit / BUYPASS 47 | // static ushort initialValue = 0x800D; //DDS_110 48 | // static ushort initialValue = 0xFFFF; //CDMA2000 49 | public ushort initialValue; 50 | 51 | public static bool IsitModbus = false; 52 | // public int calcByte = 0x8000 ; 53 | // public ushort calcByte { get; set; } 54 | 55 | 56 | public ushort ComputeChecksum(byte[] bytes) 57 | { 58 | //if not modbus do the other 16 bit calculations 59 | if(IsitModbus == false) 60 | { 61 | ushort crc = initialValue; 62 | 63 | for (int i = 0; i < bytes.Length; ++i) 64 | { 65 | crc = (ushort)((crc << 8) ^ table[((crc >> 8) ^ (0xff & bytes[i]))]); 66 | } 67 | return crc; 68 | } 69 | else //do the modbus calculation 70 | { 71 | ushort crcTemp; 72 | 73 | uint crc = 0xffff; 74 | // uint crc16 = Convert.ToUInt16( initialValue); 75 | uint temp; 76 | uint flag; 77 | 78 | for (int i = 0; i < bytes.Length; i++) 79 | { 80 | temp = bytes[i]; // temp has the first byte 81 | temp &= 0x00ff; // mask the MSB 82 | crc = crc ^ temp; //crc16 XOR with temp 83 | 84 | for (uint c = 0; c < 8; c++) 85 | { 86 | flag = crc & 0x01; // LSBit di crc16 is mantained 87 | crc = crc >> 1; // Lsbit di crc16 is lost 88 | if (flag != 0) 89 | { 90 | // crc16 = crc16 ^ 0x0A001; // crc16 XOR with 0x0a001 91 | crc = crc ^ polynomial; // crc16 XOR with 0x0a001 92 | } 93 | 94 | } 95 | } 96 | //crc16 = (crc16 >> 8) | (crc16 << 8); // LSB is exchanged with MSB 97 | crcTemp = Convert.ToUInt16(crc); 98 | return (crcTemp); 99 | 100 | 101 | //uint crc = initialValue; 102 | //uint temp; 103 | //ushort crcTemp; 104 | //uint flag; 105 | 106 | //for (int i = 0; i < bytes.Length; ++i) 107 | //{ 108 | // temp = bytes[i]; 109 | // // temp & 00ff; 110 | // crc = crc ^ temp; 111 | // for (uint c = 0; c < 8; c++) 112 | // { 113 | // flag = crc & 0x01; // LSBit di crc16 is mantained 114 | // crc = crc >> 1; // Lsbit di crc16 is lost 115 | // if (flag != 0) 116 | // crc = crc ^ 0x0a001; // crc16 XOR with 0x0a001 117 | // } 118 | // //byte index = (byte)(crc ^ bytes[i]); 119 | // //crc = (ushort)((crc >> 8) ^ table[index]); 120 | // // crc = (ushort)((crc >> 8) ^ table[(crc ^ i) & 0xFF]); 121 | // // crc = (ushort)((crc >> 8) ^ table[((crc >> 8) ^ (0xff & bytes[i]))]); 122 | //} 123 | //crcTemp = Convert.ToUInt16( crc); 124 | //return crcTemp; 125 | } 126 | 127 | 128 | } 129 | 130 | public byte[] ComputeChecksumBytes(byte[] bytes) 131 | { 132 | ushort crc = ComputeChecksum(bytes); 133 | return BitConverter.GetBytes(crc); 134 | } 135 | public enum InitialCrcValue { Zeros, NonZero1 = 0xffff, NonZero2 = 0x1D0F }; 136 | 137 | //public CRC16(ushort Poly , ushort intialVal ,ushort CalcByte)//(InitialCrcValue initialValue) 138 | public CRC16(ushort Poly, ushort intialVal)//(InitialCrcValue initialValue) 139 | { 140 | 141 | if(IsitModbus == false) 142 | { 143 | polynomial = Poly; 144 | initialValue = intialVal; 145 | // calcByte = CalcByte; 146 | 147 | 148 | // initialValue = (ushort)initialValue; 149 | 150 | ushort temp, a; 151 | for (int i = 0; i < table.Length; ++i) 152 | { 153 | temp = 0; 154 | a = (ushort)(i << 8); 155 | for (int j = 0; j < 8; ++j) 156 | { 157 | if (((temp ^ a) & 0x8000) != 0) 158 | // if (((temp ^ a) & calcByte) != 0) 159 | { 160 | temp = (ushort)((temp << 1) ^ polynomial); 161 | } 162 | else 163 | { 164 | temp <<= 1; 165 | } 166 | a <<= 1; 167 | } 168 | table[i] = temp; 169 | } 170 | } 171 | if(IsitModbus == true) 172 | { 173 | polynomial = Poly; 174 | ushort value; 175 | ushort temp; 176 | for (ushort i = 0; i < table.Length; ++i) 177 | { 178 | value = 0; 179 | temp = i; 180 | for (byte j = 0; j < 8; ++j) 181 | { 182 | if (((value ^ temp) & 0x0001) != 0) 183 | { 184 | value = (ushort)((value >> 1) ^ polynomial); 185 | } 186 | else 187 | { 188 | value >>= 1; 189 | } 190 | temp >>= 1; 191 | } 192 | table[i] = value; 193 | } 194 | } 195 | // polynomial = Poly; 196 | // initialValue = intialVal; 197 | // // calcByte = CalcByte; 198 | 199 | 200 | // // initialValue = (ushort)initialValue; 201 | 202 | //ushort temp, a; 203 | // for (int i = 0; i < table.Length; ++i) 204 | // { 205 | // temp = 0; 206 | // a = (ushort)(i << 8); 207 | // for (int j = 0; j < 8; ++j) 208 | // { 209 | // if (((temp ^ a) & 0x8000) != 0) 210 | // // if (((temp ^ a) & calcByte) != 0) 211 | // { 212 | // temp = (ushort)((temp << 1) ^ polynomial); 213 | // } 214 | // else 215 | // { 216 | // temp <<= 1; 217 | // } 218 | // a <<= 1; 219 | // } 220 | // table[i] = temp; 221 | // } 222 | } 223 | 224 | //public ushort ComputeChecksumModbus(byte[] bytes) 225 | //{ 226 | // ushort crc = 0; 227 | // for (int i = 0; i < bytes.Length; ++i) 228 | // { 229 | // byte index = (byte)(crc ^ bytes[i]); 230 | // crc = (ushort)((crc >> 8) ^ table[index]); 231 | // } 232 | // return crc; 233 | //} 234 | //public Crc16Modbus(ushort Poly) 235 | //{ 236 | // polynomial = Poly; 237 | // ushort value; 238 | // ushort temp; 239 | // for (ushort i = 0; i < table.Length; ++i) 240 | // { 241 | // value = 0; 242 | // temp = i; 243 | // for (byte j = 0; j < 8; ++j) 244 | // { 245 | // if (((value ^ temp) & 0x0001) != 0) 246 | // { 247 | // value = (ushort)((value >> 1) ^ polynomial); 248 | // } 249 | // else 250 | // { 251 | // value >>= 1; 252 | // } 253 | // temp >>= 1; 254 | // } 255 | // table[i] = value; 256 | // } 257 | //} 258 | public byte[] HexToBytes(string input) 259 | { 260 | StringBuilder sb = new StringBuilder(input); //---get rid of null or white space 261 | sb.Replace(" ", ""); 262 | sb.Replace(" ", ""); 263 | input = sb.ToString(); 264 | 265 | byte[] result = new byte[input.Length / 2]; 266 | for (int i = 0; i < result.Length; i++) 267 | { 268 | result[i] = Convert.ToByte(input.Substring(2 * i, 2), 16); 269 | } 270 | return result; 271 | } 272 | } 273 | } 274 | 275 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/AboutBox1.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Serial_Comm_Tester 2 | { 3 | partial class AboutBox1 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | protected override void Dispose(bool disposing) 14 | { 15 | if (disposing && (components != null)) 16 | { 17 | components.Dispose(); 18 | } 19 | base.Dispose(disposing); 20 | } 21 | 22 | #region Windows Form Designer generated code 23 | 24 | /// 25 | /// Required method for Designer support - do not modify 26 | /// the contents of this method with the code editor. 27 | /// 28 | private void InitializeComponent() 29 | { 30 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox1)); 31 | this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); 32 | this.logoPictureBox = new System.Windows.Forms.PictureBox(); 33 | this.labelProductName = new System.Windows.Forms.Label(); 34 | this.labelVersion = new System.Windows.Forms.Label(); 35 | this.labelCopyright = new System.Windows.Forms.Label(); 36 | this.labelCompanyName = new System.Windows.Forms.Label(); 37 | this.textBoxDescription = new System.Windows.Forms.TextBox(); 38 | this.okButton = new System.Windows.Forms.Button(); 39 | this.tableLayoutPanel.SuspendLayout(); 40 | ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); 41 | this.SuspendLayout(); 42 | // 43 | // tableLayoutPanel 44 | // 45 | this.tableLayoutPanel.ColumnCount = 2; 46 | this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33F)); 47 | this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67F)); 48 | this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0); 49 | this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0); 50 | this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1); 51 | this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2); 52 | this.tableLayoutPanel.Controls.Add(this.labelCompanyName, 1, 3); 53 | this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4); 54 | this.tableLayoutPanel.Controls.Add(this.okButton, 1, 5); 55 | this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; 56 | this.tableLayoutPanel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 57 | this.tableLayoutPanel.Location = new System.Drawing.Point(9, 9); 58 | this.tableLayoutPanel.Name = "tableLayoutPanel"; 59 | this.tableLayoutPanel.RowCount = 6; 60 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); 61 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.42184F)); 62 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 9.925558F)); 63 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 9.42928F)); 64 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); 65 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); 66 | this.tableLayoutPanel.Size = new System.Drawing.Size(1115, 440); 67 | this.tableLayoutPanel.TabIndex = 0; 68 | // 69 | // logoPictureBox 70 | // 71 | this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; 72 | this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("logoPictureBox.Image"))); 73 | this.logoPictureBox.Location = new System.Drawing.Point(3, 3); 74 | this.logoPictureBox.Name = "logoPictureBox"; 75 | this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6); 76 | this.logoPictureBox.Size = new System.Drawing.Size(361, 434); 77 | this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; 78 | this.logoPictureBox.TabIndex = 12; 79 | this.logoPictureBox.TabStop = false; 80 | // 81 | // labelProductName 82 | // 83 | this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill; 84 | this.labelProductName.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 85 | this.labelProductName.Location = new System.Drawing.Point(373, 0); 86 | this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); 87 | this.labelProductName.MaximumSize = new System.Drawing.Size(0, 17); 88 | this.labelProductName.Name = "labelProductName"; 89 | this.labelProductName.Size = new System.Drawing.Size(739, 17); 90 | this.labelProductName.TabIndex = 19; 91 | this.labelProductName.Text = "Product Name"; 92 | this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 93 | // 94 | // labelVersion 95 | // 96 | this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill; 97 | this.labelVersion.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 98 | this.labelVersion.Location = new System.Drawing.Point(373, 44); 99 | this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); 100 | this.labelVersion.MaximumSize = new System.Drawing.Size(0, 17); 101 | this.labelVersion.Name = "labelVersion"; 102 | this.labelVersion.Size = new System.Drawing.Size(739, 17); 103 | this.labelVersion.TabIndex = 0; 104 | this.labelVersion.Text = "Version"; 105 | this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 106 | // 107 | // labelCopyright 108 | // 109 | this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill; 110 | this.labelCopyright.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 111 | this.labelCopyright.Location = new System.Drawing.Point(373, 89); 112 | this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); 113 | this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 17); 114 | this.labelCopyright.Name = "labelCopyright"; 115 | this.labelCopyright.Size = new System.Drawing.Size(739, 17); 116 | this.labelCopyright.TabIndex = 21; 117 | this.labelCopyright.Text = "Copyright"; 118 | this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 119 | this.labelCopyright.Click += new System.EventHandler(this.labelCopyright_Click); 120 | // 121 | // labelCompanyName 122 | // 123 | this.labelCompanyName.Dock = System.Windows.Forms.DockStyle.Fill; 124 | this.labelCompanyName.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 125 | this.labelCompanyName.Location = new System.Drawing.Point(373, 132); 126 | this.labelCompanyName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); 127 | this.labelCompanyName.MaximumSize = new System.Drawing.Size(0, 17); 128 | this.labelCompanyName.Name = "labelCompanyName"; 129 | this.labelCompanyName.Size = new System.Drawing.Size(739, 17); 130 | this.labelCompanyName.TabIndex = 22; 131 | this.labelCompanyName.Text = "Company Name"; 132 | this.labelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 133 | // 134 | // textBoxDescription 135 | // 136 | this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill; 137 | this.textBoxDescription.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 138 | this.textBoxDescription.Location = new System.Drawing.Point(373, 176); 139 | this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3); 140 | this.textBoxDescription.Multiline = true; 141 | this.textBoxDescription.Name = "textBoxDescription"; 142 | this.textBoxDescription.ReadOnly = true; 143 | this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both; 144 | this.textBoxDescription.Size = new System.Drawing.Size(739, 214); 145 | this.textBoxDescription.TabIndex = 23; 146 | this.textBoxDescription.TabStop = false; 147 | this.textBoxDescription.Text = "Description"; 148 | this.textBoxDescription.TextChanged += new System.EventHandler(this.textBoxDescription_TextChanged); 149 | // 150 | // okButton 151 | // 152 | this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 153 | this.okButton.BackColor = System.Drawing.Color.Chartreuse; 154 | this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; 155 | this.okButton.Location = new System.Drawing.Point(1037, 414); 156 | this.okButton.Name = "okButton"; 157 | this.okButton.Size = new System.Drawing.Size(75, 23); 158 | this.okButton.TabIndex = 24; 159 | this.okButton.Text = "&COOL"; 160 | this.okButton.UseVisualStyleBackColor = false; 161 | // 162 | // AboutBox1 163 | // 164 | this.AcceptButton = this.okButton; 165 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 166 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 167 | this.BackColor = System.Drawing.SystemColors.ActiveCaption; 168 | this.ClientSize = new System.Drawing.Size(1133, 458); 169 | this.Controls.Add(this.tableLayoutPanel); 170 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; 171 | this.MaximizeBox = false; 172 | this.MinimizeBox = false; 173 | this.Name = "AboutBox1"; 174 | this.Padding = new System.Windows.Forms.Padding(9); 175 | this.ShowIcon = false; 176 | this.ShowInTaskbar = false; 177 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 178 | this.Text = "About Serial Comm Tester"; 179 | this.Load += new System.EventHandler(this.AboutBox1_Load); 180 | this.tableLayoutPanel.ResumeLayout(false); 181 | this.tableLayoutPanel.PerformLayout(); 182 | ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); 183 | this.ResumeLayout(false); 184 | 185 | } 186 | 187 | #endregion 188 | 189 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; 190 | private System.Windows.Forms.PictureBox logoPictureBox; 191 | private System.Windows.Forms.Label labelProductName; 192 | private System.Windows.Forms.Label labelVersion; 193 | private System.Windows.Forms.Label labelCopyright; 194 | private System.Windows.Forms.Label labelCompanyName; 195 | private System.Windows.Forms.TextBox textBoxDescription; 196 | private System.Windows.Forms.Button okButton; 197 | } 198 | } 199 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | 294 | Copyright (C) 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | , 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/Conversion_Table.cs: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of Serial-Comm-Tester source code. All Rights Reserved. 3 | * 4 | * Serial-Comm-Tetster is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; either version 2 of the License. 7 | * 8 | * This software is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this software; if not, write to the Free Software 15 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 16 | * USA. 17 | */ 18 | 19 | 20 | /* 21 | * Author: Philip Murray 22 | * Project Homepage: https://github.com/PhilipMur/Serial-Comm-Tester 23 | */ 24 | 25 | using System; 26 | using System.Windows.Forms; 27 | 28 | namespace Serial_Comm_Tester 29 | { 30 | public partial class Conversion_Table : Form 31 | { 32 | public Conversion_Table() 33 | { 34 | InitializeComponent(); 35 | } 36 | 37 | 38 | //convert the parsed value in from value back in base 2 = binary base 8 = ocatal base 16 = hex and base 0 = dec 39 | private void btnConvert_Click(object sender, EventArgs e) 40 | { 41 | 42 | if (richTextBoxTextValue.Text != string.Empty )//&& checkBoxTextVal.Checked == true) 43 | { 44 | richTextBoxHex.Text = toHex(richTextBoxTextValue.Text); 45 | richTextBoxDec.Text = toDec(richTextBoxTextValue.Text); 46 | richTextBoxOctal.Text = toOct(richTextBoxTextValue.Text); 47 | richTextBoxBinary.Text = toBin(richTextBoxTextValue.Text); 48 | 49 | 50 | } 51 | 52 | } 53 | 54 | private void btnClear_Click(object sender, EventArgs e) 55 | { 56 | richTextBoxTestDec.Clear(); 57 | richTextBoxTestHex.Clear(); 58 | richTextBoxDecToHex2.Clear(); 59 | richTextBoxTextValue.Clear(); 60 | richTextBoxDecToHex.Clear(); 61 | richTextBoxHex.Clear(); 62 | richTextBoxDec.Clear(); 63 | richTextBoxBinary.Clear(); 64 | richTextBoxOctal.Clear(); 65 | 66 | 67 | 68 | richTextBoxAscii2.Clear(); 69 | richTextBoxDec.Clear(); 70 | richTextBoxHex.Clear(); 71 | richTextBoxHex2.Clear(); 72 | } 73 | 74 | 75 | 76 | public void btnExit_Click(object sender, EventArgs e) 77 | { 78 | // Hide(); 79 | 80 | Close(); 81 | } 82 | 83 | 84 | //this code gets the value of richtextbox2 and displays it in hex in RTB4 85 | public string toHex(string inp) 86 | { 87 | string outp = string.Empty; 88 | char[] value = inp.ToCharArray(); 89 | 90 | foreach (char L in value) 91 | { 92 | int v = Convert.ToInt32(L); 93 | // long v = Convert.ToInt64(L); 94 | outp += string.Format("{0:X}" + " ", v); 95 | 96 | 97 | } 98 | return outp; 99 | 100 | } 101 | //this code gets the value of richtextbox2 and displays it in Decimal in RTB3 102 | public string toDec(string inp2) 103 | { 104 | 105 | 106 | string outp2 = string.Empty; 107 | char[] value = inp2.ToCharArray(); 108 | 109 | foreach (char L in value) 110 | { 111 | 112 | int v2 = Convert.ToInt32(L); 113 | //long v2 = Convert.ToInt64(L); 114 | 115 | outp2 += string.Format("{0}" + " ", v2); 116 | 117 | } 118 | return outp2; 119 | } 120 | //to base 8 121 | public string toOct(string inp2) 122 | { 123 | 124 | 125 | string outp2 = string.Empty; 126 | char[] value = inp2.ToCharArray(); 127 | 128 | foreach (char L in value) 129 | { 130 | 131 | int v2 = Convert.ToInt32(L); 132 | //convert to base 8 133 | string v2Con = Convert.ToString(v2, 8); 134 | //long v2 = Convert.ToInt64(L); 135 | 136 | // outp2 += string.Format("{0}" + " ", v2); 137 | outp2 += string.Format("{0}" + " ", v2Con); 138 | 139 | } 140 | return outp2; 141 | } 142 | //to base 2 = binary 143 | public string toBin(string inp2) 144 | { 145 | 146 | 147 | string outp2 = string.Empty; 148 | char[] value = inp2.ToCharArray(); 149 | 150 | foreach (char L in value) 151 | { 152 | 153 | int v2 = Convert.ToInt32(L); 154 | //convert to a base 2 =binary 155 | string v2Con = Convert.ToString(v2, 2).PadLeft(8,'0'); 156 | //long v2 = Convert.ToInt64(L); 157 | 158 | // outp2 += string.Format("{0}" + " ", v2); 159 | outp2 += string.Format("{0}" + " ", v2Con); 160 | 161 | } 162 | return outp2; 163 | } 164 | //hex to dec 165 | private static Decimal ParseHexString(string hexNumber) 166 | { 167 | hexNumber = hexNumber.Replace("x", string.Empty); 168 | long result = 0; 169 | long.TryParse(hexNumber, System.Globalization.NumberStyles.HexNumber, null, out result); 170 | return result; 171 | } 172 | 173 | //hex to ascii 174 | public static string ConvertHex(string hexString) 175 | { 176 | try 177 | { 178 | string ascii = string.Empty; 179 | 180 | for (int i = 0; i < hexString.Length; i += 2) 181 | // for (int i = 0; i < hexString.Length; i++) 182 | { 183 | string hs = string.Empty; 184 | 185 | hs = hexString.Substring(i, 2); 186 | // hs = hexString; 187 | uint decval = Convert.ToUInt32(hs, 16); 188 | // int decval = System.Convert.ToInt32(hs, 16); 189 | char character = Convert.ToChar(decval); 190 | 191 | 192 | 193 | ascii += character; 194 | // ascii += equivalentLetter; 195 | 196 | } 197 | 198 | return ascii; 199 | } 200 | catch (Exception ex) 201 | { 202 | MessageBox.Show(ex.Message,"ERROR" , MessageBoxButtons.OK , MessageBoxIcon.Error); 203 | } 204 | 205 | return string.Empty; 206 | } 207 | 208 | 209 | 210 | 211 | 212 | private void btnHexToDec_Click(object sender, EventArgs e) 213 | { 214 | //hex to dec 215 | richTextBoxTestDec.Text = Convert.ToString(ParseHexString(richTextBoxTestHex.Text)); 216 | } 217 | 218 | private void btnHexToAscii_Click(object sender, EventArgs e) 219 | { 220 | if (richTextBoxHex2.TextLength < 2) 221 | { 222 | MessageBox.Show("Enter 2 Values = example: enter (01) not (1) by itself", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); 223 | } 224 | 225 | else 226 | { 227 | 228 | richTextBoxAscii2.Text = Convert.ToString(ConvertHex(richTextBoxHex2.Text)); 229 | 230 | 231 | 232 | if (richTextBoxAscii2.Text == "") //00 233 | { 234 | lblAsciiChar.Text = "NUL = Null char"; 235 | //labelText = "NUL = Null char"; 236 | } 237 | else if (richTextBoxAscii2.Text == "")//01 238 | { 239 | //MessageBox.Show("hi"); 240 | lblAsciiChar.Text = "SOH = Start of Heading"; 241 | } 242 | else if (richTextBoxAscii2.Text == "")//02 243 | { 244 | lblAsciiChar.Text = "STX = Start of Text"; 245 | } 246 | else if (richTextBoxAscii2.Text == "")//03 247 | { 248 | lblAsciiChar.Text = "ETX = End of Text"; 249 | } 250 | else if (richTextBoxAscii2.Text == "")//04 251 | { 252 | lblAsciiChar.Text = "EOT = End of Transmission"; 253 | } 254 | else if (richTextBoxAscii2.Text == "")//05 255 | { 256 | lblAsciiChar.Text = "ENQ = Enquiry"; 257 | } 258 | else if (richTextBoxAscii2.Text == "")//06 259 | { 260 | lblAsciiChar.Text = "ACK = Acknowledgment"; 261 | } 262 | if (richTextBoxAscii2.Text == "")//07 263 | { 264 | lblAsciiChar.Text = "BEL = Bell"; 265 | } 266 | else if (richTextBoxAscii2.Text == "")//08 267 | { 268 | lblAsciiChar.Text = "BS = Back Space"; 269 | } 270 | else if (richTextBoxHex2.Text == "09" ) 271 | // else if (richTextBoxAscii2.Text == " ")//09 272 | { 273 | lblAsciiChar.Text = "HT = Horizontal Tab"; 274 | } 275 | // else if (richTextBoxAscii2.Text == "") 276 | 277 | else if (richTextBoxHex2.Text == "0A" | richTextBoxHex2.Text == "0a") 278 | 279 | { 280 | lblAsciiChar.Text = "LF = Line Feed"; 281 | } 282 | 283 | // else if (richTextBoxAscii2.Text == "")//0B 284 | else if (richTextBoxHex2.Text == "0B" | richTextBoxHex2.Text == "0b") 285 | { 286 | lblAsciiChar.Text = "VT = Vertical Tab"; 287 | } 288 | // else if (richTextBoxAscii2.Text == " ")//0C 289 | else if (richTextBoxHex2.Text == "0C" | richTextBoxHex2.Text == "0c") 290 | { 291 | lblAsciiChar.Text = "FF = Form Feed"; 292 | } 293 | //else if (richTextBoxAscii2.Text == "")//0D 294 | else if (richTextBoxHex2.Text == "0D" | richTextBoxHex2.Text == "0d") 295 | { 296 | lblAsciiChar.Text = "CR = Carriage Return"; 297 | } 298 | else if (richTextBoxAscii2.Text == "")//0E 299 | { 300 | lblAsciiChar.Text = "SO = Shift Out / X-On"; 301 | } 302 | else if (richTextBoxAscii2.Text == "")//0F 303 | { 304 | lblAsciiChar.Text = "SI = Shift In / X-Off"; 305 | } 306 | else if (richTextBoxAscii2.Text == "")//10 307 | { 308 | lblAsciiChar.Text = "DLE = Device Control 1 (oft. XON)"; 309 | } 310 | if (richTextBoxAscii2.Text == "")//11 311 | { 312 | lblAsciiChar.Text = "DC1 = Device Control 1 (oft. XON)"; 313 | } 314 | if (richTextBoxAscii2.Text == "")//12 315 | { 316 | lblAsciiChar.Text = "DC2 = Device Control 2"; 317 | } 318 | else if (richTextBoxAscii2.Text == "")//13 319 | { 320 | lblAsciiChar.Text = "DC3 = Device Control 3 (oft. XOFF)"; 321 | } 322 | else if (richTextBoxAscii2.Text == "")//14 323 | { 324 | lblAsciiChar.Text = "DC4 = Device Control 4"; 325 | } 326 | else if (richTextBoxAscii2.Text == "")//15 327 | { 328 | lblAsciiChar.Text = "NAK = Negative Acknowledgement"; 329 | } 330 | else if (richTextBoxAscii2.Text == "")//16 331 | { 332 | lblAsciiChar.Text = "SYN = Synchronous Idle"; 333 | } 334 | else if (richTextBoxAscii2.Text == "")//17 335 | { 336 | lblAsciiChar.Text = "ETB = End of Transmit Block"; 337 | } 338 | else if (richTextBoxAscii2.Text == "")//18 339 | { 340 | lblAsciiChar.Text = "CAN = Cancel"; 341 | } 342 | else if (richTextBoxAscii2.Text == "")//19 343 | { 344 | lblAsciiChar.Text = "EM = End of Medium"; 345 | } 346 | else if (richTextBoxAscii2.Text == "")//1A 347 | { 348 | lblAsciiChar.Text = "SUB = Substitute"; 349 | } 350 | else if (richTextBoxAscii2.Text == "")//1B 351 | { 352 | lblAsciiChar.Text = "ESC = Escape"; 353 | } 354 | else if (richTextBoxAscii2.Text == "")//1C 355 | { 356 | lblAsciiChar.Text = "FS = File Separator"; 357 | } 358 | 359 | else if (richTextBoxAscii2.Text == "")//1D 360 | { 361 | lblAsciiChar.Text = "GS = Group Separator"; 362 | } 363 | else if (richTextBoxAscii2.Text == "")//1E 364 | { 365 | lblAsciiChar.Text = "RS = Record Separator"; 366 | } 367 | else if (richTextBoxAscii2.Text == "")//1F 368 | { 369 | lblAsciiChar.Text = "US = Unit Separator"; 370 | } 371 | else if (richTextBoxAscii2.Text == "")//7f 372 | { 373 | lblAsciiChar.Text = "DEL = Delete"; 374 | } 375 | //else 376 | //{ 377 | // lblAsciiChar.Text = ""; 378 | //} 379 | } 380 | } 381 | 382 | private void richTextBoxTextValue_TextChanged(object sender, EventArgs e) 383 | { 384 | //// richTextBoxValue.Clear(); 385 | richTextBoxHex.Clear(); 386 | richTextBoxDec.Clear(); 387 | richTextBoxBinary.Clear(); 388 | richTextBoxOctal.Clear(); 389 | //richTextBoxTextValue.Text += " "; 390 | //richTextBoxTextValue.Text.Insert(richTextBoxTextValue.TextLength, "+1"); 391 | } 392 | 393 | private void richTextBoxValue_TextChanged(object sender, EventArgs e) 394 | { 395 | //// richTextBoxValue.Clear(); 396 | //richTextBoxHex.Clear(); 397 | //richTextBoxDec.Clear(); 398 | //richTextBoxBinary.Clear(); 399 | //richTextBoxOctal.Clear(); 400 | } 401 | 402 | 403 | private int t; 404 | 405 | private void btnDecToHex_Click_1(object sender, EventArgs e) 406 | { 407 | //THIS CHECKS TO SEE IF IT CAN BE PARSED 408 | bool b = int.TryParse(richTextBoxDecToHex.Text , out t); 409 | 410 | 411 | 412 | if (richTextBoxDecToHex.Text != string.Empty && b == true)//&& checkBoxNumVal.Checked == true) 413 | { 414 | int textConverter = int.Parse(richTextBoxDecToHex.Text); 415 | 416 | richTextBoxDecToHex2.Text = Convert.ToString(textConverter, 16); 417 | 418 | } 419 | else if(b == false) 420 | { 421 | richTextBoxDecToHex.Clear(); 422 | MessageBox.Show("Enter a Value that can be converted", "Message for a noobie",MessageBoxButtons.OK, MessageBoxIcon.Information); 423 | } 424 | 425 | } 426 | 427 | private void richTextBoxHex2_TextChanged(object sender, EventArgs e) 428 | { 429 | lblAsciiChar.Text = "?"; 430 | } 431 | 432 | //THIS WILL ADD SPACES TO THE TEXT IN THE ASCII TEXT CONVERT BOX 433 | private void richTextBoxTextValue_KeyPress(object sender, KeyPressEventArgs e) 434 | { 435 | //string newTextSpace = richTextBoxTextValue.Text; 436 | //richTextBoxTextValue.Text = newTextSpace.Insert(0, " "); 437 | } 438 | 439 | //THIS IS USED TO OPEN ONLY ONE INSTANCE OF THE CONVERSION TABLE AND IF ITS CREATED BRING TO FRONT 440 | // Conversion_Table conTable = null; 441 | private HexChart hexTable; 442 | private void button1_Click(object sender, EventArgs e) 443 | { 444 | // Conversion_Table conTable = new Conversion_Table(); 445 | if (hexTable == null || (hexTable != null && hexTable.IsDisposed)) 446 | { 447 | hexTable = new HexChart(); 448 | hexTable.Show(); 449 | // MessageBox.Show("disposed"); 450 | } 451 | if (hexTable.WindowState == FormWindowState.Minimized) 452 | { 453 | hexTable.WindowState = FormWindowState.Normal; 454 | } 455 | else 456 | { 457 | hexTable.BringToFront(); 458 | // MessageBox.Show("bring to front"); 459 | } 460 | } 461 | //copy paste hex to dec 462 | private void copyToolStripMenuItem_Click(object sender, EventArgs e) 463 | { 464 | if (richTextBoxTestHex.SelectedText == "" && richTextBoxTestHex.Text != "") 465 | { 466 | Clipboard.SetText(richTextBoxTestHex.Text); 467 | } 468 | if (richTextBoxTestHex.SelectedText != "") 469 | { 470 | Clipboard.SetText(richTextBoxTestHex.SelectedText); 471 | } 472 | } 473 | 474 | private void pasteToolStripMenuItem_Click(object sender, EventArgs e) 475 | { 476 | richTextBoxTestHex.Text += Clipboard.GetText(); 477 | } 478 | 479 | //copy paste hex to ascii 480 | private void copyToolStripMenuItem1_Click(object sender, EventArgs e) 481 | { 482 | if (richTextBoxHex2.SelectedText == "" && richTextBoxHex2.Text != "") 483 | { 484 | Clipboard.SetText(richTextBoxHex2.Text); 485 | } 486 | if (richTextBoxHex2.SelectedText != "") 487 | { 488 | Clipboard.SetText(richTextBoxHex2.SelectedText); 489 | } 490 | 491 | } 492 | 493 | private void pasteToolStripMenuItem1_Click(object sender, EventArgs e) 494 | { 495 | richTextBoxHex2.Text += Clipboard.GetText(); 496 | } 497 | //copy paste dec to hex 498 | private void copyToolStripMenuItem2_Click(object sender, EventArgs e) 499 | { 500 | if (richTextBoxDecToHex.SelectedText == "" && richTextBoxDecToHex.Text != "") 501 | { 502 | Clipboard.SetText(richTextBoxDecToHex.Text); 503 | } 504 | if (richTextBoxDecToHex.SelectedText != "") 505 | { 506 | Clipboard.SetText(richTextBoxDecToHex.SelectedText); 507 | } 508 | } 509 | 510 | private void pasteToolStripMenuItem2_Click(object sender, EventArgs e) 511 | { 512 | richTextBoxDecToHex.Text += Clipboard.GetText(); 513 | } 514 | 515 | private void copyToolStripMenuItem3_Click(object sender, EventArgs e) 516 | { 517 | if (richTextBoxTextValue.SelectedText == "" && richTextBoxTextValue.Text != "") 518 | { 519 | Clipboard.SetText(richTextBoxTextValue.Text); 520 | } 521 | if (richTextBoxTextValue.SelectedText != "") 522 | { 523 | Clipboard.SetText(richTextBoxTextValue.SelectedText); 524 | } 525 | } 526 | 527 | private void pasteToolStripMenuItem3_Click(object sender, EventArgs e) 528 | { 529 | richTextBoxTextValue.Text += Clipboard.GetText(); 530 | } 531 | 532 | private void checkBoxBringToFront_CheckedChanged(object sender, EventArgs e) 533 | { 534 | if (checkBoxBringToFront.Checked == true) 535 | { 536 | TopMost = true; 537 | } 538 | if (checkBoxBringToFront.Checked == false) 539 | { 540 | TopMost = false; 541 | } 542 | } 543 | } 544 | } 545 | -------------------------------------------------------------------------------- /Serial Comm Tester - V2/ChecksumCalc.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Serial_Comm_Tester 2 | { 3 | partial class ChecksumCalc 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.listView1 = new System.Windows.Forms.ListView(); 32 | this.CRC_Version = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 33 | this.CRC_Result = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 34 | this.btnExit = new System.Windows.Forms.Button(); 35 | this.btnClear = new System.Windows.Forms.Button(); 36 | this.btnCalculateCRC = new System.Windows.Forms.Button(); 37 | this.txtBCalculateValue = new System.Windows.Forms.TextBox(); 38 | this.label1 = new System.Windows.Forms.Label(); 39 | this.checkBoxBringToFront = new System.Windows.Forms.CheckBox(); 40 | this.ckBHexValueCRC = new System.Windows.Forms.CheckBox(); 41 | this.ckBStringValueCRC = new System.Windows.Forms.CheckBox(); 42 | this.label2 = new System.Windows.Forms.Label(); 43 | this.comBoCRC8 = new System.Windows.Forms.ComboBox(); 44 | this.comBoCRC16 = new System.Windows.Forms.ComboBox(); 45 | this.label3 = new System.Windows.Forms.Label(); 46 | this.comBoCRC32 = new System.Windows.Forms.ComboBox(); 47 | this.label4 = new System.Windows.Forms.Label(); 48 | this.ckBWhiteSpaceCharacters = new System.Windows.Forms.CheckBox(); 49 | this.label5 = new System.Windows.Forms.Label(); 50 | this.label6 = new System.Windows.Forms.Label(); 51 | this.label7 = new System.Windows.Forms.Label(); 52 | this.label8 = new System.Windows.Forms.Label(); 53 | this.SuspendLayout(); 54 | // 55 | // listView1 56 | // 57 | this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { 58 | this.CRC_Version, 59 | this.CRC_Result}); 60 | this.listView1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 61 | this.listView1.FullRowSelect = true; 62 | this.listView1.GridLines = true; 63 | this.listView1.Location = new System.Drawing.Point(11, 12); 64 | this.listView1.Name = "listView1"; 65 | this.listView1.Size = new System.Drawing.Size(593, 267); 66 | this.listView1.TabIndex = 0; 67 | this.listView1.UseCompatibleStateImageBehavior = false; 68 | this.listView1.View = System.Windows.Forms.View.Details; 69 | // 70 | // CRC_Version 71 | // 72 | this.CRC_Version.Text = "CRC Version / Checksum"; 73 | this.CRC_Version.Width = 247; 74 | // 75 | // CRC_Result 76 | // 77 | this.CRC_Result.Text = "CRC Result / Checksum"; 78 | this.CRC_Result.Width = 349; 79 | // 80 | // btnExit 81 | // 82 | this.btnExit.BackColor = System.Drawing.Color.Red; 83 | this.btnExit.Cursor = System.Windows.Forms.Cursors.Hand; 84 | this.btnExit.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Lime; 85 | this.btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 86 | this.btnExit.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 87 | this.btnExit.Location = new System.Drawing.Point(481, 633); 88 | this.btnExit.Name = "btnExit"; 89 | this.btnExit.Size = new System.Drawing.Size(122, 40); 90 | this.btnExit.TabIndex = 6; 91 | this.btnExit.Text = "CLOSE"; 92 | this.btnExit.UseVisualStyleBackColor = false; 93 | this.btnExit.Click += new System.EventHandler(this.btnExit_Click); 94 | // 95 | // btnClear 96 | // 97 | this.btnClear.BackColor = System.Drawing.Color.Yellow; 98 | this.btnClear.Cursor = System.Windows.Forms.Cursors.Hand; 99 | this.btnClear.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Lime; 100 | this.btnClear.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 101 | this.btnClear.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 102 | this.btnClear.Location = new System.Drawing.Point(220, 633); 103 | this.btnClear.Name = "btnClear"; 104 | this.btnClear.Size = new System.Drawing.Size(122, 40); 105 | this.btnClear.TabIndex = 8; 106 | this.btnClear.Text = "Clear All"; 107 | this.btnClear.UseVisualStyleBackColor = false; 108 | this.btnClear.Click += new System.EventHandler(this.btnClear_Click); 109 | // 110 | // btnCalculateCRC 111 | // 112 | this.btnCalculateCRC.BackColor = System.Drawing.Color.Chartreuse; 113 | this.btnCalculateCRC.Cursor = System.Windows.Forms.Cursors.Hand; 114 | this.btnCalculateCRC.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Lime; 115 | this.btnCalculateCRC.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 116 | this.btnCalculateCRC.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 117 | this.btnCalculateCRC.Location = new System.Drawing.Point(11, 633); 118 | this.btnCalculateCRC.Name = "btnCalculateCRC"; 119 | this.btnCalculateCRC.Size = new System.Drawing.Size(193, 40); 120 | this.btnCalculateCRC.TabIndex = 7; 121 | this.btnCalculateCRC.Text = "Calculate CRC"; 122 | this.btnCalculateCRC.UseVisualStyleBackColor = false; 123 | this.btnCalculateCRC.Click += new System.EventHandler(this.btnCalculateCRC_Click); 124 | // 125 | // txtBCalculateValue 126 | // 127 | this.txtBCalculateValue.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 128 | this.txtBCalculateValue.Location = new System.Drawing.Point(10, 509); 129 | this.txtBCalculateValue.Name = "txtBCalculateValue"; 130 | this.txtBCalculateValue.Size = new System.Drawing.Size(593, 22); 131 | this.txtBCalculateValue.TabIndex = 9; 132 | // 133 | // label1 134 | // 135 | this.label1.AutoSize = true; 136 | this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 137 | this.label1.Location = new System.Drawing.Point(256, 490); 138 | this.label1.Name = "label1"; 139 | this.label1.Size = new System.Drawing.Size(117, 16); 140 | this.label1.TabIndex = 10; 141 | this.label1.Text = "Calculate Value"; 142 | // 143 | // checkBoxBringToFront 144 | // 145 | this.checkBoxBringToFront.AutoSize = true; 146 | this.checkBoxBringToFront.BackColor = System.Drawing.Color.DarkGray; 147 | this.checkBoxBringToFront.Cursor = System.Windows.Forms.Cursors.Hand; 148 | this.checkBoxBringToFront.Location = new System.Drawing.Point(369, 646); 149 | this.checkBoxBringToFront.Name = "checkBoxBringToFront"; 150 | this.checkBoxBringToFront.Size = new System.Drawing.Size(93, 17); 151 | this.checkBoxBringToFront.TabIndex = 35; 152 | this.checkBoxBringToFront.Text = "Bring To Front"; 153 | this.checkBoxBringToFront.UseVisualStyleBackColor = false; 154 | this.checkBoxBringToFront.CheckedChanged += new System.EventHandler(this.checkBoxBringToFront_CheckedChanged); 155 | // 156 | // ckBHexValueCRC 157 | // 158 | this.ckBHexValueCRC.AutoSize = true; 159 | this.ckBHexValueCRC.Cursor = System.Windows.Forms.Cursors.Hand; 160 | this.ckBHexValueCRC.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 161 | this.ckBHexValueCRC.Location = new System.Drawing.Point(10, 557); 162 | this.ckBHexValueCRC.Name = "ckBHexValueCRC"; 163 | this.ckBHexValueCRC.Size = new System.Drawing.Size(369, 20); 164 | this.ckBHexValueCRC.TabIndex = 37; 165 | this.ckBHexValueCRC.Text = "Get Hex Value (example : 1 hex is a 0x01 value)"; 166 | this.ckBHexValueCRC.UseVisualStyleBackColor = true; 167 | // 168 | // ckBStringValueCRC 169 | // 170 | this.ckBStringValueCRC.AutoSize = true; 171 | this.ckBStringValueCRC.Cursor = System.Windows.Forms.Cursors.Hand; 172 | this.ckBStringValueCRC.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 173 | this.ckBStringValueCRC.Location = new System.Drawing.Point(10, 587); 174 | this.ckBStringValueCRC.Name = "ckBStringValueCRC"; 175 | this.ckBStringValueCRC.Size = new System.Drawing.Size(380, 20); 176 | this.ckBStringValueCRC.TabIndex = 38; 177 | this.ckBStringValueCRC.Text = "Get String Value (This will convert the text to bytes)"; 178 | this.ckBStringValueCRC.UseVisualStyleBackColor = true; 179 | // 180 | // label2 181 | // 182 | this.label2.AutoSize = true; 183 | this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 184 | this.label2.Location = new System.Drawing.Point(51, 288); 185 | this.label2.Name = "label2"; 186 | this.label2.Size = new System.Drawing.Size(143, 16); 187 | this.label2.TabIndex = 39; 188 | this.label2.Text = "CRC 8 polynomial : "; 189 | // 190 | // comBoCRC8 191 | // 192 | this.comBoCRC8.Cursor = System.Windows.Forms.Cursors.Hand; 193 | this.comBoCRC8.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 194 | this.comBoCRC8.FormattingEnabled = true; 195 | this.comBoCRC8.Items.AddRange(new object[] { 196 | "CRC8 = 0x07", 197 | "CRC8_DVB = 0xD5", 198 | "CRC8_SAE_J1850 = 0x1D"}); 199 | this.comBoCRC8.Location = new System.Drawing.Point(200, 285); 200 | this.comBoCRC8.Name = "comBoCRC8"; 201 | this.comBoCRC8.Size = new System.Drawing.Size(377, 24); 202 | this.comBoCRC8.TabIndex = 40; 203 | this.comBoCRC8.SelectedIndexChanged += new System.EventHandler(this.comBoCRC8_SelectedIndexChanged); 204 | // 205 | // comBoCRC16 206 | // 207 | this.comBoCRC16.Cursor = System.Windows.Forms.Cursors.Hand; 208 | this.comBoCRC16.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 209 | this.comBoCRC16.FormattingEnabled = true; 210 | this.comBoCRC16.Items.AddRange(new object[] { 211 | "CRC_16_CCITT_ZERO = 0x1021", 212 | "CRC_16_XMODEM = 0x1021", 213 | "CRC_16_CCITT_FALSE = 0x1021", 214 | "CRC_16_AUG_CCITT = 0x1021", 215 | "CRC_16_TELEDISK = 0xAO97", 216 | "CRC_16_T10_DIF = 0x8BB7", 217 | "CRC_16_DECT_X = 0x589", 218 | "CRC_16_DDS_110 = 0x8005", 219 | "CRC_16_CDMA2000 = 0xC867", 220 | "CRC_16_BUYPASS = Ox8005", 221 | "CRC_16_MODBUS = 0xA001"}); 222 | this.comBoCRC16.Location = new System.Drawing.Point(200, 315); 223 | this.comBoCRC16.Name = "comBoCRC16"; 224 | this.comBoCRC16.Size = new System.Drawing.Size(377, 24); 225 | this.comBoCRC16.TabIndex = 42; 226 | // 227 | // label3 228 | // 229 | this.label3.AutoSize = true; 230 | this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 231 | this.label3.Location = new System.Drawing.Point(39, 318); 232 | this.label3.Name = "label3"; 233 | this.label3.Size = new System.Drawing.Size(155, 16); 234 | this.label3.TabIndex = 41; 235 | this.label3.Text = "CRC 16 polynomial : "; 236 | // 237 | // comBoCRC32 238 | // 239 | this.comBoCRC32.Cursor = System.Windows.Forms.Cursors.Hand; 240 | this.comBoCRC32.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 241 | this.comBoCRC32.FormattingEnabled = true; 242 | this.comBoCRC32.Items.AddRange(new object[] { 243 | "CRC32 = 0x04C11DB7"}); 244 | this.comBoCRC32.Location = new System.Drawing.Point(200, 345); 245 | this.comBoCRC32.Name = "comBoCRC32"; 246 | this.comBoCRC32.Size = new System.Drawing.Size(377, 24); 247 | this.comBoCRC32.TabIndex = 44; 248 | // 249 | // label4 250 | // 251 | this.label4.AutoSize = true; 252 | this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 253 | this.label4.Location = new System.Drawing.Point(43, 348); 254 | this.label4.Name = "label4"; 255 | this.label4.Size = new System.Drawing.Size(151, 16); 256 | this.label4.TabIndex = 43; 257 | this.label4.Text = "CRC 32 polynomial : "; 258 | // 259 | // ckBWhiteSpaceCharacters 260 | // 261 | this.ckBWhiteSpaceCharacters.AutoSize = true; 262 | this.ckBWhiteSpaceCharacters.BackColor = System.Drawing.Color.DarkGoldenrod; 263 | this.ckBWhiteSpaceCharacters.Location = new System.Drawing.Point(415, 557); 264 | this.ckBWhiteSpaceCharacters.Name = "ckBWhiteSpaceCharacters"; 265 | this.ckBWhiteSpaceCharacters.Size = new System.Drawing.Size(188, 17); 266 | this.ckBWhiteSpaceCharacters.TabIndex = 45; 267 | this.ckBWhiteSpaceCharacters.Text = "Calculate white spaces characters"; 268 | this.ckBWhiteSpaceCharacters.UseVisualStyleBackColor = false; 269 | // 270 | // label5 271 | // 272 | this.label5.AutoSize = true; 273 | this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 274 | this.label5.Location = new System.Drawing.Point(68, 378); 275 | this.label5.Name = "label5"; 276 | this.label5.Size = new System.Drawing.Size(155, 16); 277 | this.label5.TabIndex = 46; 278 | this.label5.Text = "2s Complement : 8bit "; 279 | // 280 | // label6 281 | // 282 | this.label6.AutoSize = true; 283 | this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 284 | this.label6.Location = new System.Drawing.Point(68, 408); 285 | this.label6.Name = "label6"; 286 | this.label6.Size = new System.Drawing.Size(163, 16); 287 | this.label6.TabIndex = 47; 288 | this.label6.Text = "2s Complement : 16bit "; 289 | // 290 | // label7 291 | // 292 | this.label7.AutoSize = true; 293 | this.label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 294 | this.label7.Location = new System.Drawing.Point(17, 468); 295 | this.label7.Name = "label7"; 296 | this.label7.Size = new System.Drawing.Size(202, 16); 297 | this.label7.TabIndex = 48; 298 | this.label7.Text = "Block Check Character : 8bit"; 299 | // 300 | // label8 301 | // 302 | this.label8.AutoSize = true; 303 | this.label8.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 304 | this.label8.Location = new System.Drawing.Point(95, 438); 305 | this.label8.Name = "label8"; 306 | this.label8.Size = new System.Drawing.Size(124, 16); 307 | this.label8.TabIndex = 49; 308 | this.label8.Text = "Modulo 256 : 8bit"; 309 | // 310 | // ChecksumCalc 311 | // 312 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 313 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 314 | this.BackColor = System.Drawing.Color.DarkGray; 315 | this.ClientSize = new System.Drawing.Size(635, 685); 316 | this.Controls.Add(this.label8); 317 | this.Controls.Add(this.label7); 318 | this.Controls.Add(this.label6); 319 | this.Controls.Add(this.label5); 320 | this.Controls.Add(this.ckBWhiteSpaceCharacters); 321 | this.Controls.Add(this.comBoCRC32); 322 | this.Controls.Add(this.label4); 323 | this.Controls.Add(this.comBoCRC16); 324 | this.Controls.Add(this.label3); 325 | this.Controls.Add(this.comBoCRC8); 326 | this.Controls.Add(this.label2); 327 | this.Controls.Add(this.ckBStringValueCRC); 328 | this.Controls.Add(this.ckBHexValueCRC); 329 | this.Controls.Add(this.checkBoxBringToFront); 330 | this.Controls.Add(this.label1); 331 | this.Controls.Add(this.txtBCalculateValue); 332 | this.Controls.Add(this.btnClear); 333 | this.Controls.Add(this.btnCalculateCRC); 334 | this.Controls.Add(this.btnExit); 335 | this.Controls.Add(this.listView1); 336 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; 337 | this.MaximizeBox = false; 338 | this.MinimizeBox = false; 339 | this.Name = "ChecksumCalc"; 340 | this.ShowIcon = false; 341 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 342 | this.Text = "ChecksumCalc"; 343 | this.ResumeLayout(false); 344 | this.PerformLayout(); 345 | 346 | } 347 | 348 | #endregion 349 | 350 | private System.Windows.Forms.ListView listView1; 351 | private System.Windows.Forms.ColumnHeader CRC_Version; 352 | private System.Windows.Forms.ColumnHeader CRC_Result; 353 | private System.Windows.Forms.Button btnExit; 354 | private System.Windows.Forms.Button btnClear; 355 | private System.Windows.Forms.Button btnCalculateCRC; 356 | private System.Windows.Forms.TextBox txtBCalculateValue; 357 | private System.Windows.Forms.Label label1; 358 | private System.Windows.Forms.CheckBox checkBoxBringToFront; 359 | private System.Windows.Forms.CheckBox ckBHexValueCRC; 360 | private System.Windows.Forms.CheckBox ckBStringValueCRC; 361 | private System.Windows.Forms.Label label2; 362 | private System.Windows.Forms.ComboBox comBoCRC8; 363 | private System.Windows.Forms.ComboBox comBoCRC16; 364 | private System.Windows.Forms.Label label3; 365 | private System.Windows.Forms.ComboBox comBoCRC32; 366 | private System.Windows.Forms.Label label4; 367 | private System.Windows.Forms.CheckBox ckBWhiteSpaceCharacters; 368 | private System.Windows.Forms.Label label5; 369 | private System.Windows.Forms.Label label6; 370 | private System.Windows.Forms.Label label7; 371 | private System.Windows.Forms.Label label8; 372 | } 373 | } -------------------------------------------------------------------------------- /Serial Comm Tester - V2/AboutBox1.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | 123 | R0lGODlhgAH7AIcAAAAAAPf3939/fzMzM7+/vx8fH9fX109PT4+Pj+/v7w8PD6+vrz8/P8zMzGZmZpmZ 124 | mScnJ9/f32ZmZgcHB////1hYWD09Pf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 125 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 126 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 127 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 128 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 129 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 130 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 131 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 132 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 133 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 134 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 135 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 136 | ACH/C05FVFNDQVBFMi4wAwEBAAAh+QQAAAAAACwAAAAAgAH7AAAI/wApCBxIsKDBgwgTKlzIsKHDhxAj 137 | SpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjR 138 | o0iTKl3KtKnTpwYTGDAQIOJUAwqvJgwwNUHNriohiPUK0oHYBVDTQjQAoK1bAAoEGKzwtq0FrFkh1IVA 139 | VmCFCXv7UvhbV25CtnUnVMA7EHFdBWgbCii88G3VgXrbGm7olnHEyXUB3MWsGWUAAajVznQcWsHABKHd 140 | bkYIOvRlCrHb3s7t4HBuABAIsq7beyHd0MURvq0wMMDb2ZXbeoZYO3RksxAim3SsWqbjCqgBt/+NbMHt 141 | g6kPFACAbnCyg6nl2zIXCGDCeQO1NwNfYGCBZYTfCeCAeMA15hZ4Dry1kH/jUVDbbQbVNdBxpTnUGUX5 142 | CUAhAC5x1x1MjjEmG30VNqYdgAWpV6BAJ1KQ2QMDEUAQARceFOKEbkV2IwUJtrVQfK6RuF5CdUVGGQUB 143 | WKBifYsRVCOShMHFHkG1DfTAhdhFtoBYDiQQnwUFBRBlXAQlIFZwAmVJwQJLcvlhSzvi1haMcrb1nkWZ 144 | gXkQjboB6JZgwj1JgXho7hjffAllhqaLbS0a4VsTrHnkcE/WyOBjCVUp0I2ZGVbdW4vC1pqBPgrUqYOh 145 | OfomSo6dR8CSl23/2JYCdELkXINUggooQcdF6qd0BPXIIQWOKQCBiqoeFN+wjK54kFs9GgCYsIYZENdU 146 | l+pZJ1a3rtdfjrS5NdCyplZYmwUCwCqQeHe9Kt+m4pY7pAEUotbiqtv9duKSdXlF6ZQqBpmrWwrIeNCl 147 | BtsoqKaUmgcvZZdOIKBbyQ7UGWDidQudVAIoajGwoCXXo7YF1SYWgcWdiuqK3WLFJ7MvP8ysyh7iu1LD 148 | AOy6wLIUExsaexTuyhV+biVMKgCIKgzsQMLKDF7H4P4rEL/LESndlXbVudmnjX4MAFaZxVbxyqFpqzJo 149 | i16ItpPA1kxzvDar1CqFY1OQANY+noba3tMt/7lrQR4TdGnSSn9NELsyM4YsknvzPdDOECzmsHLAFq11 150 | mrIRcFzawGY2wZlnJlcyxWI1SdqQK3Nu+NpeY+V2hTXHzeqFS26mwHSaKpSAeAI3BuGgXTMN7kJxUmhw 151 | nIs/hPfvbBtOl68j1mkw69sO9q5DuRt0dvDVM+grkm5V9TrqscueL7DdAmBwo/fhTbhBl67XeFWTVcAf 152 | AcvWGja6e9/rtIAE0laAoDanhQjgfhQS3aMMV5DojSgAgaueYwRwGc1NiWyJMhf3ahS9+KBJVEgzAN6q 153 | ZTnmmQ8kO3oZAKrym+9lMDdY4dqsjpaqX8WGZDiDC0PC5haSPWtpzTMMz59A1Tq/5OaC2QOcBp1lqdz0 154 | hUBHqhP3TiiSOAnLNVsKzfsOwsO6uK6LSAtUbsZGKcVMp2EQqJVCeAgZhghKSLbrYY9Ux5gFQBEu0xlI 155 | EgmyPSYCkQBQ5EuZ3vIAlUmqZ1SkyVX+dpFFAkUrIJGKCYk3FZcM7TB5LAgkE8nJTnryk6AMpShHScpS 156 | mvKUqEylKlfJyla68pWwjKUsZ0nLWtr/8pa4zKUud8nLXvryl8AMpjCHScxiGvOYyEymMpfJzGbCEm7O 157 | jOaHFCTNaqolNNbMZlNio81uIuU33gynUMSFTXGakyfxKuc512kTaKqTnfB8CTSlWKp42nMl86RnPe/J 158 | T5LkU0j/7KdANxJQfTJroAjNSEEBus+EOnQiC2XoQR9KUQs11GrUrKhGFRLR5nV0ow/9qNcymsgGEOCk 159 | J50RSk/qFZMSoC8mjUBCEpBSh7j0pDItSQMQgBqjWYQBDFDjRFb6Uk+K1KMXlR0DkCNRGS0VAAwYyFIv 160 | SAEEJBUhT3VLAahKkKVGNSIJyGpbCqBQ1FUkNAPwX0H45NOHsBUn/0dF6lVX9VSgOmxiUBWATLNqmKke 161 | xAEFOGpds6rAg3hVIgMYq4DUM5NZMSCxBVTIW4falrbKJK4NlNAJnyqQBrTlq3zajFgbQAG/GkSsBQGq 162 | UAXCWbtBVkYNyOpW06QeBQC1AQ+ALADSehCsHeA1vYmtVjfjAAY4gAAO6I1qH3AAGKm2sweobZfSZFzk 163 | Fvazna0tWRbw1AIggAINgOwAjCsQAYg3YQs4wFgdEN62jLewMMFsZklqs9aKCrQlWqp6d1tas7anoSXq 164 | aj09C4De0Gi8gR2SWNU3GaCqqK09Iu1ad8uABPcVLtidVWlK0wD1FOCpv+2vir7KNhJbFQAwwsLaACCL 165 | ABVClUefTTBpsfZh9biYxI2d60PeSdfKEmC/36VAaKUqP82Y9iCgyeyUWkuiqCagL4n96mEFklO7BZi1 166 | SX3yQKKM5QIsgACk/SxO5SQX9X71xHsFgJfB/CgSD1k9hlEvWSdLYBklILC9Uc9XE2DgysJVxzvWLL4W 167 | vFuyDBnLcoFsYKmaZIcwWU5fZa5upfxigSQAARWOnoAnaqUDTBrLOA7whtUM1Nf2F8eZdbNm+DTeTHNo 168 | sqABKgP0zKcWTf+2nYAOtKA/NNigzii/QyLwlQf2ECYzSC49YoAAAktpEidWAQcADXt6dK9kL7vSUybR 169 | bEb9YVkzgLTZbrPw1Mdqb0cV1p/19nH9/Gv1/ZnTFuGxWh7dbtGiLj+ZauhzT1sqNsFFpnYCtcCFjKth 170 | szqn4ZVTcaYcblEPicsDyWm4U223Ew/Ayv6V6WQZZLQIiCo5aLl1TeQbnV2nhd6sVfS3+7sZyE6puAm+ 171 | rbYNGxs6eRivX91vcrGm7Ke+3C2P9dHNkz3wmX9MLgwaAGrUW/QFvkUBEu5RtM0bVQIrPdFwcYCAZtsj 172 | rTPd6qkZea4havKnoFyfTjXroVMbmvX5l8j/WmWvlUYM8Q4XTVg9QuKSFNCb9HwW4g33b4UekGD3Nn2+ 173 | 7p0u0/hVHGE5eb+zopOw1Iw57Iod3mUt+zJpWuW1spkCEShqQ1BaJgJ0/iIuZWRFSE+Q0IvebieVsEo7 174 | 73rVt2Sh4LQofUG6zoD+ZveUAz7vw5lPzWv+h8IffjbnmXyA6p7kyjemO8cupOdDP/rChFvzEa/r62P/ 175 | l9rnNHbOdC/qSxTz31elAZZlATu7yVRoAl0afxd+7UXxYxKRd/pTeSkIACY4juF25ycY6XRResFV8qV/ 176 | +1dKt4Io+OEz4SMnJMIt8dE8JMJF9RE5mSSBZLd9OXFTNSUQRFVUqTcQ/zF1EDSFGghwegkBgqb3Eft2 177 | EURle3HDIAqjAP/HgUCEK3VygdpjLOJhWebndEM4E4RWHG3XX5XGcsg3OQtBaAdAg/n3dhSBVmqlZGox 178 | GcFhJm7CFhCAGFgzgaShH6UCaOVRMUWIeN63EoN1V9aWZhVyZE6idMIihT4nAD6XE46lW6v1KFyFFJPh 179 | Go4BgAVSHWK4LijmNT4YJsKDhujXfWnoEq1FYPhlVqPFhPAzbgYTg5tmaZbHZwl2AFWWXusFXdJFFqoV 180 | Vr4GXkDVUtGVdX9jeXanAF6RW27BW0rYbTxSeAcge0UhKmShhT6DJktyiKCxG2V4UaKhITyoiBjBTf89 181 | YV+Wt3b6ZXhy+FdtkVPDpoRUFnAJ8Gyzpma1OFbhCF4eBmIzl1gXB2MXZ3cf1hYhRnECcWIw0mDh6G7Y 182 | NGt2BRdSyBPHcR50QYgfVIBA2Iz1VxBQBF+RiFFraBJPdVJAJoLAhhpGRoWtp2dHR3PyE1hQV1X8CF4F 183 | hJF20xtmNo/ZSGYUgDUyFVgwUpIeCQAsaHkENyRVJiqGUSKjyG5HMXnz4iyNVhejYYGLSBCXRDkdoYA0 184 | QWgDYGgTSQGKZpGW9mwsqJEEI2FLZVv7KAC1llndZmqlISoIQGBeQY5B527yOJNycWmuhjo4WVxLYllE 185 | ARaZN1Ld9xFIGRO9pkb/1Bhsz4EQDRBYBeCLCvGQLodlWClrDyByctJtshZmqKNeA5AgSEhq3iaYkKaJ 186 | TgkX0VYhFRIBHpZcOhlK0/eI8xUSd/kSZ4eWROYpmiY4egYonAh35uhnCUKLr/FkAccimYlj2og6DBJY 187 | kQFxVPZDTmZxM2kkbHlvbeEVivlJzBdRHngR0FgTZ1eWHwZuZlWYBSFsb/FV29haWKMAEeCZaqZ1DlAw 188 | MFZgAsB0Sbd0w1IiKkJWLOJe7tmEVQmSeZWHFFBbAnJiWpdgcMlJxQd8x+cRp8mGSZWER7Z2MRIb3mmR 189 | TNYjS9leWhV1byGfhPcW61giXUcQGXqL9hmZfYF3W4P3FmE1Kz0SoInke7+3kAYFaAXaSq7HgmNGECUo 190 | ETcqEaH3NzT1guClos6pY7nXgb9XcgvISw1pffaJUUe6S0nqRtDJoqTZpK/0pBxlfv9kpVRqVC76fHVZ 191 | mlv/ekta+kMoCCR5pIz7JH+mM37ZEaakNKaP8kMW0CP0x2nTV5CGc56NcoVuSkVwKpQeqkMUUB4K9JwH 192 | tTRw9jB9+qZdCqVIJqjCmFlgeoiAoSONuqhQ8af4ZxCIgS7qkSwAtk+zEkGIoVNEpVIr1VIsZYI+WhAR 193 | sAAqOJUG4YIoJasqEZsIMYO4pKlDKTgYoxfvE6qHChfiIUYlcYRNpYQkdo0z+RbwxXax8YcnwZlQaYWc 194 | AZVcOqXxNqWVGqeAKidUwT2lShJtWEA4p1dKiDrMSiNTJ2MLUVyu1mp9GF/VChdlmYjRIa1+KqS5oWt7 195 | YgAEoBe9U33fCix80hsLcBwC/7CBGzGJ0whsboGd7KFlEmmWuKpHOhlbDEAAmNYAwqVYUsUACKCnivdj 196 | syKKPGJc6VJgl8ZsqOhr3QVU4jabtvmxanZhlJmSuoWL+4p5LUp9SRU2W4Smw4oXoJFFrQmDpXJfFWtv 197 | +3VxzGppEMlfRveoZjmTD3ZgrnaTPwN65BhYaVcXhZecciFvMkmPBIdgo6Yg9vhgK0q0CeqBWVZJRjmp 198 | RuhjEamaiCZtUdusA1Bl21heOnmwLEWxu0kiUZgAGAkaOfWCS1UAHgeYkVtp1HpBMjlkhgtxOPkagbsq 199 | hkqa2xedzme3MqGUTGmJDzdWUBkBqMGRtjo6VytykgZ0Rv93WHhTAAewidi2uw/KtZa7hIc2u5ZXImpZ 200 | ePp6TaKKpTCqvPDGqxWRl/W2mvjZuU2LPYOrk9bGbLVbaStrOQzHu0YXuDKZoumpbNqLkgLxbJuJrW8S 201 | fswLulF6Vc5LEam5l6w5bA9QKycWZBcruLGrk7k5ZXH4YiSINXLxvc0WvvVanIancANXIVuJvj0hfw9w 202 | GWx6JjwCOhbgPwepLBCgkFNqfMk3vxNRnSonsVs2bIFYluJZtf/1v1c7dMOrri+WLubpZwj8wKjDn9fV 203 | GhImw5XGw5SIh9R7eSbaLBKiF5+jIuzRwQUxR2R6rS1qpNQZt2+RdpvBoALhdxWakeH/AsMJw8VB17sC 204 | x8VSMnA5jL54Y6caqngpSXeVtsbpWWBFTBPoU4EfwxgHiDmgmozwRiN64Yjaen5jR8I2MaOR1Ko2FYIW 205 | 0aOvixCch4I1uqNDsYMAoB1AtMeDGkZgmlTOQZFjc6lSjKmey0CMQoZ6nIEYwzwFeBDGgiqhPMjSKcqk 206 | 3BNABBi1ksn1oSKZ1MoFcSVap8RTQstUXMuqsTTHmMdjuJ9W3KtkQ6CyvK3RbMxEMaricSK6LBe3MrA9 207 | 2M2PKsglYcjU7BJAOR3Z/DCE48Sj44gmIc7jzBTqbFERMaRM+s6s5L6yLLovGqPubM9JMZr+KsVWLL/E 208 | 7M/d8bkl/zfIoZulBa0RLoiqKKWqr3eCM1WjCwGCj3wRPTqCQFoRxfWsDfEAMmsQI9iPDiHSqCZPcNu8 209 | ontUAzrNx8pUaKes0psQ2vmEYquvE7cQLqbPEbHTD9FoaljH1gvTIiGlReqlSu2MSZlubvhZ6MpXiJYQ 210 | 1NIQ5VpgDAHULShrjjXSNiHUbLNV13a1FgHW9PqI9HytUREfEwDCpOsuTOIi8vfBxLIsX6gRDltpexmx 211 | mPhfJyZaqwitUelnNjtbPFJbt2WL7sWnMlle57XFQBUBxZWSQLUAzGZSiRWY1LVwIkuyqBgwimfWTTaf 212 | qAOK8JhTgOUWvTgQCACYkFVVrUhdQciGEiSMpuhyPWxjt6DxOdIhNgcrAOVxvFm9tA+Luk/b14HaGyXy 213 | nQMWcFprYelaWW0bmmdZvu4KGiryzKpLu6d2fjf5YZD1VaJ9mSlZQN9orx7mFfr4VLYJGjXmIwwCIxFA 214 | 3eHc0AukSaUSqQVbT7eyGQ9AFuN6ysKB13jbFkFmv3xLhZ5Fxi4smx/jZFAGvsPpidgqk3VmN3i2Mokp 215 | I6AhI/vl4aUiwACQuCJZZT3ivz+0VXq6lB5ZswWUk+6mHiHWaIH1W1Yln/8pMb9xax/qEYvDyiz+4ULG 216 | KhBf8t8cYbrVO9VPyR7qoXWxJq2PZnnCK+EVt5ZUJZOx5mA1vE+N1uUhTrk0DFrFRU3jjVaoaK9ZCXpu 217 | WTQR3Gg9ct6zTdv2LalR8RY+tKkEC8u/wrlEROBQxYn2O71UmNYa+Tilkb1Urr7SZjUkluWy1htg7eXD 218 | 0mgifmFRlXRjPulxm1ZuK2Lm9gDkWQCgSW7s1mjzTcc5g09zntthIt1ThOfeHIh7LjhRskUlfFWBTjbs 219 | 0ThPzlqB3YlrUlsAh9XdXewR3LkyyXGttzLExuzOXukCt1TrKOnEWd4fWZt98WSgwZyVdepBJtS6BdL/ 220 | I6HjnBapfBLFeS4qjJEAlxHgRpMgdfPTSWWdK3dkN005ZLhkNTc1N0t0FKBzDsBzRFzhS5iZfLd1chHp 221 | +b3wwwLt3a1efKenms7SXyWhoPeZi8WxdjLWaRfx2b3FlqPqRg0R8xTf6+csTO3NzQIe5YEXAe5/rqIe 222 | 8yoRZ6egalfEyw2hFyp3WwzHX2V3lUWiBI9jCQB5cFGPXM7wKF7sA1x1CYa7Sj+z543VFDpWDXCiWUfY 223 | T79ffI7jKlHb4qcr3pry1uMWE9Du9cSTwv0Ukbwnn0fJFdGjljkSn7cRiMyquWpZYHl7q87qnEoVdUv2 224 | mwL4lMSwBr0RaMb3I0/y/y5tqIfPEx9Nzvw6nQE9yqT7+KOE1ISe0Jx/35hvSi890NEswlL6+aAvrPBb 225 | hD+L1n1v+t+UvPmchpt/+a6frXS51OPe+rVfFPEcJRKD7rm/+LsPExcsFlQNOm7s+RzINsfSjM4MEv28 226 | yCsF0auaoxTtebo6enuTMP17Ed2/U/Zi0h6B0j8BRugHRmpVgJymHTKv/Eet+7dOHMlaVzU91GTtl2Mr 227 | qEQ9hVNiswABQOADCgUNHkSYUOFChQIEMoQYUeLEiAINFEwgQEAACgsEEIQAQEBBhwAuJhQIoOBDhQEE 228 | OACgYCFLijVR0rSZUycDgQx4DqTwsqeACBR+iizIc//kzQI+fTaQqCDmAwIPeOrUKXDpwQRSAQzQOAAp 229 | VrIGS5ZFm9aiwZAQDKwNuTVkBYUpV6pU+FYg3bp400q0+1fwwZ8FG/QsSECrwaMAoCrtu5UwA4IIFQNw 230 | cHBBUsqGDwh04JNgA58LPitYSjplga2LEcLEfLAq5wcPDhBM4ECqAgdFKVhlYPjpb58ExBbYXBBBAQAF 231 | xPodHB3iWoMpx8Y1CwBCX7w4FVoAwBehd+kHA5dPW5hCAsQULm/l+fmr0bHjm/tEkKB6fYOHBR5AAKr9 232 | RorAKwaeG+ky6wAgwL2vGGBuLNcOYk4B/frySoCuYmJgN/3OcpDBoBaM6UOBmvL/Cj0V7TspMYFkKgi7 233 | gioAwALu7ooIpu1uWtE+6HrM6ScCCJAPARfrU6okASC7yboBLpyQsAWRu2sk2ARc7L0QR0rgQgrECo6C 234 | KO8KjjSnKutpyAgQEAiqCAQyEsTLGiyJToEalOoAksgDcjDqZkzpQhn1Ss7Hu358qwIBaOTv0D4dfTRI 235 | Ep88Ej6knmNOMrOGfOC5yiIS4LmUoFqMpzDFRGrOKguyTdQwx0Q1OAUlRBKAU00dES9V5bzzsuRAjDS6 236 | PxcQCDwYQ5oAAq/EMxRHrhbMjMdIzwt2op/OlG1CyPyD1bJuF0rAtMVKtXXAEBtE1cqhmHu10S9LTIAA 237 | Nmm1//TWcnkVEd8h79zzx2rRoo49AAiaIDwKQkpJgUKb3E+hBAxoUVqbSKT2xn+t5XNLxsYqyV0CBMy1 238 | MtESItJLYgEwcjGYLFwvS37TRTVaXGFGqKRotaSZgpX12zCzkoo62U5d73wT5X4vRnqi86yriemmKV6Q 239 | oYqTTkg9hA48kYHH6kMwIYeairAAKD3+7yUPYb5MgQ5dFhFmqViDrV1NC3oOLNiWmrBoBpYUqKgHsk5J 240 | 6CMb5Ik33TKmmmpqp5Ya8Sb5jJrhxBey2rwFCa8P54Me8Kon33I2KAL5UmLAN9cWEAs1ttFdjPOewFw1 241 | odw6t5V1/haIsLlCf+KNX30paLYgbPkmJ36/H51u3HEf/V1e8uL/bWBILykakoDpEULAt5IWBpeAz22q 242 | nqLoQe4PXfDNf774qSNfnvmZlLf8ePjTp7+iBU+tP3/9y2IcVaj7f9/8DgUdakHAgAaswEUScEAGbmYB 243 | XpmABTiyv2oJ4AA+ccCnKLhBDk7Hcf/LCvMYaMBoNcx4llMABApmEr0sSCgT0IhUItZBGtbQhtUCoHQg 244 | t6AdmRBSdzmJVLbikB7+KQETvGESlf+4RMHk0E/KG9PScEKdghWKiMarwAKQyEQudtGLHnSfDsN4NIkt 245 | LiYI6+GIeniylJTwi2+EIxOd2MQxgs6HZlTACmumnYME4AHgEQj34jhIQu5vjn9xHI0m8L4T7scAARBI 246 | Gq+YmIMIsZCXxCT9DqmWMEISAIJ0lv8sd5HLlHCSYoLAAgxwsutl0pWvnJYAAZYx8CzSYqJ0ZL9+xceC 247 | 0G4C6ENL9KqHvmFKD3jGNIz3GBIujRhJIsJUU6Qi8ACNPOB7WCmm9aJjJvLBMoCxzEsgGdnIskCslWhp 248 | DGgGyK9rbWxuJKEdxqzDGozhjyKwsY4zG/dO/1mHnzpRlTfBCM7/EMZPf9c6CkGEYiui0Mc1TMLeiRxg 249 | QXn6pI0SmVlN5nWAIenmn7FjikYiBEyyBFSg33wU8gBjxjomTT3+CZPmGrO1uW2IUlfrTNVYkoDnNEg1 250 | J1rK4dSmtU6lZACg/ImX4lWQBfykAM50qk9uEqaTLSU3ETqAbxyQuwOAzDgc6lVxlMMAN75yk4iUZcXO 251 | Wi31CCym2gKAfAZAn7lVNTQOAFm3rOafzChmABAil3UI4BCfeIWk8imAAxbgpb995TkpY99+wtRY3KRu 252 | bWIzylBfpJ+0AZZBAotWpk7qRBCGEIrrkyVbe1WkSrlTSRDNDomw5C6HWi44XTII7Ohzqs8J/2xuswKN 253 | fixJgc8UAKT2gZtUKMUmlvmHIJ8LGnGbw1l+rQx4fRst4v6nUopE1ng7bCnS0vmVC8n0Uidy1/Z+o86I 254 | VK49rSJdUsqFEQR4lrYNOADtOCqQv3r2uPEz6oUK55TFRCA0nWsQe1V1sgXARE/ZZZ5312na7SbvoD0Z 255 | mUHMOxJupfdl7YGI1aqqs3XNN6OpO4CSINIABBiWv06Rqh33c1TDyneoZypQcxwAmwSPJaDMOQBzQJlJ 256 | 1J42td+VcLPqV7ls1WopHZubfwjE3gxfjSUPjElRqGzi+frqv8RdWOp8exDT0TZW6y0RiVmGkYwIhLoi 257 | AvLgCoJP454Ul//kXGl46ajnfzE5KZjSGl1zq9eYOKCnX3bogirztoWGST47buzefjI3niSWb0iBTYpD 258 | FabdvGSqc+YvBXJsad3ICzQCGGmuJppqUafko5dkKZ+5u6K1BsvP/WRn5rqVgKMozFw6XQ1eDeI6W+m2 259 | AQjG590SshzrKECfh7somsnTHp6qswGiak4DeP0iHq+Hd92mG3btbMaEEHsCoDwyWWodxwgMKTrxuqaG 260 | P1aQdp8TIe2eN8nczZVo6gTf34veQqJ3TrE8eH8jTCBEFsDACpD0h6hKSFtWOEOIpzTddsa4dJy7wRep 261 | 8E9eIxGzyDk18xVsbus2bcZVjrT62jN/1LH/pEYuYgCNqJGpsJJiRKSCbj7z7+IrBzqRTVKQKubKkyM5 262 | pUNsadBQKuRvS7ePxXsedKpjsuORZEtKdnRKvTgPcY21988nJvaql92LL9Ij021+c3/lXCE0UsAWo94n 263 | lJvd7ly0iCfXmJJd7igABRP5nafmlRQa0Hk9qvvdFX/DtZSyZeFxc64M+KJbVhzAqB07xfK8eM5bfegh 264 | k4qNjJUrgcAQpU1/Wne3+0Gyd971Ao310+CX5CTfmX7Q3HdiiqkfYXopevHGdzHjnRDcKxOW06zm8MlS 265 | 5UGqNa2zJy3jEt+j8UaLRJibr6D3SKJXJzolB7D3v0xqn+4nBJ8p0Scn/MuvxCLXcdaHt1/bW68ihKZE 266 | oXFr6FGWAltWwbhr7dWKS1s/IBk/yxlA5fiPjkKNJzpAG5K+96s9AEOIBGCUzxsgJTsYBnoAJAqACoQA 267 | glg4DRSMl2oP8xoV7WMI2PAN5tsYvHArjNiq//gcZkusGLur/juVUOEvdMmICBmAAKkbsrKy+wgTVEtA 268 | hUgqg1gq4MmvQhMwBkCAw3GACxGd//iWs9Ou1dMz8hAYC1iUVvKOWAsUCvAkRaGR7SiJyeMldNqpEoQr 269 | uUJBhdAcQsOLosmMalObtzGR+0iR3SKjuIkQqIgbUwEueyIRh/Ksw5KoxeqPt/mJB6MYLjGQ//8jpOjT 270 | vNRDCBkZJzxbiwAApLWjpEm6jL8QEiKBk9aSL43QCv6zsjWTMYcSqZiACubiPaDIEzKambPwjwZJAObI 271 | DPYKl3N5n9Q4RQqIM2+BFv34jDCZFy2Lqy6RiuCYl9lqwBqaPqXxDk/6ow+sPDNqkUBqLNRokUl6OlKc 272 | lPKCq5HAFDNDs/QLsQVRAAEZMIsSCS/LFfkqwocoCaeIRmMkHQ0Rxsggo3skvib8PlRpCqwRkYcqF56Y 273 | K0T7omtcqYTQixRir7l7uD/BDl/aQ2V5GTa0FebbsOtyNXB5m5oQkv+bxzMJKBDJRX3EMKfIjJ9CjAL8 274 | NWABFoVgsRTJGhj/I5WxwJWMusIukkj7oUiWaKy+UDtUaZGCqQwCgLZFSsOhRMmMGUnS46c6wSkNakHg 275 | qbGdUcIEKBpncsnmADWViK7Q6Yj1IIDCsMnYSUuHTIgDCLOYeBf8KbP9KxfrgkgsnLqCQghP4oiukxjb 276 | o46SCICIGcUrgg2K2wk+UcimoKlBoy29uYl3Uo9wjIBRm6hSow/D6UPYGABRCTfeeAl6+opYLBP+qjmE 277 | 6LTMYA64AQors7RJ6wjWtKDuAMpyuQxJo0o5mj+jjLjwMACpCDzLM8wzWqHNcAgHgBjwsJFJ8gq5e8wI 278 | uxwU1BwpcYzLREKaEM0EuLZ5gorgAZw69MHh/1mP0ZmKdyEdAcEnl2ush6DJBVy23IkJfXoA+3xIhgyT 279 | ZPvNJSrKgQrMzkkjTpwi67CAk2CjvdiTIrJLlfs3yxAcDesmJRwS8okX4wsdZJrAfhO13FsIfKvQY9Km 280 | iWg35YujAPUgcHmkTXy4iHgYx3y9g8jJGQXOvwTMnAjD4LRRHOxRouRRMJI158PRHzXSSgxSAcVG+SvS 281 | I3XSiExSIY0/+VHRJ7VSGrLEQ6Qw6yTSKr3SLzWkLFw9rNBCKn0/MEVTOHrANb240rq8Jk3TOOW4actS 282 | WotAOcVTAN3RIYVT7vBSFSk+2dg9EvU9DUUIFtOIEV0mj/gIrRJC/Rksjf9wOLIADs6LPdULUi3toOpb 283 | JxFpp1RUiPOzlfDbHNoZGD9UkRqdCPJstsFQ1bIjt7yAgLLyoVm60yXDMPsLCvwrCv0DVYRoLI4qCXdU 284 | CDaaKMjIqPJ4VZ2biqq4CsFYVqqL1T6CjQKtVXW71fwhwS6DqxNkRfVCFajKKYQIRA0jiJm5KhlkFVE5 285 | KuFgAHkJtGGLkJHBL6BqJcczCCuqG3QBjq+iEuWIzefwohHaQNmAILpYoAOyAJ7zi6lpIWt90cw70w1q 286 | KzesFThkxbRxADa5KVgpGoOTktuyLD0ckcLil7T5SNLTistoChDrj+8LkIMAxDZR2c3KFRSJ0ouhmAv/ 287 | KYlksYgWShivC6NTKkyJzdlIKUXW0phUfC3ais+YMB9Yyc6NkcY027jeYhsH4NCBLC79aKwKTScq2cX1 288 | 8MVcERo8iauBBM6L8MSHOLphexiWKM41/CHEIVqMlL2J3dRzREVBW8eaEgtDC5yImFp8/EwCQ4oEqK/c 289 | SZCUpVGamJBu0UHraIB9NNng0Bd7jFZrtMBAIhaoKwjCpAC92CK3awi6xdsl/dM+i0kNGskOmxuYeMhg 290 | hdFQ06ngWMmRQTEVe0uCzJkrDBf5UMWQlEmCnJOWPFocssC4uNvRPdCIMV2Qg1jUm9LkVS33uUoo06k6 291 | e0GjGFft1KeawxWwZDN7/1ydhQAW3bJHDQO/fIWTtKQ34yWaYtxcLLVAp3QIGDkI0fWk6ZEif3EJZBEA 292 | itskTfWiW4vMQIMoSjSIedkbT0G0Y8saS8IVzjSbjxkK2+zdjfqIxlo1s0TGFBMq/UidzqSn3ymcHetD 293 | vPs8xBSYFjki0a0lDCQPoHUXATLgAwavwYWowg2KznG2XyO+xhgAzAmT8FwNQWyj83UYUUG6zolXMlNP 294 | W/GNBFBPBVAollAVVi0A9GThFFrOGNkLAQAPiIkkhAGA65nWscszveW8C/U3D1WICN1QUmUIYRJUFNW9 295 | EuW3fJsIEPXLYomYCgSACUjMBakA6rxU1a3ePs3TRxkuHoihTiWNWAtLHjeG5ExGUiZ1vxzKYU0G/2Wh 296 | 49IdDqNLDOVTFuVLdlM/tV5UdmXiydJb/eRXpmUodeT2ueVa1uX0qdJZ3uVfZj8eNWVgJmY9vWVffqVA 297 | lbdh4j0O/b0QRYCPsOPyGabvYcGyyKZpnozRGI5XvsZhtjNOxTVPBTFWJLGEUdQhtI72fUUyvc6nady2 298 | kRSXm9HpQ2Zvqj+gaLT8K8k4ZBXQwJ00A0CREMBU5dWxq8bbddK6A+eM29a3qhVvdRf58Fpx8l6ulC8X 299 | bI8Mww8pvJB6xYxrXlrvjUKpmEJ6kw/hBZ5ubgChyiqapCed2Y3hQB3++pS7gkpaHbc2zVZ8bkNuvdhQ 300 | Y0X1wBk6pDf2co1IFP+1SeyWOeS+9WDqVOEXCVYb5tiXv4qQkUinweIvlYwJl824dbvncF6tYtywpo1d 301 | 0OBqeulOgq4QarwL8NuQ4LgSRHNque7HaVwVVTmNCwkQ3Aq3MMmoW1Qz+UIOP1a5tRprjBuvmxrJv5Wd 302 | 3PEKYgU2dP41/kTVV3RqvcTd+dhrfrnIYTsAVzHcgFSVZAW6s1psxm7dJrMUDvMnh6GmB9Drgf6q+kjq 303 | 3ezsU2nqyNXtzD7fMcE/dintgDrt7Au6Q2roqru1kWYS7b3jk6SNtvbKD2NrPwTLMSMZ3+bswv5sERGL 304 | hwQeOyxtdHWNktAP1F65OVptlUNgQJvMcKMttRHJlailrcx8EWfEm9/urAypGvimGVzpzYJesKEoNUaL 305 | m4J4NLxaGRWOjcxObtbr6ZW7tevDzm6xjih+Rav5ztzu7o5IHRXD5R77cP+U6rYhNlkkNqw5YgTLDes4 306 | aQhPbTFdXSPtPZbTHotOixNdVT+Gt4WAY4zY2rtj0xov5rwF6yPfs8dpZSWfCAvCIIx2ck4y0yaf8itX 307 | HMidcCzncsZjifbu8jC3X6gR8zK35S038zTXn+VW8zbvIDR38ziX8zmn8zq38zvH8zzXD/M95/M+9/M/ 308 | B/RA75GAAAA7 309 | 310 | 311 | --------------------------------------------------------------------------------