#include "parallel_nand_pcan_gas.h" static pcan_gas_status_t convert(parallel_nand_gas_result_t result) { switch (result) { case PNAND_GAS_OK: return PCAN_GAS_OK; case PNAND_GAS_NO_REG: return PCAN_GAS_NO_REG; case PNAND_GAS_READ_ONLY: return PCAN_GAS_READ_ONLY; default: return PCAN_GAS_REJECTED; } } static pcan_gas_status_t read_reg(const pcan_gas_region_t *region, uint16_t offset, uint16_t *value) { parallel_nand_gas_t *gas = (parallel_nand_gas_t *)region->user; unsigned int portable_value; parallel_nand_gas_result_t result = parallel_nand_gas_read( gas, (unsigned int)region->base + offset, &portable_value); if (result == PNAND_GAS_OK) *value = (uint16_t)portable_value; return convert(result); } static pcan_gas_status_t write_reg(const pcan_gas_region_t *region, uint16_t offset, uint16_t value) { parallel_nand_gas_t *gas = (parallel_nand_gas_t *)region->user; return convert(parallel_nand_gas_write( gas, (unsigned int)region->base + offset, value)); } void parallel_nand_pcan_gas_region_init(pcan_gas_region_t *region, parallel_nand_gas_t *gas) { region->base = (uint16_t)gas->base; region->count = PNAND_GAS_REGION_REGS; region->storage = 0; region->read = read_reg; region->write = write_reg; region->flags = 0U; region->user = gas; region->name = "parallel-nand"; }