kopia lustrzana https://gitlab.com/Teuniz/DSRemote
Implemented SPI decoding.
rodzic
8993906034
commit
151de99792
|
@ -152,7 +152,10 @@ UI_decoder_window::UI_decoder_window(QWidget *w_parent)
|
|||
spi_cs_src_combobox->addItem("Ch. 3");
|
||||
spi_cs_src_combobox->addItem("Ch. 4");
|
||||
}
|
||||
spi_cs_src_combobox->setCurrentIndex(devparms->math_decode_spi_cs);
|
||||
if(devparms->math_decode_spi_mode)
|
||||
{
|
||||
spi_cs_src_combobox->setCurrentIndex(devparms->math_decode_spi_cs);
|
||||
}
|
||||
|
||||
threshold_4_label = new QLabel(this);
|
||||
threshold_4_label->setGeometry(270, 147, 100, 25);
|
||||
|
@ -226,6 +229,7 @@ UI_decoder_window::UI_decoder_window(QWidget *w_parent)
|
|||
spi_polarity_combobox->setGeometry(130, 265, 100, 25);
|
||||
spi_polarity_combobox->addItem("Negative");
|
||||
spi_polarity_combobox->addItem("Positive");
|
||||
spi_polarity_combobox->setCurrentIndex(devparms->math_decode_spi_pol);
|
||||
|
||||
spi_edge_label = new QLabel(tab_spi);
|
||||
spi_edge_label->setGeometry(10, 300, 100, 25);
|
||||
|
@ -689,22 +693,22 @@ void UI_decoder_window::spi_select_combobox_clicked(int idx)
|
|||
{
|
||||
if(idx == 0)
|
||||
{
|
||||
mainwindow->set_cue_cmd(":BUS1:SPI:SS:POL NCS");
|
||||
mainwindow->set_cue_cmd(":BUS1:SPI:SS:POL NEG");
|
||||
}
|
||||
else
|
||||
{
|
||||
mainwindow->set_cue_cmd(":BUS1:SPI:SS:POL CS");
|
||||
mainwindow->set_cue_cmd(":BUS1:SPI:SS:POL POS");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(idx == 0)
|
||||
{
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:SEL NEG");
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:SEL NCS");
|
||||
}
|
||||
else
|
||||
{
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:SEL POS");
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:SEL CS");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -712,6 +716,8 @@ void UI_decoder_window::spi_select_combobox_clicked(int idx)
|
|||
|
||||
void UI_decoder_window::spi_mode_combobox_clicked(int idx)
|
||||
{
|
||||
char str[256];
|
||||
|
||||
devparms->math_decode_spi_mode = idx;
|
||||
|
||||
if(devparms->modelserie != 6)
|
||||
|
@ -719,10 +725,21 @@ void UI_decoder_window::spi_mode_combobox_clicked(int idx)
|
|||
if(idx == 0)
|
||||
{
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:MODE TIM");
|
||||
|
||||
spi_cs_src_combobox->setCurrentIndex(0);
|
||||
|
||||
devparms->math_decode_spi_cs = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:MODE CS");
|
||||
|
||||
if(spi_cs_src_combobox->currentIndex() > 0)
|
||||
{
|
||||
sprintf(str, ":DEC1:SPI:CS CHAN%i", spi_cs_src_combobox->currentIndex());
|
||||
|
||||
mainwindow->set_cue_cmd(str);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -749,11 +766,11 @@ void UI_decoder_window::spi_polarity_combobox_clicked(int idx)
|
|||
{
|
||||
if(idx == 0)
|
||||
{
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:EDGE NEG");
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:POL NEG");
|
||||
}
|
||||
else
|
||||
{
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:EDGE POS");
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:POL POS");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -778,11 +795,11 @@ void UI_decoder_window::spi_edge_combobox_clicked(int idx)
|
|||
{
|
||||
if(idx == 0)
|
||||
{
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:EDGE NEG");
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:EDGE FALL");
|
||||
}
|
||||
else
|
||||
{
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:EDGE POS");
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:EDGE RISE");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1083,6 +1100,8 @@ void UI_decoder_window::src_combobox_clicked(int)
|
|||
devparms->math_decode_spi_cs = spi_cs_src_combobox->currentIndex();
|
||||
devparms->math_decode_uart_tx = uart_tx_src_combobox->currentIndex();
|
||||
devparms->math_decode_uart_rx = uart_rx_src_combobox->currentIndex();
|
||||
devparms->math_decode_spi_mode = spi_mode_combobox->currentIndex();
|
||||
devparms->math_decode_spi_select = spi_select_combobox->currentIndex();
|
||||
|
||||
threshold_auto_clicked(devparms->math_decode_threshold_auto);
|
||||
}
|
||||
|
@ -1266,6 +1285,18 @@ void UI_decoder_window::threshold_auto_clicked(int thr_auto)
|
|||
}
|
||||
}
|
||||
|
||||
if(devparms->modelserie != 6)
|
||||
{
|
||||
if(spi_mode_combobox->currentIndex() == 0)
|
||||
{
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:MODE TIM");
|
||||
}
|
||||
else
|
||||
{
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:MODE CS");
|
||||
}
|
||||
}
|
||||
|
||||
if(spi_cs_src_combobox->currentIndex() > 0)
|
||||
{
|
||||
if(devparms->modelserie == 6)
|
||||
|
@ -1276,9 +1307,12 @@ void UI_decoder_window::threshold_auto_clicked(int thr_auto)
|
|||
}
|
||||
else
|
||||
{
|
||||
sprintf(str, ":DEC1:SPI:CS CHAN%i", spi_cs_src_combobox->currentIndex());
|
||||
if(devparms->math_decode_spi_mode)
|
||||
{
|
||||
sprintf(str, ":DEC1:SPI:CS CHAN%i", spi_cs_src_combobox->currentIndex());
|
||||
|
||||
mainwindow->set_cue_cmd(str);
|
||||
mainwindow->set_cue_cmd(str);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -1287,9 +1321,31 @@ void UI_decoder_window::threshold_auto_clicked(int thr_auto)
|
|||
{
|
||||
mainwindow->set_cue_cmd(":BUS1:SPI:SS:SOUR OFF");
|
||||
}
|
||||
}
|
||||
|
||||
if(spi_select_combobox->currentIndex() == 0)
|
||||
{
|
||||
if(devparms->modelserie == 6)
|
||||
{
|
||||
mainwindow->set_cue_cmd(":BUS1:SPI:SS:POL NEG");
|
||||
}
|
||||
else
|
||||
{
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:SS OFF");
|
||||
if(devparms->math_decode_spi_mode)
|
||||
{
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:SEL NCS");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(devparms->modelserie == 6)
|
||||
{
|
||||
mainwindow->set_cue_cmd(":BUS1:SPI:SS:POL POS");
|
||||
}
|
||||
else
|
||||
{
|
||||
mainwindow->set_cue_cmd(":DEC1:SPI:SEL CS");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
6
global.h
6
global.h
|
@ -35,7 +35,7 @@
|
|||
|
||||
|
||||
#define PROGRAM_NAME "DSRemote"
|
||||
#define PROGRAM_VERSION "0.33_1612062050"
|
||||
#define PROGRAM_VERSION "0.33_1612081745"
|
||||
|
||||
#define MAX_PATHLEN 4096
|
||||
|
||||
|
@ -206,10 +206,10 @@ struct device_settings
|
|||
int math_decode_spi_end; // endian, 0=lsb, 1=msb
|
||||
int math_decode_spi_width; // databits, 8-32
|
||||
int math_decode_spi_mosi_nval; // number of decoded characters
|
||||
unsigned char math_decode_spi_mosi_val[DECODE_MAX_CHARS]; // array with decoded characters
|
||||
unsigned int math_decode_spi_mosi_val[DECODE_MAX_CHARS]; // array with decoded characters
|
||||
int math_decode_spi_mosi_val_pos[DECODE_MAX_CHARS]; // array with position of the decoded characters
|
||||
int math_decode_spi_miso_nval; // number of decoded characters
|
||||
unsigned char math_decode_spi_miso_val[DECODE_MAX_CHARS]; // array with decoded characters
|
||||
unsigned int math_decode_spi_miso_val[DECODE_MAX_CHARS]; // array with decoded characters
|
||||
int math_decode_spi_miso_val_pos[DECODE_MAX_CHARS]; // array with position of the decoded characters
|
||||
|
||||
int math_decode_uart_tx; // channel (0=off)
|
||||
|
|
|
@ -237,7 +237,8 @@ private:
|
|||
void get_device_model(const char *);
|
||||
double get_stepsize_divide_by_1000(double);
|
||||
void serial_decoder(void);
|
||||
inline unsigned char reverse_bitorder(unsigned char);
|
||||
inline unsigned char reverse_bitorder_8(unsigned char);
|
||||
inline unsigned int reverse_bitorder_32(unsigned int);
|
||||
|
||||
private slots:
|
||||
|
||||
|
|
|
@ -2504,6 +2504,40 @@ void read_settings_thread::run()
|
|||
|
||||
devparms->math_decode_spi_width = atoi(device->buf);
|
||||
|
||||
usleep(TMC_GDS_DELAY);
|
||||
|
||||
if(devparms->modelserie == 6)
|
||||
{
|
||||
if(tmc_write(":BUS1:SPI:END?") != 14)
|
||||
{
|
||||
line = __LINE__;
|
||||
goto GDS_OUT_ERROR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(tmc_write(":DEC1:SPI:END?") != 14)
|
||||
{
|
||||
line = __LINE__;
|
||||
goto GDS_OUT_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
if(tmc_read() < 1)
|
||||
{
|
||||
line = __LINE__;
|
||||
goto GDS_OUT_ERROR;
|
||||
}
|
||||
|
||||
if(!strcmp(device->buf, "LSB"))
|
||||
{
|
||||
devparms->math_decode_spi_end = 0;
|
||||
}
|
||||
else if(!strcmp(device->buf, "MSB"))
|
||||
{
|
||||
devparms->math_decode_spi_end = 1;
|
||||
}
|
||||
|
||||
err_num = 0;
|
||||
|
||||
return;
|
||||
|
|
|
@ -63,20 +63,24 @@ void UI_Mainwindow::serial_decoder(void)
|
|||
uart_tx_start,
|
||||
uart_tx_data_bit,
|
||||
uart_rx_start,
|
||||
uart_rx_data_bit;
|
||||
// spi_mosi_start,
|
||||
// spi_data_mosi_bit,
|
||||
// spi_miso_start,
|
||||
// spi_data_miso_bit;
|
||||
uart_rx_data_bit,
|
||||
spi_data_mosi_bit,
|
||||
spi_data_miso_bit,
|
||||
spi_mosi_bit0_pos=0,
|
||||
spi_miso_bit0_pos=0,
|
||||
spi_clk_new,
|
||||
spi_clk_old,
|
||||
spi_chars=1;
|
||||
|
||||
unsigned int val=0;
|
||||
unsigned int uart_val=0,
|
||||
spi_mosi_val=0,
|
||||
spi_miso_val=0;
|
||||
|
||||
short s_max, s_min;
|
||||
|
||||
double uart_sample_per_bit,
|
||||
uart_tx_x_pos,
|
||||
uart_rx_x_pos,
|
||||
// spi_clk_x_pos,
|
||||
bit_per_volt;
|
||||
|
||||
devparms.math_decode_uart_tx_nval = 0;
|
||||
|
@ -312,7 +316,7 @@ void UI_Mainwindow::serial_decoder(void)
|
|||
{
|
||||
uart_tx_start = 1;
|
||||
|
||||
val = 0;
|
||||
uart_val = 0;
|
||||
|
||||
uart_tx_x_pos = (uart_sample_per_bit * 1.5) + i;
|
||||
|
||||
|
@ -328,7 +332,7 @@ void UI_Mainwindow::serial_decoder(void)
|
|||
{
|
||||
uart_tx_start = 1;
|
||||
|
||||
val = 0;
|
||||
uart_val = 0;
|
||||
|
||||
uart_tx_x_pos = (uart_sample_per_bit * 1.5) + i;
|
||||
|
||||
|
@ -347,7 +351,7 @@ void UI_Mainwindow::serial_decoder(void)
|
|||
{
|
||||
uart_tx_start = 1;
|
||||
|
||||
val = 0;
|
||||
uart_val = 0;
|
||||
|
||||
uart_tx_x_pos = (uart_sample_per_bit * 1.5) + i;
|
||||
|
||||
|
@ -363,7 +367,7 @@ void UI_Mainwindow::serial_decoder(void)
|
|||
{
|
||||
uart_tx_start = 1;
|
||||
|
||||
val = 0;
|
||||
uart_val = 0;
|
||||
|
||||
uart_tx_x_pos = (uart_sample_per_bit * 1.5) + i;
|
||||
|
||||
|
@ -379,14 +383,14 @@ void UI_Mainwindow::serial_decoder(void)
|
|||
{
|
||||
if(devparms.wavebuf[devparms.math_decode_uart_tx - 1][i] >= devparms.math_decode_threshold_uart_tx)
|
||||
{
|
||||
val += (1 << uart_tx_data_bit);
|
||||
uart_val += (1 << uart_tx_data_bit);
|
||||
}
|
||||
}
|
||||
else // modelserie = 1, 2 or 4
|
||||
{
|
||||
if(devparms.wavebuf[devparms.math_decode_uart_tx - 1][i] >= threshold[devparms.math_decode_uart_tx - 1])
|
||||
{
|
||||
val += (1 << uart_tx_data_bit);
|
||||
uart_val += (1 << uart_tx_data_bit);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -394,17 +398,17 @@ void UI_Mainwindow::serial_decoder(void)
|
|||
{
|
||||
if((devparms.math_decode_uart_end) && (devparms.math_decode_format != 4)) // big endian?
|
||||
{
|
||||
val = reverse_bitorder(val);
|
||||
uart_val = reverse_bitorder_8(uart_val);
|
||||
|
||||
val >>= (8 - uart_tx_data_bit);
|
||||
uart_val >>= (8 - uart_tx_data_bit);
|
||||
}
|
||||
|
||||
if(!devparms.math_decode_uart_pol) // positive, line level RS-232 or negative, cpu level TTL/CMOS?
|
||||
{
|
||||
val = ~val;
|
||||
uart_val = ~uart_val;
|
||||
}
|
||||
|
||||
devparms.math_decode_uart_tx_val[devparms.math_decode_uart_tx_nval] = val;
|
||||
devparms.math_decode_uart_tx_val[devparms.math_decode_uart_tx_nval] =uart_val;
|
||||
|
||||
devparms.math_decode_uart_tx_val_pos[devparms.math_decode_uart_tx_nval++] = i - (uart_tx_data_bit * uart_sample_per_bit);
|
||||
|
||||
|
@ -465,7 +469,7 @@ void UI_Mainwindow::serial_decoder(void)
|
|||
|
||||
uart_rx_start = 1;
|
||||
|
||||
val = 0;
|
||||
uart_val = 0;
|
||||
|
||||
uart_rx_x_pos = (uart_sample_per_bit * 1.5) + i;
|
||||
|
||||
|
@ -481,7 +485,7 @@ void UI_Mainwindow::serial_decoder(void)
|
|||
{
|
||||
uart_rx_start = 1;
|
||||
|
||||
val = 0;
|
||||
uart_val = 0;
|
||||
|
||||
uart_rx_x_pos = (uart_sample_per_bit * 1.5) + i;
|
||||
|
||||
|
@ -501,7 +505,7 @@ void UI_Mainwindow::serial_decoder(void)
|
|||
|
||||
uart_rx_start = 1;
|
||||
|
||||
val = 0;
|
||||
uart_val = 0;
|
||||
|
||||
uart_rx_x_pos = (uart_sample_per_bit * 1.5) + i;
|
||||
|
||||
|
@ -517,7 +521,7 @@ void UI_Mainwindow::serial_decoder(void)
|
|||
{
|
||||
uart_rx_start = 1;
|
||||
|
||||
val = 0;
|
||||
uart_val = 0;
|
||||
|
||||
uart_rx_x_pos = (uart_sample_per_bit * 1.5) + i;
|
||||
|
||||
|
@ -533,14 +537,14 @@ void UI_Mainwindow::serial_decoder(void)
|
|||
{
|
||||
if(devparms.wavebuf[devparms.math_decode_uart_rx - 1][i] >= devparms.math_decode_threshold_uart_rx)
|
||||
{
|
||||
val += (1 << uart_rx_data_bit);
|
||||
uart_val += (1 << uart_rx_data_bit);
|
||||
}
|
||||
}
|
||||
else // modelserie = 1, 2 or 4
|
||||
{
|
||||
if(devparms.wavebuf[devparms.math_decode_uart_rx - 1][i] >= threshold[devparms.math_decode_uart_rx - 1])
|
||||
{
|
||||
val += (1 << uart_rx_data_bit);
|
||||
uart_val += (1 << uart_rx_data_bit);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -548,17 +552,17 @@ void UI_Mainwindow::serial_decoder(void)
|
|||
{
|
||||
if((devparms.math_decode_uart_end) && (devparms.math_decode_format != 4)) // big endian?
|
||||
{
|
||||
val = reverse_bitorder(val);
|
||||
uart_val = reverse_bitorder_8(uart_val);
|
||||
|
||||
val >>= (8 - uart_rx_data_bit);
|
||||
uart_val >>= (8 - uart_rx_data_bit);
|
||||
}
|
||||
|
||||
if(!devparms.math_decode_uart_pol) // positive, line level RS-232 or negative, cpu level TTL/CMOS?
|
||||
{
|
||||
val = ~val;
|
||||
uart_val = ~uart_val;
|
||||
}
|
||||
|
||||
devparms.math_decode_uart_rx_val[devparms.math_decode_uart_rx_nval] = val;
|
||||
devparms.math_decode_uart_rx_val[devparms.math_decode_uart_rx_nval] =uart_val;
|
||||
|
||||
devparms.math_decode_uart_rx_val_pos[devparms.math_decode_uart_rx_nval++] = i - (uart_rx_data_bit * uart_sample_per_bit);
|
||||
|
||||
|
@ -596,144 +600,246 @@ void UI_Mainwindow::serial_decoder(void)
|
|||
}
|
||||
}
|
||||
|
||||
// if(devparms.math_decode_mode == DECODE_MODE_SPI)
|
||||
// {
|
||||
// devparms.math_decode_spi_mosi_nval = 0;
|
||||
//
|
||||
// devparms.math_decode_spi_miso_nval = 0;
|
||||
//
|
||||
// spi_mosi_start = 0;
|
||||
//
|
||||
// spi_data_mosi_bit = 0;
|
||||
//
|
||||
// spi_clk_x_pos = 1;
|
||||
//
|
||||
// spi_miso_start = 0;
|
||||
//
|
||||
// spi_data_miso_bit = 0;
|
||||
//
|
||||
// if(devparms.math_decode_spi_mosi)
|
||||
// {
|
||||
// if(devparms.chandisplay[devparms.math_decode_spi_mosi - 1]) // don't try to decode if channel isn't enabled...
|
||||
// {
|
||||
// for(i=1; i<devparms.wavebufsz; i++)
|
||||
// {
|
||||
// if(devparms.math_decode_spi_mosi_nval >= DECODE_MAX_CHARS)
|
||||
// {
|
||||
// break;
|
||||
// }
|
||||
//
|
||||
// if(!spi_mosi_start)
|
||||
// {
|
||||
// if(devparms.math_decode_uart_pol)
|
||||
// {
|
||||
// if(devparms.wavebuf[devparms.math_decode_spi_mosi - 1][i-1] >= threshold[devparms.math_decode_spi_mosi - 1])
|
||||
// {
|
||||
// if(devparms.wavebuf[devparms.math_decode_spi_mosi - 1][i] < threshold[devparms.math_decode_spi_mosi - 1])
|
||||
// {
|
||||
// spi_mosi_start = 1;
|
||||
//
|
||||
// val = 0;
|
||||
//
|
||||
// spi_clk_x_pos = (uart_sample_per_bit * 1.5) + i;
|
||||
//
|
||||
// i = spi_clk_x_pos - 1;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if(devparms.wavebuf[devparms.math_decode_spi_mosi - 1][i-1] < threshold[devparms.math_decode_spi_mosi - 1])
|
||||
// {
|
||||
// if(devparms.wavebuf[devparms.math_decode_spi_mosi - 1][i] >= threshold[devparms.math_decode_spi_mosi - 1])
|
||||
// {
|
||||
// spi_mosi_start = 1;
|
||||
//
|
||||
// val = 0;
|
||||
//
|
||||
// spi_clk_x_pos = (uart_sample_per_bit * 1.5) + i;
|
||||
//
|
||||
// i = spi_clk_x_pos - 1;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if(devparms.math_decode_uart_pol)
|
||||
// {
|
||||
// if(devparms.wavebuf[devparms.math_decode_spi_mosi - 1][i] >= threshold[devparms.math_decode_spi_mosi - 1])
|
||||
// {
|
||||
// val += (1 << spi_data_mosi_bit);
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if(devparms.wavebuf[devparms.math_decode_spi_mosi - 1][i] < threshold[devparms.math_decode_spi_mosi - 1])
|
||||
// {
|
||||
// val += (1 << spi_data_mosi_bit);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if(++spi_data_mosi_bit == devparms.math_decode_uart_width)
|
||||
// {
|
||||
// if((devparms.math_decode_uart_end) && (devparms.math_decode_format != 4)) // little endian?
|
||||
// {
|
||||
// val = reverse_bitorder(val);
|
||||
//
|
||||
// val >>= (8 - spi_data_mosi_bit);
|
||||
// }
|
||||
//
|
||||
// devparms.math_decode_spi_mosi_val[devparms.math_decode_spi_mosi_nval] = val;
|
||||
//
|
||||
// devparms.math_decode_spi_mosi_val_pos[devparms.math_decode_spi_mosi_nval++] = i - (spi_data_mosi_bit * uart_sample_per_bit);
|
||||
//
|
||||
// spi_data_mosi_bit = 0;
|
||||
//
|
||||
// spi_mosi_start = 0;
|
||||
//
|
||||
// spi_clk_x_pos += uart_sample_per_bit;
|
||||
//
|
||||
// if(devparms.math_decode_uart_stop == 1)
|
||||
// {
|
||||
// spi_clk_x_pos += uart_sample_per_bit / 2;
|
||||
// }
|
||||
// else if(devparms.math_decode_uart_stop == 2)
|
||||
// {
|
||||
// spi_clk_x_pos += uart_sample_per_bit;
|
||||
// }
|
||||
//
|
||||
// if(devparms.math_decode_uart_par)
|
||||
// {
|
||||
// spi_clk_x_pos += uart_sample_per_bit;
|
||||
// }
|
||||
//
|
||||
// i = spi_clk_x_pos - 1;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// spi_clk_x_pos += uart_sample_per_bit;
|
||||
//
|
||||
// i = spi_clk_x_pos - 1;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
if(devparms.math_decode_mode == DECODE_MODE_SPI)
|
||||
{
|
||||
devparms.math_decode_spi_mosi_nval = 0;
|
||||
|
||||
devparms.math_decode_spi_miso_nval = 0;
|
||||
|
||||
spi_data_mosi_bit = 0;
|
||||
|
||||
spi_data_miso_bit = 0;
|
||||
|
||||
spi_mosi_val = 0;
|
||||
|
||||
spi_miso_val = 0;
|
||||
|
||||
if(devparms.math_decode_spi_width > 24)
|
||||
{
|
||||
spi_chars = 4;
|
||||
}
|
||||
else if(devparms.math_decode_spi_width > 16)
|
||||
{
|
||||
spi_chars = 3;
|
||||
}
|
||||
else if(devparms.math_decode_spi_width > 8)
|
||||
{
|
||||
spi_chars = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
spi_chars = 1;
|
||||
}
|
||||
|
||||
if(devparms.math_decode_spi_edge) // sample at rising edge of spi clock?
|
||||
{
|
||||
spi_clk_old = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
spi_clk_old = 0;
|
||||
}
|
||||
|
||||
if(!devparms.chandisplay[devparms.math_decode_spi_clk]) // without a clock we can't do much...
|
||||
{
|
||||
goto SPI_DECODE_OUT;
|
||||
}
|
||||
|
||||
if(devparms.math_decode_spi_mode) // use chip select line?
|
||||
{
|
||||
if(devparms.math_decode_spi_cs) // is chip select channel selected?
|
||||
{
|
||||
if(!devparms.chandisplay[devparms.math_decode_spi_cs]) // is selected channel for CS enabled?
|
||||
{
|
||||
goto SPI_DECODE_OUT;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
goto SPI_DECODE_OUT;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// FIXME use time out
|
||||
}
|
||||
|
||||
for(i=0; i<devparms.wavebufsz; i++)
|
||||
{
|
||||
if(devparms.math_decode_spi_mosi_nval >= DECODE_MAX_CHARS)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if(devparms.math_decode_spi_mode) // use chip select line?
|
||||
{
|
||||
if(devparms.math_decode_spi_select) // use positive chip select?
|
||||
{
|
||||
if(devparms.wavebuf[devparms.math_decode_spi_cs - 1][i] < threshold[devparms.math_decode_spi_cs - 1])
|
||||
{
|
||||
spi_data_mosi_bit = 0;
|
||||
|
||||
spi_data_miso_bit = 0;
|
||||
|
||||
continue; // chip select is not active
|
||||
}
|
||||
}
|
||||
else // use negative chip select?
|
||||
{
|
||||
if(devparms.wavebuf[devparms.math_decode_spi_cs - 1][1] >= threshold[devparms.math_decode_spi_cs - 1])
|
||||
{
|
||||
spi_data_mosi_bit = 0;
|
||||
|
||||
spi_data_miso_bit = 0;
|
||||
|
||||
continue; // chip select is not active
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(devparms.wavebuf[devparms.math_decode_spi_clk][i] >= threshold[devparms.math_decode_spi_clk])
|
||||
{
|
||||
spi_clk_new = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
spi_clk_new = 0;
|
||||
}
|
||||
|
||||
if(spi_clk_old == spi_clk_new)
|
||||
{
|
||||
continue; // no clock change
|
||||
}
|
||||
|
||||
if(devparms.math_decode_spi_edge != spi_clk_new) // wrong clock edge?
|
||||
{
|
||||
spi_clk_old = spi_clk_new;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
spi_clk_old = spi_clk_new;
|
||||
|
||||
if(devparms.math_decode_spi_mosi)
|
||||
{
|
||||
if(devparms.chandisplay[devparms.math_decode_spi_mosi - 1]) // don't try to decode if channel isn't enabled...
|
||||
{
|
||||
if(devparms.wavebuf[devparms.math_decode_spi_mosi - 1][i] >= threshold[devparms.math_decode_spi_mosi - 1])
|
||||
{
|
||||
spi_mosi_val += (1 << spi_data_mosi_bit);
|
||||
}
|
||||
|
||||
if(!spi_data_mosi_bit) spi_mosi_bit0_pos = i;
|
||||
|
||||
if(++spi_data_mosi_bit == devparms.math_decode_spi_width)
|
||||
{
|
||||
if((devparms.math_decode_spi_end) && (devparms.math_decode_format != 4)) // big endian?
|
||||
{
|
||||
spi_mosi_val = reverse_bitorder_32(spi_mosi_val);
|
||||
|
||||
spi_mosi_val >>= (32 - spi_data_mosi_bit);
|
||||
}
|
||||
|
||||
if(!devparms.math_decode_spi_pol)
|
||||
{
|
||||
spi_mosi_val = ~spi_mosi_val;
|
||||
|
||||
switch(spi_chars)
|
||||
{
|
||||
case 1: spi_mosi_val &= 0xff;
|
||||
break;
|
||||
case 2: spi_mosi_val &= 0xffff;
|
||||
break;
|
||||
case 3: spi_mosi_val &= 0xffffff;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
devparms.math_decode_spi_mosi_val[devparms.math_decode_spi_mosi_nval] = spi_mosi_val;
|
||||
|
||||
devparms.math_decode_spi_mosi_val_pos[devparms.math_decode_spi_mosi_nval++] = spi_mosi_bit0_pos;
|
||||
|
||||
spi_data_mosi_bit = 0;
|
||||
|
||||
spi_mosi_val = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(devparms.math_decode_spi_miso)
|
||||
{
|
||||
if(devparms.chandisplay[devparms.math_decode_spi_miso - 1]) // don't try to decode if channel isn't enabled...
|
||||
{
|
||||
if(devparms.wavebuf[devparms.math_decode_spi_miso - 1][i] >= threshold[devparms.math_decode_spi_miso - 1])
|
||||
{
|
||||
spi_miso_val += (1 << spi_data_miso_bit);
|
||||
}
|
||||
|
||||
if(!spi_data_miso_bit) spi_miso_bit0_pos = i;
|
||||
|
||||
if(++spi_data_miso_bit == devparms.math_decode_spi_width)
|
||||
{
|
||||
if((devparms.math_decode_spi_end) && (devparms.math_decode_format != 4)) // big endian?
|
||||
{
|
||||
spi_miso_val = reverse_bitorder_32(spi_miso_val);
|
||||
|
||||
spi_miso_val >>= (32 - spi_data_miso_bit);
|
||||
}
|
||||
|
||||
if(!devparms.math_decode_spi_pol)
|
||||
{
|
||||
spi_miso_val = ~spi_miso_val;
|
||||
}
|
||||
|
||||
devparms.math_decode_spi_miso_val[devparms.math_decode_spi_miso_nval] = spi_miso_val;
|
||||
|
||||
devparms.math_decode_spi_miso_val_pos[devparms.math_decode_spi_miso_nval++] = spi_miso_bit0_pos;
|
||||
|
||||
spi_data_miso_bit = 0;
|
||||
|
||||
spi_miso_val = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SPI_DECODE_OUT:
|
||||
|
||||
i = 0; // FIXME
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inline unsigned char UI_Mainwindow::reverse_bitorder(unsigned char byte)
|
||||
inline unsigned char UI_Mainwindow::reverse_bitorder_8(unsigned char byte)
|
||||
{
|
||||
byte = (byte & 0xF0) >> 4 | (byte & 0x0F) << 4;
|
||||
byte = (byte & 0xCC) >> 2 | (byte & 0x33) << 2;
|
||||
byte = (byte & 0xAA) >> 1 | (byte & 0x55) << 1;
|
||||
byte = (byte & 0xf0) >> 4 | (byte & 0x0f) << 4;
|
||||
byte = (byte & 0xcc) >> 2 | (byte & 0x33) << 2;
|
||||
byte = (byte & 0xaa) >> 1 | (byte & 0x55) << 1;
|
||||
|
||||
return byte;
|
||||
}
|
||||
|
||||
|
||||
inline unsigned int UI_Mainwindow::reverse_bitorder_32(unsigned int val)
|
||||
{
|
||||
val = (val & 0xffff0000) >> 16 | (val & 0x0000ffff) << 16;
|
||||
val = (val & 0xff00ff00) >> 8 | (val & 0x00ff00ff) << 8;
|
||||
val = (val & 0xf0f0f0f0) >> 4 | (val & 0x0f0f0f0f) << 4;
|
||||
val = (val & 0xcccccccc) >> 2 | (val & 0x33333333) << 2;
|
||||
val = (val & 0xaaaaaaaa) >> 1 | (val & 0x55555555) << 1;
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
220
signalcurve.cpp
220
signalcurve.cpp
|
@ -2255,11 +2255,14 @@ bool SignalCurve::hasMoveEvent(void)
|
|||
|
||||
void SignalCurve::draw_decoder(QPainter *painter, int dw, int dh)
|
||||
{
|
||||
int i, j,
|
||||
int i, j, k,
|
||||
cell_width,
|
||||
base_line,
|
||||
line_h_uart_tx=0,
|
||||
line_h_uart_rx=0;
|
||||
line_h_uart_rx=0,
|
||||
line_h_spi_mosi=0,
|
||||
line_h_spi_miso=0,
|
||||
spi_chars=1;
|
||||
|
||||
double pix_per_smpl;
|
||||
|
||||
|
@ -2462,6 +2465,219 @@ void SignalCurve::draw_decoder(QPainter *painter, int dw, int dh)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(devparms->math_decode_mode == DECODE_MODE_SPI)
|
||||
{
|
||||
painter->setPen(Qt::green);
|
||||
|
||||
if(devparms->math_decode_spi_width > 24)
|
||||
{
|
||||
spi_chars = 4;
|
||||
}
|
||||
else if(devparms->math_decode_spi_width > 16)
|
||||
{
|
||||
spi_chars = 3;
|
||||
}
|
||||
else if(devparms->math_decode_spi_width > 8)
|
||||
{
|
||||
spi_chars = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
spi_chars = 1;
|
||||
}
|
||||
|
||||
cell_width *= spi_chars;
|
||||
|
||||
if(devparms->math_decode_spi_mosi && devparms->math_decode_spi_miso)
|
||||
{
|
||||
line_h_spi_mosi = base_line - 5;
|
||||
|
||||
line_h_spi_miso = base_line + 45;
|
||||
|
||||
painter->drawLine(0, line_h_spi_mosi, dw, line_h_spi_mosi);
|
||||
|
||||
painter->drawLine(0, line_h_spi_miso, dw, line_h_spi_miso);
|
||||
}
|
||||
else if(devparms->math_decode_spi_mosi)
|
||||
{
|
||||
line_h_spi_mosi = base_line;
|
||||
|
||||
painter->drawLine(0, line_h_spi_mosi, dw, line_h_spi_mosi);
|
||||
}
|
||||
else if(devparms->math_decode_spi_miso)
|
||||
{
|
||||
line_h_spi_miso = base_line;
|
||||
|
||||
painter->drawLine(0, line_h_spi_miso, dw, line_h_spi_miso);
|
||||
}
|
||||
|
||||
if(devparms->math_decode_spi_mosi)
|
||||
{
|
||||
for(i=0; i<devparms->math_decode_spi_mosi_nval; i++)
|
||||
{
|
||||
painter->fillRect(devparms->math_decode_spi_mosi_val_pos[i] * pix_per_smpl, line_h_spi_mosi - 13, cell_width, 26, Qt::black);
|
||||
|
||||
painter->drawRect(devparms->math_decode_spi_mosi_val_pos[i] * pix_per_smpl, line_h_spi_mosi - 13, cell_width, 26);
|
||||
}
|
||||
}
|
||||
|
||||
if(devparms->math_decode_spi_miso)
|
||||
{
|
||||
for(i=0; i<devparms->math_decode_spi_miso_nval; i++)
|
||||
{
|
||||
painter->fillRect(devparms->math_decode_spi_miso_val_pos[i] * pix_per_smpl, line_h_spi_miso - 13, cell_width, 26, Qt::black);
|
||||
|
||||
painter->drawRect(devparms->math_decode_spi_miso_val_pos[i] * pix_per_smpl, line_h_spi_miso - 13, cell_width, 26);
|
||||
}
|
||||
}
|
||||
|
||||
painter->setPen(Qt::white);
|
||||
|
||||
if(devparms->math_decode_spi_mosi)
|
||||
{
|
||||
painter->drawText(5, line_h_spi_mosi - 35, 40, 30, Qt::AlignCenter, "MOSI");
|
||||
|
||||
for(i=0; i<devparms->math_decode_spi_mosi_nval; i++)
|
||||
{
|
||||
if(devparms->math_decode_format == 0) // hex
|
||||
{
|
||||
switch(spi_chars)
|
||||
{
|
||||
case 1: sprintf(str, "0x%02X", devparms->math_decode_spi_mosi_val[i]);
|
||||
break;
|
||||
case 2: sprintf(str, "0x%04X", devparms->math_decode_spi_mosi_val[i]);
|
||||
break;
|
||||
case 3: sprintf(str, "0x%06X", devparms->math_decode_spi_mosi_val[i]);
|
||||
break;
|
||||
case 4: sprintf(str, "0x%08X", devparms->math_decode_spi_mosi_val[i]);
|
||||
break;
|
||||
}
|
||||
|
||||
painter->drawText(devparms->math_decode_spi_mosi_val_pos[i] * pix_per_smpl, line_h_spi_mosi - 13, cell_width, 30, Qt::AlignCenter, str);
|
||||
}
|
||||
else if(devparms->math_decode_format == 1) // ASCII
|
||||
{
|
||||
for(k=0; k<spi_chars; k++)
|
||||
{
|
||||
str[k]= devparms->math_decode_spi_mosi_val[i] >> (k * 8);
|
||||
|
||||
if((str[k] < 33) || (str[k] > 126))
|
||||
{
|
||||
str[k] = '.';
|
||||
}
|
||||
}
|
||||
|
||||
str[k] = 0;
|
||||
|
||||
painter->drawText(devparms->math_decode_spi_mosi_val_pos[i] * pix_per_smpl, line_h_spi_mosi - 13, cell_width, 30, Qt::AlignCenter, str);
|
||||
}
|
||||
else if(devparms->math_decode_format == 2) // decimal
|
||||
{
|
||||
sprintf(str, "%u", devparms->math_decode_spi_mosi_val[i]);
|
||||
|
||||
painter->drawText(devparms->math_decode_spi_mosi_val_pos[i] * pix_per_smpl, line_h_spi_mosi - 13, cell_width, 30, Qt::AlignCenter, str);
|
||||
}
|
||||
else if(devparms->math_decode_format == 3) // binary
|
||||
{
|
||||
str[0] = '0';
|
||||
str[1] = 'b';
|
||||
|
||||
for(j=0; j<devparms->math_decode_spi_width; j++)
|
||||
{
|
||||
str[devparms->math_decode_spi_width + 1 - j] = ((devparms->math_decode_spi_mosi_val[i] >> j) & 1) + '0';
|
||||
}
|
||||
|
||||
str[j + 2] = 0;
|
||||
|
||||
painter->drawText(devparms->math_decode_spi_mosi_val_pos[i] * pix_per_smpl, line_h_spi_mosi - 13, cell_width, 30, Qt::AlignCenter, str);
|
||||
}
|
||||
else if(devparms->math_decode_format == 4) // line
|
||||
{
|
||||
for(j=0; j<devparms->math_decode_spi_width; j++)
|
||||
{
|
||||
str[j] = ((devparms->math_decode_spi_mosi_val[i] >> j) & 1) + '0';
|
||||
}
|
||||
|
||||
str[devparms->math_decode_spi_width] = 0;
|
||||
|
||||
painter->drawText(devparms->math_decode_spi_mosi_val_pos[i] * pix_per_smpl, line_h_spi_mosi - 13, cell_width, 30, Qt::AlignCenter, str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(devparms->math_decode_spi_miso)
|
||||
{
|
||||
painter->drawText(5, line_h_spi_miso - 35, 40, 30, Qt::AlignCenter, "MISO");
|
||||
|
||||
for(i=0; i<devparms->math_decode_spi_miso_nval; i++)
|
||||
{
|
||||
if(devparms->math_decode_format == 0) // hex
|
||||
{
|
||||
switch(spi_chars)
|
||||
{
|
||||
case 1: sprintf(str, "0x%02X", devparms->math_decode_spi_miso_val[i]);
|
||||
break;
|
||||
case 2: sprintf(str, "0x%04X", devparms->math_decode_spi_miso_val[i]);
|
||||
break;
|
||||
case 3: sprintf(str, "0x%06X", devparms->math_decode_spi_miso_val[i]);
|
||||
break;
|
||||
case 4: sprintf(str, "0x%08X", devparms->math_decode_spi_miso_val[i]);
|
||||
break;
|
||||
}
|
||||
|
||||
painter->drawText(devparms->math_decode_spi_miso_val_pos[i] * pix_per_smpl, line_h_spi_miso - 13, cell_width, 30, Qt::AlignCenter, str);
|
||||
}
|
||||
else if(devparms->math_decode_format == 1) // ASCII
|
||||
{
|
||||
for(k=0; k<spi_chars; k++)
|
||||
{
|
||||
str[k]= devparms->math_decode_spi_miso_val[i] >> (k * 8);
|
||||
|
||||
if((str[k] < 33) || (str[k] > 126))
|
||||
{
|
||||
str[k] = '.';
|
||||
}
|
||||
}
|
||||
|
||||
str[k] = 0;
|
||||
|
||||
painter->drawText(devparms->math_decode_spi_miso_val_pos[i] * pix_per_smpl, line_h_spi_miso - 13, cell_width, 30, Qt::AlignCenter, str);
|
||||
}
|
||||
else if(devparms->math_decode_format == 2) // decimal
|
||||
{
|
||||
sprintf(str, "%u", devparms->math_decode_spi_miso_val[i]);
|
||||
|
||||
painter->drawText(devparms->math_decode_spi_miso_val_pos[i] * pix_per_smpl, line_h_spi_miso - 13, cell_width, 30, Qt::AlignCenter, str);
|
||||
}
|
||||
else if(devparms->math_decode_format == 3) // binary
|
||||
{
|
||||
str[0] = '0';
|
||||
str[1] = 'b';
|
||||
|
||||
for(j=0; j<devparms->math_decode_spi_width; j++)
|
||||
{
|
||||
str[devparms->math_decode_spi_width + 1 - j] = ((devparms->math_decode_spi_miso_val[i] >> j) & 1) + '0';
|
||||
}
|
||||
|
||||
str[j + 2] = 0;
|
||||
|
||||
painter->drawText(devparms->math_decode_spi_miso_val_pos[i] * pix_per_smpl, line_h_spi_miso - 13, cell_width, 30, Qt::AlignCenter, str);
|
||||
}
|
||||
else if(devparms->math_decode_format == 4) // line
|
||||
{
|
||||
for(j=0; j<devparms->math_decode_spi_width; j++)
|
||||
{
|
||||
str[j] = ((devparms->math_decode_spi_miso_val[i] >> j) & 1) + '0';
|
||||
}
|
||||
|
||||
str[devparms->math_decode_spi_width] = 0;
|
||||
|
||||
painter->drawText(devparms->math_decode_spi_miso_val_pos[i] * pix_per_smpl, line_h_spi_miso - 13, cell_width, 30, Qt::AlignCenter, str);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue