UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala Ubuntu Touch 24.04-1.3. Současně oznámila, že nadcházející větší vydání 24.04-2.0 bude mít modernější webový prohlížeč.
Ploopy po DIY trackballech či sluchátkách představuje nový externí DIY trackpoint se čtyřmi tlačítky Bean. Obsahuje snímač Texas Instruments TMAG5273, spínače Omron D2LS-21 a řadič RP2040, používá firmware QMK. Schémata jsou na GitHubu; sadu lze předobjednat za 69 kanadských dolarů (bez dopravy a DPH).
Mozilla před dvěma týdny na svém blogu oznámila, že díky Claude Mythos Preview bylo ve Firefoxu nalezeno a opraveno 271 bezpečnostních chyb. Včera vyšel na Mozilla Hacks článek s podrobnějšími informacemi. Z 271 bezpečnostních chyb mělo 180 chyb vysokou závažnost, 80 chyb střední závažnost a 11 chyb nízkou závažnost. Celkově bylo v dubnu ve Firefoxu opraveno 423 bezpečnostních chyb. Čísla CVE nemusí být přiřazována jednotlivým chybám. CVE-2026-6784 například představuje 154 bezpečnostních chyb.
Před týdnem zranitelnost Copy Fail. Dnes zranitelnost Dirty Frag. Běžný uživatel může na Linuxu získat práva roota (lokální eskalaci práv). Na většině linuxových distribucí vydaných od roku 2017. Aktuálně bez oficiální záplaty a CVE čísla [oss-security mailing list].
Ačkoli je papež Lev XIV. hlavou katolické církve a stojí v čele více než miliardy věřících po celém světě, také on někdy řeší všední potíže. A kdo v životě neměl problémy se zákaznickou linkou? Krátce poté, co nastoupil do úřadu, musel papež se svou bankou řešit změnu údajů. Operátorka ale nechtěla uvěřit, s kým mluví, a Svatému otci zavěsila.
Incus, komunitní fork nástroje pro správu kontejnerů LXD, byl vydán ve verzi 7.0 LTS (YouTube). Stejně tak související LXC a LXCFS.
Google Chrome 148 byl prohlášen za stabilní. Nejnovější stabilní verze 148.0.7778.96 přináší řadu novinek z hlediska uživatelů i vývojářů. Vypíchnout lze Prompt API (demo) pro přímý přístup k AI v zařízení. Podrobný přehled v poznámkách k vydání. Opraveno bylo 127 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Richard Hughes oznámil, že po společnostech Red Hat a Framework a organizacích OSFF a Linux Foundation, službu Linux Vendor Firmware Service (LVFS) umožňující aktualizovat firmware zařízení na počítačích s Linuxem, nově sponzorují také společnosti Dell a Lenovo. Do dnešního dne bylo díky LVFS provedeno více než 145 milionů aktualizací firmwarů od více než 100 různých výrobců na milionech linuxových zařízení.
Americké technologické společnosti Microsoft, Google a xAI souhlasily, že vládě Spojených států poskytnou přístup k novým modelům umělé inteligence (AI) před jejich uvedením na trh. Oznámila to americká vláda, která tak bude moci prověřit, zda modely nepředstavují hrozbu pro národní bezpečnost. Oznámení podtrhuje rostoucí obavy Washingtonu z rizik spojených s výkonnými AI systémy. Americké úřady chtějí v rámci předběžného přístupu
… více »Společnost Valve zveřejnila (GitLab) nákresy ovladače Steam Controller a puku. Pro všechny, kdo by jej chtěli hacknout nebo modifikovat, případně pro ně navrhnout nějaké příslušenství. Pod licencí Creative Commons (CC BY-NC-SA 4.0).
uint8_t search_sensors(void) {
uint8_t i;
uint8_t id[OW_ROMCODE_SIZE];
uint8_t diff;
bool akva1, akva2, lednice, mistnost;
while(1) {
//writestr("+4 NACITAM SENZORY");
//lfcr();
m_delay_ms(250);
nSensors = 0;
akva1_id = -1;
akva2_id = -1;
lednice_id = -1;
mistnost_id = -1;
for(uint8_t iN = 0; iN<MAXSENSORS; iN++) { // nemá vliv na chování
for(uint8_t iN2 = 0; iN2<OW_ROMCODE_SIZE; iN2++) {
gSensorIDs[iN][iN2] = 0;
}
}
for(diff = OW_SEARCH_FIRST; diff != OW_LAST_DEVICE && nSensors < MAXSENSORS; ) {
DS18X20_find_sensor( &diff, &id[0] );
if( diff == OW_PRESENCE_ERR ) break;
if( diff == OW_DATA_ERR ) break;
akva1 = true;
akva2 = true;
lednice = true;
mistnost = true;
for (i=0;i<OW_ROMCODE_SIZE;i++) {
gSensorIDs[nSensors][i]=id[i];
if(akva1) {
eeprom_busy_wait();
if( gSensorIDs[nSensors][i] != eeprom_read_byte((uint8_t*)(EEPROM_AKVA1_SENSOR+i)) ) akva1 = false;
}
if(akva2) {
eeprom_busy_wait();
if( gSensorIDs[nSensors][i] != eeprom_read_byte((uint8_t*)(EEPROM_AKVA2_SENSOR+i)) ) akva2 = false;
}
if(lednice) {
eeprom_busy_wait();
if( gSensorIDs[nSensors][i] != eeprom_read_byte((uint8_t*)(EEPROM_LEDNICE_SENSOR+i)) ) lednice = false;
}
if(mistnost) {
eeprom_busy_wait();
if( gSensorIDs[nSensors][i] != eeprom_read_byte((uint8_t*)(EEPROM_MISTNOST_SENSOR+i)) ) mistnost = false;
}
}
if(akva1 && !akva2 && !lednice && !mistnost) {
akva1_id = nSensors;
leds_add(port_led_akva1);
}
if(!akva1 && akva2 && !lednice && !mistnost) {
akva2_id = nSensors;
leds_add(port_led_akva2);
}
if(!akva1 && !akva2 && lednice && !mistnost) {
lednice_id = nSensors;
leds_add(port_led_lednice);
}
if(!akva1 && !akva2 && !lednice && mistnost) {
mistnost_id = nSensors;
}
nSensors++;
}
if( nSensors ) return nSensors;
leds_search();
leds_blink(LED_BLINK_FAST_INTERVAL);
m_delay_s(1);
}
}
void vypsat_senzory() {
nSensors = search_sensors();
for ( int i=0; i<nSensors; i++ ) {
writestr("#");
writestr_integer((int) i);
if(i == akva1_id)
writestr(":AKVA1:");
if(i == akva2_id)
writestr(":AKVA2:");
if(i == lednice_id)
writestr(":LEDNICE:");
if(i == mistnost_id)
writestr(":MISTNOST:");
writestr(" ");
writetemp(getTemp(i));
lfcr();
}
}
void uloz_senzor( uint8_t *id, uint8_t kam ) {
for (int i=0; i<OW_ROMCODE_SIZE; i++) {
eeprom_busy_wait();
eeprom_write_byte((uint8_t*)(kam+i),id[i]);
}
}
void nastav_senzor(char cilselekt) {
uint8_t sensT = (uint8_t)(rx_buffer[0]-48);
writestr_integer((int) sensT); lfcr();
if ( sensT < nSensors ) {
if(cilselekt == '1')
uloz_senzor(&gSensorIDs[sensT][0], EEPROM_AKVA1_SENSOR);
else if(cilselekt == '2')
uloz_senzor(&gSensorIDs[sensT][0], EEPROM_AKVA2_SENSOR);
else if(cilselekt == 'l')
uloz_senzor(&gSensorIDs[sensT][0], EEPROM_LEDNICE_SENSOR);
else if(cilselekt == 'm')
uloz_senzor(&gSensorIDs[sensT][0], EEPROM_MISTNOST_SENSOR);
else errorWrite(1);
writestr("+1 OK");
lfcr();
nSensors = search_sensors();
vypsat_senzory();
}
else
errorWrite(1);
}
void eeprog_vstup_podprogram() {
if(citac_ee > 0) {
for (uint8_t i=RX_BUFFER_SIZE; i>0; i--) rx_buffer[i]=0;
rs232enter=0;
rs232ready=true;
while(1) {
if(rs232enter) {
rs232ready=false;
if(cmdtest('L','S',0))
vypsat_senzory();
else if(cmdtest('S','A',1))
nastav_senzor('1');
else if(cmdtest('S','B',1))
nastav_senzor('2');
else if(cmdtest('S','L',1))
nastav_senzor('l');
else if(cmdtest('S','M',1))
nastav_senzor('m');
else if(cmdtest('E','Q',0)) {
writestr("+1 OK"); lfcr();
break;
}
else
errorWrite(3);
for (uint8_t i=RX_BUFFER_SIZE; i>0; i--) rx_buffer[i]=0;
rs232enter=0;
rs232ready=true;
}
}
}
else
errorWrite(4);
}
Samotné search_sensors(void) funguje dobře, opravdu porovnává všechny bajty identifikace senzoru vs. uložená identifikace v eeprom. Problém nastává, pokud chci uložit nový senzor. Všechny se ukládají dobře, kromě 1.(senzor #0). Pokud se jednoduše snažím uložit senzor 0 jako cokoliv, tak je první bajt vždy 0x00. Takhle vypadá část eepromky: 00FBFA97020000A728D6F797020000B72820BA9702000072. Správně ale má být 28FBFA97020000A728D6F797020000B72820BA9702000072. Co mám špatně?
Řešení dotazu:
Tiskni
Sdílej: