Добавить переносимый драйвер parallel NAND
This commit is contained in:
43
src/parallel_nand_pcan_gas.c
Normal file
43
src/parallel_nand_pcan_gas.c
Normal file
@@ -0,0 +1,43 @@
|
||||
#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";
|
||||
}
|
||||
Reference in New Issue
Block a user