HMC6352 Library

Committer:
richardparker
Date:
Thu Apr 29 19:26:30 2010 +0000
Revision:
2:dc4867624d5a
Parent:
1:1f500fa755c8

        

Who changed what in which revision?

UserRevisionLine numberNew 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 inline void setAddress(int address) { _address = address; }
richardparker 0:78e66010e47b 35
richardparker 0:78e66010e47b 36 // Version.
richardparker 0:78e66010e47b 37 char getVersion();
richardparker 0:78e66010e47b 38 void setVersion(const char version);
richardparker 0:78e66010e47b 39
richardparker 0:78e66010e47b 40 // Time delay.
richardparker 0:78e66010e47b 41 char getTimeDelay();
richardparker 0:78e66010e47b 42 void setTimeDelay(const char delay);
richardparker 0:78e66010e47b 43
richardparker 0:78e66010e47b 44 // Summing.
richardparker 0:78e66010e47b 45 char getSumming();
richardparker 0:78e66010e47b 46 void setSumming(const char samples);
richardparker 0:78e66010e47b 47
richardparker 0:78e66010e47b 48 // Heading.
richardparker 0:78e66010e47b 49 float getHeading();
richardparker 0:78e66010e47b 50
richardparker 0:78e66010e47b 51 // Control
richardparker 0:78e66010e47b 52 void reset();
richardparker 0:78e66010e47b 53
richardparker 0:78e66010e47b 54 void wakeUp();
richardparker 0:78e66010e47b 55 void goToSleep();
richardparker 0:78e66010e47b 56
richardparker 1:1f500fa755c8 57 void startCalibrate();
richardparker 1:1f500fa755c8 58 void endCalibrate();
richardparker 0:78e66010e47b 59 void calibrate(int delay = 20);
richardparker 0:78e66010e47b 60
richardparker 0:78e66010e47b 61 // Get the mode section of tyhe operation byte from RAM.
richardparker 0:78e66010e47b 62 HMC6352::Mode getMode();
richardparker 0:78e66010e47b 63 void setMode(HMC6352::Mode mode);
richardparker 0:78e66010e47b 64
richardparker 0:78e66010e47b 65 // Save the operation byte in ram to eeprom.
richardparker 0:78e66010e47b 66 void saveOperation();
richardparker 0:78e66010e47b 67
richardparker 0:78e66010e47b 68 // Get the current output mode from the RAM register.
richardparker 0:78e66010e47b 69 HMC6352::Output getOutput();
richardparker 0:78e66010e47b 70 void setOutput(HMC6352::Output output);
richardparker 0:78e66010e47b 71
richardparker 1:1f500fa755c8 72 inline float version() const { return 0.1; }
richardparker 1:1f500fa755c8 73
richardparker 0:78e66010e47b 74 private:
richardparker 0:78e66010e47b 75 // Clears the contents of the buffer to 0x0
richardparker 0:78e66010e47b 76 void _clearBuffer();
richardparker 0:78e66010e47b 77
richardparker 0:78e66010e47b 78 // Converts the values in the lower two bytes of the buffer to a heading.
richardparker 0:78e66010e47b 79 float _bufferToHeading();
richardparker 0:78e66010e47b 80
richardparker 0:78e66010e47b 81 // Read or write to memory.
richardparker 0:78e66010e47b 82 void _readFromMemory(const char address, const bool eeprom);
richardparker 0:78e66010e47b 83 void _writeToMemory(const char address, const char data, const bool eeprom);
richardparker 0:78e66010e47b 84
richardparker 0:78e66010e47b 85 // Set up a buffer to read and write data. The maximum amount of data
richardparker 0:78e66010e47b 86 // returned or sent is 3 bytes.
richardparker 0:78e66010e47b 87 char _buffer[3];
richardparker 0:78e66010e47b 88
richardparker 0:78e66010e47b 89 // Set up the i2c communication channel object.
richardparker 0:78e66010e47b 90 I2C _i2c;
richardparker 0:78e66010e47b 91
richardparker 0:78e66010e47b 92 // To hold the address currently being used.
richardparker 0:78e66010e47b 93 int _address;
richardparker 0:78e66010e47b 94
richardparker 0:78e66010e47b 95 };
richardparker 0:78e66010e47b 96
richardparker 0:78e66010e47b 97 #endif