HMC6352 Library
HMC6352.h@0:78e66010e47b, 2010-02-11 (annotated)
- Committer:
- richardparker
- Date:
- Thu Feb 11 12:18:33 2010 +0000
- Revision:
- 0:78e66010e47b
- Child:
- 1:1f500fa755c8
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
richardparker | 0:78e66010e47b | 1 | // Copyright 2009 Richard Parker |
richardparker | 0:78e66010e47b | 2 | |
richardparker | 0:78e66010e47b | 3 | #ifndef MBED_HMC6352_H |
richardparker | 0:78e66010e47b | 4 | #define MBED_HMC6352_H |
richardparker | 0:78e66010e47b | 5 | |
richardparker | 0:78e66010e47b | 6 | #include "mbed.h" |
richardparker | 0:78e66010e47b | 7 | |
richardparker | 0:78e66010e47b | 8 | class HMC6352 |
richardparker | 0:78e66010e47b | 9 | { |
richardparker | 0:78e66010e47b | 10 | public: |
richardparker | 0:78e66010e47b | 11 | // Enum to make the returned mode more readable. |
richardparker | 0:78e66010e47b | 12 | enum Mode { |
richardparker | 0:78e66010e47b | 13 | Standby = 0x0, |
richardparker | 0:78e66010e47b | 14 | Query = 0x1, |
richardparker | 0:78e66010e47b | 15 | Continuous = 0x2, |
richardparker | 0:78e66010e47b | 16 | None = 0x3 |
richardparker | 0:78e66010e47b | 17 | }; |
richardparker | 0:78e66010e47b | 18 | |
richardparker | 0:78e66010e47b | 19 | // Enum to make the returned output type more readable. |
richardparker | 0:78e66010e47b | 20 | enum Output { |
richardparker | 0:78e66010e47b | 21 | Heading = 0x0, |
richardparker | 0:78e66010e47b | 22 | RawX = 0x1, |
richardparker | 0:78e66010e47b | 23 | RawY = 0x2, |
richardparker | 0:78e66010e47b | 24 | X = 0x3, |
richardparker | 0:78e66010e47b | 25 | Y = 0x4, |
richardparker | 0:78e66010e47b | 26 | Unknown = 0x5 |
richardparker | 0:78e66010e47b | 27 | }; |
richardparker | 0:78e66010e47b | 28 | |
richardparker | 0:78e66010e47b | 29 | HMC6352(PinName sda, PinName scl); |
richardparker | 0:78e66010e47b | 30 | ~HMC6352(); |
richardparker | 0:78e66010e47b | 31 | |
richardparker | 0:78e66010e47b | 32 | // Address. |
richardparker | 0:78e66010e47b | 33 | inline int address() { return _address; } |
richardparker | 0:78e66010e47b | 34 | // TODO set the address in the eeprom. |
richardparker | 0:78e66010e47b | 35 | inline void setAddress(int address) { _address = address; } |
richardparker | 0:78e66010e47b | 36 | |
richardparker | 0:78e66010e47b | 37 | // Version. |
richardparker | 0:78e66010e47b | 38 | char getVersion(); |
richardparker | 0:78e66010e47b | 39 | void setVersion(const char version); |
richardparker | 0:78e66010e47b | 40 | |
richardparker | 0:78e66010e47b | 41 | // Time delay. |
richardparker | 0:78e66010e47b | 42 | char getTimeDelay(); |
richardparker | 0:78e66010e47b | 43 | void setTimeDelay(const char delay); |
richardparker | 0:78e66010e47b | 44 | |
richardparker | 0:78e66010e47b | 45 | // Summing. |
richardparker | 0:78e66010e47b | 46 | char getSumming(); |
richardparker | 0:78e66010e47b | 47 | void setSumming(const char samples); |
richardparker | 0:78e66010e47b | 48 | |
richardparker | 0:78e66010e47b | 49 | // Heading. |
richardparker | 0:78e66010e47b | 50 | float getHeading(); |
richardparker | 0:78e66010e47b | 51 | |
richardparker | 0:78e66010e47b | 52 | // Control |
richardparker | 0:78e66010e47b | 53 | void reset(); |
richardparker | 0:78e66010e47b | 54 | |
richardparker | 0:78e66010e47b | 55 | void wakeUp(); |
richardparker | 0:78e66010e47b | 56 | void goToSleep(); |
richardparker | 0:78e66010e47b | 57 | |
richardparker | 0:78e66010e47b | 58 | void calibrate(int delay = 20); |
richardparker | 0:78e66010e47b | 59 | |
richardparker | 0:78e66010e47b | 60 | // Get the mode section of tyhe operation byte from RAM. |
richardparker | 0:78e66010e47b | 61 | HMC6352::Mode getMode(); |
richardparker | 0:78e66010e47b | 62 | void setMode(HMC6352::Mode mode); |
richardparker | 0:78e66010e47b | 63 | |
richardparker | 0:78e66010e47b | 64 | // Save the operation byte in ram to eeprom. |
richardparker | 0:78e66010e47b | 65 | void saveOperation(); |
richardparker | 0:78e66010e47b | 66 | |
richardparker | 0:78e66010e47b | 67 | // Get the current output mode from the RAM register. |
richardparker | 0:78e66010e47b | 68 | HMC6352::Output getOutput(); |
richardparker | 0:78e66010e47b | 69 | void setOutput(HMC6352::Output output); |
richardparker | 0:78e66010e47b | 70 | |
richardparker | 0:78e66010e47b | 71 | private: |
richardparker | 0:78e66010e47b | 72 | // Clears the contents of the buffer to 0x0 |
richardparker | 0:78e66010e47b | 73 | void _clearBuffer(); |
richardparker | 0:78e66010e47b | 74 | |
richardparker | 0:78e66010e47b | 75 | // Converts the values in the lower two bytes of the buffer to a heading. |
richardparker | 0:78e66010e47b | 76 | float _bufferToHeading(); |
richardparker | 0:78e66010e47b | 77 | |
richardparker | 0:78e66010e47b | 78 | // Read or write to memory. |
richardparker | 0:78e66010e47b | 79 | void _readFromMemory(const char address, const bool eeprom); |
richardparker | 0:78e66010e47b | 80 | void _writeToMemory(const char address, const char data, const bool eeprom); |
richardparker | 0:78e66010e47b | 81 | |
richardparker | 0:78e66010e47b | 82 | // Set up a buffer to read and write data. The maximum amount of data |
richardparker | 0:78e66010e47b | 83 | // returned or sent is 3 bytes. |
richardparker | 0:78e66010e47b | 84 | char _buffer[3]; |
richardparker | 0:78e66010e47b | 85 | |
richardparker | 0:78e66010e47b | 86 | // Set up the i2c communication channel object. |
richardparker | 0:78e66010e47b | 87 | I2C _i2c; |
richardparker | 0:78e66010e47b | 88 | |
richardparker | 0:78e66010e47b | 89 | // To hold the address currently being used. |
richardparker | 0:78e66010e47b | 90 | int _address; |
richardparker | 0:78e66010e47b | 91 | |
richardparker | 0:78e66010e47b | 92 | }; |
richardparker | 0:78e66010e47b | 93 | |
richardparker | 0:78e66010e47b | 94 | #endif |