Schlagwort-Archive: Panasonic

BitBastelei #558 – Panasonic Lumux Digitalkamera Reparaturversuch

BitBastelei #558 - Panasonic Lumux Digitalkamera Reparaturversuch

(1 GB) 00:16:41

2023-09-24 10:00 🛈

Dinge, die mit USB funktionieren sind praktisch – zumindest so lange, bis das zugehörige USB-Netzteil Unfug baut und alles Angeschlossene beschädigt. Dieses Schicksal hat eine Digitalkamera von Panasonic nun ereilt. Also: Schraubendreher raus, mal schauen, ob noch etwas zu retten ist.

Inhalt

  • 00:00 Die Kamera
  • 03:08 Tests mit anderen Spannungsquellen
  • 04:42 Zerlegerei
  • 05:21 Innenleben
  • 10:24 Kurzschlusssuche
  • 15:08 Fazit

Transparenz

Das Gerät wurde seinerzeit selbst gekauft und bezahlt.

BitNotice #138 – Panasonic Lumix DMC-FZ300

BitNotice #138 - Panasonic Lumix DMC-FZ300

(257 MB) 00:15:40

2018-10-24 13:45 🛈
Da meine EOS ja den Geist aufgegeben hatte sollte Ersatz her. Alles können, nix kosten. Oder so. Geworden ist es die Lunix DMX-FZ300. Diese hat als Bridge-Kamera zwar keine Möglichkeit das Objektiv zu wechseln und dürfte durch den kleineren Bildsensor eine schlechtere Bildqualität, besonders bei wenig Licht, liefern, aber 4k, Mikrofonanschluss, Klappdisplay und Zeitlupe klang doch irgendwo verlockend.

Das FPS-gestotter ist natürlich nur zur Demonstration des Problems und hat keinesfalls etwas damit zu tun, dass etwas mit der genutzten Kamera nicht stimmte 😉

Review mit weiteren Daten sowie den Ecken und Kanten: https://www.youtube.com/watch?v=0MuKRRq4xfc

Linux/Sane: Segfault mit Panasonic/Matsushita KVS-50xx-Scanner

Business as usual: Pünktlich zum Jahresanfang wird man von sämtlichen Vertragspartnern mit totem Baum zugeworfen. Glücklicherweise habe ich passende Scanner, die das Material in etwas besser verwaltbare Formen überführen können. Zuletzt verwendete ich dazu einen Panasonic/Matsushita KVS-5026, welchen ich aus dem Schrott retten konnte. Zwar habe ich noch einige schnellere Modelle, dieser hatte jedoch bisher die wenigsten Probleme mit Double-Feeding und ist durch die Bauform bei mir einfacher zu nutzen.

Leider war der Start dieses Jahr nicht ganz so erfolgreich – der Scanner wird korrekt erkannt, versuchte ich jedoch einen Scan zu starten gab es den allseits beliebten „Segmentation fault“. Boo.

Der Trick des letzten Problems half dieses mal leider nicht – auch die aktuelle GIT-Version zeigen den selben Fehler. Da es für das passende Backend kvs20xx keinen Maintainer gibt ist wohl auch keine Besserung zu erwarten.

OK, ich bin kein C-Programmierer, habe keine Ahnung von Debuggern unter X86 und produziere auch sonst eher nicht qualitätsorientieren Code – was kann schon schief gehen.

Ein paar Debug-Textausgaben später konnte ich den Fehler auf die Funktion sane_open, genauer die erste „echte“ Codezeile dort „for (i = 0; devlist[i]; i++)“ eingrenzen. Offenbar wurde früher durch sane automatisch ein Scan iniziiert und die devlist daher gefüllt. In der aktuellen Version scheint es beim Aufruf leer zu sein und mit NULL hantieren mag C wohl nicht. Als workaround konnte ich ein paar Zeilen des Fujitsu-Treibers ruberkopieren, welche die Inizialisierung ggf. nachholen. Auch diese musste etwas angepasst werden um mit dem direkten Aufruf umgehen zu können. Immerhin: Der Scanner läuft und ich kann weitermachen. Fein.

diff --git a/backend/kvs20xx.c b/backend/kvs20xx.c
index 955252a3..56095cb5 100644
--- a/backend/kvs20xx.c
+++ b/backend/kvs20xx.c
@@ -1,6 +1,8 @@
 /*
    Copyright (C) 2008, Panasonic Russia Ltd.
    Copyright (C) 2010, m. allan noah
+
+   Attn: Local workaround 2017-02-11 Florian Knodt, sane-kvs@adlerweb.info
 */
 /*
    Panasonic KV-S20xx USB-SCSI scanners.
@@ -141,6 +143,8 @@ sane_get_devices (const SANE_Device *** device_list,
       devlist = NULL;
     }
 
+  sanei_usb_init();
+
   for (curr_scan_dev = 0;
        curr_scan_dev < sizeof (known_devices) / sizeof (known_devices[0]);
        curr_scan_dev++)
@@ -156,7 +160,10 @@ sane_get_devices (const SANE_Device *** device_list,
 			       known_devices[curr_scan_dev].scanner.model,
 			       NULL, -1, -1, -1, -1, attach);
     }
-  *device_list = (const SANE_Device **) devlist;
+
+  if(device_list && devlist){
+      *device_list = (const SANE_Device **) devlist;
+  }
   return SANE_STATUS_GOOD;
 }
 
@@ -168,10 +175,22 @@ sane_open (SANE_String_Const devname, SANE_Handle * handle)
   struct scanner *s;
   SANE_Int h, bus;
   SANE_Status st;
+
+  if (devlist) {
+    DBG (DBG_INFO, "Using prepopulated device list\n");
+  }else{
+    DBG (DBG_INFO, "Device list empty - scanning...\n");
+    st = sane_get_devices(NULL,0);
+    if(st != SANE_STATUS_GOOD){
+      DBG (DBG_WARN, "Scan failed\n");
+      return st;
+    }
+  }
+
   for (i = 0; devlist[i]; i++)
     {
       if (!strcmp (devlist[i]->name, devname))
-	break;
+       break;
     }
   if (!devlist[i])
     return SANE_STATUS_INVAL;

 

Upstream: #315625