Adding a reference to the following code causes a “Error in hardware” to pop up when deploying. Without this referenced it works just fine. It worked before with this referenced, and no change to the code has been made, any clue why that might happen?
using System;
using Microsoft.SPOT;
using System.Text;
using GHIElectronics.NETMF.System;
namespace DaveDave
{
public class Modem
{
static public string ReadPacket(byte[] data, byte[] dataCrc)
{
UInt16 crc = 0;
char[] chars = new char[data.Length];
for (int i = 0; i < data.Length; i++)
{
crc = (UInt16)(_crc16CcitTable[(crc ^ data[i]) & 0xff] ^ (crc >> 8));
chars[i] = Demodulate(data[i]);
}
if (dataCrc[1] != (byte)(crc & 0xFF) || dataCrc[2] != (byte)((crc >> 8) & 0xFF))
{
throw new ArgumentException("CRC Mismatch");
}
return new String(chars);
}
static public byte[] CreatePacket(string data)
{
int preqNum = 12; //For 300 baud
int packetSize = data.Length + preqNum + 13;
int i = 0, z = 0, offset;
byte[] packet = new byte[packetSize];
char[] chars = data.ToCharArray();
UInt16 crc = 0;
for (; i < preqNum; i++)
{
packet[i] = 0x55;
}
packet[i++] = 0x00;
packet[i++] = 0xAA;
packet[i++] = 0xEC;
packet[i++] = 0x73;
packet[i++] = 0x37;
packet[i++] = (byte)(data.Length);
offset = i;
for (; z < chars.Length; z++)
{
switch (chars[z])
{
case '0':
packet[i] = 0xA6;
break;
case '1':
packet[i] = 0x65;
break;
case '2':
packet[i] = 0x59;
break;
case '3':
packet[i] = 0x56;
break;
case '4':
packet[i] = 0xCC;
break;
case '5':
packet[i] = 0x4D;
break;
case '6':
packet[i] = 0xD4;
break;
case '7':
packet[i] = 0xCD;
break;
case '8':
packet[i] = 0xCE;
break;
case '9':
packet[i] = 0xDC;
break;
case ',':
packet[i] = 0x9A;
break;
case 'A':
packet[i] = 0xEC;
break;
case 'B':
packet[i] = 0x33;
break;
case 'C':
packet[i] = 0x73;
break;
case 'D':
packet[i] = 0x3B;
break;
case 'E':
packet[i] = 0x37;
break;
case 'F':
packet[i] = 0xB3;
break;
case '-':
packet[i] = 0x72;
break;
case '.':
packet[i] = 0x6C;
break;
default:
packet[i] = 0x00;
break;
}
crc = (UInt16)(_crc16CcitTable[(crc ^ packet[i++]) & 0xff] ^ (crc >> 8));
}
packet[i++] = 0x63;
packet[i++] = (byte)(crc & 0xFF);
packet[i++] = (byte)((crc >> 8) & 0xFF);
packet[i++] = 0x00;
packet[i++] = 0x00;
packet[i++] = 0x00;
return packet;
}
private static UInt16[] _crc16CcitTable =
{
0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
};
static private char Demodulate(byte data)
{
switch (data)
{
case 0xA6:
return '0';
case 0x65:
return '1';
case 0x59:
return '2';
case 0x56:
return '3';
case 0xCC:
return '4';
case 0x4D:
return '5';
case 0xD4:
return '6';
case 0xCD:
return '7';
case 0xCE:
return '8';
case 0xDC:
return '9';
case 0xEC:
return 'A';
case 0x33:
return 'B';
case 0x73:
return 'C';
case 0x3B:
return 'D';
case 0x37:
return 'E';
case 0xB3:
return 'F';
case 0x72:
return '-';
case 0x6C:
return '.';
case 0x9A:
return ',';
default:
return 'Z';
}
}
}
}