Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: DS2.h
- Revision:
- 0:32d3cc3791c4
diff -r 000000000000 -r 32d3cc3791c4 DS2.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DS2.h Fri May 20 16:54:39 2011 +0000 @@ -0,0 +1,116 @@ +#ifndef DS2_H +#define DS2_H + +#include "mbed.h" + +#include "Bus.h" + +extern Serial dbg; + +#define DS2_MTU (127) + +static const char DS2_IDENTIFY[] = {0x00}; + +/* +a ds2 packet looks like this: +{0xAA, 0xAA, 0xLL, 0xDD, 0xCC} +or this: +{0xAA, 0xLL, 0xDD, 0xCC} +AA = module address +LL = packet length +DD = data +CC = checksum +there can be either one or two AA module address bytes +there can be 1 or more DD data bytes + +here is an example query packet: +{0x12, 0x04, 0x00, 0x16} (query DME for identification) +the address is a one-byte address of 0x12 (DME) +the packet length is 0x04 bytes +the one byte data payload is 0x00 (identify module) +the xor checksum of the entire packet is 0x16 + +the reply would look like this: +{0x12, 0x10, ... 0x??} (DME responding...) +the one byte address is 0x12 (DME) +the packet length will be 0x10 bytes +the xor checksum 0x?? would depend on the missing data "..." + +the same query packet would look like this with two address bytes: +{0x12, 0x00, 0x05, 0x00, 0x17} + +it seems that some modules want one address byte and some want two +either that or it's an extra length byte we're dealing with +probably it's a length byte, but I'll worry about it when I find out +*/ +class DS2Packet +{ + unsigned short* address; + char* length; + char* data; + char* checksum; + + char* rawdata; + bool has8BitAddr; + + void updateChecksum(); + +public: + DS2Packet(int maxlength); + DS2Packet(int address, const char* data, int length); + ~DS2Packet(); + + void has8BitAddress(bool b); + + bool has8BitAddress() + { + return has8BitAddr; + } + + int getAddress() + { + if(has8BitAddr) + return *address >> 8 & 0xff; + return *address; + } + + int getLength() + { + return *length; + } + + char* getData() + { + return data; + } + + int getChecksum() + { + char* check = rawdata + *length - 1; + return *check; + } + + char* getRawData() + { + return rawdata; + } +}; + +class DS2 +{ + Bus *k; + Bus *l; + +public: + DS2(Bus* KLine, Bus* LLine); + ~DS2(); + int sendPacket(DS2Packet* packet, Bus* bus); + DS2Packet* getPacket(Bus* bus); + DS2Packet* getPacket8(Bus* bus); + bool test(); + void testModule(int address); + void snoop(); + +}; + +#endif //DS2_H \ No newline at end of file