X-Git-Url: http://rtime.felk.cvut.cz/gitweb/pes-rpp/rpp-test-sw.git/blobdiff_plain/2f8a0b6c77bad54eb2b02c987d9e05e457ff73d8..9c52fa3be093456e383bb5fc96c7282ddae64b56:/rpp-test-sw/commands/cmd_pin.c diff --git a/rpp-test-sw/commands/cmd_pin.c b/rpp-test-sw/commands/cmd_pin.c index 88e9438..6816d50 100644 --- a/rpp-test-sw/commands/cmd_pin.c +++ b/rpp-test-sw/commands/cmd_pin.c @@ -1,15 +1,31 @@ /* - * Copyright (C) 2012-2013 Czech Technical University in Prague + * Copyright (C) 2012-2015 Czech Technical University in Prague * * Created on: 28.2.2013 * * Authors: * - Michal Horn * - * This document contains proprietary information belonging to Czech - * Technical University in Prague. Passing on and copying of this - * document, and communication of its contents is not permitted - * without prior written authorization. + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. * * File : cmd_pin.c * @@ -27,7 +43,7 @@ #ifndef DOCGEN #include "rpp/rpp.h" -#include "hal/hal.h" +#include "drv/gio_tab.h" #include "cmdproc_utils.h" /** @@ -43,14 +59,21 @@ int cmd_do_pin_list(cmd_io_t *cmd_io, const struct cmd_des *des, char *param[]) uint32_t i; rpp_sci_printf("List of all defined pins. Those names can be used by pinval command.\r\n"); - for (i = 0; i < MAX_PIN_CNT; i++) { - if (pin_map[i].pin_name == PIN_NAME_UNUSED) continue; - rpp_sci_printf(pin_map[i].pin_name); - rpp_sci_printf("\r\n"); - } + for (i = 0; i < ARRAY_SIZE(gio_table); i++) + rpp_sci_printf("%s\r\n", gio_table[i].pin_name); return 1; } +static enum pin_name pin_from_name(const char *pin_name) +{ + uint32_t i; + + for (i = 0; i < ARRAY_SIZE(gio_table); i++) + if (strcmp(pin_name, gio_table[i].pin_name) == 0) + return (enum pin_name)i; + return _PIN_INVALID; +} + /** * @brief Set or get pin value * @@ -63,7 +86,6 @@ int cmd_do_pin_val(cmd_io_t *cmd_io, const struct cmd_des *des, char *param[]) { char *p; long val; - uint32_t *desc; char spareParams; char pinName[32]; @@ -71,7 +93,9 @@ int cmd_do_pin_val(cmd_io_t *cmd_io, const struct cmd_des *des, char *param[]) if (sscanf(p, "%31s ", pinName) != 1) return -CMDERR_BADPAR; - if ((desc = hal_gpio_pin_get_dsc(pinName, -1)) == NULL) return -CMDERR_BADREG; + enum pin_name pin = pin_from_name(pinName); + if (pin == _PIN_INVALID) + return -CMDERR_BADPAR; if (param[2] != NULL) { // More parameters = set values p = param[2]; @@ -79,12 +103,16 @@ int cmd_do_pin_val(cmd_io_t *cmd_io, const struct cmd_des *des, char *param[]) return -CMDERR_BADPAR; if (val != 0 && val != 1) return -CMDERR_BADPAR; - hal_gpio_pin_set_value(*desc, (uint32_t)val); + if (rpp_gio_set(pin, val) == FAILURE) { + return -CMDERR_BADPAR;; + } return cmd_opchar_replong(cmd_io, param, val, 0, 0); - ; } else { // No more parameters = get values - uint32_t pin_value = hal_gpio_pin_get_value(*desc); + int pin_value = rpp_gio_get(pin); + if (pin_value == FAILURE) { + return -CMDERR_BADPAR; + } rpp_sci_printf("pinval%s=%d\n", pinName, pin_value); return 0; } @@ -101,8 +129,7 @@ int cmd_do_pin_val(cmd_io_t *cmd_io, const struct cmd_des *des, char *param[]) int cmd_do_pin_dir(cmd_io_t *cmd_io, const struct cmd_des *des, char *param[]) { char *p; - long val; - uint32_t *desc; + uint32_t val; char spareParams; char pinName[32]; @@ -110,29 +137,29 @@ int cmd_do_pin_dir(cmd_io_t *cmd_io, const struct cmd_des *des, char *param[]) if (sscanf(p, "%31s ", pinName) != 1) return -CMDERR_BADPAR; - if ((desc = hal_gpio_pin_get_dsc(pinName, -1)) == NULL) return -CMDERR_BADREG; + enum pin_name pin = pin_from_name(pinName); + if (pin == _PIN_INVALID) + return -CMDERR_BADPAR; if (param[2] != NULL) { // More parameters = set values p = param[2]; - if (sscanf(p, "%d %1s", &val, &spareParams) != 1) - return -CMDERR_BADPAR; - if (val == 1) { - *desc |= PORT_CONF_SET_DIR; - *desc |= PORT_CONF_DIR_OUT; - } - else if (val == 0) { - *desc &= (~PORT_CONF_DIR_OUT); - *desc |= PORT_CONF_SET_DIR; - } - else + if (sscanf(p, "%u %1s", &val, &spareParams) != 1) return -CMDERR_BADPAR; + uint32_t pin_dsc = gio_table[pin].pin_dsc; + + pin_dsc &= ~GIO_PIN_CONF_DIR_MASK; + pin_dsc |= val ? GIO_PIN_CONF_DIR_OUT : GIO_PIN_CONF_DIR_IN; + + gio_setup(pin_dsc); - hal_gpio_pin_conf(*desc); return cmd_opchar_replong(cmd_io, param, val, 0, 0); } else { // No more parameters = get values - uint32_t pin_dir = hal_gpio_pin_get_direction(*desc); - rpp_sci_printf("pindir%s=%d\n", pinName, pin_dir); + int32_t pin_dir = 0/* rpp_gio_is_dir_output(pinName) */; +/* if (pin_dir == FAILURE) { */ +/* return -CMDERR_BADPAR; */ +/* } */ + rpp_sci_printf("pindir%s=%d FIXME not implemented\n", pinName, pin_dir); return 0; } } @@ -156,54 +183,54 @@ cmd_des_t const cmd_des_pin_list = { "\n" " --> pinlist\n" " List of all defined pins. Those names can be used by pinval command.\n" - " FANCTRL\n" - " ETHRST\n" - " VBAT1EN\n" - " VBAT2EN\n" - " VBAT3EN\n" - " VBATEN\n" - " SPICSA\n" - " SPICSB\n" - " MOUT1EN\n" - " MOUT2EN\n" - " CANNSTB\n" - " CANEN\n" - " LIN2NSLP\n" - " LIN1NSLP\n" - " DININT\n" - " DIN8\n" - " DIN9\n" - " DIN10\n" - " DIN11\n" - " DIN12\n" - " DIN13\n" - " DIN14\n" - " DIN15\n" - " MOUT6EN\n" - " MOUT5EN\n" - " MOUT6IN\n" - " MOUT5IN\n" - " MOUT4EN\n" - " MOUT3EN\n" - " MOUT4IN\n" - " MOUT3IN\n" - " HBREN\n" - " HBRDIR\n" - " HBRPWM\n" - " MOUT1IN\n" - " MOUT2IN\n" - " HOUT1IN\n" - " HOUT1DIAG\n" - " HOUT2IN\n" - " HOUT2DIAG\n" - " HOUT3IN\n" - " HOUT3DIAG\n" - " HOUT4IN\n" - " HOUT4DIAG\n" - " HOUT5IN\n" - " HOUT5DIAG\n" - " HOUT6IN\n" - " HOUT6DIAG\n", + " GIOA0\n" + " GIOA1\n" + " GIOA2\n" + " GIOA3\n" + " GIOA4\n" + " GIOA5\n" + " GIOA6\n" + " GIOA7\n" + " GIOB0\n" + " GIOB1\n" + " GIOB2\n" + " GIOB3\n" + " GIOB4\n" + " GIOB5\n" + " GIOB6\n" + " GIOB7\n" + " NHET10\n" + " NHET11\n" + " NHET12\n" + " NHET13\n" + " NHET14\n" + " NHET15\n" + " NHET16\n" + " NHET17\n" + " NHET18\n" + " NHET19\n" + " NHET110\n" + " NHET111\n" + " NHET112\n" + " NHET113\n" + " NHET114\n" + " NHET115\n" + " NHET116\n" + " NHET117\n" + " NHET118\n" + " NHET119\n" + " NHET120\n" + " NHET121\n" + " NHET122\n" + " NHET123\n" + " NHET124\n" + " NHET125\n" + " NHET126\n" + " NHET127\n" + " NHET128\n" + " NHET129\n" + " NHET130\n" + " NHET131\n", CMD_HANDLER(cmd_do_pin_list), (void *)&cmd_list_pin }; @@ -226,22 +253,17 @@ cmd_des_t const cmd_des_pin_val = { "\n" "The list of valid pin names can be obtained with pinlist command.\n" "\n" - "Most of the pins are accessible indirectly via other highlevel\n" - "commands. HBR_EN is, for example, controlled by the hbrenable command.\n" - "This command serves as supplement to highlevel commands for testing\n" - "purpose.\n" - "\n" "### Example ###\n" "\n" - " --> pinvalHBREN 1\n" - " pinvalHBREN=1\n" + " --> pinvalGIOB0 1\n" + " pinvalGIOB0=1\n" "\n" - "Sets the HBR_EN pin to 1.\n" + "Sets the GIOB0 pin to 1.\n" "\n" - " --> pinvalHBREN\n" - " pinvalHBREN=1\n" + " --> pinvalGIOB0\n" + " pinvalGIOB0=1\n" "\n" - "Gets a value of the HBR_EN pin.\n", + "Gets a value of the GIOB0 pin.\n", CMD_HANDLER(cmd_do_pin_val), (void *)&cmd_list_pin }; @@ -264,22 +286,17 @@ cmd_des_t const cmd_des_pin_dir = { "\n" "The list of valid pin names can be obtained with pinlist command.\n" "\n" - "Most of the pins are accessible indirectly via other highlevel\n" - "commands HBR_EN is, for example, controlled by the hbrenable command.\n" - "This command serves as supplement to highlevel commands for testing\n" - "purpose.\n" - "\n" "### Example ###\n" "\n" - " --> pindirHBREN 1\n" - " pindirHBREN=1\n" + " --> pindirGIOB0 1\n" + " pindirGIOB0=1\n" "\n" - "Sets the HBR_EN pin as output.\n" + "Sets the GIOB0 pin as output.\n" "\n" - " --> pindirHBREN\n" - " pindirHBREN=1\n" + " --> pindirGIOB0\n" + " pindirGIOB0=1\n" "\n" - "Gets the direction of the HBR_EN pin.\n", + "Gets the direction of the GIOB0 pin.\n", CMD_HANDLER(cmd_do_pin_dir), (void *)&cmd_list_pin };