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:
Fri Jan 23 22:28:51 2015 +0000
Revision:
1:39249e22e9f5
Parent:
0:96eb8cc345dc
Worked first version

Who changed what in which revision?

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