Skip to content
Snippets Groups Projects
Commit 02d71452 authored by jdkruege's avatar jdkruege
Browse files

Added in singleton classes for joystick and MPU utilizing the c++ mraa libraries for SPI

parent cb20aa5a
No related branches found
No related tags found
No related merge requests found
......@@ -15,10 +15,11 @@
<ClCompile Include="Client.cpp" />
<ClCompile Include="Communications.cpp" />
<ClCompile Include="GyroService.cpp" />
<ClCompile Include="Joystick.cpp" />
<ClCompile Include="LSM9DS0.cpp" />
<ClCompile Include="Mailbox.cpp" />
<ClCompile Include="Message.cpp" />
<ClCompile Include="Sensors.cpp" />
<ClCompile Include="MPU9250.cpp" />
<ClCompile Include="Server.cpp" />
<ClCompile Include="Service.cpp" />
<ClCompile Include="Source.cpp" />
......@@ -28,10 +29,11 @@
<ClInclude Include="Client.h" />
<ClInclude Include="Communications.h" />
<ClInclude Include="GyroService.h" />
<ClInclude Include="Joystick.h" />
<ClInclude Include="LSM9DS0.h" />
<ClInclude Include="Mailbox.h" />
<ClInclude Include="Message.h" />
<ClInclude Include="Sensors.h" />
<ClInclude Include="MPU9250.h" />
<ClInclude Include="Server.h" />
<ClInclude Include="Service.h" />
</ItemGroup>
......
......@@ -13,14 +13,29 @@
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
<Filter Include="Header Files\Services">
<UniqueIdentifier>{e6e99e87-3e4b-4002-8042-dc8db2791446}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\Services">
<UniqueIdentifier>{60d091cc-70ba-4381-bc4d-26295ee9b15f}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\Sensors">
<UniqueIdentifier>{cf48bf84-5156-46b9-9ea3-ffec5c87f111}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Sensors">
<UniqueIdentifier>{4d2791d0-51f0-4cbb-bbab-38458f34bd5b}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\MessagePassing">
<UniqueIdentifier>{4353e77a-8ad5-4d30-a098-522e4038cbe4}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\MessagePassing">
<UniqueIdentifier>{c5ed87ab-d126-4b1c-8e28-df19cc53d5a4}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Communications.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Sensors.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Bluetooth.cpp">
<Filter>Source Files</Filter>
</ClCompile>
......@@ -33,29 +48,32 @@
<ClCompile Include="Source.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Message.cpp">
<Filter>Source Files</Filter>
<ClCompile Include="LSM9DS0.cpp">
<Filter>Source Files\Sensors</Filter>
</ClCompile>
<ClCompile Include="Service.cpp">
<Filter>Source Files</Filter>
<ClCompile Include="Joystick.cpp">
<Filter>Source Files\Sensors</Filter>
</ClCompile>
<ClCompile Include="LSM9DS0.cpp">
<Filter>Source Files</Filter>
<ClCompile Include="MPU9250.cpp">
<Filter>Source Files\Sensors</Filter>
</ClCompile>
<ClCompile Include="Service.cpp">
<Filter>Source Files\Services</Filter>
</ClCompile>
<ClCompile Include="GyroService.cpp">
<Filter>Source Files</Filter>
<Filter>Source Files\Services</Filter>
</ClCompile>
<ClCompile Include="Mailbox.cpp">
<Filter>Source Files</Filter>
<Filter>Source Files\MessagePassing</Filter>
</ClCompile>
<ClCompile Include="Message.cpp">
<Filter>Source Files\MessagePassing</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Communications.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Sensors.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Bluetooth.h">
<Filter>Header Files</Filter>
</ClInclude>
......@@ -65,20 +83,26 @@
<ClInclude Include="Client.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Message.h">
<Filter>Header Files</Filter>
<ClInclude Include="LSM9DS0.h">
<Filter>Header Files\Sensors</Filter>
</ClInclude>
<ClInclude Include="Service.h">
<Filter>Header Files</Filter>
<ClInclude Include="Joystick.h">
<Filter>Header Files\Sensors</Filter>
</ClInclude>
<ClInclude Include="LSM9DS0.h">
<Filter>Header Files</Filter>
<ClInclude Include="MPU9250.h">
<Filter>Header Files\Sensors</Filter>
</ClInclude>
<ClInclude Include="GyroService.h">
<Filter>Header Files</Filter>
<Filter>Header Files\Services</Filter>
</ClInclude>
<ClInclude Include="Service.h">
<Filter>Header Files\Services</Filter>
</ClInclude>
<ClInclude Include="Mailbox.h">
<Filter>Header Files</Filter>
<Filter>Header Files\MessagePassing</Filter>
</ClInclude>
<ClInclude Include="Message.h">
<Filter>Header Files\MessagePassing</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
......
#include "Joystick.h"
Joystick* Joystick::myInstance = 0;
#pragma region Creation/Deletion
Joystick* Joystick::instance()
{
if (myInstance == 0)
{
myInstance = new Joystick();
}
return myInstance;
}
Joystick::Joystick()
{
// set up the mraa library
mraa_init();
// set the SPI channels
spi = new Spi(1);
// set the frequency ( 10Mhz )
spi->frequency(10000000);
// set the mode
spi->mode(MRAA_SPI_MODE2);
// ensure MSB is sent first
spi->lsbmode(false);
// set up registers
// set up for conversions!
uint16_t send = NOP | 0x0320; // 2030
spi->write_word(send);
usleep(100000);
send = NOP | 0x0312; // 1203
spi->write_word(send);
}
Joystick::~Joystick() {
delete spi;
}
#pragma endregion
uint16_t* Joystick::read()
{
uint16_t receive[2];
receive[0] = spi->write_word(NOP);
receive[2] = spi->write_word(NOP);
return receive;
}
#pragma once
#include "mraa.hpp"
#include <unistd.h>
#include <stdint.h>
using namespace mraa;
class Joystick
{
public:
static Joystick* instance();
uint16_t* read();
protected:
Joystick();
~Joystick();
private:
static Joystick* myInstance;
uint16_t NOP = 0x0000;
Spi* spi;
};
/*
@author Jonathan Krueger
*/
#include "MPU9250.h"
MPU9250* MPU9250::myInstance = 0;
#pragma region Creation/Deletion
/*
Instance getter for the singleton
Creaates a new instance on first call, future calls just return the created instance
*/
MPU9250* MPU9250::instance()
{
if (myInstance == 0)
{
myInstance = new MPU9250();
}
return myInstance;
}
/**
* Constructor for the LSM9DS0 class.
* Sets up the right SPI channels, frequency, mode, and registers.
*/
MPU9250::MPU9250() {
// set up the mraa library
mraa_init();
// set the SPI channels
spi = new Spi(0);
// set the frequency ( 10Mhz )
spi->frequency(10000000);
// set the mode
spi->mode(MRAA_SPI_MODE1);
// ensure MSB is sent first
spi->lsbmode(false);
// set up registers
// place holder
}
/**
* Deconstructor for the LSM9DS0 class.
* Realeases the SPI channels.
*/
MPU9250::~MPU9250() {
delete spi;
}
#pragma endregion
#pragma region Read/Write
/**
* Read command for the MPU9250
*
* Input : Address to read from
* Returns : Results from chip
*/
uint16_t MPU9250::read(uint8_t address) {
//Set up address line for correct communication
uint16_t datatoSend = address << 8;
return spi->write_word(datatoSend);
}
/**
* Write command for the MPU9250
* WARNING : Writing to a reserved register can cause harm to the device.
* Please read documentation before proceeding.
*
* Input : Address to write to, data to write
*/
void MPU9250::write(uint8_t address, uint8_t data) {
//Set up address line for correct communication
uint16_t datatoSend = address << 8;
// Add in the data we want to write
datatoSend = datatoSend | data;
spi->write_word(datatoSend);
}
#pragma endregion
/*
@author Jonathan Krueger
*/
#pragma once
#include "mraa.hpp"
#include <unistd.h>
#include <stdint.h>
using namespace mraa;
class MPU9250
{
public:
static MPU9250* instance();
uint16_t read(uint8_t address);
void write(uint8_t address, uint8_t data);
protected:
MPU9250();
~MPU9250();
private:
static MPU9250* myInstance;
Spi* spi;
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment