Compare commits
83 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5cb9be51f2 | |||
| f4130016bd | |||
| 8ae2e1771c | |||
| 549db3f6d4 | |||
| 54dd4bc643 | |||
| 435acb745b | |||
| 3cf2bb99f7 | |||
| 93cdfd00f2 | |||
| b10ee4de65 | |||
| 1d3068ac7c | |||
| a84cf4edc3 | |||
| fce3f53b40 | |||
| f91359ec3e | |||
| 7255be0ea5 | |||
| 66c183dee9 | |||
| f749706574 | |||
| 67725e67f6 | |||
| 2efed4fdf7 | |||
| 0c3fb07ab2 | |||
| a57eec5a0f | |||
| a0dfc60003 | |||
| f442e1dc12 | |||
| b09b14e59f | |||
| 959ea08e70 | |||
| 30a2e14e95 | |||
| 1f8136579a | |||
| f91864a24c | |||
| 5419995d45 | |||
| 8cc8a28136 | |||
| 4974e89ce7 | |||
| b3b955dfbb | |||
| 2754301a3b | |||
| 6af22653a9 | |||
| b4dc9f1256 | |||
| f6099ca1c9 | |||
| c2bdd4bc6d | |||
| 6439a17239 | |||
| f86f84bdb6 | |||
| f8639d94b0 | |||
| a4a15cfefd | |||
| 7b5368ca7d | |||
| 2dbf8a4534 | |||
| 923f1b1d0f | |||
| f7ce2ebe1d | |||
| 65019ca235 | |||
| c4a910ad79 | |||
| 11a66d2ea8 | |||
| f728bb7260 | |||
| 84e4e45a33 | |||
| 2bf3827b3d | |||
| 0fd20324bf | |||
| 3951752ab9 | |||
| 5ea0b8609f | |||
| cf4f503d3d | |||
| 6d6c0e2ef9 | |||
| e5166d7f46 | |||
| 4ac60f0c44 | |||
| e14618fb74 | |||
| 6f166a4655 | |||
| 7f706d1e29 | |||
| af6f83f0fc | |||
| 2a68967aa6 | |||
| 647c641a47 | |||
| 7e59455f00 | |||
| 81e12c0e1b | |||
| af62590ca7 | |||
| ed7aeea405 | |||
| 20fd9f3efe | |||
| fef94f8d10 | |||
| 6baa7991e8 | |||
| 368c761009 | |||
| 390c7b1cf4 | |||
| 3f9c45517c | |||
| 3fbdfa2c7c | |||
| 3d551dcd4a | |||
| 65347973dc | |||
| 963ad75b4c | |||
| b727da5901 | |||
| fa6d474409 | |||
| a1afffd0e8 | |||
| 57641a2e4c | |||
| eee659d320 | |||
| 7f988bdbe4 |
@@ -21,3 +21,9 @@ no device y=ax+b MAC a+ b+ a- b- avg
|
||||
20 EEDB EEDB A4:DA:32:D4:EE:DB 2214 -1170 2351 -24636 4.44485358085645
|
||||
21 E73A E73A A4:DA:32:D4:E7:3A 2210 -4855 2339 -16434 4.47776494604746
|
||||
22 E6CF E6CF A4:DA:32:D4:E6:CF 2135 -5206 2193 -30885 4.73462680884304
|
||||
23 E76A E76A A4:DA:32:D4:E7:6A 2076 1154 2096 -1073 4.840805202
|
||||
24 F0AC F0AC A4:DA:32:D4:F0:AC 2125 -6660 2170 -439 4.667508288
|
||||
25 E87C E87C A4:DA:32:D4:E8:7C 2265 6685 2230 2124 4.529796387
|
||||
26 EF39 EF39 A4:DA:32:D4:EF:39 1976 6641 2035 2834 5.071840495
|
||||
27 E91D E91D A4:DA:32:D4:E9:1D 2075 6344 2002 -5562 5.036438558
|
||||
28 E87A E87A A4:DA:32:D4:E8:7A 2180 6651 2254 136 4.60339152
|
||||
|
||||
@@ -79,7 +79,7 @@ const PIN_Config BoardGpioInitTable[] = {
|
||||
Board_BTN1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS, /* Button is active low */
|
||||
Board_BTN2 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS, /* Button is active low */
|
||||
Board_SPI_FLASH_CS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN, /* External flash chip select */
|
||||
Board_UART_RX | PIN_INPUT_EN | PIN_PULLUP, /* UART RX via debugger back channel */
|
||||
Board_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN, /* UART RX via debugger back channel */
|
||||
Board_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL, /* UART TX via debugger back channel */
|
||||
Board_SPI0_MOSI | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI master out - slave in */
|
||||
Board_SPI0_MISO | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI master in - slave out */
|
||||
|
||||
@@ -80,8 +80,8 @@ extern const PIN_Config BoardGpioInitTable[];
|
||||
#define Board_BTN2 IOID_14
|
||||
|
||||
/* UART Board */
|
||||
#define Board_UART_RX IOID_25 /* RXD */
|
||||
#define Board_UART_TX IOID_26 /* TXD */
|
||||
#define Board_UART_RX IOID_2 /* RXD */
|
||||
#define Board_UART_TX IOID_3 /* TXD */
|
||||
#define Board_UART_CTS IOID_19 /* CTS */
|
||||
#define Board_UART_RTS IOID_18 /* RTS */
|
||||
|
||||
|
||||
+59
-16
@@ -23,7 +23,7 @@ Instruction Specification
|
||||
|
||||
file defined:
|
||||
|
||||
Bio_Pro_Sci / �� / Pi3/DataServer / CC2650 / CC2650���誘銵�
|
||||
Bio_Pro_Sci / 嚙踝蕭��赤 / Pi3/DataServer / CC2650 / CC2650嚙踐垓��蕭嚙踝隤嚙�
|
||||
|
||||
```
|
||||
struct instruction {
|
||||
@@ -93,6 +93,20 @@ instruction operator
|
||||
#include <ti/sysbios/knl/Semaphore.h>
|
||||
#include "simple_gatt_profile.h"
|
||||
|
||||
|
||||
/** State for SPI (SPI callback to do task) **/
|
||||
typedef enum {
|
||||
CLOSE_SPI, // close SPI after MISO transmit
|
||||
CONTINUOUS_TRANS, // transmit DBS data
|
||||
FLUSH_BUFFER, // clean SPI buffer, used after a "write" SPI instruction (MISO)
|
||||
FLUSH_BUFFER2, // clean SPI buffer twice
|
||||
READ_REG, // read DBS register value, used after a "read" SPI instruction (MISO)
|
||||
READ_REG2, // read DBS register value, used after a "read" SPI instruction (MISO)
|
||||
END_TRANSMIT, // read DBS register value, used after a "read" SPI instruction (MISO)
|
||||
ONE_SHOT_SPI, // end spi instruction
|
||||
READ_MOSI
|
||||
} SPI_CB_MODE;
|
||||
|
||||
/*========================
|
||||
==== Global Variable ====
|
||||
=========================*/
|
||||
@@ -100,10 +114,41 @@ instruction operator
|
||||
static bool STI = false;
|
||||
static bool IsFirstData = true;
|
||||
static uint8_t spi_state_counter = 0;
|
||||
static uint8_t check_reg_counter = 0;
|
||||
static bool ConnectState = false;
|
||||
static bool ErrorRestart = false;
|
||||
static bool turn_off_sti = false;
|
||||
static uint8_t SPICallBack = 0;
|
||||
static SPI_CB_MODE SPICallBack;
|
||||
static uint8 adc_spi_en_switch = 1;
|
||||
|
||||
/*
|
||||
* Let C = command, S = status;
|
||||
* StiCommand = 0b00CC_00SS
|
||||
* The first C is record command, the second is sti
|
||||
* The first S is record status, the second is sti
|
||||
*
|
||||
* rec_sti_command | meaning |
|
||||
* 0x00 | command = interrupt; status = idle |
|
||||
* 0x01 | command = interrupt; status = sti without rec |
|
||||
* 0x02 | command = interrupt; status = rec without sti |
|
||||
* 0x03 | command = interrupt; status = sti & rec |
|
||||
* 0x10 | command = start rec; status = idle |
|
||||
* 0x11 | command = start rec; status = sti without rec |
|
||||
* 0x12 | command = start rec; status = rec without sti |
|
||||
* 0x13 | command = start rec; status = sti & rec |
|
||||
* 0x20 | command = start sti; status = idle |
|
||||
* 0x21 | command = start sti; status = sti without rec |
|
||||
* 0x22 | command = start sti; status = rec without sti |
|
||||
* 0x23 | command = start sti; status = sti & rec |
|
||||
* 0x30 | command = rec & sti; status = idle |
|
||||
* 0x31 | command = rec & sti; status = sti without rec |
|
||||
* 0x32 | command = rec & sti; status = rec without sti |
|
||||
* 0x33 | command = rec & sti; status = sti & rec |
|
||||
*/
|
||||
#define ENABLE_REC 0x20
|
||||
#define ENABLE_STI 0x10
|
||||
#define STATUS_REC 0x02
|
||||
#define STATUS_STI 0x01
|
||||
static uint8_t rec_sti_command = 0x00; // 0=NOP; 0x01=stop; 2=start;
|
||||
|
||||
/*======================
|
||||
==== event control ====
|
||||
@@ -169,6 +214,7 @@ extern ICall_Semaphore semaphore;
|
||||
// command return characteristic
|
||||
#define BLE_CDR_BUFF_CHAR SIMPLEPROFILE_CHAR2
|
||||
#define BLE_CDR_BUFF_SIZE SIMPLEPROFILE_CHAR2_LEN
|
||||
#define BLE_CDR_SAMLL_SIZE 10
|
||||
|
||||
// instruction input characteristic
|
||||
#define BLE_INS_BUFF_CHAR SIMPLEPROFILE_CHAR3
|
||||
@@ -193,19 +239,18 @@ extern ICall_Semaphore semaphore;
|
||||
#define INS_TYPE_VIS 0xC0
|
||||
#define INS_TYPE_CIS 0x70
|
||||
|
||||
// RIS operator
|
||||
#define RIS_SEND_UART 0x01
|
||||
#define RIS_PREPARE_SEND 0x02
|
||||
|
||||
|
||||
// VIS operator
|
||||
#define VIS_ASK 0x30
|
||||
#define VIS_REC 0x10
|
||||
#define VIS_STI 0x20
|
||||
#define VIS_STOP_REC 0x30
|
||||
#define VIS_STOP_STI 0x40
|
||||
#define VIS_ASK 0x50
|
||||
#define VIS_INT 0x60
|
||||
#define VIS_STI 0x90
|
||||
#define VIS_FAST_SET 0x70
|
||||
#define VIS_EN_ADC_CLK 0x80
|
||||
#define VIS_CAL 0xA0
|
||||
#define VIS_START 0xC0
|
||||
#define VIS_RST 0xF0
|
||||
#define VIS_STOP_STI 0x01
|
||||
|
||||
|
||||
// CIS operator
|
||||
@@ -311,7 +356,7 @@ static uint16_t CONNECT_HANDLE = 0;
|
||||
/**
|
||||
* command instruction buffer
|
||||
*/
|
||||
static uint8_t cdr_buf[BLE_CDR_BUFF_SIZE] = {0};
|
||||
static uint8_t cdr_buf[BLE_CDR_SAMLL_SIZE] = {0};
|
||||
|
||||
/*====================
|
||||
==== event table ====
|
||||
@@ -389,6 +434,8 @@ static void headstage_update_instruction(uint8_t *instruction) {
|
||||
uint8_t ins_oper = instruction[1] & 0xF0;
|
||||
uint8_t ins_len = instruction[1] & 0x0F;
|
||||
|
||||
|
||||
|
||||
switch (ins_type) {
|
||||
case INS_TYPE_RIS: {
|
||||
headstage_update_ris_instruction(ins_len, instruction + 2);
|
||||
@@ -409,10 +456,6 @@ static void headstage_update_instruction(uint8_t *instruction) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+19
-15
@@ -23,25 +23,29 @@ static void CaliTable2u8(uint8_t* cali){
|
||||
* - .......
|
||||
*/
|
||||
static void SendCaliValue(uint8_t CaliNumber){
|
||||
uint8_t ch, cdr_buf[10];
|
||||
uint8_t ch, cali_buf[BLE_CDR_BUFF_SIZE];
|
||||
|
||||
ch = 2 * (CaliNumber % 4);
|
||||
uint8_t gain_level = CaliNumber / 4; // 0:gain, 1:offset
|
||||
// ch = 2 * (CaliNumber % 4);
|
||||
// uint8_t gain_level = CaliNumber / 4; // 0:gain, 1:offset
|
||||
uint8_t channel_number = 8, index = 1;
|
||||
uint8_t gain_level = 0;
|
||||
|
||||
cdr_buf[0] = CHIP_ID;
|
||||
if(CaliNumber < 4){
|
||||
gain_level = CaliNumber;
|
||||
}
|
||||
|
||||
cdr_buf[1] = (uint8_t) (CaliTable.Ch[ch].Gain[gain_level] >> 8) & 0xFF;
|
||||
cdr_buf[2] = (uint8_t) CaliTable.Ch[ch].Gain[gain_level] & 0x00FF;
|
||||
cdr_buf[3] = (uint8_t) (CaliTable.Ch[ch].Offset[gain_level] >> 8) & 0xFF;
|
||||
cdr_buf[4] = (uint8_t) CaliTable.Ch[ch].Offset[gain_level] & 0x00FF;
|
||||
cdr_buf[5] = (uint8_t) (CaliTable.Ch[ch+1].Gain[gain_level] >> 8) & 0xFF;
|
||||
cdr_buf[6] = (uint8_t) CaliTable.Ch[ch+1].Gain[gain_level] & 0x00FF;
|
||||
cdr_buf[7] = (uint8_t) (CaliTable.Ch[ch+1].Offset[gain_level] >> 8) & 0xFF;
|
||||
cdr_buf[8] = (uint8_t) CaliTable.Ch[ch+1].Offset[gain_level] & 0x00FF;
|
||||
cali_buf[0] = CHIP_ID;
|
||||
for(int i=0 ; i<channel_number ; i++){
|
||||
cali_buf[index++] = (uint8_t) (CaliTable.Ch[i].Gain[gain_level] >> 8) & 0xFF;
|
||||
cali_buf[index++] = (uint8_t) CaliTable.Ch[i].Gain[gain_level] & 0x00FF;
|
||||
cali_buf[index++] = (uint8_t) (CaliTable.Ch[i].Offset[gain_level] >> 8) & 0xFF;
|
||||
cali_buf[index++] = (uint8_t) CaliTable.Ch[i].Offset[gain_level] & 0x00FF;
|
||||
}
|
||||
|
||||
cdr_buf[9] = 0; // don't care
|
||||
|
||||
SimpleProfile_SetParameter(BLE_CDR_BUFF_CHAR, BLE_CDR_BUFF_SIZE, cdr_buf);
|
||||
// for(int i=1 ; i<BLE_CDR_BUFF_SIZE ; i++){
|
||||
// cali_buf[i] = i;
|
||||
// }
|
||||
SimpleProfile_SetParameter(BLE_CDR_BUFF_CHAR, index, cali_buf);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
+48
@@ -94,6 +94,54 @@ struct _StiCaliStiTable{
|
||||
.n_ch.offset = -20346
|
||||
};
|
||||
|
||||
#elif defined(BOARD_A4_DA_32_D4_E9_1D)
|
||||
{
|
||||
.p_ch.coefficient = 2075,
|
||||
.p_ch.offset = 6344,
|
||||
.n_ch.coefficient = 2002,
|
||||
.n_ch.offset = -5562
|
||||
};
|
||||
|
||||
#elif defined(BOARD_A4_DA_32_D4_E8_7A)
|
||||
{
|
||||
.p_ch.coefficient = 2180,
|
||||
.p_ch.offset = 6651,
|
||||
.n_ch.coefficient = 2254,
|
||||
.n_ch.offset = 136
|
||||
};
|
||||
|
||||
#elif defined(BOARD_A4_DA_32_D4_F0_AC)
|
||||
{
|
||||
.p_ch.coefficient = 2125,
|
||||
.p_ch.offset = -6660,
|
||||
.n_ch.coefficient = 2170,
|
||||
.n_ch.offset = -439
|
||||
};
|
||||
|
||||
#elif defined(BOARD_A4_DA_32_D4_E8_7C)
|
||||
{
|
||||
.p_ch.coefficient = 2265,
|
||||
.p_ch.offset = 6685,
|
||||
.n_ch.coefficient = 2230,
|
||||
.n_ch.offset = 2124
|
||||
};
|
||||
|
||||
#elif defined(BOARD_A4_DA_32_D4_EF_39)
|
||||
{
|
||||
.p_ch.coefficient = 1976,
|
||||
.p_ch.offset = 6641,
|
||||
.n_ch.coefficient = 2035,
|
||||
.n_ch.offset = 2834
|
||||
};
|
||||
|
||||
#elif defined(BOARD_A4_DA_32_D4_E7_6A)
|
||||
{
|
||||
.p_ch.coefficient = 2076,
|
||||
.p_ch.offset = 1154,
|
||||
.n_ch.coefficient = 2096,
|
||||
.n_ch.offset = -1073
|
||||
};
|
||||
|
||||
#elif defined(BOARD_A4_DA_32_D4_E8_E6)
|
||||
{
|
||||
.p_ch.coefficient = 2306,
|
||||
|
||||
+543
-60
@@ -83,9 +83,9 @@ struct _CaliTable{
|
||||
.Ch[7].Offset[3] = 0
|
||||
};
|
||||
|
||||
#elif defined(BOARD_18_04_ED_37_C7_38)
|
||||
#elif defined(BOARD_80_6F_B0_ED_7A_34)
|
||||
{
|
||||
.DeviceName = "BOARD_18_04_ED_37_C7_38",
|
||||
.DeviceName = "BOARD_80_6F_B0_ED_7A_34",
|
||||
.Ch[0].Gain[0] = 48,
|
||||
.Ch[0].Offset[0] = 49,
|
||||
.Ch[1].Gain[0] = 49,
|
||||
@@ -1328,70 +1328,70 @@ struct _CaliTable{
|
||||
#elif defined(BOARD_A4_DA_32_D4_E8_71)
|
||||
{
|
||||
.DeviceName = "BOARD_A4_DA_32_D4_E8_71",
|
||||
.Ch[0].Gain[0] = 48,
|
||||
.Ch[0].Offset[0] = -10,
|
||||
.Ch[1].Gain[0] = 41,
|
||||
.Ch[1].Offset[0] = -10,
|
||||
.Ch[0].Gain[0] = 13,
|
||||
.Ch[0].Offset[0] = -9,
|
||||
.Ch[1].Gain[0] = 47,
|
||||
.Ch[1].Offset[0] = -11,
|
||||
.Ch[2].Gain[0] = 48,
|
||||
.Ch[2].Offset[0] = -3,
|
||||
.Ch[2].Offset[0] = -1,
|
||||
.Ch[3].Gain[0] = 48,
|
||||
.Ch[3].Offset[0] = -14,
|
||||
.Ch[3].Offset[0] = -3,
|
||||
.Ch[4].Gain[0] = 12,
|
||||
.Ch[4].Offset[0] = 17,
|
||||
.Ch[4].Offset[0] = 18,
|
||||
.Ch[5].Gain[0] = 48,
|
||||
.Ch[5].Offset[0] = -3,
|
||||
.Ch[5].Offset[0] = -4,
|
||||
.Ch[6].Gain[0] = 13,
|
||||
.Ch[6].Offset[0] = -8,
|
||||
.Ch[6].Offset[0] = -9,
|
||||
.Ch[7].Gain[0] = 46,
|
||||
.Ch[7].Offset[0] = -13,
|
||||
.Ch[0].Gain[1] = 355,
|
||||
.Ch[0].Offset[1] = -30,
|
||||
.Ch[1].Gain[1] = 300,
|
||||
.Ch[1].Offset[1] = -78,
|
||||
.Ch[2].Gain[1] = 356,
|
||||
.Ch[2].Offset[1] = -28,
|
||||
.Ch[3].Gain[1] = 356,
|
||||
.Ch[3].Offset[1] = -110,
|
||||
.Ch[4].Gain[1] = 93,
|
||||
.Ch[4].Offset[1] = 117,
|
||||
.Ch[5].Gain[1] = 355,
|
||||
.Ch[5].Offset[1] = -29,
|
||||
.Ch[6].Gain[1] = 90,
|
||||
.Ch[6].Offset[1] = -64,
|
||||
.Ch[7].Gain[1] = 339,
|
||||
.Ch[7].Offset[1] = -103,
|
||||
.Ch[0].Gain[2] = 1529,
|
||||
.Ch[0].Offset[2] = -143,
|
||||
.Ch[1].Gain[2] = 1295,
|
||||
.Ch[1].Offset[2] = -337,
|
||||
.Ch[2].Gain[2] = 1520,
|
||||
.Ch[2].Offset[2] = -129,
|
||||
.Ch[3].Gain[2] = 1507,
|
||||
.Ch[3].Offset[2] = -472,
|
||||
.Ch[4].Gain[2] = 391,
|
||||
.Ch[4].Offset[2] = 500,
|
||||
.Ch[5].Gain[2] = 1519,
|
||||
.Ch[5].Offset[2] = -127,
|
||||
.Ch[6].Gain[2] = 404,
|
||||
.Ch[6].Offset[2] = -284,
|
||||
.Ch[7].Gain[2] = 1433,
|
||||
.Ch[7].Offset[2] = -445,
|
||||
.Ch[0].Gain[3] = 3254,
|
||||
.Ch[0].Offset[3] = -305,
|
||||
.Ch[1].Gain[3] = 2640,
|
||||
.Ch[1].Offset[3] = -712,
|
||||
.Ch[2].Gain[3] = 3195,
|
||||
.Ch[2].Offset[3] = -275,
|
||||
.Ch[3].Gain[3] = 2768,
|
||||
.Ch[3].Offset[3] = -947,
|
||||
.Ch[4].Gain[3] = 739,
|
||||
.Ch[4].Offset[3] = 1030,
|
||||
.Ch[5].Gain[3] = 3188,
|
||||
.Ch[5].Offset[3] = -280,
|
||||
.Ch[6].Gain[3] = 843,
|
||||
.Ch[6].Offset[3] = -599,
|
||||
.Ch[7].Gain[3] = 2680,
|
||||
.Ch[7].Offset[3] = -906
|
||||
.Ch[7].Offset[0] = -14,
|
||||
.Ch[0].Gain[1] = 91,
|
||||
.Ch[0].Offset[1] = -72,
|
||||
.Ch[1].Gain[1] = 351,
|
||||
.Ch[1].Offset[1] = -84,
|
||||
.Ch[2].Gain[1] = 352,
|
||||
.Ch[2].Offset[1] = -11,
|
||||
.Ch[3].Gain[1] = 353,
|
||||
.Ch[3].Offset[1] = -30,
|
||||
.Ch[4].Gain[1] = 92,
|
||||
.Ch[4].Offset[1] = 126,
|
||||
.Ch[5].Gain[1] = 351,
|
||||
.Ch[5].Offset[1] = -36,
|
||||
.Ch[6].Gain[1] = 93,
|
||||
.Ch[6].Offset[1] = -73,
|
||||
.Ch[7].Gain[1] = 342,
|
||||
.Ch[7].Offset[1] = -109,
|
||||
.Ch[0].Gain[2] = 375,
|
||||
.Ch[0].Offset[2] = -320,
|
||||
.Ch[1].Gain[2] = 1499,
|
||||
.Ch[1].Offset[2] = -371,
|
||||
.Ch[2].Gain[2] = 1508,
|
||||
.Ch[2].Offset[2] = -47,
|
||||
.Ch[3].Gain[2] = 1504,
|
||||
.Ch[3].Offset[2] = -114,
|
||||
.Ch[4].Gain[2] = 383,
|
||||
.Ch[4].Offset[2] = 538,
|
||||
.Ch[5].Gain[2] = 1505,
|
||||
.Ch[5].Offset[2] = -155,
|
||||
.Ch[6].Gain[2] = 402,
|
||||
.Ch[6].Offset[2] = -309,
|
||||
.Ch[7].Gain[2] = 1456,
|
||||
.Ch[7].Offset[2] = -470,
|
||||
.Ch[0].Gain[3] = 753,
|
||||
.Ch[0].Offset[3] = -682,
|
||||
.Ch[1].Gain[3] = 2689,
|
||||
.Ch[1].Offset[3] = -680,
|
||||
.Ch[2].Gain[3] = 3107,
|
||||
.Ch[2].Offset[3] = -91,
|
||||
.Ch[3].Gain[3] = 3054,
|
||||
.Ch[3].Offset[3] = -225,
|
||||
.Ch[4].Gain[3] = 669,
|
||||
.Ch[4].Offset[3] = 1101,
|
||||
.Ch[5].Gain[3] = 3007,
|
||||
.Ch[5].Offset[3] = -295,
|
||||
.Ch[6].Gain[3] = 844,
|
||||
.Ch[6].Offset[3] = -670,
|
||||
.Ch[7].Gain[3] = 2390,
|
||||
.Ch[7].Offset[3] = -834
|
||||
};
|
||||
|
||||
#elif defined(BOARD_A4_DA_32_D4_E7_3B)
|
||||
@@ -1946,6 +1946,489 @@ struct _CaliTable{
|
||||
.Ch[7].Offset[3] = -1263
|
||||
};
|
||||
|
||||
#elif defined(BOARD_A4_DA_32_D4_E7_6A)
|
||||
{
|
||||
.DeviceName = "BOARD_A4_DA_32_D4_E7_6A",
|
||||
.Ch[0].Gain[0] = 47,
|
||||
.Ch[0].Offset[0] = -14,
|
||||
.Ch[1].Gain[0] = 47,
|
||||
.Ch[1].Offset[0] = -26,
|
||||
.Ch[2].Gain[0] = 47,
|
||||
.Ch[2].Offset[0] = -16,
|
||||
.Ch[3].Gain[0] = 47,
|
||||
.Ch[3].Offset[0] = -39,
|
||||
.Ch[4].Gain[0] = 47,
|
||||
.Ch[4].Offset[0] = 7,
|
||||
.Ch[5].Gain[0] = 47,
|
||||
.Ch[5].Offset[0] = 8,
|
||||
.Ch[6].Gain[0] = 44,
|
||||
.Ch[6].Offset[0] = -33,
|
||||
.Ch[7].Gain[0] = 44,
|
||||
.Ch[7].Offset[0] = -35,
|
||||
.Ch[0].Gain[1] = 343,
|
||||
.Ch[0].Offset[1] = 2,
|
||||
.Ch[1].Gain[1] = 343,
|
||||
.Ch[1].Offset[1] = -90,
|
||||
.Ch[2].Gain[1] = 344,
|
||||
.Ch[2].Offset[1] = -25,
|
||||
.Ch[3].Gain[1] = 344,
|
||||
.Ch[3].Offset[1] = -184,
|
||||
.Ch[4].Gain[1] = 344,
|
||||
.Ch[4].Offset[1] = 163,
|
||||
.Ch[5].Gain[1] = 342,
|
||||
.Ch[5].Offset[1] = 161,
|
||||
.Ch[6].Gain[1] = 324,
|
||||
.Ch[6].Offset[1] = -133,
|
||||
.Ch[7].Gain[1] = 322,
|
||||
.Ch[7].Offset[1] = -149,
|
||||
.Ch[0].Gain[2] = 1409,
|
||||
.Ch[0].Offset[2] = 51,
|
||||
.Ch[1].Gain[2] = 1405,
|
||||
.Ch[1].Offset[2] = -325,
|
||||
.Ch[2].Gain[2] = 1401,
|
||||
.Ch[2].Offset[2] = -47,
|
||||
.Ch[3].Gain[2] = 1370,
|
||||
.Ch[3].Offset[2] = -691,
|
||||
.Ch[4].Gain[2] = 1364,
|
||||
.Ch[4].Offset[2] = 714,
|
||||
.Ch[5].Gain[2] = 1359,
|
||||
.Ch[5].Offset[2] = 695,
|
||||
.Ch[6].Gain[2] = 1323,
|
||||
.Ch[6].Offset[2] = -491,
|
||||
.Ch[7].Gain[2] = 1314,
|
||||
.Ch[7].Offset[2] = -559,
|
||||
.Ch[0].Gain[3] = 2771,
|
||||
.Ch[0].Offset[3] = 117,
|
||||
.Ch[1].Gain[3] = 2625,
|
||||
.Ch[1].Offset[3] = -594,
|
||||
.Ch[2].Gain[3] = 2738,
|
||||
.Ch[2].Offset[3] = -72,
|
||||
.Ch[3].Gain[3] = 1933,
|
||||
.Ch[3].Offset[3] = -1147,
|
||||
.Ch[4].Gain[3] = 1731,
|
||||
.Ch[4].Offset[3] = 1168,
|
||||
.Ch[5].Gain[3] = 1833,
|
||||
.Ch[5].Offset[3] = 1171,
|
||||
.Ch[6].Gain[3] = 2215,
|
||||
.Ch[6].Offset[3] = -859,
|
||||
.Ch[7].Gain[3] = 2086,
|
||||
.Ch[7].Offset[3] = -964
|
||||
};
|
||||
|
||||
#elif defined(BOARD_A4_DA_32_D4_E8_7A)
|
||||
{
|
||||
.DeviceName = "BOARD_A4_DA_32_D4_E8_7A",
|
||||
.Ch[0].Gain[0] = 50,
|
||||
.Ch[0].Offset[0] = 17,
|
||||
.Ch[1].Gain[0] = 13,
|
||||
.Ch[1].Offset[0] = 20,
|
||||
.Ch[2].Gain[0] = 50,
|
||||
.Ch[2].Offset[0] = 34,
|
||||
.Ch[3].Gain[0] = 12,
|
||||
.Ch[3].Offset[0] = 28,
|
||||
.Ch[4].Gain[0] = 50,
|
||||
.Ch[4].Offset[0] = 9,
|
||||
.Ch[5].Gain[0] = 50,
|
||||
.Ch[5].Offset[0] = 30,
|
||||
.Ch[6].Gain[0] = 48,
|
||||
.Ch[6].Offset[0] = 22,
|
||||
.Ch[7].Gain[0] = 47,
|
||||
.Ch[7].Offset[0] = 12,
|
||||
.Ch[0].Gain[1] = 368,
|
||||
.Ch[0].Offset[1] = 21,
|
||||
.Ch[1].Gain[1] = 94,
|
||||
.Ch[1].Offset[1] = 37,
|
||||
.Ch[2].Gain[1] = 368,
|
||||
.Ch[2].Offset[1] = 144,
|
||||
.Ch[3].Gain[1] = 91,
|
||||
.Ch[3].Offset[1] = 99,
|
||||
.Ch[4].Gain[1] = 368,
|
||||
.Ch[4].Offset[1] = -39,
|
||||
.Ch[5].Gain[1] = 367,
|
||||
.Ch[5].Offset[1] = 115,
|
||||
.Ch[6].Gain[1] = 354,
|
||||
.Ch[6].Offset[1] = 53,
|
||||
.Ch[7].Gain[1] = 351,
|
||||
.Ch[7].Offset[1] = -16,
|
||||
.Ch[0].Gain[2] = 1545,
|
||||
.Ch[0].Offset[2] = 34,
|
||||
.Ch[1].Gain[2] = 397,
|
||||
.Ch[1].Offset[2] = 103,
|
||||
.Ch[2].Gain[2] = 1536,
|
||||
.Ch[2].Offset[2] = 551,
|
||||
.Ch[3].Gain[2] = 379,
|
||||
.Ch[3].Offset[2] = 340,
|
||||
.Ch[4].Gain[2] = 1524,
|
||||
.Ch[4].Offset[2] = -214,
|
||||
.Ch[5].Gain[2] = 1527,
|
||||
.Ch[5].Offset[2] = 428,
|
||||
.Ch[6].Gain[2] = 1484,
|
||||
.Ch[6].Offset[2] = 157,
|
||||
.Ch[7].Gain[2] = 1477,
|
||||
.Ch[7].Offset[2] = -134,
|
||||
.Ch[0].Gain[3] = 3161,
|
||||
.Ch[0].Offset[3] = 52,
|
||||
.Ch[1].Gain[3] = 796,
|
||||
.Ch[1].Offset[3] = 189,
|
||||
.Ch[2].Gain[3] = 2475,
|
||||
.Ch[2].Offset[3] = 960,
|
||||
.Ch[3].Gain[3] = 747,
|
||||
.Ch[3].Offset[3] = 685,
|
||||
.Ch[4].Gain[3] = 2956,
|
||||
.Ch[4].Offset[3] = -425,
|
||||
.Ch[5].Gain[3] = 2709,
|
||||
.Ch[5].Offset[3] = 776,
|
||||
.Ch[6].Gain[3] = 2968,
|
||||
.Ch[6].Offset[3] = 300,
|
||||
.Ch[7].Gain[3] = 2970,
|
||||
.Ch[7].Offset[3] = -278
|
||||
};
|
||||
|
||||
#elif defined(BOARD_A4_DA_32_D4_F0_AC)
|
||||
{
|
||||
.DeviceName = "BOARD_A4_DA_32_D4_F0_AC",
|
||||
.Ch[0].Gain[0] = 50,
|
||||
.Ch[0].Offset[0] = -2,
|
||||
.Ch[1].Gain[0] = 51,
|
||||
.Ch[1].Offset[0] = 38,
|
||||
.Ch[2].Gain[0] = 50,
|
||||
.Ch[2].Offset[0] = 63,
|
||||
.Ch[3].Gain[0] = 50,
|
||||
.Ch[3].Offset[0] = 38,
|
||||
.Ch[4].Gain[0] = 51,
|
||||
.Ch[4].Offset[0] = 42,
|
||||
.Ch[5].Gain[0] = 50,
|
||||
.Ch[5].Offset[0] = 44,
|
||||
.Ch[6].Gain[0] = 48,
|
||||
.Ch[6].Offset[0] = 26,
|
||||
.Ch[7].Gain[0] = 47,
|
||||
.Ch[7].Offset[0] = 5,
|
||||
.Ch[0].Gain[1] = 372,
|
||||
.Ch[0].Offset[1] = -216,
|
||||
.Ch[1].Gain[1] = 372,
|
||||
.Ch[1].Offset[1] = 74,
|
||||
.Ch[2].Gain[1] = 373,
|
||||
.Ch[2].Offset[1] = 261,
|
||||
.Ch[3].Gain[1] = 374,
|
||||
.Ch[3].Offset[1] = 66,
|
||||
.Ch[4].Gain[1] = 373,
|
||||
.Ch[4].Offset[1] = 100,
|
||||
.Ch[5].Gain[1] = 372,
|
||||
.Ch[5].Offset[1] = 126,
|
||||
.Ch[6].Gain[1] = 359,
|
||||
.Ch[6].Offset[1] = -5,
|
||||
.Ch[7].Gain[1] = 358,
|
||||
.Ch[7].Offset[1] = -159,
|
||||
.Ch[0].Gain[2] = 1433,
|
||||
.Ch[0].Offset[2] = -986,
|
||||
.Ch[1].Gain[2] = 1547,
|
||||
.Ch[1].Offset[2] = 208,
|
||||
.Ch[2].Gain[2] = 1468,
|
||||
.Ch[2].Offset[2] = 965,
|
||||
.Ch[3].Gain[2] = 1543,
|
||||
.Ch[3].Offset[2] = 172,
|
||||
.Ch[4].Gain[2] = 1540,
|
||||
.Ch[4].Offset[2] = 312,
|
||||
.Ch[5].Gain[2] = 1533,
|
||||
.Ch[5].Offset[2] = 419,
|
||||
.Ch[6].Gain[2] = 1492,
|
||||
.Ch[6].Offset[2] = -117,
|
||||
.Ch[7].Gain[2] = 1446,
|
||||
.Ch[7].Offset[2] = -753,
|
||||
.Ch[0].Gain[3] = 1192,
|
||||
.Ch[0].Offset[3] = -1501,
|
||||
.Ch[1].Gain[3] = 3031,
|
||||
.Ch[1].Offset[3] = 364,
|
||||
.Ch[2].Gain[3] = 1467,
|
||||
.Ch[2].Offset[3] = 1467,
|
||||
.Ch[3].Gain[3] = 3036,
|
||||
.Ch[3].Offset[3] = 302,
|
||||
.Ch[4].Gain[3] = 2897,
|
||||
.Ch[4].Offset[3] = 552,
|
||||
.Ch[5].Gain[3] = 2699,
|
||||
.Ch[5].Offset[3] = 731,
|
||||
.Ch[6].Gain[3] = 2897,
|
||||
.Ch[6].Offset[3] = -241,
|
||||
.Ch[7].Gain[3] = 1747,
|
||||
.Ch[7].Offset[3] = -1243
|
||||
};
|
||||
|
||||
#elif defined(BOARD_A4_DA_32_D4_E8_7C)
|
||||
{
|
||||
.DeviceName = "BOARD_A4_DA_32_D4_E8_7C",
|
||||
.Ch[0].Gain[0] = 49,
|
||||
.Ch[0].Offset[0] = 75,
|
||||
.Ch[1].Gain[0] = 49,
|
||||
.Ch[1].Offset[0] = 32,
|
||||
.Ch[2].Gain[0] = 49,
|
||||
.Ch[2].Offset[0] = 46,
|
||||
.Ch[3].Gain[0] = 49,
|
||||
.Ch[3].Offset[0] = 50,
|
||||
.Ch[4].Gain[0] = 13,
|
||||
.Ch[4].Offset[0] = 46,
|
||||
.Ch[5].Gain[0] = 49,
|
||||
.Ch[5].Offset[0] = 45,
|
||||
.Ch[6].Gain[0] = 47,
|
||||
.Ch[6].Offset[0] = 36,
|
||||
.Ch[7].Gain[0] = 46,
|
||||
.Ch[7].Offset[0] = 52,
|
||||
.Ch[0].Gain[1] = 364,
|
||||
.Ch[0].Offset[1] = 229,
|
||||
.Ch[1].Gain[1] = 362,
|
||||
.Ch[1].Offset[1] = -101,
|
||||
.Ch[2].Gain[1] = 365,
|
||||
.Ch[2].Offset[1] = 6,
|
||||
.Ch[3].Gain[1] = 365,
|
||||
.Ch[3].Offset[1] = 47,
|
||||
.Ch[4].Gain[1] = 96,
|
||||
.Ch[4].Offset[1] = 0,
|
||||
.Ch[5].Gain[1] = 363,
|
||||
.Ch[5].Offset[1] = 9,
|
||||
.Ch[6].Gain[1] = 354,
|
||||
.Ch[6].Offset[1] = -51,
|
||||
.Ch[7].Gain[1] = 353,
|
||||
.Ch[7].Offset[1] = 54,
|
||||
.Ch[0].Gain[2] = 1490,
|
||||
.Ch[0].Offset[2] = 786,
|
||||
.Ch[1].Gain[2] = 1472,
|
||||
.Ch[1].Offset[2] = -584,
|
||||
.Ch[2].Gain[2] = 1502,
|
||||
.Ch[2].Offset[2] = -140,
|
||||
.Ch[3].Gain[2] = 1485,
|
||||
.Ch[3].Offset[2] = 47,
|
||||
.Ch[4].Gain[2] = 382,
|
||||
.Ch[4].Offset[2] = -171,
|
||||
.Ch[5].Gain[2] = 1483,
|
||||
.Ch[5].Offset[2] = -122,
|
||||
.Ch[6].Gain[2] = 1417,
|
||||
.Ch[6].Offset[2] = -367,
|
||||
.Ch[7].Gain[2] = 1437,
|
||||
.Ch[7].Offset[2] = 57,
|
||||
.Ch[0].Gain[3] = 1963,
|
||||
.Ch[0].Offset[3] = 1285,
|
||||
.Ch[1].Gain[3] = 2229,
|
||||
.Ch[1].Offset[3] = -1011,
|
||||
.Ch[2].Gain[3] = 2925,
|
||||
.Ch[2].Offset[3] = -289,
|
||||
.Ch[3].Gain[3] = 2903,
|
||||
.Ch[3].Offset[3] = 12,
|
||||
.Ch[4].Gain[3] = 747,
|
||||
.Ch[4].Offset[3] = -351,
|
||||
.Ch[5].Gain[3] = 2881,
|
||||
.Ch[5].Offset[3] = -284,
|
||||
.Ch[6].Gain[3] = 2588,
|
||||
.Ch[6].Offset[3] = -718,
|
||||
.Ch[7].Gain[3] = 2953,
|
||||
.Ch[7].Offset[3] = 71
|
||||
};
|
||||
|
||||
#elif defined(BOARD_18_04_ED_37_C6_41)
|
||||
{
|
||||
.DeviceName = "BOARD_18_04_ED_37_C6_41",
|
||||
.Ch[0].Gain[0] = 47,
|
||||
.Ch[0].Offset[0] = 3,
|
||||
.Ch[1].Gain[0] = 47,
|
||||
.Ch[1].Offset[0] = 7,
|
||||
.Ch[2].Gain[0] = 47,
|
||||
.Ch[2].Offset[0] = 19,
|
||||
.Ch[3].Gain[0] = 47,
|
||||
.Ch[3].Offset[0] = 16,
|
||||
.Ch[4].Gain[0] = 48,
|
||||
.Ch[4].Offset[0] = 34,
|
||||
.Ch[5].Gain[0] = 12,
|
||||
.Ch[5].Offset[0] = 19,
|
||||
.Ch[6].Gain[0] = 13,
|
||||
.Ch[6].Offset[0] = -2,
|
||||
.Ch[7].Gain[0] = 46,
|
||||
.Ch[7].Offset[0] = -18,
|
||||
.Ch[0].Gain[1] = 351,
|
||||
.Ch[0].Offset[1] = -109,
|
||||
.Ch[1].Gain[1] = 351,
|
||||
.Ch[1].Offset[1] = -78,
|
||||
.Ch[2].Gain[1] = 353,
|
||||
.Ch[2].Offset[1] = 13,
|
||||
.Ch[3].Gain[1] = 353,
|
||||
.Ch[3].Offset[1] = -16,
|
||||
.Ch[4].Gain[1] = 355,
|
||||
.Ch[4].Offset[1] = 128,
|
||||
.Ch[5].Gain[1] = 88,
|
||||
.Ch[5].Offset[1] = 18,
|
||||
.Ch[6].Gain[1] = 95,
|
||||
.Ch[6].Offset[1] = -141,
|
||||
.Ch[7].Gain[1] = 343,
|
||||
.Ch[7].Offset[1] = -246,
|
||||
.Ch[0].Gain[2] = 1498,
|
||||
.Ch[0].Offset[2] = -540,
|
||||
.Ch[1].Gain[2] = 1510,
|
||||
.Ch[1].Offset[2] = -405,
|
||||
.Ch[2].Gain[2] = 1512,
|
||||
.Ch[2].Offset[2] = -10,
|
||||
.Ch[3].Gain[2] = 1515,
|
||||
.Ch[3].Offset[2] = -146,
|
||||
.Ch[4].Gain[2] = 1521,
|
||||
.Ch[4].Offset[2] = 481,
|
||||
.Ch[5].Gain[2] = 373,
|
||||
.Ch[5].Offset[2] = 16,
|
||||
.Ch[6].Gain[2] = 409,
|
||||
.Ch[6].Offset[2] = -672,
|
||||
.Ch[7].Gain[2] = 1239,
|
||||
.Ch[7].Offset[2] = -1062,
|
||||
.Ch[0].Gain[3] = 1499,
|
||||
.Ch[0].Offset[3] = -539,
|
||||
.Ch[1].Gain[3] = 1508,
|
||||
.Ch[1].Offset[3] = -405,
|
||||
.Ch[2].Gain[3] = 1514,
|
||||
.Ch[2].Offset[3] = -11,
|
||||
.Ch[3].Gain[3] = 1515,
|
||||
.Ch[3].Offset[3] = -150,
|
||||
.Ch[4].Gain[3] = 1519,
|
||||
.Ch[4].Offset[3] = 483,
|
||||
.Ch[5].Gain[3] = 377,
|
||||
.Ch[5].Offset[3] = 17,
|
||||
.Ch[6].Gain[3] = 410,
|
||||
.Ch[6].Offset[3] = -671,
|
||||
.Ch[7].Gain[3] = 1242,
|
||||
.Ch[7].Offset[3] = -1059
|
||||
};
|
||||
|
||||
#elif defined(BOARD_A4_DA_32_D4_E9_1D)
|
||||
{
|
||||
.DeviceName = "BOARD_A4_DA_32_D4_E9_1D",
|
||||
.Ch[0].Gain[0] = 48,
|
||||
.Ch[0].Offset[0] = 13,
|
||||
.Ch[1].Gain[0] = 48,
|
||||
.Ch[1].Offset[0] = 23,
|
||||
.Ch[2].Gain[0] = 48,
|
||||
.Ch[2].Offset[0] = 37,
|
||||
.Ch[3].Gain[0] = 48,
|
||||
.Ch[3].Offset[0] = 24,
|
||||
.Ch[4].Gain[0] = 48,
|
||||
.Ch[4].Offset[0] = 8,
|
||||
.Ch[5].Gain[0] = 48,
|
||||
.Ch[5].Offset[0] = 39,
|
||||
.Ch[6].Gain[0] = 47,
|
||||
.Ch[6].Offset[0] = -6,
|
||||
.Ch[7].Gain[0] = 47,
|
||||
.Ch[7].Offset[0] = 13,
|
||||
.Ch[0].Gain[1] = 352,
|
||||
.Ch[0].Offset[1] = -33,
|
||||
.Ch[1].Gain[1] = 352,
|
||||
.Ch[1].Offset[1] = 12,
|
||||
.Ch[2].Gain[1] = 352,
|
||||
.Ch[2].Offset[1] = 104,
|
||||
.Ch[3].Gain[1] = 353,
|
||||
.Ch[3].Offset[1] = 39,
|
||||
.Ch[4].Gain[1] = 353,
|
||||
.Ch[4].Offset[1] = -59,
|
||||
.Ch[5].Gain[1] = 350,
|
||||
.Ch[5].Offset[1] = 87,
|
||||
.Ch[6].Gain[1] = 345,
|
||||
.Ch[6].Offset[1] = -191,
|
||||
.Ch[7].Gain[1] = 342,
|
||||
.Ch[7].Offset[1] = -58,
|
||||
.Ch[0].Gain[2] = 1447,
|
||||
.Ch[0].Offset[2] = -208,
|
||||
.Ch[1].Gain[2] = 1447,
|
||||
.Ch[1].Offset[2] = -19,
|
||||
.Ch[2].Gain[2] = 1426,
|
||||
.Ch[2].Offset[2] = 359,
|
||||
.Ch[3].Gain[2] = 1438,
|
||||
.Ch[3].Offset[2] = 90,
|
||||
.Ch[4].Gain[2] = 1434,
|
||||
.Ch[4].Offset[2] = -310,
|
||||
.Ch[5].Gain[2] = 1417,
|
||||
.Ch[5].Offset[2] = 292,
|
||||
.Ch[6].Gain[2] = 1367,
|
||||
.Ch[6].Offset[2] = -845,
|
||||
.Ch[7].Gain[2] = 1406,
|
||||
.Ch[7].Offset[2] = -319,
|
||||
.Ch[0].Gain[3] = 2781,
|
||||
.Ch[0].Offset[3] = -406,
|
||||
.Ch[1].Gain[3] = 2860,
|
||||
.Ch[1].Offset[3] = -54,
|
||||
.Ch[2].Gain[3] = 2609,
|
||||
.Ch[2].Offset[3] = 644,
|
||||
.Ch[3].Gain[3] = 2806,
|
||||
.Ch[3].Offset[3] = 150,
|
||||
.Ch[4].Gain[3] = 2630,
|
||||
.Ch[4].Offset[3] = -593,
|
||||
.Ch[5].Gain[3] = 2644,
|
||||
.Ch[5].Offset[3] = 527,
|
||||
.Ch[6].Gain[3] = 1499,
|
||||
.Ch[6].Offset[3] = -1347,
|
||||
.Ch[7].Gain[3] = 2537,
|
||||
.Ch[7].Offset[3] = -607
|
||||
};
|
||||
|
||||
#elif defined(BOARD_A4_DA_32_D4_EF_39)
|
||||
{
|
||||
.DeviceName = "BOARD_A4_DA_32_D4_EF_39",
|
||||
.Ch[0].Gain[0] = 48,
|
||||
.Ch[0].Offset[0] = 37,
|
||||
.Ch[1].Gain[0] = 48,
|
||||
.Ch[1].Offset[0] = 44,
|
||||
.Ch[2].Gain[0] = 48,
|
||||
.Ch[2].Offset[0] = 30,
|
||||
.Ch[3].Gain[0] = 49,
|
||||
.Ch[3].Offset[0] = 18,
|
||||
.Ch[4].Gain[0] = 36,
|
||||
.Ch[4].Offset[0] = 20,
|
||||
.Ch[5].Gain[0] = 48,
|
||||
.Ch[5].Offset[0] = 32,
|
||||
.Ch[6].Gain[0] = 47,
|
||||
.Ch[6].Offset[0] = 35,
|
||||
.Ch[7].Gain[0] = 47,
|
||||
.Ch[7].Offset[0] = 30,
|
||||
.Ch[0].Gain[1] = 359,
|
||||
.Ch[0].Offset[1] = 72,
|
||||
.Ch[1].Gain[1] = 360,
|
||||
.Ch[1].Offset[1] = 120,
|
||||
.Ch[2].Gain[1] = 360,
|
||||
.Ch[2].Offset[1] = 19,
|
||||
.Ch[3].Gain[1] = 362,
|
||||
.Ch[3].Offset[1] = -70,
|
||||
.Ch[4].Gain[1] = 285,
|
||||
.Ch[4].Offset[1] = -49,
|
||||
.Ch[5].Gain[1] = 359,
|
||||
.Ch[5].Offset[1] = 32,
|
||||
.Ch[6].Gain[1] = 351,
|
||||
.Ch[6].Offset[1] = 53,
|
||||
.Ch[7].Gain[1] = 349,
|
||||
.Ch[7].Offset[1] = 12,
|
||||
.Ch[0].Gain[2] = 1510,
|
||||
.Ch[0].Offset[2] = 204,
|
||||
.Ch[1].Gain[2] = 1508,
|
||||
.Ch[1].Offset[2] = 409,
|
||||
.Ch[2].Gain[2] = 1499,
|
||||
.Ch[2].Offset[2] = -10,
|
||||
.Ch[3].Gain[2] = 1504,
|
||||
.Ch[3].Offset[2] = -404,
|
||||
.Ch[4].Gain[2] = 1249,
|
||||
.Ch[4].Offset[2] = -321,
|
||||
.Ch[5].Gain[2] = 1502,
|
||||
.Ch[5].Offset[2] = 36,
|
||||
.Ch[6].Gain[2] = 1479,
|
||||
.Ch[6].Offset[2] = 131,
|
||||
.Ch[7].Gain[2] = 1475,
|
||||
.Ch[7].Offset[2] = -53,
|
||||
.Ch[0].Gain[3] = 2982,
|
||||
.Ch[0].Offset[3] = 359,
|
||||
.Ch[1].Gain[3] = 2702,
|
||||
.Ch[1].Offset[3] = 721,
|
||||
.Ch[2].Gain[3] = 3029,
|
||||
.Ch[2].Offset[3] = -51,
|
||||
.Ch[3].Gain[3] = 2620,
|
||||
.Ch[3].Offset[3] = -749,
|
||||
.Ch[4].Gain[3] = 2208,
|
||||
.Ch[4].Offset[3] = -649,
|
||||
.Ch[5].Gain[3] = 3041,
|
||||
.Ch[5].Offset[3] = 34,
|
||||
.Ch[6].Gain[3] = 3013,
|
||||
.Ch[6].Offset[3] = 223,
|
||||
.Ch[7].Gain[3] = 2974,
|
||||
.Ch[7].Offset[3] = -136
|
||||
};
|
||||
|
||||
// gain=1, offset = 0, if any channel has no calibration data
|
||||
#else
|
||||
{
|
||||
|
||||
+146
-14
@@ -1,6 +1,7 @@
|
||||
|
||||
#ifndef NEU_CHECK_INSTRUCTION
|
||||
#define NEU_CHECK_INSTRUCTION
|
||||
|
||||
#include "headstage_instruction.h"
|
||||
#include "neu/headstage_spi.h"
|
||||
#include "neu/headstage_reset.h"
|
||||
@@ -12,18 +13,18 @@ static uint8_t check_ins(uint16_t trans_ins){
|
||||
return (trans_ins == recv_ins);
|
||||
}
|
||||
|
||||
static void check_register(uint8_t register_to_check, uint16_t instruction_to_fit, uint8_t next_state){
|
||||
if(spi_state_counter < 6){
|
||||
static void check_register(uint8_t register_to_check, uint16_t instruction_to_fit, NEU_WORK_STATE next_state){
|
||||
if(check_reg_counter < 6){
|
||||
SPICallBack = CONTINUOUS_TRANS;
|
||||
spi_txbuf[0] = register_to_check;
|
||||
spi_txbuf[1] = register_to_check;
|
||||
spi_txbuf[2] = register_to_check;
|
||||
spi_txbuf[0] = register_to_check & 0x7F;
|
||||
spi_txbuf[1] = NEULIVE_STATE.state;
|
||||
spi_txbuf[2] = check_reg_counter;
|
||||
|
||||
spi_state_counter ++;
|
||||
check_reg_counter ++;
|
||||
headstage_spi_transaction(3);
|
||||
}
|
||||
else{
|
||||
spi_state_counter = 0;
|
||||
check_reg_counter = 0;
|
||||
if(check_ins(instruction_to_fit)){
|
||||
NEULIVE_STATE.state = next_state;
|
||||
SPICallBack = ONE_SHOT_SPI;
|
||||
@@ -31,15 +32,35 @@ static void check_register(uint8_t register_to_check, uint16_t instruction_to_fi
|
||||
else{
|
||||
// resend instruction
|
||||
SPI_close(headstage_spi_handle);
|
||||
DBSReset();
|
||||
NEULIVE_STATE.state = NEU_WRITE_INSTRUCTION;
|
||||
NEULIVE_STATE.config_type = NEU_SET_STI_CUR;
|
||||
if(STI){
|
||||
INSTRUCTION.ins_opcode = T_ZE;
|
||||
// DBSReset();
|
||||
|
||||
// start recording failed
|
||||
if( (rec_sti_command & ENABLE_REC) && !(rec_sti_command & STATUS_REC) ){
|
||||
NEULIVE_STATE.state = NEU_WRITE_REC_INS;
|
||||
NEULIVE_STATE.config_type = NEU_WARM_UP;
|
||||
INSTRUCTION.ins_opcode = BIAS_ONE;
|
||||
}
|
||||
else{
|
||||
INSTRUCTION.ins_opcode = BIAS_ONE;
|
||||
|
||||
// start sti failed
|
||||
else if( (rec_sti_command & ENABLE_STI) && !(rec_sti_command & STATUS_STI) ){
|
||||
NEULIVE_STATE.state = NEU_WRITE_STI_INS;
|
||||
NEULIVE_STATE.config_type = NEU_WARM_UP;
|
||||
INSTRUCTION.ins_opcode = T_ZE;
|
||||
|
||||
// make sure rec can restart
|
||||
not_buf_offset = NOT_BUF_OFFSET_INIT;
|
||||
IsFirstData = true;
|
||||
}
|
||||
|
||||
// stop sti failed
|
||||
else if( !(rec_sti_command & ENABLE_STI) && (rec_sti_command & STATUS_STI) ){
|
||||
NEULIVE_STATE.state = NEU_STI_INT;
|
||||
|
||||
// make sure rec can restart
|
||||
not_buf_offset = NOT_BUF_OFFSET_INIT;
|
||||
IsFirstData = true;
|
||||
}
|
||||
|
||||
SPICallBack = ONE_SHOT_SPI;
|
||||
ReopenSPI();
|
||||
}
|
||||
@@ -47,4 +68,115 @@ static void check_register(uint8_t register_to_check, uint16_t instruction_to_fi
|
||||
}
|
||||
}
|
||||
|
||||
static uint8_t check_sti_register(uint8_t address, uint16_t instruction_to_fit);
|
||||
|
||||
static void check_sti_t1_t5(NEU_WORK_STATE next_state){
|
||||
// get sti channel
|
||||
uint8_t index, sti_channel[9];
|
||||
|
||||
for(index=0 ; index<9 ; index++){
|
||||
sti_channel[index] = 0xFF;
|
||||
}
|
||||
|
||||
// sti_channel will be [active_ch1, active_ch2, ..., 0xFF, 0xFF]
|
||||
// where active_ch is the sti channel; 0xFF is used as an EOF
|
||||
index = 0;
|
||||
for(int i=0 ; i<8 ; i++){
|
||||
if( (1 << i) & INSTRUCTION.sti_channel ){
|
||||
sti_channel[index++] = i;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t register_address[5], register_index, success; // this is t1~t5 and sti_cycle number register address
|
||||
uint16_t value_to_fit;
|
||||
|
||||
// check every active channel alternatively
|
||||
for(index = 0 ; sti_channel[index]!=0xFF ; index++){
|
||||
|
||||
// check t1~t5 and sti-cycle register
|
||||
for(register_index = 0 ; register_index < 5 ; register_index++){
|
||||
|
||||
// get register address
|
||||
if(register_index < 4){
|
||||
register_address[register_index] = sti_channel[index] * 4 + register_index + 1;
|
||||
}
|
||||
else{
|
||||
register_address[register_index] = (sti_channel[index] / 2) + 42; // sti_cycle address
|
||||
}
|
||||
|
||||
// get value to fit
|
||||
if(register_index == 0){
|
||||
uint16_t t1 = INSTRUCTION.sti_t1[sti_channel[index]];
|
||||
uint16_t t21 = (INSTRUCTION.sti_t2[sti_channel[index]] & 0x003F) << 10;
|
||||
value_to_fit = (t21) | (t1);
|
||||
}
|
||||
else if(register_index == 1){
|
||||
uint16_t t22 = (INSTRUCTION.sti_t2[sti_channel[index]] >> 6) & 0x000F;
|
||||
uint16_t t3 = INSTRUCTION.sti_t3[sti_channel[index]] << 4;
|
||||
uint16_t t41 = (INSTRUCTION.sti_t4[sti_channel[index]] & 0x03) << 14;
|
||||
value_to_fit = t41 | t3 | t22;
|
||||
}
|
||||
else if(register_index == 2){
|
||||
uint16_t t42 = (INSTRUCTION.sti_t4[sti_channel[index]] >> 2) & 0xFFFF;
|
||||
value_to_fit = t42;
|
||||
}
|
||||
else if(register_index == 3){
|
||||
uint16_t t5 = (INSTRUCTION.sti_t5[sti_channel[index]]) & 0x03FF;
|
||||
value_to_fit = t5;
|
||||
}
|
||||
else{
|
||||
uint8_t odd_even = sti_channel[index] % 2;
|
||||
if (!odd_even){
|
||||
value_to_fit = (INSTRUCTION.current_sti_cycle[sti_channel[index] + 1] << 8) | (INSTRUCTION.current_sti_cycle[sti_channel[index]]);
|
||||
}
|
||||
else{
|
||||
value_to_fit = (INSTRUCTION.current_sti_cycle[sti_channel[index]] << 8) | (INSTRUCTION.current_sti_cycle[sti_channel[index] - 1]);
|
||||
}
|
||||
}
|
||||
|
||||
success = check_sti_register(register_address[register_index], value_to_fit);
|
||||
|
||||
if(!success){
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!success){
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!success){
|
||||
SPI_close(headstage_spi_handle);
|
||||
NEULIVE_STATE.state = NEU_WRITE_STI_INS;
|
||||
NEULIVE_STATE.config_type = NEU_WARM_UP;
|
||||
INSTRUCTION.ins_opcode = T_ZE;
|
||||
|
||||
// make sure rec can restart
|
||||
not_buf_offset = NOT_BUF_OFFSET_INIT;
|
||||
IsFirstData = true;
|
||||
ReopenSPI();
|
||||
}
|
||||
else{
|
||||
NEULIVE_STATE.state = next_state;
|
||||
}
|
||||
SPICallBack = ONE_SHOT_SPI;
|
||||
headstage_spi_transaction(3);
|
||||
}
|
||||
|
||||
static uint8_t check_sti_register(uint8_t address, uint16_t instruction_to_fit){
|
||||
check_reg_counter = 0;
|
||||
while(check_reg_counter < 6){
|
||||
SPICallBack = READ_REG;
|
||||
spi_txbuf[0] = address & 0x7F;
|
||||
spi_txbuf[1] = address;
|
||||
spi_txbuf[2] = address;
|
||||
|
||||
headstage_spi_transaction(3); // check_reg_counter++ would be executed in SPI callback
|
||||
}
|
||||
|
||||
check_reg_counter = 0;
|
||||
|
||||
// success = 1; failed = 0
|
||||
return check_ins(instruction_to_fit);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
+3
-3
@@ -97,9 +97,9 @@ static void headstage_@REPLACE@_event() {
|
||||
==== function implement ====
|
||||
==========================*/
|
||||
|
||||
//static void headstage_init() {
|
||||
// // TODO
|
||||
//}
|
||||
static void headstage_init() {
|
||||
// TODO
|
||||
}
|
||||
|
||||
static void headstage_update_ris_instruction(uint8_t ins_len, uint8_t *instruction) {
|
||||
// TODO
|
||||
|
||||
+11
-8
@@ -44,11 +44,11 @@ struct HEADSTAGE_PARAMETER_TABLE {
|
||||
* -----------
|
||||
*/
|
||||
/**< these parameter define the bias voltage of amplifier. */
|
||||
uint8_t vgrp;
|
||||
uint8_t vgrn;
|
||||
uint8_t vgr_int_old;
|
||||
uint8_t vgr_intp;
|
||||
uint8_t vgr_intn;
|
||||
uint16_t vgrp;
|
||||
uint16_t vgrn;
|
||||
uint16_t vgr_int_old;
|
||||
uint16_t vgr_intp;
|
||||
uint16_t vgr_intn;
|
||||
|
||||
uint8_t ins_opcode; /**< check instruction opcode which is transmitted to DBS. */
|
||||
|
||||
@@ -62,6 +62,9 @@ struct HEADSTAGE_PARAMETER_TABLE {
|
||||
uint16_t sti_amplitude_h; /**< positive side amplitude. */
|
||||
uint16_t sti_amplitude_l; /**< negative side amplitude. */
|
||||
|
||||
uint16_t sti_amplitude_h_cali;
|
||||
uint16_t sti_amplitude_l_cali;
|
||||
|
||||
uint16_t sys_clk_ratio; /**< frequency divider ratio for digital core clock. */
|
||||
uint16_t adc_clock_ratio; /**< frequency divider ratio for adc clock. */
|
||||
uint16_t sti_clock_ratio; /**< frequency divider ratio for stimulation clock. */
|
||||
@@ -81,11 +84,11 @@ struct HEADSTAGE_PARAMETER_TABLE {
|
||||
* manage which operation to be conducted
|
||||
*/
|
||||
struct HEADSTAGE_STATE {
|
||||
uint16_t state;
|
||||
NEU_WORK_STATE state;
|
||||
|
||||
uint8_t config_type;
|
||||
NEU_CONFIG_TYPE config_type;
|
||||
|
||||
uint8_t index;
|
||||
} NEULIVE_STATE = {0};
|
||||
} NEULIVE_STATE={NEU_IDLE, NEU_WARM_UP, 0};
|
||||
|
||||
#endif
|
||||
|
||||
+25
@@ -228,4 +228,29 @@ static void headstage_led_spi_color(uint8_t color) {
|
||||
|
||||
#endif // HEADSTAGE_LED_USE_GPIO
|
||||
|
||||
static void headstage_led_control(){
|
||||
if( (rec_sti_command & STATUS_REC) && (rec_sti_command & STATUS_STI) ){
|
||||
headstage_led_color(COLOR_MAGENTA);
|
||||
}
|
||||
else if((rec_sti_command & STATUS_REC)){
|
||||
headstage_led_color(COLOR_BLUE);
|
||||
}
|
||||
else if((rec_sti_command & STATUS_STI)){
|
||||
headstage_led_color(COLOR_ORANGE);
|
||||
}
|
||||
else{
|
||||
if(ErrorRestart){
|
||||
headstage_led_color(COLOR_RED);
|
||||
}
|
||||
else if(ConnectState){
|
||||
headstage_led_color(COLOR_CYAN);
|
||||
}
|
||||
else{
|
||||
headstage_led_color(COLOR_GREEN); // color green
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif // HEADSTAGE_LED_H
|
||||
|
||||
+1013
-20
File diff suppressed because it is too large
Load Diff
+103
@@ -0,0 +1,103 @@
|
||||
|
||||
#ifndef NEU_REC_INS_H
|
||||
#define NEU_REC_INS_H
|
||||
|
||||
#include "headstage_instruction.h"
|
||||
|
||||
/**
|
||||
* @fn build amplifier bias
|
||||
*/
|
||||
|
||||
static bool build_amp_bias(uint32_t* value) {
|
||||
uint8_t ins_opcode = INSTRUCTION.ins_opcode;
|
||||
switch (ins_opcode) {
|
||||
case BIAS_ONE: {
|
||||
*value = (0x01 << 23) | (0x39 << 16) | NEU_LNA_BIAS_ONE;
|
||||
INSTRUCTION.ins_opcode = BIAS_TWO;
|
||||
return false;
|
||||
}
|
||||
case BIAS_TWO: {
|
||||
*value = (0x01 << 23) | (0x3A << 16) | NEU_LNA_BIAS_TWO;
|
||||
INSTRUCTION.ins_opcode = BIAS_TWO;
|
||||
return true;
|
||||
}
|
||||
default: {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static NEU_CONFIG_TYPE build_rec_ins(NEU_CONFIG_TYPE config_type, uint32_t* value) {
|
||||
bool done;
|
||||
switch (config_type) {
|
||||
/* These are recording parameter */
|
||||
case NEU_WARM_UP:{
|
||||
*value = (0x00 << 23) | (0x01 << 16) | 1;
|
||||
return NEU_WARM_UP2;
|
||||
}
|
||||
case NEU_WARM_UP2:{
|
||||
*value = (0x00 << 23) | (0x01 << 16) | 2;
|
||||
return NEU_WARM_UP3;
|
||||
}
|
||||
case NEU_WARM_UP3:{
|
||||
*value = (0x00 << 23) | (0x01 << 16) | 3;
|
||||
return NEU_SET_GENERAL_EN;
|
||||
}
|
||||
|
||||
case NEU_SET_GENERAL_EN: {
|
||||
*value = (0x01 << 23) | (0x2F << 16) | NEU_GENERAL_EN;
|
||||
return NEU_SET_REC_CHANNEL;
|
||||
}
|
||||
case NEU_SET_REC_CHANNEL: {
|
||||
*value = (0x01 << 23) | (0x30 << 16) | INSTRUCTION.recording_channel;
|
||||
return NEU_SET_AMP_GAIN;
|
||||
}
|
||||
case NEU_SET_AMP_GAIN: {
|
||||
*value = (0x01 << 23) | (0x31 << 16) | INSTRUCTION.amplifier_gain;
|
||||
return NEU_SET_VGRP;
|
||||
}
|
||||
case NEU_SET_VGRP:{
|
||||
*value = (0x01 << 23) | (0x39 << 16) | (INSTRUCTION.vgrp << 5) | INSTRUCTION.vgrn;
|
||||
return NEU_SET_VGRP_OLD;
|
||||
}
|
||||
case NEU_SET_VGRP_OLD:{
|
||||
*value = (0x01 << 23) | (0x3A << 16) | (INSTRUCTION.vgr_int_old << 10) | (INSTRUCTION.vgr_intp << 5) | INSTRUCTION.vgr_intn;
|
||||
return NEU_SETUP_DONE;
|
||||
}
|
||||
|
||||
// case NEU_SET_SYS_CLK: {
|
||||
// *value = (0x01 << 23) | (0x32 << 16) | INSTRUCTION.sys_clk_ratio;
|
||||
// return NEU_SET_ADC_CLK;
|
||||
// }
|
||||
case NEU_SET_ADC_CLK: {
|
||||
if(INSTRUCTION.adc_clock_ratio < 28){
|
||||
INSTRUCTION.adc_clock_ratio = 28;
|
||||
}
|
||||
*value = (0x01 << 23) | (0x33 << 16) | INSTRUCTION.adc_clock_ratio;
|
||||
// *value = (0x01 << 23) | (0x33 << 16) | 0x00C8;
|
||||
return NEU_SET_AMP_BIAS;
|
||||
}
|
||||
case NEU_SET_AMP_BIAS: {
|
||||
done = build_amp_bias(value);
|
||||
if (done){
|
||||
return NEU_SETUP_DONE;
|
||||
}
|
||||
else{
|
||||
return NEU_SET_AMP_BIAS;
|
||||
}
|
||||
}
|
||||
|
||||
// case NEU_SET_CHOPPER: {
|
||||
// *value = (0x01 << 23) | (0x3B << 16) | INSTRUCTION.chopper_ratio;
|
||||
// return NEU_SETUP_DONE;
|
||||
// }
|
||||
|
||||
default: {
|
||||
return NEU_WARM_UP;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
+18
-18
@@ -199,24 +199,24 @@ static void headstage_sti_event() {
|
||||
==== function implement ====
|
||||
==========================*/
|
||||
|
||||
//static void headstage_init() {
|
||||
// headstage_pin_open();
|
||||
//
|
||||
// // init global stable value
|
||||
// Types_FreqHz cpu_freq;
|
||||
// BIOS_getCpuFreq(&cpu_freq);
|
||||
// cpu_frequency = cpu_freq.lo;
|
||||
//
|
||||
// headstage_gptimer_open();
|
||||
//
|
||||
// headstage_pwm_open();
|
||||
//
|
||||
// headstage_pin_output(PIN_POL0, 0);
|
||||
// headstage_pin_output(PIN_POL1, 0);
|
||||
// headstage_pin_output(PIN_PON0, 0);
|
||||
// headstage_pin_output(PIN_PON1, 0);
|
||||
// headstage_pin_output(PIN_TPS, 1);
|
||||
//}
|
||||
static void headstage_init() {
|
||||
headstage_pin_open();
|
||||
|
||||
// init global stable value
|
||||
Types_FreqHz cpu_freq;
|
||||
BIOS_getCpuFreq(&cpu_freq);
|
||||
cpu_frequency = cpu_freq.lo;
|
||||
|
||||
headstage_gptimer_open();
|
||||
|
||||
headstage_pwm_open();
|
||||
|
||||
headstage_pin_output(PIN_POL0, 0);
|
||||
headstage_pin_output(PIN_POL1, 0);
|
||||
headstage_pin_output(PIN_PON0, 0);
|
||||
headstage_pin_output(PIN_PON1, 0);
|
||||
headstage_pin_output(PIN_TPS, 1);
|
||||
}
|
||||
|
||||
static void headstage_update_ris_instruction(uint8_t ins_len, uint8_t *instruction) {
|
||||
uint8_t ins_oper = instruction[0] & 0xE0;
|
||||
|
||||
+213
@@ -0,0 +1,213 @@
|
||||
|
||||
#ifndef NEU_STI_INS_H
|
||||
#define NEU_STI_INS_H
|
||||
|
||||
#include "headstage_sti_cali.h"
|
||||
#include "headstage_instruction.h"
|
||||
|
||||
/**
|
||||
* @fn get_sti_channel
|
||||
*/
|
||||
#define ALL_STI_CH_CONFIG_DONE 0xFF
|
||||
static uint8_t get_sti_channel(uint8_t sti_channel, uint8_t ch_number_config_done) {
|
||||
uint8_t sti_ch;
|
||||
|
||||
uint8_t total_sti_ch_number = BitCount(sti_channel);
|
||||
if(ch_number_config_done == total_sti_ch_number){ return ALL_STI_CH_CONFIG_DONE; }
|
||||
|
||||
for (uint8_t i = 0; i < NEU_STI_CHANNEL_COUNTS-1 ; i++) {
|
||||
if ( (1 << i) & sti_channel) {
|
||||
if(ch_number_config_done > 0){
|
||||
ch_number_config_done --;
|
||||
}
|
||||
else{
|
||||
sti_ch = i;
|
||||
return sti_ch;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 9;
|
||||
}
|
||||
|
||||
/**
|
||||
* @fn build sti instruction with channel information
|
||||
*/
|
||||
static bool build_sti_cur_instruction(uint8_t sti_channel, uint32_t* value) {
|
||||
uint8_t ins_opcode = INSTRUCTION.ins_opcode;
|
||||
uint8_t op_neu; /** this is the final opcode to write register table in DBS */
|
||||
switch (ins_opcode) {
|
||||
case T_ZE:{
|
||||
// sending garbage SPI (want to warm up SPI)
|
||||
op_neu = 1;
|
||||
*value = (0x00 << 23) | (op_neu << 16) | 1;
|
||||
INSTRUCTION.ins_opcode = T_ST;
|
||||
return false;
|
||||
}
|
||||
case T_ST: {
|
||||
op_neu = sti_channel * 4 + 1;
|
||||
uint16_t t1 = INSTRUCTION.sti_t1[sti_channel];
|
||||
uint16_t t21 = (INSTRUCTION.sti_t2[sti_channel] & 0x003F) << 10;
|
||||
*value = (0x01 << 23) | (op_neu << 16) | (t21) | (t1);
|
||||
INSTRUCTION.ins_opcode = T_ND;
|
||||
return false;
|
||||
}
|
||||
case T_ND: {
|
||||
op_neu = sti_channel * 4 + 2;
|
||||
uint16_t t22 = (INSTRUCTION.sti_t2[sti_channel] >> 6) & 0x000F;
|
||||
uint16_t t3 = INSTRUCTION.sti_t3[sti_channel] << 4;
|
||||
uint16_t t41 = (INSTRUCTION.sti_t4[sti_channel] & 0x03) << 14;
|
||||
*value = (0x01 << 23) | (op_neu << 16) | t41 | t3 | t22;
|
||||
INSTRUCTION.ins_opcode = T_RD;
|
||||
return false;
|
||||
}
|
||||
case T_RD: {
|
||||
op_neu = sti_channel * 4 + 3;
|
||||
uint16_t t42 = (INSTRUCTION.sti_t4[sti_channel] >> 2) & 0xFFFF;
|
||||
*value = (0x01 << 23) | (op_neu << 16) | t42;
|
||||
INSTRUCTION.ins_opcode = T_FT;
|
||||
return false;
|
||||
}
|
||||
case T_FT: {
|
||||
op_neu = sti_channel * 4 + 4;
|
||||
uint16_t t5 = (INSTRUCTION.sti_t5[sti_channel]) & 0x03FF;
|
||||
*value = (0x01 << 23) | (op_neu << 16) | t5;
|
||||
INSTRUCTION.ins_opcode = STI_CYCLE;
|
||||
return false;
|
||||
}
|
||||
case STI_CYCLE: {
|
||||
op_neu = (sti_channel / 2) + 42;
|
||||
uint8_t odd_even = sti_channel % 2;
|
||||
INSTRUCTION.ins_opcode = T_ZE;
|
||||
// if (NEULIVE_STATE.config_type == NEU_SET_STI_VOLT) INSTRUCTION.ins_opcode = HIGH_SIDE;
|
||||
if(sti_channel == 8){
|
||||
// voltage stimulate
|
||||
op_neu = 41;
|
||||
*value = (0x01 << 23) | (op_neu << 16) | (0x00 << 8) | (INSTRUCTION.current_sti_cycle[sti_channel]);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!odd_even){
|
||||
*value = (0x01 << 23) | (op_neu << 16) | (INSTRUCTION.current_sti_cycle[sti_channel + 1] << 8) | (INSTRUCTION.current_sti_cycle[sti_channel]);
|
||||
}
|
||||
else{
|
||||
*value = (0x01 << 23) | (op_neu << 16) | (INSTRUCTION.current_sti_cycle[sti_channel] << 8) | (INSTRUCTION.current_sti_cycle[sti_channel - 1]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
default: {
|
||||
INSTRUCTION.ins_opcode = T_ZE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @fn build stimulation voltage
|
||||
*/
|
||||
|
||||
static bool build_sti_amplitude(uint32_t* value) {
|
||||
uint8_t ins_opcode = INSTRUCTION.ins_opcode;
|
||||
switch (ins_opcode) {
|
||||
case HIGH_SIDE: {
|
||||
*value = (0x01 << 23) | (0x25 << 16) | INSTRUCTION.sti_amplitude_h_cali;
|
||||
INSTRUCTION.ins_opcode = LOW_SIDE;
|
||||
return false;
|
||||
}
|
||||
case LOW_SIDE: {
|
||||
*value = (0x01 << 23) | (0x26 << 16) | INSTRUCTION.sti_amplitude_l_cali;
|
||||
// INSTRUCTION.ins_opcode = VOLT_MODE_AMP;
|
||||
INSTRUCTION.ins_opcode = BIAS_ONE;
|
||||
// return false;
|
||||
return true;
|
||||
}
|
||||
case VOLT_MODE_AMP: {
|
||||
*value = (0x01 << 23) | (0x27 << 16) | INSTRUCTION.voltage_sti_amplitude;
|
||||
INSTRUCTION.ins_opcode = BIAS_ONE;
|
||||
return true;
|
||||
}
|
||||
default: {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static NEU_CONFIG_TYPE build_sti_ins(NEU_CONFIG_TYPE config_type, uint32_t* value){
|
||||
bool single_ch_config_done;
|
||||
bool done;
|
||||
switch (config_type) {
|
||||
/* These are recording parameter */
|
||||
case NEU_WARM_UP:{
|
||||
*value = (0x00 << 23) | (0x01 << 16) | 1;
|
||||
return NEU_WARM_UP2;
|
||||
}
|
||||
case NEU_WARM_UP2:{
|
||||
*value = (0x00 << 23) | (0x01 << 16) | 2;
|
||||
return NEU_WARM_UP3;
|
||||
}
|
||||
case NEU_WARM_UP3:{
|
||||
*value = (0x00 << 23) | (0x01 << 16) | 3;
|
||||
return NEU_SET_STI_CUR;
|
||||
}
|
||||
|
||||
// set stimulate t1~t5
|
||||
case NEU_SET_STI_CUR: {
|
||||
uint8_t sti_channel = get_sti_channel(INSTRUCTION.sti_channel, INSTRUCTION.sti_ch_config_done);
|
||||
|
||||
// go to config sti amplitude
|
||||
if (sti_channel == ALL_STI_CH_CONFIG_DONE) {
|
||||
INSTRUCTION.sti_ch_config_done = 0;
|
||||
|
||||
INSTRUCTION.ins_opcode = HIGH_SIDE;
|
||||
|
||||
// get correct amplitude sti code
|
||||
INSTRUCTION.sti_amplitude_h_cali = UserCode2StiCode(INSTRUCTION.sti_amplitude_h, POSITIVE_CHANNEL);
|
||||
INSTRUCTION.sti_amplitude_l_cali = UserCode2StiCode(INSTRUCTION.sti_amplitude_l, NEGATIVE_CHANNEL);
|
||||
return NEU_SET_STI_VOLT;
|
||||
}
|
||||
|
||||
// config next sti channel
|
||||
else {
|
||||
single_ch_config_done = build_sti_cur_instruction(sti_channel, value);
|
||||
if(single_ch_config_done){ INSTRUCTION.sti_ch_config_done++; }
|
||||
return NEU_SET_STI_CUR;
|
||||
}
|
||||
}
|
||||
|
||||
// config sti amplitude
|
||||
case NEU_SET_STI_VOLT: {
|
||||
done = build_sti_amplitude(value);
|
||||
if (done) {
|
||||
return NEU_SET_POLARITY;
|
||||
} else {
|
||||
return NEU_SET_STI_VOLT;
|
||||
}
|
||||
}
|
||||
case NEU_SET_POLARITY: {
|
||||
*value = (0x01 << 23) | (0x28 << 16) | INSTRUCTION.current_sti_polarity;
|
||||
return NEU_SET_STI_CLK;
|
||||
}
|
||||
case NEU_SET_STI_CLK: {
|
||||
*value = (0x01 << 23) | (0x34 << 16) | INSTRUCTION.sti_clock_ratio;
|
||||
*value = (0x01 << 23) | (0x34 << 16) | 2;
|
||||
return NEU_SET_STI_MODE;
|
||||
}
|
||||
// case NEU_SET_ARBITRARY: {
|
||||
// *value = (0x01 << 23) | (0x36 << 16) | INSTRUCTION.arbitrary_en;
|
||||
// return NEU_SET_ARB_INDEX;
|
||||
// }
|
||||
// case NEU_SET_ARB_INDEX: {
|
||||
// *value = (0x01 << 23) | (0x37 << 16) | INSTRUCTION.arbitrary_index;
|
||||
// return NEU_SET_STI_MODE;
|
||||
// }
|
||||
case NEU_SET_STI_MODE: {
|
||||
*value = (0x01 << 23) | (0x38 << 16) | (INSTRUCTION.sti_mode << 2) | (INSTRUCTION.sti_h_bridge << 1) | (INSTRUCTION.sti_ref);
|
||||
return NEU_SETUP_DONE;
|
||||
}
|
||||
|
||||
default: {
|
||||
return NEU_WARM_UP;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
+6
-6
@@ -36,12 +36,12 @@
|
||||
|
||||
static void headstage_test_periodic();
|
||||
|
||||
//static void headstage_init() {
|
||||
// headstage_pin_open();
|
||||
// headstage_spi_open();
|
||||
// headstage_gptimer_open();
|
||||
// headstage_gptimer_set_frequency(1000);
|
||||
//}
|
||||
static void headstage_init() {
|
||||
headstage_pin_open();
|
||||
headstage_spi_open();
|
||||
headstage_gptimer_open();
|
||||
headstage_gptimer_set_frequency(1000);
|
||||
}
|
||||
|
||||
static void headstage_update_ris_instruction(uint8_t ins_len, uint8_t* instruction) {
|
||||
}
|
||||
|
||||
+8
-8
@@ -196,14 +196,14 @@ static void headstage_tni_event() {
|
||||
==== function implement ====
|
||||
==========================*/
|
||||
|
||||
//static void headstage_init() {
|
||||
// headstage_pin_open();
|
||||
// headstage_spi_open();
|
||||
// headstage_gptimer_open();
|
||||
//
|
||||
// headstage_pin_output(PIN_S2P_RST, 0);
|
||||
// headstage_pin_output(PIN_P2S_RST, 0);
|
||||
//}
|
||||
static void headstage_init() {
|
||||
headstage_pin_open();
|
||||
headstage_spi_open();
|
||||
headstage_gptimer_open();
|
||||
|
||||
headstage_pin_output(PIN_S2P_RST, 0);
|
||||
headstage_pin_output(PIN_P2S_RST, 0);
|
||||
}
|
||||
|
||||
static void headstage_update_ris_instruction(uint8_t ins_len, uint8_t *instruction) {
|
||||
uint8_t header = instruction[0] & 0xE0;
|
||||
|
||||
+10
-10
@@ -693,16 +693,16 @@ static void headstage_reset() {
|
||||
/*=========================================
|
||||
==== initialize parameter and device. ====
|
||||
========================================*/
|
||||
//static void headstage_init() {
|
||||
// headstage_pin_open();
|
||||
// headstage_spi_open();
|
||||
// headstage_pwm_open();
|
||||
// headstage_led_spi_color(COLOR_GREEN);
|
||||
// headstage_pin_output(PIN_RESET, 1); // initialize DBS chip
|
||||
// headstage_pin_output(PIN_STI_SEL, 1); // chip select is ok
|
||||
// headstage_pin_output(PIN_VGRP, 1);
|
||||
// headstage_pin_output(PIN_FASTSET, 0);
|
||||
//}
|
||||
static void headstage_init() {
|
||||
headstage_pin_open();
|
||||
headstage_spi_open();
|
||||
headstage_pwm_open();
|
||||
headstage_led_spi_color(COLOR_GREEN);
|
||||
headstage_pin_output(PIN_RESET, 1); // initialize DBS chip
|
||||
headstage_pin_output(PIN_STI_SEL, 1); // chip select is ok
|
||||
headstage_pin_output(PIN_VGRP, 1);
|
||||
headstage_pin_output(PIN_FASTSET, 0);
|
||||
}
|
||||
|
||||
static void headstage_update_ris_instruction(uint8_t ins_len, uint8_t* instruction) {
|
||||
switch ((instruction[0] & 0xE0)) {
|
||||
|
||||
+6
-6
@@ -3,15 +3,15 @@
|
||||
#define VERSION_DATE
|
||||
|
||||
#define VERSION_DATE_YEAR 20
|
||||
#define VERSION_DATE_MONTH 5
|
||||
#define VERSION_DATE_DAY 20
|
||||
#define VERSION_DATE_HOUR 17
|
||||
#define VERSION_DATE_MINUTE 27
|
||||
#define VERSION_DATE_MONTH 7
|
||||
#define VERSION_DATE_DAY 9
|
||||
#define VERSION_DATE_HOUR 10
|
||||
#define VERSION_DATE_MINUTE 16
|
||||
|
||||
// this is NOT the version hash !!
|
||||
// it's the last version hash
|
||||
#define VERSION_HASH eb4b14af59afe8af309a843a93f87cacc8c68072
|
||||
#define VERSION_GIT_BRANCH central_pseudo_controller
|
||||
#define VERSION_HASH 549db3f6d4f60019e726ba2b4318c2dd968cf3d5
|
||||
#define VERSION_GIT_BRANCH Neulive2.0_developement
|
||||
|
||||
static void get_board_name(char *board_name_ch, uint8 *board_name_int, uint8 name_size){
|
||||
uint8 name_offset = 18;
|
||||
|
||||
+17
-17
@@ -221,23 +221,23 @@ static void headstage_dac_send(uint8_t command, uint8_t p1, uint8_t p2) {
|
||||
==== function implement ====
|
||||
==========================*/
|
||||
|
||||
//static void headstage_init() {
|
||||
// headstage_pin_open();
|
||||
// headstage_led_open();
|
||||
// headstage_spi_open();
|
||||
//
|
||||
// PIN_registerIntCb(headstage_pins_handle, &headstage_zm_pin_callback);
|
||||
// PIN_setInterrupt(headstage_pins_handle, PIN_SWITCH_ON | PIN_IRQ_NEGEDGE);
|
||||
//
|
||||
// headstage_pin_output(PIN_SHUTDOWN_6994, 1);
|
||||
// headstage_pin_output(PIN_ENABLE_V05, 1);
|
||||
// headstage_pin_output(PIN_ENABLE_V10, 1);
|
||||
//
|
||||
// headstage_pin_output(PIN_ADC_CS, 1);
|
||||
// headstage_pin_output(PIN_DAC_CS, 1);
|
||||
//
|
||||
// INSTRUCTION.mode = MODE_POWER_ON;
|
||||
//}
|
||||
static void headstage_init() {
|
||||
headstage_pin_open();
|
||||
headstage_led_open();
|
||||
headstage_spi_open();
|
||||
|
||||
PIN_registerIntCb(headstage_pins_handle, &headstage_zm_pin_callback);
|
||||
PIN_setInterrupt(headstage_pins_handle, PIN_SWITCH_ON | PIN_IRQ_NEGEDGE);
|
||||
|
||||
headstage_pin_output(PIN_SHUTDOWN_6994, 1);
|
||||
headstage_pin_output(PIN_ENABLE_V05, 1);
|
||||
headstage_pin_output(PIN_ENABLE_V10, 1);
|
||||
|
||||
headstage_pin_output(PIN_ADC_CS, 1);
|
||||
headstage_pin_output(PIN_DAC_CS, 1);
|
||||
|
||||
INSTRUCTION.mode = MODE_POWER_ON;
|
||||
}
|
||||
|
||||
static void headstage_zm_turn(uint8_t on_off) {
|
||||
if (on_off) {
|
||||
|
||||
+20
-21
@@ -6,10 +6,19 @@
|
||||
#if defined(CC2650_LAUNCHXL)
|
||||
|
||||
// clang-format off
|
||||
#define Board_RLED IOID_6
|
||||
#define Board_GLED IOID_7
|
||||
#define Board_WAKE_CENTRAL IOID_8
|
||||
|
||||
#define PIN_RESET IOID_0 // SPI1 to receive LSK
|
||||
#define PIN_EN_ADC_SPI_CLK IOID_1 // SPI1 clock
|
||||
#define PIN_DC_DC IOID_2 // STI select need
|
||||
#define PIN_BATT_HALF IOID_3 //
|
||||
#define PIN_AMP_VCK IOID_4 //
|
||||
#define PIN_LED_SDI IOID_7 //
|
||||
#define PIN_LED_CLK IOID_8 //
|
||||
#define PIN_STI_CLK IOID_9 //
|
||||
#define PIN_SPI_MISO IOID_10 //
|
||||
#define PIN_SPI_MOSI IOID_11 //
|
||||
#define PIN_SPI_CS IOID_12 //
|
||||
#define PIN_SPI_CLK IOID_13 //
|
||||
#define PIN_SYS_CLK IOID_14 //
|
||||
// clang-format on
|
||||
|
||||
#elif defined(BOOSTXL_CC2650MA)
|
||||
@@ -64,23 +73,13 @@
|
||||
#define Board_PWMPIN6 PIN_UNASSIGNED
|
||||
#define Board_PWMPIN7 PIN_UNASSIGNED
|
||||
|
||||
static PIN_Config pesudo_pi_pin_configuration[] = { //
|
||||
Board_RLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL,
|
||||
Board_GLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL,
|
||||
Board_WAKE_CENTRAL | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL,
|
||||
static PIN_Config headstage_pin_configuration[] = { //
|
||||
PIN_RESET | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL,
|
||||
PIN_EN_ADC_SPI_CLK | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL,
|
||||
PIN_DC_DC | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL,
|
||||
PIN_BATT_HALF | PIN_INPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL,
|
||||
PIN_STI_CLK | PIN_INPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL,
|
||||
//
|
||||
PIN_TERMINATE
|
||||
};
|
||||
|
||||
|
||||
static PIN_State pesudo_pi_pins_state;
|
||||
static PIN_Handle pesudo_pi_pins_handle;
|
||||
|
||||
#define headstage_pin_open() \
|
||||
do { \
|
||||
pesudo_pi_pins_handle = PIN_open(&pesudo_pi_pins_state, pesudo_pi_pin_configuration); \
|
||||
} while (0)
|
||||
|
||||
#define headstage_pin_output(pin, value) PIN_setOutputValue(pesudo_pi_pins_handle, PIN_ID(pin), (value))
|
||||
PIN_TERMINATE};
|
||||
|
||||
#endif // HEADSTAGE_PIN_UNI_H
|
||||
|
||||
+10
-6
@@ -13,12 +13,14 @@ static void MCUReset(){
|
||||
|
||||
// global variable reset
|
||||
STI = false;
|
||||
turn_off_sti = false;
|
||||
rec_sti_command = 0;
|
||||
IsFirstData = true;
|
||||
|
||||
// SPI reset
|
||||
SPI_close(headstage_spi_handle);
|
||||
spi_state_counter = 0;
|
||||
check_reg_counter = 0;
|
||||
|
||||
for(int i=0 ; i<SPI_BUFFER_SIZE ; i++ ){
|
||||
spi_txbuf[i] = 0;
|
||||
spi_rxbuf[i] = 0;
|
||||
@@ -31,7 +33,7 @@ static void MCUReset(){
|
||||
}
|
||||
|
||||
// CIS buffer reset
|
||||
for(int i=0 ; i<BLE_CDR_BUFF_SIZE ; i++){
|
||||
for(int i=0 ; i<BLE_CDR_SAMLL_SIZE ; i++){
|
||||
cdr_buf[i] = 0;
|
||||
}
|
||||
|
||||
@@ -82,20 +84,22 @@ static void ResetINSTRUCTION(){
|
||||
INSTRUCTION.sti_clock_ratio = 10;
|
||||
INSTRUCTION.amplifier_gain = 0;
|
||||
INSTRUCTION.chopper_ratio = 2;
|
||||
INSTRUCTION.sti_t1[1] = 1;
|
||||
INSTRUCTION.sti_t1[1] = 0;
|
||||
INSTRUCTION.sti_t2[1] = 0;
|
||||
INSTRUCTION.sti_t3[1] = 0;
|
||||
INSTRUCTION.sti_t4[1] = 0;
|
||||
INSTRUCTION.sti_t5[1] = 0;
|
||||
INSTRUCTION.sti_channel = 2;
|
||||
INSTRUCTION.sti_channel = 0;
|
||||
INSTRUCTION.arbitrary_en = 0;
|
||||
INSTRUCTION.arbitrary_index = 0;
|
||||
INSTRUCTION.sti_h_bridge = 0;
|
||||
INSTRUCTION.sti_mode = 0;
|
||||
INSTRUCTION.sti_ref = 0;
|
||||
INSTRUCTION.current_sti_polarity = 2;
|
||||
INSTRUCTION.current_sti_polarity = 0;
|
||||
INSTRUCTION.sti_amplitude_h = 0;
|
||||
INSTRUCTION.sti_amplitude_l = 0;
|
||||
INSTRUCTION.sti_amplitude_h_cali = 0;
|
||||
INSTRUCTION.sti_amplitude_l_cali = 0;
|
||||
INSTRUCTION.ins_opcode = BIAS_ONE;
|
||||
INSTRUCTION.sti_ch_config_done = 0;
|
||||
|
||||
@@ -107,7 +111,7 @@ static void ResetINSTRUCTION(){
|
||||
}
|
||||
|
||||
NEULIVE_STATE.state = NEU_IDLE;
|
||||
NEULIVE_STATE.config_type = 0;
|
||||
NEULIVE_STATE.config_type = NEU_WARM_UP;
|
||||
NEULIVE_STATE.index = 0;
|
||||
}
|
||||
|
||||
|
||||
-75
@@ -1,75 +0,0 @@
|
||||
|
||||
#ifndef PESUDO_PI_UART_H
|
||||
#define PESUDO_PI_UART_H
|
||||
|
||||
/*
|
||||
* http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/tirtos/
|
||||
* 2_20_00_06/exports/tirtos_full_2_20_00_06/products/tidrivers_cc13xx_cc26xx_2_20_00_08/
|
||||
* docs/doxygen/html/_u_a_r_t_c_c26_x_x_8h.html
|
||||
*/
|
||||
|
||||
#include <ti/drivers/UART.h>
|
||||
#include <ti/drivers/uart/UARTCC26XX.h>
|
||||
|
||||
#include <ti/sysbios/knl/Clock.h>
|
||||
#include "../neu/headstage_pin.h"
|
||||
|
||||
// Clock object used to timeout connection
|
||||
static Clock_Struct SendUARTClock;
|
||||
|
||||
// Scan duration in ms
|
||||
#define SEND_UART_DURATION 1000
|
||||
|
||||
#define UART_TX_BUF_SIZE 10
|
||||
#define UART_RX_BUF_SIZE 10
|
||||
|
||||
static UART_Handle handle;
|
||||
static UART_Params params;
|
||||
|
||||
static uint8_t UART_txBuf[UART_TX_BUF_SIZE];
|
||||
static uint8_t UART_rxBuf[UART_RX_BUF_SIZE];
|
||||
|
||||
static void _send_uart(UArg arg0);
|
||||
|
||||
static void pesudo_pi_uart_init(){
|
||||
|
||||
uint32_t timeoutUs = 5000; // 5ms timeout, default timeout is no timeout (BIOS_WAIT_FOREVER)
|
||||
|
||||
// Init UART and specify non-default parameters
|
||||
UART_Params_init(¶ms);
|
||||
params.baudRate = 9600;
|
||||
params.writeDataMode = UART_DATA_BINARY;
|
||||
// params.readTimeout = timeoutUs / Clock_tickPeriod; // Default tick period is 10us
|
||||
params.readTimeout = ti_sysbios_BIOS_WAIT_FOREVER;
|
||||
|
||||
// Open the UART and do the read
|
||||
handle = UART_open(Board_UART, ¶ms);
|
||||
// int rxBytes = UART_read(handle, rxBuf, 100);
|
||||
|
||||
Util_constructClock(&SendUARTClock, _send_uart,
|
||||
SEND_UART_DURATION, 0, false, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
static void send_uart(uint8_t *txbuf, uint8_t size) {
|
||||
headstage_pin_output(Board_WAKE_CENTRAL, Board_LED_ON);
|
||||
headstage_pin_output(Board_RLED, Board_LED_ON);
|
||||
for(int i=0 ; i<size && i<UART_TX_BUF_SIZE ; i++){
|
||||
UART_txBuf[i] = txbuf[i];
|
||||
}
|
||||
|
||||
// Util_startClock(&SendUARTClock);
|
||||
CPUdelay(16000000);
|
||||
|
||||
UART_write(handle, UART_txBuf, UART_TX_BUF_SIZE);
|
||||
headstage_pin_output(Board_RLED, Board_LED_OFF);
|
||||
headstage_pin_output(Board_WAKE_CENTRAL, Board_LED_OFF);
|
||||
}
|
||||
|
||||
static void _send_uart(UArg arg0){
|
||||
UART_write(handle, UART_txBuf, UART_TX_BUF_SIZE);
|
||||
headstage_pin_output(Board_RLED, Board_LED_OFF);
|
||||
headstage_pin_output(Board_WAKE_CENTRAL, Board_LED_OFF);
|
||||
}
|
||||
|
||||
#endif
|
||||
+72
-5
@@ -114,13 +114,13 @@
|
||||
#ifndef FEATURE_OAD
|
||||
// Minimum connection interval (units of 1.25ms, 80=100ms) if automatic
|
||||
// parameter update request is enabled
|
||||
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 6
|
||||
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 8
|
||||
//#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 14
|
||||
|
||||
// Maximum connection interval (units of 1.25ms, 800=1000ms) if automatic
|
||||
// parameter update request is enabled
|
||||
//#define DEFAULT_DESIRED_MAX_CONN_INTERVAL 6
|
||||
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL 6
|
||||
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL 30
|
||||
|
||||
#else //! FEATURE_OAD
|
||||
// Minimum connection interval (units of 1.25ms, 8=10ms) if automatic
|
||||
@@ -608,9 +608,9 @@ static void SimpleBLEPeripheral_taskFxn(UArg a0, UArg a1) {
|
||||
}
|
||||
}
|
||||
|
||||
// if (EVENT_MASK > 0) {
|
||||
// headstage_event_handle();
|
||||
// }
|
||||
if (EVENT_MASK > 0) {
|
||||
headstage_event_handle();
|
||||
}
|
||||
|
||||
// if (events & SBP_PERIODIC_EVT) {
|
||||
// events &= ~SBP_PERIODIC_EVT;
|
||||
@@ -803,6 +803,45 @@ static void SimpleBLEPeripheral_stateChangeCB(gaprole_States_t newState) {
|
||||
SimpleBLEPeripheral_enqueueMsg(SBP_STATE_CHANGE_EVT, newState);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* @fn BitReverse
|
||||
*
|
||||
* @brief Change input Array in bit reversed index 0101(5)->1010(10)
|
||||
* cause FFT need Butterfly pairs.
|
||||
*
|
||||
* @param newState - new state (??)
|
||||
*
|
||||
* @return None.
|
||||
*/
|
||||
static void BitReverse(int BR_array[],int NUM_FFT) {
|
||||
#if (NUM_FFT >= 512)
|
||||
unsigned int swapA, swapB, sw_cnt;
|
||||
#endif
|
||||
|
||||
#if (NUM_FFT <= 256)
|
||||
unsigned int swapA, swapB, sw_cnt;
|
||||
#endif
|
||||
|
||||
|
||||
unsigned char BR_table = [0,4,2,6,1,3,5,7];
|
||||
int TemStore;
|
||||
|
||||
for (sw_cnt=1; sw_cnt<NUM_FFT/2; sw_cnt++){
|
||||
swapA = sw_cnt;
|
||||
swapB = BR_table[sw_cnt] *2;
|
||||
if (swapB > swapA){
|
||||
TemStore = BR_array[swapA];
|
||||
BR_array[swapA] = BR_array[swapB];
|
||||
BR_array[swapB] = TemStore;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
* @fn SimpleBLEPeripheral_processStateChangeEvt
|
||||
*
|
||||
@@ -820,11 +859,34 @@ static void SimpleBLEPeripheral_processStateChangeEvt(gaprole_States_t newState)
|
||||
|
||||
GAPRole_GetParameter(GAPROLE_BD_ADDR, ownAddress);
|
||||
|
||||
uint16_t CH1[], CH2[], CH3[], CH4[], CH5[], CH6[], CH7[], CH8[]; // <======= BS 0709
|
||||
|
||||
|
||||
// use 6 bytes of device address for 8 bytes of system ID value
|
||||
systemId[0] = ownAddress[0];
|
||||
systemId[1] = ownAddress[1];
|
||||
systemId[2] = ownAddress[2];
|
||||
|
||||
switch(ch){ // <======= BS 0709
|
||||
case(1):
|
||||
idx = size(CH1);
|
||||
if (idx<6){
|
||||
CH1[idx+1] = dataIN;
|
||||
}
|
||||
else if (idx<FFT_NUM){
|
||||
LFP_tmp = CH1[idx-1]*w1 + CH1[idx-2]*w2 + CH1[idx-3]*w3 + CH1[idx-4]*w4 + CH1[idx-5]*w5;
|
||||
CH1[idx+1] = (LFP_tmp < 0) ? 0 - LFP_tmp : LFP_tmp;
|
||||
}
|
||||
else{
|
||||
BitReverse(CH1);
|
||||
FFT(CH1)
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// set middle bytes to zero
|
||||
systemId[4] = 0x00;
|
||||
systemId[3] = 0x00;
|
||||
@@ -853,6 +915,7 @@ static void SimpleBLEPeripheral_processStateChangeEvt(gaprole_States_t newState)
|
||||
|
||||
if (SUCCESS == HCI_LE_SetDataLenCmd(cxnHandle, requestedPDUSize, requestTxTime)) {
|
||||
ConnectState = true;
|
||||
headstage_led_color(COLOR_CYAN);
|
||||
}
|
||||
// Use numActive to determine the connection handle of the last
|
||||
// connection
|
||||
@@ -869,8 +932,10 @@ static void SimpleBLEPeripheral_processStateChangeEvt(gaprole_States_t newState)
|
||||
SimpleBLEPeripheral_freeAttRsp(bleNotConnected);
|
||||
ConnectState = false;
|
||||
if(ErrorRestart){
|
||||
headstage_led_color(COLOR_RED);
|
||||
}
|
||||
else{
|
||||
headstage_led_color(COLOR_GREEN);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -881,8 +946,10 @@ static void SimpleBLEPeripheral_processStateChangeEvt(gaprole_States_t newState)
|
||||
ErrorRestart = true;
|
||||
CONNECT_HANDLE = 0xFFFF;
|
||||
flag_notify(EVT_DISCONNECTED);
|
||||
headstage_led_color(COLOR_RED);
|
||||
break;
|
||||
case GAPROLE_ERROR: // Error occurred - invalid state
|
||||
headstage_led_color(COLOR_RED);
|
||||
break;
|
||||
case GAPROLE_INIT: // Waiting to be started
|
||||
case GAPROLE_ADVERTISING: // Currently Advertising
|
||||
|
||||
@@ -82,7 +82,7 @@ extern "C" {
|
||||
|
||||
// Length of Characteristic 5 in bytes
|
||||
#define SIMPLEPROFILE_CHAR1_LEN 2
|
||||
#define SIMPLEPROFILE_CHAR2_LEN 10
|
||||
#define SIMPLEPROFILE_CHAR2_LEN 50
|
||||
#define SIMPLEPROFILE_CHAR3_LEN 20
|
||||
#define SIMPLEPROFILE_CHAR4_LEN 200
|
||||
//#define SIMPLEPROFILE_CHAR4_LEN 20
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ declare -i row_index=0
|
||||
|
||||
#constant
|
||||
declare -i COL_MAX=8
|
||||
declare -i START_ROW=23
|
||||
declare -i START_ROW=27
|
||||
declare -i UN_USED_ROW=$START_ROW-1
|
||||
|
||||
MAC="MAC"
|
||||
|
||||
Reference in New Issue
Block a user