|
36 | 36 | #include "../protocol/data/NMEA.h" |
37 | 37 | #include "../protocol/data/GDL90.h" |
38 | 38 | #include "../protocol/data/D1090.h" |
| 39 | +#include "../protocol/data/JSON.h" |
39 | 40 |
|
40 | 41 | #if !defined(ARDUINO_WisDuo_RAK3172_Evaluation_Board) |
41 | 42 | #include <STM32LowPower.h> |
@@ -103,6 +104,21 @@ void HAL_SUBGHZ_MspInit(SUBGHZ_HandleTypeDef * hsubghz) |
103 | 104 | } |
104 | 105 | #endif /* HAL_SUBGHZ_MODULE_ENABLED */ |
105 | 106 |
|
| 107 | +#if defined(ARDUINO_GENERIC_WL55CCUX) |
| 108 | +#include <SdFat_Adafruit_Fork.h> |
| 109 | + |
| 110 | +#define SD_CONFIG SdSpiConfig(uSD_SS_pin, SHARED_SPI, SD_SCK_MHZ(8), &SPI) |
| 111 | + |
| 112 | +SdFat uSD; |
| 113 | + |
| 114 | +static bool uSD_is_attached = false; |
| 115 | +static bool FATFS_is_mounted = false; |
| 116 | + |
| 117 | +#define STM32_JSON_BUFFER_SIZE 1024 |
| 118 | + |
| 119 | +StaticJsonBuffer<STM32_JSON_BUFFER_SIZE> STM32_jsonBuffer; |
| 120 | +#endif /* ARDUINO_GENERIC_WL55CCUX */ |
| 121 | + |
106 | 122 | #elif defined(ARDUINO_WisDuo_RAK3172_Evaluation_Board) |
107 | 123 |
|
108 | 124 | char *dtostrf_workaround(double number, signed char width, unsigned char prec, char *s) { |
@@ -392,6 +408,26 @@ static void STM32_setup() |
392 | 408 | stm32_board = STM32_LILYGO_T3_1_0; |
393 | 409 | hw_info.model = SOFTRF_MODEL_LABUBU; |
394 | 410 |
|
| 411 | + { |
| 412 | + int uSD_SS_pin = SOC_GPIO_PIN_SD_SS; |
| 413 | + |
| 414 | + /* micro-SD SPI is shared with OLED SPI */ |
| 415 | + SPI.setMISO(SOC_GPIO_PIN_MISO); |
| 416 | + SPI.setMOSI(SOC_GPIO_PIN_MOSI); |
| 417 | + SPI.setSCLK(SOC_GPIO_PIN_SCK); |
| 418 | + |
| 419 | + digitalWrite(uSD_SS_pin, HIGH); |
| 420 | + pinMode(uSD_SS_pin, OUTPUT); |
| 421 | + |
| 422 | + uSD_is_attached = uSD.cardBegin(SD_CONFIG); |
| 423 | + |
| 424 | + if (uSD_is_attached && uSD.card()->cardSize() > 0) { |
| 425 | + hw_info.storage = STORAGE_CARD; |
| 426 | + |
| 427 | + FATFS_is_mounted = uSD.volumeBegin(); |
| 428 | + } |
| 429 | + } |
| 430 | + |
395 | 431 | #elif defined(ARDUINO_WisDuo_RAK3172_Evaluation_Board) |
396 | 432 |
|
397 | 433 | /* TBD */ |
@@ -536,7 +572,7 @@ static void STM32_setup() |
536 | 572 |
|
537 | 573 | lmic_pins.rxe = SOC_GPIO_ANT_RX; |
538 | 574 | lmic_pins.txe = SOC_GPIO_ANT_TX; |
539 | | - STM32_has_TCXO = false; /* TBD */ |
| 575 | + STM32_has_TCXO = false; /* LilyGO T3-STM32 V1.0 25-10-13 */ |
540 | 576 |
|
541 | 577 | if (STM32_has_TCXO) { |
542 | 578 | lmic_pins.tcxo = SOC_GPIO_TCXO; |
@@ -659,6 +695,36 @@ static void STM32_post_init() |
659 | 695 | Serial.println(F("Power-on Self Test is complete.")); |
660 | 696 | Serial.println(); |
661 | 697 | Serial.flush(); |
| 698 | + |
| 699 | + if (!uSD_is_attached) { |
| 700 | + Serial.println(F("WARNING: unable to attach micro-SD card.")); |
| 701 | + } else { |
| 702 | + // The number of 512 byte sectors in the card |
| 703 | + // or zero if an error occurs. |
| 704 | + size_t cardSize = uSD.card()->cardSize(); |
| 705 | + |
| 706 | + if (cardSize == 0) { |
| 707 | + Serial.println(F("WARNING: invalid micro-SD card size.")); |
| 708 | + } else { |
| 709 | + uint8_t cardType = uSD.card()->type(); |
| 710 | + |
| 711 | + Serial.print(F("SD Card Type: ")); |
| 712 | + if(cardType == SD_CARD_TYPE_SD1){ |
| 713 | + Serial.println(F("V1")); |
| 714 | + } else if(cardType == SD_CARD_TYPE_SD2){ |
| 715 | + Serial.println(F("V2")); |
| 716 | + } else if(cardType == SD_CARD_TYPE_SDHC){ |
| 717 | + Serial.println(F("SDHC")); |
| 718 | + } else { |
| 719 | + Serial.println(F("UNKNOWN")); |
| 720 | + } |
| 721 | + |
| 722 | + Serial.print("SD Card Size: "); |
| 723 | + Serial.print(cardSize / (2 * 1024)); |
| 724 | + Serial.println(" MB"); |
| 725 | + } |
| 726 | + } |
| 727 | + Serial.println(); |
662 | 728 | } |
663 | 729 | #endif /* NUCLEO_L073RZ || GENERIC_WLE5CCUX || GENERIC_WL55CCUX */ |
664 | 730 |
|
@@ -892,6 +958,48 @@ static bool STM32_EEPROM_begin(size_t size) |
892 | 958 | static void STM32_EEPROM_extension(int cmd) |
893 | 959 | { |
894 | 960 | if (cmd == EEPROM_EXT_LOAD) { |
| 961 | +#if defined(ARDUINO_GENERIC_WL55CCUX) |
| 962 | + if ( uSD_is_attached && FATFS_is_mounted ) { |
| 963 | + File32 file = uSD.open(SETTINGS_JSON_PATH, FILE_READ); |
| 964 | + |
| 965 | + if (file) { |
| 966 | + // StaticJsonBuffer<STM32_JSON_BUFFER_SIZE> STM32_jsonBuffer; |
| 967 | + |
| 968 | + JsonObject &root = STM32_jsonBuffer.parseObject(file); |
| 969 | + |
| 970 | + if (root.success()) { |
| 971 | + JsonVariant msg_class = root["class"]; |
| 972 | + |
| 973 | + if (msg_class.success()) { |
| 974 | + const char *msg_class_s = msg_class.as<char*>(); |
| 975 | + |
| 976 | + if (!strcmp(msg_class_s,"SOFTRF")) { |
| 977 | + parseSettings (root); |
| 978 | + |
| 979 | +#if defined(ENABLE_PROL) |
| 980 | + JsonVariant fromcall = root["fromcall"]; |
| 981 | + if (fromcall.success()) { |
| 982 | + const char * fromcall_s = fromcall.as<char*>(); |
| 983 | + if (strlen(fromcall_s) < sizeof(APRS_FromCall)) { |
| 984 | + strncpy(APRS_FromCall, fromcall_s, sizeof(APRS_FromCall)); |
| 985 | + } |
| 986 | + } |
| 987 | + JsonVariant tocall = root["tocall"]; |
| 988 | + if (tocall.success()) { |
| 989 | + const char * tocall_s = tocall.as<char*>(); |
| 990 | + if (strlen(tocall_s) < sizeof(APRS_ToCall)) { |
| 991 | + strncpy(APRS_ToCall, tocall_s, sizeof(APRS_ToCall)); |
| 992 | + } |
| 993 | + } |
| 994 | +#endif /* ENABLE_PROL */ |
| 995 | + } |
| 996 | + } |
| 997 | + } |
| 998 | + file.close(); |
| 999 | + } |
| 1000 | + } |
| 1001 | +#endif /* ARDUINO_GENERIC_WL55CCUX */ |
| 1002 | + |
895 | 1003 | if (settings->mode != SOFTRF_MODE_NORMAL |
896 | 1004 | #if !defined(EXCLUDE_TEST_MODE) |
897 | 1005 | && |
|
0 commit comments