.NET Gadgeteer: Achtung vor der Speicherkarte

Wer sich nach der vor wenigen Tagen veröffentlichten Einführung in den Gadgeteer selbst eine solche Platine zulegen möchte, sollte dem im Paket befindlichen SD-Kartenmodul nicht allzu viel Vertrauen schenken.

In Pocket speichern vorlesen Druckansicht 1 Kommentar lesen
Lesezeit: 2 Min.
Von
  • Tam Hanna

Wer sich nach der vor wenigen Tagen veröffentlichten Einführung in den Gadgeteer selbst eine solche Platine zulegen möchte, sollte dem im Paket befindlichen SD-Kartenmodul nicht allzu viel Vertrauen schenken.

Dieses Ergebnis folgt aus einigen frustrierenden Tagen im Labor. Es war mir (und einem befreundeten Microsoft Developers's Advocate) nicht möglich, das Gerät zum zuverlässigen Einlesen eines auf der Speicherkarten befindlichen Bitmaps zu animieren.

Normalerweise beginnt die Interaktion mit einer Speicherkarte durch die Instanziierung eines StorageDevice-Objekts. Wenn der Gadgeteer mit einer installierten Speicherkarte angeworfen wird, führt diese Vorgehensweise trotz des Automountings zur Rückgabe von null – weitere Zugriffe schlagen fehl.

Wer seine Nutzer dazu zwingen kann, die Karte erst nach dem Start des Geräts einzustecken, wird mitunter folgende Vorgehensweise wählen – der hier gezeigte Code muss in einer Polling-Schleife regelmäßig aufgerufen werden:

  if (sdCard.IsCardMounted == true)
{
GT.StorageDevice myDev = sdCard.GetStorageDevice();
if (myDev != null)
{
if (myBitmap == null)
{
int i;
try
{
String[] files = myDev.ListRootDirectoryFiles();
String aDev = myDev.RootDirectory;
String[] file2 =
myDev.ListRootDirectorySubdirectories();
FileStream aStream=myDev.Open(files[0],
System.IO.FileMode.Open,System.IO
.FileAccess.Read);

for (i = 0; i < 1500; i++)
{
int inData=aStream.ReadByte();
if (inData != -1)
{
myBytes[i] = (byte)inData;
System.Threading.Thread.Sleep(10);
}
else
{
break;
}

}

aStream.Close();
myBitmap = new Bitmap(myBytes,
Bitmap.BitmapImageType.Gif);
}
catch (Exception e)
{
led_Strip.SetLED(6, true);
display_N18.SimpleGraphics.DisplayText
(e.Message, Resources.GetFont(Resources.
FontResources.NinaB), GT.Color.Red, 20, 100);
}

}
else
{
display_N18.Draw(myBitmap, (uint)myX, (uint)myY);

}
}
}

Leider führt auch sie nicht zum Erfolg. Der Gadgeteer erkennt – je nach Lust und Laune – zwischen 20 und 50 Prozent der auf der Karte befindlichen Daten. Beim Einlesen kommt es dann sowieso zu einem EA-Fehler.

Aus meiner Sicht ist von der Verwendung des SD-Kartenmoduls – zumindest zum jetzigen Zeitpunkt – nur abzuraten. Das Forum von GHI ist mit Dutzenden Beschwerden von anderen Entwicklern gespickt, weshalb von einem "Serienfehler" auszugehen ist ...

PS: Microsoft ist Inhaber eines Schlüsselpatents im Bereich der SD-Karten – aus diesem Blickwinkel ist die Situation einfach nur quixotisch. ()