| // 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); |
| } |