repo time

Dependencies:   mbed MAX14720 MAX30205 USBDevice

Committer:
darienf
Date:
Tue Apr 06 06:41:40 2021 +0000
Revision:
20:6d2af70c92ab
another repo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
darienf 20:6d2af70c92ab 1 /*******************************************************************************
darienf 20:6d2af70c92ab 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All rights Reserved.
darienf 20:6d2af70c92ab 3 *
darienf 20:6d2af70c92ab 4 * This software is protected by copyright laws of the United States and
darienf 20:6d2af70c92ab 5 * of foreign countries. This material may also be protected by patent laws
darienf 20:6d2af70c92ab 6 * and technology transfer regulations of the United States and of foreign
darienf 20:6d2af70c92ab 7 * countries. This software is furnished under a license agreement and/or a
darienf 20:6d2af70c92ab 8 * nondisclosure agreement and may only be used or reproduced in accordance
darienf 20:6d2af70c92ab 9 * with the terms of those agreements. Dissemination of this information to
darienf 20:6d2af70c92ab 10 * any party or parties not specified in the license agreement and/or
darienf 20:6d2af70c92ab 11 * nondisclosure agreement is expressly prohibited.
darienf 20:6d2af70c92ab 12 *
darienf 20:6d2af70c92ab 13 * The above copyright notice and this permission notice shall be included
darienf 20:6d2af70c92ab 14 * in all copies or substantial portions of the Software.
darienf 20:6d2af70c92ab 15 *
darienf 20:6d2af70c92ab 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
darienf 20:6d2af70c92ab 17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
darienf 20:6d2af70c92ab 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
darienf 20:6d2af70c92ab 19 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
darienf 20:6d2af70c92ab 20 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
darienf 20:6d2af70c92ab 21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
darienf 20:6d2af70c92ab 22 * OTHER DEALINGS IN THE SOFTWARE.
darienf 20:6d2af70c92ab 23 *
darienf 20:6d2af70c92ab 24 * Except as contained in this notice, the name of Maxim Integrated
darienf 20:6d2af70c92ab 25 * Products, Inc. shall not be used except as stated in the Maxim Integrated
darienf 20:6d2af70c92ab 26 * Products, Inc. Branding Policy.
darienf 20:6d2af70c92ab 27 *
darienf 20:6d2af70c92ab 28 * The mere transfer of this software does not imply any licenses
darienf 20:6d2af70c92ab 29 * of trade secrets, proprietary technology, copyrights, patents,
darienf 20:6d2af70c92ab 30 * trademarks, maskwork rights, or any other form of intellectual
darienf 20:6d2af70c92ab 31 * property whatsoever. Maxim Integrated Products, Inc. retains all
darienf 20:6d2af70c92ab 32 * ownership rights.
darienf 20:6d2af70c92ab 33 *******************************************************************************
darienf 20:6d2af70c92ab 34 */
darienf 20:6d2af70c92ab 35
darienf 20:6d2af70c92ab 36 using System;
darienf 20:6d2af70c92ab 37 using System.Collections.Generic;
darienf 20:6d2af70c92ab 38 using System.Linq;
darienf 20:6d2af70c92ab 39 using System.Text;
darienf 20:6d2af70c92ab 40 using System.IO.Ports;
darienf 20:6d2af70c92ab 41 using System.Diagnostics;
darienf 20:6d2af70c92ab 42 using RPCSupport.Pipelines;
darienf 20:6d2af70c92ab 43 using System.Threading;
darienf 20:6d2af70c92ab 44 using System.Collections;
darienf 20:6d2af70c92ab 45
darienf 20:6d2af70c92ab 46 using SerialWrap;
darienf 20:6d2af70c92ab 47
darienf 20:6d2af70c92ab 48 namespace RPCSupport
darienf 20:6d2af70c92ab 49 {
darienf 20:6d2af70c92ab 50 public class SerialWrapPipeline : Pipeline {
darienf 20:6d2af70c92ab 51 protected SerialPortIo serialPortIo;
darienf 20:6d2af70c92ab 52 SerialPortConfig serialPortConfig;
darienf 20:6d2af70c92ab 53
darienf 20:6d2af70c92ab 54 public SerialWrapPipeline()
darienf 20:6d2af70c92ab 55 {
darienf 20:6d2af70c92ab 56 //serialPort = new SerialPort();
darienf 20:6d2af70c92ab 57 }
darienf 20:6d2af70c92ab 58
darienf 20:6d2af70c92ab 59 public int ReadTimeout
darienf 20:6d2af70c92ab 60 {
darienf 20:6d2af70c92ab 61 set
darienf 20:6d2af70c92ab 62 {
darienf 20:6d2af70c92ab 63 serialPortIo.ReadTimeout = value;
darienf 20:6d2af70c92ab 64 }
darienf 20:6d2af70c92ab 65 get
darienf 20:6d2af70c92ab 66 {
darienf 20:6d2af70c92ab 67 return serialPortIo.ReadTimeout;
darienf 20:6d2af70c92ab 68 }
darienf 20:6d2af70c92ab 69 }
darienf 20:6d2af70c92ab 70
darienf 20:6d2af70c92ab 71 public override void Connect(String PortName)
darienf 20:6d2af70c92ab 72 {
darienf 20:6d2af70c92ab 73 serialPortConfig = new SerialPortConfig(PortName, 9600, 8, StopBits.One, Parity.None, true, true);
darienf 20:6d2af70c92ab 74
darienf 20:6d2af70c92ab 75 /*
darienf 20:6d2af70c92ab 76 // Set the read/write timeouts
darienf 20:6d2af70c92ab 77 serialPort.ReadTimeout = 90000;
darienf 20:6d2af70c92ab 78 serialPort.WriteTimeout = 90000;
darienf 20:6d2af70c92ab 79
darienf 20:6d2af70c92ab 80 serialPort.PortName = PortName;
darienf 20:6d2af70c92ab 81 serialPort.BaudRate = 9600;
darienf 20:6d2af70c92ab 82
darienf 20:6d2af70c92ab 83 // always the same
darienf 20:6d2af70c92ab 84 serialPort.DataBits = 8;
darienf 20:6d2af70c92ab 85 serialPort.Parity = Parity.None;
darienf 20:6d2af70c92ab 86 serialPort.StopBits = StopBits.One;
darienf 20:6d2af70c92ab 87 serialPort.Handshake = Handshake.None;
darienf 20:6d2af70c92ab 88
darienf 20:6d2af70c92ab 89 serialPort.DtrEnable = true;
darienf 20:6d2af70c92ab 90 serialPort.RtsEnable = true;
darienf 20:6d2af70c92ab 91 */
darienf 20:6d2af70c92ab 92
darienf 20:6d2af70c92ab 93 serialPortIo = new SerialPortIo(serialPortConfig);
darienf 20:6d2af70c92ab 94
darienf 20:6d2af70c92ab 95 serialPortIo.ReadTimeout = 1300;
darienf 20:6d2af70c92ab 96 //Thread.Sleep(10);
darienf 20:6d2af70c92ab 97 //serialPort.Open();
darienf 20:6d2af70c92ab 98
darienf 20:6d2af70c92ab 99 //serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
darienf 20:6d2af70c92ab 100 //serialPort.ErrorReceived += new SerialErrorReceivedEventHandler(serialPort_ErrorReceived);
darienf 20:6d2af70c92ab 101 }
darienf 20:6d2af70c92ab 102
darienf 20:6d2af70c92ab 103 public override void Disconnect()
darienf 20:6d2af70c92ab 104 {
darienf 20:6d2af70c92ab 105 serialPortIo.Dispose();
darienf 20:6d2af70c92ab 106 }
darienf 20:6d2af70c92ab 107
darienf 20:6d2af70c92ab 108 public override bool IsConnected()
darienf 20:6d2af70c92ab 109 {
darienf 20:6d2af70c92ab 110 return serialPortIo.IsOpen;
darienf 20:6d2af70c92ab 111 }
darienf 20:6d2af70c92ab 112
darienf 20:6d2af70c92ab 113 public override String[] ScanAvailablePortNames()
darienf 20:6d2af70c92ab 114 {
darienf 20:6d2af70c92ab 115 return SerialPort.GetPortNames();
darienf 20:6d2af70c92ab 116 }
darienf 20:6d2af70c92ab 117
darienf 20:6d2af70c92ab 118 /*
darienf 20:6d2af70c92ab 119 public override String SendRPC(String Name, String Method, params String[] Args)
darienf 20:6d2af70c92ab 120 {
darienf 20:6d2af70c92ab 121 //write to serial port and receive result
darienf 20:6d2af70c92ab 122 String Response;
darienf 20:6d2af70c92ab 123 String Arguments = "";
darienf 20:6d2af70c92ab 124
darienf 20:6d2af70c92ab 125 if(Args != null)
darienf 20:6d2af70c92ab 126 {
darienf 20:6d2af70c92ab 127 for(int i = 0; i < Args.Length; i++)
darienf 20:6d2af70c92ab 128 {
darienf 20:6d2af70c92ab 129 Arguments = Arguments + " " + Args[i];
darienf 20:6d2af70c92ab 130 }
darienf 20:6d2af70c92ab 131 }
darienf 20:6d2af70c92ab 132
darienf 20:6d2af70c92ab 133 serialPort.DiscardInBuffer();
darienf 20:6d2af70c92ab 134 String sendString = "/" + Name + "/" + Method + Arguments + "\r\n";
darienf 20:6d2af70c92ab 135 String reply = RawRpcCall(sendString);
darienf 20:6d2af70c92ab 136
darienf 20:6d2af70c92ab 137 return reply;
darienf 20:6d2af70c92ab 138 }*/
darienf 20:6d2af70c92ab 139
darienf 20:6d2af70c92ab 140 /*
darienf 20:6d2af70c92ab 141 public override void delete()
darienf 20:6d2af70c92ab 142 {
darienf 20:6d2af70c92ab 143 //Close the serial port
darienf 20:6d2af70c92ab 144 if (serialPort != null) serialPort.Close();
darienf 20:6d2af70c92ab 145 }
darienf 20:6d2af70c92ab 146 */
darienf 20:6d2af70c92ab 147
darienf 20:6d2af70c92ab 148 private void serialPort_DataReceived(object sender, EventArgs e)
darienf 20:6d2af70c92ab 149 {
darienf 20:6d2af70c92ab 150 Debug.Print("Serial Port event");
darienf 20:6d2af70c92ab 151 //String Interrupt = serialPort.ReadLine();
darienf 20:6d2af70c92ab 152 String str = serialPortIo.ReadExisting();
darienf 20:6d2af70c92ab 153 }
darienf 20:6d2af70c92ab 154
darienf 20:6d2af70c92ab 155 private void serialPort_ErrorReceived(object sender, EventArgs e)
darienf 20:6d2af70c92ab 156 {
darienf 20:6d2af70c92ab 157 Debug.Print("Serial Port error");
darienf 20:6d2af70c92ab 158 }
darienf 20:6d2af70c92ab 159
darienf 20:6d2af70c92ab 160 public override string RawRpcCall(string request, bool reply)
darienf 20:6d2af70c92ab 161 {
darienf 20:6d2af70c92ab 162 if (rawRpcRequest != null) rawRpcRequest(request);
darienf 20:6d2af70c92ab 163 //String reply = myHID.RPC_Call(request);
darienf 20:6d2af70c92ab 164 serialPortIo.WriteLine(request);
darienf 20:6d2af70c92ab 165 if (reply == false) return "";
darienf 20:6d2af70c92ab 166
darienf 20:6d2af70c92ab 167 string replyStr;
darienf 20:6d2af70c92ab 168 replyStr = serialPortIo.ReadLine();
darienf 20:6d2af70c92ab 169 if (rawRpcReply != null) rawRpcReply(replyStr);
darienf 20:6d2af70c92ab 170 return replyStr;
darienf 20:6d2af70c92ab 171 }
darienf 20:6d2af70c92ab 172
darienf 20:6d2af70c92ab 173 public override void SendSingleByte(char ch)
darienf 20:6d2af70c92ab 174 {
darienf 20:6d2af70c92ab 175 char[] chArray = new char[1];
darienf 20:6d2af70c92ab 176 chArray[0] = ch;
darienf 20:6d2af70c92ab 177 serialPortIo.Write(chArray, 0, 1);
darienf 20:6d2af70c92ab 178 }
darienf 20:6d2af70c92ab 179 public override string ReadString()
darienf 20:6d2af70c92ab 180 {
darienf 20:6d2af70c92ab 181 return serialPortIo.ReadExisting();
darienf 20:6d2af70c92ab 182 }
darienf 20:6d2af70c92ab 183 public override int Read(char[] buffer, int offset, int count)
darienf 20:6d2af70c92ab 184 {
darienf 20:6d2af70c92ab 185 int val = 0;
darienf 20:6d2af70c92ab 186 try
darienf 20:6d2af70c92ab 187 {
darienf 20:6d2af70c92ab 188 val = serialPortIo.Read(buffer, offset, count);
darienf 20:6d2af70c92ab 189 }
darienf 20:6d2af70c92ab 190 catch (Exception)
darienf 20:6d2af70c92ab 191 {
darienf 20:6d2af70c92ab 192 }
darienf 20:6d2af70c92ab 193 return val;
darienf 20:6d2af70c92ab 194 }
darienf 20:6d2af70c92ab 195 public override void Discard()
darienf 20:6d2af70c92ab 196 {
darienf 20:6d2af70c92ab 197 serialPortIo.DiscardInBuffer();
darienf 20:6d2af70c92ab 198 }
darienf 20:6d2af70c92ab 199
darienf 20:6d2af70c92ab 200 public override string RawRpcCallBinary(string request, bool reply, out bool allOnes)
darienf 20:6d2af70c92ab 201 {
darienf 20:6d2af70c92ab 202 if (rawRpcRequest != null) rawRpcRequest(request);
darienf 20:6d2af70c92ab 203 //String reply = myHID.RPC_Call(request);
darienf 20:6d2af70c92ab 204 serialPortIo.WriteLine(request);
darienf 20:6d2af70c92ab 205 //if (reply == false) return "";
darienf 20:6d2af70c92ab 206
darienf 20:6d2af70c92ab 207 byte[] buffer = new byte[256];
darienf 20:6d2af70c92ab 208 int bytesToRead = 256;
darienf 20:6d2af70c92ab 209 while (bytesToRead != 0)
darienf 20:6d2af70c92ab 210 {
darienf 20:6d2af70c92ab 211 int bytesRead = serialPortIo.Read(buffer, 256 - bytesToRead, bytesToRead);
darienf 20:6d2af70c92ab 212 bytesToRead -= bytesRead;
darienf 20:6d2af70c92ab 213 }
darienf 20:6d2af70c92ab 214 allOnes = true;
darienf 20:6d2af70c92ab 215 for (int i = 0; i < 256; i++)
darienf 20:6d2af70c92ab 216 {
darienf 20:6d2af70c92ab 217 if (buffer[i] != 0xFF) allOnes = false;
darienf 20:6d2af70c92ab 218 }
darienf 20:6d2af70c92ab 219 string replyStr;
darienf 20:6d2af70c92ab 220 StringBuilder sb = new StringBuilder();
darienf 20:6d2af70c92ab 221 for (int i = 0; i < 256; i++)
darienf 20:6d2af70c92ab 222 {
darienf 20:6d2af70c92ab 223 sb.Append((buffer[i]).ToString("X2") + " ");
darienf 20:6d2af70c92ab 224 }
darienf 20:6d2af70c92ab 225 //replyStr = serialPort.ReadLine();
darienf 20:6d2af70c92ab 226 replyStr = sb.ToString().Trim();
darienf 20:6d2af70c92ab 227 String otherStr = serialPortIo.ReadLine();
darienf 20:6d2af70c92ab 228 if (rawRpcReply != null) rawRpcReply(replyStr);
darienf 20:6d2af70c92ab 229 return replyStr;
darienf 20:6d2af70c92ab 230 }
darienf 20:6d2af70c92ab 231 }
darienf 20:6d2af70c92ab 232 }