diff --git a/Translation Editor/translation_en.json b/Translation Editor/translation_en.json index 9c107686..d208a386 100644 --- a/Translation Editor/translation_en.json +++ b/Translation Editor/translation_en.json @@ -274,7 +274,7 @@ "Allow locking", "buttons" ], - "desc": "When soldering, long press on both buttons, to lock them " + "desc": "When soldering, long press both buttons, to lock them " } } } diff --git a/Translation Editor/translation_hu.json b/Translation Editor/translation_hu.json index 5941d22f..03d549a3 100644 --- a/Translation Editor/translation_hu.json +++ b/Translation Editor/translation_hu.json @@ -4,31 +4,31 @@ "cyrillicGlyphs": false, "messages": { "SettingsCalibrationDone": "Kalibráció befejezve!", - "SettingsCalibrationWarning": "Folytatás előtt győződjön meg róla, hogy a hegy szobahőmérsékletű!", + "SettingsCalibrationWarning": "Folytatás előtt győződjön meg róla, hogy a páka szobahőmérsékletű!", "SettingsResetWarning": "Biztosan visszaállítja a beállításokat az alapértelmezett értékekre?", "UVLOWarningString": "DC KEVÉS", "UndervoltageString": "Alulfeszültség", "InputVoltageString": "Bemenet V: ", "WarningTipTempString": "Hegy hő: ", - "BadTipString": "HEGY HIB", + "BadTipString": "PÁKAHIBA", "SleepingSimpleString": "Zzzz", "SleepingAdvancedString": "Alvás...", - "WarningSimpleString": "FORR", - "WarningAdvancedString": "!! FORRÓ HEGY !!", - "SleepingTipAdvancedString": "Hegy:", - "IdleTipString": "Hegy:", - "IdleSetString": " Cél:", - "TipDisconnectedString": "HEGY LEVÉVE", + "WarningSimpleString": "FORRÓ!", + "WarningAdvancedString": "!! FORRÓ PÁKA !!", + "SleepingTipAdvancedString": "Páka:", + "IdleTipString": "Páka:", + "IdleSetString": "Cél:", + "TipDisconnectedString": "PÁKA LEVÉVE", "SolderingAdvancedPowerPrompt": "Telj: ", "OffString": "Ki", - "ResetOKMessage": "Reset OK", - "YourGainMessage": "Your gain:", - "SettingsResetMessage": "Settings were\nreset!", - "NoAccelerometerMessage": "No accelerometer\ndetected!", - "NoPowerDeliveryMessage": "No USB-PD IC\ndetected!", - "LockingKeysString": " LOCKED", - "UnlockingKeysString": "UNLOCKED", - "WarningKeysLockedString": "!LOCKED!" + "ResetOKMessage": "Törlés OK", + "YourGainMessage": "Erősítés:", + "SettingsResetMessage": "Beállítások\ntörölve!", + "NoAccelerometerMessage": "Nincs gyorsulásmérő!", + "NoPowerDeliveryMessage": "Nincs USB-PD IC!", + "LockingKeysString": "LEZÁRVA", + "UnlockingKeysString": "FELOLDVA", + "WarningKeysLockedString": "!LEZÁRVA!" }, "characters": { "SettingRightChar": "J", @@ -36,17 +36,17 @@ "SettingAutoChar": "A", "SettingFastChar": "G", "SettingSlowChar": "L", - "SettingStartSolderingChar": "T", - "SettingStartSleepChar": "S", - "SettingStartSleepOffChar": "O", - "SettingStartNoneChar": "F", - "SettingSensitivityOff": "O", - "SettingSensitivityLow": "L", - "SettingSensitivityMedium": "M", - "SettingSensitivityHigh": "H", - "SettingLockDisableChar": "D", + "SettingStartSolderingChar": "F", + "SettingStartSleepChar": "Z", + "SettingStartSleepOffChar": "S", + "SettingStartNoneChar": "K", + "SettingSensitivityOff": "0", + "SettingSensitivityLow": "A", + "SettingSensitivityMedium": "K", + "SettingSensitivityHigh": "M", + "SettingLockDisableChar": "K", "SettingLockBoostChar": "B", - "SettingLockFullChar": "F" + "SettingLockFullChar": "T" }, "menuGroups": { "SolderingMenu": { @@ -65,7 +65,7 @@ }, "UIMenu": { "text2": [ - "Felhasználó", + "Felhasználói", "felület" ], "desc": "Felhasználói felület beállításai" @@ -84,21 +84,21 @@ "Áram", "forrás" ], - "desc": "Áramforrás. Beállítja a lekapcsolási feszültséget. " + "desc": "Kikapcsolási feszültség beállítása (DC:10V, S:3.3V/LiPo cella)" }, "SleepTemperature": { "text2": [ "Alvási", - "hőfok" + "hőmérs." ], - "desc": "Alvási hőmérséklet " + "desc": "Hőmérséklet alvó módban " }, "SleepTimeout": { "text2": [ "Alvás", "időzítő" ], - "desc": "Alvás időzítő " + "desc": "Alvási időzítő " }, "ShutdownTimeout": { "text2": [ @@ -112,33 +112,33 @@ "Mozgás", "érzékenység" ], - "desc": "Mozgás érzékenység beállítása. <0.kikapcsolva 1.legkevésbé érzékeny 9.legérzékenyebb>" + "desc": "Mozgás érzékenység beállítása (0=kikapcsolva 1=legkevésbé érzékeny 9=legérzékenyebb)" }, "TemperatureUnit": { "text2": [ "Hőmérséklet", "mértékegysége" ], - "desc": "Hőmérséklet mértékegysége " + "desc": "Hőmérséklet mértékegysége (C=Celsius F=Fahrenheit)" }, "AdvancedIdle": { "text2": [ "Részletes", "készenlét" ], - "desc": "Részletes információ megjelenítése kisebb betűméretben a készenléti képernyőn." + "desc": "Részletes információk megjelenítése kisebb betűméretben a készenléti képernyőn" }, "DisplayRotation": { "text2": [ "Kijelző", "tájolása" ], - "desc": "Kijelző tájolása " + "desc": "Kijelző tájolása (A=automatikus B=balkezes J=jobbkezes)" }, "BoostTemperature": { "text2": [ "Boost", - "hőfok" + "hőmérs." ], "desc": "Hőmérséklet \"boost\" módban" }, @@ -147,21 +147,21 @@ "Automatikus", "indítás" ], - "desc": "Bekapcsolás után automatikusan lépjen forrasztás módba. T=forrasztás, S=alvó mód, F=ki" + "desc": "Bekapcsolás után automatikusan lépjen forrasztás módba (F=forrasztás S=szobahőmérséklet Z=alvó mód K=ki)" }, "CooldownBlink": { "text2": [ "Villogás", "hűléskor" ], - "desc": "Villogjon a hőmérséklet hűlés közben, amíg a hegy forró." + "desc": "Villogjon a hőmérséklet hűlés közben, amíg a páka forró" }, "TemperatureCalibration": { "text2": [ "Hőmérséklet", "kalibrálása?" ], - "desc": "Hegy hőmérséklet-különbségének kalibrálása." + "desc": "Páka hőmérséklet-érzékelőjének kalibrálása" }, "SettingsReset": { "text2": [ @@ -172,15 +172,15 @@ }, "VoltageCalibration": { "text2": [ - "Bemeneti fesz", + "Bemeneti fesz.", "kalibrálása?" ], - "desc": "Bemeneti feszültség kalibrálása. Röviden megnyomva módosítás, hosszan megnyomva kilépés" + "desc": "Bemeneti feszültség kalibrálása (röviden megnyomva módosítás, hosszan megnyomva kilépés)" }, "AdvancedSoldering": { "text2": [ "Részletes", - "forr. kép." + "forr.kép" ], "desc": "Részletes információk megjelenítése forrasztás közben" }, @@ -193,10 +193,10 @@ }, "TipModel": { "text2": [ - "Forrasztóhegy", + "Forr.páka", "modell" ], - "desc": "Forrasztóhegy modell kiválasztása" + "desc": "Forrasztópáka modell kiválasztása" }, "SimpleCalibrationMode": { "text2": [ @@ -214,66 +214,66 @@ }, "QCMaxVoltage": { "text2": [ - "Bemeneti", - "teljesítmény" + "Max. USB", + "fesz." ], - "desc": "A tápegység által leadott teljesítmény" + "desc": "Maximális USB feszültség (QuickCharge)" }, "PowerLimit": { "text2": [ - "Telj", + "Teljesítm.", "maximum" ], - "desc": "Maximális teljesitmény beállitása " + "desc": "Maximális felvett teljesitmény beállitása" }, "ReverseButtonTempChange": { "text2": [ - "GOMB +-", - "Felcseréled?" + "+/- gomb", + "fordítva" ], - "desc": "A páka hömérséklet növelés csökkentési gombok felcserélése." + "desc": "Páka hőmérséklet növelés/csökkentés gombok felcserélése" }, "TempChangeShortStep": { "text2": [ - "Hömérséklet", - "váltás rövid?" + "Hőm.váltás", + "rövid" ], - "desc": "Hömérséklet váltás rövid gombnyomásrs bekapcsolva!" + "desc": "Hőmérséklet váltás rövid gombnyomásra " }, "TempChangeLongStep": { "text2": [ - "Hömérséklet", - "váltás hosszú?" + "Hőm.váltás", + "hosszú" ], - "desc": "Hömérséklet váltás hosszú gombnyomásrs bekapcsolva!" + "desc": "Hőmérséklet váltás hosszú gombnyomásra " }, "PowerPulsePower": { "text2": [ - "Telj power", - "bank üzem W" + "Ébrentartó", + "pulzus W" ], - "desc": "Powerbank üzemnél nem engedi a powerbankot kikapcsolni idönkénti áram felvételt generál. " + "desc": "Powerbankot ébrentartó áramfelvételi pulzusok nagysága " }, "TipGain": { "text2": [ - "Modify", - "tip gain" + "Pákaerősítés", + "" ], - "desc": "Tip gain" + "desc": "Pákaerősítés állítása" }, "HallEffSensitivity": { "text2": [ - "Hall Eff", - "Sensitivity" + "Alvásérzékelő", + "érzékenység" ], - "desc": "Sensitivity of the Hall effect sensor in detecting sleep " + "desc": "Alvásérzékelő gyorsulásmérő érzékenysége (0=ki A=alacsony K=közepes M=magas)" }, "LockingMode": { "text2": [ - "Allow buttons", - "locking" + "Lezárás", + "enged." ], - "desc": "When soldering, long press on both buttons lock them " + "desc": "Forrasztás közben mindkét gombot hosszan lenyomva rögzíti a hőmérsékletet (K=ki B=csak \"boost\" mód T=teljes lezárás)" } } -} \ No newline at end of file +} diff --git a/Translation Editor/translation_pl.json b/Translation Editor/translation_pl.json index 320574d4..1a92b0f9 100644 --- a/Translation Editor/translation_pl.json +++ b/Translation Editor/translation_pl.json @@ -253,7 +253,7 @@ "Moc", "impulsu" ], - "desc": "Utrzymuj moc impulsu na wybranym poziomie " + "desc": "W przypadku używania powerbanku, utrzymuj moc na poziomie aby nie uśpić powerbanku" }, "TipGain": { "text2": [ @@ -277,4 +277,4 @@ "desc": "W trybie lutowania, wciśnij oba przyciski aby je zablokować " } } -} \ No newline at end of file +} diff --git a/Translation Editor/translation_sl.json b/Translation Editor/translation_sl.json index 9658a6f4..2f7c6a90 100644 --- a/Translation Editor/translation_sl.json +++ b/Translation Editor/translation_sl.json @@ -1,34 +1,34 @@ { "languageCode": "SL", - "languageLocalName": "Slovensko", + "languageLocalName": "Slovenščina", "cyrillicGlyphs": false, "messages": { "SettingsCalibrationDone": "Kalibracija opravljena!", - "SettingsCalibrationWarning": "Preden nadaljujete, mora biti konica na sobni temperaturi!", - "SettingsResetWarning": "Ste prepričani, da želite ponastaviti nastavitve na privzete vrednosti?", + "SettingsCalibrationWarning": "Pred nadaljevanjem mora biti konica segreta na sobno temperaturo!", + "SettingsResetWarning": "Res želite ponastaviti na privzete nastavitve?", "UVLOWarningString": "NIZKA U", "UndervoltageString": "Nizka napetost", "InputVoltageString": "Vhodna U: ", "WarningTipTempString": "Temp. kon.: ", - "BadTipString": "OKVARA K", + "BadTipString": "KONICA?", "SleepingSimpleString": "Zzzz", "SleepingAdvancedString": "Spim...", - "WarningSimpleString": "HOT!", - "WarningAdvancedString": "!!!VROČA KON.!!!", - "SleepingTipAdvancedString": "Knica:", + "WarningSimpleString": "VROČ", + "WarningAdvancedString": "!!VROČA KONICA!!", + "SleepingTipAdvancedString": "Konica", "IdleTipString": "Kon:", - "IdleSetString": " nst.:", - "TipDisconnectedString": "KONICA ODSTRANJ.", + "IdleSetString": " temp:", + "TipDisconnectedString": "NI KONICE", "SolderingAdvancedPowerPrompt": "Moč: ", - "OffString": "Izk", + "OffString": "Off", "ResetOKMessage": "Reset OK", - "YourGainMessage": "Ojačan.:", - "SettingsResetMessage": "Settings were\nreset!", - "NoAccelerometerMessage": "No accelerometer\ndetected!", - "NoPowerDeliveryMessage": "No USB-PD IC\ndetected!", - "LockingKeysString": " LOCKED", - "UnlockingKeysString": "UNLOCKED", - "WarningKeysLockedString": "!LOCKED!" + "YourGainMessage": "Ojačenje", + "SettingsResetMessage": "Nastavitve OK!", + "NoAccelerometerMessage": "Ni pospeševalnik", + "NoPowerDeliveryMessage": "Ni USB-PD čipa!", + "LockingKeysString": "ZAKLENJ.", + "UnlockingKeysString": "ODKLENJ.", + "WarningKeysLockedString": "ZAKLENJ." }, "characters": { "SettingRightChar": "D", @@ -36,17 +36,17 @@ "SettingAutoChar": "S", "SettingFastChar": "H", "SettingSlowChar": "P", - "SettingStartSolderingChar": "T", - "SettingStartSleepChar": "S", - "SettingStartSleepOffChar": "O", - "SettingStartNoneChar": "F", - "SettingSensitivityOff": "O", - "SettingSensitivityLow": "L", - "SettingSensitivityMedium": "M", - "SettingSensitivityHigh": "H", - "SettingLockDisableChar": "D", - "SettingLockBoostChar": "B", - "SettingLockFullChar": "F" + "SettingStartSolderingChar": "S", + "SettingStartSleepChar": "Z", + "SettingStartSleepOffChar": "V", + "SettingStartNoneChar": "U", + "SettingSensitivityOff": "U", + "SettingSensitivityLow": "N", + "SettingSensitivityMedium": "S", + "SettingSensitivityHigh": "V", + "SettingLockDisableChar": "O", + "SettingLockBoostChar": "L", + "SettingLockFullChar": "P" }, "menuGroups": { "SolderingMenu": { @@ -58,7 +58,7 @@ }, "PowerSavingMenu": { "text2": [ - "Načini", + "Način", "spanja" ], "desc": "Nastavitve varčevanja z energijo" @@ -91,70 +91,70 @@ "Temp. med", "spanjem" ], - "desc": "Temperatura med spanjem " + "desc": "Temperatura med spanjem" }, "SleepTimeout": { "text2": [ "Čas do", "spanja" ], - "desc": "Čas pred spanjem " + "desc": "Čas pred spanjem " }, "ShutdownTimeout": { "text2": [ "Čas do", "izklopa" ], - "desc": "Čas pred izklopom " + "desc": "Čas do izklopa " }, "MotionSensitivity": { "text2": [ "Občutljivost", "premikanja" ], - "desc": "Občutljivost premikanja <0.izklopljeno 1.najmanj 9.najbolj občutljivo>" + "desc": "0=izklopljeno | 1=najmanjša | ... | 9=največja" }, "TemperatureUnit": { "text2": [ "Enota za", "temperaturo" ], - "desc": "Enota za temperaturo " + "desc": "Enota za temperaturo " }, "AdvancedIdle": { "text2": [ - "Več info na", - "zaslonu v mir" + "Več info. na", + "mir. zaslonu" ], - "desc": "Prikaže več informacij z manjšo pisavo na zaslonu med mirovanjem." + "desc": "Prikaži več informacij z manjšo pisavo na mirovalnem zaslonu." }, "DisplayRotation": { "text2": [ "Orientacija", "zaslona" ], - "desc": "Orientacija zaslona " + "desc": "S=samodejno | L=levičar | D=desničar" }, "BoostTemperature": { "text2": [ - "Temperat.", - "v boost" + "Pospešena", + "temp." ], - "desc": "Temperatura v \"boost\" načinu" + "desc": "Temperatura v pospešenem načinu" }, "AutoStart": { "text2": [ "Samodejni", "zagon" ], - "desc": "Samodejno segrej konico ob vklopu. T=segrej, S=spanje, F=izklop" + "desc": "Samodejno gretje konice ob vklopu " }, "CooldownBlink": { "text2": [ "Utripanje med", "hlajenjem" ], - "desc": "Utripaj temperaturo med hlajenjem, ko je konica še vroča." + "desc": "Ko je konica še vroča, utripaj prikaz temperature med hlajenjem." }, "TemperatureCalibration": { "text2": [ @@ -175,7 +175,7 @@ "Kalibriram", "vhodno napetost?" ], - "desc": "Kalibracija VIN. Nastavitve z gumbi, dolgi pritisk za izhod." + "desc": "Kalibracija VIN " }, "AdvancedSoldering": { "text2": [ @@ -189,11 +189,11 @@ "Hitrost", "besedila" ], - "desc": "Hitrost, s katero se prikazuje besedilo" + "desc": "Hitrost, s katero se prikazuje besedilo " }, "TipModel": { "text2": [ - "Model", + "Tip", "konice" ], "desc": "Izbira tipa konice" @@ -214,66 +214,66 @@ }, "QCMaxVoltage": { "text2": [ - "Moč napajalnega", - "vira" + "QC", + "napetost" ], - "desc": "Moč v W napajalnega vira" + "desc": "Moč napajalnega vira v vatih [W]" }, "PowerLimit": { "text2": [ - "Power", - "Limit" + "Meja", + "moči" ], - "desc": "Maximum power the iron can use " + "desc": "Največja dovoljena moč v vatih [W]" }, "ReverseButtonTempChange": { "text2": [ - "Key +-", - "reverse?" + "Obrni", + "tipki + -?" ], - "desc": "Reverse the tip temperature change buttons plus minus assignment." + "desc": "Zamenjaj funkciji gumbov." }, "TempChangeShortStep": { "text2": [ - "Temp change", - "short?" + "Kratka sprememba", + "temperature?" ], - "desc": "Temperature change steps on short button press!" + "desc": "Temperatura se spremeni ob kratkem pritisku na gumb." }, "TempChangeLongStep": { "text2": [ - "Temp change", - "long?" + "Dolga sprememba", + "temperature?" ], - "desc": "Temperature change steps on long button press!" + "desc": "Temperatura se spremeni ob dolgem pritisku na gumb." }, "PowerPulsePower": { "text2": [ - "Power", - "Pulse W" + "Pulz", + "moči" ], - "desc": "Keep awake pulse power intensity" + "desc": "Velikost moči za vzdrževanje budnosti." }, "TipGain": { "text2": [ - "Modify", - "tip gain" + "Nastavi", + "moč kon." ], - "desc": "Tip gain" + "desc": "Nastavi moč konice." }, "HallEffSensitivity": { "text2": [ - "Hall Eff", - "Sensitivity" + "Občut.", + "Hall son" ], - "desc": "Sensitivity of the Hall effect sensor in detecting sleep " + "desc": "Občutljivost Hallove sonde za zaznavanje spanja " }, "LockingMode": { "text2": [ - "Allow buttons", - "locking" + "Omogoči", + "zaklep gumbov" ], - "desc": "When soldering, long press on both buttons lock them " + "desc": "Za zaklep med spajkanjem drži oba gumba " } } } \ No newline at end of file diff --git a/workspace/TS100/Core/BSP/Miniware/Model_Config.h b/workspace/TS100/Core/BSP/Miniware/Model_Config.h index 664208ad..f961048d 100644 --- a/workspace/TS100/Core/BSP/Miniware/Model_Config.h +++ b/workspace/TS100/Core/BSP/Miniware/Model_Config.h @@ -29,7 +29,7 @@ #define ACCEL_LIS #define POW_QC #define TEMP_TMP36 -#define ACCEL_ORI_FLIP +#define LIS_ORI_FLIP #define OLED_FLIP #define BATTFILTERDEPTH 8 #endif @@ -41,7 +41,7 @@ #define POW_QC #define TEMP_NTC #define I2C_SOFT -#define ACCEL_ORI_FLIP +#define LIS_ORI_FLIP #define OLED_FLIP #define BATTFILTERDEPTH 8 #endif diff --git a/workspace/TS100/Core/BSP/Miniware/fusb302b.cpp b/workspace/TS100/Core/BSP/Miniware/fusb302b.cpp index fda41003..ac5cbe76 100644 --- a/workspace/TS100/Core/BSP/Miniware/fusb302b.cpp +++ b/workspace/TS100/Core/BSP/Miniware/fusb302b.cpp @@ -244,8 +244,6 @@ void fusb_reset() { fusb_write_byte( FUSB_CONTROL0, 0x44); /* Flush the RX buffer */ fusb_write_byte( FUSB_CONTROL1, FUSB_CONTROL1_RX_FLUSH); - /* Reset the PD logic */ -// fusb_write_byte( FUSB_RESET, FUSB_RESET_PD_RESET); if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) { I2CBB::unlock2(); } diff --git a/workspace/TS100/Core/BSP/Pine64/I2C_Wrapper.cpp b/workspace/TS100/Core/BSP/Pine64/I2C_Wrapper.cpp index db011a89..4e9b41f3 100755 --- a/workspace/TS100/Core/BSP/Pine64/I2C_Wrapper.cpp +++ b/workspace/TS100/Core/BSP/Pine64/I2C_Wrapper.cpp @@ -25,8 +25,7 @@ uint8_t FRToSI2C::I2C_RegisterRead(uint8_t add, uint8_t reg) { return temp; } -bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, - uint8_t *p_buffer, uint16_t number_of_byte) { +bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, uint8_t *p_buffer, uint16_t number_of_byte) { if (!lock()) return false; i2c_interrupt_disable(I2C0, I2C_INT_ERR); @@ -61,8 +60,7 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, /* enable acknowledge */ i2c_ack_config(I2C0, I2C_ACK_ENABLE); /* i2c master sends start signal only when the bus is idle */ - while (i2c_flag_get(I2C0, I2C_FLAG_I2CBSY) - && (timeout < I2C_TIME_OUT )) { + while (i2c_flag_get(I2C0, I2C_FLAG_I2CBSY) && (timeout < I2C_TIME_OUT )) { timeout++; } if (timeout < I2C_TIME_OUT) { @@ -83,8 +81,7 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, break; case I2C_SEND_ADDRESS: /* i2c master sends START signal successfully */ - while ((!i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) - && (timeout < I2C_TIME_OUT )) { + while ((!i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) && (timeout < I2C_TIME_OUT )) { timeout++; } if (timeout < I2C_TIME_OUT) { @@ -104,15 +101,13 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, break; case I2C_CLEAR_ADDRESS_FLAG: /* address flag set means i2c slave sends ACK */ - while ((!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) - && (timeout < I2C_TIME_OUT )) { + while ((!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) && (timeout < I2C_TIME_OUT )) { timeout++; if (i2c_flag_get(I2C0, I2C_FLAG_AERR)) { i2c_flag_clear(I2C0, I2C_FLAG_AERR); i2c_stop_on_bus(I2C0); /* i2c master sends STOP signal successfully */ - while ((I2C_CTL0(I2C0) & 0x0200) - && (timeout < I2C_TIME_OUT )) { + while ((I2C_CTL0(I2C0) & 0x0200) && (timeout < I2C_TIME_OUT )) { timeout++; } // Address NACK'd @@ -138,8 +133,7 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, case I2C_TRANSMIT_DATA: if (0 == in_rx_cycle) { /* wait until the transmit data buffer is empty */ - while ((!i2c_flag_get(I2C0, I2C_FLAG_TBE)) - && (timeout < I2C_TIME_OUT )) { + while ((!i2c_flag_get(I2C0, I2C_FLAG_TBE)) && (timeout < I2C_TIME_OUT )) { timeout++; } if (timeout < I2C_TIME_OUT) { @@ -152,8 +146,7 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, in_rx_cycle = 0; } /* wait until BTC bit is set */ - while ((!i2c_flag_get(I2C0, I2C_FLAG_BTC)) - && (timeout < I2C_TIME_OUT )) { + while ((!i2c_flag_get(I2C0, I2C_FLAG_BTC)) && (timeout < I2C_TIME_OUT )) { timeout++; } if (timeout < I2C_TIME_OUT) { @@ -239,8 +232,7 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, return true; } -bool FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, - uint8_t *p_buffer, uint16_t number_of_byte) { +bool FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, uint8_t *p_buffer, uint16_t number_of_byte) { if (!lock()) return false; @@ -257,8 +249,7 @@ bool FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, switch (state) { case I2C_START: /* i2c master sends start signal only when the bus is idle */ - while (i2c_flag_get(I2C0, I2C_FLAG_I2CBSY) - && (timeout < I2C_TIME_OUT )) { + while (i2c_flag_get(I2C0, I2C_FLAG_I2CBSY) && (timeout < I2C_TIME_OUT )) { timeout++; } if (timeout < I2C_TIME_OUT) { @@ -273,8 +264,7 @@ bool FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, break; case I2C_SEND_ADDRESS: /* i2c master sends START signal successfully */ - while ((!i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) - && (timeout < I2C_TIME_OUT )) { + while ((!i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) && (timeout < I2C_TIME_OUT )) { timeout++; } if (timeout < I2C_TIME_OUT) { @@ -290,15 +280,13 @@ bool FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, break; case I2C_CLEAR_ADDRESS_FLAG: /* address flag set means i2c slave sends ACK */ - while ((!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) - && (timeout < I2C_TIME_OUT )) { + while ((!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) && (timeout < I2C_TIME_OUT )) { timeout++; if (i2c_flag_get(I2C0, I2C_FLAG_AERR)) { i2c_flag_clear(I2C0, I2C_FLAG_AERR); i2c_stop_on_bus(I2C0); /* i2c master sends STOP signal successfully */ - while ((I2C_CTL0(I2C0) & 0x0200) - && (timeout < I2C_TIME_OUT )) { + while ((I2C_CTL0(I2C0) & 0x0200) && (timeout < I2C_TIME_OUT )) { timeout++; } // Address NACK'd @@ -323,8 +311,7 @@ bool FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, break; case I2C_TRANSMIT_DATA: /* wait until the transmit data buffer is empty */ - while ((!i2c_flag_get(I2C0, I2C_FLAG_TBE)) - && (timeout < I2C_TIME_OUT )) { + while ((!i2c_flag_get(I2C0, I2C_FLAG_TBE)) && (timeout < I2C_TIME_OUT )) { timeout++; } if (timeout < I2C_TIME_OUT) { @@ -409,18 +396,22 @@ bool FRToSI2C::lock() { if (I2CSemaphore == nullptr) { return false; } + if (xTaskGetSchedulerState() != taskSCHEDULER_RUNNING) { + return true; + } return xSemaphoreTake(I2CSemaphore, TICKS_SECOND) == pdTRUE; } void FRToSI2C::unlock() { + if (xTaskGetSchedulerState() != taskSCHEDULER_RUNNING) { + return; + } xSemaphoreGive(I2CSemaphore); } -bool FRToSI2C::writeRegistersBulk(const uint8_t address, - const I2C_REG *registers, const uint8_t registersLength) { +bool FRToSI2C::writeRegistersBulk(const uint8_t address, const I2C_REG *registers, const uint8_t registersLength) { for (int index = 0; index < registersLength; index++) { - if (!I2C_RegisterWrite(address, registers[index].reg, - registers[index].val)) { + if (!I2C_RegisterWrite(address, registers[index].reg, registers[index].val)) { return false; } if (registers[index].pause_ms) { @@ -447,8 +438,7 @@ bool FRToSI2C::wakePart(uint16_t DevAddress) { switch (state) { case I2C_START: /* i2c master sends start signal only when the bus is idle */ - while (i2c_flag_get(I2C0, I2C_FLAG_I2CBSY) - && (timeout < I2C_TIME_OUT )) { + while (i2c_flag_get(I2C0, I2C_FLAG_I2CBSY) && (timeout < I2C_TIME_OUT )) { timeout++; } if (timeout < I2C_TIME_OUT) { @@ -463,8 +453,7 @@ bool FRToSI2C::wakePart(uint16_t DevAddress) { break; case I2C_SEND_ADDRESS: /* i2c master sends START signal successfully */ - while ((!i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) - && (timeout < I2C_TIME_OUT )) { + while ((!i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) && (timeout < I2C_TIME_OUT )) { timeout++; } if (timeout < I2C_TIME_OUT) { @@ -480,15 +469,13 @@ bool FRToSI2C::wakePart(uint16_t DevAddress) { break; case I2C_CLEAR_ADDRESS_FLAG: /* address flag set means i2c slave sends ACK */ - while ((!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) - && (timeout < I2C_TIME_OUT )) { + while ((!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) && (timeout < I2C_TIME_OUT )) { timeout++; if (i2c_flag_get(I2C0, I2C_FLAG_AERR)) { i2c_flag_clear(I2C0, I2C_FLAG_AERR); i2c_stop_on_bus(I2C0); /* i2c master sends STOP signal successfully */ - while ((I2C_CTL0(I2C0) & 0x0200) - && (timeout < I2C_TIME_OUT )) { + while ((I2C_CTL0(I2C0) & 0x0200) && (timeout < I2C_TIME_OUT )) { timeout++; } // Address NACK'd diff --git a/workspace/TS100/Core/BSP/Pine64/Model_Config.h b/workspace/TS100/Core/BSP/Pine64/Model_Config.h index 13846fc5..0c8577cf 100755 --- a/workspace/TS100/Core/BSP/Pine64/Model_Config.h +++ b/workspace/TS100/Core/BSP/Pine64/Model_Config.h @@ -23,6 +23,7 @@ #define ENABLE_QC2 #define TEMP_TMP36 #define ACCEL_BMA +#define ACCEL_SC7 #define HALL_SENSOR #define HALL_SI7210 #define BATTFILTERDEPTH 32 diff --git a/workspace/TS100/Core/Drivers/BMA223.cpp b/workspace/TS100/Core/Drivers/BMA223.cpp index ac049b07..4da4ae76 100755 --- a/workspace/TS100/Core/Drivers/BMA223.cpp +++ b/workspace/TS100/Core/Drivers/BMA223.cpp @@ -9,7 +9,15 @@ #include bool BMA223::detect() { - return FRToSI2C::probe(BMA223_ADDRESS); + if (FRToSI2C::probe(BMA223_ADDRESS)) { + //Read chip id to ensure its not an address collision + uint8_t id = 0; + if (FRToSI2C::Mem_Read(BMA223_ADDRESS, BMA223_BGW_CHIPID, &id, 1)) { + return id == 0b11111000; + } + } + + return false; } static const FRToSI2C::I2C_REG i2c_registers[] = { // diff --git a/workspace/TS100/Core/Drivers/SC7A20.cpp b/workspace/TS100/Core/Drivers/SC7A20.cpp new file mode 100644 index 00000000..7bebb29d --- /dev/null +++ b/workspace/TS100/Core/Drivers/SC7A20.cpp @@ -0,0 +1,69 @@ +/* + * SC7A20.cpp + * + * Created on: 18 Sep. 2020 + * Author: Ralim + */ + +#include +#include +#include + +bool SC7A20::detect() { + if (FRToSI2C::probe(SC7A20_ADDRESS)) { + //Read chip id to ensure its not an address collision + uint8_t id = 0; + if (FRToSI2C::Mem_Read(SC7A20_ADDRESS, SC7A20_WHO_AMI_I, &id, 1)) { + return id == 0b00010001; + } + } + + return false; +} + +static const FRToSI2C::I2C_REG i2c_registers[] = { // + // + { SC7A20_CTRL_REG1, 0b01100111, 0 }, //200Hz, XYZ enabled + { SC7A20_CTRL_REG2, 0b00000000, 0 }, //Setup filter to 0x00 ?? + { SC7A20_CTRL_REG3, 0b00000000, 0 }, //int1 off + { SC7A20_CTRL_REG4, 0b01001000, 0 }, //Block mode off,little-endian,2G,High-pres,self test off + { SC7A20_CTRL_REG5, 0b00000100, 0 }, //fifo off, D4D on int1 + { SC7A20_CTRL_REG6, 0x00, 0 }, //INT2 off + //Basically setup the unit to run, and enable 4D orientation detection + { SC7A20_INT2_CFG, 0b01111110, 0 }, //setup for movement detection + { SC7A20_INT2_THS, 0x28, 0 }, // + { SC7A20_INT2_DURATION, 64, 0 }, // + { SC7A20_INT1_CFG, 0b01111110, 0 }, // + { SC7A20_INT1_THS, 0x28, 0 }, // + { SC7A20_INT1_DURATION, 64, 0 } + + // + }; +bool SC7A20::initalize() { + //Setup acceleration readings + //2G range + //bandwidth = 250Hz + //High pass filter on (Slow compensation) + //Turn off IRQ output pins + //Orientation recognition in symmetrical mode + // Hysteresis is set to ~ 16 counts + //Theta blocking is set to 0b10 + + return FRToSI2C::writeRegistersBulk(SC7A20_ADDRESS, i2c_registers, sizeof(i2c_registers) / sizeof(i2c_registers[0])); + +} + +void SC7A20::getAxisReadings(int16_t &x, int16_t &y, int16_t &z) { + //We can tell the accelerometer to output in LE mode which makes this simple + uint16_t sensorData[3] = { 0, 0, 0 }; + + if (FRToSI2C::Mem_Read(SC7A20_ADDRESS, SC7A20_OUT_X_L, (uint8_t*) sensorData, 6) == false) { + x = y = z = 0; + return; + } + //Shift 6 to make its range ~= the other accelerometers + x = sensorData[0]; + y = sensorData[1]; + z = sensorData[2]; + +} diff --git a/workspace/TS100/Core/Drivers/SC7A20.hpp b/workspace/TS100/Core/Drivers/SC7A20.hpp new file mode 100644 index 00000000..f58214da --- /dev/null +++ b/workspace/TS100/Core/Drivers/SC7A20.hpp @@ -0,0 +1,33 @@ +/* + * BMA223.hpp + * + * Created on: 18 Sep. 2020 + * Author: Ralim + */ + +#ifndef CORE_DRIVERS_SC7A20_HPP_ +#define CORE_DRIVERS_SC7A20_HPP_ +#include "I2C_Wrapper.hpp" +#include "BSP.h" +#include "SC7A20_defines.h" + +class SC7A20 { +public: + static bool detect(); + static bool initalize(); + //1 = rh, 2,=lh, 8=flat + static Orientation getOrientation() { + uint8_t val = ((FRToSI2C::I2C_RegisterRead(SC7A20_ADDRESS, SC7A20_INT2_SOURCE) >> 2) - 1); + if (val == 1) + return Orientation::ORIENTATION_LEFT_HAND; + else if (val == 4 || val == 0) + return Orientation::ORIENTATION_RIGHT_HAND; + else + return Orientation::ORIENTATION_FLAT; + } + static void getAxisReadings(int16_t &x, int16_t &y, int16_t &z); + +private: +}; + +#endif /* CORE_DRIVERS_BMA223_HPP_ */ diff --git a/workspace/TS100/Core/Drivers/SC7A20_defines.h b/workspace/TS100/Core/Drivers/SC7A20_defines.h new file mode 100644 index 00000000..1b74063e --- /dev/null +++ b/workspace/TS100/Core/Drivers/SC7A20_defines.h @@ -0,0 +1,46 @@ +/* + * BMA223_defines.h + * + * Created on: 18 Sep. 2020 + * Author: Ralim + */ + +#ifndef CORE_DRIVERS_SC7A20_DEFINES_H_ +#define CORE_DRIVERS_SC7A20_DEFINES_H_ + +#define SC7A20_ADDRESS 0x18<<1 +#define SC7A20_WHO_AMI_I 0x0F +#define SC7A20_CTRL_REG1 0x20 +#define SC7A20_CTRL_REG2 0x21 +#define SC7A20_CTRL_REG3 0x22 +#define SC7A20_CTRL_REG4 0x23 +#define SC7A20_CTRL_REG5 0x24 +#define SC7A20_CTRL_REG6 0x25 +#define SC7A20_REFERENCE 0x26 +#define SC7A20_STATUS_REG 0x27 +#define SC7A20_OUT_X_L 0x28 +#define SC7A20_OUT_X_H 0x29 +#define SC7A20_OUT_Y_L 0x2A +#define SC7A20_OUT_Y_H 0x2B +#define SC7A20_OUT_Z_L 0x2C +#define SC7A20_OUT_Z_H 0x2D +#define SC7A20_FIFO_CTRL 0x2E +#define SC7A20_FIFO_SRC 0x2F +#define SC7A20_INT1_CFG 0x30 +#define SC7A20_INT1_SOURCE 0x31 +#define SC7A20_INT1_THS 0x32 +#define SC7A20_INT1_DURATION 0x33 +#define SC7A20_INT2_CFG 0x34 +#define SC7A20_INT2_SOURCE 0x35 +#define SC7A20_INT2_THS 0x36 +#define SC7A20_INT2_DURATION 0x37 +#define SC7A20_CLICK_CFG 0x38 +#define SC7A20_CLICK_SRC 0x39 +#define SC7A20_CLICK_THS 0x3A +#define SC7A20_TIME_LIMIT 0x3B +#define SC7A20_TIME_LATENCY 0x3C +#define SC7A20_TIME_WINDOW 0x3D +#define SC7A20_ACT_THS 0x3E +#define SC7A20_ACT_DURATION 0x3F + +#endif /* CORE_DRIVERS_BMA223_DEFINES_H_ */ diff --git a/workspace/TS100/Core/Inc/main.hpp b/workspace/TS100/Core/Inc/main.hpp index ede22bd5..f3a4f49b 100755 --- a/workspace/TS100/Core/Inc/main.hpp +++ b/workspace/TS100/Core/Inc/main.hpp @@ -20,6 +20,7 @@ void vApplicationStackOverflowHook(TaskHandle_t *pxTask, void startGUITask(void const *argument); void startPIDTask(void const *argument); void startMOVTask(void const *argument); +void startPOWTask(void const *argument); extern TaskHandle_t pidTaskNotification; extern uint8_t accelInit; extern TickType_t lastMovementTime; diff --git a/workspace/TS100/Core/Src/main.cpp b/workspace/TS100/Core/Src/main.cpp index c638b0d8..14d27bb5 100755 --- a/workspace/TS100/Core/Src/main.cpp +++ b/workspace/TS100/Core/Src/main.cpp @@ -24,11 +24,17 @@ osThreadId PIDTaskHandle; static const size_t PIDTaskStackSize = 512 / 4; uint32_t PIDTaskBuffer[PIDTaskStackSize]; osStaticThreadDef_t PIDTaskControlBlock; + osThreadId MOVTaskHandle; static const size_t MOVTaskStackSize = 1024 / 4; uint32_t MOVTaskBuffer[MOVTaskStackSize]; osStaticThreadDef_t MOVTaskControlBlock; +osThreadId POWTaskHandle; +static const size_t POWTaskStackSize = 512 / 4; +uint32_t POWTaskBuffer[POWTaskStackSize]; +osStaticThreadDef_t POWTaskControlBlock; + // End FreeRTOS // Main sets up the hardware then hands over to the FreeRTOS kernel int main(void) { @@ -40,20 +46,21 @@ int main(void) { settingsWereReset = restoreSettings(); // load the settings from flash resetWatchdog(); /* Create the thread(s) */ - /* definition and creation of GUITask */ - osThreadStaticDef(GUITask, startGUITask, osPriorityBelowNormal, 0, - GUITaskStackSize, GUITaskBuffer, &GUITaskControlBlock); + /* definition and creation of POWTask - Power management for QC */ + osThreadStaticDef(POWTask, startPOWTask, osPriorityAboveNormal, 0, POWTaskStackSize, POWTaskBuffer, &POWTaskControlBlock); + POWTaskHandle = osThreadCreate(osThread(POWTask), NULL); + + /* definition and creation of GUITask - The OLED control & update*/ + osThreadStaticDef(GUITask, startGUITask, osPriorityBelowNormal, 0, GUITaskStackSize, GUITaskBuffer, &GUITaskControlBlock); GUITaskHandle = osThreadCreate(osThread(GUITask), NULL); - /* definition and creation of PIDTask */ - osThreadStaticDef(PIDTask, startPIDTask, osPriorityRealtime, 0, - PIDTaskStackSize, PIDTaskBuffer, &PIDTaskControlBlock); + /* definition and creation of PIDTask - Heating control*/ + osThreadStaticDef(PIDTask, startPIDTask, osPriorityRealtime, 0, PIDTaskStackSize, PIDTaskBuffer, &PIDTaskControlBlock); PIDTaskHandle = osThreadCreate(osThread(PIDTask), NULL); - osThreadStaticDef(MOVTask, startMOVTask, osPriorityNormal, 0, - MOVTaskStackSize, MOVTaskBuffer, &MOVTaskControlBlock); + /* definition and creation of MOVTask - Accelerometer management */ + osThreadStaticDef(MOVTask, startMOVTask, osPriorityNormal, 0, MOVTaskStackSize, MOVTaskBuffer, &MOVTaskControlBlock); MOVTaskHandle = osThreadCreate(osThread(MOVTask), NULL); - resetWatchdog(); /* Start scheduler */ diff --git a/workspace/TS100/Core/Threads/MOVThread.cpp b/workspace/TS100/Core/Threads/MOVThread.cpp index d35ebd89..d9d5d160 100644 --- a/workspace/TS100/Core/Threads/MOVThread.cpp +++ b/workspace/TS100/Core/Threads/MOVThread.cpp @@ -6,6 +6,7 @@ */ #include "BMA223.hpp" +#include "SC7A20.hpp" #include "BSP.h" #include "FreeRTOS.h" #include "I2C_Wrapper.hpp" @@ -56,6 +57,14 @@ void detectAccelerometerVersion() { DetectedAccelerometerVersion = 4; } } else +#endif +#ifdef ACCEL_SC7 + if (SC7A20::detect()) { + // Setup the SC7A20 Accelerometer + if (SC7A20::initalize()) { + DetectedAccelerometerVersion = 5; + } + } else #endif { // disable imu sensitivity @@ -86,13 +95,18 @@ inline void readAccelerometer(int16_t &tx, int16_t &ty, int16_t &tz, Orientation MSA301::getAxisReadings(tx, ty, tz); rotation = MSA301::getOrientation(); } else +#endif +#ifdef ACCEL_SC7 + if (DetectedAccelerometerVersion == 5) { + SC7A20::getAxisReadings(tx, ty, tz); + rotation = SC7A20::getOrientation(); + } else #endif { // do nothing :( } } void startMOVTask(void const *argument __unused) { - postRToSInit(); detectAccelerometerVersion(); osDelay(TICKS_100MS / 2); // wait ~50ms for setup of accel to finalise lastMovementTime = 0; @@ -153,6 +167,5 @@ void startMOVTask(void const *argument __unused) { } osDelay(TICKS_100MS); // Slow down update rate - power_check(); } } diff --git a/workspace/TS100/Core/Threads/POWThread.cpp b/workspace/TS100/Core/Threads/POWThread.cpp new file mode 100644 index 00000000..f87fed87 --- /dev/null +++ b/workspace/TS100/Core/Threads/POWThread.cpp @@ -0,0 +1,27 @@ +/* + * POWThread.cpp + * + * Created on: 16 Jan 2021 + * Author: Ralim + */ + +#include "BSP.h" +#include "FreeRTOS.h" +#include "QC3.h" +#include "Settings.h" +#include "cmsis_os.h" +#include "main.hpp" +#include "stdlib.h" +#include "task.h" + +// Small worker thread to handle power (mostly QC) related steps + + + +void startPOWTask(void const *argument __unused) { + postRToSInit(); + for (;;) { + osDelay(TICKS_100MS); // Slow down update rate + power_check(); + } +} diff --git a/workspace/TS100/Makefile b/workspace/TS100/Makefile index 9f0e98e3..e5abf41e 100644 --- a/workspace/TS100/Makefile +++ b/workspace/TS100/Makefile @@ -85,8 +85,8 @@ CPUFLAGS= -march=rv32imac \ DEV_LDFLAGS= -lstdc++ -nostartfiles -Xlinker --gc-sections --specs=nosys.specs -u _isatty -u _write -u _sbrk -u _read -u _close -u _fstat -u _lseek DEV_AFLAGS= -nostartfiles -ffreestanding -fno-common -Os -flto DEV_GLOBAL_DEFS= -DEV_CFLAGS= -MMD -MP -MF "$(@:%.o=%.d)" -MT "$(@:%.o=%.d)" -DEV_CXXFLAGS= -MMD -MP -MF "$(@:%.o=%.d)" -MT "$(@:%.o=%.d)" +DEV_CFLAGS= -MMD -MP -MF "$(@:%.o=%.d)" -MT "$@" +DEV_CXXFLAGS= -MMD -MP -MF "$(@:%.o=%.d)" -MT "$@" endif INCLUDES = -I$(APP_INC_DIR) \ diff --git a/workspace/TS100/version.h b/workspace/TS100/version.h index 0f2ac422..96fba0c7 100644 --- a/workspace/TS100/version.h +++ b/workspace/TS100/version.h @@ -4,4 +4,4 @@ * i.e.: BUILD_VERSION = 'Rel. v2.08' --> Will generated to: 'v2.08.1a2b3c4' */ -#define BUILD_VERSION "v2.13" +#define BUILD_VERSION "v2.14"