public static void TransmitData(SerialPortHandler handler, string filePath) { // Setting the reference to serial port object port = handler._mainSerialPort; // Pretty important to make reset the sequence number! seq = 1; // Read the data to be transmitted and store it in an array transmitData = FileIO.Read("inputData.txt"); // Open the port if not done already. if (!port.IsOpen) { port.Open(); } try { // First wait for NAK or C symbol from receiver to begin transmission Sym protocolMode = WaitForAny(10); if (protocolMode == Sym.NAK || protocolMode == Sym.C) { Console.WriteLine("Received " + protocolMode.ToString()); // Reset the data byte offset and start transmission offset = 0; Console.WriteLine("transmitData length: " + transmitData.Length); while (offset < transmitData.Length) { Console.WriteLine("offset: " + offset); TransmitPacket(protocolMode); } PortWriteByte((byte)Sym.EOT); Console.WriteLine("EOT transmitted."); if (WaitForSym(Sym.ACK, 10)) { Console.WriteLine("Succesfully sent " + (offset / 128 + 1) + " packets!"); } } } // If there is timeout in the WaitForSym - print out the message catch (TimeoutException e) { Console.Error.WriteLine(e.Message); } }
static void Main(string[] args) { //byte[] data = { 0x07, 0x5B, 0xCD, 0x15 }; ////byte[] data = { 0x01, 0x02 }; //ShiftRegister register = new ShiftRegister(data, true, 0x1021); //ushort output = register.CalcCRC_16(); //Console.WriteLine("Crc output: " + output); //byte[] decodeData = { 0x07, 0x5B, 0xCD, 0x15, (byte)(output >> 8), (byte)output }; //register = new ShiftRegister(decodeData, false, 0x1021); //ushort decode = register.CalcCRC_16(); //Console.WriteLine("Decoded: " + decode); int protocolMode = 0; string[] transmissionModes = { "Send Data", "Receive Data" }; int transmissionMode = SmartConsoleInput.ListSelectIndex(" < > Select transmission mode: ", transmissionModes, ">< Make a selection, then press enter ><"); if (transmissionMode == 1) { string[] protocolModes = { "Xmodem", "CRC-Xmodem" }; protocolMode = SmartConsoleInput.ListSelectIndex(" < > Select protocol mode: ", protocolModes, ">< Make a selection, then press enter ><"); } SerialPortHandler portHandler = SerialPortHandler.InitializeSerialPort(); if (transmissionMode == 0) { XModem.TransmitData(portHandler, "inputData.txt"); } else if (transmissionMode == 1) { XModem.ReceiveData(portHandler, "outputData.txt", protocolMode); } else { throw new Exception("Bad transmission mode selected."); } }
static void Main(string[] args) { SerialPortHandler portHandler = SerialPortHandler.InitializeSerialPort(); serialPort = portHandler._mainSerialPort; serialPort.DtrEnable = true; serialPort.RtsEnable = true; serialPort.Open(); serialPort.DataReceived += DataReceivedHandler; Console.Clear(); Console.SetCursorPosition(lastSendPos, 1); Console.BackgroundColor = ConsoleColor.Cyan; Console.ForegroundColor = ConsoleColor.Black; Console.WriteLine("Data sent:"); Console.SetCursorPosition(lastSendPos, 3); Console.BackgroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Data received:"); DataSender(); }
public static void ReceiveData(SerialPortHandler handler, string filePath, int mode) { Sym protocolMode; if (mode == 0) { protocolMode = Sym.NAK; } else if (mode == 1) { protocolMode = Sym.C; } else { throw new Exception("Bad protocol mode!"); } // Setting the reference to serial port object port = handler._mainSerialPort; // Pretty important to make reset the sequence number! seq = 1; // Read the data to be transmitted and store it in an array receivedData = new Queue <byte>(); // Open the port if not done already. if (!port.IsOpen) { port.Open(); } //Transmission initialization try { InitReceiver(10, 10, protocolMode); //Start receiving packets Sym status; do { status = ReceivePacket(10, protocolMode); if (status != Sym.EOT) { Console.WriteLine("Sent symbol: " + status.ToString()); PortWriteByte((byte)status); } } while (status != Sym.EOT); PortWriteByte((byte)Sym.ACK); //Save data to file using (StreamWriter file = new StreamWriter(filePath)) { char buffer; do { buffer = (char)receivedData.Dequeue(); if (buffer != 0) { file.Write(buffer); } } while (receivedData.Count > 0); } } catch (TimeoutException e) { Console.WriteLine(e.Message); return; } }