@@ -59,30 +59,37 @@ Neuropixels_1::~Neuropixels_1()
59
59
60
60
int Neuropixels_1::enableDevice ()
61
61
{
62
- // Enable device streaming
63
- const oni_reg_addr_t enable_device_stream = 0x8000 ;
64
- int errorCode = oni_write_reg (ctx, deviceIdx, enable_device_stream, 1 ) ;
65
-
66
- if ( errorCode) { LOGE ( oni_error_str (errorCode)); return errorCode; }
62
+ // Get Probe SN
63
+ uint32_t eepromOffset = 0 ;
64
+ uint32_t i2cAddr = 0x50 ;
65
+ uint64_t probeSN = 0 ;
66
+ int errorCode = 0 ;
67
67
68
- // check probe SN
68
+ for (int i = 0 ; i < 8 ; i++)
69
+ {
70
+ oni_reg_addr_t reg_addr = ((eepromOffset + i) << 7 ) | i2cAddr;
71
+ oni_reg_val_t reg_val;
69
72
73
+ errorCode = oni_read_reg (ctx, deviceIdx, reg_addr, ®_val);
70
74
71
- const oni_reg_addr_t probe_sn_msb = 0x8191 ;
72
- const oni_reg_addr_t probe_sn_lsb = 0x8192 ;
75
+ if (errorCode) { LOGE (oni_error_str (errorCode)); return -1 ; }
73
76
74
- oni_reg_val_t probe_sn_msb_val;
75
- oni_reg_val_t probe_sn_lsb_val;
77
+ if (reg_val <= 0xFF )
78
+ {
79
+ probeSN |= (((uint64_t )reg_val) << (i * 8 ));
80
+ }
76
81
77
- errorCode = oni_read_reg (ctx, deviceIdx, probe_sn_msb, &probe_sn_msb_val);
78
- if (errorCode) { LOGE (oni_error_str (errorCode)); return errorCode; }
82
+ }
83
+
84
+ LOGD (" Probe SN: " , probeSN);
79
85
80
- errorCode = oni_read_reg (ctx, deviceIdx, probe_sn_lsb, &probe_sn_lsb_val);
81
- if (errorCode) { LOGE (oni_error_str (errorCode)); return errorCode; }
86
+ // Enable device streaming
87
+ const oni_reg_addr_t enable_device_stream = 0x8000 ;
88
+ errorCode = oni_write_reg (ctx, deviceIdx, enable_device_stream, 1 );
82
89
83
- uint64_t probe_sn = (( uint64_t )probe_sn_msb_val << 32 ) | ( uint64_t )probe_sn_lsb_val;
90
+ if (errorCode) { LOGE ( oni_error_str (errorCode)); return - 2 ; }
84
91
85
- LOGC ( " ******* Probe SN: " , probe_sn );
92
+ oni_write_reg (ctx, deviceIdx, ( uint32_t )NeuropixelsRegisters::OP_MODE , ( uint32_t )OpMode::RECORD );
86
93
87
94
return 0 ;
88
95
}
@@ -92,13 +99,9 @@ void Neuropixels_1::startAcquisition()
92
99
{
93
100
startThread ();
94
101
95
- int errorCode = oni_write_reg (ctx, deviceIdx, (uint32_t )NeuropixelsRegisters::REC_MOD , (uint32_t )RecMod::DIG_RESET);
96
-
97
- if (errorCode) { LOGE (" [" , deviceIdx ," ][Register][OP_MODE] " , oni_error_str (errorCode)); }
98
-
99
- errorCode = oni_write_reg (ctx, deviceIdx, (uint32_t )NeuropixelsRegisters::REC_MOD , (uint32_t )RecMod::ACTIVE);
102
+ oni_write_reg (ctx, deviceIdx, (uint32_t )NeuropixelsRegisters::REC_MOD , (uint32_t )RecMod::DIG_RESET);
100
103
101
- if (errorCode) { LOGE ( " [Neuropixels 1][ " , deviceIdx , " ] Error starting acquisition: " , oni_error_str (errorCode)); }
104
+ oni_write_reg (ctx , deviceIdx, ( uint32_t )NeuropixelsRegisters::REC_MOD , ( uint32_t )RecMod::ACTIVE);
102
105
}
103
106
104
107
void Neuropixels_1::stopAcquisition ()
@@ -108,13 +111,13 @@ void Neuropixels_1::stopAcquisition()
108
111
109
112
waitForThreadToExit (2000 );
110
113
111
- int errorCode = oni_write_reg (ctx, deviceIdx, (uint32_t )NeuropixelsRegisters::REC_MOD , (uint32_t )RecMod::RESET_ALL);
112
- if (errorCode) { LOGE (" [Neuropixels 1][" , deviceIdx ," ] Error stopping acquisition: " , oni_error_str (errorCode)); }
114
+ oni_write_reg (ctx, deviceIdx, (uint32_t )NeuropixelsRegisters::REC_MOD , (uint32_t )RecMod::RESET_ALL);
113
115
114
116
superFrameCount = 0 ;
115
117
ultraFrameCount = 0 ;
116
118
shouldAddToBuffer = false ;
117
- sampleNumber = 0 ;
119
+ apSampleNumber = 0 ;
120
+ lfpSampleNumber = 0 ;
118
121
}
119
122
120
123
@@ -131,7 +134,7 @@ void Neuropixels_1::addFrame(oni_frame_t* frame)
131
134
((uint64_t )(*(uint16_t *)(dataclock + 6 )) << 0 );
132
135
int64_t clockCounter = hubClock * sizeof (hubClock);
133
136
apTimestamps[superFrameCount] = clockCounter;
134
- apSampleNumbers[superFrameCount] = sampleNumber ++;
137
+ apSampleNumbers[superFrameCount] = apSampleNumber ++;
135
138
136
139
for (int i = 0 ; i < framesPerSuperFrame; i++)
137
140
{
@@ -141,14 +144,15 @@ void Neuropixels_1::addFrame(oni_frame_t* frame)
141
144
if (superCountOffset == 0 )
142
145
{
143
146
lfpTimestamps[ultraFrameCount] = apTimestamps[superFrameCount];
144
- lfpSampleNumbers[ultraFrameCount] = apSampleNumbers[superFrameCount] ;
147
+ lfpSampleNumbers[ultraFrameCount] = lfpSampleNumber++ ;
145
148
}
146
149
147
150
for (int adc = 0 ; adc < 32 ; adc++)
148
151
{
149
152
150
- int chanIndex = adcToChannel[adc] + superCountOffset * 2 ;
151
- lfpSamples[(chanIndex * numUltraFrames) + ultraFrameCount ] = (*(dataPtr + adcToFrameIndex[adc] + dataOffset) >> 5 ) * 0 .195f ;
153
+ int chanIndex = adcToChannel[adc] + superCountOffset * 2 ; // map the ADC to muxed channel
154
+ lfpSamples[(chanIndex * numUltraFrames) + ultraFrameCount ] =
155
+ float (*(dataPtr + adcToFrameIndex[adc] + dataOffset) >> 5 ) * 0 .195f ;
152
156
153
157
}
154
158
}
@@ -157,8 +161,9 @@ void Neuropixels_1::addFrame(oni_frame_t* frame)
157
161
int chanOffset = 2 * (i - 1 );
158
162
for (int adc = 0 ; adc < 32 ; adc++)
159
163
{
160
- int chanIndex = adcToChannel[adc] + chanOffset;
161
- apSamples[(chanIndex * superFramesPerUltraFrame * numUltraFrames) + superFrameCount] = (*(dataPtr + adcToFrameIndex[adc] + dataOffset) >> 5 ) * 0 .195f ;
164
+ int chanIndex = adcToChannel[adc] + chanOffset; // map the ADC to muxed channel.
165
+ apSamples[(chanIndex * superFramesPerUltraFrame * numUltraFrames) + superFrameCount] =
166
+ float (*(dataPtr + adcToFrameIndex[adc] + dataOffset) >> 5 ) * 0 .195f ;
162
167
}
163
168
}
164
169
}
0 commit comments