blob: 9be1c48bc0518337073d482e5e09e3de5797391c [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
#define UJSON_SERDE_IMPL 1
#include "sw/device/lib/testing/json/gpio.h"
#include "sw/device/lib/dif/dif_gpio.h"
#include "sw/device/lib/testing/test_framework/ujson_ottf.h"
status_t gpio_set(ujson_t *uj, const dif_gpio_t *gpio) {
gpio_set_t op;
TRY(ujson_deserialize_gpio_set_t(uj, &op));
switch (op.action) {
case kGpioActionWrite:
TRY(dif_gpio_write(gpio, (dif_gpio_pin_t)op.pin_mask, (bool)op.state));
break;
case kGpioActionWriteAll:
TRY(dif_gpio_write_all(gpio, (dif_gpio_state_t)op.state));
break;
case kGpioActionWriteMasked:
TRY(dif_gpio_write_masked(gpio, (dif_gpio_mask_t)op.pin_mask,
(dif_gpio_state_t)op.state));
break;
case kGpioActionSetEnabled:
TRY(dif_gpio_output_set_enabled(gpio, (dif_gpio_pin_t)op.pin_mask,
(dif_toggle_t)op.state));
break;
case kGpioActionSetEnabledAll:
TRY(dif_gpio_output_set_enabled_all(gpio, (dif_gpio_state_t)op.state));
break;
case kGpioActionSetEnabledMasked:
TRY(dif_gpio_output_set_enabled_masked(gpio, (dif_gpio_mask_t)op.pin_mask,
(dif_gpio_state_t)op.state));
break;
case kGpioActionSetInputNoiseFilter:
TRY(dif_gpio_input_noise_filter_set_enabled(
gpio, (dif_gpio_mask_t)op.pin_mask, (dif_gpio_state_t)op.state));
break;
default:
return INVALID_ARGUMENT();
}
return RESP_OK_STATUS(uj);
}
status_t gpio_get(ujson_t *uj, const dif_gpio_t *gpio) {
dif_gpio_state_t state;
TRY(dif_gpio_read_all(gpio, &state));
gpio_get_t val = {state};
return RESP_OK(ujson_serialize_gpio_get_t, uj, &val);
}