ardupilot/libraries/AP_HAL_AVR/SPIDevices.h
Gustavo Jose de Sousa a80ae0cde3 AP_HAL_AVR: standardize inclusion of libaries headers
This commit changes the way libraries headers are included in source files:

 - If the header is in the same directory the source belongs to, so the
 notation '#include ""' is used with the path relative to the directory
 containing the source.

 - If the header is outside the directory containing the source, then we use
 the notation '#include <>' with the path relative to libraries folder.

Some of the advantages of such approach:

 - Only one search path for libraries headers.

 - OSs like Windows may have a better lookup time.
2015-08-19 20:42:35 +09:00

125 lines
3.0 KiB
C++

#ifndef __AP_HAL_AVR_SPI_DEVICES_H__
#define __AP_HAL_AVR_SPI_DEVICES_H__
#include <AP_HAL/AP_HAL.h>
#include "AP_HAL_AVR_Namespace.h"
class AP_HAL_AVR::AVRSPI0DeviceDriver : public AP_HAL::SPIDeviceDriver {
public:
AVRSPI0DeviceDriver(
AP_HAL_AVR::AVRDigitalSource *cs_pin,
uint8_t spcr_lowspeed,
uint8_t spcr_highspeed,
uint8_t spsr
) :
_cs_pin(cs_pin),
_spcr_lowspeed(spcr_lowspeed),
_spcr_highspeed(spcr_highspeed),
_spcr(spcr_lowspeed),
_spsr(spsr)
{}
void init();
AP_HAL::Semaphore* get_semaphore();
void transaction(const uint8_t *tx, uint8_t *rx, uint16_t len);
void cs_assert();
void cs_release();
uint8_t transfer(uint8_t data);
void transfer(const uint8_t *data, uint16_t len);
void set_bus_speed(enum bus_speed speed);
private:
void _cs_assert();
void _cs_release();
uint8_t _transfer(uint8_t data);
// used for MPU6k
void _transfer16(const uint8_t *tx, uint8_t *rx);
static AP_HAL_AVR::AVRSemaphore _semaphore;
static bool _force_low_speed;
AP_HAL_AVR::AVRDigitalSource *_cs_pin;
const uint8_t _spcr_lowspeed;
const uint8_t _spcr_highspeed;
uint8_t _spcr;
const uint8_t _spsr;
};
class AP_HAL_AVR::AVRSPI2DeviceDriver : public AP_HAL::SPIDeviceDriver {
public:
AVRSPI2DeviceDriver(
AP_HAL_AVR::AVRDigitalSource *cs_pin,
uint8_t ucsr2c,
uint16_t ubrr2
) :
_cs_pin(cs_pin),
_ucsr2c(ucsr2c),
_ubrr2(ubrr2)
{}
void init();
AP_HAL::Semaphore* get_semaphore();
void transaction(const uint8_t *tx, uint8_t *rx, uint16_t len);
void cs_assert();
void cs_release();
uint8_t transfer(uint8_t data);
void transfer(const uint8_t *data, uint16_t len);
private:
void _cs_assert();
void _cs_release();
uint8_t _transfer(uint8_t data);
// used for APM1 ADC
void _transfer17(const uint8_t *tx, uint8_t *rx);
static AP_HAL_AVR::AVRSemaphore _semaphore;
AP_HAL_AVR::AVRDigitalSource *_cs_pin;
uint8_t _ucsr2c;
uint16_t _ubrr2;
};
class AP_HAL_AVR::AVRSPI3DeviceDriver : public AP_HAL::SPIDeviceDriver {
public:
AVRSPI3DeviceDriver(
AP_HAL_AVR::AVRDigitalSource *cs_pin,
uint8_t ucsr3c,
uint16_t ubrr3
) :
_cs_pin(cs_pin),
_ucsr3c(ucsr3c),
_ubrr3(ubrr3)
{}
void init();
AP_HAL::Semaphore* get_semaphore();
void transaction(const uint8_t *tx, uint8_t *rx, uint16_t len);
void cs_assert();
void cs_release();
uint8_t transfer(uint8_t data);
void transfer(const uint8_t *data, uint16_t len);
private:
void _cs_assert();
void _cs_release();
uint8_t _transfer(uint8_t data);
void _transfer(const uint8_t *data, uint16_t size);
static AP_HAL_AVR::AVRSemaphore _semaphore;
AP_HAL_AVR::AVRDigitalSource *_cs_pin;
uint8_t _ucsr3c;
uint16_t _ubrr3;
};
#endif // __AP_HAL_AVR_SPI_DEVICES_H__