Skip to content

Commit cc62bcc

Browse files
committed
diag:regs
1 parent 4cf5ff7 commit cc62bcc

File tree

6 files changed

+110
-5
lines changed

6 files changed

+110
-5
lines changed

src/eez/apps/psu/scpi/diag.cpp

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
*/
1818

19+
#include <eez/system.h>
20+
1921
#include <eez/apps/psu/psu.h>
2022

2123
#include <stdio.h>
@@ -402,6 +404,71 @@ scpi_result_t scpi_cmd_diagnosticInformationFanQ(scpi_t *context) {
402404
return SCPI_RES_OK;
403405
}
404406

407+
static uint8_t g_ioexpRegisters[CH_MAX][32];
408+
static uint8_t g_adcRegisters[CH_MAX][4];
409+
410+
void diagCallback() {
411+
for (int i = 0; i < CH_MAX; i++) {
412+
Channel& channel = Channel::get(i);
413+
if (channel.isInstalled()) {
414+
channel.ioexp.readAllRegisters(&g_ioexpRegisters[i][0]);
415+
channel.adc.readAllRegisters(&g_adcRegisters[i][0]);
416+
}
417+
}
418+
}
419+
420+
scpi_result_t scpi_cmd_diagnosticInformationRegsQ(scpi_t *context) {
421+
g_diagCallback = diagCallback;
422+
while (g_diagCallback) {
423+
osDelay(1);
424+
}
425+
426+
char buffer[2048];
427+
428+
buffer[0] = 0;
429+
430+
for (int i = 0; i < CH_MAX; i++) {
431+
Channel& channel = Channel::get(i);
432+
if (channel.isInstalled()) {
433+
sprintf(buffer + strlen(buffer), "CH%d:\n", i + 1);
434+
435+
sprintf(buffer + strlen(buffer), "\tIOEXP:\n");
436+
sprintf(buffer + strlen(buffer), "\t\tIODIRA %X\n", (int)g_ioexpRegisters[i][0]);
437+
sprintf(buffer + strlen(buffer), "\t\tIODIRB %X\n", (int)g_ioexpRegisters[i][1]);
438+
sprintf(buffer + strlen(buffer), "\t\tIPOLA %X\n", (int)g_ioexpRegisters[i][2]);
439+
sprintf(buffer + strlen(buffer), "\t\tIPOLB %X\n", (int)g_ioexpRegisters[i][3]);
440+
sprintf(buffer + strlen(buffer), "\t\tGPINTENA %X\n", (int)g_ioexpRegisters[i][4]);
441+
sprintf(buffer + strlen(buffer), "\t\tGPINTENB %X\n", (int)g_ioexpRegisters[i][5]);
442+
sprintf(buffer + strlen(buffer), "\t\tDEFVALA %X\n", (int)g_ioexpRegisters[i][6]);
443+
sprintf(buffer + strlen(buffer), "\t\tDEFVALB %X\n", (int)g_ioexpRegisters[i][7]);
444+
sprintf(buffer + strlen(buffer), "\t\tINTCONA %X\n", (int)g_ioexpRegisters[i][8]);
445+
sprintf(buffer + strlen(buffer), "\t\tINTCONB %X\n", (int)g_ioexpRegisters[i][9]);
446+
sprintf(buffer + strlen(buffer), "\t\tIOCON %X\n", (int)g_ioexpRegisters[i][10]);
447+
sprintf(buffer + strlen(buffer), "\t\tIOCON %X\n", (int)g_ioexpRegisters[i][11]);
448+
sprintf(buffer + strlen(buffer), "\t\tGPPUA %X\n", (int)g_ioexpRegisters[i][12]);
449+
sprintf(buffer + strlen(buffer), "\t\tGPPUB %X\n", (int)g_ioexpRegisters[i][13]);
450+
sprintf(buffer + strlen(buffer), "\t\tINTFA %X\n", (int)g_ioexpRegisters[i][14]);
451+
sprintf(buffer + strlen(buffer), "\t\tINTFB %X\n", (int)g_ioexpRegisters[i][15]);
452+
sprintf(buffer + strlen(buffer), "\t\tINTCAPA %X\n", (int)g_ioexpRegisters[i][16]);
453+
sprintf(buffer + strlen(buffer), "\t\tINTCAPB %X\n", (int)g_ioexpRegisters[i][17]);
454+
sprintf(buffer + strlen(buffer), "\t\tGPIOA %X\n", (int)g_ioexpRegisters[i][18]);
455+
sprintf(buffer + strlen(buffer), "\t\tGPIOB %X\n", (int)g_ioexpRegisters[i][19]);
456+
sprintf(buffer + strlen(buffer), "\t\tOLATA %X\n", (int)g_ioexpRegisters[i][20]);
457+
sprintf(buffer + strlen(buffer), "\t\tOLATB %X\n", (int)g_ioexpRegisters[i][21]);
458+
459+
sprintf(buffer + strlen(buffer), "\tADC:\n");
460+
sprintf(buffer + strlen(buffer), "\t\tREG0 %X\n", (int)g_adcRegisters[i][0]);
461+
sprintf(buffer + strlen(buffer), "\t\tREG1 %X\n", (int)g_adcRegisters[i][1]);
462+
sprintf(buffer + strlen(buffer), "\t\tREG2 %X\n", (int)g_adcRegisters[i][2]);
463+
sprintf(buffer + strlen(buffer), "\t\tREG3 %X\n", (int)g_adcRegisters[i][3]);
464+
}
465+
}
466+
467+
SCPI_ResultCharacters(context, buffer, strlen(buffer));
468+
469+
return SCPI_RES_OK;
470+
}
471+
405472
} // namespace scpi
406473
} // namespace psu
407-
} // namespace eez
474+
} // namespace eez

src/eez/modules/dcpX05/eeprom.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,16 @@ bool read(uint8_t slotIndex, uint8_t *buffer, uint16_t bufferSize, uint16_t addr
8787
return true;
8888
#endif
8989

90-
buffer[0] = 405 & 0xff;
91-
buffer[1] = 405 >> 8;
90+
if (slotIndex == 0) {
91+
buffer[0] = 405 & 0xff;
92+
buffer[1] = 405 >> 8;
93+
} else if (slotIndex == 1) {
94+
buffer[0] = 406 & 0xff;
95+
buffer[1] = 406 >> 8;
96+
} else {
97+
buffer[0] = 505 & 0xff;
98+
buffer[1] = 505 >> 8;
99+
}
92100

93101
return true;
94102
}

src/eez/modules/psu/adc.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ class AnalogDigitalConverter {
3737
static const uint8_t ADC_RD3S1 = 0B00100110;
3838
static const uint8_t ADC_WR1S0 = 0B01000000;
3939
static const uint8_t ADC_WR4S0 = 0B01000011;
40-
40+
static const uint8_t ADC_RD4S0 = 0B00100011;
41+
4142
static const uint8_t ADC_REG0_READ_U_MON = 0x81; // B10000001: [7:4] AINP = AIN0, AINN = AVSS, [3:1] Gain = 1, [0] PGA disabled and bypassed
4243
static const uint8_t ADC_REG0_READ_I_SET = 0x91; // B10010001: [7:4] AINP = AIN1, AINN = AVSS, [3:1] Gain = 1, [0] PGA disabled and bypassed
4344
static const uint8_t ADC_REG0_READ_U_SET = 0xA1; // B10100001: [7:4] AINP = AIN2, AINN = AVSS, [3:1] Gain = 1, [0] PGA disabled and bypassed
@@ -56,6 +57,8 @@ class AnalogDigitalConverter {
5657
void start(uint8_t reg0);
5758
int16_t read();
5859

60+
void readAllRegisters(uint8_t registers[]);
61+
5962
private:
6063
Channel &channel;
6164
uint32_t start_time;

src/eez/modules/psu/simulator/adc.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,5 +119,8 @@ int16_t AnalogDigitalConverter::read() {
119119
}
120120
}
121121

122+
void AnalogDigitalConverter::readAllRegisters(uint8_t registers[]) {
123+
}
124+
122125
} // namespace psu
123126
} // namespace eez

src/eez/modules/psu/stm32/adc.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,5 +187,29 @@ int16_t AnalogDigitalConverter::read() {
187187
return (int16_t)((dmsb << 8) | dlsb);
188188
}
189189

190+
void AnalogDigitalConverter::readAllRegisters(uint8_t registers[]) {
191+
uint8_t data[5];
192+
uint8_t result[5];
193+
194+
data[0] = ADC_RD4S0;
195+
data[1] = 0;
196+
data[2] = 0;
197+
data[3] = 0;
198+
data[4] = 0;
199+
200+
spi::select(channel.slotIndex, spi::CHIP_ADC);
201+
spi::transfer(channel.slotIndex, data, result, 5);
202+
spi::deselect(channel.slotIndex);
203+
204+
registers[0] = result[1];
205+
registers[1] = result[2];
206+
registers[2] = result[3];
207+
registers[3] = result[4];
208+
209+
if (start_reg0) {
210+
start(start_reg0);
211+
}
212+
}
213+
190214
} // namespace psu
191215
} // namespace eez

src/eez/sound.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* EEZ Generic Firmware
2+
* EEZ Modular PSU Firmware
33
* Copyright (C) 2018-present, Envox d.o.o.
44
*
55
* This program is free software: you can redistribute it and/or modify

0 commit comments

Comments
 (0)