Skip to content

Commit a9fbd7b

Browse files
authored
Merge pull request #38 from jancumps/issue-5-query-gpio-input
Issue 35 refactor i2c initialisation
2 parents 2b82c5c + ba7948e commit a9fbd7b

File tree

3 files changed

+39
-8
lines changed

3 files changed

+39
-8
lines changed

source/gpio/gpio_utils.c

+18-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ uint outPins[] = {
99
if you want to use this pin, remove the led_blinking_task() */
1010
22, 14, 15};
1111

12-
// TODO input pins
12+
uint inPins[] = {
13+
20, 21, 27};
1314

1415
void initGpioUtils() {
1516
return; // nothing needed
@@ -19,14 +20,26 @@ uint32_t outPinCount() {
1920
return sizeof(outPins)/sizeof(outPins[0]);
2021
}
2122

23+
uint32_t inPinCount() {
24+
return sizeof(inPins)/sizeof(inPins[0]);
25+
}
26+
2227
void initOutPins() {
2328
for (uint32_t i = 0; i < outPinCount(); i++) {
2429
gpio_init(outPins[i]);
25-
gpio_set_dir(outPins[i], 1);
30+
gpio_set_dir(outPins[i], true);
2631
gpio_put(outPins[i], 0);
2732
}
2833
}
2934

35+
void initInPins() {
36+
for (uint32_t i = 0; i < inPinCount(); i++) {
37+
gpio_init(inPins[i]);
38+
gpio_set_dir(inPins[i], false);
39+
gpio_put(inPins[i], 0);
40+
}
41+
}
42+
3043
void setOutPinAt(uint32_t index, bool on) {
3144
gpio_put(outPins[index], on);
3245
}
@@ -35,4 +48,6 @@ bool isOutPinAt(uint32_t index) {
3548
return gpio_get_out_level(outPins[index]);
3649
}
3750

38-
// TODO input pins
51+
bool isInPinAt(uint32_t index) {
52+
return gpio_get(inPins[index]);
53+
}

source/gpio/gpio_utils.h

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
#ifndef _GPIO_UTILS_H
22
#define _GPIO_UTILS_H
33

4+
void initGpioUtils();
45

56
uint32_t outPinCount();
6-
void initGpioUtils();
7+
78
void initOutPins();
89
void setOutPinAt(uint32_t index, bool on);
910
bool isOutPinAt(uint32_t index);
1011

11-
// TODO gpio input pins
12+
uint32_t inPinCount();
13+
14+
void initInPins();
15+
bool isInPinAt(uint32_t index);
1216

1317
#endif // _GPIO_UTILS_H

source/scpi/scpi-def.c

+15-3
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,19 @@ static scpi_result_t SCPI_DigitalOutputQ(scpi_t * context) {
110110
return SCPI_RES_OK;
111111
}
112112

113-
// TODO gpio in commands
113+
static scpi_result_t SCPI_DigitalInputQ(scpi_t * context) {
114+
int32_t numbers[1];
115+
116+
// retrieve the output index
117+
SCPI_CommandNumbers(context, numbers, 1, 0);
118+
if (! ((numbers[0] > -1) && (numbers[0] < inPinCount()))) {
119+
SCPI_ErrorPush(context, SCPI_ERROR_INVALID_SUFFIX);
120+
return SCPI_RES_ERR;
121+
}
122+
123+
SCPI_ResultBool(context, isInPinAt(numbers[0]));
124+
return SCPI_RES_OK;
125+
}
114126

115127
static scpi_result_t SCPI_AnalogInputQ(scpi_t * context) {
116128
int32_t numbers[1];
@@ -200,7 +212,7 @@ const scpi_command_t scpi_commands[] = {
200212
/* custom commands for the switch */
201213
{.pattern = "DIGItal:OUTPut#", .callback = SCPI_DigitalOutput,},
202214
{.pattern = "DIGItal:OUTPut#?", .callback = SCPI_DigitalOutputQ,},
203-
// TODO gpio in commands
215+
{.pattern = "DIGItal:INPut#?", .callback = SCPI_DigitalInputQ,},
204216
// adc commands
205217
{.pattern = "ANAlog:INPut#:RAW?", .callback = SCPI_AnalogInputQ,},
206218
{.pattern = "ANAlog:HIRES:INPut#:RAW?", .callback = SCPI_Analog16InputQ,},
@@ -265,8 +277,8 @@ scpi_result_t SCPI_Reset(scpi_t * context) {
265277
void initInstrument() {
266278
initGpioUtils();
267279
initOutPins();
280+
initInPins();
268281
initI2CUtils();
269-
// TODO input pins
270282
initAdcUtils();
271283
initAdcPins();
272284
initAdc16Reg();

0 commit comments

Comments
 (0)