First draft HMC5883 magnetometer sensor using physical quantities, outputting via serial port using std::cout on mbed os 5

magnetometer.h

Committer:
skyscraper
Date:
2020-03-26
Revision:
8:c5dc1ce10722
Parent:
hmc5883.h@ 3:2834be4e10ef
Child:
9:87a7169b4d5c

File content as of revision 8:c5dc1ce10722:

#ifndef SKYSCRAPER_MBED_MAGNETOMETER_H_INCLUDED
#define SKYSCRAPER_MBED_MAGNETOMETER_H_INCLUDED

#include <quan/out/time.hpp>
#include <quan/out/magnetic_flux_density.hpp>
#include <quan/three_d/out/vect.hpp>

QUAN_QUANTITY_LITERAL(magnetic_flux_density,gauss);
QUAN_QUANTITY_LITERAL(magnetic_flux_density,milli_gauss);
QUAN_QUANTITY_LITERAL(magnetic_flux_density,uT);

bool mag_init();
bool mag_start_measurement();
bool mag_data_ready();
bool mag_read(quan::three_d::vect<quan::magnetic_flux_density::uT> & v);

#if 0
//true if the hmc5883 is detected
bool mag_detected();

// only 1,2,4,8 available 
// else returns false and does nothing
bool mag_set_samples_average(int n_samples);

// set data rate specified as a rational
//data rate 0.75 <3,4>, 1.5 <3,2>, 3 <3>,7.5 <15,2>, 15 <15>(Default) 
// , 30 <30>, 75 <75>
//N.B. wont link if other values specified
template <int N, int D=1>
bool mag_set_data_rate();

// set +- range
// sets the nearest greater equal +-range to abs(range_in)
// N.B so wont necessarily set exact range input
// TODO: get_range
// returns false if range is too big
bool mag_set_range(quan::magnetic_flux_density::uT const & range_in);

quan::magnetic_flux_density::uT mag_get_range();

// probably remove and decide how to do this behind the scenes
// in concert with mag_set_data_rate
bool mag_set_continuous_measurement_mode();

// could rename to start single_measurement?
bool mag_set_single_measurement_mode();

bool mag_do_single_measurement(
    quan::three_d::vect<quan::magnetic_flux_density::uT>& result
    );

// TODO prefer mag enable / disable() ?
bool mag_set_idle_mode();

// TODO callback?
bool mag_data_ready();

// TODO ignore this make private
bool mag_data_locked();

bool mag_read(quan::three_d::vect<quan::magnetic_flux_density::uT> & v);

#endif
#endif