Giter VIP home page Giter VIP logo

openbci_cyton_library's Introduction

Stories in Ready

OpenBCI 32bit Library

The official library for the OpenBCI 32bit Board.

Table of Contents:

  1. Minimums
  2. Installing
  3. Upgrading
  4. Downgrading
  5. General Overview
  6. Includes
  7. setup()
  8. loop()
  9. System Overview
  10. Reference Guide
  11. Functions
  12. Enums

Minimums:

You just opened your OpenBCI (congrats!) and want to get started programming the firmware right now?! Ok, ok do the following minimums!

  1. Install the dongle drivers from FTDI for your operating system.
  2. Download the latest Arduino IDE software from the Arduino site
  3. Follow the 2nd installation method "Manual install by copying ZIP file" to install the latest chipKIT-core hardware files from the chipKIT-core wiki

Installing:

  1. Download this repository zip or clone this repo (we clone directly into the libraries folder for development)
  2. Download OpenBCI_32bit_SD
  3. Move both of the folders into your libraries folder (please make a folder in Arduino named libraries if you don't have one)
  • Mac OSX: User/Documents/Arduino/libraries
  • Windows: /My Documents/Arduino/libraries
  1. Restart Arduino IDE
  2. Open DefaultBoard.ino for a full featured example.
  3. Hack and make awesome stuff!

Upgrading:

Checkout the upgrade guide!

Downgrading:

Have a bunch of custom firmware based on the original firmware? Have no fear for previous releases are here and here for the radios if needed.

General Overview:

Your needs dictate what you need to include! This saves a ton of precious memory space!

Includes:

Default OpenBCI with SD Card Functionality

In order to use the SD card write functionality, you must not only include the file SD_Card_Stuff.ino located in examples/DefaultBoard, you must include the following:

Headers:

#include <OBCI32_SD.h>
#include <DSPI.h>
#include <EEPROM.h>
#include <OpenBCI_32bit_Library.h>
#include <OpenBCI_32bit_Library_Definitions.h>

Variables used by SD_Card_Stuff.ino:

boolean addAccelToSD = false;
boolean addAuxToSD = false;
boolean SDfileOpen = false;

Bare OpenBCI Board with no SD card

Headers:

#include <DSPI.h>
#include <OpenBCI_32bit_Library.h>
#include <OpenBCI_32bit_Library_Definitions.h>

You do not need to declare any variables...

setup():

Accel (default)

void setup() {
  board.begin(); // Bring up the OpenBCI Board
  // The board will use accel data by default
}

Aux

void setup() {
  board.begin(); // Bring up the OpenBCI Board
  board.useAccel(false); // Notify the board we want to use aux data, this effects `::sendChannelData()`
}

loop():

We will start with the basics here, and work our way up... The loop function can be thought of as the meat and core executor of the OpenBCI_32bit_Library functionality. Keep in mind the main purpose of this library is to stream data from the ADS1299 to the computer, that's our focus, everything takes a back seat to that.

A bare board, not using the SD, accel, or aux data must have the following:

void loop() {
  board.loop();
  if (board.streaming) {
    if (board.channelDataAvailable) {
      // Read from the ADS(s), store data, set channelDataAvailable flag to false
      board.updateChannelData();

      board.sendChannelData();
    }
  }

  // Check the serial port for new data
  if (board.hasDataSerial0()) {
    // Read one char and process it
    board.processChar(board.getCharSerial0());
  }
}

The first if statement is only true if a b command is ran through the processChar function. The next if statement exploits a volatile interrupt driven boolean called channelDataAvailable. This interrupt driven system is new as of firmware version 2.0.0 a discussion of it can be found here. If the ADS1299 has signaled to the Board new data is ready, the function updateChannelData() is executed. This function will grab new data from the Board's ADS1299 (and from the daisy's ADS1299) and store that data to the arrays: lastBoardDataRaw, boardChannelDataRaw, meanBoardDataRaw, lastDaisyDataRaw, daisyChannelDataRaw, meanDaisyDataRaw, which can be accessed to drive filters or whatever your heart desires.

System Overview:

Sending Channel Data

In the OpenBCI system, and with most wireless systems, we are restricted by the rate at which we can send data.

If you send a packet from the Pic32 to the Device RFduino and you start it with 0x41, write 31 bytes, and follow with 0xCX (where X can be 0-F hex) then the packet will immediately be sent from the Device radio. This is counter to how if you want to send a message longer than 31 bytes (takes over two packets to transmit from Device radio to Host radio (Board to Dongle)) then you simply write the message, and that message will be sent in a multipacket format that allows it to be reassembled on the Dongle. This reassembling of data is critical to over the air programming.

Reference Guide:

Functions:

accelHasNewData()

Reads a status register to see if there is new accelerometer data.

Returns {boolean}

true if the accelerometer has new data.

accelUpdateAxisData()

Reads from the accelerometer to get new X, Y, and Z data. Updates the global array axisData.

begin()

The function the OpenBCI board will call in setup().

beginDebug()

The function the OpenBCI board will call in setup. Turns sniff mode on and allows you to tap into the serial port that is broken out on the OpenBCI 32bit board.

You must alter Board_Defs.h file located:

On Mac:
/Users/username/Documents/Arduino/hardware/chipkit-core/pic32/variants/openbci/Board_Defs.h On Windows:

C:\Users\username\Documents\Arduino\hardware\chipkit-core\pic32\variants\openbci\Board_Defs.h

Specifically lines 311 and 313, change 7 and 10 to 11 and 12 for _SER1_TX_PIN and _SER1_RX_PIN respectively. Check out this sweet gif if you are a visual person http://g.recordit.co/3jH01sMD6Y.gif

You will need to reflash your board! But now you can connect to pins 11 (TX) and 12 (RX) via any 3V3 serial to USB driver. Remember to use 3V3, 115200 baud, and have a common ground!

hasDataSerial0()

Called in every loop() and checks Serial0.

Returns {boolean}

true if there is data ready to be read.

hasDataSerial1()

Called in every loop() and checks Serial1.

Returns {boolean}

true if there is data ready to be read.

processChar(character)

Process one char at a time from serial port. This is the main command processor for the OpenBCI system. Considered mission critical for normal operation.

character {char}

The character to process.

Returns {boolean}

true if the command was recognized, false if not.

getCharSerial0()

If hasDataSerial0() is true then this function is called. Reads from Serial0 first and foremost, which comes from the RFduino. If no data is available then returns a 0x00 which is NOT a command that the system will recognize as a safe guard.

Returns {char}

The character from the serial port.

getCharSerial1()

If hasDataSerial1() is true then this function is called. Reads from Serial1 which comes from the external serial port. If no data is available then returns a 0x00 which is NOT a command that the system will recognize as a safe guard.

Returns {char}

The character from the serial port.

sendChannelData()

Writes channel data, aux data, and footer to serial port or over wifi. Based on global variables useAux and useAccel Must keep for portability.

If curAccelMode is ACCEL_MODE_OFF then then sends data from auxData array and sets the contents of auxData to 0 after send. board.useAccel(false) If curAccelMode is ACCEL_MODE_ON then then sends data from axisData array and sets the contents of axisData to 0 after send. board.useAccel(true)

updateChannelData()

Called when the board ADS1299 has new data available. If there is a daisy module attached, that data is also fetched here.

ENUMS:

BOARD_MODE

Board mode changes the hardware pins.

BOARD_MODE_DEFAULT

0 - Board will operate leave all pins in default mode.

BOARD_MODE_DEBUG

1 - Board will output serial debug data out of the external serial port.

BOARD_MODE_ANALOG

2 - Board will read from A6 (D11), A7 (D12), and A8 (D13). A8 is only is use when there is no wifi present. The analog to digital converter is 10bits and the data will be in .

Pin Aux Bytes Notes
A6 0:1 D11
A7 2:3 D12
A8 4:5 D13 - If wifi not present

BOARD_MODE_DIGITAL

3 - Board will read from D11, D12, D13 (if wifi not present), D17, and D18 (if wifi not present).

Pin Aux Byte Notes
D11 0
D11 1
D13 2 If wifi not present
D17 3
D18 4 If wifi not present

PACKET_TYPE

PACKET_TYPE_ACCEL

0 - End of standard stream packet.

PACKET_TYPE_RAW_AUX

1 - End of stream packet with raw packet.

PACKET_TYPE_USER_DEFINED

2 - End of stream packet, user defined.

PACKET_TYPE_ACCEL_TIME_SET

3 - End of time sync up with accelerometer stream packet.

PACKET_TYPE_ACCEL_TIME_SYNC

4 - End of time synced stream packet.

PACKET_TYPE_RAW_AUX_TIME_SET

5 - End of time sync up stream packet.

PACKET_TYPE_RAW_AUX_TIME_SYNC

6 - End of time synced stream packet.

SAMPLE_RATE

SAMPLE_RATE_16000

0 - Sample rate 16000Hz

SAMPLE_RATE_8000

1 - Sample rate 8000Hz

SAMPLE_RATE_4000

2 - Sample rate 4000Hz

SAMPLE_RATE_2000

3 - Sample rate 2000Hz

SAMPLE_RATE_1000

4 - Sample rate 1000Hz

SAMPLE_RATE_500

5 - Sample rate 500Hz

SAMPLE_RATE_250

6 - Sample rate 250Hz

openbci_cyton_library's People

Contributors

biomurph avatar gerrievanzyl avatar irenevigueguix avatar per1234 avatar waffle-iron avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

openbci_cyton_library's Issues

Cyton writing bad files to sd card

I have a Cyton which I've been using for several months, saving data to the sd card. At first, the files were formatted just as the documentation shows they should be. But last week I opened one of the recent files, and found they had switched at some point to containing binary data that makes no sense to me. As an example, a recent file starts with these hex values:

41 10 01 A0 B0 00 01....

The change happened at a definite point in time, and all files since then have been more or less like this. It happens with both Linux and Windows hosts, and both with my own software (which uses OpenBCI_NodeJS to talk to the Cyton) and with the OPENBCI_GUI app. I'm using a Transcend 8GB class 10 card, which I've formatted several times using the SDFormatter app. The files are written to the SD card with the expected names and sizes, they just contain what looks like binary garbage.

Cyton firmware 2.0.0.

wjcroft suggested firmware might be corrupted. Will try reflashing.

Issue recording at 2kHz on SD card (Cyton v3.0.0, Python)

Hello,
I am trying ask via python to record on sd card at 1kHz, using v3.0.0
I looked around and tried quite a bit but cant get it to work.
My code looks like below, does anyone knows what i'm doing wrong by chance?
i get createfdContiguous fail without softreset, and if i do a soft reset i get back to 250Hz,
Thanks

board.ser.write(b'~6');sleep(1);read() # ask 250Hz
board.ser.write(b'v');sleep(1);read() # soft reset
board.getSampleRate() # check 250.0
board.ser_write(b'a');sleep(1);read() # record ~14sec
sleep(20)
board.ser.write(b'~4');sleep(1);read() # ask 1kHz
board.ser.write(b'v');sleep(1);read() # soft reset
board.getSampleRate() # check 1kHz
board.ser_write(b'a');sleep(1);read() # record ~14sec
sleep(20)

Multibyte timeout protection

Is there a way to protect against lockout if too few characters are received on channel/impedance settings?

Could do something like if you get a X or Z you could check to see if you got all the bytes and THEN send the command to the board?

Remove delays in firmware

The communication protocol on the firmware side implements many (hardcoded) delays. These delays aren't documented and it is difficult to make timings optimal on the client side without falling in cases where the delays would not be sufficient as compared to firmware expectations

Potential differences in data between stock OpenBCI firmware and Pushtheworld code

I'm running Radio with https://github.com/pushtheworldllc/OpenBCI_Radios/releases/tag/v2.0.0-rc.2 and Firmware at https://github.com/pushtheworldllc/OpenBCI_32bit_Library/releases/tag/v2.0.0-rc.3 . But see that there is a difference in the noise floor and a particular ~31hz noise. The screenshot of the GUI in two different firmwares attached. I'm not sure if this is an issue. But would like to be tracked.
Not that all the leads were floating and not connected to anything in both the cases.
The OpenBCI firmware
stock_openbci firmware
The pushtheworld firmware
pushtheworld firmware

Bug: Intermittent Channels go to ground

  • Intermittent problem
  • NOT reproducible as of writing this
  • OpenBCI board will have all channels go to ground.
  • This bug was thought to be solved with V2 but does not appear to be fixed.

It is as if a 0 was sent to the board and a d has to be sent to reset back. Might be something in initialization?

Handshake at connection

At connection time, it would be great to have a handshake to declare the device to client code. This allows to easily scan available ports and figure out which port have an OpenBCI plugged in and have basic information about the capabilities of the device. This handshake may also include a protocol version !

Make communication protocol machine readable instead of human readable

Right now communication protocol sends (or may not send) replies in plain text, with information being (or not being) present depending on the current status of the board. It would be much easier for client code to be able to parse machine-ready replies formatted in JSON, XML or at least following a machine parseable format, especially including delimiters for begin and end of a reply. The content of the reply should be consistent across different device configuration, e.g. :

{
    "version" : 3,
    "max-channels" : 16,
    "on-board-ads1299" : "0x3E",
    "on-daisy-ads1299" : "0x3E",
    "has-daisy" : true,
}

(note the 'has-daisy' which would show-up even though daisy is not attached)

Private communication between Pic and Device RFDuino

The PIC and the Device Radio could communicate.

Such as:

  • The Device Radio could be able to ask the PIC what state it is in if it hasn't heard from it in say 100ms. This could directly lead to the Device being able to issue a reset command.

Rename This Library

Should be called OpenBCI_Cyton_Library
Examples should also specify Cyton in their names

Timer on multichar messages

@aj-ptw ,

As I was messing about with the 3.0.0 firmware, I noticed that there is no timeout for multi-char messages from the GUI to the board. At least this is the way it looks to me.

Without a timeout we run the risk of getting out-of-state between the GUI and the board in the event that a character is missed (or a message incorrectly sent). For example, the board expects 'n' and receives the '' but does not receive the 'n'. The way I read the code it will be "stuck" waiting for the 'n'. If you send the next command, it will believe it is the 'n' and then process the second char for that command as a new command. (Making any sense?)

Should we not enforce a 5ms timeout (or some other value) for multi-char messages? If the timeout is reached the serial is reset to expect a command.

This seems easy to do, if you agree I can give a shot at implementing something simple and sending a pull request.

Logic error on first sample with daisy

I do not have a daisy board to test anything, but I noticed this reading the code:

firstDataPacket, initialized to true, is cleared to false at the end of updateBoardData(). It is then checked if false which it always will be because it was just set, data that hasn't been read yet is backed up, and the flag is re-cleared to false if true which will never happen because it has just been set to false, in updateDaisyData(). It looks like this would result in the first sample being corrupt.

It looks like the clearing of firstDataPacket should be moved out of the individual channel update functions here and here and into the end of updateChannelData which calls them both, right here.

After this change, though, it still looks like the first sample sent would still be corrupt, because meanDaisyChannelDataRaw is not specified in the first sample. One solution would be to add an else { } block here containing code that would fill meanDaisyChannelDataRaw with the contents of daisyChannelDataRaw without any averaging.

If one were to address this area of code more thoroughly, there is an additional possible 'issue' which is that the daisy and board running averages are sampled when output, alternatingly, so there is no way to reconstruct from the output a complete 'snapshot' at any point of time -- the daisy information represents time = (x+1/2), and the board information represents time = (x-1/2). A different approach would be to change the logical flow to output briefly buffered averages from the past that are both taken from the same points in time.

Test all the example .ino files

All the examples need to be tested

  • BasicBoard.ino
  • DefaultBoard.ino
  • BoardWithAccel.ino
  • BoardWithSD.ino
  • BoardWithAnalogSensor.ino

Wifi breaks pin accessability

3.0.0 commandeers pins for wifi reset, ss, etc. This makes these pins unaccessible for, for example, analog read.

SD Card Start/Stop Stamps Broken

With git HEAD, v2.0.1, the 'START AT' and 'STOP AT' stamps don't seem to be written correctly to the SD file.

Sometimes BOTH are written immediately following each other, to the start of the file:

%START AT
0019B699
%STOP AT
0019C691
... data

Sometimes ONLY 'STOP AT' is written, but it is written at the start:

%STOP AT
000745EE
... data

The documentation states that the data should be between these stamps, not following them.

compile fails - Arduino can't find <OpenBCI system library>

MacOS 10.11.6, Arduino 1.6.5

Following along with the README, I install all the prerequisites and then open one of the OpenBCI examples. Compilation fails with this mesage:

Arduino: 1.6.5 (Mac OS X), Board: "OpenBCI 32"

Using library OBCI32_SD in folder: /Users/ashroyer/Documents/Arduino/libraries/OBCI32_SD (legacy)

/Users/ashroyer/Library/Arduino15/packages/chipKIT/tools/pic32-tools/1.42-pic32gcc/bin/pic32-g++ -c -g -O2 -Wall -DARDUINO_ARCH_PIC32 -mno-smart-io -ffunction-sections -fdata-sections -mdebugger -Wcast-align -fno-short-double -ftoplevel-reorder -MMD -fno-exceptions -mprocessor=32MX250F128B -DF_CPU=40000000L -DARDUINO=10605 -D_BOARD_DP32_ -DMPIDEVER=16777998 -DMPIDE=150 -DIDE=Arduino -G1024 -D_USE_USB_FOR_SERIAL_ -I/var/folders/27/w1myz2vn78gflt11gb_hydfr0000gp/T/build8231903212779785058.tmp/sketch -I/Users/ashroyer/Library/Arduino15/packages/chipKIT/hardware/pic32/1.3.1/cores/pic32 -I/Users/ashroyer/Library/Arduino15/packages/chipKIT/hardware/pic32/1.3.1/variants/OpenBCI -I/Users/ashroyer/Documents/Arduino/libraries/OBCI32_SD /var/folders/27/w1myz2vn78gflt11gb_hydfr0000gp/T/build8231903212779785058.tmp/ReadWrite.cpp -o /var/folders/27/w1myz2vn78gflt11gb_hydfr0000gp/T/build8231903212779785058.tmp/ReadWrite.cpp.o 
ReadWrite.pde:24:23: fatal error: OBCI32_SD.h: No such file or directory
compilation terminated.
/Users/ashroyer/Library/Arduino15/packages/chipKIT/tools/pic32-tools/1.42-pic32gcc/bin/pic32-g++ returned 255
Error compiling.

I thought it was kind of odd that the SD library is contained in an otherwise empty OpenBCI_32bit_SD folder, so I copied OBCI32_SD into ~/Documents/Arduino/libraries

Now I get this error:

Arduino: 1.6.5 (Mac OS X), Board: "OpenBCI 32"

Using library OBCI32_SD in folder: /Users/ashroyer/Documents/Arduino/libraries/OBCI32_SD (legacy)

/Users/ashroyer/Library/Arduino15/packages/chipKIT/tools/pic32-tools/1.42-pic32gcc/bin/pic32-g++ -c -g -O2 -Wall -DARDUINO_ARCH_PIC32 -mno-smart-io -ffunction-sections -fdata-sections -mdebugger -Wcast-align -fno-short-double -ftoplevel-reorder -MMD -fno-exceptions -mprocessor=32MX250F128B -DF_CPU=40000000L -DARDUINO=10605 -D_BOARD_DP32_ -DMPIDEVER=16777998 -DMPIDE=150 -DIDE=Arduino -G1024 -D_USE_USB_FOR_SERIAL_ -I/var/folders/27/w1myz2vn78gflt11gb_hydfr0000gp/T/build8231903212779785058.tmp/sketch -I/Users/ashroyer/Library/Arduino15/packages/chipKIT/hardware/pic32/1.3.1/cores/pic32 -I/Users/ashroyer/Library/Arduino15/packages/chipKIT/hardware/pic32/1.3.1/variants/OpenBCI -I/Users/ashroyer/Documents/Arduino/libraries/OBCI32_SD /var/folders/27/w1myz2vn78gflt11gb_hydfr0000gp/T/build8231903212779785058.tmp/ReadWrite.cpp -o /var/folders/27/w1myz2vn78gflt11gb_hydfr0000gp/T/build8231903212779785058.tmp/ReadWrite.cpp.o 
In file included from ReadWrite.pde:24:0:
/Users/ashroyer/Documents/Arduino/libraries/OBCI32_SD/OBCI32_SD.h:19:18: fatal error: DSPI.h: No such file or directory
 #include <DSPI.h>
                  ^
compilation terminated.
/Users/ashroyer/Library/Arduino15/packages/chipKIT/tools/pic32-tools/1.42-pic32gcc/bin/pic32-g++ returned 255
Error compiling.

For completeness, after trying this I also tried installing the chipkit hardware libraries via the "automatic" route, but this did not change anything for me.

Any ideas?

Feature request: User callback function in the DefaultBoard.ino

This suggestion may make the firmware more hackable by users with limited experience.

To make small changes how/what data is logged, would it be possible to create user function in DefaultBoard.ino that is called just before data is written to serial, wifi and SD card (something like void userDataProcessing() ). This would be setup as a simple call back that is run just before the EEG and accel/aux data is written out.

The purpose of this callback would be to give users one simple place to make any modifications to the data before it is written out. This would eliminate the need for users to mess with any of the Library code.

For example: to insert "markers" into the data streams the callback function would allow someone the ability to change the auxData[] values just before they are written out.

Make sense?

Migrate SD_Card_Stuff.ino into library

There are several functions in here that should be moved into the library. This is because with the example files, we have to copy and past the same files. No good.

ADD type for analog sensors

There is sometimes a need to convert aux bytes into numbers, should there be a stream packet type for this?

ADD: Variable Sample_Rate

  • Set the sample rate to 250, 500, 1000, 2000Hz.
    To do this, send an '.' followed by a char in '1' to '4' corresponding to 250..2000.
    ex : '.2' sets to 500Hz

Full code from : https://github.com/yj-xxxiii/OpenBCI_2kHz

case waiting_freq_value : if('1' <= testChar && testChar <='4') { Sample_Rate_SD_Only = 0b110-(testChar-'1'); if(EEPROM.read(2)!=Sample_Rate_SD_Only) EEPROM.write(2 , (uint8_t)Sample_Rate_SD_Only); Serial0.println(250<<(0b110-Sample_Rate_SD_Only)); } command_state = waiting_command_beginning ; break ; ... ... case 'N': writeToSDonly = true; OBCI.Sample_Rate = Sample_Rate_SD_Only ; ...
In OpenBCI_32_Daisy.cpp
WREG(CONFIG1,0xB0+Sample_Rate,BOARD_ADS); // tell on-board ADS to output its clk, set the data rate to Sample_Rate WREG(CONFIG1,0x90+Sample_Rate,BOARD_ADS); // turn off clk output if no daisy present
I am still unable to paste the code properly formatted...
y.j.

Board does not send data when sampling higher rates v3.0.0

The new wifi supporting code does not send any data over the air when the sample rate is changed from 250 to any of the higher rates. Would it be nice if it would send at 250 even if it's sampling at higher rates? for example, if someone wants to write the higher rate to an SD card, they can still monitor the signal with the GUI or whatever...

Add: Impedance testing on board

Be able to compute impedance on the board and just send the values to the computer to drastically reduce the time it takes to measure impedances.

EEG hiccups when '`' is sent via serial

I have tried the following on 2.0.1 and 3.0.0 dev firmware.

In my attempts to insert markers into the stream I have used the functionality in 2.0.1 to send the '`' character. When I type this on the keyboard it creates a "hiccup" on the EEG data stream in the GUI plots. See the attached screenshot around t=-4s. I have not checked whether these artifacts are present in the SD files. This instability would certainly limit the ability gather data where stimulations are handled by the Cyton board.

I tried this on a modified 3.0.0 dev firmware (modified to expect `n and insert a marker with value n into auxData[0] ) and it creates the same artifact.

What I did notice was that whenever I sent serial commands to the board, it did miss at least one packet. Is this just a problem with the GUI filters?

It is not clear to me why sending 2 chars to the board (with trivial processing on the board side) would mess up timing enough to miss one packet. Is this this possibly a bug?

untitled

Tracking: Over The Air Programming Failures

This issue shall be used to report over the air programming failures. Please adhere to the following format for you bug report.

## Error

## Steps to reproduce error
1. 

## Computer System Details
Laptop: 
OS Version: 
Processor: 
Memory (RAM): 
Poll Time (ms):

Rename library

Current library name is OpenBCI_32Bit and this needs to be changed to OpenBCI_32bit_Library

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.