1
0
forked from me/IronOS

Merge branch 'master' into patch-5

This commit is contained in:
HanaO00
2021-01-16 12:18:36 +01:00
committed by GitHub
18 changed files with 394 additions and 204 deletions

View File

@@ -274,7 +274,7 @@
"Allow locking",
"buttons"
],
"desc": "When soldering, long press on both buttons, to lock them <D=disable | B=\"boost mode\" only | F=full locking>"
"desc": "When soldering, long press both buttons, to lock them <D=disable | B=\"boost mode\" only | F=full locking>"
}
}
}

View File

@@ -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. <DC 10V> <S 3.3V cellánként>"
"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 <C>"
"desc": "Hőmérséklet alvó módban <C/F>"
},
"SleepTimeout": {
"text2": [
"Alvás",
"időzítő"
],
"desc": "Alvás időzítő <perc/másodperc>"
"desc": "Alvási időzítő <perc/másodperc>"
},
"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 <C=Celsius F=Fahrenheit>"
"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 <A. automatikus B. balkezes J. jobbkezes>"
"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 <Watts>"
"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 <C/F>"
},
"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 <C/F>"
},
"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 <W>"
},
"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 <O=Off,L=Low,M=Medium,H=High>"
"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 <D=Disable, B=Boost only, F=Full locking>"
"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)"
}
}
}
}

View File

@@ -253,7 +253,7 @@
"Moc",
"impulsu"
],
"desc": "Utrzymuj moc impulsu na wybranym poziomie <W>"
"desc": "W przypadku używania powerbanku, utrzymuj moc na poziomie <W> aby nie uśpić powerbanku"
},
"TipGain": {
"text2": [
@@ -277,4 +277,4 @@
"desc": "W trybie lutowania, wciśnij oba przyciski aby je zablokować <O-Wyłączona, B-tylko Boost, P-pełna blokada>"
}
}
}
}

View File

@@ -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 <C>"
"desc": "Temperatura med spanjem"
},
"SleepTimeout": {
"text2": [
"Čas do",
"spanja"
],
"desc": "Čas pred spanjem <minute/sekunde>"
"desc": "Čas pred spanjem <S=sekunde | M=minute>"
},
"ShutdownTimeout": {
"text2": [
"Čas do",
"izklopa"
],
"desc": "Čas pred izklopom <minute>"
"desc": "Čas do izklopa <M=minute>"
},
"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 <C=celzija F=fahrenheita>"
"desc": "Enota za temperaturo <C=celzij | F=fahrenheit>"
},
"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 <S. samodejno L. levo D. desno>"
"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 <U=ugasnjeno | S=spajkanje | Z=spanje | V=spanje na sobni temperaturi>"
},
"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 <nastavitve z gumbi, dolg pritisk za izhod>"
},
"AdvancedSoldering": {
"text2": [
@@ -189,11 +189,11 @@
"Hitrost",
"besedila"
],
"desc": "Hitrost, s katero se prikazuje besedilo"
"desc": "Hitrost, s katero se prikazuje besedilo <P=počasi | H=hitro>"
},
"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 <Watts>"
"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 <O=Off,L=Low,M=Medium,H=High>"
"desc": "Občutljivost Hallove sonde za zaznavanje spanja <U=ugasnjen | N=nizka | S=srednja | V=visoka>"
},
"LockingMode": {
"text2": [
"Allow buttons",
"locking"
"Omogoči",
"zaklep gumbov"
],
"desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>"
"desc": "Za zaklep med spajkanjem drži oba gumba <O=onemogoči | L=le pospešeno | P=polno>"
}
}
}

View File

@@ -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

View File

@@ -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();
}

View File

@@ -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

View File

@@ -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

View File

@@ -9,7 +9,15 @@
#include <array>
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[] = { //

View File

@@ -0,0 +1,69 @@
/*
* SC7A20.cpp
*
* Created on: 18 Sep. 2020
* Author: Ralim
*/
#include <SC7A20.hpp>
#include <SC7A20_defines.h>
#include <array>
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];
}

View File

@@ -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_ */

View File

@@ -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_ */

View File

@@ -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;

View File

@@ -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 */

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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) \

View File

@@ -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"