HMC6352 Library

Committer:
richardparker
Date:
Thu Feb 11 12:18:33 2010 +0000
Revision:
0:78e66010e47b
Child:
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 // 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