Dependencies:   mbed

Committer:
akpc806a
Date:
Sun Jan 22 04:10:11 2017 +0000
Revision:
1:4683702d7ad8
OpenBCI 32bit board variation with STM32L476 mircocontroller and mbed support. Version V2 of firmware, forked from the same official version for the PIC32 board.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
akpc806a 1:4683702d7ad8 1 //
akpc806a 1:4683702d7ad8 2 // Definitions_32.h
akpc806a 1:4683702d7ad8 3 //
akpc806a 1:4683702d7ad8 4 //
akpc806a 1:4683702d7ad8 5 // Created by Conor Russomanno, Luke Travis, and Joel Murphy. Summer 2013.
akpc806a 1:4683702d7ad8 6 // Modified by Joel Murphy, Summer 2014
akpc806a 1:4683702d7ad8 7 // Joel Added Daisy Functionality Fall 2014
akpc806a 1:4683702d7ad8 8 //
akpc806a 1:4683702d7ad8 9
akpc806a 1:4683702d7ad8 10 #ifndef _____OpenBCI_32bit_Library_Definitions_h
akpc806a 1:4683702d7ad8 11 #define _____OpenBCI_32bit_Library_Definitions_h
akpc806a 1:4683702d7ad8 12
akpc806a 1:4683702d7ad8 13 // The default baud rate
akpc806a 1:4683702d7ad8 14 #define OPENBCI_BAUD_RATE 115200
akpc806a 1:4683702d7ad8 15
akpc806a 1:4683702d7ad8 16 // File transmissions
akpc806a 1:4683702d7ad8 17 #define OPENBCI_BOP 'A' // Begining of stream packet
akpc806a 1:4683702d7ad8 18 #define OPENBCI_EOP_STND_ACCEL 0xC0 // End of standard stream packet
akpc806a 1:4683702d7ad8 19 #define OPENBCI_EOP_STND_RAW_AUX 0xC1 // End of stream packet with raw packet
akpc806a 1:4683702d7ad8 20 #define OPENBCI_EOP_USER_DEFINED 0xC2 // End of stream packet, user defined
akpc806a 1:4683702d7ad8 21 #define OPENBCI_EOP_ACCEL_TIME_SET 0xC3 // End of time sync up with accel stream packet
akpc806a 1:4683702d7ad8 22 #define OPENBCI_EOP_ACCEL_TIME_SYNCED 0xC4 // End of time synced stream packet
akpc806a 1:4683702d7ad8 23 #define OPENBCI_EOP_RAW_AUX_TIME_SET 0xC5 // End of time sync up stream packet
akpc806a 1:4683702d7ad8 24 #define OPENBCI_EOP_RAW_AUX_TIME_SYNCED 0xC6 // End of time synced stream packet
akpc806a 1:4683702d7ad8 25
akpc806a 1:4683702d7ad8 26 //PIN CONNECTIONS
akpc806a 1:4683702d7ad8 27 /*
akpc806a 1:4683702d7ad8 28 // MBED: pin definitions are in PlatformDefs.h
akpc806a 1:4683702d7ad8 29 #define ADS_DRDY 9 // ADS data ready pin
akpc806a 1:4683702d7ad8 30 #define ADS_RST 4 // ADS reset pin
akpc806a 1:4683702d7ad8 31 #define BOARD_ADS 8 // ADS chip select
akpc806a 1:4683702d7ad8 32 #define DAISY_ADS 3 // ADS Daisy chip select
akpc806a 1:4683702d7ad8 33 #define BOTH_ADS 5 // Slave Select Both ADS chips
akpc806a 1:4683702d7ad8 34 #define SD_SS 2 // SD card chip select
akpc806a 1:4683702d7ad8 35 #define LIS3DH_SS 1 // LIS3DH chip select
akpc806a 1:4683702d7ad8 36 #define LIS3DH_DRDY 0 // LIS3DH data ready pin
akpc806a 1:4683702d7ad8 37 #define OPENBCI_PIN_LED 11
akpc806a 1:4683702d7ad8 38 #define OPENBCI_PIN_PGC 12
akpc806a 1:4683702d7ad8 39 */
akpc806a 1:4683702d7ad8 40 #define BOTH_ADS 5 // Slave Select Both ADS chips
akpc806a 1:4683702d7ad8 41
akpc806a 1:4683702d7ad8 42 //ADS1299 SPI Command Definition Byte Assignments
akpc806a 1:4683702d7ad8 43 #define _WAKEUP 0x02 // Wake-up from standby mode
akpc806a 1:4683702d7ad8 44 #define _STANDBY 0x04 // Enter Standby mode
akpc806a 1:4683702d7ad8 45 #define _RESET 0x06 // Reset the device registers to default
akpc806a 1:4683702d7ad8 46 #define _START 0x08 // Start and restart (synchronize) conversions
akpc806a 1:4683702d7ad8 47 #define _STOP 0x0A // Stop conversion
akpc806a 1:4683702d7ad8 48 #define _RDATAC 0x10 // Enable Read Data Continuous mode (default mode at power-up)
akpc806a 1:4683702d7ad8 49 #define _SDATAC 0x11 // Stop Read Data Continuous mode
akpc806a 1:4683702d7ad8 50 #define _RDATA 0x12 // Read data by command supports multiple read back
akpc806a 1:4683702d7ad8 51
akpc806a 1:4683702d7ad8 52 //ASD1299 Register Addresses
akpc806a 1:4683702d7ad8 53 #define ADS_ID 0x3E // product ID for ADS1299
akpc806a 1:4683702d7ad8 54 #define ID_REG 0x00 // this register contains ADS_ID
akpc806a 1:4683702d7ad8 55 #define CONFIG1 0x01
akpc806a 1:4683702d7ad8 56 #define CONFIG2 0x02
akpc806a 1:4683702d7ad8 57 #define CONFIG3 0x03
akpc806a 1:4683702d7ad8 58 #define LOFF 0x04
akpc806a 1:4683702d7ad8 59 #define CH1SET 0x05
akpc806a 1:4683702d7ad8 60 #define CH2SET 0x06
akpc806a 1:4683702d7ad8 61 #define CH3SET 0x07
akpc806a 1:4683702d7ad8 62 #define CH4SET 0x08
akpc806a 1:4683702d7ad8 63 #define CH5SET 0x09
akpc806a 1:4683702d7ad8 64 #define CH6SET 0x0A
akpc806a 1:4683702d7ad8 65 #define CH7SET 0x0B
akpc806a 1:4683702d7ad8 66 #define CH8SET 0x0C
akpc806a 1:4683702d7ad8 67 #define BIAS_SENSP 0x0D
akpc806a 1:4683702d7ad8 68 #define BIAS_SENSN 0x0E
akpc806a 1:4683702d7ad8 69 #define LOFF_SENSP 0x0F
akpc806a 1:4683702d7ad8 70 #define LOFF_SENSN 0x10
akpc806a 1:4683702d7ad8 71 #define LOFF_FLIP 0x11
akpc806a 1:4683702d7ad8 72 #define LOFF_STATP 0x12
akpc806a 1:4683702d7ad8 73 #define LOFF_STATN 0x13
akpc806a 1:4683702d7ad8 74 //#define GPIO 0x14 // MBED: interfere with STM32 library
akpc806a 1:4683702d7ad8 75 static const int GPIO = 0x14;
akpc806a 1:4683702d7ad8 76 #define MISC1 0x15
akpc806a 1:4683702d7ad8 77 #define MISC2 0x16
akpc806a 1:4683702d7ad8 78 #define CONFIG4 0x17
akpc806a 1:4683702d7ad8 79
akpc806a 1:4683702d7ad8 80 #define OUTPUT_NOTHING (0) // quiet
akpc806a 1:4683702d7ad8 81 #define OUTPUT_8_CHAN (1) // not using Daisy module
akpc806a 1:4683702d7ad8 82 #define OUTPUT_16_CHAN (2) // using Daisy module
akpc806a 1:4683702d7ad8 83 #define ON_BOARD (BOARD_ADS) // slave address for on board ADS
akpc806a 1:4683702d7ad8 84 #define ON_DAISY (DAISY_ADS) // slave address for daisy ADS
akpc806a 1:4683702d7ad8 85 // CHANNEL SETTINGS
akpc806a 1:4683702d7ad8 86 #define POWER_DOWN (0)
akpc806a 1:4683702d7ad8 87 #define GAIN_SET (1)
akpc806a 1:4683702d7ad8 88 #define INPUT_TYPE_SET (2)
akpc806a 1:4683702d7ad8 89 #define BIAS_SET (3)
akpc806a 1:4683702d7ad8 90 #define SRB2_SET (4)
akpc806a 1:4683702d7ad8 91 #define SRB1_SET (5)
akpc806a 1:4683702d7ad8 92 #define YES (0x01)
akpc806a 1:4683702d7ad8 93 #define NO (0x00)
akpc806a 1:4683702d7ad8 94
akpc806a 1:4683702d7ad8 95 //gainCode choices
akpc806a 1:4683702d7ad8 96 #define ADS_GAIN01 (0b00000000) // 0x00
akpc806a 1:4683702d7ad8 97 #define ADS_GAIN02 (0b00010000) // 0x10
akpc806a 1:4683702d7ad8 98 #define ADS_GAIN04 (0b00100000) // 0x20
akpc806a 1:4683702d7ad8 99 #define ADS_GAIN06 (0b00110000) // 0x30
akpc806a 1:4683702d7ad8 100 #define ADS_GAIN08 (0b01000000) // 0x40
akpc806a 1:4683702d7ad8 101 #define ADS_GAIN12 (0b01010000) // 0x50
akpc806a 1:4683702d7ad8 102 #define ADS_GAIN24 (0b01100000) // 0x60
akpc806a 1:4683702d7ad8 103
akpc806a 1:4683702d7ad8 104 //inputType choices
akpc806a 1:4683702d7ad8 105 #define ADSINPUT_NORMAL (0b00000000)
akpc806a 1:4683702d7ad8 106 #define ADSINPUT_SHORTED (0b00000001)
akpc806a 1:4683702d7ad8 107 #define ADSINPUT_BIAS_MEAS (0b00000010)
akpc806a 1:4683702d7ad8 108 #define ADSINPUT_MVDD (0b00000011)
akpc806a 1:4683702d7ad8 109 #define ADSINPUT_TEMP (0b00000100)
akpc806a 1:4683702d7ad8 110 #define ADSINPUT_TESTSIG (0b00000101)
akpc806a 1:4683702d7ad8 111 #define ADSINPUT_BIAS_DRP (0b00000110)
akpc806a 1:4683702d7ad8 112 #define ADSINPUT_BIAL_DRN (0b00000111)
akpc806a 1:4683702d7ad8 113
akpc806a 1:4683702d7ad8 114 //test signal choices...ADS1299 datasheet page 41
akpc806a 1:4683702d7ad8 115 #define ADSTESTSIG_AMP_1X (0b00000000)
akpc806a 1:4683702d7ad8 116 #define ADSTESTSIG_AMP_2X (0b00000100)
akpc806a 1:4683702d7ad8 117 #define ADSTESTSIG_PULSE_SLOW (0b00000000)
akpc806a 1:4683702d7ad8 118 #define ADSTESTSIG_PULSE_FAST (0b00000001)
akpc806a 1:4683702d7ad8 119 #define ADSTESTSIG_DCSIG (0b00000011)
akpc806a 1:4683702d7ad8 120 #define ADSTESTSIG_NOCHANGE (0b11111111)
akpc806a 1:4683702d7ad8 121
akpc806a 1:4683702d7ad8 122 //Lead-off signal choices
akpc806a 1:4683702d7ad8 123 #define LOFF_MAG_6NA (0b00000000)
akpc806a 1:4683702d7ad8 124 #define LOFF_MAG_24NA (0b00000100)
akpc806a 1:4683702d7ad8 125 #define LOFF_MAG_6UA (0b00001000)
akpc806a 1:4683702d7ad8 126 #define LOFF_MAG_24UA (0b00001100)
akpc806a 1:4683702d7ad8 127 #define LOFF_FREQ_DC (0b00000000)
akpc806a 1:4683702d7ad8 128 #define LOFF_FREQ_7p8HZ (0b00000001)
akpc806a 1:4683702d7ad8 129 #define LOFF_FREQ_31p2HZ (0b00000010)
akpc806a 1:4683702d7ad8 130 #define LOFF_FREQ_FS_4 (0b00000011)
akpc806a 1:4683702d7ad8 131 #define PCHAN (0)
akpc806a 1:4683702d7ad8 132 #define NCHAN (1)
akpc806a 1:4683702d7ad8 133 #define OFF (0)
akpc806a 1:4683702d7ad8 134 #define ON (1)
akpc806a 1:4683702d7ad8 135
akpc806a 1:4683702d7ad8 136 // used for channel settings
akpc806a 1:4683702d7ad8 137 #define ACTIVATE_SHORTED (2)
akpc806a 1:4683702d7ad8 138 #define ACTIVATE (1)
akpc806a 1:4683702d7ad8 139 #define DEACTIVATE (0)
akpc806a 1:4683702d7ad8 140
akpc806a 1:4683702d7ad8 141 #define PCKT_START 0xA0 // prefix for data packet error checking
akpc806a 1:4683702d7ad8 142 #define PCKT_END 0xC0 // postfix for data packet error checking
akpc806a 1:4683702d7ad8 143
akpc806a 1:4683702d7ad8 144 // daisy module
akpc806a 1:4683702d7ad8 145 #define CLK_EN 5
akpc806a 1:4683702d7ad8 146
akpc806a 1:4683702d7ad8 147 //LIS3DH
akpc806a 1:4683702d7ad8 148 //#define READ_REG 0x80 // MBED: interfere with STM32 library
akpc806a 1:4683702d7ad8 149 static const int READ_REG = 0x80;
akpc806a 1:4683702d7ad8 150
akpc806a 1:4683702d7ad8 151 #define READ_MULTI 0x40
akpc806a 1:4683702d7ad8 152
akpc806a 1:4683702d7ad8 153 #define STATUS_REG_AUX 0x07 // axis over-run and data available flags (see 0x27)
akpc806a 1:4683702d7ad8 154 #define OUT_ADC1_L 0x08 //
akpc806a 1:4683702d7ad8 155 #define OUT_ADC1_H 0x09 //
akpc806a 1:4683702d7ad8 156 #define OUT_ADC2_L 0x0A // ADC input values (check DS)
akpc806a 1:4683702d7ad8 157 #define OUT_ADC2_H 0x0B //
akpc806a 1:4683702d7ad8 158 #define OUT_ADC3_L 0x0C //
akpc806a 1:4683702d7ad8 159 #define OUT_ADC3_H 0x0D //
akpc806a 1:4683702d7ad8 160 #define INT_COUNTER_REG 0x0E // ??
akpc806a 1:4683702d7ad8 161 #define WHO_AM_I 0x0F // DEVICE ID 0x33
akpc806a 1:4683702d7ad8 162 #define TMP_CFG_REG 0x1F // ADC enable (0x80) Temperature sensor enable (0x40)
akpc806a 1:4683702d7ad8 163 #define CTRL_REG1 0x20 // Data Rate Power Mode X enable Y enable Z enable (on >0x10)
akpc806a 1:4683702d7ad8 164 #define CTRL_REG2 0x21 // High Pass Filter Stuph
akpc806a 1:4683702d7ad8 165 #define CTRL_REG3 0x22 // INT1 select register
akpc806a 1:4683702d7ad8 166 #define CTRL_REG4 0x23 // Block update timing endian G-force resolution self test SPI pins
akpc806a 1:4683702d7ad8 167 #define CTRL_REG5 0x24 // reboot FIFO enable latch 4D detection
akpc806a 1:4683702d7ad8 168 #define CTRL_REG6 0x25 // ??
akpc806a 1:4683702d7ad8 169 #define REFERENCE 0x26 // interrupt reference
akpc806a 1:4683702d7ad8 170 #define STATUS_REG2 0x27 // axis overrun and availale flags (see 0x07)
akpc806a 1:4683702d7ad8 171 #define OUT_X_L 0x28 //
akpc806a 1:4683702d7ad8 172 #define OUT_X_H 0x29 //
akpc806a 1:4683702d7ad8 173 #define OUT_Y_L 0x2A // tripple axis values (see 0x0A)
akpc806a 1:4683702d7ad8 174 #define OUT_Y_H 0x2B //
akpc806a 1:4683702d7ad8 175 #define OUT_Z_L 0x2C //
akpc806a 1:4683702d7ad8 176 #define OUT_Z_H 0x2D //
akpc806a 1:4683702d7ad8 177 #define FIFO_CTRL_REG 0x2E // FIFO mode trigger output pin select (?)
akpc806a 1:4683702d7ad8 178 #define FIFO_SRC_REG 0x2F // ??
akpc806a 1:4683702d7ad8 179 #define INT1_CFG 0x30 // 6 degree control register
akpc806a 1:4683702d7ad8 180 #define INT1_SOURCE 0x31 // axis threshold interrupt control
akpc806a 1:4683702d7ad8 181 #define INT1_THS 0x32 // INT1 threshold
akpc806a 1:4683702d7ad8 182 #define INT1_DURATION 0x33 // INT1 duration
akpc806a 1:4683702d7ad8 183 #define CLICK_CFG 0x38 // click on axis
akpc806a 1:4683702d7ad8 184 #define CLICK_SRC 0x39 // other click
akpc806a 1:4683702d7ad8 185 #define CLICK_THS 0x3A // more click
akpc806a 1:4683702d7ad8 186 #define TIME_LIMIT 0x3B // click related
akpc806a 1:4683702d7ad8 187 #define TIME_LATENCY 0x3C // and so on
akpc806a 1:4683702d7ad8 188 #define TIME_WINDOW 0x3D // contined click
akpc806a 1:4683702d7ad8 189
akpc806a 1:4683702d7ad8 190 #define SCALE_2G 0x00 //(b00000000) // +/- 2G sensitivity
akpc806a 1:4683702d7ad8 191 #define SCALE_4G 0x10 //(b00010000) // +/- 4G sensitivity
akpc806a 1:4683702d7ad8 192 #define SCALE_8G 0x20 //(b00100000) // +/- 8G sensitivity
akpc806a 1:4683702d7ad8 193 #define SCALE_16G 0x30 //(b00110000) // +/- 16G sensitivity
akpc806a 1:4683702d7ad8 194 #define RATE_1HZ 0x10 //(b00010000) // 1Hz sample rate in normal or low-power mode
akpc806a 1:4683702d7ad8 195 #define RATE_10HZ 0x20 //(b00100000) // 10Hz sample rate in normal or low-power mode
akpc806a 1:4683702d7ad8 196 #define RATE_25HZ 0x30 //(b00110000) // 25Hz sample rate in normal or low-power mode
akpc806a 1:4683702d7ad8 197 #define RATE_50HZ 0x40 //(b01000000) // 50Hz sample rate in normal or low-power mode
akpc806a 1:4683702d7ad8 198 #define RATE_100HZ 0x50 //(b01010000) // 100Hz sample rate in normal or low-power mode
akpc806a 1:4683702d7ad8 199 #define RATE_200HZ 0x60 //(b01100000) // 200Hz sample rate in normal or low-power mode
akpc806a 1:4683702d7ad8 200 #define RATE_400HZ 0x70 //(b01110000) // 400Hz sample rate in normal or low-power mode
akpc806a 1:4683702d7ad8 201 #define RATE_1600HZ_LP 0x80 //(b10000000) // 1600Hz sample rate in low-power mode
akpc806a 1:4683702d7ad8 202 #define RATE_1250HZ_N 0x90 //(b10010000) // 1250Hz sample rate in normal mode
akpc806a 1:4683702d7ad8 203 #define RATE_5000HZ_LP 0x90 //(b10010000) // 5000Hz sample rate in low-power mode
akpc806a 1:4683702d7ad8 204 #define ACCEL_AXIS_X 0x07 // x axis
akpc806a 1:4683702d7ad8 205 #define ACCEL_AXIS_Y 0x08 // y axis
akpc806a 1:4683702d7ad8 206 #define ACCEL_AXIS_Z 0x09 // z axis
akpc806a 1:4683702d7ad8 207
akpc806a 1:4683702d7ad8 208 // OPENBCI_COMMANDS
akpc806a 1:4683702d7ad8 209 /** Turning channels off */
akpc806a 1:4683702d7ad8 210 #define OPENBCI_CHANNEL_OFF_1 '1'
akpc806a 1:4683702d7ad8 211 #define OPENBCI_CHANNEL_OFF_2 '2'
akpc806a 1:4683702d7ad8 212 #define OPENBCI_CHANNEL_OFF_3 '3'
akpc806a 1:4683702d7ad8 213 #define OPENBCI_CHANNEL_OFF_4 '4'
akpc806a 1:4683702d7ad8 214 #define OPENBCI_CHANNEL_OFF_5 '5'
akpc806a 1:4683702d7ad8 215 #define OPENBCI_CHANNEL_OFF_6 '6'
akpc806a 1:4683702d7ad8 216 #define OPENBCI_CHANNEL_OFF_7 '7'
akpc806a 1:4683702d7ad8 217 #define OPENBCI_CHANNEL_OFF_8 '8'
akpc806a 1:4683702d7ad8 218 #define OPENBCI_CHANNEL_OFF_9 'q'
akpc806a 1:4683702d7ad8 219 #define OPENBCI_CHANNEL_OFF_10 'w'
akpc806a 1:4683702d7ad8 220 #define OPENBCI_CHANNEL_OFF_11 'e'
akpc806a 1:4683702d7ad8 221 #define OPENBCI_CHANNEL_OFF_12 'r'
akpc806a 1:4683702d7ad8 222 #define OPENBCI_CHANNEL_OFF_13 't'
akpc806a 1:4683702d7ad8 223 #define OPENBCI_CHANNEL_OFF_14 'y'
akpc806a 1:4683702d7ad8 224 #define OPENBCI_CHANNEL_OFF_15 'u'
akpc806a 1:4683702d7ad8 225 #define OPENBCI_CHANNEL_OFF_16 'i'
akpc806a 1:4683702d7ad8 226
akpc806a 1:4683702d7ad8 227 /** Turn channels on */
akpc806a 1:4683702d7ad8 228 #define OPENBCI_CHANNEL_ON_1 '!'
akpc806a 1:4683702d7ad8 229 #define OPENBCI_CHANNEL_ON_2 '@'
akpc806a 1:4683702d7ad8 230 #define OPENBCI_CHANNEL_ON_3 '#'
akpc806a 1:4683702d7ad8 231 #define OPENBCI_CHANNEL_ON_4 '$'
akpc806a 1:4683702d7ad8 232 #define OPENBCI_CHANNEL_ON_5 '%'
akpc806a 1:4683702d7ad8 233 #define OPENBCI_CHANNEL_ON_6 '^'
akpc806a 1:4683702d7ad8 234 #define OPENBCI_CHANNEL_ON_7 '&'
akpc806a 1:4683702d7ad8 235 #define OPENBCI_CHANNEL_ON_8 '*'
akpc806a 1:4683702d7ad8 236 #define OPENBCI_CHANNEL_ON_9 'Q'
akpc806a 1:4683702d7ad8 237 #define OPENBCI_CHANNEL_ON_10 'W'
akpc806a 1:4683702d7ad8 238 #define OPENBCI_CHANNEL_ON_11 'E'
akpc806a 1:4683702d7ad8 239 #define OPENBCI_CHANNEL_ON_12 'R'
akpc806a 1:4683702d7ad8 240 #define OPENBCI_CHANNEL_ON_13 'T'
akpc806a 1:4683702d7ad8 241 #define OPENBCI_CHANNEL_ON_14 'Y'
akpc806a 1:4683702d7ad8 242 #define OPENBCI_CHANNEL_ON_15 'U'
akpc806a 1:4683702d7ad8 243 #define OPENBCI_CHANNEL_ON_16 'I'
akpc806a 1:4683702d7ad8 244
akpc806a 1:4683702d7ad8 245 /** Test Signal Control Commands
akpc806a 1:4683702d7ad8 246 * 1x - Voltage will be 1 * (VREFP - VREFN) / 2.4 mV
akpc806a 1:4683702d7ad8 247 * 2x - Voltage will be 2 * (VREFP - VREFN) / 2.4 mV
akpc806a 1:4683702d7ad8 248 */
akpc806a 1:4683702d7ad8 249 #define OPENBCI_TEST_SIGNAL_CONNECT_TO_DC 'p'
akpc806a 1:4683702d7ad8 250 #define OPENBCI_TEST_SIGNAL_CONNECT_TO_GROUND '0'
akpc806a 1:4683702d7ad8 251 #define OPENBCI_TEST_SIGNAL_CONNECT_TO_PULSE_1X_FAST '='
akpc806a 1:4683702d7ad8 252 #define OPENBCI_TEST_SIGNAL_CONNECT_TO_PULSE_1X_SLOW '-'
akpc806a 1:4683702d7ad8 253 #define OPENBCI_TEST_SIGNAL_CONNECT_TO_PULSE_2X_FAST ']'
akpc806a 1:4683702d7ad8 254 #define OPENBCI_TEST_SIGNAL_CONNECT_TO_PULSE_2X_SLOW '['
akpc806a 1:4683702d7ad8 255
akpc806a 1:4683702d7ad8 256 /** Channel Setting Commands */
akpc806a 1:4683702d7ad8 257 #define OPENBCI_CHANNEL_CMD_ADC_Normal '0'
akpc806a 1:4683702d7ad8 258 #define OPENBCI_CHANNEL_CMD_ADC_Shorted '1'
akpc806a 1:4683702d7ad8 259 #define OPENBCI_CHANNEL_CMD_ADC_BiasDRP '6'
akpc806a 1:4683702d7ad8 260 #define OPENBCI_CHANNEL_CMD_ADC_BiasDRN '7'
akpc806a 1:4683702d7ad8 261 #define OPENBCI_CHANNEL_CMD_ADC_BiasMethod '2'
akpc806a 1:4683702d7ad8 262 #define OPENBCI_CHANNEL_CMD_ADC_MVDD '3'
akpc806a 1:4683702d7ad8 263 #define OPENBCI_CHANNEL_CMD_ADC_Temp '4'
akpc806a 1:4683702d7ad8 264 #define OPENBCI_CHANNEL_CMD_ADC_TestSig '5'
akpc806a 1:4683702d7ad8 265 #define OPENBCI_CHANNEL_CMD_BIAS_INCLUDE '1'
akpc806a 1:4683702d7ad8 266 #define OPENBCI_CHANNEL_CMD_BIAS_REMOVE '0'
akpc806a 1:4683702d7ad8 267 #define OPENBCI_CHANNEL_CMD_CHANNEL_1 '1'
akpc806a 1:4683702d7ad8 268 #define OPENBCI_CHANNEL_CMD_CHANNEL_2 '2'
akpc806a 1:4683702d7ad8 269 #define OPENBCI_CHANNEL_CMD_CHANNEL_3 '3'
akpc806a 1:4683702d7ad8 270 #define OPENBCI_CHANNEL_CMD_CHANNEL_4 '4'
akpc806a 1:4683702d7ad8 271 #define OPENBCI_CHANNEL_CMD_CHANNEL_5 '5'
akpc806a 1:4683702d7ad8 272 #define OPENBCI_CHANNEL_CMD_CHANNEL_6 '6'
akpc806a 1:4683702d7ad8 273 #define OPENBCI_CHANNEL_CMD_CHANNEL_7 '7'
akpc806a 1:4683702d7ad8 274 #define OPENBCI_CHANNEL_CMD_CHANNEL_8 '8'
akpc806a 1:4683702d7ad8 275 #define OPENBCI_CHANNEL_CMD_CHANNEL_9 'Q'
akpc806a 1:4683702d7ad8 276 #define OPENBCI_CHANNEL_CMD_CHANNEL_10 'W'
akpc806a 1:4683702d7ad8 277 #define OPENBCI_CHANNEL_CMD_CHANNEL_11 'E'
akpc806a 1:4683702d7ad8 278 #define OPENBCI_CHANNEL_CMD_CHANNEL_12 'R'
akpc806a 1:4683702d7ad8 279 #define OPENBCI_CHANNEL_CMD_CHANNEL_13 'T'
akpc806a 1:4683702d7ad8 280 #define OPENBCI_CHANNEL_CMD_CHANNEL_14 'Y'
akpc806a 1:4683702d7ad8 281 #define OPENBCI_CHANNEL_CMD_CHANNEL_15 'U'
akpc806a 1:4683702d7ad8 282 #define OPENBCI_CHANNEL_CMD_CHANNEL_16 'I'
akpc806a 1:4683702d7ad8 283 #define OPENBCI_CHANNEL_CMD_GAIN_1 '0'
akpc806a 1:4683702d7ad8 284 #define OPENBCI_CHANNEL_CMD_GAIN_2 '1'
akpc806a 1:4683702d7ad8 285 #define OPENBCI_CHANNEL_CMD_GAIN_4 '2'
akpc806a 1:4683702d7ad8 286 #define OPENBCI_CHANNEL_CMD_GAIN_6 '3'
akpc806a 1:4683702d7ad8 287 #define OPENBCI_CHANNEL_CMD_GAIN_8 '4'
akpc806a 1:4683702d7ad8 288 #define OPENBCI_CHANNEL_CMD_GAIN_12 '5'
akpc806a 1:4683702d7ad8 289 #define OPENBCI_CHANNEL_CMD_GAIN_24 '6'
akpc806a 1:4683702d7ad8 290 #define OPENBCI_CHANNEL_CMD_LATCH 'X'
akpc806a 1:4683702d7ad8 291 #define OPENBCI_CHANNEL_CMD_POWER_OFF '1'
akpc806a 1:4683702d7ad8 292 #define OPENBCI_CHANNEL_CMD_POWER_ON '0'
akpc806a 1:4683702d7ad8 293 #define OPENBCI_CHANNEL_CMD_SET 'x'
akpc806a 1:4683702d7ad8 294 #define OPENBCI_CHANNEL_CMD_SRB1_CONNECT '1'
akpc806a 1:4683702d7ad8 295 #define OPENBCI_CHANNEL_CMD_SRB1_DISCONNECT '0'
akpc806a 1:4683702d7ad8 296 #define OPENBCI_CHANNEL_CMD_SRB2_CONNECT '1'
akpc806a 1:4683702d7ad8 297 #define OPENBCI_CHANNEL_CMD_SRB2_DISCONNECT '0'
akpc806a 1:4683702d7ad8 298
akpc806a 1:4683702d7ad8 299 /** Default Channel Settings */
akpc806a 1:4683702d7ad8 300 #define OPENBCI_CHANNEL_DEFAULT_ALL_SET 'd'
akpc806a 1:4683702d7ad8 301 #define OPENBCI_CHANNEL_DEFAULT_ALL_REPORT 'D'
akpc806a 1:4683702d7ad8 302
akpc806a 1:4683702d7ad8 303 /** LeadOff Impedance Commands */
akpc806a 1:4683702d7ad8 304 #define OPENBCI_CHANNEL_IMPEDANCE_LATCH 'Z'
akpc806a 1:4683702d7ad8 305 #define OPENBCI_CHANNEL_IMPEDANCE_SET 'z'
akpc806a 1:4683702d7ad8 306 #define OPENBCI_CHANNEL_IMPEDANCE_TEST_SIGNAL_APPLIED '1'
akpc806a 1:4683702d7ad8 307 #define OPENBCI_CHANNEL_IMPEDANCE_TEST_SIGNAL_APPLIED_NOT '0'
akpc806a 1:4683702d7ad8 308
akpc806a 1:4683702d7ad8 309 /** SD card Commands */
akpc806a 1:4683702d7ad8 310 #define OPENBCI_SD_LOG_FOR_HOUR_1 'G'
akpc806a 1:4683702d7ad8 311 #define OPENBCI_SD_LOG_FOR_HOUR_2 'H'
akpc806a 1:4683702d7ad8 312 #define OPENBCI_SD_LOG_FOR_HOUR_4 'J'
akpc806a 1:4683702d7ad8 313 #define OPENBCI_SD_LOG_FOR_HOUR_12 'K'
akpc806a 1:4683702d7ad8 314 #define OPENBCI_SD_LOG_FOR_HOUR_24 'L'
akpc806a 1:4683702d7ad8 315 #define OPENBCI_SD_LOG_FOR_MIN_5 'A'
akpc806a 1:4683702d7ad8 316 #define OPENBCI_SD_LOG_FOR_MIN_15 'S'
akpc806a 1:4683702d7ad8 317 #define OPENBCI_SD_LOG_FOR_MIN_30 'F'
akpc806a 1:4683702d7ad8 318 #define OPENBCI_SD_LOG_FOR_SEC_14 'a'
akpc806a 1:4683702d7ad8 319 #define OPENBCI_SD_LOG_STOP 'j'
akpc806a 1:4683702d7ad8 320
akpc806a 1:4683702d7ad8 321 /** Stream Data Commands */
akpc806a 1:4683702d7ad8 322 #define OPENBCI_STREAM_START 'b'
akpc806a 1:4683702d7ad8 323 #define OPENBCI_STREAM_STOP 's'
akpc806a 1:4683702d7ad8 324
akpc806a 1:4683702d7ad8 325 /** Miscellaneous */
akpc806a 1:4683702d7ad8 326 #define OPENBCI_MISC_QUERY_REGISTER_SETTINGS '?'
akpc806a 1:4683702d7ad8 327 #define OPENBCI_MISC_SOFT_RESET 'v'
akpc806a 1:4683702d7ad8 328
akpc806a 1:4683702d7ad8 329 /** 16 Channel Commands */
akpc806a 1:4683702d7ad8 330 #define OPENBCI_CHANNEL_MAX_NUMBER_8 'c'
akpc806a 1:4683702d7ad8 331 #define OPENBCI_CHANNEL_MAX_NUMBER_16 'C'
akpc806a 1:4683702d7ad8 332
akpc806a 1:4683702d7ad8 333 /** Set Packet Type */
akpc806a 1:4683702d7ad8 334 #define OPENBCI_BOARD_MODE_SET '/'
akpc806a 1:4683702d7ad8 335 #define OPENBCI_BOARD_MODE_DEFAULT '0'
akpc806a 1:4683702d7ad8 336 #define OPENBCI_BOARD_MODE_DEBUG '1'
akpc806a 1:4683702d7ad8 337 #define OPENBCI_BOARD_MODE_WIFI '2'
akpc806a 1:4683702d7ad8 338 #define OPENBCI_BOARD_MODE_INPUT_ANALOG '3'
akpc806a 1:4683702d7ad8 339 #define OPENBCI_BOARD_MODE_INPUT_DIGITAL '4'
akpc806a 1:4683702d7ad8 340
akpc806a 1:4683702d7ad8 341 /** Sync Clocks */
akpc806a 1:4683702d7ad8 342 #define OPENBCI_TIME_SET '<'
akpc806a 1:4683702d7ad8 343 #define OPENBCI_TIME_STOP '>'
akpc806a 1:4683702d7ad8 344
akpc806a 1:4683702d7ad8 345 /** Possible number of channels */
akpc806a 1:4683702d7ad8 346 #define OPENBCI_NUMBER_OF_CHANNELS_DAISY 16
akpc806a 1:4683702d7ad8 347 #define OPENBCI_NUMBER_OF_CHANNELS_DEFAULT 8
akpc806a 1:4683702d7ad8 348
akpc806a 1:4683702d7ad8 349 /** Helpful numbers */
akpc806a 1:4683702d7ad8 350 #define OPENBCI_NUMBER_OF_BOARD_SETTINGS 1
akpc806a 1:4683702d7ad8 351 #define OPENBCI_NUMBER_OF_CHANNEL_SETTINGS 6
akpc806a 1:4683702d7ad8 352 #define OPENBCI_NUMBER_OF_LEAD_OFF_SETTINGS 2
akpc806a 1:4683702d7ad8 353
akpc806a 1:4683702d7ad8 354 /** Possible Sample Rates*/
akpc806a 1:4683702d7ad8 355 #define OPENBCI_SAMPLE_RATE_125 125
akpc806a 1:4683702d7ad8 356 #define OPENBCI_SAMPLE_RATE_250 250
akpc806a 1:4683702d7ad8 357
akpc806a 1:4683702d7ad8 358 /** Packet Size */
akpc806a 1:4683702d7ad8 359 #define OPENBCI_PACKET_SIZE 33
akpc806a 1:4683702d7ad8 360
akpc806a 1:4683702d7ad8 361 /** Impedance Calculation Variables */
akpc806a 1:4683702d7ad8 362 #define OPENBCI_LEAD_OFF_DRIVE_AMPS 0.000000006
akpc806a 1:4683702d7ad8 363 #define OPENBCI_LEAD_OFF_FREQUENCY_HZ 31
akpc806a 1:4683702d7ad8 364
akpc806a 1:4683702d7ad8 365 /** Raw data packet types/codes */
akpc806a 1:4683702d7ad8 366 #define OPENBCI_PACKET_TYPE_V3 0 // 0000
akpc806a 1:4683702d7ad8 367 #define OPENBCI_PACKET_TYPE_TIME_SYNCED 1 // 0001
akpc806a 1:4683702d7ad8 368 #define OPENBCI_PACKET_TYPE_TIME_SET 2 // 0010
akpc806a 1:4683702d7ad8 369 #define OPENBCI_PACKET_TYPE_USER_DEFINED 3 // 0011
akpc806a 1:4683702d7ad8 370 #define OPENBCI_PACKET_TYPE_RAW_AUX 4 // 0100
akpc806a 1:4683702d7ad8 371
akpc806a 1:4683702d7ad8 372 #define OPENBCI_TIME_OUT_MS_1 1
akpc806a 1:4683702d7ad8 373 #define OPENBCI_TIME_OUT_MS_3 3
akpc806a 1:4683702d7ad8 374
akpc806a 1:4683702d7ad8 375 #define OPENBCI_NUMBER_OF_BYTES_SETTINGS_CHANNEL 9
akpc806a 1:4683702d7ad8 376 #define OPENBCI_NUMBER_OF_BYTES_SETTINGS_LEAD_OFF 5
akpc806a 1:4683702d7ad8 377
akpc806a 1:4683702d7ad8 378 #define OPENBCI_NUMBER_OF_BYTES_AUX 6
akpc806a 1:4683702d7ad8 379
akpc806a 1:4683702d7ad8 380 #define OPENBCI_FIRMWARE_VERSION_V1 1
akpc806a 1:4683702d7ad8 381 #define OPENBCI_FIRMWARE_VERSION_V2 1
akpc806a 1:4683702d7ad8 382
akpc806a 1:4683702d7ad8 383 #endif