diff --git a/bsp/allwinner_tina/drivers/drv_gpio.c b/bsp/allwinner_tina/drivers/drv_gpio.c index b121842b303ca3d7e1a6278471d90d25129b9b0f..999ab473a0a82ea8dce182df0c4e89cdc2c00b41 100644 --- a/bsp/allwinner_tina/drivers/drv_gpio.c +++ b/bsp/allwinner_tina/drivers/drv_gpio.c @@ -538,6 +538,7 @@ static const struct rt_pin_ops ops = pin_attach_irq, pin_detach_irq, pin_irq_enable, + RT_NULL, }; #endif diff --git a/bsp/apollo2/board/gpio.c b/bsp/apollo2/board/gpio.c index c2eb1be5810c76706f2c212fba6e0b30654f9735..c985e0f2a7bf6d1ad4489fde79529f603fad8598 100644 --- a/bsp/apollo2/board/gpio.c +++ b/bsp/apollo2/board/gpio.c @@ -212,6 +212,7 @@ const static struct rt_pin_ops am_pin_ops = am_pin_attach_irq, am_pin_dettach_irq, am_pin_irq_enable, + RT_NULL, }; int rt_hw_pin_init(void) diff --git a/bsp/at32/Libraries/rt_drivers/drv_gpio.c b/bsp/at32/Libraries/rt_drivers/drv_gpio.c index 8ea3f83f43cb26406bad1f76b45ecd9153b65594..d6fd0594dcd0e94aecc6217aa0da5e0b9be65043 100644 --- a/bsp/at32/Libraries/rt_drivers/drv_gpio.c +++ b/bsp/at32/Libraries/rt_drivers/drv_gpio.c @@ -496,6 +496,7 @@ const static struct rt_pin_ops _at32_pin_ops = at32_pin_attach_irq, at32_pin_dettach_irq, at32_pin_irq_enable, + RT_NULL, }; rt_inline void pin_irq_hdr(int irqno) diff --git a/bsp/beaglebone/drivers/gpio.c b/bsp/beaglebone/drivers/gpio.c index 7eb9737573aa14504bee83040cf68488400dfad0..425fbb4f4e29b07b5ba8e38f8c63d9607c2bc9d5 100644 --- a/bsp/beaglebone/drivers/gpio.c +++ b/bsp/beaglebone/drivers/gpio.c @@ -84,6 +84,10 @@ static struct rt_pin_ops am33xx_pin_ops = am33xx_pin_mode, am33xx_pin_write, am33xx_pin_read, + RT_NULL, + RT_NULL, + RT_NULL, + RT_NULL, }; int rt_hw_gpio_init(void) diff --git a/bsp/essemi/es32f0271/drivers/drv_gpio.c b/bsp/essemi/es32f0271/drivers/drv_gpio.c index 293febc728cc9080d18ee9b1057d73b8f8dc0da2..74a703a91ab751a73be42fa7a1aa82c4c125ca8e 100644 --- a/bsp/essemi/es32f0271/drivers/drv_gpio.c +++ b/bsp/essemi/es32f0271/drivers/drv_gpio.c @@ -450,6 +450,7 @@ const static struct rt_pin_ops _es32f0_pin_ops = es32f0_pin_attach_irq, es32f0_pin_detach_irq, es32f0_pin_irq_enable, + RT_NULL, }; int rt_hw_pin_init(void) diff --git a/bsp/essemi/es32f0334/drivers/drv_gpio.c b/bsp/essemi/es32f0334/drivers/drv_gpio.c index af057f8916cb000ebf83f8ba5b8344ba045cf6f4..d816af5fd3f11e9180412cec75d52b32562d7f7d 100644 --- a/bsp/essemi/es32f0334/drivers/drv_gpio.c +++ b/bsp/essemi/es32f0334/drivers/drv_gpio.c @@ -408,6 +408,7 @@ const static struct rt_pin_ops _es32f0_pin_ops = es32f0_pin_attach_irq, es32f0_pin_detach_irq, es32f0_pin_irq_enable, + RT_NULL, }; int rt_hw_pin_init(void) diff --git a/bsp/essemi/es32f0654/drivers/drv_gpio.c b/bsp/essemi/es32f0654/drivers/drv_gpio.c index 680860757f750ece7fd56ea74fe6f32b5d6580ea..142fcce7fc1300190e8d8aa6661f2a491f423e7d 100644 --- a/bsp/essemi/es32f0654/drivers/drv_gpio.c +++ b/bsp/essemi/es32f0654/drivers/drv_gpio.c @@ -408,6 +408,7 @@ const static struct rt_pin_ops _es32f0_pin_ops = es32f0_pin_attach_irq, es32f0_pin_detach_irq, es32f0_pin_irq_enable, + RT_NULL, }; int rt_hw_pin_init(void) diff --git a/bsp/essemi/es32f369x/drivers/drv_gpio.c b/bsp/essemi/es32f369x/drivers/drv_gpio.c index c9bf1c946a10bfff93c6c3adc67acaf74a49cfb6..37a24d956c3eec2f7e9c5830b98cc987e83d0148 100644 --- a/bsp/essemi/es32f369x/drivers/drv_gpio.c +++ b/bsp/essemi/es32f369x/drivers/drv_gpio.c @@ -408,6 +408,7 @@ const static struct rt_pin_ops _es32f3_pin_ops = es32f3_pin_attach_irq, es32f3_pin_detach_irq, es32f3_pin_irq_enable, + RT_NULL, }; int rt_hw_pin_init(void) diff --git a/bsp/essemi/es8p508x/drivers/drv_gpio.c b/bsp/essemi/es8p508x/drivers/drv_gpio.c index b91532a7067e8e4056be6d41e857347c98cd2b4e..9dfc09ef8e6110690cd7910726b732766e703e94 100644 --- a/bsp/essemi/es8p508x/drivers/drv_gpio.c +++ b/bsp/essemi/es8p508x/drivers/drv_gpio.c @@ -382,6 +382,7 @@ const static struct rt_pin_ops _es8p_pin_ops = es8p_pin_attach_irq, es8p_pin_detach_irq, es8p_pin_irq_enable, + RT_NULL, }; int rt_hw_pin_init(void) diff --git a/bsp/gd32303e-eval/drivers/drv_gpio.c b/bsp/gd32303e-eval/drivers/drv_gpio.c index 8c2bde3e3ab729af0a9827cb266ace724db9d684..b7285513d37c64397d0e32fe6cfc425272032484 100644 --- a/bsp/gd32303e-eval/drivers/drv_gpio.c +++ b/bsp/gd32303e-eval/drivers/drv_gpio.c @@ -497,6 +497,7 @@ const static struct rt_pin_ops _gd32_pin_ops = gd32_pin_attach_irq, gd32_pin_detach_irq, gd32_pin_irq_enable, + RT_NULL, }; int rt_hw_pin_init(void) diff --git a/bsp/gd32e230k-start/drivers/drv_gpio.c b/bsp/gd32e230k-start/drivers/drv_gpio.c index 521db3823baf990cd9bdefaf94d43ff1d2b59d9f..4176798cfd1a973d6a2542da0bd3888c580baaa1 100644 --- a/bsp/gd32e230k-start/drivers/drv_gpio.c +++ b/bsp/gd32e230k-start/drivers/drv_gpio.c @@ -388,6 +388,7 @@ const static struct rt_pin_ops _gd32_pin_ops = gd32_pin_attach_irq, gd32_pin_detach_irq, gd32_pin_irq_enable, + RT_NULL, }; int rt_hw_pin_init(void) diff --git a/bsp/gd32vf103v-eval/drivers/drv_gpio.c b/bsp/gd32vf103v-eval/drivers/drv_gpio.c index 03b27aef9cd655ab3a6d705fa33dd5a9dad9fdd2..95393cd4f2679e4e17ef7f36e24a3dda0aeb3bbd 100644 --- a/bsp/gd32vf103v-eval/drivers/drv_gpio.c +++ b/bsp/gd32vf103v-eval/drivers/drv_gpio.c @@ -427,6 +427,7 @@ const static struct rt_pin_ops _gd32vf_pin_ops = gd32vf_pin_attach_irq, gd32vf_pin_dettach_irq, gd32vf_pin_irq_enable, + RT_NULL, }; rt_inline void pin_irq_hdr(int irqno) diff --git a/bsp/imxrt/libraries/drivers/drv_gpio.c b/bsp/imxrt/libraries/drivers/drv_gpio.c index ee1d2eb96b6ff859bc251d6f53514f368f125e30..a2e9dda3d74bb751526f58fd0d35fedf9dbc4db7 100644 --- a/bsp/imxrt/libraries/drivers/drv_gpio.c +++ b/bsp/imxrt/libraries/drivers/drv_gpio.c @@ -587,7 +587,8 @@ const static struct rt_pin_ops imxrt_pin_ops = imxrt_pin_read, imxrt_pin_attach_irq, imxrt_pin_detach_irq, - imxrt_pin_irq_enable + imxrt_pin_irq_enable, + RT_NULL, }; int rt_hw_pin_init(void) diff --git a/bsp/k210/driver/drv_gpio.c b/bsp/k210/driver/drv_gpio.c index 4efce0e827ab590c285b3c8b25ecbc2d5361bd80..578e71558a3e404969806124e54d2800aa562b61 100644 --- a/bsp/k210/driver/drv_gpio.c +++ b/bsp/k210/driver/drv_gpio.c @@ -251,7 +251,8 @@ const static struct rt_pin_ops drv_pin_ops = drv_pin_attach_irq, drv_pin_detach_irq, - drv_pin_irq_enable + drv_pin_irq_enable, + RT_NULL, }; int rt_hw_pin_init(void) diff --git a/bsp/lpc54114-lite/drivers/drv_gpio.c b/bsp/lpc54114-lite/drivers/drv_gpio.c index 2e1b4de609f8e8f7843611b167127b163f597361..978fa2898e6f84e52c841584c56bb7a79012c081 100644 --- a/bsp/lpc54114-lite/drivers/drv_gpio.c +++ b/bsp/lpc54114-lite/drivers/drv_gpio.c @@ -38,6 +38,48 @@ struct rt_pin_irq_hdr pin_irq_hdr_tab[] = {-1, 0, RT_NULL, RT_NULL}, }; +static rt_base_t lpc_pin_get(const char *name) +{ + rt_base_t pin = 0; + int hw_port_num, hw_pin_num = 0; + int i, name_len = 1; + int mul = 1; + + name_len = rt_strlen(name); + + if ((name_len < 4) || (name_len >= 6)) + { + return -RT_EINVAL; + } + if ((name[0] != 'P') || (name[2] != '.')) + { + return -RT_EINVAL; + } + + if ((name[1] >= '0') && (name[1] <= '9')) + { + hw_port_num = (int)(name[1] - '0'); + } + else + { + return -RT_EINVAL; + } + + for (i = name_len - 1; i > 2; i--) + { + hw_pin_num += ((int)(name[i] - '0') * mul); + mul = mul * 10; + } + + pin = 32 * hw_port_num + hw_pin_num; + + if ((pin > PIN_MAX_VAL) || (pin < 0)) + { + return -RT_EINVAL; + } + return pin; +} + /* Configure pin mode. pin 0~63 means PIO0_0 ~ PIO1_31 */ static void lpc_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode) { @@ -288,7 +330,8 @@ const static struct rt_pin_ops _lpc_pin_ops = lpc_pin_read, lpc_pin_attach_irq, lpc_pin_detach_irq, - lpc_pin_irq_enable, + lpc_pin_irq_enable, + lpc_pin_get, }; int rt_hw_pin_init(void) diff --git a/bsp/lpc55sxx/Libraries/drivers/drv_pin.c b/bsp/lpc55sxx/Libraries/drivers/drv_pin.c index cc8d027c7cfa25d94a49a0958a1d2cbd42946389..48d26a582528d3d6d264e9ec79fc8cb50e83b1c0 100644 --- a/bsp/lpc55sxx/Libraries/drivers/drv_pin.c +++ b/bsp/lpc55sxx/Libraries/drivers/drv_pin.c @@ -419,6 +419,7 @@ int rt_hw_pin_init(void) lpc_pin_ops.pin_attach_irq = lpc_pin_attach_irq; lpc_pin_ops.pin_detach_irq = lpc_pin_detach_irq; lpc_pin_ops.pin_irq_enable = lpc_pin_irq_enable; + lpc_pin_ops.pin_get = RT_NULL, ret = rt_device_pin_register("pin", &lpc_pin_ops, RT_NULL); diff --git a/bsp/ls1cdev/drivers/drv_gpio.c b/bsp/ls1cdev/drivers/drv_gpio.c index 2203db777545d8a3841940a4fd24bfad3baf456a..14b44c9b6fee909494bb90aa1b4937c0be2a23b5 100644 --- a/bsp/ls1cdev/drivers/drv_gpio.c +++ b/bsp/ls1cdev/drivers/drv_gpio.c @@ -122,7 +122,8 @@ const static struct rt_pin_ops _ls1c_pin_ops = ls1c_pin_attach_irq, ls1c_pin_detach_irq, - ls1c_pin_irq_enable + ls1c_pin_irq_enable, + RT_NULL, }; diff --git a/bsp/ls2kdev/drivers/drv_gpio.c b/bsp/ls2kdev/drivers/drv_gpio.c index e1c5d61331d4e249a7c366e39519750eb72ead63..b49e471cc474086f9ab19d1d555d5fb665c21c71 100644 --- a/bsp/ls2kdev/drivers/drv_gpio.c +++ b/bsp/ls2kdev/drivers/drv_gpio.c @@ -221,6 +221,7 @@ static struct rt_pin_ops loongson_pin_ops = { .pin_attach_irq = loongson_pin_attach_irq, .pin_detach_irq = loongson_pin_detach_irq, .pin_irq_enable = loongson_pin_irq_enable, + .pin_get = RT_NULL, }; diff --git a/bsp/mm32l3xx/drivers/drv_gpio.c b/bsp/mm32l3xx/drivers/drv_gpio.c index 141040bbce8ac47d997bc69703a086c4f1e212a7..a6c3849c858e92864e030ae2b4bd9e2906dd1038 100644 --- a/bsp/mm32l3xx/drivers/drv_gpio.c +++ b/bsp/mm32l3xx/drivers/drv_gpio.c @@ -409,6 +409,7 @@ const static struct rt_pin_ops _mm32_pin_ops = mm32_pin_attach_irq, mm32_pin_detach_irq, mm32_pin_irq_enable, + RT_NULL, }; int rt_hw_pin_init(void) diff --git a/bsp/nrf5x/libraries/drivers/drv_gpio.c b/bsp/nrf5x/libraries/drivers/drv_gpio.c index 001839b2b4faa2ff85e3cc6aab0d6918e13b2efd..4251edfdc233ffb6fac170721a690b7f67f163bb 100644 --- a/bsp/nrf5x/libraries/drivers/drv_gpio.c +++ b/bsp/nrf5x/libraries/drivers/drv_gpio.c @@ -351,6 +351,7 @@ const static struct rt_pin_ops _nrf5x_pin_ops = nrf5x_pin_attach_irq, nrf5x_pin_dettach_irq, nrf5x_pin_irq_enable, + RT_NULL, }; int rt_hw_pin_init(void) diff --git a/bsp/nuclei/libraries/gd32vf103/HAL_Drivers/drv_gpio.c b/bsp/nuclei/libraries/gd32vf103/HAL_Drivers/drv_gpio.c index f7572a57dbdc6c0399a0474200552492f5dd9e1e..779f4a7bb83ba18e95f44bd47464bddd24cfa28f 100644 --- a/bsp/nuclei/libraries/gd32vf103/HAL_Drivers/drv_gpio.c +++ b/bsp/nuclei/libraries/gd32vf103/HAL_Drivers/drv_gpio.c @@ -443,6 +443,7 @@ const static struct rt_pin_ops _gd32_pin_ops = gd32_pin_attach_irq, gd32_pin_dettach_irq, gd32_pin_irq_enable, + RT_NULL, }; rt_inline void pin_irq_hdr(int irqno) diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_gpio.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_gpio.c index 4790d6500142bf7b629217dcc146d042352ddc3d..c4d6c3362903aab55060ea67fd09cb81e4bce70e 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_gpio.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_gpio.c @@ -44,7 +44,8 @@ static struct rt_pin_ops nu_gpio_ops = nu_gpio_read, nu_gpio_attach_irq, nu_gpio_detach_irq, - nu_gpio_irq_enable + nu_gpio_irq_enable, + RT_NULL, }; static IRQn_Type au32GPIRQ[NU_PORT_CNT] = {GPA_IRQn, GPB_IRQn, GPC_IRQn, GPD_IRQn, GPE_IRQn, GPF_IRQn, GPG_IRQn, GPH_IRQn}; diff --git a/bsp/raspberry-pi/raspi3-32/driver/drv_gpio.c b/bsp/raspberry-pi/raspi3-32/driver/drv_gpio.c index c239c56cf28baae35192044076c27fc72a02dc76..205d7f10aa3a9462014b2d47413c0a8b89e24943 100644 --- a/bsp/raspberry-pi/raspi3-32/driver/drv_gpio.c +++ b/bsp/raspberry-pi/raspi3-32/driver/drv_gpio.c @@ -294,6 +294,7 @@ static const struct rt_pin_ops ops = raspi_pin_attach_irq, raspi_pin_detach_irq, raspi_pin_irq_enable, + RT_NULL, }; #endif diff --git a/bsp/raspberry-pi/raspi3-64/driver/drv_gpio.c b/bsp/raspberry-pi/raspi3-64/driver/drv_gpio.c index 56ef41272516b212f91310d28de150d041947d9d..0cd6abb84e1e5bbd6072415608b6d2d4bc5819d2 100644 --- a/bsp/raspberry-pi/raspi3-64/driver/drv_gpio.c +++ b/bsp/raspberry-pi/raspi3-64/driver/drv_gpio.c @@ -295,6 +295,7 @@ static const struct rt_pin_ops ops = raspi_pin_attach_irq, raspi_pin_detach_irq, raspi_pin_irq_enable, + RT_NULL, }; #endif diff --git a/bsp/raspberry-pi/raspi4-32/driver/drv_gpio.c b/bsp/raspberry-pi/raspi4-32/driver/drv_gpio.c index b45fb8574f5b7df79f696bdf47006ef1234c56ed..b2d2ed79c49a34198094442da0c8a92d09917c63 100644 --- a/bsp/raspberry-pi/raspi4-32/driver/drv_gpio.c +++ b/bsp/raspberry-pi/raspi4-32/driver/drv_gpio.c @@ -344,6 +344,7 @@ static const struct rt_pin_ops ops = raspi_pin_attach_irq, raspi_pin_detach_irq, raspi_pin_irq_enable, + RT_NULL, }; static void gpio_irq_handler(int irq, void *param) diff --git a/bsp/raspberry-pi/raspi4-64/driver/drv_gpio.c b/bsp/raspberry-pi/raspi4-64/driver/drv_gpio.c index 4317a358e0fa59b77a5ff4996bd340bc93821403..bba20a86a436191d2fa450284c66b77cfae5d02f 100644 --- a/bsp/raspberry-pi/raspi4-64/driver/drv_gpio.c +++ b/bsp/raspberry-pi/raspi4-64/driver/drv_gpio.c @@ -103,6 +103,7 @@ static const struct rt_pin_ops ops = raspi_pin_attach_irq, raspi_pin_detach_irq, raspi_pin_irq_enable, + RT_NULL, }; #endif diff --git a/bsp/rv32m1_vega/ri5cy/driver/drv_gpio.c b/bsp/rv32m1_vega/ri5cy/driver/drv_gpio.c index f5acd7e02b34d7d860f115d3827bd84290ba2e73..afc152a96bcdefba6485faedeaa6a44f16c15af3 100644 --- a/bsp/rv32m1_vega/ri5cy/driver/drv_gpio.c +++ b/bsp/rv32m1_vega/ri5cy/driver/drv_gpio.c @@ -496,7 +496,8 @@ static const struct rt_pin_ops vega_pin_ops = vega_pin_attach_irq, vega_pin_detach_irq, - vega_pin_irq_enable + vega_pin_irq_enable, + RT_NULL, }; int rt_hw_pin_init(void) diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c b/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c index fc4eb83743631985aaa92c7dafc409c472a95605..e13d838803be1ee96466038fbdb353ef49a4b863 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_gpio.c @@ -313,6 +313,51 @@ static const struct pin_index *get_pin(uint8_t pin) return index; }; +static rt_base_t stm32_pin_get(const char *name) +{ + rt_base_t pin = 0; + int hw_port_num, hw_pin_num = 0; + int i, name_len = 1; + int mul = 1; + + name_len = rt_strlen(name); + + if ((name_len < 4) || (name_len >= 6)) + { + return -RT_EINVAL; + } + if ((name[0] != 'P') || (name[2] != '.')) + { + return -RT_EINVAL; + } + + if ((name[1] >= 'A') && (name[1] <= 'Z')) + { + hw_port_num = (int)(name[1] - 'A'); + } + else + { + return -RT_EINVAL; + } + + for (i = name_len - 1; i > 2; i--) + { + hw_pin_num += ((int)(name[i] - '0') * mul); + mul = mul * 10; + } + + pin = 16 * hw_port_num + hw_pin_num; + + if (pin < ITEM_NUM(pins)) + { + return pin; + } + else + { + return -RT_EINVAL; + } +} + static void stm32_pin_write(rt_device_t dev, rt_base_t pin, rt_base_t value) { const struct pin_index *index; @@ -627,6 +672,7 @@ const static struct rt_pin_ops _stm32_pin_ops = stm32_pin_attach_irq, stm32_pin_dettach_irq, stm32_pin_irq_enable, + stm32_pin_get, }; rt_inline void pin_irq_hdr(int irqno) diff --git a/bsp/swm320-lq100/drivers/drv_gpio.c b/bsp/swm320-lq100/drivers/drv_gpio.c index b9d3d425834a3eebbaf83b1c661f9b8425701072..439f36f379194364d4357b8111e2b45dbb4b3c21 100644 --- a/bsp/swm320-lq100/drivers/drv_gpio.c +++ b/bsp/swm320-lq100/drivers/drv_gpio.c @@ -334,7 +334,8 @@ const static struct rt_pin_ops swm320_pin_ops = swm320_pin_read, swm320_pin_attach_irq, swm320_pin_detach_irq, - swm320_pin_irq_enable + swm320_pin_irq_enable, + RT_NULL, }; int rt_hw_pin_init(void) diff --git a/bsp/tm4c123bsp/libraries/Drivers/drv_gpio.c b/bsp/tm4c123bsp/libraries/Drivers/drv_gpio.c index 7cdfaf91f98897cf85accee85c5202af1efe019e..410a45684920cd649fef7f0974296efa701d8b09 100644 --- a/bsp/tm4c123bsp/libraries/Drivers/drv_gpio.c +++ b/bsp/tm4c123bsp/libraries/Drivers/drv_gpio.c @@ -153,6 +153,7 @@ const static struct rt_pin_ops _tm4c123_pin_ops = tm4c123_pin_attach_irq, tm4c123_pin_dettach_irq, tm4c123_pin_irq_enable, + RT_NULL, }; int rt_hw_pin_init(void) diff --git a/bsp/w60x/drivers/drv_pin.c b/bsp/w60x/drivers/drv_pin.c index e55087c44f86d292c0049c3ac89c98ff51fdd085..7dae2e26dd4a9b1d10a88943d916bbd2ddcd887f 100644 --- a/bsp/w60x/drivers/drv_pin.c +++ b/bsp/w60x/drivers/drv_pin.c @@ -153,7 +153,8 @@ struct rt_pin_ops _wm_pin_ops = wm_pin_read, wm_pin_attach_irq, wm_pin_detach_irq, - wm_pin_irq_enable + wm_pin_irq_enable, + RT_NULL, }; int wm_hw_pin_init(void)