Hover!( Microchip MGC3130 ) library. Now, it is development version. http://www.hoverlabs.co/#hover https://www.switch-science.com/catalog/2124/

Dependents:   MjHover_Hello

Committer:
matsujirushi
Date:
Sat Apr 04 14:51:27 2015 +0000
Revision:
7:a3b72910732d
Parent:
6:8d68ac1bab97
Added MjHover2 class.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
matsujirushi 3:b03009537d66 1 #include "MjHover.h"
matsujirushi 3:b03009537d66 2 #include <vector>
matsujirushi 3:b03009537d66 3 using namespace std;
matsujirushi 3:b03009537d66 4
matsujirushi 3:b03009537d66 5 namespace matsujirushi {
matsujirushi 3:b03009537d66 6
matsujirushi 3:b03009537d66 7 MjHoverBase::MjHoverBase(I2C* i2c, uint8_t address, DigitalInOut* ts_n, DigitalInOut* reset_n)
matsujirushi 3:b03009537d66 8 {
matsujirushi 3:b03009537d66 9 this->i2c = i2c;
matsujirushi 3:b03009537d66 10 this->address = address & 0xfe;
matsujirushi 3:b03009537d66 11 this->ts_n = ts_n;
matsujirushi 3:b03009537d66 12 this->reset_n = reset_n;
matsujirushi 3:b03009537d66 13 }
matsujirushi 3:b03009537d66 14
matsujirushi 3:b03009537d66 15 void MjHoverBase::Reset()
matsujirushi 3:b03009537d66 16 {
matsujirushi 3:b03009537d66 17 this->ts_n->input();
matsujirushi 3:b03009537d66 18 this->reset_n->output();
matsujirushi 3:b03009537d66 19 this->reset_n->write(0);
matsujirushi 5:bd26aba87b9b 20 wait_us(100);
matsujirushi 3:b03009537d66 21 this->reset_n->input();
matsujirushi 3:b03009537d66 22 }
matsujirushi 3:b03009537d66 23
matsujirushi 3:b03009537d66 24 bool MjHoverBase::WriteMessage(uint8_t id, const uint8_t* payload, uint8_t payloadSize)
matsujirushi 3:b03009537d66 25 {
matsujirushi 3:b03009537d66 26 if (4 + payloadSize > 255)
matsujirushi 3:b03009537d66 27 {
matsujirushi 3:b03009537d66 28 return false;
matsujirushi 3:b03009537d66 29 }
matsujirushi 3:b03009537d66 30
matsujirushi 3:b03009537d66 31 vector<uint8_t> message(4 + payloadSize);
matsujirushi 3:b03009537d66 32 message[0] = 4 + payloadSize; // Msg. Size
matsujirushi 3:b03009537d66 33 message[1] = 0; // Flags
matsujirushi 3:b03009537d66 34 message[2] = 0; // Seq.
matsujirushi 3:b03009537d66 35 message[3] = id; // ID
matsujirushi 3:b03009537d66 36 memcpy(&message[4], payload, payloadSize);
matsujirushi 3:b03009537d66 37
matsujirushi 3:b03009537d66 38 if (this->i2c->write(this->address, (const char*)&message[0], message.size()) != 0)
matsujirushi 3:b03009537d66 39 {
matsujirushi 3:b03009537d66 40 return false;
matsujirushi 3:b03009537d66 41 }
matsujirushi 3:b03009537d66 42
matsujirushi 3:b03009537d66 43 return true;
matsujirushi 3:b03009537d66 44 }
matsujirushi 3:b03009537d66 45
matsujirushi 3:b03009537d66 46 bool MjHoverBase::ReadMessage(uint8_t* id, uint8_t* payload, uint8_t payloadSize, uint8_t* readPayloadSize)
matsujirushi 3:b03009537d66 47 {
matsujirushi 3:b03009537d66 48 if (!this->DataAvailable())
matsujirushi 3:b03009537d66 49 {
matsujirushi 3:b03009537d66 50 return false;
matsujirushi 3:b03009537d66 51 }
matsujirushi 3:b03009537d66 52
matsujirushi 5:bd26aba87b9b 53 this->BeginRead();
matsujirushi 5:bd26aba87b9b 54
matsujirushi 3:b03009537d66 55 this->i2c->start();
matsujirushi 3:b03009537d66 56
matsujirushi 3:b03009537d66 57 this->i2c->write(this->address | 1);
matsujirushi 3:b03009537d66 58
matsujirushi 3:b03009537d66 59 uint8_t messageSize = this->i2c->read(1);
matsujirushi 3:b03009537d66 60 vector<uint8_t> message(messageSize);
matsujirushi 3:b03009537d66 61 message[0] = messageSize;
matsujirushi 3:b03009537d66 62 uint8_t* messagePtr = &message[1];
matsujirushi 3:b03009537d66 63 for (int i = 1; i < messageSize; i++)
matsujirushi 3:b03009537d66 64 {
matsujirushi 3:b03009537d66 65 *messagePtr++ = this->i2c->read(i < messageSize - 1 ? 1 : 0);
matsujirushi 3:b03009537d66 66 }
matsujirushi 3:b03009537d66 67
matsujirushi 3:b03009537d66 68 this->i2c->stop();
matsujirushi 3:b03009537d66 69
matsujirushi 5:bd26aba87b9b 70 this->EndRead();
matsujirushi 5:bd26aba87b9b 71
matsujirushi 3:b03009537d66 72 if (payloadSize + 4 < messageSize)
matsujirushi 3:b03009537d66 73 {
matsujirushi 3:b03009537d66 74 return false;
matsujirushi 3:b03009537d66 75 }
matsujirushi 3:b03009537d66 76
matsujirushi 3:b03009537d66 77 *id = message[3];
matsujirushi 3:b03009537d66 78 memcpy(payload, &message[4], messageSize - 4);
matsujirushi 3:b03009537d66 79 *readPayloadSize = messageSize - 4;
matsujirushi 3:b03009537d66 80
matsujirushi 3:b03009537d66 81 return true;
matsujirushi 3:b03009537d66 82 }
matsujirushi 3:b03009537d66 83
matsujirushi 3:b03009537d66 84 } // namespace matsujirushi