diff --git a/README.md b/README.md
index d47f76ce..84228a4b 100644
--- a/README.md
+++ b/README.md
@@ -1,117 +1,1052 @@
# Third Party Hardware Drivers #
-[![Version Badge](https://img.shields.io/badge/-v3.0.0-green)](https://github.com/SiliconLabs/third_party_hw_drivers_extension/releases)
-[![GSDK Badge](https://img.shields.io/badge/GSDK-v4.4.3-green)](https://github.com/SiliconLabs/gecko_sdk/releases)
-[![WSDK Badge](https://img.shields.io/badge/WSDK-v3.2.0-green)](https://github.com/SiliconLabs/wiseconnect/releases)
+[![Version Badge](https://img.shields.io/badge/v4.0.0-green)](https://github.com/SiliconLabs/third_party_hw_drivers_extension/releases)
+[![GSDK Badge](https://img.shields.io/badge/SiSDK-v2024.6.2-green)](https://github.com/SiliconLabs/gecko_sdk/releases)
+[![WSDK Badge](https://img.shields.io/badge/WSDK-v3.3.4-green)](https://github.com/SiliconLabs/wiseconnect/releases)
![License badge](https://img.shields.io/badge/License-Zlib-green)
This repo contains example drivers developed by Silicon Labs engineers and are provided as [an SDK extension](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-getting-started/install-sdk-extensions). These drivers interface with different types of external hardware and are tested against a specific device listed in the driver name. These drivers are intended to be fully compatible with Silicon Labs' wireless stacks. All drivers provide a minimal Simplicity Studio project for testing and to show an example usage of the driver. The driver source is provided for modification and extension as needed. All drivers in this repository are considered to be EVALUATION QUALITY which implies that the code provided in the repos is subjected to limited testing and is provided provided as-is. It is not suitable for production environments.
-A full list of all drivers in this repository is defined below:
-
-| Driver name | Link to driver | Link to example | Link to documentation |
-|:----------|:------------------:|:----------:|:------------------:|
-| captouch2_cap1166 | [Click Here](./driver/public/mikroe/captouch2_cap1166) | [Click Here](./app/example/mikroe_captouch2_cap1166) | [Click Here](./app/documentation/example/mikroe_captouch2_cap1166) |
-| heartrate2_maxm86161 | [Click Here](./driver/public/mikroe/heartrate2_maxm86161) | [Click Here](./app/example/mikroe_heartrate2_maxm86161) | [Click Here](./app/documentation/example/mikroe_heartrate2_maxm86161) |
-| temphum9_shtc3 | [Click Here](./driver/public/mikroe/temphum9_shtc3) | [Click Here](./app/example/mikroe_temphum9_shtc3) | [Click Here](./app/documentation/example/mikroe_temphum9_shtc3) |
-| oledw_ssd1306 | [Click Here](./driver/public/mikroe/oledw_ssd1306) | [Click Here](./app/example/mikroe_oledw_ssd1306) | [Click Here](./app/documentation/example/mikroe_oledw_ssd1306) |
-| mikroe_oledw_ssd1306_glib | [Click Here](./driver/public/silabs/services_tphd_glib) | [Click Here](./app/example/mikroe_oledw_ssd1306_glib) | [Click Here](./app/documentation/example/mikroe_oledw_ssd1306_glib) |
-| buzz2_cmt_8540s_smt | [Click Here](./driver/public/mikroe/buzz2_cmt_8540s_smt) | [Click Here](./app/example/mikroe_buzz2_cmt_8540s_smt) | [Click Here](./app/documentation/example/mikroe_buzz2_cmt_8540s_smt) |
-| brushless16_lb11685av | [Click Here](./driver/public/mikroe/brushless16_lb11685av) | [Click Here](./app/example/mikroe_brushless16_lb11685av) | [Click Here](./app/documentation/example/mikroe_brushless16_lb11685av) |
-| accel5_bma400 | [Click Here](./driver/public/silabs/accel5_bma400) | [Click Here](./app/example/mikroe_accel5_bma400) | [Click Here](./app/documentation/example/mikroe_accel5_bma400) |
-| dosimeter_type5 | [Click Here](./driver/public/silabs/dosimeter_type5) | [Click Here](./app/example/sparkfun_dosimeter_type5) | [Click Here](./app/documentation/example/sparkfun_dosimeter_type5) |
-| micro_oled_ssd1306 | [Click Here](./driver/public/silabs/micro_oled_ssd1306) | [Click Here](./app/example/sparkfun_micro_oled_ssd1306) | [Click Here](./app/documentation/example/sparkfun_micro_oled_ssd1306) |
-| rfid_id12la | [Click Here](./driver/public/silabs/rfid_id12la) | [Click Here](./app/example/sparkfun_rfid_id12la) | [Click Here](./app/documentation/example/sparkfun_rfid_id12la) |
-| distance_vl53l1x | [Click Here](./driver/public/silabs/distance_vl53l1x) | [Click Here](./app/example/sparkfun_distance_vl53l1x) | [Click Here](./app/documentation/example/sparkfun_distance_vl53l1x) |
-| co_mq7 | [Click Here](./driver/public/mikroe/co_mq7) | [Click Here](./app/example/mikroe_co_mq7) | [Click Here](./app/documentation/example/mikroe_co_mq7) |
-| relay2_lca717 | [Click Here](./driver/public/mikroe/relay2_lca717) | [Click Here](./app/example/mikroe_relay2_lca717) | [Click Here](./app/documentation/example/mikroe_relay2_lca717) |
-| accelerometer_mma8452q | [Click Here](./driver/public/silabs/accelerometer_mma8452q) | [Click Here](./app/example/sparkfun_accelerometer_mma8452q) | [Click Here](./app/documentation/example/sparkfun_accelerometer_mma8452q) |
-| spectroscopy_as7265x | [Click Here](./driver/public/silabs/spectroscopy_as7265x) | [Click Here](./app/example/sparkfun_spectroscopy_as7265x) | [Click Here](./app/documentation/example/sparkfun_spectroscopy_as7265x) |
-| qwiic_joystick | [Click Here](./driver/public/silabs/qwiic_joystick) | [Click Here](./app/example/sparkfun_qwiic_joystick) | [Click Here](./app/documentation/example/sparkfun_qwiic_joystick) |
-| utm7segr_max6969 | [Click Here](./driver/public/mikroe/utm7segr_max6969) | [Click Here](./app/example/mikroe_utm7segr_max6969) | [Click Here](./app/documentation/example/mikroe_utm7segr_max6969) |
-| human_presence_ak9753 | [Click Here](./driver/public/silabs/human_presence_ak9753) | [Click Here](./app/example/sparkfun_human_presence_ak9753) | [Click Here](./app/documentation/example/sparkfun_human_presence_ak9753) |
-| soil_moisture | [Click Here](./driver/public/silabs/soil_moisture) | [Click Here](./app/example/sparkfun_soil_moisture) | [Click Here](./app/documentation/example/sparkfun_soil_moisture) |
-| ir_aray_mlx90640 | [Click Here](./driver/public/silabs/ir_array_mlx90640) | [Click Here](./app/example/sparkfun_ir_array_mlx90640) | [Click Here](./app/documentation/example/sparkfun_ir_array_mlx90640) |
-| proximity_vcnl4040 | [Click Here](./driver/public/silabs/proximity_vcnl4040) | [Click Here](./app/example/sparkfun_proximity_vcnl4040) | [Click Here](./app/documentation/example/sparkfun_proximity_vcnl4040) |
-| eth_wiz_w5500 | [Click Here](./driver/public/mikroe/eth_wiz_w5500) | [Click Here](./app/example/mikroe_eth_wiz_w5500) | [Click Here](./app/documentation/example/mikroe_eth_wiz_w5500) |
-| fuel_gauge_max17048 | [Click Here](./driver/public/silabs/fuel_gauge_max17048) | [Click Here](./app/example/maxim_fuel_gauge_max17048) | [Click Here](./app/documentation/example/maxim_fuel_gauge_max17048) |
-| barcode2_em3080w | [Click Here](./driver/public/mikroe/barcode2_em3080w) | [Click Here](./app/example/mikroe_barcode2_em3080w) | [Click Here](./app/documentation/example/mikroe_barcode2_em3080w) |
-| water_detect | [Click Here](./driver/public/mikroe/water_detect) | [Click Here](./app/example/mikroe_water_detect) | [Click Here](./app/documentation/example/mikroe_water_detect) |
-| radar_mm5d91_00 | [Click Here](./driver/public/mikroe/radar_mm5d91_00) | [Click Here](./app/example/mikroe_radar_mm5d91_00) | [Click Here](./app/documentation/example/mikroe_radar_mm5d91_00) |
-| rgb_led_is31fl3741 | [Click Here](./driver/public/silabs/rgb_led_is31fl3741) | [Click Here](./app/example/adafruit_rgb_led_is31fl3741) | [Click Here](./app/documentation/example/adafruit_rgb_led_is31fl3741) |
-| fingerprint2_a172mrq | [Click Here](./driver/public/mikroe/fingerprint2_a172mrq) | [Click Here](./app/example/mikroe_fingerprint2_a172mrq) | [Click Here](./app/documentation/example/mikroe_fingerprint2_a172mrq) |
-| air_quality_sgp40 | [Click Here](./driver/public/silabs/air_quality_sgp40) | [Click Here](./app/example/sparkfun_air_quality_sgp40) | [Click Here](./app/documentation/example/sparkfun_air_quality_sgp40) |
-| environment2_sht40_sgp40 | [Click Here](./driver/public/mikroe/environment2_sht40_sgp40) | [Click Here](./app/example/mikroe_environment2_sht40_sgp40) | [Click Here](./app/documentation/example/mikroe_environment2_sht40_sgp40) |
-| heartrate4_max30101 | [Click Here](./driver/public/mikroe/heartrate4_max30101) | [Click Here](./app/example/mikroe_heartrate4_max30101) | [Click Here](./app/documentation/example/mikroe_heartrate4_max30101) |
-| hr_po_max30101_max32664 | [Click Here](./driver/public/silabs/hr_po_max30101_max32664) | [Click Here](./app/example/sparkfun_hr_po_max30101_max32664) | [Click Here](./app/documentation/example/sparkfun_hr_po_max30101_max32664) |
-| alcohol_mq3 | [Click Here](./driver/public/mikroe/alcohol_mq3) | [Click Here](./app/example/mikroe_alcohol_mq3) | [Click Here](./app/documentation/example/mikroe_alcohol_mq3) |
-| gps_lea6s | [Click Here](./driver/public/mikroe/gps_lea6s) | [Click Here](./app/example/mikroe_gps_lea6s) | [Click Here](./app/documentation/example/mikroe_gps_lea6s) |
-| temphum15_sht40 | [Click Here](./driver/public/mikroe/temphum15_sht40) | [Click Here](./app/example/mikroe_temphum15_sht40) | [Click Here](./app/documentation/example/mikroe_temphum15_sht40) |
-| irthermo3_mlx90632 | [Click Here](./driver/public/mikroe/irthermo3_mlx90632) | [Click Here](./app/example/mikroe_irthermo3_mlx90632) | [Click Here](./app/documentation/example/mikroe_irthermo3_mlx90632) |
-| stepper_a3967 | [Click Here](./driver/public/silabs/stepper_a3967) | [Click Here](./app/example/mikroe_stepper_a3967) | [Click Here](./app/documentation/example/mikroe_stepper_a3967) |
-| stepper2_a4988 | [Click Here](./driver/public/mikroe/stepper2_a4988) | [Click Here](./app/example/mikroe_stepper2_a4988) | [Click Here](./app/documentation/example/mikroe_stepper2_a4988) |
-| dcmotor3_tb6549fg | [Click Here](./driver/public/mikroe/dcmotor3_tb6549fg) | [Click Here](./app/example/mikroe_dcmotor3_tb6549fg) | [Click Here](./app/documentation/example/mikroe_dcmotor3_tb6549fg) |
-| environmental_bme280_ccs811 | [Click Here](./driver/public/silabs/environmental_bme280_ccs811) | [Click Here](./app/example/sparkfun_environmental_bme280_ccs811) | [Click Here](./app/documentation/example/sparkfun_environmental_bme280_ccs811) |
-| oledc_ssd1351 | [Click Here](./driver/public/mikroe/oledc_ssd1351) | [Click Here](./app/example/mikroe_oledc_ssd1351) | [Click Here](./app/documentation/example/mikroe_oledc_ssd1351) |
-| pressure3_dps310 | [Click Here](./driver/public/mikroe/pressure3_dps310) | [Click Here](./app/example/mikroe_pressure3_dps310) | [Click Here](./app/documentation/example/mikroe_pressure3_dps310) |
-| lte_iot2_bg96 | [Click Here](./driver/public/mikroe/lte_iot2_bg96) | [Click Here](./app/example/mikroe_lte_iot2_bg96) | [Click Here](./app/documentation/example/mikroe_lte_iot2_bg96) |
-| e_paper_154_inch | [Click Here](./driver/public/mikroe/e_paper_154_inch) | [Click Here](./app/example/mikroe_e_paper_154_inch) | [Click Here](./app/documentation/example/mikroe_e_paper_154_inch) |
-| ir_array_amg88xx | [Click Here](./driver/public/silabs/ir_array_amg88xx) | [Click Here](./app/example/sparkfun_ir_array_amg88xx) | [Click Here](./app/documentation/example/sparkfun_ir_array_amg88xx) |
-| nfc2_pn7150 | [Click Here](./driver/public/mikroe/nfc2_pn7150) | [Click Here](./app/example/mikroe_nfc2_pn7150) | [Click Here](./app/documentation/example/mikroe_nfc2_pn7150) |
-| nfc2_pn7150_t2t_read | [Click Here](./driver/public/silabs/services_nfc) | [Click Here](./app/example/mikroe_nfc2_pn7150_nci_t2t_read) | [Click Here](./app/documentation/example/mikroe_nfc2_pn7150_nci_t2t_read) |
-| nfc2_pn7150_t2t_write | [Click Here](./driver/public/silabs/services_nfc) | [Click Here](./app/example/mikroe_nfc2_pn7150_nci_t2t_write) | [Click Here](./app/documentation/example/mikroe_nfc2_pn7150_nci_t2t_write) |
-| ir_generate | [Click Here](./driver/public/silabs/ir_generate) | [Click Here](./app/example/silabs_ir_generate) | [Click Here](./app/documentation/example/silabs_ir_generate) |
-| triac | [Click Here](./driver/public/silabs/triac) | [Click Here](./app/example/silabs_triac) | [Click Here](./app/documentation/example/silabs_triac) |
-| mikroe_microsd | [Click Here](./driver/public/mikroe/mikroe_microsd) | [Click Here](./app/example/mikroe_microsd) | [Click Here](./app/documentation/example/mikroe_microsd) |
-| pir_ira_s210st01 | [Click Here](./driver/public/silabs/pir_ira_s210st01) | [Click Here](./app/example/silabs_pir_ira_s210st01) | [Click Here](./app/documentation/example/silabs_pir_ira_s210st01) |
-| rf_meter_ad8318 | [Click Here](./driver/public/mikroe/rf_meter_ad8318) | [Click Here](./app/example/mikroe_rf_meter_ad8318) | [Click Here](./app/documentation/example/mikroe_rf_meter_ad8318) |
-| nfctag2_nt3h2111 | [Click Here](./driver/public/silabs/nfctag2_nt3h2111) | [Click Here](./app/example/mikroe_nfctag2_nt3h2111) | [Click Here](./app/documentation/example/mikroe_nfctag2_nt3h2111) |
-| pwm_driver_si8711cc | [Click Here](./driver/public/mikroe/pwm_driver_si8711cc) | [Click Here](./app/example/mikroe_pwm_driver_si8711cc) | [Click Here](./app/documentation/example/mikroe_pwm_driver_si8711cc) |
-| mikroe_mic2 | [Click Here](./driver/public/mikroe/mic2) | [Click Here](./app/example/mikroe_mic2) | [Click Here](./app/documentation/example/mikroe_mic2) |
-| turbidity_tsd10 | [Click Here](./driver/public/mikroe/turbidity_tsd10) | [Click Here](./app/example/mikroe_turbidity_tsd10) | [Click Here](./app/documentation/example/mikroe_turbidity_tsd10) |
-| environment3_bme688 | [Click Here](./driver/public/silabs/environment3_bme688) | [Click Here](./app/example/mikroe_environment3_bme688) | [Click Here](./app/documentation/example/mikroe_environment3_bme688) |
-| ozone2_mq131 | [Click Here](./driver/public/mikroe/ozone2_mq131) | [Click Here](./app/example/mikroe_ozone2_mq131) | [Click Here](./app/documentation/example/mikroe_ozone2_mq131) |
-| uv_ml8511a | [Click Here](./driver/public/mikroe/uv_ml8511a) | [Click Here](./app/example/mikroe_uv_ml8511a) | [Click Here](./app/documentation/example/mikroe_uv_ml8511a) |
-| tft_lcd_ili9341 | [Click Here](./driver/public/silabs/tft_lcd_ili9341) | [Click Here](./app/example/adafruit_tft_lcd_ili9341) | [Click Here](./app/documentation/example/adafruit_tft_lcd_ili9341) |
-| tft_lcd_ili9341_lvgl | [Click Here](./driver/public/silabs/services_lvgl) | [Click Here](./app/example/adafruit_tft_lcd_ili9341_lvgl) | [Click Here](./app/documentation/example/adafruit_tft_lcd_ili9341_lvgl) |
-| servo_pca9685 | [Click Here](./driver/public/mikroe/servo_pca9685) | [Click Here](./app/example/mikroe_servo_pca9685) | [Click Here](./app/documentation/example/mikroe_servo_pca9685) |
-| force3_fsr400 | [Click Here](./driver/public/mikroe/force3_fsr400) | [Click Here](./app/example/mikroe_force3_fsr400) | [Click Here](./app/documentation/example/mikroe_force3_fsr400) |
-| emg | [Click Here](./driver/public/mikroe/emg) | [Click Here](./app/example/mikroe_emg) | [Click Here](./app/documentation/example/mikroe_emg) |
-| bthome_v2 | [Click Here](./driver/public/silabs/bthome_v2) | [Click Here](./app/example/bthome_v2) | [Click Here](./app/documentation/example/bthome_v2) |
-| bthome_v2_server | [Click Here](./driver/public/silabs/bthome_v2_server) | [Click Here](./app/example/bthome_v2_server) | [Click Here](./app/documentation/example/bthome_v2_server) |
-| services_enocean_switch_proxy_server | [Click Here](./driver/public/silabs/services_enocean_switch_proxy_server) | N/A | N/A |
-| services_lin_bus_slave | [Click Here](./driver/public/silabs/services_lin_bus_slave) | [Click Here](./app/example/silabs_lin_bus) | [Click Here](./app/documentation/example/silabs_lin_bus) |
-| obdii_stn1110 | [Click Here](./driver/public/mikroe/obdii_stn1110) | [Click Here](./app/example/mikroe_obdii_stn1110) | [Click Here](./app/documentation/example/mikroe_obdii_stn1110) |
-| thunder_as3935 | [Click Here](./driver/public/mikroe/thunder_as3935) | [Click Here](./app/example/mikroe_thunder_as3935) | [Click Here](./app/documentation/example/mikroe_thunder_as3935) |
-| mikroe_rng | [Click Here](./driver/public/mikroe/rng) | [Click Here](./app/example/mikroe_rng) | [Click Here](./app/documentation/example/mikroe_rng) |
-| smoke2_adpd188bi | [Click Here](./driver/public/mikroe/smoke2_adpd188bi) | [Click Here](./app/example/mikroe_smoke2_adpd188bi) | [Click Here](./app/documentation/example/mikroe_smoke2_adpd188bi) |
-| qwiic_keypad | [Click Here](./driver/public/silabs/qwiic_keypad) | [Click Here](./app/example/sparkfun_qwiic_keypad) | [Click Here](./app/documentation/example/sparkfun_qwiic_keypad) |
-| tft_lcd_st7789 | [Click Here](./driver/public/silabs/tft_lcd_st7789) | [Click Here](./app/example/adafruit_tft_lcd_st7789) | [Click Here](./app/documentation/example/adafruit_tft_lcd_st7789) |
-| tft_lcd_st7789_lvgl | [Click Here](./driver/public/silabs/services_lvgl) | [Click Here](./app/example/adafruit_tft_lcd_st7789_lvgl_dma) | [Click Here](./app/documentation/example/adafruit_tft_lcd_st7789_lvgl_dma) |
-| tft_lcd_hxd8357d | [Click Here](./driver/public/silabs/tft_lcd_hxd8357d) | [Click Here](./app/example/adafruit_tft_lcd_hxd8357d) | [Click Here](./app/documentation/example/adafruit_tft_lcd_hxd8357d) |
-| tft_lcd_hxd8357d_lvgl | [Click Here](./driver/public/silabs/tft_lcd_hxd8357d) | [Click Here](./app/example/adafruit_tft_lcd_hxd8357d_lvgl) | [Click Here](./app/documentation/example/adafruit_tft_lcd_hxd8357d_lvgl) |
-| mikroe_stretch | [Click Here](./driver/public/mikroe/stretch) | [Click Here](./app/example/mikroe_stretch) | [Click Here](./app/documentation/example/mikroe_stretch) |
-| adafruit_touchscreen_tsc2007 | [Click Here](./driver/public/silabs/touchscreen_tsc2007) | [Click Here](./app/example/adafruit_touchscreen_tsc2007) | [Click Here](./app/documentation/example/adafruit_touchscreen_tsc2007) |
-| mikroe_dcmotor24_l9958 | [Click Here](./driver/public/mikroe/dcmotor24_l9958) | [Click Here](./app/example/mikroe_dcmotor24_l9958) | [Click Here](./app/documentation/example/mikroe_dcmotor24_l9958) |
-| rtc10_ds3231m | [Click Here](./driver/public/mikroe/rtc10_ds3231m) | [Click Here](./app/example/mikroe_rtc10_ds3231m) | [Click Here](./app/documentation/example/mikroe_rtc10_ds3231m) |
-| mikroe_hvac | [Click Here](./driver/public/mikroe/hvac_scd41) | [Click Here](./app/example/mikroe_hvac_scd41) | [Click Here](./app/documentation/example/mikroe_hvac_scd41) |
-| mikroe_dcmotor26_tb9053ftg | [Click Here](./driver/public/mikroe/dcmotor26_tb9053ftg) | [Click Here](./app/example/mikroe_dcmotor26_tb9053ftg) | [Click Here](./app/documentation/example/mikroe_dcmotor26_tb9053ftg) |
-| particulate_matter_sensor_sps30 | [Click Here](./driver/public/silabs/particulate_matter_sensor_sps30) | [Click Here](./app/example/sparkfun_particulate_matter_sensor_sps30) | [Click Here](./app/documentation/example/sparkfun_particulate_matter_sensor_sps30) |
-| adafruit_neotrellis_keypad_atsamd09 | [Click Here](./driver/public/silabs/adafruit_neotrellis_keypad_atsamd09) | [Click Here](./app/example/adafruit_neotrellis_keypad_atsamd09) | [Click Here](./app/documentation/example/adafruit_neotrellis_keypad_atsamd09) |
-| hvac_bundle_scd41_sps30 | [Click Here](./driver/public/mikroe/hvac_scd41)
[Click Here](./driver/public/silabs/particulate_matter_sensor_sps30)| [Click Here](./app/example/mikroe_hvac_bundle_scd41_sps30) | [Click Here](./app/documentation/example/mikroe_hvac_bundle_scd41_sps30) |
-| mikroe_pir_pl_n823_01 | [Click Here](./driver/public/mikroe/pir_pl_n823_01) | [Click Here](./app/example/mikroe_pir_pl_n823_01) | [Click Here](./app/documentation/example/mikroe_pir_pl_n823_01) |
-| mikroe_uwb_dwm1000 | [Click Here](./driver/public/mikroe/uwb_dwm1000) | [Click Here](./app/example/mikroe_uwb_dwm1000) | [Click Here](./app/documentation/example/mikroe_uwb_dwm1000) |
-| mikroe_uwb2_dwm3000 | [Click Here](./driver/public/silabs/uwb2_dwm3000) | [Click Here](./app/example/mikroe_uwb2_dwm3000) | [Click Here](./app/documentation/example/mikroe_uwb2_dwm3000) |
-| sparkfun_gnss_max_m10s | [Click Here](./driver/public/silabs/gnss_max_m10s) | [Click Here](./app/example/sparkfun_gnss_max_m10s) | [Click Here](./app/documentation/example/sparkfun_gnss_max_m10s) |
-| sparkfun_6dof_imu_bmi270 | [Click Here](./driver/public/silabs/sparkfun_6dof_imu_bmi270) | [Click Here](./app/example/sparkfun_6dof_imu_bmi270) | [Click Here](./app/documentation/example/sparkfun_6dof_imu_bmi270) |
+## SoC Compatibility ##
+
+The following table shows extension support for Silicon Labs SoCs where ![Static Badge](https://img.shields.io/badge/preview-orange) and ![Static Badge](https://img.shields.io/badge/supported-green) denote preview and support, respectively.
+
+| Chip family | v1.x.x | [v2.x.x](https://github.com/SiliconLabs/third_party_hw_drivers_extension/tree/release/v2) | [v3.x.x](https://github.com/SiliconLabs/third_party_hw_drivers_extension/tree/release/v3) | v4.x.x |
+|---|---|---|---|---|
+|Series 1|![Static Badge](https://img.shields.io/badge/supported-green)|![Static Badge](https://img.shields.io/badge/supported-green)|![Static Badge](https://img.shields.io/badge/supported-green)||
+|Series 2|![Static Badge](https://img.shields.io/badge/supported-green)|![Static Badge](https://img.shields.io/badge/supported-green)|![Static Badge](https://img.shields.io/badge/supported-green)|![Static Badge](https://img.shields.io/badge/supported-green)|
+|SiWx917|||![Static Badge](https://img.shields.io/badge/preview-orange)|![Static Badge](https://img.shields.io/badge/supported-green)|
+
+
+This extension supports Simplicity SDK from v4.0.0, prior versions support GSDK.
+
+For the SiW917 chip family, WiseConnect SDK is supported from v3.0.0.
+
+Each release provides SDK compatibility information in the README file, for further details check the version-specific readmes.
+
+A full list of all examples and drivers in this repository is defined below:
+
+## Examples ##
+
+| No | Name | Example | Documentation |
+|:--:|:-------------|:-------------------:|:---------------:|
+| 1 | A-172-MRQ - Fingerprint 2 Click (Mikroe) | [Example](./app/example/mikroe_fingerprint2_a172mrq) | [Documentation](./app/documentation/example/mikroe_fingerprint2_a172mrq) |
+| 2 | A3967 - Stepper Click (Mikroe) | [Example](./app/example/mikroe_stepper_a3967) | [Documentation](./app/documentation/example/mikroe_stepper_a3967) |
+| 3 | A4988 - Stepper 2 Click (Mikroe) | [Example](./app/example/mikroe_stepper2_a4988) | [Documentation](./app/documentation/example/mikroe_stepper2_a4988) |
+| 4 | AC Current Click (Mikroe) | [Example](./app/example/mikroe_accurrent) | [Documentation](./app/documentation/example/mikroe_accurrent) |
+| 5 | AD8318 - RF Meter Click (Mikroe) | [Example](./app/example/mikroe_rf_meter_ad8318) | [Documentation](./app/documentation/example/mikroe_rf_meter_ad8318) |
+| 6 | AK9753 - Human Presence Sensor (Sparkfun) | [Example](./app/example/sparkfun_human_presence_ak9753) | [Documentation](./app/documentation/example/sparkfun_human_presence_ak9753) |
+| 7 | AMG88XX - Grid-EYE Infrared Array Breakout (Sparkfun) | [Example](./app/example/sparkfun_ir_array_amg88xx) | [Documentation](./app/documentation/example/sparkfun_ir_array_amg88xx) |
+| 8 | AS3935 - Thunder Click (Mikroe) | [Example](./app/example/mikroe_thunder_as3935) | [Documentation](./app/documentation/example/mikroe_thunder_as3935) |
+| 9 | AS7265X - Triad Spectroscopy Sensor (SparkFun) | [Example](./app/example/sparkfun_spectroscopy_as7265x) | [Documentation](./app/documentation/example/sparkfun_spectroscopy_as7265x) |
+| 10 | BG96 - LTE IoT 2 (Mikroe) | [Example](./app/example/mikroe_lte_iot2_bg96) | [Documentation](./app/documentation/example/mikroe_lte_iot2_bg96) |
+| 11 | BMA400 - Accel 5 Click (Mikroe) - I2C | [Example](./app/example/mikroe_accel5_bma400) | [Documentation](./app/documentation/example/mikroe_accel5_bma400) |
+| 12 | BMA400 - Accel 5 Click (Mikroe) - SPI | [Example](./app/example/mikroe_accel5_bma400) | [Documentation](./app/documentation/example/mikroe_accel5_bma400) |
+| 13 | BME280 & CCS811 - Environmental Sensor Combo Breakout (Sparkfun) | [Example](./app/example/sparkfun_environmental_bme280_ccs811) | [Documentation](./app/documentation/example/sparkfun_environmental_bme280_ccs811) |
+| 14 | BME688 - Environment 3 Click (Mikroe) - I2C | [Example](./app/example/mikroe_environment3_bme688) | [Documentation](./app/documentation/example/mikroe_environment3_bme688) |
+| 15 | BME688 - Environment 3 Click (Mikroe) - SPI | [Example](./app/example/mikroe_environment3_bme688) | [Documentation](./app/documentation/example/mikroe_environment3_bme688) |
+| 16 | BMI270 - 6DOF IMU (SparkFun) | [Example](./app/example/sparkfun_6dof_imu_bmi270) | [Documentation](./app/documentation/example/sparkfun_6dof_imu_bmi270) |
+| 17 | BTHome v2 | [Example](./app/example/bthome_v2) | [Documentation](./app/documentation/example/bthome_v2) |
+| 18 | BTHome v2 - Server | [Example](./app/example/bthome_v2_server) | [Documentation](./app/documentation/example/bthome_v2_server) |
+| 19 | CAP1166 - Cap Touch 2 Click (Mikroe) | [Example](./app/example/mikroe_captouch2_cap1166) | [Documentation](./app/documentation/example/mikroe_captouch2_cap1166) |
+| 20 | CMT-8540S-SMT - Buzz 2 Click (Mikroe) | [Example](./app/example/mikroe_buzz2_cmt_8540s_smt) | [Documentation](./app/documentation/example/mikroe_buzz2_cmt_8540s_smt) |
+| 21 | DPS310 - Pressure 3 Click (Mikroe) - I2C | [Example](./app/example/mikroe_pressure3_dps310) | [Documentation](./app/documentation/example/mikroe_pressure3_dps310) |
+| 22 | DPS310 - Pressure 3 Click (Mikroe) - SPI | [Example](./app/example/mikroe_pressure3_dps310) | [Documentation](./app/documentation/example/mikroe_pressure3_dps310) |
+| 23 | DS3231M - RTC 10 (Mikroe) | [Example](./app/example/mikroe_rtc10_ds3231m) | [Documentation](./app/documentation/example/mikroe_rtc10_ds3231m) |
+| 24 | DWM1000 - UWB Click (Mikroe) | [Example](./app/example/mikroe_uwb_dwm1000) | [Documentation](./app/documentation/example/mikroe_uwb_dwm1000) |
+| 25 | DWM3000 - UWB 2 Click (Mikroe) | [Example](./app/example/mikroe_uwb2_dwm3000/SimplicityStudio) | [Documentation](./app/documentation/example/mikroe_uwb2_dwm3000) |
+| 26 | E-Paper Display - eINK Click (Mikroe) | [Example](./app/example/mikroe_eink_display) | [Documentation](./app/documentation/example/mikroe_eink_display) |
+| 27 | E-paper EXT3-1 | [Example](./app/example/epaper_ext3_1) | [Documentation](./app/documentation/example/epaper_ext3_1) |
+| 28 | EM3080-W - Barcode 2 Click (Mikroe) | [Example](./app/example/mikroe_barcode2_em3080w) | [Documentation](./app/documentation/example/mikroe_barcode2_em3080w) |
+| 29 | EMG Click (Mikroe) | [Example](./app/example/mikroe_emg) | [Documentation](./app/documentation/example/mikroe_emg) |
+| 30 | FSR400 - Force 3 Click (Mikroe) | [Example](./app/example/mikroe_force3_fsr400) | [Documentation](./app/documentation/example/mikroe_force3_fsr400) |
+| 31 | HXD8357D - TFT LCD with Touchscreen (Adafruit) - SPI | [Example](./app/example/adafruit_tft_lcd_hxd8357d) | [Documentation](./app/documentation/example/adafruit_tft_lcd_hxd8357d) |
+| 32 | HXD8357D - TFT LCD with Touchscreen (Adafruit) - SPI with DMA | [Example](./app/example/adafruit_tft_lcd_hxd8357d) | [Documentation](./app/documentation/example/adafruit_tft_lcd_hxd8357d) |
+| 33 | HXD8357D - TFT LCD with Touchscreen (Adafruit) with LVGL | [Example](./app/example/adafruit_tft_lcd_hxd8357d_lvgl) | [Documentation](./app/documentation/example/adafruit_tft_lcd_hxd8357d_lvgl) |
+| 34 | HXD8357D - TFT LCD with Touchscreen (Adafruit) with LVGL + DMA | [Example](./app/example/adafruit_tft_lcd_hxd8357d_lvgl) | [Documentation](./app/documentation/example/adafruit_tft_lcd_hxd8357d_lvgl) |
+| 35 | ID-12LA - RFID Qwiic Reader (Sparkfun) | [Example](./app/example/sparkfun_rfid_id12la) | [Documentation](./app/documentation/example/sparkfun_rfid_id12la) |
+| 36 | ILI9341 - TFT LCD with Touchscreen (Adafruit) - SPI | [Example](./app/example/adafruit_tft_lcd_ili9341) | [Documentation](./app/documentation/example/adafruit_tft_lcd_ili9341) |
+| 37 | ILI9341 - TFT LCD with Touchscreen (Adafruit) - SPI with DMA | [Example](./app/example/adafruit_tft_lcd_ili9341) | [Documentation](./app/documentation/example/adafruit_tft_lcd_ili9341) |
+| 38 | ILI9341 - TFT LCD with Touchscreen (Adafruit) with LVGL | [Example](./app/example/adafruit_tft_lcd_ili9341_lvgl) | [Documentation](./app/documentation/example/adafruit_tft_lcd_ili9341_lvgl) |
+| 39 | ILI9341 - TFT LCD with Touchscreen (Adafruit) with LVGL + DMA | [Example](./app/example/adafruit_tft_lcd_ili9341_lvgl) | [Documentation](./app/documentation/example/adafruit_tft_lcd_ili9341_lvgl) |
+| 40 | IR Generator (Silabs) | [Example](./app/example/silabs_ir_generate) | [Documentation](./app/documentation/example/silabs_ir_generate) |
+| 41 | IS31FL3741 - 13x9 PWM RGB LED Matrix (Adafruit) | [Example](./app/example/adafruit_rgb_led_is31fl3741) | [Documentation](./app/documentation/example/adafruit_rgb_led_is31fl3741) |
+| 42 | L9958 - DC Motor 24 Click (Mikroe) | [Example](./app/example/mikroe_dcmotor24_l9958) | [Documentation](./app/documentation/example/mikroe_dcmotor24_l9958) |
+| 43 | LB11685AV - Brushless 16 Click (Mikroe) | [Example](./app/example/mikroe_brushless16_lb11685av) | [Documentation](./app/documentation/example/mikroe_brushless16_lb11685av) |
+| 44 | LCA717 - Relay 2 Click (Mikroe) | [Example](./app/example/mikroe_relay2_lca717) | [Documentation](./app/documentation/example/mikroe_relay2_lca717) |
+| 45 | LEA-6S - GPS Click (Mikroe) | [Example](./app/example/mikroe_gps_lea6s) | [Documentation](./app/documentation/example/mikroe_gps_lea6s) |
+| 46 | LIN Bus Master | [Example](./app/example/silabs_lin_bus/master) | [Documentation](./app/documentation/example/silabs_lin_bus) |
+| 47 | LIN Bus Slave Device 1 | [Example](./app/example/silabs_lin_bus/slave) | [Documentation](./app/documentation/example/silabs_lin_bus) |
+| 48 | LIN Bus Slave Device 2 | [Example](./app/example/silabs_lin_bus/slave) | [Documentation](./app/documentation/example/silabs_lin_bus) |
+| 49 | MAX-M10S - GNSS Receiver Breakout (Sparkfun) | [Example](./app/example/sparkfun_gnss_max_m10s) | [Documentation](./app/documentation/example/sparkfun_gnss_max_m10s) |
+| 50 | MAX17048 - MAX17048EVKIT Evaluation Kits (Maxim) | [Example](./app/example/maxim_fuel_gauge_max17048) | [Documentation](./app/documentation/example/maxim_fuel_gauge_max17048) |
+| 51 | MAX30101 & MAX32664 - Pulse Oximeter and Heart Rate Sensor (Sparkfun) | [Example](./app/example/sparkfun_hr_po_max30101_max32664) | [Documentation](./app/documentation/example/sparkfun_hr_po_max30101_max32664) |
+| 52 | MAX30101 - Heart Rate 4 Click (Mikroe) | [Example](./app/example/mikroe_heartrate4_max30101) | [Documentation](./app/documentation/example/mikroe_heartrate4_max30101) |
+| 53 | MAX6969 - UT-M 7-SEG R Click (Mikroe) | [Example](./app/example/mikroe_utm7segr_max6969) | [Documentation](./app/documentation/example/mikroe_utm7segr_max6969) |
+| 54 | MAXM86161 - Heartrate 2 Click (Mikroe) | [Example](./app/example/mikroe_heartrate2_maxm86161) | [Documentation](./app/documentation/example/mikroe_heartrate2_maxm86161) |
+| 55 | MIC 2 Click (Mikroe) | [Example](./app/example/mikroe_mic2) | [Documentation](./app/documentation/example/mikroe_mic2) |
+| 56 | microSD Click (Mikroe) | [Example](./app/example/mikroe_microsd) | [Documentation](./app/documentation/example/mikroe_microsd) |
+| 57 | ML8511A - UV Click (Mikroe) | [Example](./app/example/mikroe_uv_ml8511a) | [Documentation](./app/documentation/example/mikroe_uv_ml8511a) |
+| 58 | MLX90632 - IrThermo 3 Click (Mikroe) | [Example](./app/example/mikroe_irthermo3_mlx90632) | [Documentation](./app/documentation/example/mikroe_irthermo3_mlx90632) |
+| 59 | MLX90640 - IR Array Breakout (Sparkfun) | [Example](./app/example/sparkfun_ir_array_mlx90640) | [Documentation](./app/documentation/example/sparkfun_ir_array_mlx90640) |
+| 60 | MM5D91-00 - Radar Click (Mikroe) | [Example](./app/example/mikroe_radar_mm5d91_00) | [Documentation](./app/documentation/example/mikroe_radar_mm5d91_00) |
+| 61 | MMA8452Q - Triple Axis Accelerometer Breakout (Sparkfun) | [Example](./app/example/sparkfun_accelerometer_mma8452q) | [Documentation](./app/documentation/example/sparkfun_accelerometer_mma8452q) |
+| 62 | MQ131 - Ozone 2 Click (Mikroe) | [Example](./app/example/mikroe_ozone2_mq131) | [Documentation](./app/documentation/example/mikroe_ozone2_mq131) |
+| 63 | MQ3 - Alcohol Click (Mikroe) | [Example](./app/example/mikroe_alcohol_mq3) | [Documentation](./app/documentation/example/mikroe_alcohol_mq3) |
+| 64 | MQ7 - CO Click (Mikroe) | [Example](./app/example/mikroe_co_mq7) | [Documentation](./app/documentation/example/mikroe_co_mq7) |
+| 65 | NeoTrellis 4x4 Keypad (Adafruit) | [Example](./app/example/adafruit_neotrellis_keypad_atsamd09) | [Documentation](./app/documentation/example/adafruit_neotrellis_keypad_atsamd09) |
+| 66 | NT3H2111 - NFC Tag 2 Click (Mikroe) - I2C | [Example](./app/example/mikroe_nfctag2_nt3h2111) | [Documentation](./app/documentation/example/mikroe_nfctag2_nt3h2111) |
+| 67 | PCA9685 - Servo Click (Mikroe) | [Example](./app/example/mikroe_servo_pca9685) | [Documentation](./app/documentation/example/mikroe_servo_pca9685) |
+| 68 | PH 2 Click (Mikroe) | [Example](./app/example/mikroe_ph2) | [Documentation](./app/documentation/example/mikroe_ph2) |
+| 69 | PL-N823-01 - PIR Click (Mikroe) | [Example](./app/example/mikroe_pir_pl_n823_01) | [Documentation](./app/documentation/example/mikroe_pir_pl_n823_01) |
+| 70 | PN7150 - NFC 2 Click (Mikroe) - I2C | [Example](./app/example/mikroe_nfc2_pn7150) | [Documentation](./app/documentation/example/mikroe_nfc2_pn7150) |
+| 71 | PN7150 - Read a T2T Tag with NCI | [Example](./app/example/mikroe_nfc2_pn7150_nci_t2t_read) | [Documentation](./app/documentation/example/mikroe_nfc2_pn7150_nci_t2t_read) |
+| 72 | PN7150 - Write to a T2T Tag with NCI | [Example](./app/example/mikroe_nfc2_pn7150_nci_t2t_write) | [Documentation](./app/documentation/example/mikroe_nfc2_pn7150_nci_t2t_write) |
+| 73 | Pocket Geiger Radiation Sensor - Type 5 (Sparkfun) | [Example](./app/example/sparkfun_dosimeter_type5) | [Documentation](./app/documentation/example/sparkfun_dosimeter_type5) |
+| 74 | Qwiic Joystick (Sparkfun) | [Example](./app/example/sparkfun_qwiic_joystick) | [Documentation](./app/documentation/example/sparkfun_qwiic_joystick) |
+| 75 | Qwiic Keypad (Sparkfun) | [Example](./app/example/sparkfun_qwiic_keypad) | [Documentation](./app/documentation/example/sparkfun_qwiic_keypad) |
+| 76 | Qwiic Soil Moisture Sensor (Sparkfun) - I2C | [Example](./app/example/sparkfun_soil_moisture) | [Documentation](./app/documentation/example/sparkfun_soil_moisture) |
+| 77 | RA-08 - LR 9 Click (Mikroe) | [Example](./app/example/mikroe_lr9_ra_08) | [Documentation](./app/documentation/example/mikroe_lr9_ra_08) |
+| 78 | RNG Click (Mikroe) | [Example](./app/example/mikroe_rng) | [Documentation](./app/documentation/example/mikroe_rng) |
+| 79 | SCD41 & SPS30 - HVAC Click Bundle (Mikroe) | [Example](./app/example/mikroe_hvac_bundle_scd41_sps30) | [Documentation](./app/documentation/example/mikroe_hvac_bundle_scd41_sps30) |
+| 80 | SCD41 - HVAC Click (Mikroe) | [Example](./app/example/mikroe_hvac_scd41) | [Documentation](./app/documentation/example/mikroe_hvac_scd41) |
+| 81 | SGP40 - Air Quality Sensor (Sparkfun) | [Example](./app/example/sparkfun_air_quality_sgp40) | [Documentation](./app/documentation/example/sparkfun_air_quality_sgp40) |
+| 82 | SHT40 & SGP40 - Environment 2 Click (Mikroe) | [Example](./app/example/mikroe_environment2_sht40_sgp40) | [Documentation](./app/documentation/example/mikroe_environment2_sht40_sgp40) |
+| 83 | SHT40 - Temp&Hum 15 Click (Mikroe) | [Example](./app/example/mikroe_temphum15_sht40) | [Documentation](./app/documentation/example/mikroe_temphum15_sht40) |
+| 84 | SHTC3 - Temp&Hum 9 Click (Mikroe) | [Example](./app/example/mikroe_temphum9_shtc3) | [Documentation](./app/documentation/example/mikroe_temphum9_shtc3) |
+| 85 | Si8711CC - PWM Driver Click (Mikroe) | [Example](./app/example/mikroe_pwm_driver_si8711cc) | [Documentation](./app/documentation/example/mikroe_pwm_driver_si8711cc) |
+| 86 | Smoke 2 Click (Mikroe) - I2C | [Example](./app/example/mikroe_smoke2_adpd188bi) | [Documentation](./app/documentation/example/mikroe_smoke2_adpd188bi) |
+| 87 | SPS30 - Particulate Matter Sensor (Sparkfun) - I2C | [Example](./app/example/sparkfun_particulate_matter_sensor_sps30) | [Documentation](./app/documentation/example/sparkfun_particulate_matter_sensor_sps30) |
+| 88 | SPS30 - Particulate Matter Sensor (Sparkfun) - UART | [Example](./app/example/sparkfun_particulate_matter_sensor_sps30) | [Documentation](./app/documentation/example/sparkfun_particulate_matter_sensor_sps30) |
+| 89 | SSD1306 - Micro OLED Breakout Qwiic (Sparkfun) | [Example](./app/example/sparkfun_micro_oled_ssd1306) | [Documentation](./app/documentation/example/sparkfun_micro_oled_ssd1306) |
+| 90 | SSD1306 - Mikroe OLEDW Click (Mikroe) | [Example](./app/example/mikroe_oledw_ssd1306) | [Documentation](./app/documentation/example/mikroe_oledw_ssd1306) |
+| 91 | SSD1306 - Mikroe OLEDW Click (Mikroe) with GLIB | [Example](./app/example/mikroe_oledw_ssd1306_glib) | [Documentation](./app/documentation/example/mikroe_oledw_ssd1306_glib) |
+| 92 | SSD1351 - OLED C Click (Mikroe) | [Example](./app/example/mikroe_oledc_ssd1351) | [Documentation](./app/documentation/example/mikroe_oledc_ssd1351) |
+| 93 | ST7789 - TFT LCD Display (Adafruit) - SPI | [Example](./app/example/adafruit_tft_lcd_st7789) | [Documentation](./app/documentation/example/adafruit_tft_lcd_st7789) |
+| 94 | ST7789 - TFT LCD Display (Adafruit) - SPI with DMA | [Example](./app/example/adafruit_tft_lcd_st7789) | [Documentation](./app/documentation/example/adafruit_tft_lcd_st7789) |
+| 95 | ST7789 - TFT LCD Display (Adafruit) - with LVGL + DMA | [Example](./app/example/adafruit_tft_lcd_st7789_lvgl_dma) | [Documentation](./app/documentation/example/adafruit_tft_lcd_st7789_lvgl_dma) |
+| 96 | STN1110 - OBDII Click (Mikroe) | [Example](./app/example/mikroe_obdii_stn1110) | [Documentation](./app/documentation/example/mikroe_obdii_stn1110) |
+| 97 | Stretch Click (Mikroe) | [Example](./app/example/mikroe_stretch) | [Documentation](./app/documentation/example/mikroe_stretch) |
+| 98 | TB6549FG - DC Motor 3 Click (Mikroe) | [Example](./app/example/mikroe_dcmotor3_tb6549fg) | [Documentation](./app/documentation/example/mikroe_dcmotor3_tb6549fg) |
+| 99 | TB9053FTG - DC Motor 26 Click (Mikroe) | [Example](./app/example/mikroe_dcmotor26_tb9053ftg) | [Documentation](./app/documentation/example/mikroe_dcmotor26_tb9053ftg) |
+| 100 | TSC2007 - Resistive Touch Screen Controller (Adafruit) | [Example](./app/example/adafruit_touchscreen_tsc2007) | [Documentation](./app/documentation/example/adafruit_touchscreen_tsc2007) |
+| 101 | TSD-10 - Turbidity Click (Mikroe) | [Example](./app/example/mikroe_turbidity_tsd10) | [Documentation](./app/documentation/example/mikroe_turbidity_tsd10) |
+| 102 | VCNL4040 - Proximity Sensor (Sparkfun) | [Example](./app/example/sparkfun_proximity_vcnl4040) | [Documentation](./app/documentation/example/sparkfun_proximity_vcnl4040) |
+| 103 | VL53L1X - Distance Sensor (Sparkfun) | [Example](./app/example/sparkfun_distance_vl53l1x) | [Documentation](./app/documentation/example/sparkfun_distance_vl53l1x) |
+| 104 | W5500 - ETH Wiz Click (Mikroe) | [Example](./app/example/mikroe_eth_wiz_w5500) | [Documentation](./app/documentation/example/mikroe_eth_wiz_w5500) |
+| 105 | Water Detect Click (Mikroe) | [Example](./app/example/mikroe_water_detect) | [Documentation](./app/documentation/example/mikroe_water_detect) |
+| 106 | Weather Station (Sparkfun) | [Example](./app/example/sparkfun_weatherstation) | [Documentation](./app/documentation/example/sparkfun_weatherstation) |
+| 107 | XM125 - PCR Click (Mikroe) | [Example](./app/example/mikroe_pcr_xm125) | [Documentation](./app/documentation/example/mikroe_pcr_xm125) |
+
+
+## Drivers ##
+
+
Audio & Voice | +||
CMT-8540S-SMT - Buzz 2 Click (Mikroe) | ++ Driver + | +|
MIC 2 Click (Mikroe) | ++ Driver + | +|
Clock & Timing | +||
DS3231M - RTC 10 Click (Mikroe) | ++ Driver + | +|
Display & LED | +||
E-Paper Display - eINK Click (Mikroe) | ++ Driver + | +|
E-Paper EXT3-1 (Pervasive Displays) | ++ Driver + | +|
HXD8357D - TFT LCD Display (Adafruit) - SPI | ++ Driver + | +|
HXD8357D - TFT LCD Display (Adafruit) - SPI with DMA | ++ Driver + | +|
ILI9341 - TFT LCD Display (Adafruit) - SPI | ++ Driver + | +|
ILI9341 - TFT LCD Display (Adafruit) - SPI with DMA | ++ Driver + | +|
IS31FL3741 - 13x9 PWM RGB LED Matrix (Adafruit) - I2C | ++ Driver + | +|
MAX6969 - UT-M 7-SEG R Click (Mikroe) | ++ Driver + | +|
SSD1306 - Micro OLED Breakout (Sparkfun) - I2C | ++ Driver + | +|
SSD1306 - OLED W Click (Mikroe) - SPI | ++ Driver + | +|
SSD1351 - OLED C Click (Mikroe) | ++ Driver + | +|
ST7789 - TFT LCD Display (Adafruit) - SPI | ++ Driver + | +|
ST7789 - TFT LCD Display (Adafruit) - SPI with DMA | ++ Driver + | +|
Human Machine Interface | +||
A-172-MRQ - Fingerprint 2 Click (Mikroe) | ++ Driver + | +|
CAP1166 - Capacitive Touch 2 Click (Mikroe) | ++ Driver + | +|
NeoTrellis 4x4 Keypad (Adafruit) | ++ Driver + | +|
Qwiic Joystick (Sparkfun) | ++ Driver + | +|
Qwiic Keypad (Sparkfun) | ++ Driver + | +|
Touch Screen (Analog) | ++ Driver + | +|
Touch Screen Analog Interface (Gecko) | ++ Driver + | +|
Touch Screen Analog Interface (Si91x) | ++ Driver + | +|
TSC2007 - Resistive Touch Screen Controller (Adafruit) | ++ Driver + | +|
Interface | +||
STN1110 - OBDII Click (Mikroe) | ++ Driver + | +|
W5500 - ETH WIZ Click (Mikroe) | ++ Driver + | +|
Miscellaneous | +||
IR Generator (Silabs) | ++ Driver + | +|
LCA717 - Relay 2 Click (Mikroe) | ++ Driver + | +|
RNG Click (Mikroe) | ++ Driver + | +|
Motor Control | +||
A3967 - Stepper Click (Mikroe) | ++ Driver + | +|
A4988 - Stepper 2 Click (Mikroe) | ++ Driver + | +|
L9958 - DC Motor 24 Click (Mikroe) | ++ Driver + | +|
LB11685AV - Brushless 16 Click (Mikroe) | ++ Driver + | +|
PCA9685 - Servo Click (Mikroe) | ++ Driver + | +|
Si8711CC - PWM Driver Click (Mikroe) | ++ Driver + | +|
TB6549FG - DC Motor 3 Click (Mikroe) | ++ Driver + | +|
TB9053FTG - DC Motor 26 Click (Mikroe) | ++ Driver + | +|
Power Management | +||
MAX17048 - MAX17048EVKIT Evaluation Kits (Maxim) | ++ Driver + | +|
Sensors | +||
AC Current Click (Mikroe) | ++ Driver + | +|
AD8318 - RF Meter Click (Mikroe) | ++ Driver + | +|
ADPD188BI - Smoke 2 Click (Mikroe) - I2C | ++ Driver + | +|
AK9753 - Human Presence Sensor (Sparkfun) - I2C | ++ Driver + | +|
AMG88XX - Grid-EYE Infrared Array Breakout (Sparkfun) | ++ Driver + | +|
AS3935 - Thunder Click (Mikroe) | ++ Driver + | +|
AS7265x - Triad Spectroscopy Sensor (Sparkfun) - I2C | ++ Driver + | +|
BMA400 - Accel 5 Click (Mikroe) - I2C | ++ Driver + | +|
BMA400 - Accel 5 Click (Mikroe) - SPI | ++ Driver + | +|
BME280 - Atmospheric Sensor (Sparkfun) | ++ Driver + | +|
BME688 - Environment 3 Click (Mikroe) - I2C | ++ Driver + | +|
BME688 - Environment 3 Click (Mikroe) - SPI | ++ Driver + | +|
BMI270 - 6DOF IMU Breakout (Sparkfun) | ++ Driver + | +|
CCS811 - Air Quality Sensor (Sparkfun) | ++ Driver + | +|
DPS310 - Pressure 3 Click (Mikroe) - I2C | ++ Driver + | +|
DPS310 - Pressure 3 Click (Mikroe) - SPI | ++ Driver + | +|
EM3080-W - Barcode 2 Click (Mikroe) | ++ Driver + | +|
EMG Click (Mikroe) | ++ Driver + | +|
FSR400 - Force 3 Click (Mikroe) | ++ Driver + | +|
MAX30101 & MAX32664 - Pulse Oximeter and Heart Rate Sensor (Sparkfun) | ++ Driver + | +|
MAX30101 - Heart Rate 4 Click (Mikroe) | ++ Driver + | +|
MAXM86161 - Heart Rate 2 Click (Mikroe) | ++ Driver + | +|
MCP606 - Water Detect Click (Mikroe) | ++ Driver + | +|
ML8511A - UV Click (Mikroe) | ++ Driver + | +|
MLX90632 - IrThermo 3 Click (Mikroe) | ++ Driver + | +|
MLX90640 - IR Array Breakout (Sparkfun) | ++ Driver + | +|
MM5D91-00 - Radar Click (Mikroe) | ++ Driver + | +|
MMA8452Q - Triple Axis Accelerometer Breakout (Sparkfun) | ++ Driver + | +|
MQ131 - Ozone 2 Click (Mikroe) | ++ Driver + | +|
MQ3 - Alcohol Click (Mikroe) | ++ Driver + | +|
MQ7 - CO Click (Mikroe) | ++ Driver + | +|
PH2 Click (Mikroe) | ++ Driver + | +|
PL-N823-01 - PIR Click (Mikroe) | ++ Driver + | +|
Pocket Geiger Radiation - Type 5 (Sparkfun) | ++ Driver + | +|
Qwiic Soil Moisture Sensor (Sparkfun) - I2C | ++ Driver + | +|
SCD41 & SPS30 - HVAC Click Bundle (Mikroe) | ++ Driver + | +|
SCD41 - HVAC Click (Mikroe) | ++ Driver + | +|
SGP40 - Air Quality Sensor (Sparkfun) | ++ Driver + | +|
SHT40 & SGP40 - Environment 2 Click (Mikroe) | ++ Driver + | +|
SHT40 - Temp&Hum 15 Click (Mikroe) | ++ Driver + | +|
SHTC3 - Temp&Hum 9 Click (Mikroe) | ++ Driver + | +|
SPS30 - Particulate Matter Sensor (Sparkfun) - I2C | ++ Driver + | +|
SPS30 - Particulate Matter Sensor (Sparkfun) - UART | ++ Driver + | +|
Stretch Click (Mikroe) | ++ Driver + | +|
TSD-10 - Turbidity Click (Mikroe) | ++ Driver + | +|
VCNL4040 - Proximity Sensor (Sparkfun) | ++ Driver + | +|
VL53L1X - Distance Sensor Breakout (Sparkfun) | ++ Driver + | +|
Weather Meter Kit - Rainfall (Sparkfun) | ++ Driver + | +|
Weather Meter Kit - Wind Direction (Sparkfun) | ++ Driver + | +|
Weather Meter Kit - Wind Speed (Sparkfun) | ++ Driver + | +|
XM125 - PCR Click (Mikroe) - I2C | ++ Driver + | +|
Services | +||
BTHome v2 | ++ Driver + | +|
BTHome v2 - Server | ++ Driver + | +|
EnOcean Switch Proxy Server | ++ Driver + | +|
FatFS - Generic FAT Filesystem | ++ Driver + | +|
GLIB - OLED Graphics Library | ++ Driver + | +|
GPIO helper for SI91X platform | ++ Driver + | +|
LIN bus slave | ++ Driver + | +|
LVGL - Graphics Library | ++ Driver + | +|
MIPI Display Bus Interface (SPI - 4Wire) | ++ | +|
mikroSDK 2.0 SDK - Peripheral Drivers | +||
ADC | ++ Driver + | +|
Digital I/O | ++ Driver + | +|
I2C | ++ Driver + | +|
OneWire | ++ Driver + | +|
PWM | ++ Driver + | +|
SPI | ++ Driver + | +|
UART | ++ Driver + | +|
NFC | +||
NFC - Common | ++ Driver + | +|
NFC - NCI | ++ Driver + | +|
NFC - NDEF | ++ Driver + | +|
NFC - Tag | ++ Driver + | +|
Storage | +||
microSD - microSD Click (Mikroe) | ++ Driver + | +|
Wireless Connectivity | +||
BG96 - LTE IoT 2 Click (Mikroe) | ++ Driver + | +|
DWM1000 - UWB Click (Mikroe) | ++ Driver + | +|
DWM3000 - UWB 2 Click (Mikroe) | ++ Driver + | +|
ID-12LA - RFID Reader (Sparkfun) - I2C | ++ Driver + | +|
LEA-6S - GPS Click (Mikroe) | ++ Driver + | +|
MAX-M10S - GNSS Receiver Breakout - I2C | ++ Driver + | +|
NT3H2111 - NFC Tag 2 Click (Mikroe) - I2C | ++ Driver + | +|
PN7150 - NFC 2 Click (Mikroe) - I2C | ++ Driver + | +|
RA-08 - LR 9 Click (Mikroe) | ++ Driver + | +
Use ethernet large buffer // @@ -71,10 +87,24 @@ extern "C" { //W5500_RESET // $[GPIO_W5500_RESET] -#define W5500_RESET_PORT gpioPortC -#define W5500_RESET_PIN 8 +#ifndef W5500_RESET_PORT +#define W5500_RESET_PORT gpioPortC +#endif +#ifndef W5500_RESET_PIN +#define W5500_RESET_PIN 8 +#endif // [GPIO_W5500_RESET]$ +// MIKROE_W5500_CS +// $[GPIO_MIKROE_W5500_CS] +#ifndef MIKROE_W5500_CS_PORT +#define MIKROE_W5500_CS_PORT gpioPortC +#endif +#ifndef MIKROE_W5500_CS_PIN +#define MIKROE_W5500_CS_PIN 0 +#endif +// [GPIO_MIKROE_W5500_CS]$ + // <<< sl:end pin_tool >>> #ifdef __cplusplus diff --git a/driver/public/mikroe/eth_wiz_w5500/config/brd2703a/sl_spidrv_w5500_config.h b/driver/public/mikroe/eth_wiz_w5500/config/brd2703a/sl_spidrv_w5500_config.h deleted file mode 100644 index 0184416d..00000000 --- a/driver/public/mikroe/eth_wiz_w5500/config/brd2703a/sl_spidrv_w5500_config.h +++ /dev/null @@ -1,88 +0,0 @@ -/***************************************************************************//** - * @file - * @brief SPIDRV Config - ******************************************************************************* - * # License - * Copyright 2019 Silicon Laboratories Inc. www.silabs.com - ******************************************************************************* - * - * The licensor of this software is Silicon Laboratories Inc. Your use of this - * software is governed by the terms of Silicon Labs Master Software License - * Agreement (MSLA) available at - * www.silabs.com/about-us/legal/master-software-license-agreement. This - * software is distributed to you in Source Code format and is governed by the - * sections of the MSLA applicable to Source Code. - * - ******************************************************************************/ - -#ifndef SL_SPIDRV_W5500_CONFIG_H -#define SL_SPIDRV_W5500_CONFIG_H - -#include "spidrv.h" - -// <<< Use Configuration Wizard in Context Menu >>> -// SPIDRV settings - -// -// <<< end of configuration section >>> - -// <<< sl:start pin_tool >>> -//SPI bitrate -// Default: 1000000 -#define SL_SPIDRV_W5500_BITRATE 10000000 - -// SPI frame length <4-16> -// Default: 8 -#define SL_SPIDRV_W5500_FRAME_LENGTH 8 - -// SPI mode -// Master -// Slave -#define SL_SPIDRV_W5500_TYPE spidrvMaster - -// Bit order on the SPI bus -// LSB transmitted first -// MSB transmitted first -#define SL_SPIDRV_W5500_BIT_ORDER spidrvBitOrderMsbFirst - -// SPI clock mode -// SPI mode 0: CLKPOL=0, CLKPHA=0 -// SPI mode 1: CLKPOL=0, CLKPHA=1 -// SPI mode 2: CLKPOL=1, CLKPHA=0 -// SPI mode 3: CLKPOL=1, CLKPHA=1 -#define SL_SPIDRV_W5500_CLOCK_MODE spidrvClockMode0 - -// SPI master chip select (CS) control scheme. -// CS controlled by the SPI driver -// CS controlled by the application -#define SL_SPIDRV_W5500_CS_CONTROL spidrvCsControlApplication - -// SPI slave transfer start scheme -// Transfer starts immediately -// Transfer starts when the bus is idle (CS deasserted) -// Only applies if instance type is spidrvSlave -#define SL_SPIDRV_W5500_SLAVE_START_MODE spidrvSlaveStartImmediate -// SL_SPIDRV_W5500 -// $[USART_SL_SPIDRV_W5500] -#define SL_SPIDRV_W5500_PERIPHERAL USART0 -#define SL_SPIDRV_W5500_PERIPHERAL_NO 0 - -// USART0 TX on PC00 -#define SL_SPIDRV_W5500_TX_PORT gpioPortC -#define SL_SPIDRV_W5500_TX_PIN 3 - -// USART0 RX on PC01 -#define SL_SPIDRV_W5500_RX_PORT gpioPortC -#define SL_SPIDRV_W5500_RX_PIN 2 - -// USART0 CLK on PC02 -#define SL_SPIDRV_W5500_CLK_PORT gpioPortC -#define SL_SPIDRV_W5500_CLK_PIN 1 - -// USART0 CS on PC03 -#define SL_SPIDRV_W5500_CS_PORT gpioPortC -#define SL_SPIDRV_W5500_CS_PIN 0 -// [USART_SL_SPIDRV_W5500]$ -// <<< sl:end pin_tool >>> - -#endif // SL_SPIDRV_W5500_CONFIG_H diff --git a/driver/public/mikroe/eth_wiz_w5500/config/brd4108a/mikroe_w5500_config.h b/driver/public/mikroe/eth_wiz_w5500/config/brd4108a/mikroe_w5500_config.h index c1c9358e..af6cc9a3 100644 --- a/driver/public/mikroe/eth_wiz_w5500/config/brd4108a/mikroe_w5500_config.h +++ b/driver/public/mikroe/eth_wiz_w5500/config/brd4108a/mikroe_w5500_config.h @@ -39,11 +39,27 @@ #ifndef Wx500_CONFIG_H_ #define Wx500_CONFIG_H_ +#include "em_gpio.h" + #ifdef __cplusplus extern "C" { #endif // <<< Use Configuration Wizard in Context Menu >>> +// MIKROE_W5500 SPI Configuration + +// //MIKROE_W5500 SPI UC Configuration +// Enable: Peripheral configuration is taken straight from the configuration set in the universal configuration (UC). +// Disable: If the application demands it to be modified during runtime, use the default API to modify the peripheral configuration. +// Default: 0 +#define MIKROE_W5500_SPI_UC 0 + +// +//Bit Rate (Bits/Second) <1-116000000> +// Default: 10000000 +#define MIKROE_W5500_SPI_BITRATE 10000000 + +// Use ethernet large buffer // @@ -71,10 +87,24 @@ extern "C" { //W5500_RESET // $[GPIO_W5500_RESET] -#define W5500_RESET_PORT gpioPortC -#define W5500_RESET_PIN 6 +#ifndef W5500_RESET_PORT +#define W5500_RESET_PORT gpioPortC +#endif +#ifndef W5500_RESET_PIN +#define W5500_RESET_PIN 6 +#endif // [GPIO_W5500_RESET]$ +// MIKROE_W5500_CS +// $[GPIO_MIKROE_W5500_CS] +#ifndef MIKROE_W5500_CS_PORT +#define MIKROE_W5500_CS_PORT gpioPortC +#endif +#ifndef MIKROE_W5500_CS_PIN +#define MIKROE_W5500_CS_PIN 3 +#endif +// [GPIO_MIKROE_W5500_CS]$ + // <<< sl:end pin_tool >>> #ifdef __cplusplus diff --git a/driver/public/mikroe/eth_wiz_w5500/config/brd4108a/sl_spidrv_w5500_config.h b/driver/public/mikroe/eth_wiz_w5500/config/brd4108a/sl_spidrv_w5500_config.h deleted file mode 100644 index 9effb602..00000000 --- a/driver/public/mikroe/eth_wiz_w5500/config/brd4108a/sl_spidrv_w5500_config.h +++ /dev/null @@ -1,88 +0,0 @@ -/***************************************************************************//** - * @file - * @brief SPIDRV Config - ******************************************************************************* - * # License - * Copyright 2019 Silicon Laboratories Inc. www.silabs.com - ******************************************************************************* - * - * The licensor of this software is Silicon Laboratories Inc. Your use of this - * software is governed by the terms of Silicon Labs Master Software License - * Agreement (MSLA) available at - * www.silabs.com/about-us/legal/master-software-license-agreement. This - * software is distributed to you in Source Code format and is governed by the - * sections of the MSLA applicable to Source Code. - * - ******************************************************************************/ - -#ifndef SL_SPIDRV_W5500_CONFIG_H -#define SL_SPIDRV_W5500_CONFIG_H - -#include "spidrv.h" - -// <<< Use Configuration Wizard in Context Menu >>> -// SPIDRV settings - -// -// <<< end of configuration section >>> - -// <<< sl:start pin_tool >>> -//SPI bitrate -// Default: 1000000 -#define SL_SPIDRV_W5500_BITRATE 10000000 - -// SPI frame length <4-16> -// Default: 8 -#define SL_SPIDRV_W5500_FRAME_LENGTH 8 - -// SPI mode -// Master -// Slave -#define SL_SPIDRV_W5500_TYPE spidrvMaster - -// Bit order on the SPI bus -// LSB transmitted first -// MSB transmitted first -#define SL_SPIDRV_W5500_BIT_ORDER spidrvBitOrderMsbFirst - -// SPI clock mode -// SPI mode 0: CLKPOL=0, CLKPHA=0 -// SPI mode 1: CLKPOL=0, CLKPHA=1 -// SPI mode 2: CLKPOL=1, CLKPHA=0 -// SPI mode 3: CLKPOL=1, CLKPHA=1 -#define SL_SPIDRV_W5500_CLOCK_MODE spidrvClockMode0 - -// SPI master chip select (CS) control scheme. -// CS controlled by the SPI driver -// CS controlled by the application -#define SL_SPIDRV_W5500_CS_CONTROL spidrvCsControlApplication - -// SPI slave transfer start scheme -// Transfer starts immediately -// Transfer starts when the bus is idle (CS deasserted) -// Only applies if instance type is spidrvSlave -#define SL_SPIDRV_W5500_SLAVE_START_MODE spidrvSlaveStartImmediate -// SL_SPIDRV_W5500 -// $[USART_SL_SPIDRV_W5500] -#define SL_SPIDRV_W5500_PERIPHERAL USART0 -#define SL_SPIDRV_W5500_PERIPHERAL_NO 0 - -// USART0 TX on PC00 -#define SL_SPIDRV_W5500_TX_PORT gpioPortC -#define SL_SPIDRV_W5500_TX_PIN 0 - -// USART0 RX on PC01 -#define SL_SPIDRV_W5500_RX_PORT gpioPortC -#define SL_SPIDRV_W5500_RX_PIN 1 - -// USART0 CLK on PC02 -#define SL_SPIDRV_W5500_CLK_PORT gpioPortC -#define SL_SPIDRV_W5500_CLK_PIN 2 - -// USART0 CS on PC03 -#define SL_SPIDRV_W5500_CS_PORT gpioPortC -#define SL_SPIDRV_W5500_CS_PIN 3 -// [USART_SL_SPIDRV_W5500]$ -// <<< sl:end pin_tool >>> - -#endif // SL_SPIDRV_W5500_CONFIG_H diff --git a/driver/public/mikroe/eth_wiz_w5500/config/brd4314a/mikroe_w5500_config.h b/driver/public/mikroe/eth_wiz_w5500/config/brd4314a/mikroe_w5500_config.h index c1c9358e..af6cc9a3 100644 --- a/driver/public/mikroe/eth_wiz_w5500/config/brd4314a/mikroe_w5500_config.h +++ b/driver/public/mikroe/eth_wiz_w5500/config/brd4314a/mikroe_w5500_config.h @@ -39,11 +39,27 @@ #ifndef Wx500_CONFIG_H_ #define Wx500_CONFIG_H_ +#include "em_gpio.h" + #ifdef __cplusplus extern "C" { #endif // <<< Use Configuration Wizard in Context Menu >>> +// MIKROE_W5500 SPI Configuration + +// //MIKROE_W5500 SPI UC Configuration +// Enable: Peripheral configuration is taken straight from the configuration set in the universal configuration (UC). +// Disable: If the application demands it to be modified during runtime, use the default API to modify the peripheral configuration. +// Default: 0 +#define MIKROE_W5500_SPI_UC 0 + +// +//Bit Rate (Bits/Second) <1-116000000> +// Default: 10000000 +#define MIKROE_W5500_SPI_BITRATE 10000000 + +// Use ethernet large buffer // @@ -71,10 +87,24 @@ extern "C" { //W5500_RESET // $[GPIO_W5500_RESET] -#define W5500_RESET_PORT gpioPortC -#define W5500_RESET_PIN 6 +#ifndef W5500_RESET_PORT +#define W5500_RESET_PORT gpioPortC +#endif +#ifndef W5500_RESET_PIN +#define W5500_RESET_PIN 6 +#endif // [GPIO_W5500_RESET]$ +// MIKROE_W5500_CS +// $[GPIO_MIKROE_W5500_CS] +#ifndef MIKROE_W5500_CS_PORT +#define MIKROE_W5500_CS_PORT gpioPortC +#endif +#ifndef MIKROE_W5500_CS_PIN +#define MIKROE_W5500_CS_PIN 3 +#endif +// [GPIO_MIKROE_W5500_CS]$ + // <<< sl:end pin_tool >>> #ifdef __cplusplus diff --git a/driver/public/mikroe/eth_wiz_w5500/config/brd4314a/sl_spidrv_w5500_config.h b/driver/public/mikroe/eth_wiz_w5500/config/brd4314a/sl_spidrv_w5500_config.h deleted file mode 100644 index 9effb602..00000000 --- a/driver/public/mikroe/eth_wiz_w5500/config/brd4314a/sl_spidrv_w5500_config.h +++ /dev/null @@ -1,88 +0,0 @@ -/***************************************************************************//** - * @file - * @brief SPIDRV Config - ******************************************************************************* - * # License - * Copyright 2019 Silicon Laboratories Inc. www.silabs.com - ******************************************************************************* - * - * The licensor of this software is Silicon Laboratories Inc. Your use of this - * software is governed by the terms of Silicon Labs Master Software License - * Agreement (MSLA) available at - * www.silabs.com/about-us/legal/master-software-license-agreement. This - * software is distributed to you in Source Code format and is governed by the - * sections of the MSLA applicable to Source Code. - * - ******************************************************************************/ - -#ifndef SL_SPIDRV_W5500_CONFIG_H -#define SL_SPIDRV_W5500_CONFIG_H - -#include "spidrv.h" - -// <<< Use Configuration Wizard in Context Menu >>> -// SPIDRV settings - -// -// <<< end of configuration section >>> - -// <<< sl:start pin_tool >>> -//SPI bitrate -// Default: 1000000 -#define SL_SPIDRV_W5500_BITRATE 10000000 - -// SPI frame length <4-16> -// Default: 8 -#define SL_SPIDRV_W5500_FRAME_LENGTH 8 - -// SPI mode -// Master -// Slave -#define SL_SPIDRV_W5500_TYPE spidrvMaster - -// Bit order on the SPI bus -// LSB transmitted first -// MSB transmitted first -#define SL_SPIDRV_W5500_BIT_ORDER spidrvBitOrderMsbFirst - -// SPI clock mode -// SPI mode 0: CLKPOL=0, CLKPHA=0 -// SPI mode 1: CLKPOL=0, CLKPHA=1 -// SPI mode 2: CLKPOL=1, CLKPHA=0 -// SPI mode 3: CLKPOL=1, CLKPHA=1 -#define SL_SPIDRV_W5500_CLOCK_MODE spidrvClockMode0 - -// SPI master chip select (CS) control scheme. -// CS controlled by the SPI driver -// CS controlled by the application -#define SL_SPIDRV_W5500_CS_CONTROL spidrvCsControlApplication - -// SPI slave transfer start scheme -// Transfer starts immediately -// Transfer starts when the bus is idle (CS deasserted) -// Only applies if instance type is spidrvSlave -#define SL_SPIDRV_W5500_SLAVE_START_MODE spidrvSlaveStartImmediate -// SL_SPIDRV_W5500 -// $[USART_SL_SPIDRV_W5500] -#define SL_SPIDRV_W5500_PERIPHERAL USART0 -#define SL_SPIDRV_W5500_PERIPHERAL_NO 0 - -// USART0 TX on PC00 -#define SL_SPIDRV_W5500_TX_PORT gpioPortC -#define SL_SPIDRV_W5500_TX_PIN 0 - -// USART0 RX on PC01 -#define SL_SPIDRV_W5500_RX_PORT gpioPortC -#define SL_SPIDRV_W5500_RX_PIN 1 - -// USART0 CLK on PC02 -#define SL_SPIDRV_W5500_CLK_PORT gpioPortC -#define SL_SPIDRV_W5500_CLK_PIN 2 - -// USART0 CS on PC03 -#define SL_SPIDRV_W5500_CS_PORT gpioPortC -#define SL_SPIDRV_W5500_CS_PIN 3 -// [USART_SL_SPIDRV_W5500]$ -// <<< sl:end pin_tool >>> - -#endif // SL_SPIDRV_W5500_CONFIG_H diff --git a/driver/public/mikroe/eth_wiz_w5500/config/brd4338a/mikroe_w5500_config.h b/driver/public/mikroe/eth_wiz_w5500/config/brd4338a/mikroe_w5500_config.h new file mode 100644 index 00000000..4d2211a4 --- /dev/null +++ b/driver/public/mikroe/eth_wiz_w5500/config/brd4338a/mikroe_w5500_config.h @@ -0,0 +1,111 @@ +/***************************************************************************//** + * @file w5x00_config.h + * @brief Wiznet w5x00 config. + * @version 0.0.1 + ******************************************************************************* + * # License + * Copyright 2022 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided \'as-is\', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************* + * + * EVALUATION QUALITY + * This code has been minimally tested to ensure that it builds with the + * specified dependency versions and is suitable as a demonstration for + * evaluation purposes only. + * This code will be maintained at the sole discretion of Silicon Labs. + * + ******************************************************************************/ +#ifndef Wx500_CONFIG_H_ +#define Wx500_CONFIG_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +// <<< Use Configuration Wizard in Context Menu >>> +// MIKROE_W5500 SPI Configuration + +// + +//MIKROE_W5500 SPI UC Configuration +// Enable: Peripheral configuration is taken straight from the configuration set in the universal configuration (UC). +// Disable: If the application demands it to be modified during runtime, use the default API to modify the peripheral configuration. +// Default: 0 +#define MIKROE_W5500_SPI_UC 0 + +// +//Bit Rate (Bits/Second) <1-116000000> +// Default: 10000000 +#define MIKROE_W5500_SPI_BITRATE 10000000 + +// Use ethernet large buffer +// +// By default, each socket uses 2K buffers inside the Wiznet chip. +// If W5x00_MAX_SOCK_NUM is set to fewer than the chip's maximum, uncommenting +// this will use larger buffers within the Wiznet chip. Large buffers +// can really help with UDP protocols like Artnet. In theory larger +// buffers should allow faster TCP over high-latency links, but this +// does not always seem to work in practice (maybe Wiznet bugs?) +// Default: 0 +#define W5x00_ETHERNET_LARGE_BUFFERS_ENABLE 0 + +//HTTP Server debug message enable +// +// Default: 0 +#define W5x00_HTTP_SERVER_DEBUG_ENABLE 0 + +//HTTP server buffer size configuration <1024-10240> +// Default: 1024 +#define W5x00_HTTP_SERVER_BUFFER_SIZE 1024 + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// W5500_RESET +// $[GPIO_W5500_RESET] +#ifndef W5500_RESET_PORT +#define W5500_RESET_PORT HP +#endif +#ifndef W5500_RESET_PIN +#define W5500_RESET_PIN 46 +#endif +// [GPIO_W5500_RESET]$ + +// MIKROE_W5500_CS +// $[GPIO_MIKROE_W5500_CS] +#ifndef MIKROE_W5500_CS_PORT +#define MIKROE_W5500_CS_PORT HP +#endif +#ifndef MIKROE_W5500_CS_PIN +#define MIKROE_W5500_CS_PIN 47 +#endif +// [GPIO_MIKROE_W5500_CS]$ + +// <<< sl:end pin_tool >>> + +#ifdef __cplusplus +} +#endif +#endif /* Wx500_CONFIG_H_ */ diff --git a/driver/public/mikroe/eth_wiz_w5500/config/other/mikroe_w5500_config.h b/driver/public/mikroe/eth_wiz_w5500/config/other/mikroe_w5500_config.h index f5cd6adf..43f286ea 100644 --- a/driver/public/mikroe/eth_wiz_w5500/config/other/mikroe_w5500_config.h +++ b/driver/public/mikroe/eth_wiz_w5500/config/other/mikroe_w5500_config.h @@ -39,11 +39,29 @@ #ifndef Wx500_CONFIG_H_ #define Wx500_CONFIG_H_ +#ifndef SLI_SI917 +#include "em_gpio.h" +#endif + #ifdef __cplusplus extern "C" { #endif // <<< Use Configuration Wizard in Context Menu >>> +// MIKROE_W5500 SPI Configuration + +// //MIKROE_W5500 SPI UC Configuration +// Enable: Peripheral configuration is taken straight from the configuration set in the universal configuration (UC). +// Disable: If the application demands it to be modified during runtime, use the default API to modify the peripheral configuration. +// Default: 0 +#define MIKROE_W5500_SPI_UC 0 + +// +//Bit Rate (Bits/Second) <1-116000000> +// Default: 10000000 +#define MIKROE_W5500_SPI_BITRATE 10000000 + +// Use ethernet large buffer // @@ -72,10 +90,25 @@ extern "C" { //W5500_RESET // $[GPIO_W5500_RESET] #warning "GPIO_W5500_RESET is not configured" -// #define W5500_RESET_PORT gpioPortC -// #define W5500_RESET_PIN 8 +//fndef W5500_RESET_PORT +//#define W5500_RESET_PORT 0 +//#endif +//#ifndef W5500_RESET_PIN +//#define W5500_RESET_PIN 46 +//#endif // [GPIO_W5500_RESET]$ +// MIKROE_W5500_CS +// $[GPIO_MIKROE_W5500_CS] +#warning "GPIO_MIKROE_W5500_CS is not configured" +//#ifndef MIKROE_W5500_CS_PORT +//#define MIKROE_W5500_CS_PORT 0 +//#endif +//#ifndef MIKROE_W5500_CS_PIN +//#define MIKROE_W5500_CS_PIN 47 +//#endif +// [GPIO_MIKROE_W5500_CS]$ + // <<< sl:end pin_tool >>> #ifdef __cplusplus diff --git a/driver/public/mikroe/eth_wiz_w5500/inc/w5x00.h b/driver/public/mikroe/eth_wiz_w5500/inc/w5x00.h index 79dd233e..5c53f529 100644 --- a/driver/public/mikroe/eth_wiz_w5500/inc/w5x00.h +++ b/driver/public/mikroe/eth_wiz_w5500/inc/w5x00.h @@ -321,7 +321,7 @@ static inline uint16_t w5x00_writeSn_buf(w5x00_socket_t s, } #define w5x00_get_socket_tx_max_size(sn) \ - (((uint16_t)w5x00_readSnTX_SIZE(sn)) << 10) + (((uint16_t)w5x00_readSnTX_SIZE(sn)) << 10) /***************************************************************************//** * @brief @@ -443,7 +443,7 @@ void w5x00_exec_cmd_socket(w5x00_socket_t s, uint8_t cmd); * @return * true on success, false on failure ******************************************************************************/ -bool w5x00_init(SPIDRV_Handle_t handle); +bool w5x00_init(mikroe_spi_handle_t handle); /***************************************************************************//** * @brief @@ -456,35 +456,35 @@ uint8_t w5x00_soft_reset(void); /** @cond hidden */ // ----------------------------------------------------------------------------- // Common Registers IOMAP -#define __GP_REGISTER8(name, address) \ - static inline uint16_t w5x00_write##name(uint8_t data) { \ - uint8_t bw = data; \ - return w5x00_write(address, &bw, 1); \ - } \ - static inline uint8_t w5x00_read##name() { \ - uint8_t br; \ - w5x00_read(address, &br, 1); \ - return br; \ - } -#define __GP_REGISTER16(name, address) \ - static inline void w5x00_write##name(uint16_t _data) { \ - uint8_t buf[2]; \ - buf[0] = _data >> 8; \ - buf[1] = _data & 0xFF; \ - w5x00_write(address, buf, 2); \ - } \ - static inline uint16_t w5x00_read##name() { \ - uint8_t buf[2]; \ - w5x00_read(address, buf, 2); \ - return (buf[0] << 8) | buf[1]; \ - } +#define __GP_REGISTER8(name, address) \ + static inline uint16_t w5x00_write ## name(uint8_t data) { \ + uint8_t bw = data; \ + return w5x00_write(address, &bw, 1); \ + } \ + static inline uint8_t w5x00_read ## name() { \ + uint8_t br; \ + w5x00_read(address, &br, 1); \ + return br; \ + } +#define __GP_REGISTER16(name, address) \ + static inline void w5x00_write ## name(uint16_t _data) { \ + uint8_t buf[2]; \ + buf[0] = _data >> 8; \ + buf[1] = _data & 0xFF; \ + w5x00_write(address, buf, 2); \ + } \ + static inline uint16_t w5x00_read ## name() { \ + uint8_t buf[2]; \ + w5x00_read(address, buf, 2); \ + return (buf[0] << 8) | buf[1]; \ + } #define __GP_REGISTER_N(name, address, size) \ - static inline uint16_t w5x00_write##name(const uint8_t *_buff) { \ - return w5x00_write(address, _buff, size); \ - } \ - static inline uint16_t w5x00_read##name(uint8_t *_buff) { \ - return w5x00_read(address, _buff, size); \ - } + static inline uint16_t w5x00_write ## name(const uint8_t * _buff) { \ + return w5x00_write(address, _buff, size); \ + } \ + static inline uint16_t w5x00_read ## name(uint8_t * _buff) { \ + return w5x00_read(address, _buff, size); \ + } __GP_REGISTER8(MR, 0x0000); // Mode __GP_REGISTER_N(GAR, 0x0001, 4); // Gateway IP address @@ -526,36 +526,36 @@ __GP_REGISTER16(PMRU, 0x0026); // PPP Maximum Segment Size // ----------------------------------------------------------------------------- // Socket Registers IOMAP -#define __SOCKET_REGISTER8(name, address) \ - static inline void w5x00_write ## name(w5x00_socket_t _s, \ - uint8_t _data) { \ - w5x00_writeSn(_s, address, _data); \ - } \ - static inline uint8_t w5x00_read ## name(w5x00_socket_t _s) { \ - return w5x00_readSn(_s, address); \ - } -#define __SOCKET_REGISTER16(name, address) \ - static inline void w5x00_write ## name(w5x00_socket_t _s, \ - uint16_t _data) { \ - uint8_t buf[2]; \ - buf[0] = _data >> 8; \ - buf[1] = _data & 0xFF; \ - w5x00_writeSn_buf(_s, address, buf, 2); \ - } \ - static inline uint16_t w5x00_read ## name(w5x00_socket_t _s) { \ - uint8_t buf[2]; \ - w5x00_readSn_buf(_s, address, buf, 2); \ - return (buf[0] << 8) | buf[1]; \ - } -#define __SOCKET_REGISTER_N(name, address, size) \ - static inline uint16_t w5x00_write ## name(w5x00_socket_t _s, \ - uint8_t * _buff) { \ - return w5x00_writeSn_buf(_s, address, _buff, size); \ - } \ - static inline uint16_t w5x00_read ## name(w5x00_socket_t _s, \ - uint8_t * _buff) { \ - return w5x00_readSn_buf(_s, address, _buff, size); \ - } +#define __SOCKET_REGISTER8(name, address) \ + static inline void w5x00_write ## name(w5x00_socket_t _s, \ + uint8_t _data) { \ + w5x00_writeSn(_s, address, _data); \ + } \ + static inline uint8_t w5x00_read ## name(w5x00_socket_t _s) { \ + return w5x00_readSn(_s, address); \ + } +#define __SOCKET_REGISTER16(name, address) \ + static inline void w5x00_write ## name(w5x00_socket_t _s, \ + uint16_t _data) { \ + uint8_t buf[2]; \ + buf[0] = _data >> 8; \ + buf[1] = _data & 0xFF; \ + w5x00_writeSn_buf(_s, address, buf, 2); \ + } \ + static inline uint16_t w5x00_read ## name(w5x00_socket_t _s) { \ + uint8_t buf[2]; \ + w5x00_readSn_buf(_s, address, buf, 2); \ + return (buf[0] << 8) | buf[1]; \ + } +#define __SOCKET_REGISTER_N(name, address, size) \ + static inline uint16_t w5x00_write ## name(w5x00_socket_t _s, \ + uint8_t * _buff) { \ + return w5x00_writeSn_buf(_s, address, _buff, size); \ + } \ + static inline uint16_t w5x00_read ## name(w5x00_socket_t _s, \ + uint8_t * _buff) { \ + return w5x00_readSn_buf(_s, address, _buff, size); \ + } __SOCKET_REGISTER8(SnMR, 0x0000) // Mode __SOCKET_REGISTER8(SnCR, 0x0001) // Command diff --git a/driver/public/mikroe/eth_wiz_w5500/inc/w5x00_platform.h b/driver/public/mikroe/eth_wiz_w5500/inc/w5x00_platform.h index 802264c9..899c219a 100644 --- a/driver/public/mikroe/eth_wiz_w5500/inc/w5x00_platform.h +++ b/driver/public/mikroe/eth_wiz_w5500/inc/w5x00_platform.h @@ -41,11 +41,10 @@ #define W5x00_PLATFORM_H_ #include "sl_status.h" -#include "sl_udelay.h" -#include "spidrv.h" #include "sl_sleeptimer.h" #include "mikroe_w5500_config.h" #include "w5x00_common.h" +#include "drv_spi_master.h" #ifdef __cplusplus extern "C" { @@ -71,14 +70,14 @@ extern "C" { ******************************************************************************/ #ifdef W5x00_LOG_ENABLE #define w5x00_log_info(tag, fmt, ...) \ - w5x00_log_printf("[ I: %s ] " fmt, tag, ## __VA_ARGS__) + w5x00_log_printf("[ I: %s ] " fmt, tag, ## __VA_ARGS__) #define w5x00_log_error(tag, fmt, ...) \ - w5x00_log_printf("[ E: %s ] " fmt, tag, ## __VA_ARGS__) -#define w5x00_log_print_ip(ip) \ - w5x00_log_printf("%d.%d.%d.%d", w5x00_ip4_addr_get_byte(ip, 0), \ - w5x00_ip4_addr_get_byte(ip, 1), \ - w5x00_ip4_addr_get_byte(ip, 2), \ - w5x00_ip4_addr_get_byte(ip, 3)) + w5x00_log_printf("[ E: %s ] " fmt, tag, ## __VA_ARGS__) +#define w5x00_log_print_ip(ip) \ + w5x00_log_printf("%d.%d.%d.%d", w5x00_ip4_addr_get_byte(ip, 0), \ + w5x00_ip4_addr_get_byte(ip, 1), \ + w5x00_ip4_addr_get_byte(ip, 2), \ + w5x00_ip4_addr_get_byte(ip, 3)) #else #define w5x00_log_printf(...) #define w5x00_log_info(...) @@ -86,15 +85,6 @@ extern "C" { #define w5x00_log_print_ip(ip) #endif // #ifdef W5x00_LOG_ENABLE -/***************************************************************************//** - * @brief - * Delay microseconds - * @param[in] us - * Microseconds - ******************************************************************************/ -#define w5x00_delay_us(us) \ - sl_udelay_wait(us) - /***************************************************************************//** * @brief * Delay milliseconds @@ -102,7 +92,7 @@ extern "C" { * Milliseconds ******************************************************************************/ #define w5x00_delay_ms(ms) \ - sl_sleeptimer_delay_millisecond(ms) + sl_sleeptimer_delay_millisecond(ms) /***************************************************************************//** * @brief @@ -111,7 +101,7 @@ extern "C" { * Current tick count ******************************************************************************/ #define w5x00_get_tick_count() \ - sl_sleeptimer_get_tick_count() + sl_sleeptimer_get_tick_count() /***************************************************************************//** * @brief @@ -120,7 +110,7 @@ extern "C" { * Current tick count in milliseconds ******************************************************************************/ #define w5x00_get_tick_ms() \ - sl_sleeptimer_tick_to_ms(sl_sleeptimer_get_tick_count()) + sl_sleeptimer_tick_to_ms(sl_sleeptimer_get_tick_count()) /***************************************************************************//** * @brief @@ -151,7 +141,7 @@ long w5x00_random(long howbig); * @brief * Init platform bus ******************************************************************************/ -void w5x00_bus_init(SPIDRV_Handle_t handle); +void w5x00_bus_init(mikroe_spi_handle_t handle); /***************************************************************************//** * @brief @@ -167,16 +157,23 @@ void w5x00_bus_deselect(void); /***************************************************************************//** * @brief - * Read from SPI bus - * @param[out] buf - * Pointer to the read buffer - * @param len + * Write data then Read data from SPI bus + * @param[in] write_data_buffer + * Pointer to the write data buffer + * @param length_write_data + * Number of byte to be write + * @param[out] read_data_buffer + * Pointer to the read data buffer + * @param length_read_data * Number of byte to be read * @return * 0 on success * non-zero on failure ******************************************************************************/ -uint32_t w5x00_bus_read(uint8_t *buf, uint16_t len); +uint32_t w5x00_bus_write_then_read(uint8_t *write_data_buffer, + size_t length_write_data, + uint8_t *read_data_buffer, + size_t length_read_data); /***************************************************************************//** * @brief diff --git a/driver/public/mikroe/eth_wiz_w5500/src/ethernet.c b/driver/public/mikroe/eth_wiz_w5500/src/ethernet.c index 5d566172..e2ba493e 100644 --- a/driver/public/mikroe/eth_wiz_w5500/src/ethernet.c +++ b/driver/public/mikroe/eth_wiz_w5500/src/ethernet.c @@ -128,17 +128,18 @@ sl_status_t w5x00_ethernet_set_dns_server(w5x00_ethernet_t *eth, ******************************************************************************/ enum EthernetLinkStatus w5x00_ethernet_link_status(w5x00_ethernet_t *eth) { + enum EthernetLinkStatus stt = EthernetLinkUnknown; if (eth == NULL) { - return EthernetLinkUnknown; + stt = EthernetLinkUnknown; } switch (w5x00_get_link_status()) { - case UNKNOWN: return EthernetLinkUnknown; - case LINK_ON: return EthernetLinkON; - case LINK_OFF: return EthernetLinkOFF; - default: return EthernetLinkUnknown; + case UNKNOWN: stt = EthernetLinkUnknown; break; + case LINK_ON: stt = EthernetLinkON; break; + case LINK_OFF: stt = EthernetLinkOFF; break; + default: stt = EthernetLinkUnknown; break; } - return EthernetLinkUnknown; + return stt; } /***************************************************************************//** @@ -177,7 +178,6 @@ sl_status_t w5x00_ethernet_maintain(w5x00_ethernet_t *eth) default: // this is actually an error, it will retry though return SL_STATUS_FAIL; - break; } return SL_STATUS_OK; } diff --git a/driver/public/mikroe/eth_wiz_w5500/src/socket.c b/driver/public/mikroe/eth_wiz_w5500/src/socket.c index 7de24f25..5183dd23 100644 --- a/driver/public/mikroe/eth_wiz_w5500/src/socket.c +++ b/driver/public/mikroe/eth_wiz_w5500/src/socket.c @@ -99,7 +99,7 @@ w5x00_socket_t w5x00_socket_init(w5x00_socket_t s, return W5x00_MAX_SOCK_NUM; } // EthernetServer::server_port[s] = 0; - w5x00_delay_us(250); // TODO: is this needed?? + w5x00_delay_ms(1); // TODO: is this needed?? w5x00_writeSnMR(s, protocol); w5x00_writeSnIR(s, 0xFF); if (port > 0) { @@ -140,7 +140,7 @@ w5x00_socket_t w5x00_socket_init_multicast(w5x00_socket_t s, } // w5x00_log_info("W5000socket %d\n", s); - w5x00_delay_us(250); + w5x00_delay_ms(1); w5x00_writeSnMR(s, protocol); w5x00_writeSnIR(s, 0xFF); if (port > 0) { diff --git a/driver/public/mikroe/eth_wiz_w5500/src/w5x00.c b/driver/public/mikroe/eth_wiz_w5500/src/w5x00.c index 0db25ff2..7245ffc5 100644 --- a/driver/public/mikroe/eth_wiz_w5500/src/w5x00.c +++ b/driver/public/mikroe/eth_wiz_w5500/src/w5x00.c @@ -41,7 +41,6 @@ #include #include #include - #include "w5x00.h" #if W5x00_ETHERNET_LARGE_BUFFERS_ENABLE @@ -52,10 +51,12 @@ static const uint16_t SSIZE = 2048; static const uint16_t SMASK = 0x07FF; #endif -#define SBASE(socknum) \ - ((chip) == W5x00_W5100 ? ((socknum) * SSIZE + 0x4000) : ((socknum) * SSIZE + 0x8000)) -#define RBASE(socknum) \ - ((chip) == W5x00_W5100 ? ((socknum) * SSIZE + 0x6000) : ((socknum) * SSIZE + 0xC000)) +#define SBASE(socknum) \ + ((chip) \ + == W5x00_W5100 ? ((socknum) * SSIZE + 0x4000) : ((socknum) * SSIZE + 0x8000)) +#define RBASE(socknum) \ + ((chip) \ + == W5x00_W5100 ? ((socknum) * SSIZE + 0x6000) : ((socknum) * SSIZE + 0xC000)) static bool initialized = false; @@ -159,7 +160,7 @@ static uint8_t w5x00_is_w5500(void) /***************************************************************************//** * W5x00 Init. ******************************************************************************/ -bool w5x00_init(SPIDRV_Handle_t handle) +bool w5x00_init(mikroe_spi_handle_t handle) { uint8_t i; @@ -434,11 +435,11 @@ uint16_t w5x00_read(uint16_t addr, uint8_t *buf, uint16_t len) if (chip == W5x00_W5100) { for (uint16_t i = 0; i < len; i++) { w5x00_bus_select(); - ret += w5x00_bus_writebyte(0x0F); - ret += w5x00_bus_writebyte(addr >> 8); - ret += w5x00_bus_writebyte(addr & 0xFF); + cmd[0] = (0x0F); + cmd[1] = (addr >> 8); + cmd[2] = (addr & 0xFF); + ret += w5x00_bus_write_then_read(cmd, 3, &buf[i], 1); addr++; - ret += w5x00_bus_read(&buf[i], 1); w5x00_bus_deselect(); } } else if (chip == W5x00_W5200) { @@ -447,9 +448,8 @@ uint16_t w5x00_read(uint16_t addr, uint8_t *buf, uint16_t len) cmd[1] = addr & 0xFF; cmd[2] = (len >> 8) & 0x7F; cmd[3] = len & 0xFF; - ret += w5x00_bus_write(cmd, 4); memset(buf, 0, len); - ret += w5x00_bus_read(buf, len); + ret += w5x00_bus_write_then_read(cmd, 4, buf, len); w5x00_bus_deselect(); } else { // chip == W5x00_W5500 w5x00_bus_select(); @@ -491,9 +491,8 @@ uint16_t w5x00_read(uint16_t addr, uint8_t *buf, uint16_t len) cmd[2] = ((addr >> 6) & 0xE0) | 0x18; // 2K buffers #endif } - ret += w5x00_bus_write(cmd, 3); memset(buf, 0, len); - ret += w5x00_bus_read(buf, len); + ret += w5x00_bus_write_then_read(cmd, 3, buf, len); w5x00_bus_deselect(); } if (ret) { diff --git a/driver/public/mikroe/eth_wiz_w5500/src/w5x00_platform.c b/driver/public/mikroe/eth_wiz_w5500/src/w5x00_platform.c index 83df45b6..10035fdd 100644 --- a/driver/public/mikroe/eth_wiz_w5500/src/w5x00_platform.c +++ b/driver/public/mikroe/eth_wiz_w5500/src/w5x00_platform.c @@ -38,34 +38,51 @@ ******************************************************************************/ #include #include - #include "w5x00_platform.h" +#include "drv_digital_out.h" + +typedef struct { + spi_master_t spi; + digital_out_t rst_pin; + digital_out_t cs_pin; +} w5x00_handle_t; -static SPIDRV_Handle_t spi_handle = NULL; +static w5x00_handle_t w5x00; /***************************************************************************//** * Reset Chip. ******************************************************************************/ void w5x00_reset(void) { - GPIO_PinOutClear(W5500_RESET_PORT, W5500_RESET_PIN); + digital_out_low(&w5x00.rst_pin); w5x00_delay_ms(100); - GPIO_PinOutSet(W5500_RESET_PORT, W5500_RESET_PIN); + digital_out_high(&w5x00.rst_pin); } /***************************************************************************//** * Initialize Bus IO. ******************************************************************************/ -void w5x00_bus_init(SPIDRV_Handle_t handle) +void w5x00_bus_init(mikroe_spi_handle_t handle) { - spi_handle = handle; - GPIO_PinModeSet(W5500_RESET_PORT, - W5500_RESET_PIN, - gpioModePushPull, - 0); - GPIO_PinModeSet((GPIO_Port_TypeDef)spi_handle->portCs, - spi_handle->pinCs, - gpioModePushPull, 1); + w5x00.spi.handle = handle; + + spi_master_config_t spi_cfg; + spi_master_configure_default(&spi_cfg); + +#if (MIKROE_W5500_SPI_UC == 1) + spi_cfg.speed = MIKROE_W5500_SPI_BITRATE; +#endif + + spi_master_open(&w5x00.spi, &spi_cfg); + + pin_name_t reset = hal_gpio_pin_name(W5500_RESET_PORT, + W5500_RESET_PIN); + digital_out_init(&w5x00.rst_pin, reset); + + pin_name_t cs = hal_gpio_pin_name(MIKROE_W5500_CS_PORT, + MIKROE_W5500_CS_PIN); + digital_out_init(&w5x00.cs_pin, cs); + digital_out_high(&w5x00.cs_pin); } /***************************************************************************//** @@ -73,11 +90,10 @@ void w5x00_bus_init(SPIDRV_Handle_t handle) ******************************************************************************/ void w5x00_bus_select(void) { - if (spi_handle == NULL) { + if (w5x00.spi.handle == NULL) { return; } - GPIO_PinOutClear((GPIO_Port_TypeDef)spi_handle->portCs, - spi_handle->pinCs); + digital_out_low(&w5x00.cs_pin); } /***************************************************************************//** @@ -85,24 +101,32 @@ void w5x00_bus_select(void) ******************************************************************************/ void w5x00_bus_deselect(void) { - if (spi_handle == NULL) { + if (w5x00.spi.handle == NULL) { return; } - GPIO_PinOutSet((GPIO_Port_TypeDef)spi_handle->portCs, - spi_handle->pinCs); + digital_out_high(&w5x00.cs_pin); } /***************************************************************************//** * Read Chip Data From SPI Interface. ******************************************************************************/ -uint32_t w5x00_bus_read(uint8_t *buf, uint16_t len) +uint32_t w5x00_bus_write_then_read(uint8_t *write_data_buffer, + size_t length_write_data, + uint8_t *read_data_buffer, + size_t length_read_data) { - if (spi_handle == NULL) { + if (w5x00.spi.handle == NULL) { return SL_STATUS_NULL_POINTER; } - if (SPIDRV_MReceiveB(spi_handle, buf, len)) { + + if (spi_master_write_then_read(&w5x00.spi, + write_data_buffer, + length_write_data, + read_data_buffer, + length_read_data) != SPI_MASTER_SUCCESS) { return SL_STATUS_TRANSMIT; } + return SL_STATUS_OK; } @@ -111,12 +135,15 @@ uint32_t w5x00_bus_read(uint8_t *buf, uint16_t len) ******************************************************************************/ uint32_t w5x00_bus_write(const uint8_t *buf, uint16_t len) { - if (spi_handle == NULL) { + if (w5x00.spi.handle == NULL) { return SL_STATUS_NULL_POINTER; } - if (SPIDRV_MTransmitB(spi_handle, buf, len)) { + + if (spi_master_write(&w5x00.spi, (uint8_t *)buf, + len) != SPI_MASTER_SUCCESS) { return SL_STATUS_TRANSMIT; } + return SL_STATUS_OK; } diff --git a/driver/public/mikroe/fingerprint2_a172mrq/config/brd2703a/mikroe_a172mrq_config.h b/driver/public/mikroe/fingerprint2_a172mrq/config/brd2703a/mikroe_a172mrq_config.h index 62f9d34d..2ae6ad21 100644 --- a/driver/public/mikroe/fingerprint2_a172mrq/config/brd2703a/mikroe_a172mrq_config.h +++ b/driver/public/mikroe/fingerprint2_a172mrq/config/brd2703a/mikroe_a172mrq_config.h @@ -1,6 +1,46 @@ +/***************************************************************************//** + * @file mikroe_a172mrq_config.h + * @brief SCL A172MRQ Configuration + ******************************************************************************* + * # License + * Copyright 2024 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************* + * + * EVALUATION QUALITY + * This code has been minimally tested to ensure that it builds with the + * specified dependency versions and is suitable as a demonstration for + * evaluation purposes only. + * This code will be maintained at the sole discretion of Silicon Labs. + * + ******************************************************************************/ + #ifndef SCL_A172MRQ_CONFIG_H_ #define SCL_A172MRQ_CONFIG_H_ +#include "em_gpio.h" + #ifdef __cplusplus extern "C" { @@ -44,4 +84,4 @@ extern "C" } #endif -#endif /* SCL_A172MRQ_CONFIG_H_ */ +#endif // SCL_A172MRQ_CONFIG_H_ diff --git a/driver/public/mikroe/fingerprint2_a172mrq/config/brd4108a/mikroe_a172mrq_config.h b/driver/public/mikroe/fingerprint2_a172mrq/config/brd4108a/mikroe_a172mrq_config.h index 9e192f5b..81757b0c 100644 --- a/driver/public/mikroe/fingerprint2_a172mrq/config/brd4108a/mikroe_a172mrq_config.h +++ b/driver/public/mikroe/fingerprint2_a172mrq/config/brd4108a/mikroe_a172mrq_config.h @@ -1,6 +1,46 @@ +/***************************************************************************//** + * @file mikroe_a172mrq_config.h + * @brief SCL A172MRQ Configuration + ******************************************************************************* + * # License + * Copyright 2024 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************* + * + * EVALUATION QUALITY + * This code has been minimally tested to ensure that it builds with the + * specified dependency versions and is suitable as a demonstration for + * evaluation purposes only. + * This code will be maintained at the sole discretion of Silicon Labs. + * + ******************************************************************************/ + #ifndef SCL_A172MRQ_CONFIG_H_ #define SCL_A172MRQ_CONFIG_H_ +#include "em_gpio.h" + #ifdef __cplusplus extern "C" { @@ -44,4 +84,4 @@ extern "C" } #endif -#endif /* SCL_A172MRQ_CONFIG_H_ */ +#endif // SCL_A172MRQ_CONFIG_H_ diff --git a/driver/public/mikroe/fingerprint2_a172mrq/config/brd4314a/mikroe_a172mrq_config.h b/driver/public/mikroe/fingerprint2_a172mrq/config/brd4314a/mikroe_a172mrq_config.h index 9e192f5b..81757b0c 100644 --- a/driver/public/mikroe/fingerprint2_a172mrq/config/brd4314a/mikroe_a172mrq_config.h +++ b/driver/public/mikroe/fingerprint2_a172mrq/config/brd4314a/mikroe_a172mrq_config.h @@ -1,6 +1,46 @@ +/***************************************************************************//** + * @file mikroe_a172mrq_config.h + * @brief SCL A172MRQ Configuration + ******************************************************************************* + * # License + * Copyright 2024 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************* + * + * EVALUATION QUALITY + * This code has been minimally tested to ensure that it builds with the + * specified dependency versions and is suitable as a demonstration for + * evaluation purposes only. + * This code will be maintained at the sole discretion of Silicon Labs. + * + ******************************************************************************/ + #ifndef SCL_A172MRQ_CONFIG_H_ #define SCL_A172MRQ_CONFIG_H_ +#include "em_gpio.h" + #ifdef __cplusplus extern "C" { @@ -44,4 +84,4 @@ extern "C" } #endif -#endif /* SCL_A172MRQ_CONFIG_H_ */ +#endif // SCL_A172MRQ_CONFIG_H_ diff --git a/driver/public/mikroe/fingerprint2_a172mrq/config/brd4338a/mikroe_a172mrq_config.h b/driver/public/mikroe/fingerprint2_a172mrq/config/brd4338a/mikroe_a172mrq_config.h new file mode 100644 index 00000000..4032cc75 --- /dev/null +++ b/driver/public/mikroe/fingerprint2_a172mrq/config/brd4338a/mikroe_a172mrq_config.h @@ -0,0 +1,85 @@ +/***************************************************************************//** + * @file mikroe_a172mrq_config.h + * @brief SCL A172MRQ Configuration + ******************************************************************************* + * # License + * Copyright 2024 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************* + * + * EVALUATION QUALITY + * This code has been minimally tested to ensure that it builds with the + * specified dependency versions and is suitable as a demonstration for + * evaluation purposes only. + * This code will be maintained at the sole discretion of Silicon Labs. + * + ******************************************************************************/ + +#ifndef SCL_A172MRQ_CONFIG_H_ +#define SCL_A172MRQ_CONFIG_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +// <<< sl:start pin_tool >>> + +// A172MRQ_RESET +// $[GPIO_A172MRQ_RESET] +#define A172MRQ_RESET_PORT HP +#define A172MRQ_RESET_PIN 46 +// [GPIO_A172MRQ_RESET]$ + +// A172MRQ_LD1 +// $[GPIO_A172MRQ_LD1] +#define A172MRQ_LD1_PORT HP +#define A172MRQ_LD1_PIN 47 +// [GPIO_A172MRQ_LD1]$ + +// A172MRQ_LD2 +// $[GPIO_A172MRQ_LD2] +#define A172MRQ_LD2_PORT HP +#define A172MRQ_LD2_PIN 48 +// [GPIO_A172MRQ_LD2]$ + +// A172MRQ_GP1 +// $[GPIO_A172MRQ_GP1] +#define A172MRQ_GP1_PORT HP +#define A172MRQ_GP1_PIN 49 +// [GPIO_A172MRQ_GP1]$ + +// A172MRQ_GP2 +// $[GPIO_A172MRQ_GP2] +#define A172MRQ_GP2_PORT HP +#define A172MRQ_GP2_PIN 50 +// [GPIO_A172MRQ_GP2]$ + +// <<< sl:end pin_tool >>> + +#ifdef __cplusplus +} +#endif + +#endif // SCL_A172MRQ_CONFIG_H_ diff --git a/driver/public/mikroe/fingerprint2_a172mrq/config/other/mikroe_a172mrq_config.h b/driver/public/mikroe/fingerprint2_a172mrq/config/other/mikroe_a172mrq_config.h index 97bf4904..be104ef9 100644 --- a/driver/public/mikroe/fingerprint2_a172mrq/config/other/mikroe_a172mrq_config.h +++ b/driver/public/mikroe/fingerprint2_a172mrq/config/other/mikroe_a172mrq_config.h @@ -1,6 +1,48 @@ +/***************************************************************************//** + * @file mikroe_a172mrq_config.h + * @brief SCL A172MRQ Configuration + ******************************************************************************* + * # License + * Copyright 2024 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************* + * + * EVALUATION QUALITY + * This code has been minimally tested to ensure that it builds with the + * specified dependency versions and is suitable as a demonstration for + * evaluation purposes only. + * This code will be maintained at the sole discretion of Silicon Labs. + * + ******************************************************************************/ + #ifndef SCL_A172MRQ_CONFIG_H_ #define SCL_A172MRQ_CONFIG_H_ +#ifndef SLI_SI917 +#include "em_gpio.h" +#endif + #ifdef __cplusplus extern "C" { @@ -11,36 +53,36 @@ extern "C" // A172MRQ_RESET // $[GPIO_A172MRQ_RESET] #warning "RESET pin for A172MRQ is not configured" -// #define A172MRQ_RESET_PORT gpioPortC -// #define A172MRQ_RESET_PIN 6 +// #define A172MRQ_RESET_PORT 0 +// #define A172MRQ_RESET_PIN 0 // [GPIO_A172MRQ_RESET]$ // A172MRQ_LD1 // $[GPIO_A172MRQ_LD1] #warning "LD1 pin for A172MRQ is not configured" -// #define A172MRQ_LD1_PORT gpioPortB +// #define A172MRQ_LD1_PORT 0 // #define A172MRQ_LD1_PIN 0 // [GPIO_A172MRQ_LD1]$ // A172MRQ_LD2 // $[GPIO_A172MRQ_LD2] #warning "LD2 pin for A172MRQ is not configured" -// #define A172MRQ_LD2_PORT gpioPortB -// #define A172MRQ_LD2_PIN 3 +// #define A172MRQ_LD2_PORT 0 +// #define A172MRQ_LD2_PIN 0 // [GPIO_A172MRQ_LD2]$ // A172MRQ_GP1 // $[GPIO_A172MRQ_GP1] #warning "GP1 pin for A172MRQ is not configured" -// #define A172MRQ_GP1_PORT gpioPortC -// #define A172MRQ_GP1_PIN 3 +// #define A172MRQ_GP1_PORT 0 +// #define A172MRQ_GP1_PIN 0 // [GPIO_A172MRQ_GP1]$ // A172MRQ_GP2 // $[GPIO_A172MRQ_GP2] #warning "GP2 pin for A172MRQ is not configured" -// #define A172MRQ_GP2_PORT gpioPortB -// #define A172MRQ_GP2_PIN 4 +// #define A172MRQ_GP2_PORT 0 +// #define A172MRQ_GP2_PIN 0 // [GPIO_A172MRQ_GP2]$ // <<< sl:end pin_tool >>> @@ -49,4 +91,4 @@ extern "C" } #endif -#endif /* SCL_A172MRQ_CONFIG_H_ */ +#endif // SCL_A172MRQ_CONFIG_H_ diff --git a/driver/public/mikroe/fingerprint2_a172mrq/inc/mikroe_a172mrq.h b/driver/public/mikroe/fingerprint2_a172mrq/inc/mikroe_a172mrq.h index 9facfa2f..e3ca058d 100644 --- a/driver/public/mikroe/fingerprint2_a172mrq/inc/mikroe_a172mrq.h +++ b/driver/public/mikroe/fingerprint2_a172mrq/inc/mikroe_a172mrq.h @@ -89,38 +89,40 @@ void mikroe_a172mrq_cfg_setup(void); /** * @brief Initialization function. - * - * @description This function initializes all necessary pins and peripherals - * used for this click. + * @details This function initializes all necessary pins and peripherals + * used for this click. + * @param[in] handle : Click context object. + * @return + * SL_STATUS_OK if there are no errors + * SL_STATUS_INVALID_PARAMETER if spi_instance is null */ -sl_status_t mikroe_a172mrq_init(sl_iostream_uart_t *handle); +sl_status_t mikroe_a172mrq_init(mikroe_uart_handle_t handle); /** * @brief Set uart instance function. - * - * @description This function sets the uart used for this click. + * @details This function sets the uart used for this click. + * @param[in] handle : Click context object. + * @return + * SL_STATUS_OK if there are no errors + * SL_STATUS_INVALID_PARAMETER if spi_instance is null */ -sl_status_t mikroe_a172mrq_set_uart_instance(sl_iostream_uart_t *handle); +sl_status_t mikroe_a172mrq_set_uart_instance(mikroe_uart_handle_t handle); /** * @brief Generic write function. - * + * @details This function write specific number of bytes * @param data_buf Data buffer for sends. * @param len Number of bytes for sends. - * - * @description This function write specific number of bytes */ sl_status_t mikroe_a172mrq_generic_write(char *data_buf, uint16_t len); /** * @brief Generic read function. - * + * @details This function read maximum length of data. * @param data_buf Data buffer for read data. * @param max_len The maximum length of data that can be read. * @param rsp_size Size of data that read. * @returns Status of function. - * - * @description This function read maximum length of data. */ sl_status_t mikroe_a172mrq_generic_read(char *data_buf, uint16_t max_len, @@ -128,71 +130,56 @@ sl_status_t mikroe_a172mrq_generic_read(char *data_buf, /** * @brief Generic function for reading ld1 pin status - * + * @details This function read ld1 pin status. * @returns Pin status. - * - * @description This function read ld1 pin status. */ uint8_t mikroe_a172mrq_get_ld1_status(void); /** * @brief Generic function for reading ld2 pin status - * + * @details This function read ld2 pin status * @returns Pin status - * - * @description This function read ld2 pin status */ uint8_t mikroe_a172mrq_get_ld2_status(void); /** * @brief Generic function for setting rst pin status - * + * @details This function sets rst pin status. * @param status State of the pin - * - * @description This function sets rst pin status. */ void mikroe_a172mrq_set_rst_status(uint8_t status); /** * @brief Generic function for setting gp1 pin status - * + * @details This function sets gp1 pin status. * @param status State of the pin. - * - * @description This function sets gp1 pin status. */ void mikroe_a172mrq_set_gp1_status(uint8_t status); /** * @brief Generic function for setting gp2 pin status - * - * @param status State of the pin - * * @description This function sets gp2 pin status. + * @param status State of the pin */ void mikroe_a172mrq_set_gp2_status(uint8_t status); /** * @brief Function for restarting device - * * @description This function restarts device. */ void mikroe_a172mrq_reset(void); /** * @brief Function for fingerprint registration on index - * - * @param fp_index Fingerprint index - * * @description This function registrates fingerprint on index. + * @param fp_index Fingerprint index */ void mikroe_a172mrq_reg_one_fp(uint8_t fp_index); /** * @brief Function for deleting fingerprint on index - * + * @details This function deletes fingerprint on index * @param fp_index Fingerprint index - * - * @description This function deletes fingerprint on index */ void mikroe_a172mrq_delete_one_fp(uint8_t fp_index); @@ -202,4 +189,4 @@ void mikroe_a172mrq_delete_one_fp(uint8_t fp_index); /** @} (end addtogroup a172mrq) */ -#endif /* MIKROE_FINGERPRINT2_H_ */ +#endif // MIKROE_FINGERPRINT2_H_ diff --git a/driver/public/mikroe/fingerprint2_a172mrq/src/mikroe_a172mrq.c b/driver/public/mikroe/fingerprint2_a172mrq/src/mikroe_a172mrq.c index b69018db..a1056f57 100644 --- a/driver/public/mikroe/fingerprint2_a172mrq/src/mikroe_a172mrq.c +++ b/driver/public/mikroe/fingerprint2_a172mrq/src/mikroe_a172mrq.c @@ -40,24 +40,23 @@ #include "fingerprint2.h" #include "mikroe_a172mrq.h" #include "mikroe_a172mrq_config.h" -#include "third_party_hw_drivers_helpers.h" #include "drv_digital_out.h" #include "drv_digital_in.h" static fingerprint2_t fingerprint2; static fingerprint2_cfg_t fingerprint2_cfg; +static bool initialized = false; void mikroe_a172mrq_cfg_setup(void) { fingerprint2_cfg_setup(&fingerprint2_cfg); } -sl_status_t mikroe_a172mrq_init(sl_iostream_uart_t *handle) +sl_status_t mikroe_a172mrq_init(mikroe_uart_handle_t handle) { if (NULL == handle) { return SL_STATUS_INVALID_PARAMETER; } - THIRD_PARTY_HW_DRV_RETCODE_INIT(); fingerprint2.uart.handle = handle; fingerprint2_cfg_setup(&fingerprint2_cfg); @@ -87,14 +86,20 @@ sl_status_t mikroe_a172mrq_init(sl_iostream_uart_t *handle) A172MRQ_GP2_PIN); #endif - THIRD_PARTY_HW_DRV_RETCODE_TEST(fingerprint2_init(&fingerprint2, - &fingerprint2_cfg)); + if (fingerprint2_init(&fingerprint2, &fingerprint2_cfg) != FINGERPRINT2_OK) { + return SL_STATUS_INITIALIZATION; + } - return THIRD_PARTY_HW_DRV_RETCODE_VALUE; + initialized = true; + return SL_STATUS_OK; } -sl_status_t mikroe_a172mrq_set_uart_instance(sl_iostream_uart_t *handle) +sl_status_t mikroe_a172mrq_set_uart_instance(mikroe_uart_handle_t handle) { + if (!initialized) { + return SL_STATUS_NOT_INITIALIZED; + } + if (NULL == handle) { return SL_STATUS_INVALID_PARAMETER; } diff --git a/driver/public/mikroe/force3_fsr400/config/mikroe_fsr400_config.h b/driver/public/mikroe/force3_fsr400/config/mikroe_fsr400_config.h new file mode 100644 index 00000000..bc798548 --- /dev/null +++ b/driver/public/mikroe/force3_fsr400/config/mikroe_fsr400_config.h @@ -0,0 +1,70 @@ +/***************************************************************************/ /** + * @file mikroe_fsr400_config.h + * @brief Mikroe FSR400 configuration + ******************************************************************************* + * # License + * Copyright 2024 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************* + * + * EVALUATION QUALITY + * This code has been minimally tested to ensure that it builds with the + * specified dependency versions and is suitable as a demonstration for + * evaluation purposes only. + * This code will be maintained at the sole discretion of Silicon Labs. + * + ******************************************************************************/ + +#ifndef MIKROE_FSR400_CONFIG_H +#define MIKROE_FSR400_CONFIG_H + +#ifdef __cplusplus +extern "C" { +#endif + +// <<< Use Configuration Wizard in Context Menu >>> + +// MIKROE I2C FSR400 Configuration + +// +// <<< end of configuration section >>> + +#ifdef __cplusplus +} +#endif +#endif // MIKROE_FSR400_CONFIG_H diff --git a/driver/public/mikroe/force3_fsr400/inc/mikroe_fsr400.h b/driver/public/mikroe/force3_fsr400/inc/mikroe_fsr400.h index 35057615..03df49e4 100644 --- a/driver/public/mikroe/force3_fsr400/inc/mikroe_fsr400.h +++ b/driver/public/mikroe/force3_fsr400/inc/mikroe_fsr400.h @@ -36,11 +36,12 @@ * This code will be maintained at the sole discretion of Silicon Labs. * ******************************************************************************/ -#ifndef MIKROE_FORCE3_FSR400_INC_MIKROE_FORCE3_H_ -#define MIKROE_FORCE3_FSR400_INC_MIKROE_FORCE3_H_ +#ifndef MIKROE_FORCE3_FSR400_H_ +#define MIKROE_FORCE3_FSR400_H_ + #include "sl_status.h" -#include "sl_i2cspm.h" #include "force3.h" +#include "drv_i2c_master.h" #ifdef __cplusplus extern "C" { @@ -60,7 +61,7 @@ extern "C" { * SL_STATUS_INVALID_PARAMETER if i2cspm_instance is null * SL_STATUS_FAIL Initialization failed. ******************************************************************************/ -sl_status_t mikroe_fsr400_init(sl_i2cspm_t *i2cspm_instance); +sl_status_t mikroe_fsr400_init(mikroe_i2c_handle_t i2cspm_instance); /***************************************************************************//** * @brief @@ -73,7 +74,8 @@ sl_status_t mikroe_fsr400_init(sl_i2cspm_t *i2cspm_instance); * SL_STATUS_OK if there are no errors. * SL_STATUS_INVALID_PARAMETER if i2cspm_instance is null. ******************************************************************************/ -sl_status_t mikroe_fsr400_set_i2csmp_instance(sl_i2cspm_t *i2cspm_instance); +sl_status_t mikroe_fsr400_set_i2csmp_instance( + mikroe_i2c_handle_t i2cspm_instance); /***************************************************************************//** * @brief @@ -124,4 +126,4 @@ sl_status_t mikroe_fsr400_get_raw_data (uint16_t *data); } #endif -#endif /* MIKROE_FORCE3_FSR400_INC_MIKROE_FORCE3_H_ */ +#endif // MIKROE_FORCE3_FSR400_H_ diff --git a/driver/public/mikroe/force3_fsr400/src/mikroe_fsr400.c b/driver/public/mikroe/force3_fsr400/src/mikroe_fsr400.c index e53cf982..aaf5873f 100644 --- a/driver/public/mikroe/force3_fsr400/src/mikroe_fsr400.c +++ b/driver/public/mikroe/force3_fsr400/src/mikroe_fsr400.c @@ -37,29 +37,34 @@ * ******************************************************************************/ #include "mikroe_fsr400.h" +#include "mikroe_fsr400_config.h" #include "force3.h" static force3_t force3; static force3_cfg_t force3_cfg; -sl_status_t mikroe_fsr400_init(sl_i2cspm_t *i2cspm_instance) +sl_status_t mikroe_fsr400_init(mikroe_i2c_handle_t i2cspm_instance) { - sl_status_t stt = SL_STATUS_INVALID_PARAMETER; + if (NULL == i2cspm_instance) { + return SL_STATUS_INVALID_PARAMETER; + } - if (NULL != i2cspm_instance) { - force3.i2c.handle = i2cspm_instance; - force3_cfg_setup(&force3_cfg); + force3.i2c.handle = i2cspm_instance; + force3_cfg_setup(&force3_cfg); - if (I2C_MASTER_SUCCESS == force3_init(&force3, &force3_cfg)) { - stt = SL_STATUS_OK; - } else { - stt = SL_STATUS_FAIL; - } +#if (MIKROE_I2C_FSR400_UC == 1) + force3_cfg.i2c_speed = MIKROE_I2C_FSR400_SPEED_MODE; +#endif + + if (FORCE3_OK != force3_init(&force3, &force3_cfg)) { + return SL_STATUS_INITIALIZATION; } - return stt; + + return SL_STATUS_OK; } -sl_status_t mikroe_fsr400_set_i2csmp_instance(sl_i2cspm_t *i2cspm_instance) +sl_status_t mikroe_fsr400_set_i2csmp_instance( + mikroe_i2c_handle_t i2cspm_instance) { sl_status_t stt = SL_STATUS_INVALID_PARAMETER; diff --git a/driver/public/mikroe/gps_lea6s/config/brd2703a/mikroe_gps_lea6s_config.h b/driver/public/mikroe/gps_lea6s/config/brd2703a/mikroe_gps_lea6s_config.h index 9721f04b..b226c81c 100644 --- a/driver/public/mikroe/gps_lea6s/config/brd2703a/mikroe_gps_lea6s_config.h +++ b/driver/public/mikroe/gps_lea6s/config/brd2703a/mikroe_gps_lea6s_config.h @@ -39,10 +39,11 @@ #ifndef MIKROE_GPS_LEA6S_CONFIG_H_ #define MIKROE_GPS_LEA6S_CONFIG_H_ +#include "em_gpio.h" + #ifdef __cplusplus extern "C" { #endif -#include "em_gpio.h" // <<< sl:start pin_tool >>> @@ -64,4 +65,4 @@ extern "C" { } #endif -#endif /* MIKROE_GPS_LEA6S_CONFIG_H_ */ +#endif // MIKROE_GPS_LEA6S_CONFIG_H_ diff --git a/driver/public/mikroe/gps_lea6s/config/brd4108a/mikroe_gps_lea6s_config.h b/driver/public/mikroe/gps_lea6s/config/brd4108a/mikroe_gps_lea6s_config.h index 6b4867d8..641bb8e6 100644 --- a/driver/public/mikroe/gps_lea6s/config/brd4108a/mikroe_gps_lea6s_config.h +++ b/driver/public/mikroe/gps_lea6s/config/brd4108a/mikroe_gps_lea6s_config.h @@ -39,10 +39,11 @@ #ifndef MIKROE_GPS_LEA6S_CONFIG_H_ #define MIKROE_GPS_LEA6S_CONFIG_H_ +#include "em_gpio.h" + #ifdef __cplusplus extern "C" { #endif -#include "em_gpio.h" // <<< sl:start pin_tool >>> @@ -64,4 +65,4 @@ extern "C" { } #endif -#endif /* MIKROE_GPS_LEA6S_CONFIG_H_ */ +#endif // MIKROE_GPS_LEA6S_CONFIG_H_ diff --git a/driver/public/mikroe/gps_lea6s/config/brd4314a/mikroe_gps_lea6s_config.h b/driver/public/mikroe/gps_lea6s/config/brd4314a/mikroe_gps_lea6s_config.h index 6b4867d8..641bb8e6 100644 --- a/driver/public/mikroe/gps_lea6s/config/brd4314a/mikroe_gps_lea6s_config.h +++ b/driver/public/mikroe/gps_lea6s/config/brd4314a/mikroe_gps_lea6s_config.h @@ -39,10 +39,11 @@ #ifndef MIKROE_GPS_LEA6S_CONFIG_H_ #define MIKROE_GPS_LEA6S_CONFIG_H_ +#include "em_gpio.h" + #ifdef __cplusplus extern "C" { #endif -#include "em_gpio.h" // <<< sl:start pin_tool >>> @@ -64,4 +65,4 @@ extern "C" { } #endif -#endif /* MIKROE_GPS_LEA6S_CONFIG_H_ */ +#endif // MIKROE_GPS_LEA6S_CONFIG_H_ diff --git a/driver/public/mikroe/gps_lea6s/config/brd4338a/mikroe_gps_lea6s_config.h b/driver/public/mikroe/gps_lea6s/config/brd4338a/mikroe_gps_lea6s_config.h new file mode 100644 index 00000000..7927f457 --- /dev/null +++ b/driver/public/mikroe/gps_lea6s/config/brd4338a/mikroe_gps_lea6s_config.h @@ -0,0 +1,66 @@ +/***************************************************************************//** + * @file mikroe_gps_lea6s_config.h + * @brief mikroe_gps_lea6s_config.h + * @version 1.0.0 + ******************************************************************************* + * # License + * Copyright 2022 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided \'as-is\', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************* + * + * EVALUATION QUALITY + * This code has been minimally tested to ensure that it builds with the + * specified dependency versions and is suitable as a demonstration for + * evaluation purposes only. + * This code will be maintained at the sole discretion of Silicon Labs. + * + ******************************************************************************/ +#ifndef MIKROE_GPS_LEA6S_CONFIG_H_ +#define MIKROE_GPS_LEA6S_CONFIG_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +// <<< sl:start pin_tool >>> + +//MIKROE I2C FSR400 UC Configuration +// Enable: Peripheral configuration is taken straight from the configuration set in the universal configuration (UC). +// Disable: If the application demands it to be modified during runtime, use the default API to modify the peripheral configuration. +// Default: 0 +#define MIKROE_I2C_FSR400_UC 0 + +// +//Speed mode +// <0=> Standard mode (100kbit/s) +// <1=> Fast mode (400kbit/s) +// <2=> Fast mode plus (1Mbit/s) +// Default: 0 +#define MIKROE_I2C_FSR400_SPEED_MODE 0 + +// MIKROE_LEAS6_RESET +// $[GPIO_MIKROE_LEAS6_RESET] +#define MIKROE_LEAS6_RESET_PORT HP +#define MIKROE_LEAS6_RESET_PIN 46 +// [GPIO_MIKROE_LEAS6_RESET]$ + +// MIKROE_LEAS6_TIMEPULSE +// $[GPIO_MIKROE_LEAS6_TIMEPULSE] +#define MIKROE_LEAS6_TIMEPULSE_PORT HP +#define MIKROE_LEAS6_TIMEPULSE_PIN 47 +// [GPIO_MIKROE_LEAS6_TIMEPULSE]$ + +// <<< sl:end pin_tool >>> + +#ifdef __cplusplus +} +#endif + +#endif // MIKROE_GPS_LEA6S_CONFIG_H_ diff --git a/driver/public/mikroe/gps_lea6s/config/other/mikroe_gps_lea6s_config.h b/driver/public/mikroe/gps_lea6s/config/other/mikroe_gps_lea6s_config.h index 7ba60ed3..20aed50f 100644 --- a/driver/public/mikroe/gps_lea6s/config/other/mikroe_gps_lea6s_config.h +++ b/driver/public/mikroe/gps_lea6s/config/other/mikroe_gps_lea6s_config.h @@ -39,10 +39,13 @@ #ifndef MIKROE_GPS_LEA6S_CONFIG_H_ #define MIKROE_GPS_LEA6S_CONFIG_H_ +#ifndef SLI_SI917 +#include "em_gpio.h" +#endif + #ifdef __cplusplus extern "C" { #endif -#include "em_gpio.h" // <<< sl:start pin_tool >>> @@ -66,4 +69,4 @@ extern "C" { } #endif -#endif /* MIKROE_GPS_LEA6S_CONFIG_H_ */ +#endif // MIKROE_GPS_LEA6S_CONFIG_H_ diff --git a/driver/public/mikroe/gps_lea6s/inc/mikroe_lea6s.h b/driver/public/mikroe/gps_lea6s/inc/mikroe_lea6s.h index f24982aa..f90a798e 100644 --- a/driver/public/mikroe/gps_lea6s/inc/mikroe_lea6s.h +++ b/driver/public/mikroe/gps_lea6s/inc/mikroe_lea6s.h @@ -262,7 +262,7 @@ typedef enum { gpgga_element_time_since_last_dgps_e = GPS_GPGGA_TIME_SINCE_LAST_DGPS, gpgga_element_dgps_reference_station_id_e = GPS_GPGGA_DGPS_REFERENCE_STATION_ID, -}mikroe_leas6_gpgga_command_elements_t; +} mikroe_leas6_gpgga_command_elements_t; /***************************************************************************//** * @brief @@ -271,7 +271,7 @@ typedef enum { typedef enum { gps_command_nema_gpgga_e = GPS_NEMA_GPGGA, gps_command_nema_gpgll_e = GPS_NEMA_GPGLL, -}mikroe_leas6_gps_command_t; +} mikroe_leas6_gps_command_t; /***************************************************************************//** * @brief @@ -284,7 +284,7 @@ typedef enum { gps_parser_error_next_element_e = GPS_ERROR_NEXT_ELEMENT, gps_parser_error_current_element_e = GPS_ERROR_CURRENT_ELEMENT, gps_parser_invalid_input_parameter_e = 0x01, -}mikroe_leas6_parser_result_t; +} mikroe_leas6_parser_result_t; /***************************************************************************//** * @brief @@ -293,11 +293,14 @@ typedef enum { * @param[in] uart_handle * IO Stream UART Instance * + * @param[in] blocking + * Uart functioning mode + * * @return * SL_STATUS_OK: Successful initialization. * SL_STATUS_INVALID_PARAMETER: if (uart_handle == NULL) ******************************************************************************/ -sl_status_t mikroe_lea6s_init(sl_iostream_uart_t *uart_handle); +sl_status_t mikroe_lea6s_init(mikroe_uart_handle_t uart_handle, bool blocking); /***************************************************************************//** * @brief @@ -403,4 +406,4 @@ mikroe_lea6s_generic_parser(uint8_t *raw_data_buffer, } #endif -#endif /* MIKROE_LEA6S_H_ */ +#endif // MIKROE_LEA6S_H_ diff --git a/driver/public/mikroe/gps_lea6s/src/mikroe_lea6s.c b/driver/public/mikroe/gps_lea6s/src/mikroe_lea6s.c index 3b817de7..0912b7ae 100644 --- a/driver/public/mikroe/gps_lea6s/src/mikroe_lea6s.c +++ b/driver/public/mikroe/gps_lea6s/src/mikroe_lea6s.c @@ -42,26 +42,27 @@ static gps_t mikroe_lea6s; static gps_cfg_t mikroe_lea6s_cfg; -sl_status_t mikroe_lea6s_init(sl_iostream_uart_t *uart_handle) +sl_status_t mikroe_lea6s_init(mikroe_uart_handle_t uart_handle, bool blocking) { - sl_status_t stt = SL_STATUS_INVALID_PARAMETER; - - if (NULL != uart_handle) { - gps_cfg_setup(&mikroe_lea6s_cfg); + if (NULL == uart_handle) { + return SL_STATUS_INVALID_PARAMETER; + } - mikroe_lea6s_cfg.reset = hal_gpio_pin_name(MIKROE_LEAS6_RESET_PORT, - MIKROE_LEAS6_RESET_PIN); + gps_cfg_setup(&mikroe_lea6s_cfg); - mikroe_lea6s_cfg.tmpls = hal_gpio_pin_name(MIKROE_LEAS6_TIMEPULSE_PORT, - MIKROE_LEAS6_TIMEPULSE_PIN); + mikroe_lea6s_cfg.reset = hal_gpio_pin_name(MIKROE_LEAS6_RESET_PORT, + MIKROE_LEAS6_RESET_PIN); - mikroe_lea6s.uart.handle = uart_handle; - gps_init(&mikroe_lea6s, &mikroe_lea6s_cfg); + mikroe_lea6s_cfg.tmpls = hal_gpio_pin_name(MIKROE_LEAS6_TIMEPULSE_PORT, + MIKROE_LEAS6_TIMEPULSE_PIN); - stt = SL_STATUS_OK; + mikroe_lea6s_cfg.uart_blocking = blocking; + mikroe_lea6s.uart.handle = uart_handle; + if (gps_init(&mikroe_lea6s, &mikroe_lea6s_cfg) != GPS_OK) { + return SL_STATUS_INITIALIZATION; } - return stt; + return SL_STATUS_OK; } void mikroe_lea6s_wakeup(void) diff --git a/driver/public/mikroe/heartrate2_maxm86161/config/brd2703a/mikroe_maxm86161_config.h b/driver/public/mikroe/heartrate2_maxm86161/config/brd2703a/mikroe_maxm86161_config.h index 5f663c71..702bd0fe 100644 --- a/driver/public/mikroe/heartrate2_maxm86161/config/brd2703a/mikroe_maxm86161_config.h +++ b/driver/public/mikroe/heartrate2_maxm86161/config/brd2703a/mikroe_maxm86161_config.h @@ -40,6 +40,8 @@ #ifndef SCL_MAXM86161_CONFIG_H_ #define SCL_MAXM86161_CONFIG_H_ +#include "em_gpio.h" + #ifdef __cplusplus extern "C" { #endif @@ -70,4 +72,4 @@ extern "C" { } #endif -#endif /* SCL_MAXM86161_CONFIG_H_ */ +#endif // SCL_MAXM86161_CONFIG_H_ diff --git a/driver/public/mikroe/heartrate2_maxm86161/config/brd4108a/mikroe_maxm86161_config.h b/driver/public/mikroe/heartrate2_maxm86161/config/brd4108a/mikroe_maxm86161_config.h index ea697be2..7675095e 100644 --- a/driver/public/mikroe/heartrate2_maxm86161/config/brd4108a/mikroe_maxm86161_config.h +++ b/driver/public/mikroe/heartrate2_maxm86161/config/brd4108a/mikroe_maxm86161_config.h @@ -40,6 +40,8 @@ #ifndef SCL_MAXM86161_CONFIG_H_ #define SCL_MAXM86161_CONFIG_H_ +#include "em_gpio.h" + #ifdef __cplusplus extern "C" { #endif @@ -70,4 +72,4 @@ extern "C" { } #endif -#endif /* SCL_MAXM86161_CONFIG_H_ */ +#endif // SCL_MAXM86161_CONFIG_H_ diff --git a/driver/public/mikroe/heartrate2_maxm86161/config/brd4314a/mikroe_maxm86161_config.h b/driver/public/mikroe/heartrate2_maxm86161/config/brd4314a/mikroe_maxm86161_config.h index ea697be2..7675095e 100644 --- a/driver/public/mikroe/heartrate2_maxm86161/config/brd4314a/mikroe_maxm86161_config.h +++ b/driver/public/mikroe/heartrate2_maxm86161/config/brd4314a/mikroe_maxm86161_config.h @@ -40,6 +40,8 @@ #ifndef SCL_MAXM86161_CONFIG_H_ #define SCL_MAXM86161_CONFIG_H_ +#include "em_gpio.h" + #ifdef __cplusplus extern "C" { #endif @@ -70,4 +72,4 @@ extern "C" { } #endif -#endif /* SCL_MAXM86161_CONFIG_H_ */ +#endif // SCL_MAXM86161_CONFIG_H_ diff --git a/driver/public/mikroe/heartrate2_maxm86161/config/brd4338a/mikroe_maxm86161_config.h b/driver/public/mikroe/heartrate2_maxm86161/config/brd4338a/mikroe_maxm86161_config.h new file mode 100644 index 00000000..2bdcf59a --- /dev/null +++ b/driver/public/mikroe/heartrate2_maxm86161/config/brd4338a/mikroe_maxm86161_config.h @@ -0,0 +1,73 @@ +/***************************************************************************//** + * @file mikroe_maxm86161_config.h + * @brief SCL MAXM86161 Configuration + * @version 1.0.0 + ******************************************************************************* + * # License + * Copyright 2022 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided \'as-is\', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************* + * + * EVALUATION QUALITY + * This code has been minimally tested to ensure that it builds with the + * specified dependency versions and is suitable as a demonstration for + * evaluation purposes only. + * This code will be maintained at the sole discretion of Silicon Labs. + * + ******************************************************************************/ + +#ifndef SCL_MAXM86161_CONFIG_H_ +#define SCL_MAXM86161_CONFIG_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +// <<< sl:start pin_tool >>> + +// MAXM86161_GP +// $[GPIO_MAXM86161_GP] +#define MAXM86161_GP_PORT HP +#define MAXM86161_GP_PIN 46 +// [GPIO_MAXM86161_GP]$ + +// MAXM86161_EN +// $[GPIO_MAXM86161_EN] +#define MAXM86161_EN_PORT HP +#define MAXM86161_EN_PIN 47 +// [GPIO_MAXM86161_EN]$ + +// MAXM86161_INT +// $[GPIO_MAXM86161_INT] +#define MAXM86161_INT_PORT HP +#define MAXM86161_INT_PIN 48 +// [GPIO_MAXM86161_INT]$ + +// <<< sl:end pin_tool >>> + +#ifdef __cplusplus +} +#endif + +#endif // SCL_MAXM86161_CONFIG_H_ diff --git a/driver/public/mikroe/heartrate2_maxm86161/config/other/mikroe_maxm86161_config.h b/driver/public/mikroe/heartrate2_maxm86161/config/other/mikroe_maxm86161_config.h index 47d72d41..8fa0237c 100644 --- a/driver/public/mikroe/heartrate2_maxm86161/config/other/mikroe_maxm86161_config.h +++ b/driver/public/mikroe/heartrate2_maxm86161/config/other/mikroe_maxm86161_config.h @@ -73,4 +73,4 @@ extern "C" { } #endif -#endif /* SCL_MAXM86161_CONFIG_H_ */ +#endif // SCL_MAXM86161_CONFIG_H_ diff --git a/driver/public/mikroe/heartrate2_maxm86161/inc/mikroe_maxm86161.h b/driver/public/mikroe/heartrate2_maxm86161/inc/mikroe_maxm86161.h index 04985bf8..6f3664ec 100644 --- a/driver/public/mikroe/heartrate2_maxm86161/inc/mikroe_maxm86161.h +++ b/driver/public/mikroe/heartrate2_maxm86161/inc/mikroe_maxm86161.h @@ -41,7 +41,7 @@ #define MIKROE_MAXM86161_H_ #include "sl_status.h" -#include "sl_i2cspm.h" +#include "drv_i2c_master.h" #ifdef __cplusplus extern "C" { @@ -550,7 +550,7 @@ typedef struct * SL_STATUS_OK Successful initialization. * SL_STATUS_FAIL Initialization failed. ******************************************************************************/ -sl_status_t mikroe_maxm86161_init(sl_i2cspm_t *i2cspm_instance); +sl_status_t mikroe_maxm86161_init(mikroe_i2c_handle_t i2cspm_instance); /***************************************************************************//** * @brief @@ -563,7 +563,8 @@ sl_status_t mikroe_maxm86161_init(sl_i2cspm_t *i2cspm_instance); * SL_STATUS_OK if there are no errors. * SL_STATUS_INVALID_PARAMETER if i2cspm_instance is null. ******************************************************************************/ -sl_status_t mikroe_maxm86161_set_i2csmp_instance(sl_i2cspm_t *i2cspm_instance); +sl_status_t mikroe_maxm86161_set_i2csmp_instance( + mikroe_i2c_handle_t i2cspm_instance); /***************************************************************************//** * @brief @@ -591,7 +592,7 @@ sl_status_t mikroe_maxm86161_default_cfg(mikroe_maxm86161_config_led_t cfg_led); * @return * None ******************************************************************************/ -void mikroe_maxm86161_generic_write ( +void mikroe_maxm86161_generic_write( uint8_t register_address, uint8_t write_data); @@ -605,7 +606,7 @@ void mikroe_maxm86161_generic_write ( * @return * Data is read from register ******************************************************************************/ -uint8_t mikroe_maxm86161_generic_read (uint8_t register_address); +uint8_t mikroe_maxm86161_generic_read(uint8_t register_address); /***************************************************************************//** * @brief @@ -624,7 +625,7 @@ uint8_t mikroe_maxm86161_generic_read (uint8_t register_address); * SL_STATUS_OK if there are no errors. * SL_STATUS_INVALID_PARAMETER if data_buf is NULL ******************************************************************************/ -sl_status_t mikroe_maxm86161_read_buf ( +sl_status_t mikroe_maxm86161_read_buf( uint8_t reg, uint8_t *data_buf, uint8_t len); @@ -640,7 +641,7 @@ sl_status_t mikroe_maxm86161_read_buf ( * SL_STATUS_OK if there are no errors. * SL_STATUS_INVALID_PARAMETER if mikroe_fifo is NULL ******************************************************************************/ -sl_status_t mikroe_maxm86161_read_fifo ( +sl_status_t mikroe_maxm86161_read_fifo( mikroe_maxm86161_fifo_data_t *mikroe_fifo); /***************************************************************************//** @@ -654,7 +655,7 @@ sl_status_t mikroe_maxm86161_read_fifo ( * You should enable die temperature interrupt status, * and you should turn off leds to get right temperature. ******************************************************************************/ -float mikroe_maxm86161_read_temp (void); +float mikroe_maxm86161_read_temp(void); /***************************************************************************//** * @brief @@ -663,7 +664,7 @@ float mikroe_maxm86161_read_temp (void); * @return * None ******************************************************************************/ -void mikroe_maxm86161_soft_reset (void); +void mikroe_maxm86161_soft_reset(void); /***************************************************************************//** * @brief @@ -676,7 +677,7 @@ void mikroe_maxm86161_soft_reset (void); * SL_STATUS_OK if there are no errors. * SL_STATUS_INVALID_PARAMETER if mikroe_ppg_cfg is NULL ******************************************************************************/ -sl_status_t mikroe_maxm86161_ppg_config ( +sl_status_t mikroe_maxm86161_ppg_config( mikroe_maxm86161_ppg_cfg_t *mikroe_ppg_cfg); /***************************************************************************//** @@ -690,7 +691,7 @@ sl_status_t mikroe_maxm86161_ppg_config ( * SL_STATUS_OK if there are no errors. * SL_STATUS_INVALID_PARAMETER if mikroe_ledpa is NULL ******************************************************************************/ -sl_status_t mikroe_maxm86161_ledpa_config ( +sl_status_t mikroe_maxm86161_ledpa_config( mikroe_maxm86161_ledpa_t *mikroe_ledpa); /***************************************************************************//** @@ -704,7 +705,7 @@ sl_status_t mikroe_maxm86161_ledpa_config ( * SL_STATUS_OK if there are no errors. * SL_STATUS_INVALID_PARAMETER if mikroe_led_range is NULL ******************************************************************************/ -sl_status_t mikroe_maxm86161_led_range_curr_config ( +sl_status_t mikroe_maxm86161_led_range_curr_config( mikroe_maxm86161_led_range_curr_t *mikroe_led_range); /***************************************************************************//** @@ -718,7 +719,7 @@ sl_status_t mikroe_maxm86161_led_range_curr_config ( * SL_STATUS_OK if there are no errors. * SL_STATUS_INVALID_PARAMETER if mikroe_ledsq is NULL ******************************************************************************/ -sl_status_t mikroe_maxm86161_led_sequence_config ( +sl_status_t mikroe_maxm86161_led_sequence_config( mikroe_maxm86161_ledsq_cfg_t *mikroe_ledsq); /***************************************************************************//** @@ -732,7 +733,7 @@ sl_status_t mikroe_maxm86161_led_sequence_config ( * SL_STATUS_OK if there are no errors. * SL_STATUS_INVALID_PARAMETER if mikroe_int_ctrl is NULL ******************************************************************************/ -sl_status_t mikroe_maxm86161_int_control ( +sl_status_t mikroe_maxm86161_int_control( mikroe_maxm86161_int_t *mikroe_int_ctrl); /***************************************************************************//** @@ -746,7 +747,7 @@ sl_status_t mikroe_maxm86161_int_control ( * SL_STATUS_OK if there are no errors. * SL_STATUS_INVALID_PARAMETER if mikroe_int_status is NULL ******************************************************************************/ -sl_status_t mikroe_maxm86161_int_status ( +sl_status_t mikroe_maxm86161_int_status( mikroe_maxm86161_int_t *mikroe_int_status); /***************************************************************************//** @@ -756,7 +757,7 @@ sl_status_t mikroe_maxm86161_int_status ( * @return * uint8_t int pin status. ******************************************************************************/ -uint8_t mikroe_maxm86161_get_int (void); +uint8_t mikroe_maxm86161_get_int(void); /***************************************************************************//** * @brief @@ -765,7 +766,7 @@ uint8_t mikroe_maxm86161_get_int (void); * @return * gp pin status. ******************************************************************************/ -uint8_t mikroe_maxm86161_get_gp (void); +uint8_t mikroe_maxm86161_get_gp(void); /***************************************************************************//** * @brief @@ -778,11 +779,11 @@ uint8_t mikroe_maxm86161_get_gp (void); * SL_STATUS_OK if there are no errors. * SL_STATUS_INVALID_PARAMETER ******************************************************************************/ -sl_status_t mikroe_maxm86161_set_en (mikroe_state_pin_t state); +sl_status_t mikroe_maxm86161_set_en(mikroe_state_pin_t state); #ifdef __cplusplus } #endif /** @} */ -#endif /* MIKROE_MAXM86161_H_ */ +#endif // MIKROE_MAXM86161_H_ diff --git a/driver/public/mikroe/heartrate2_maxm86161/src/mikroe_maxm86161.c b/driver/public/mikroe/heartrate2_maxm86161/src/mikroe_maxm86161.c index 28907e7a..d064f939 100644 --- a/driver/public/mikroe/heartrate2_maxm86161/src/mikroe_maxm86161.c +++ b/driver/public/mikroe/heartrate2_maxm86161/src/mikroe_maxm86161.c @@ -40,23 +40,22 @@ #include "heartrate2.h" #include "mikroe_maxm86161.h" #include "mikroe_maxm86161_config.h" -#include "third_party_hw_drivers_helpers.h" static heartrate2_t heartrate2; static heartrate2_cfg_t heartrate2_cfg; -sl_status_t mikroe_maxm86161_init(sl_i2cspm_t *i2cspm_instance) +sl_status_t mikroe_maxm86161_init(mikroe_i2c_handle_t i2cspm_instance) { if (i2cspm_instance == NULL) { return SL_STATUS_INVALID_PARAMETER; } - THIRD_PARTY_HW_DRV_RETCODE_INIT(); // Configure default i2csmp instance heartrate2.i2c.handle = i2cspm_instance; // Call basic setup functions heartrate2_cfg_setup(&heartrate2_cfg); + #if defined(MAXM86161_EN_PORT) && defined(MAXM86161_EN_PIN) heartrate2_cfg.cs = hal_gpio_pin_name(MAXM86161_EN_PORT, MAXM86161_EN_PIN); #endif @@ -70,13 +69,15 @@ sl_status_t mikroe_maxm86161_init(sl_i2cspm_t *i2cspm_instance) MAXM86161_INT_PIN); #endif - THIRD_PARTY_HW_DRV_RETCODE_TEST(heartrate2_init(&heartrate2, - &heartrate2_cfg)); + if (heartrate2_init(&heartrate2, &heartrate2_cfg) != HEARTRATE2_OK_OK) { + return SL_STATUS_INITIALIZATION; + } - return THIRD_PARTY_HW_DRV_RETCODE_VALUE; + return SL_STATUS_OK; } -sl_status_t mikroe_maxm86161_set_i2csmp_instance(sl_i2cspm_t *i2cspm_instance) +sl_status_t mikroe_maxm86161_set_i2csmp_instance( + mikroe_i2c_handle_t i2cspm_instance) { if (NULL == i2cspm_instance) { return SL_STATUS_INVALID_PARAMETER; @@ -146,7 +147,7 @@ sl_status_t mikroe_maxm86161_read_fifo( return SL_STATUS_INVALID_PARAMETER; } - heartrate2_read_fifo(&heartrate2, mikroe_fifo); + heartrate2_read_fifo(&heartrate2, (heartrate2_fifo_data_t *)mikroe_fifo); return SL_STATUS_OK; } @@ -167,7 +168,9 @@ sl_status_t mikroe_maxm86161_ppg_config( return SL_STATUS_INVALID_PARAMETER; } - if (HEARTRATE2_ERROR == heartrate2_ppg_config(&heartrate2, mikroe_ppg_cfg)) { + if (HEARTRATE2_ERROR + == heartrate2_ppg_config(&heartrate2, + (heartrate2_ppg_cfg_t *)mikroe_ppg_cfg)) { return SL_STATUS_FAIL; } @@ -181,7 +184,7 @@ sl_status_t mikroe_maxm86161_ledpa_config( return SL_STATUS_INVALID_PARAMETER; } - heartrate2_ledpa_config(&heartrate2, mikroe_ledpa); + heartrate2_ledpa_config(&heartrate2, (heartrate2_ledpa_t *)mikroe_ledpa); return SL_STATUS_OK; } @@ -192,8 +195,9 @@ sl_status_t mikroe_maxm86161_led_range_curr_config( return SL_STATUS_INVALID_PARAMETER; } - if (HEARTRATE2_ERROR == heartrate2_led_range_curr_config(&heartrate2, - mikroe_led_range)) { + if (HEARTRATE2_ERROR == heartrate2_led_range_curr_config( + &heartrate2, + (heartrate2_led_range_curr_t *)mikroe_led_range)) { return SL_STATUS_FAIL; } @@ -208,7 +212,8 @@ sl_status_t mikroe_maxm86161_led_sequence_config( } if (HEARTRATE2_ERROR == heartrate2_led_sequence_config(&heartrate2, - mikroe_ledsq)) { + (heartrate2_ledsq_cfg_t + *)mikroe_ledsq)) { return SL_STATUS_FAIL; } @@ -223,6 +228,7 @@ sl_status_t mikroe_maxm86161_int_control( } if (HEARTRATE2_ERROR == heartrate2_int_control(&heartrate2, + (heartrate2_int_t *) mikroe_int_ctrl)) { return SL_STATUS_FAIL; } @@ -236,7 +242,7 @@ sl_status_t mikroe_maxm86161_int_status( return SL_STATUS_INVALID_PARAMETER; } - heartrate2_int_status(&heartrate2, mikroe_int_status); + heartrate2_int_status(&heartrate2, (heartrate2_int_t *)mikroe_int_status); return SL_STATUS_OK; } diff --git a/driver/public/mikroe/heartrate4_max30101/config/brd2703a/mikroe_max30101_config.h b/driver/public/mikroe/heartrate4_max30101/config/brd2703a/mikroe_max30101_config.h index b0164141..2abc8963 100644 --- a/driver/public/mikroe/heartrate4_max30101/config/brd2703a/mikroe_max30101_config.h +++ b/driver/public/mikroe/heartrate4_max30101/config/brd2703a/mikroe_max30101_config.h @@ -40,6 +40,8 @@ #ifndef MIKROE_MAX30101_CONFIG_H_ #define MIKROE_MAX30101_CONFIG_H_ +#include "em_gpio.h" + #ifdef __cplusplus extern "C" { #endif diff --git a/driver/public/mikroe/heartrate4_max30101/config/brd4108a/mikroe_max30101_config.h b/driver/public/mikroe/heartrate4_max30101/config/brd4108a/mikroe_max30101_config.h index 965accbf..1a1d7a22 100644 --- a/driver/public/mikroe/heartrate4_max30101/config/brd4108a/mikroe_max30101_config.h +++ b/driver/public/mikroe/heartrate4_max30101/config/brd4108a/mikroe_max30101_config.h @@ -40,6 +40,8 @@ #ifndef MIKROE_MAX30101_CONFIG_H_ #define MIKROE_MAX30101_CONFIG_H_ +#include "em_gpio.h" + #ifdef __cplusplus extern "C" { #endif diff --git a/driver/public/mikroe/heartrate4_max30101/config/brd4314a/mikroe_max30101_config.h b/driver/public/mikroe/heartrate4_max30101/config/brd4314a/mikroe_max30101_config.h index 965accbf..1a1d7a22 100644 --- a/driver/public/mikroe/heartrate4_max30101/config/brd4314a/mikroe_max30101_config.h +++ b/driver/public/mikroe/heartrate4_max30101/config/brd4314a/mikroe_max30101_config.h @@ -40,6 +40,8 @@ #ifndef MIKROE_MAX30101_CONFIG_H_ #define MIKROE_MAX30101_CONFIG_H_ +#include "em_gpio.h" + #ifdef __cplusplus extern "C" { #endif diff --git a/driver/public/mikroe/smoke2_adpd188bi/config/brd2703a/mikroe_smoke2_adpd188bi_config.h b/driver/public/mikroe/heartrate4_max30101/config/brd4338a/mikroe_max30101_config.h similarity index 78% rename from driver/public/mikroe/smoke2_adpd188bi/config/brd2703a/mikroe_smoke2_adpd188bi_config.h rename to driver/public/mikroe/heartrate4_max30101/config/brd4338a/mikroe_max30101_config.h index 641556cf..6b7c1698 100644 --- a/driver/public/mikroe/smoke2_adpd188bi/config/brd2703a/mikroe_smoke2_adpd188bi_config.h +++ b/driver/public/mikroe/heartrate4_max30101/config/brd4338a/mikroe_max30101_config.h @@ -1,6 +1,6 @@ /***************************************************************************//** - * @file mikroe_smoke2_adpd188bi_config.h - * @brief Smoke2 Click Configuration + * @file mikroe_max30101_config.h + * @brief SCL MAX30101 Configuration * @version 1.0.0 ******************************************************************************* * # License @@ -37,19 +37,25 @@ * ******************************************************************************/ -#ifndef MIKROE_SMOKE2_ADPD188BI_CONFIG_H_ -#define MIKROE_SMOKE2_ADPD188BI_CONFIG_H_ +#ifndef MIKROE_MAX30101_CONFIG_H_ +#define MIKROE_MAX30101_CONFIG_H_ -#include "em_gpio.h" +#ifdef __cplusplus +extern "C" { +#endif // <<< sl:start pin_tool >>> -// MIKROE_SMOKE2_ADPD188BI_INT -// $[GPIO_MIKROE_SMOKE2_ADPD188BI_INT] -#define MIKROE_SMOKE2_ADPD188BI_INT_PORT gpioPortB -#define MIKROE_SMOKE2_ADPD188BI_INT_PIN 1 -// [GPIO_MIKROE_SMOKE2_ADPD188BI_INT]$ +// MAX30101_INT +// $[GPIO_MAX30101_INT] +#define MAX30101_INT_PORT HP +#define MAX30101_INT_PIN 48 +// [GPIO_MAX30101_INT]$ // <<< sl:end pin_tool >>> -#endif /* MIKROE_SMOKE2_ADPD188BI_CONFIG_H_ */ +#ifdef __cplusplus +} +#endif + +#endif /* MIKROE_MAX30101_CONFIG_H_ */ diff --git a/driver/public/mikroe/heartrate4_max30101/config/other/mikroe_max30101_config.h b/driver/public/mikroe/heartrate4_max30101/config/other/mikroe_max30101_config.h index 345eb78a..6e677110 100644 --- a/driver/public/mikroe/heartrate4_max30101/config/other/mikroe_max30101_config.h +++ b/driver/public/mikroe/heartrate4_max30101/config/other/mikroe_max30101_config.h @@ -40,6 +40,10 @@ #ifndef MIKROE_MAX30101_CONFIG_H_ #define MIKROE_MAX30101_CONFIG_H_ +#ifndef SLI_SI917 +#include "em_gpio.h" +#endif + #ifdef __cplusplus extern "C" { #endif diff --git a/driver/public/mikroe/heartrate4_max30101/inc/mikroe_max30101.h b/driver/public/mikroe/heartrate4_max30101/inc/mikroe_max30101.h index 01b4fcc2..7903b7ba 100644 --- a/driver/public/mikroe/heartrate4_max30101/inc/mikroe_max30101.h +++ b/driver/public/mikroe/heartrate4_max30101/inc/mikroe_max30101.h @@ -39,8 +39,9 @@ #ifndef MIKROE_MAX30101_H_ #define MIKROE_MAX30101_H_ + #include "sl_status.h" -#include "sl_i2cspm.h" +#include "drv_i2c_master.h" #ifdef __cplusplus extern "C" { @@ -148,7 +149,7 @@ typedef struct * SL_STATUS_OK Successful initialization. * SL_STATUS_FAIL Initialization failed. ******************************************************************************/ -sl_status_t mikroe_max30101_init(sl_i2cspm_t *i2cspm_instance); +sl_status_t mikroe_max30101_init(mikroe_i2c_handle_t i2c_instance); /***************************************************************************//** * @brief @@ -161,7 +162,7 @@ sl_status_t mikroe_max30101_init(sl_i2cspm_t *i2cspm_instance); * SL_STATUS_OK if there are no errors. * SL_STATUS_INVALID_PARAMETER if i2cspm_instance is null. ******************************************************************************/ -sl_status_t mikroe_max30101_set_i2csmp_instance(sl_i2cspm_t *i2cspm_instance); +sl_status_t mikroe_max30101_set_i2c_instance(mikroe_i2c_handle_t i2c_instance); /***************************************************************************//** * @brief diff --git a/driver/public/mikroe/heartrate4_max30101/src/mikroe_max30101.c b/driver/public/mikroe/heartrate4_max30101/src/mikroe_max30101.c index 9c27210e..c5aa2aea 100644 --- a/driver/public/mikroe/heartrate4_max30101/src/mikroe_max30101.c +++ b/driver/public/mikroe/heartrate4_max30101/src/mikroe_max30101.c @@ -40,37 +40,38 @@ #include "heartrate4.h" #include "mikroe_max30101.h" #include "mikroe_max30101_config.h" -#include "third_party_hw_drivers_helpers.h" static heartrate4_t heartrate4; static heartrate4_cfg_t heartrate4_cfg; -sl_status_t mikroe_max30101_init(sl_i2cspm_t *i2cspm_instance) +sl_status_t mikroe_max30101_init(mikroe_i2c_handle_t i2c_instance) { - if (i2cspm_instance == NULL) { + if (i2c_instance == NULL) { return SL_STATUS_INVALID_PARAMETER; } - THIRD_PARTY_HW_DRV_RETCODE_INIT(); // Configure default i2csmp instance - heartrate4.i2c.handle = i2cspm_instance; + heartrate4.i2c.handle = i2c_instance; + + // Call basic setup functions + heartrate4_cfg_setup(&heartrate4_cfg); #if defined(MAX30101_INT_PORT) && defined(MAX30101_INT_PIN) heartrate4_cfg.int1 = hal_gpio_pin_name(MAX30101_INT_PORT, MAX30101_INT_PIN); #endif - // Call basic setup functions - heartrate4_cfg_setup(&heartrate4_cfg); - - THIRD_PARTY_HW_DRV_RETCODE_TEST(heartrate4_init(&heartrate4, - &heartrate4_cfg)); + if (heartrate4_init(&heartrate4, &heartrate4_cfg) != HEARTRATE4_OK) { + return SL_STATUS_INITIALIZATION; + } mikroe_max30101_default_cfg(); - THIRD_PARTY_HW_DRV_RETCODE_TEST(mikroe_max30101_present()); + if (mikroe_max30101_present() != HEARTRATE4_OK) { + return SL_STATUS_NOT_AVAILABLE; + } - return THIRD_PARTY_HW_DRV_RETCODE_VALUE; + return SL_STATUS_OK; } /***************************************************************************//** @@ -88,13 +89,13 @@ sl_status_t mikroe_max30101_present(void) return SL_STATUS_OK; } -sl_status_t mikroe_max30101_set_i2csmp_instance(sl_i2cspm_t *i2cspm_instance) +sl_status_t mikroe_max30101_set_i2c_instance(mikroe_i2c_handle_t i2c_instance) { - if (NULL == i2cspm_instance) { + if (NULL == i2c_instance) { return SL_STATUS_INVALID_PARAMETER; } - heartrate4.i2c.handle = i2cspm_instance; + heartrate4.i2c.handle = i2c_instance; return SL_STATUS_OK; } diff --git a/driver/public/mikroe/hvac_scd41/config/mikroe_scd41_config.h b/driver/public/mikroe/hvac_scd41/config/mikroe_scd41_config.h new file mode 100644 index 00000000..d49510c2 --- /dev/null +++ b/driver/public/mikroe/hvac_scd41/config/mikroe_scd41_config.h @@ -0,0 +1,71 @@ + +/***************************************************************************/ /** + * @file mikroe_scd41_config.h + * @brief mikroe scd41 configuration + ******************************************************************************* + * # License + * Copyright 2024 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * SPDX-License-Identifier: Zlib + * + * The licensor of this software is Silicon Laboratories Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + ******************************************************************************* + * + * EVALUATION QUALITY + * This code has been minimally tested to ensure that it builds with the + * specified dependency versions and is suitable as a demonstration for + * evaluation purposes only. + * This code will be maintained at the sole discretion of Silicon Labs. + * + ******************************************************************************/ + +#ifndef MIKROE_SCD41_CONFIG_H +#define MIKROE_SCD41_CONFIG_H + +#ifdef __cplusplus +extern "C" { +#endif + +// <<< Use Configuration Wizard in Context Menu >>> + +// MIKROE SCD41 I2C Configuration + +// MIKROE SCD41 I2C UC Configuration +// Enable: Peripheral configuration is taken straight from the configuration set in the universal configuration (UC). +// Disable: If the application demands it to be modified during runtime, use the default API to modify the peripheral configuration. +// Default: 0 +#define MIKROE_SCD41_I2C_UC 0 + +// Speed mode +// <0=> Standard mode (100kbit/s) +// <1=> Fast mode (400kbit/s) +// <2=> Fast mode plus (1Mbit/s) +//