#ifndef CUSTOM_BOARD_H #define CUSTOM_BOARD_H #define NRF52840_BREAKOUT_BOARD 1 #define ADS1298 1 #if ADS1298 #define ADS1298_STATS 0 #endif // Testing with nRF52840: #if NRF52840_BREAKOUT_BOARD #define ADS1298_DRDY_PIN 11 #define ADS1298_MISO_PIN 12 #define ADS1298_SCK_PIN 13 #define ADS1298_CS_PIN 14 // I don't think you're supposed to tie PWDN and reset together on ADS1298 #define ADS1298_PWDN_PIN 15 #define ADS1298_MOSI_PIN 16 // This is the packet format for data received over USB: // [CN:4bit][TN:4bit][..data] // COMMAND NIBBLES (4-bit definitions), CN_ #define CN_WRITE_IC_REGS 0x8 // 0b1000 #define CN_READ_IC_REGS 0x4 // 0b0100 #define CN_STREAM_CONTROL 0xB // 0b1011 #define CN_MISC_CONTROLS 0xE // 0b1110 // CTRL_REQUEST_BATTERY_LEVEL :: 0xBB // TARGET NIBBLES (4-bit definitions) #define TN_IC_ADS1298 0x1 #define TN_IC_EXT 0xF // Extended .. check the next byte! #define TN_STREAM_START 0x2 #define TN_STREAM_STOP 0xF #define TN_STREAM_REQUEST_BATTERY_LEVEL 0xB // #define TN_STREAM_REQUEST_WHO_AM_I 0xD #define TN_STREAM_REQUEST_PERIPHERAL_INFO 0xE #define TN_MISC_THROUGHPUT_TEST 0xF #define TN_MISC_RTT_REQUEST 0x1 // #################### RESPONSE CODES #################### // #NOTE: 0x01 and 0x02 are reserved (for now) for legacy BLE reasons. I should deprecate and // remove these. #define CTRL_STAT_INFO_STRING 0x01 #define CTRL_STAT_INFO_BYTES_SENT 0x02 #define CTRL_STAT_INFO_PERIPHERALS 0x03 #define CTRL_STAT_INFO_HW_FW_VERSION 0x04 #define CTRL_STAT_INFO_WHO_AM_I 0x05 #define CTRL_STAT_INFO_BATTERY_LEVEL 0xB1 // For register readback, the following bytes will be ic-dependent, as // some devices have more than 62 bytes worth of registers, so it may // need to be split up into pages. #define CTRL_REGISTER_READBACK 0xC8 #define CTRL_ACK_WRITE_IC_REGISTER 0xDF #define CTRL_ACK_RTT_REQUEST 0xE0 // %%% IC Identifiers %%% // I want a SINGLE table for 8-bit IDs corresponding to different ICs // These values can be anything from 0x06:0xFF, as long as it doesn't conflict // with any of the reserved ones from above. // If the USB packet leads [0] with the ID, then it is a data packet // in the typical format of [ID, Serial, ...data] where the length of data // should be statically determined in advance. // For example, with the ADS1298, the packet length is determined based on the // channel count (see: ads1298_set_data_buffer_length for more details) // #define RESPONSE_PACKET 0x00 #define IC_ID_ADS1298 0xD1 #define IC_ID_EXT 0xFF // see next byte for extended table #define FIRST_NIBBLE(x) ((x >> 4) & 0xF) #define SECOND_NIBBLE(x) (x & 0xF) // For IC controls, we want to prefix the registers with the length: [u16???] // Data format will be different for each device. // For ADS1298 // [CN:4bit][TN:4bit][length:u8][..data] // For other device with 1 register read/write at a time // [CN:4bit][TN:4bit][RegisterID][RegisterData] for single register #endif // NRF52840_BREAKOUT_BOARD enum recording_mode_t { RECORDING_MODE_DISABLED = 0, RECORDING_MODE_ALL = 1 }; #endif // CUSTOM_BOARD_H