Reorganize drivers and utility modules into lib/ subdirectory and update server and upload scripts
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
import os
|
||||
import machine
|
||||
from machine import Pin, SDCard
|
||||
|
||||
class SDCardManager:
|
||||
"""Utility class to mount and manage the onboard microSD card slot.
|
||||
|
||||
Uses SDMMC 1-bit mode on Pins: sck=2, cmd=1, data0=3.
|
||||
"""
|
||||
|
||||
def __init__(self, mount_point='/sd'):
|
||||
self.mount_point = mount_point
|
||||
self.sd = None
|
||||
self.mounted = False
|
||||
|
||||
def mount(self):
|
||||
"""Initializes the SD card and mounts it to the filesystem.
|
||||
|
||||
Returns:
|
||||
bool: True if mounted successfully, False otherwise.
|
||||
"""
|
||||
if self.mounted:
|
||||
print(f"SD card already mounted at {self.mount_point}")
|
||||
return True
|
||||
|
||||
try:
|
||||
print("Initializing SDCard (SDMMC 1-bit mode: sck=2, cmd=1, data0=3)...")
|
||||
# slot=1 uses the SDMMC peripheral on the ESP32-S3
|
||||
self.sd = SDCard(slot=1, width=1, sck=2, cmd=1, data=(3,))
|
||||
|
||||
print(f"Mounting SD card to {self.mount_point}...")
|
||||
os.mount(self.sd, self.mount_point)
|
||||
self.mounted = True
|
||||
print("SD card mounted successfully!")
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Failed to mount SD card: {e}")
|
||||
self.sd = None
|
||||
self.mounted = False
|
||||
return False
|
||||
|
||||
def unmount(self):
|
||||
"""Unmounts the SD card from the filesystem."""
|
||||
if not self.mounted:
|
||||
return True
|
||||
|
||||
try:
|
||||
print(f"Unmounting SD card from {self.mount_point}...")
|
||||
os.umount(self.mount_point)
|
||||
self.mounted = False
|
||||
self.sd = None
|
||||
print("SD card unmounted.")
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Failed to unmount SD card: {e}")
|
||||
return False
|
||||
|
||||
def is_mounted(self):
|
||||
"""Returns True if the card is currently mounted."""
|
||||
return self.mounted
|
||||
|
||||
def list_files(self):
|
||||
"""Lists files on the SD card if mounted.
|
||||
|
||||
Returns:
|
||||
list: List of filenames or None if not mounted.
|
||||
"""
|
||||
if not self.mounted:
|
||||
print("SD card is not mounted.")
|
||||
return None
|
||||
try:
|
||||
return os.listdir(self.mount_point)
|
||||
except Exception as e:
|
||||
print(f"Error listing SD card files: {e}")
|
||||
return None
|
||||
|
||||
def get_info(self):
|
||||
"""Returns storage information of the SD card.
|
||||
|
||||
Returns:
|
||||
dict: {total_bytes, free_bytes} or None on error.
|
||||
"""
|
||||
if not self.mounted:
|
||||
return None
|
||||
try:
|
||||
stat = os.statvfs(self.mount_point)
|
||||
block_size = stat[0]
|
||||
total_blocks = stat[2]
|
||||
free_blocks = stat[3]
|
||||
|
||||
return {
|
||||
"total_bytes": total_blocks * block_size,
|
||||
"free_bytes": free_blocks * block_size
|
||||
}
|
||||
except Exception as e:
|
||||
print(f"Error getting SD card info: {e}")
|
||||
return None
|
||||
Reference in New Issue
Block a user