mindflex

Dependencies:   mbed Arduino millis

Committer:
harrisonstatham
Date:
Thu Oct 11 18:26:36 2018 +0000
Revision:
1:c8dd92fc8aa8
Parent:
0:6466440bff3a
Added harry;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kbeck8 0:6466440bff3a 1 #ifndef Brain_h
kbeck8 0:6466440bff3a 2 #define Brain_h
kbeck8 0:6466440bff3a 3
kbeck8 0:6466440bff3a 4 #include "mbed.h"
kbeck8 0:6466440bff3a 5
kbeck8 0:6466440bff3a 6 #define MAX_PACKET_LENGTH 32
kbeck8 0:6466440bff3a 7 #define EEG_POWER_BANDS 8
kbeck8 0:6466440bff3a 8
kbeck8 0:6466440bff3a 9 class Brain {
kbeck8 0:6466440bff3a 10 public:
kbeck8 0:6466440bff3a 11 Brain(Stream &_brainStream);
kbeck8 0:6466440bff3a 12
kbeck8 0:6466440bff3a 13 // Run this in the main loop.
kbeck8 0:6466440bff3a 14 boolean update();
kbeck8 0:6466440bff3a 15
kbeck8 0:6466440bff3a 16 // String with most recent error.
kbeck8 0:6466440bff3a 17 char* readErrors();
kbeck8 0:6466440bff3a 18
kbeck8 0:6466440bff3a 19 // Returns comme-delimited string of all available brain data.
kbeck8 0:6466440bff3a 20 // Sequence is as below.
kbeck8 0:6466440bff3a 21 char* readCSV();
kbeck8 0:6466440bff3a 22
kbeck8 0:6466440bff3a 23 // Individual pieces of brain data.
kbeck8 0:6466440bff3a 24 uint8_t readSignalQuality();
kbeck8 0:6466440bff3a 25 uint8_t readAttention();
kbeck8 0:6466440bff3a 26 uint8_t readMeditation();
kbeck8 0:6466440bff3a 27 uint32_t* readPowerArray();
kbeck8 0:6466440bff3a 28 uint32_t readDelta();
kbeck8 0:6466440bff3a 29 uint32_t readTheta();
kbeck8 0:6466440bff3a 30 uint32_t readLowAlpha();
kbeck8 0:6466440bff3a 31 uint32_t readHighAlpha();
kbeck8 0:6466440bff3a 32 uint32_t readLowBeta();
kbeck8 0:6466440bff3a 33 uint32_t readHighBeta();
kbeck8 0:6466440bff3a 34 uint32_t readLowGamma();
kbeck8 0:6466440bff3a 35 uint32_t readMidGamma();
kbeck8 0:6466440bff3a 36
kbeck8 0:6466440bff3a 37 private:
kbeck8 0:6466440bff3a 38 Stream* brainStream;
kbeck8 0:6466440bff3a 39 uint8_t packetData[MAX_PACKET_LENGTH];
kbeck8 0:6466440bff3a 40 boolean inPacket;
kbeck8 0:6466440bff3a 41 uint8_t latestByte;
kbeck8 0:6466440bff3a 42 uint8_t lastByte;
kbeck8 0:6466440bff3a 43 uint8_t packetIndex;
kbeck8 0:6466440bff3a 44 uint8_t packetLength;
kbeck8 0:6466440bff3a 45 uint8_t checksum;
kbeck8 0:6466440bff3a 46 uint8_t checksumAccumulator;
kbeck8 0:6466440bff3a 47 uint8_t eegPowerLength;
kbeck8 0:6466440bff3a 48 boolean hasPower;
kbeck8 0:6466440bff3a 49 void clearPacket();
kbeck8 0:6466440bff3a 50 void clearEegPower();
kbeck8 0:6466440bff3a 51 boolean parsePacket();
kbeck8 0:6466440bff3a 52
kbeck8 0:6466440bff3a 53 void printPacket();
kbeck8 0:6466440bff3a 54 void init();
kbeck8 0:6466440bff3a 55 void printCSV(); // maybe should be public?
kbeck8 0:6466440bff3a 56 void printDebug();
kbeck8 0:6466440bff3a 57
kbeck8 0:6466440bff3a 58 // With current hardware, at most we would have...
kbeck8 0:6466440bff3a 59 // 3 x 3 char uint8_t
kbeck8 0:6466440bff3a 60 // 8 x 10 char uint32_t
kbeck8 0:6466440bff3a 61 // 10 x 1 char commas
kbeck8 0:6466440bff3a 62 // 1 x 1 char 0 (string termination)
kbeck8 0:6466440bff3a 63 // -------------------------
kbeck8 0:6466440bff3a 64 // 100 characters
kbeck8 0:6466440bff3a 65 char csvBuffer[100];
kbeck8 0:6466440bff3a 66
kbeck8 0:6466440bff3a 67 // Longest error is
kbeck8 0:6466440bff3a 68 // 22 x 1 char uint8_ts
kbeck8 0:6466440bff3a 69 // 1 x 1 char 0 (string termination)
kbeck8 0:6466440bff3a 70 char latestError[23];
kbeck8 0:6466440bff3a 71
kbeck8 0:6466440bff3a 72 uint8_t signalQuality;
kbeck8 0:6466440bff3a 73 uint8_t attention;
kbeck8 0:6466440bff3a 74 uint8_t meditation;
kbeck8 0:6466440bff3a 75
kbeck8 0:6466440bff3a 76 boolean freshPacket;
kbeck8 0:6466440bff3a 77
kbeck8 0:6466440bff3a 78 // Lighter to just make this public, instead of using the getter?
kbeck8 0:6466440bff3a 79 uint32_t eegPower[EEG_POWER_BANDS];
kbeck8 0:6466440bff3a 80 };
kbeck8 0:6466440bff3a 81
kbeck8 0:6466440bff3a 82 #endif