C# Hyper Terminal Emulation / Serial Port Adapter read and write Issues

EDN Admin

Well-known member
Joined
Aug 7, 2010
Messages
12,794
Location
In the Machine
Hi,

I am building a sort of Hyper Terminal Adapter (Serial port interface) to work with modems / air cards for sniffing.

I am stuck when i attempt to read the information returned from the serial connection. I cant seem to get it to return anything, although it appears it is sending the command through the port. I saw some other implementations which set and wait for an event, however that seems to be more for an interactive application (an unwanted complexity i would like to avoid) as opposed to my intended use of sending one or two commands and passing the values to a string variable in the parent application.

<b>Here is the Adapter:</b>

<div style="overflow:auto;background-color:white;line-height:100% ! important;font-family:Courier New;font-size:11px <table style="border-width:0px;margin:2px 0px;width:99%;border-collapse:collapse;background-color:rgb(255, 255, 255)" cellpadding=0 cellspacing=0><col style="border-right:1px solid gray;font-family:Courier New;font-size:11px;background-color:rgb(238, 238, 238);padding-right:5px;padding-left:10px;width:5px;color:gray;text-align:right;vertical-align:top <col style="font-family:Courier New;font-size:11px;padding-left:10px;white-space:nowrap <tbody><tr><td><nobr>1</nobr></td><td><font style="font-size:11px </font><font style="color:blue using</font><font style="font-size:11px  System; </font></td></tr><tr><td><nobr>2</nobr></td><td style="background-color:rgb(247, 247, 247) <font style="color:blue using</font><font style="font-size:11px  System.IO.Ports; </font></td></tr><tr><td><nobr>3</nobr></td><td><font style="color:blue using</font><font style="font-size:11px  System.Threading; </font></td></tr><tr><td><nobr>4</nobr></td><td style="background-color:rgb(247, 247, 247) <font style="color:blue using</font><font style="font-size:11px  System.Windows.Forms; </font><font style="color:green // temp use during debug</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>5</nobr></td><td> </td></tr><tr><td><nobr>6</nobr></td><td style="background-color:rgb(247, 247, 247) <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue class</font><font style="font-size:11px  HyperTerminalAdapter { </font></td></tr><tr><td><nobr>7</nobr></td><td> </td></tr><tr><td><nobr>8</nobr></td><td style="background-color:rgb(247, 247, 247)     SerialPort oSerialPort = <font style="color:blue new</font><font style="font-size:11px  SerialPort(); </font></td></tr><tr><td><nobr>9</nobr></td><td> </td></tr><tr><td><nobr>10</nobr></td><td style="background-color:rgb(247, 247, 247)     <font style="color:green // Allow the user to set the appropriate properties.</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>11</nobr></td><td>    <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue int</font><font style="font-size:11px  BaudRate = 9600; </font></td></tr><tr><td><nobr>12</nobr></td><td style="background-color:rgb(247, 247, 247)     <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue int</font><font style="font-size:11px  DataBits = 8; </font></td></tr><tr><td><nobr>13</nobr></td><td>    <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue int</font><font style="font-size:11px  ReadTimeout = 500; </font></td></tr><tr><td><nobr>14</nobr></td><td style="background-color:rgb(247, 247, 247)     <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue int</font><font style="font-size:11px  WriteTimeout = 500; </font></td></tr><tr><td><nobr>15</nobr></td><td>    <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue string</font><font style="font-size:11px  PortName = </font><font style="color:blue "COM4"</font><font style="font-size:11px ; </font></td></tr><tr><td><nobr>16</nobr></td><td style="background-color:rgb(247, 247, 247)     <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue string</font><font style="font-size:11px  Handshake = </font><font style="color:blue ""</font><font style="font-size:11px ; </font></td></tr><tr><td><nobr>17</nobr></td><td>    <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue string</font><font style="font-size:11px  Name = </font><font style="color:blue "user"</font><font style="font-size:11px ; </font></td></tr><tr><td><nobr>18</nobr></td><td style="background-color:rgb(247, 247, 247)     <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue string</font><font style="font-size:11px  DataReceived = </font><font style="color:blue ""</font><font style="font-size:11px ; </font></td></tr><tr><td><nobr>19</nobr></td><td>    <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue string</font><font style="font-size:11px  sParity = </font><font style="color:blue "none"</font><font style="font-size:11px ; </font></td></tr><tr><td><nobr>20</nobr></td><td style="background-color:rgb(247, 247, 247)     <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue int</font><font style="font-size:11px  iStopBits = 1; </font></td></tr><tr><td><nobr>21</nobr></td><td>     </td></tr><tr><td><nobr>22</nobr></td><td style="background-color:rgb(247, 247, 247)  </td></tr><tr><td><nobr>23</nobr></td><td> </td></tr><tr><td><nobr>24</nobr></td><td style="background-color:rgb(247, 247, 247)     <font style="color:blue public</font><font style="font-size:11px  HyperTerminalAdapter() { </font></td></tr><tr><td><nobr>25</nobr></td><td>        <font style="color:blue this</font><font style="font-size:11px .Configure(); </font></td></tr><tr><td><nobr>26</nobr></td><td style="background-color:rgb(247, 247, 247)     } </td></tr><tr><td><nobr>27</nobr></td><td> </td></tr><tr><td><nobr>28</nobr></td><td style="background-color:rgb(247, 247, 247)     <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue void</font><font style="font-size:11px  Configure() { </font></td></tr><tr><td><nobr>29</nobr></td><td>        oSerialPort.PortName = <font style="color:blue this</font><font style="font-size:11px .PortName; </font></td></tr><tr><td><nobr>30</nobr></td><td style="background-color:rgb(247, 247, 247)         oSerialPort.BaudRate = <font style="color:blue this</font><font style="font-size:11px .BaudRate; </font></td></tr><tr><td><nobr>31</nobr></td><td>        oSerialPort.DataBits = <font style="color:blue this</font><font style="font-size:11px .DataBits; </font></td></tr><tr><td><nobr>32</nobr></td><td style="background-color:rgb(247, 247, 247)         oSerialPort.ReadTimeout = <font style="color:blue this</font><font style="font-size:11px .ReadTimeout; </font></td></tr><tr><td><nobr>33</nobr></td><td>        oSerialPort.WriteTimeout = <font style="color:blue this</font><font style="font-size:11px .WriteTimeout; </font></td></tr><tr><td><nobr>34</nobr></td><td style="background-color:rgb(247, 247, 247)  </td></tr><tr><td><nobr>35</nobr></td><td>        oSerialPort.Handshake = System.IO.Ports.Handshake.None; </td></tr><tr><td><nobr>36</nobr></td><td style="background-color:rgb(247, 247, 247)          </td></tr><tr><td><nobr>37</nobr></td><td>        <font style="color:blue if</font><font style="font-size:11px (</font><font style="color:blue this</font><font style="font-size:11px .sParity == </font><font style="color:blue "even"</font><font style="font-size:11px ){ </font></td></tr><tr><td><nobr>38</nobr></td><td style="background-color:rgb(247, 247, 247)             oSerialPort.Parity = Parity.Even; </td></tr><tr><td><nobr>39</nobr></td><td>        }<font style="color:blue else</font><font style="font-size:11px  </font><font style="color:blue if</font><font style="font-size:11px (</font><font style="color:blue this</font><font style="font-size:11px .sParity == </font><font style="color:blue "odd"</font><font style="font-size:11px ){ </font></td></tr><tr><td><nobr>40</nobr></td><td style="background-color:rgb(247, 247, 247)             oSerialPort.Parity = Parity.Odd; </td></tr><tr><td><nobr>41</nobr></td><td>        }<font style="color:blue else</font><font style="font-size:11px  </font><font style="color:blue if</font><font style="font-size:11px (</font><font style="color:blue this</font><font style="font-size:11px .sParity == </font><font style="color:blue "mark"</font><font style="font-size:11px ){ </font></td></tr><tr><td><nobr>42</nobr></td><td style="background-color:rgb(247, 247, 247)             oSerialPort.Parity = Parity.Mark; </td></tr><tr><td><nobr>43</nobr></td><td>        }<font style="color:blue else</font><font style="font-size:11px  </font><font style="color:blue if</font><font style="font-size:11px (</font><font style="color:blue this</font><font style="font-size:11px .sParity == </font><font style="color:blue "space"</font><font style="font-size:11px ){ </font></td></tr><tr><td><nobr>44</nobr></td><td style="background-color:rgb(247, 247, 247)             oSerialPort.Parity = Parity.Space; </td></tr><tr><td><nobr>45</nobr></td><td>        } <font style="color:blue else</font><font style="font-size:11px  { </font></td></tr><tr><td><nobr>46</nobr></td><td style="background-color:rgb(247, 247, 247)             oSerialPort.Parity = Parity.None; </td></tr><tr><td><nobr>47</nobr></td><td>        } </td></tr><tr><td><nobr>48</nobr></td><td style="background-color:rgb(247, 247, 247)  </td></tr><tr><td><nobr>49</nobr></td><td>        <font style="color:blue if</font><font style="font-size:11px (</font><font style="color:blue this</font><font style="font-size:11px .iStopBits == 0){ </font></td></tr><tr><td><nobr>50</nobr></td><td style="background-color:rgb(247, 247, 247)             oSerialPort.StopBits = StopBits.None; </td></tr><tr><td><nobr>51</nobr></td><td>        }<font style="color:blue else</font><font style="font-size:11px  </font><font style="color:blue if</font><font style="font-size:11px (</font><font style="color:blue this</font><font style="font-size:11px .iStopBits == 1.5){ </font></td></tr><tr><td><nobr>52</nobr></td><td style="background-color:rgb(247, 247, 247)             oSerialPort.StopBits = StopBits.OnePointFive; </td></tr><tr><td><nobr>53</nobr></td><td>        }<font style="color:blue else</font><font style="font-size:11px  </font><font style="color:blue if</font><font style="font-size:11px (</font><font style="color:blue this</font><font style="font-size:11px .iStopBits == 2){ </font></td></tr><tr><td><nobr>54</nobr></td><td style="background-color:rgb(247, 247, 247)             oSerialPort.StopBits = StopBits.Two; </td></tr><tr><td><nobr>55</nobr></td><td>        } <font style="color:blue else</font><font style="font-size:11px  { </font></td></tr><tr><td><nobr>56</nobr></td><td style="background-color:rgb(247, 247, 247)             oSerialPort.StopBits = StopBits.One; </td></tr><tr><td><nobr>57</nobr></td><td>        } </td></tr><tr><td><nobr>58</nobr></td><td style="background-color:rgb(247, 247, 247)  </td></tr><tr><td><nobr>59</nobr></td><td>        MessageBox.Show(<font style="color:blue "Configured"</font><font style="font-size:11px ); </font></td></tr><tr><td><nobr>60</nobr></td><td style="background-color:rgb(247, 247, 247)     } </td></tr><tr><td><nobr>61</nobr></td><td> </td></tr><tr><td><nobr>62</nobr></td><td style="background-color:rgb(247, 247, 247)     <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue void</font><font style="font-size:11px  Connect() { </font></td></tr><tr><td><nobr>63</nobr></td><td>        <font style="color:blue try</font><font style="font-size:11px  { </font></td></tr><tr><td><nobr>64</nobr></td><td style="background-color:rgb(247, 247, 247)             <font style="color:blue if</font><font style="font-size:11px  (!oSerialPort.IsOpen) { </font></td></tr><tr><td><nobr>65</nobr></td><td>                oSerialPort.Open(); </td></tr><tr><td><nobr>66</nobr></td><td style="background-color:rgb(247, 247, 247)                 MessageBox.Show(<font style="color:blue "Connected"</font><font style="font-size:11px ); </font></td></tr><tr><td><nobr>67</nobr></td><td>            } <font style="color:green // else already open</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>68</nobr></td><td style="background-color:rgb(247, 247, 247)         } <font style="color:blue catch</font><font style="font-size:11px  (Exception e1) {  </font></td></tr><tr><td><nobr>69</nobr></td><td>                MessageBox.Show(<font style="color:blue "Error: Connection is in use or is not available: nn"</font><font style="font-size:11px  + e1);  </font></td></tr><tr><td><nobr>70</nobr></td><td style="background-color:rgb(247, 247, 247)         } </td></tr><tr><td><nobr>71</nobr></td><td>    } </td></tr><tr><td><nobr>72</nobr></td><td style="background-color:rgb(247, 247, 247)  </td></tr><tr><td><nobr>73</nobr></td><td>    <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue void</font><font style="font-size:11px  Disconnect() { </font></td></tr><tr><td><nobr>74</nobr></td><td style="background-color:rgb(247, 247, 247)         <font style="color:blue try</font><font style="font-size:11px { </font></td></tr><tr><td><nobr>75</nobr></td><td>            <font style="color:blue if</font><font style="font-size:11px  (oSerialPort.IsOpen) { </font></td></tr><tr><td><nobr>76</nobr></td><td style="background-color:rgb(247, 247, 247)                 oSerialPort.Close(); </td></tr><tr><td><nobr>77</nobr></td><td>                MessageBox.Show(<font style="color:blue "Disconnected"</font><font style="font-size:11px ); </font></td></tr><tr><td><nobr>78</nobr></td><td style="background-color:rgb(247, 247, 247)             } <font style="color:green //else not open</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>79</nobr></td><td>        } <font style="color:blue catch</font><font style="font-size:11px  { } </font></td></tr><tr><td><nobr>80</nobr></td><td style="background-color:rgb(247, 247, 247)     } </td></tr><tr><td><nobr>81</nobr></td><td> </td></tr><tr><td><nobr>82</nobr></td><td style="background-color:rgb(247, 247, 247)     <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue void</font><font style="font-size:11px  Write(</font><font style="color:blue string</font><font style="font-size:11px  sData </font><font style="color:green /* string data to write to the port */</font><font style="font-size:11px  ) { </font></td></tr><tr><td><nobr>83</nobr></td><td>        <font style="color:blue if</font><font style="font-size:11px  (oSerialPort.IsOpen) { </font></td></tr><tr><td><nobr>84</nobr></td><td style="background-color:rgb(247, 247, 247)             <font style="color:blue try</font><font style="font-size:11px  { </font></td></tr><tr><td><nobr>85</nobr></td><td>                oSerialPort.WriteLine(sData); </td></tr><tr><td><nobr>86</nobr></td><td style="background-color:rgb(247, 247, 247)                 MessageBox.Show(<font style="color:blue "Command Issued: "</font><font style="font-size:11px  + sData); </font></td></tr><tr><td><nobr>87</nobr></td><td>            } <font style="color:blue catch</font><font style="font-size:11px  { } </font></td></tr><tr><td><nobr>88</nobr></td><td style="background-color:rgb(247, 247, 247)         } </td></tr><tr><td><nobr>89</nobr></td><td>    } </td></tr><tr><td><nobr>90</nobr></td><td style="background-color:rgb(247, 247, 247)  </td></tr><tr><td><nobr>91</nobr></td><td>    <font style="color:blue public</font><font style="font-size:11px  </font><font style="color:blue string</font><font style="font-size:11px  Read() { </font></td></tr><tr><td><nobr>92</nobr></td><td style="background-color:rgb(247, 247, 247)         <font style="color:blue try</font><font style="font-size:11px  { </font></td></tr><tr><td><nobr>93</nobr></td><td>            <font style="color:blue this</font><font style="font-size:11px .DataReceived = oSerialPort.ReadLine().ToString(); </font></td></tr><tr><td><nobr>94</nobr></td><td style="background-color:rgb(247, 247, 247)             MessageBox.Show(<font style="color:blue this</font><font style="font-size:11px .DataReceived); </font></td></tr><tr><td><nobr>95</nobr></td><td>            <font style="color:blue return</font><font style="font-size:11px  (</font><font style="color:blue this</font><font style="font-size:11px .DataReceived); </font></td></tr><tr><td><nobr>96</nobr></td><td style="background-color:rgb(247, 247, 247)         } <font style="color:blue catch</font><font style="font-size:11px  { </font></td></tr><tr><td><nobr>97</nobr></td><td>            <font style="color:blue return</font><font style="font-size:11px  </font><font style="color:blue ""</font><font style="font-size:11px ; </font></td></tr><tr><td><nobr>98</nobr></td><td style="background-color:rgb(247, 247, 247)         } </td></tr><tr><td><nobr>99</nobr></td><td>    } </td></tr><tr><td><nobr>100</nobr></td><td style="background-color:rgb(247, 247, 247)  </td></tr><tr><td><nobr>101</nobr></td><td>} <font style="color:green // exit class</font><font style="font-size:11px  </font></td></tr><tr><td><nobr>102</nobr></td><td style="background-color:rgb(247, 247, 247)  </td></tr></tbody></table>


<b>Here is a simplified snipplet of the intended usage:</b>

<div style="overflow:auto;background-color:white;line-height:100% ! important;font-family:Courier New;font-size:11px <table style="border-width:0px;margin:2px 0px;width:99%;border-collapse:collapse;background-color:rgb(255, 255, 255)" cellpadding=0 cellspacing=0><col style="border-right:1px solid gray;font-family:Courier New;font-size:11px;background-color:rgb(238, 238, 238);padding-right:5px;padding-left:10px;width:5px;color:gray;text-align:right;vertical-align:top <col style="font-family:Courier New;font-size:11px;padding-left:10px;white-space:nowrap <tbody><tr><td><nobr>1</nobr></td><td>
</td></tr><tr><td><nobr>2</nobr></td><td style="background-color:rgb(247, 247, 247)    HyperTerminalAdapter oHyperTerminalAdapter = <font style="color:blue new</font><font style="font-size:11px  HyperTerminalAdapter(); </font></td></tr><tr><td><nobr>3</nobr></td><td>   oHyperTerminalAdapter.Connect(); </td></tr><tr><td><nobr>4</nobr></td><td style="background-color:rgb(247, 247, 247)    oHyperTerminalAdapter.Write(<font style="color:blue "AT"</font><font style="font-size:11px );
</font>   <font style="color:blue string</font><font style="font-size:11px  x</font> = oHyperTerminalAdapter.Read()<font style="font-size:11px ;</font>
</td></tr><tr><td><nobr>5</nobr></td><td>   oHyperTerminalAdapter.Disconnect(); </td></tr><tr><td><nobr>6</nobr></td><td style="background-color:rgb(247, 247, 247)    MessageBox.Show(<font style="color:blue "Result of the command was: "</font><font style="font-size:11px + x);

</font></td></tr></tbody></table> <font style="font-size:11px


</font>



View the full article
 
Back
Top