Desktop Station gateway software for mbed

Dependents:   DSGatewayMBED_Nucleo DSGatewayMBED_Nucleo_Step128

This library provides to control DCC and Marklin Motorola 2 locomtoives and turnouts via DCC/MM2 Shield. Please check our wiki site(http://desktopstation.net/wiki/).

Committer:
yaasan
Date:
Sat Jan 17 01:48:50 2015 +0000
Revision:
0:96eb8cc345dc
Child:
1:39249e22e9f5
New version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yaasan 0:96eb8cc345dc 1 #include "DSGatewayMBED.h"
yaasan 0:96eb8cc345dc 2 #include "mbed.h"
yaasan 0:96eb8cc345dc 3
yaasan 0:96eb8cc345dc 4 SPI spiDS(SPI_MOSI, SPI_MISO, SPI_SCK);
yaasan 0:96eb8cc345dc 5 DigitalOut cs(D10);
yaasan 0:96eb8cc345dc 6
yaasan 0:96eb8cc345dc 7 DSGatewayLib::DSGatewayLib()
yaasan 0:96eb8cc345dc 8 {
yaasan 0:96eb8cc345dc 9
yaasan 0:96eb8cc345dc 10 poweron = false;
yaasan 0:96eb8cc345dc 11
yaasan 0:96eb8cc345dc 12 }
yaasan 0:96eb8cc345dc 13
yaasan 0:96eb8cc345dc 14 void DSGatewayLib::begin()
yaasan 0:96eb8cc345dc 15 {
yaasan 0:96eb8cc345dc 16 /* Open SPI */
yaasan 0:96eb8cc345dc 17
yaasan 0:96eb8cc345dc 18 spiDS.format(8, 0);
yaasan 0:96eb8cc345dc 19 spiDS.frequency(1000000);
yaasan 0:96eb8cc345dc 20
yaasan 0:96eb8cc345dc 21 }
yaasan 0:96eb8cc345dc 22
yaasan 0:96eb8cc345dc 23
yaasan 0:96eb8cc345dc 24 DSGatewayLib::~DSGatewayLib()
yaasan 0:96eb8cc345dc 25 {
yaasan 0:96eb8cc345dc 26
yaasan 0:96eb8cc345dc 27 SetPower(false);
yaasan 0:96eb8cc345dc 28
yaasan 0:96eb8cc345dc 29 }
yaasan 0:96eb8cc345dc 30
yaasan 0:96eb8cc345dc 31 bool DSGatewayLib::IsPower()
yaasan 0:96eb8cc345dc 32 {
yaasan 0:96eb8cc345dc 33
yaasan 0:96eb8cc345dc 34 return poweron;
yaasan 0:96eb8cc345dc 35
yaasan 0:96eb8cc345dc 36 }
yaasan 0:96eb8cc345dc 37
yaasan 0:96eb8cc345dc 38
yaasan 0:96eb8cc345dc 39 void DSGatewayLib::clearMessage(unsigned char *inPackets)
yaasan 0:96eb8cc345dc 40 {
yaasan 0:96eb8cc345dc 41 for( int i = 0; i < SIZE_PACKET; i++)
yaasan 0:96eb8cc345dc 42 {
yaasan 0:96eb8cc345dc 43 inPackets[i] = 0;
yaasan 0:96eb8cc345dc 44 }
yaasan 0:96eb8cc345dc 45 }
yaasan 0:96eb8cc345dc 46
yaasan 0:96eb8cc345dc 47 bool DSGatewayLib::sendMessage(unsigned char *inPackets)
yaasan 0:96eb8cc345dc 48 {
yaasan 0:96eb8cc345dc 49 byte aReceived[SIZE_PACKET] = {0,0,0,0,0,0,0,0};
yaasan 0:96eb8cc345dc 50 int i;
yaasan 0:96eb8cc345dc 51
yaasan 0:96eb8cc345dc 52 cs = 0;
yaasan 0:96eb8cc345dc 53
yaasan 0:96eb8cc345dc 54 for( i = 0; i < SIZE_PACKET; i++)
yaasan 0:96eb8cc345dc 55 {
yaasan 0:96eb8cc345dc 56 aReceived[i] = spiDS.write(inPackets[i]);
yaasan 0:96eb8cc345dc 57 wait_us(10);
yaasan 0:96eb8cc345dc 58 }
yaasan 0:96eb8cc345dc 59
yaasan 0:96eb8cc345dc 60 cs = 1;
yaasan 0:96eb8cc345dc 61
yaasan 0:96eb8cc345dc 62
yaasan 0:96eb8cc345dc 63 /* 遅延 */
yaasan 0:96eb8cc345dc 64 wait_ms(30);
yaasan 0:96eb8cc345dc 65
yaasan 0:96eb8cc345dc 66 /* Check for receiving */
yaasan 0:96eb8cc345dc 67 if((aReceived[1] & 0xF0) == CMD_OK)
yaasan 0:96eb8cc345dc 68 {
yaasan 0:96eb8cc345dc 69 return true;
yaasan 0:96eb8cc345dc 70 }
yaasan 0:96eb8cc345dc 71 else if((aReceived[1] & 0xF0) == CMD_WAIT)
yaasan 0:96eb8cc345dc 72 {
yaasan 0:96eb8cc345dc 73 return true;
yaasan 0:96eb8cc345dc 74 }
yaasan 0:96eb8cc345dc 75 else
yaasan 0:96eb8cc345dc 76 {
yaasan 0:96eb8cc345dc 77 return false;
yaasan 0:96eb8cc345dc 78 }
yaasan 0:96eb8cc345dc 79 }
yaasan 0:96eb8cc345dc 80
yaasan 0:96eb8cc345dc 81 bool DSGatewayLib::exchangeMessage(unsigned char *inPackets, word timeout)
yaasan 0:96eb8cc345dc 82 {
yaasan 0:96eb8cc345dc 83 //unsigned char aTemp[SIZE_PACKET];
yaasan 0:96eb8cc345dc 84
yaasan 0:96eb8cc345dc 85 bool aReturnOk = sendMessage(inPackets);
yaasan 0:96eb8cc345dc 86
yaasan 0:96eb8cc345dc 87 /*
yaasan 0:96eb8cc345dc 88 unsigned long aTime = millis();
yaasan 0:96eb8cc345dc 89
yaasan 0:96eb8cc345dc 90 // response;
yaasan 0:96eb8cc345dc 91
yaasan 0:96eb8cc345dc 92 while ((millis() < aTime + timeout) || (!aReturnOk)) {
yaasan 0:96eb8cc345dc 93 aTemp[0] = CMD_WAIT | 0b0010;
yaasan 0:96eb8cc345dc 94 aTemp[1] = aTemp[0];
yaasan 0:96eb8cc345dc 95
yaasan 0:96eb8cc345dc 96 delay(20);
yaasan 0:96eb8cc345dc 97
yaasan 0:96eb8cc345dc 98 if (sendMessage(aTemp) == true) {
yaasan 0:96eb8cc345dc 99 return true;
yaasan 0:96eb8cc345dc 100 }
yaasan 0:96eb8cc345dc 101 }
yaasan 0:96eb8cc345dc 102
yaasan 0:96eb8cc345dc 103 if (DEBUG && !aReturnOk) {
yaasan 0:96eb8cc345dc 104 Serial.println(F("!!! Communication Error(Timeout, Command etc)"));
yaasan 0:96eb8cc345dc 105 }
yaasan 0:96eb8cc345dc 106 */
yaasan 0:96eb8cc345dc 107
yaasan 0:96eb8cc345dc 108 return aReturnOk;
yaasan 0:96eb8cc345dc 109 }
yaasan 0:96eb8cc345dc 110
yaasan 0:96eb8cc345dc 111
yaasan 0:96eb8cc345dc 112 bool DSGatewayLib::SetPower(bool power)
yaasan 0:96eb8cc345dc 113 {
yaasan 0:96eb8cc345dc 114 unsigned char aPacktes[SIZE_PACKET];
yaasan 0:96eb8cc345dc 115
yaasan 0:96eb8cc345dc 116 clearMessage(aPacktes);
yaasan 0:96eb8cc345dc 117
yaasan 0:96eb8cc345dc 118 if (power) {
yaasan 0:96eb8cc345dc 119 aPacktes[0] = CMD_PWR_ON | 0x02;
yaasan 0:96eb8cc345dc 120 aPacktes[1] = aPacktes[0];//CRC
yaasan 0:96eb8cc345dc 121 poweron = true;
yaasan 0:96eb8cc345dc 122
yaasan 0:96eb8cc345dc 123 }
yaasan 0:96eb8cc345dc 124 else
yaasan 0:96eb8cc345dc 125 {
yaasan 0:96eb8cc345dc 126 aPacktes[0] = CMD_PWR_OFF | 0x02;
yaasan 0:96eb8cc345dc 127 aPacktes[1] = aPacktes[0];//CRC
yaasan 0:96eb8cc345dc 128 poweron = false;
yaasan 0:96eb8cc345dc 129 }
yaasan 0:96eb8cc345dc 130
yaasan 0:96eb8cc345dc 131 return exchangeMessage(aPacktes, TIME_REPLY);
yaasan 0:96eb8cc345dc 132 }
yaasan 0:96eb8cc345dc 133
yaasan 0:96eb8cc345dc 134 bool DSGatewayLib::SetPowerEx(bool power)
yaasan 0:96eb8cc345dc 135 {
yaasan 0:96eb8cc345dc 136 unsigned char aPacktes[SIZE_PACKET];
yaasan 0:96eb8cc345dc 137
yaasan 0:96eb8cc345dc 138 clearMessage(aPacktes);
yaasan 0:96eb8cc345dc 139
yaasan 0:96eb8cc345dc 140 if (power) {
yaasan 0:96eb8cc345dc 141 aPacktes[0] = CMD_PWR_ON | 0x03;
yaasan 0:96eb8cc345dc 142 aPacktes[1] = 3;//Extend command (DCC128 and MM2-28step)
yaasan 0:96eb8cc345dc 143 aPacktes[2] = generateCRC(aPacktes, 2);
yaasan 0:96eb8cc345dc 144
yaasan 0:96eb8cc345dc 145 }
yaasan 0:96eb8cc345dc 146 else
yaasan 0:96eb8cc345dc 147 {
yaasan 0:96eb8cc345dc 148 aPacktes[0] = CMD_PWR_OFF | 0x02;
yaasan 0:96eb8cc345dc 149 aPacktes[1] = aPacktes[0];//CRC
yaasan 0:96eb8cc345dc 150 }
yaasan 0:96eb8cc345dc 151
yaasan 0:96eb8cc345dc 152
yaasan 0:96eb8cc345dc 153
yaasan 0:96eb8cc345dc 154 return exchangeMessage(aPacktes, TIME_REPLY);
yaasan 0:96eb8cc345dc 155 }
yaasan 0:96eb8cc345dc 156
yaasan 0:96eb8cc345dc 157 bool DSGatewayLib::SetLocoSpeed(word address, int inSpeed)
yaasan 0:96eb8cc345dc 158 {
yaasan 0:96eb8cc345dc 159 unsigned char aPacktes[SIZE_PACKET];
yaasan 0:96eb8cc345dc 160
yaasan 0:96eb8cc345dc 161 clearMessage(aPacktes);
yaasan 0:96eb8cc345dc 162
yaasan 0:96eb8cc345dc 163 aPacktes[0] = CMD_SPEED | 0x06;
yaasan 0:96eb8cc345dc 164 aPacktes[1] = lowByte(address);
yaasan 0:96eb8cc345dc 165 aPacktes[2] = highByte(address);
yaasan 0:96eb8cc345dc 166 aPacktes[3] = lowByte(inSpeed);
yaasan 0:96eb8cc345dc 167 aPacktes[4] = highByte(inSpeed);
yaasan 0:96eb8cc345dc 168 aPacktes[5] = generateCRC(aPacktes, 5);
yaasan 0:96eb8cc345dc 169
yaasan 0:96eb8cc345dc 170 return exchangeMessage(aPacktes, TIME_REPLY);
yaasan 0:96eb8cc345dc 171 }
yaasan 0:96eb8cc345dc 172
yaasan 0:96eb8cc345dc 173
yaasan 0:96eb8cc345dc 174 bool DSGatewayLib::SetLocoSpeedEx(word address, int inSpeed, int inProtcol)
yaasan 0:96eb8cc345dc 175 {
yaasan 0:96eb8cc345dc 176 unsigned char aPacktes[SIZE_PACKET];
yaasan 0:96eb8cc345dc 177
yaasan 0:96eb8cc345dc 178 clearMessage(aPacktes);
yaasan 0:96eb8cc345dc 179
yaasan 0:96eb8cc345dc 180 aPacktes[0] = CMD_SPEED | 0x07;
yaasan 0:96eb8cc345dc 181 aPacktes[1] = lowByte(address);
yaasan 0:96eb8cc345dc 182 aPacktes[2] = highByte(address);
yaasan 0:96eb8cc345dc 183 aPacktes[3] = lowByte(inSpeed);
yaasan 0:96eb8cc345dc 184 aPacktes[4] = highByte(inSpeed);
yaasan 0:96eb8cc345dc 185 aPacktes[5] = inProtcol;
yaasan 0:96eb8cc345dc 186 aPacktes[6] = generateCRC(aPacktes, 6);
yaasan 0:96eb8cc345dc 187
yaasan 0:96eb8cc345dc 188 return exchangeMessage(aPacktes, TIME_REPLY);
yaasan 0:96eb8cc345dc 189 }
yaasan 0:96eb8cc345dc 190
yaasan 0:96eb8cc345dc 191 bool DSGatewayLib::SetLocoFunction(word address, unsigned char inFunction, unsigned char inPower)
yaasan 0:96eb8cc345dc 192 {
yaasan 0:96eb8cc345dc 193 unsigned char aPacktes[SIZE_PACKET];
yaasan 0:96eb8cc345dc 194
yaasan 0:96eb8cc345dc 195 clearMessage(aPacktes);
yaasan 0:96eb8cc345dc 196
yaasan 0:96eb8cc345dc 197 aPacktes[0] = CMD_FUNCTION | 0x06;
yaasan 0:96eb8cc345dc 198 aPacktes[1] = lowByte(address);
yaasan 0:96eb8cc345dc 199 aPacktes[2] = highByte(address);
yaasan 0:96eb8cc345dc 200 aPacktes[3] = inFunction + 1; //1はじまり
yaasan 0:96eb8cc345dc 201 aPacktes[4] = inPower;
yaasan 0:96eb8cc345dc 202 aPacktes[5] = generateCRC(aPacktes, 5);
yaasan 0:96eb8cc345dc 203
yaasan 0:96eb8cc345dc 204 return exchangeMessage(aPacktes, TIME_REPLY);
yaasan 0:96eb8cc345dc 205 }
yaasan 0:96eb8cc345dc 206
yaasan 0:96eb8cc345dc 207
yaasan 0:96eb8cc345dc 208 bool DSGatewayLib::SetLocoDirection(word address, unsigned char inDirection)
yaasan 0:96eb8cc345dc 209 {
yaasan 0:96eb8cc345dc 210 unsigned char aPacktes[SIZE_PACKET];
yaasan 0:96eb8cc345dc 211
yaasan 0:96eb8cc345dc 212 clearMessage(aPacktes);
yaasan 0:96eb8cc345dc 213
yaasan 0:96eb8cc345dc 214 aPacktes[0] = CMD_DIRECTION | 0x05;
yaasan 0:96eb8cc345dc 215 aPacktes[1] = lowByte(address);
yaasan 0:96eb8cc345dc 216 aPacktes[2] = highByte(address);
yaasan 0:96eb8cc345dc 217 aPacktes[3] = inDirection - 1;// FWD 1->0, REV:2->1
yaasan 0:96eb8cc345dc 218 aPacktes[4] = generateCRC(aPacktes, 4);
yaasan 0:96eb8cc345dc 219
yaasan 0:96eb8cc345dc 220 return exchangeMessage(aPacktes, TIME_REPLY);
yaasan 0:96eb8cc345dc 221 }
yaasan 0:96eb8cc345dc 222
yaasan 0:96eb8cc345dc 223 /*
yaasan 0:96eb8cc345dc 224 bool DSGatewayLib::SetTurnout(word address, bool straight)
yaasan 0:96eb8cc345dc 225 {
yaasan 0:96eb8cc345dc 226 byte aSwitch = straight == true ? (byte)1 : (byte)0;
yaasan 0:96eb8cc345dc 227
yaasan 0:96eb8cc345dc 228 return SetTurnout(address, aSwitch);
yaasan 0:96eb8cc345dc 229 }*/
yaasan 0:96eb8cc345dc 230
yaasan 0:96eb8cc345dc 231 bool DSGatewayLib::SetTurnout(word address, byte inSwitch)
yaasan 0:96eb8cc345dc 232 {
yaasan 0:96eb8cc345dc 233 unsigned char aPacktes[SIZE_PACKET];
yaasan 0:96eb8cc345dc 234
yaasan 0:96eb8cc345dc 235 clearMessage(aPacktes);
yaasan 0:96eb8cc345dc 236
yaasan 0:96eb8cc345dc 237 aPacktes[0] = CMD_ACCESSORY | 0x06;
yaasan 0:96eb8cc345dc 238 aPacktes[1] = lowByte(address);
yaasan 0:96eb8cc345dc 239 aPacktes[2] = highByte(address);
yaasan 0:96eb8cc345dc 240 aPacktes[3] = 0x00; // position
yaasan 0:96eb8cc345dc 241 aPacktes[4] = convertAcc_MMDCC(address, inSwitch);// 0: Straight, 1: diverging from DS 1:straight, 0: diverging
yaasan 0:96eb8cc345dc 242 aPacktes[5] = generateCRC(aPacktes, 5);
yaasan 0:96eb8cc345dc 243
yaasan 0:96eb8cc345dc 244 return exchangeMessage(aPacktes, TIME_REPLY);
yaasan 0:96eb8cc345dc 245 }
yaasan 0:96eb8cc345dc 246
yaasan 0:96eb8cc345dc 247 byte DSGatewayLib::convertAcc_MMDCC(word address, byte inSwitch)
yaasan 0:96eb8cc345dc 248 {
yaasan 0:96eb8cc345dc 249 byte aReturn = inSwitch;
yaasan 0:96eb8cc345dc 250
yaasan 0:96eb8cc345dc 251 switch( GetLocIDProtocol(address >> 8))
yaasan 0:96eb8cc345dc 252 {
yaasan 0:96eb8cc345dc 253 case ADDR_ACC_MM2:
yaasan 0:96eb8cc345dc 254 /* 0:Straight, 1: diverging */
yaasan 0:96eb8cc345dc 255 aReturn = (inSwitch == 0) ? 1 : 0;
yaasan 0:96eb8cc345dc 256 break;
yaasan 0:96eb8cc345dc 257
yaasan 0:96eb8cc345dc 258 case ADDR_ACC_DCC:
yaasan 0:96eb8cc345dc 259 /* 1:Straight, 0: diverging */
yaasan 0:96eb8cc345dc 260 aReturn = inSwitch;
yaasan 0:96eb8cc345dc 261 break;
yaasan 0:96eb8cc345dc 262
yaasan 0:96eb8cc345dc 263 default:
yaasan 0:96eb8cc345dc 264 aReturn = inSwitch;
yaasan 0:96eb8cc345dc 265 break;
yaasan 0:96eb8cc345dc 266 }
yaasan 0:96eb8cc345dc 267
yaasan 0:96eb8cc345dc 268 return aReturn;
yaasan 0:96eb8cc345dc 269
yaasan 0:96eb8cc345dc 270 }
yaasan 0:96eb8cc345dc 271
yaasan 0:96eb8cc345dc 272 word DSGatewayLib::GetLocIDProtocol(byte address)
yaasan 0:96eb8cc345dc 273 {
yaasan 0:96eb8cc345dc 274 if( address < 0x04)
yaasan 0:96eb8cc345dc 275 {
yaasan 0:96eb8cc345dc 276 return ADDR_MM2;
yaasan 0:96eb8cc345dc 277 }
yaasan 0:96eb8cc345dc 278 else if( (address >= 0x30) && (address <= 0x33))
yaasan 0:96eb8cc345dc 279 {
yaasan 0:96eb8cc345dc 280 return ADDR_ACC_MM2;
yaasan 0:96eb8cc345dc 281 }
yaasan 0:96eb8cc345dc 282 else if( (address >= 0x38) && (address <= 0x3F))
yaasan 0:96eb8cc345dc 283 {
yaasan 0:96eb8cc345dc 284 return ADDR_ACC_DCC;
yaasan 0:96eb8cc345dc 285 }
yaasan 0:96eb8cc345dc 286 else if( (address >= 0x40) && (address <= 0x70))
yaasan 0:96eb8cc345dc 287 {
yaasan 0:96eb8cc345dc 288 return ADDR_MFX;
yaasan 0:96eb8cc345dc 289 }
yaasan 0:96eb8cc345dc 290 else if( (address >= 0xC0) && (address <= 0xFF))
yaasan 0:96eb8cc345dc 291 {
yaasan 0:96eb8cc345dc 292 return ADDR_DCC;
yaasan 0:96eb8cc345dc 293 }
yaasan 0:96eb8cc345dc 294 else
yaasan 0:96eb8cc345dc 295 {
yaasan 0:96eb8cc345dc 296 return 0;
yaasan 0:96eb8cc345dc 297 }
yaasan 0:96eb8cc345dc 298 }
yaasan 0:96eb8cc345dc 299
yaasan 0:96eb8cc345dc 300 bool DSGatewayLib::WriteConfig(word address, word number, byte value)
yaasan 0:96eb8cc345dc 301 {
yaasan 0:96eb8cc345dc 302 unsigned char aPacktes[SIZE_PACKET];
yaasan 0:96eb8cc345dc 303
yaasan 0:96eb8cc345dc 304 word aOffsetCVNo;
yaasan 0:96eb8cc345dc 305
yaasan 0:96eb8cc345dc 306 if( address >= ADDR_DCC)
yaasan 0:96eb8cc345dc 307 {
yaasan 0:96eb8cc345dc 308 aOffsetCVNo = number;
yaasan 0:96eb8cc345dc 309 }
yaasan 0:96eb8cc345dc 310 else
yaasan 0:96eb8cc345dc 311 {
yaasan 0:96eb8cc345dc 312 aOffsetCVNo = number | 0x8000;
yaasan 0:96eb8cc345dc 313 }
yaasan 0:96eb8cc345dc 314
yaasan 0:96eb8cc345dc 315 clearMessage(aPacktes);
yaasan 0:96eb8cc345dc 316
yaasan 0:96eb8cc345dc 317 aPacktes[0] = CMD_CVWRITE | 0x05;
yaasan 0:96eb8cc345dc 318 aPacktes[1] = lowByte(aOffsetCVNo);
yaasan 0:96eb8cc345dc 319 aPacktes[2] = highByte(aOffsetCVNo);
yaasan 0:96eb8cc345dc 320 aPacktes[3] = value;
yaasan 0:96eb8cc345dc 321 aPacktes[4] = generateCRC(aPacktes, 4);
yaasan 0:96eb8cc345dc 322
yaasan 0:96eb8cc345dc 323 return exchangeMessage(aPacktes, TIME_REPLY);
yaasan 0:96eb8cc345dc 324 }
yaasan 0:96eb8cc345dc 325
yaasan 0:96eb8cc345dc 326 bool DSGatewayLib::ReadConfig(word address, word number, byte *value)
yaasan 0:96eb8cc345dc 327 {
yaasan 0:96eb8cc345dc 328 unsigned char aPacktes[SIZE_PACKET];
yaasan 0:96eb8cc345dc 329
yaasan 0:96eb8cc345dc 330 clearMessage(aPacktes);
yaasan 0:96eb8cc345dc 331
yaasan 0:96eb8cc345dc 332 aPacktes[0] = CMD_CVREAD || 0x04;
yaasan 0:96eb8cc345dc 333 aPacktes[1] = lowByte(number);
yaasan 0:96eb8cc345dc 334 aPacktes[2] = highByte(number);
yaasan 0:96eb8cc345dc 335 aPacktes[3] = generateCRC(aPacktes, 3);
yaasan 0:96eb8cc345dc 336
yaasan 0:96eb8cc345dc 337 *value = 0;
yaasan 0:96eb8cc345dc 338
yaasan 0:96eb8cc345dc 339 return exchangeMessage(aPacktes, TIME_REPLY);
yaasan 0:96eb8cc345dc 340 }
yaasan 0:96eb8cc345dc 341
yaasan 0:96eb8cc345dc 342
yaasan 0:96eb8cc345dc 343 unsigned char DSGatewayLib::generateCRC(unsigned char *inPackets, unsigned char inLen)
yaasan 0:96eb8cc345dc 344 {
yaasan 0:96eb8cc345dc 345 unsigned char aCRC = inPackets[0];
yaasan 0:96eb8cc345dc 346
yaasan 0:96eb8cc345dc 347 for( int i = 1; i < inLen; i++)
yaasan 0:96eb8cc345dc 348 {
yaasan 0:96eb8cc345dc 349 aCRC = aCRC ^ inPackets[i];
yaasan 0:96eb8cc345dc 350 }
yaasan 0:96eb8cc345dc 351
yaasan 0:96eb8cc345dc 352 return aCRC;
yaasan 0:96eb8cc345dc 353
yaasan 0:96eb8cc345dc 354 }
yaasan 0:96eb8cc345dc 355
yaasan 0:96eb8cc345dc 356 byte lowByte(short int low) {
yaasan 0:96eb8cc345dc 357 byte bytelow = 0;
yaasan 0:96eb8cc345dc 358 bytelow = (low & 0xFF);
yaasan 0:96eb8cc345dc 359 return bytelow;
yaasan 0:96eb8cc345dc 360 }
yaasan 0:96eb8cc345dc 361
yaasan 0:96eb8cc345dc 362 byte highByte(short int high) {
yaasan 0:96eb8cc345dc 363 byte bytehigh = 0;
yaasan 0:96eb8cc345dc 364 bytehigh = ((high >> 8) & 0xFF);
yaasan 0:96eb8cc345dc 365 return bytehigh;
yaasan 0:96eb8cc345dc 366 }