Merge pull request 'Add Checkbox connection type (SATA/NVME) to label' (#22) from feature/drive-type-marker into main
Reviewed-on: #22
This commit is contained in:
@ -18,7 +18,6 @@ IPC_CREAT = 0o1000
|
|||||||
|
|
||||||
terminate = False
|
terminate = False
|
||||||
|
|
||||||
|
|
||||||
class TDriveData(ctypes.Structure):
|
class TDriveData(ctypes.Structure):
|
||||||
_fields_ = [
|
_fields_ = [
|
||||||
("caDriveIndex", ctypes.c_char * STR_BUFFER_SIZE),
|
("caDriveIndex", ctypes.c_char * STR_BUFFER_SIZE),
|
||||||
@ -29,6 +28,7 @@ class TDriveData(ctypes.Structure):
|
|||||||
("caDriveShredDuration", ctypes.c_char * STR_BUFFER_SIZE),
|
("caDriveShredDuration", ctypes.c_char * STR_BUFFER_SIZE),
|
||||||
("caDriveCapacity", ctypes.c_char * STR_BUFFER_SIZE),
|
("caDriveCapacity", ctypes.c_char * STR_BUFFER_SIZE),
|
||||||
("caDriveState", ctypes.c_char * STR_BUFFER_SIZE),
|
("caDriveState", ctypes.c_char * STR_BUFFER_SIZE),
|
||||||
|
("caDriveConnectionType", ctypes.c_char * STR_BUFFER_SIZE),
|
||||||
("caDriveModelFamily", ctypes.c_char * STR_BUFFER_SIZE),
|
("caDriveModelFamily", ctypes.c_char * STR_BUFFER_SIZE),
|
||||||
("caDriveModelName", ctypes.c_char * STR_BUFFER_SIZE),
|
("caDriveModelName", ctypes.c_char * STR_BUFFER_SIZE),
|
||||||
("caDriveSerialnumber", ctypes.c_char * STR_BUFFER_SIZE),
|
("caDriveSerialnumber", ctypes.c_char * STR_BUFFER_SIZE),
|
||||||
@ -75,6 +75,7 @@ def create_drive_objects(drive_info):
|
|||||||
smart_error_count=int(drive_info["driveErrors"]),
|
smart_error_count=int(drive_info["driveErrors"]),
|
||||||
shred_timestamp=int(drive_info["driveShredTimestamp"]),
|
shred_timestamp=int(drive_info["driveShredTimestamp"]),
|
||||||
shred_duration=int(drive_info["driveShredDuration"]),
|
shred_duration=int(drive_info["driveShredDuration"]),
|
||||||
|
connection_type=drive_info["driveConnectionType"],
|
||||||
)
|
)
|
||||||
|
|
||||||
rehdd_info = layouter.ReHddInfo(
|
rehdd_info = layouter.ReHddInfo(
|
||||||
@ -88,8 +89,8 @@ def create_drive_objects(drive_info):
|
|||||||
def worker(queue_id, test_mode=False):
|
def worker(queue_id, test_mode=False):
|
||||||
try:
|
try:
|
||||||
while not terminate:
|
while not terminate:
|
||||||
if test_mode:
|
|
||||||
time.sleep(3)
|
time.sleep(3)
|
||||||
|
if test_mode:
|
||||||
drive_info = {
|
drive_info = {
|
||||||
"driveIndex": "42",
|
"driveIndex": "42",
|
||||||
"driveHours": 44,
|
"driveHours": 44,
|
||||||
@ -99,6 +100,7 @@ def worker(queue_id, test_mode=False):
|
|||||||
"driveShredDuration": 0,
|
"driveShredDuration": 0,
|
||||||
"driveCapacity": 42,
|
"driveCapacity": 42,
|
||||||
"driveState": "shredded",
|
"driveState": "shredded",
|
||||||
|
"driveConnectionType": "sata",
|
||||||
"driveModelFamily": "modelFamily",
|
"driveModelFamily": "modelFamily",
|
||||||
"driveModelName": "modelName",
|
"driveModelName": "modelName",
|
||||||
"driveSerialnumber": "serial",
|
"driveSerialnumber": "serial",
|
||||||
@ -145,6 +147,7 @@ def worker(queue_id, test_mode=False):
|
|||||||
),
|
),
|
||||||
"driveCapacity": int(d.caDriveCapacity.decode().strip("\x00")),
|
"driveCapacity": int(d.caDriveCapacity.decode().strip("\x00")),
|
||||||
"driveState": d.caDriveState.decode().strip("\x00"),
|
"driveState": d.caDriveState.decode().strip("\x00"),
|
||||||
|
"driveConnectionType": d.caDriveConnectionType.decode().strip("\x00"),
|
||||||
"driveModelFamily": d.caDriveModelFamily.decode().strip("\x00"),
|
"driveModelFamily": d.caDriveModelFamily.decode().strip("\x00"),
|
||||||
"driveModelName": d.caDriveModelName.decode().strip("\x00"),
|
"driveModelName": d.caDriveModelName.decode().strip("\x00"),
|
||||||
"driveSerialnumber": d.caDriveSerialnumber.decode().strip("\x00"),
|
"driveSerialnumber": d.caDriveSerialnumber.decode().strip("\x00"),
|
||||||
|
|||||||
@ -43,23 +43,7 @@ int main(void)
|
|||||||
sprintf(msgQueueData.driveData.caDriveErrors, "%i", 1);
|
sprintf(msgQueueData.driveData.caDriveErrors, "%i", 1);
|
||||||
sprintf(msgQueueData.driveData.caDriveShredTimestamp, "%li", 71718LU);
|
sprintf(msgQueueData.driveData.caDriveShredTimestamp, "%li", 71718LU);
|
||||||
sprintf(msgQueueData.driveData.caDriveShredDuration, "%li", 81718LU);
|
sprintf(msgQueueData.driveData.caDriveShredDuration, "%li", 81718LU);
|
||||||
/*
|
|
||||||
switch (drive->connectionType)
|
|
||||||
{
|
|
||||||
case Drive::USB:
|
|
||||||
strcpy(msgQueueData.driveData.caDriveConnectionType, "usb");
|
|
||||||
break;
|
|
||||||
case Drive::SATA:
|
|
||||||
strcpy(msgQueueData.driveData.caDriveConnectionType, "sata");
|
strcpy(msgQueueData.driveData.caDriveConnectionType, "sata");
|
||||||
break;
|
|
||||||
case Drive::NVME:
|
|
||||||
strcpy(msgQueueData.driveData.caDriveConnectionType, "nvme");
|
|
||||||
break;
|
|
||||||
case Drive::UNKNOWN:
|
|
||||||
default:
|
|
||||||
strcpy(msgQueueData.driveData.caDriveConnectionType, "na");
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
sprintf(msgQueueData.driveData.caDriveReHddVersion, REHDD_VERSION);
|
sprintf(msgQueueData.driveData.caDriveReHddVersion, REHDD_VERSION);
|
||||||
|
|
||||||
std::cout << "Sending message to queue..." << std::endl;
|
std::cout << "Sending message to queue..." << std::endl;
|
||||||
|
|||||||
@ -28,7 +28,7 @@ typedef struct
|
|||||||
char caDriveShredDuration[STR_BUFFER_SIZE];
|
char caDriveShredDuration[STR_BUFFER_SIZE];
|
||||||
char caDriveCapacity[STR_BUFFER_SIZE];
|
char caDriveCapacity[STR_BUFFER_SIZE];
|
||||||
char caDriveState[STR_BUFFER_SIZE];
|
char caDriveState[STR_BUFFER_SIZE];
|
||||||
// char caDriveConnectionType[STR_BUFFER_SIZE];
|
char caDriveConnectionType[STR_BUFFER_SIZE];
|
||||||
char caDriveModelFamily[STR_BUFFER_SIZE];
|
char caDriveModelFamily[STR_BUFFER_SIZE];
|
||||||
char caDriveModelName[STR_BUFFER_SIZE];
|
char caDriveModelName[STR_BUFFER_SIZE];
|
||||||
char caDriveSerialnumber[STR_BUFFER_SIZE];
|
char caDriveSerialnumber[STR_BUFFER_SIZE];
|
||||||
|
|||||||
59
layouter.py
59
layouter.py
@ -34,6 +34,7 @@ logging.basicConfig(
|
|||||||
class DriveData:
|
class DriveData:
|
||||||
drive_index: int
|
drive_index: int
|
||||||
drive_state: str
|
drive_state: str
|
||||||
|
drive_connection_type: str
|
||||||
modelfamily: str
|
modelfamily: str
|
||||||
modelname: str
|
modelname: str
|
||||||
capacity: int
|
capacity: int
|
||||||
@ -48,6 +49,7 @@ class DriveData:
|
|||||||
@dataclasses.dataclass
|
@dataclasses.dataclass
|
||||||
class DriveDataJson:
|
class DriveDataJson:
|
||||||
state: str
|
state: str
|
||||||
|
contype: str
|
||||||
fam: str
|
fam: str
|
||||||
name: str
|
name: str
|
||||||
cap: int
|
cap: int
|
||||||
@ -61,6 +63,7 @@ class DriveDataJson:
|
|||||||
|
|
||||||
@dataclasses.dataclass
|
@dataclasses.dataclass
|
||||||
class DriveDataPrintable:
|
class DriveDataPrintable:
|
||||||
|
connectiontype: str
|
||||||
modelfamily: str
|
modelfamily: str
|
||||||
modelname: str
|
modelname: str
|
||||||
capacity: str
|
capacity: str
|
||||||
@ -132,6 +135,7 @@ def cut_string(max_length, data, direction="end"):
|
|||||||
|
|
||||||
def format_to_printable(drive):
|
def format_to_printable(drive):
|
||||||
return DriveDataPrintable(
|
return DriveDataPrintable(
|
||||||
|
drive.drive_connection_type,
|
||||||
cut_string(20, re.sub(r"[^a-zA-Z0-9. ]", "", drive.modelfamily), "end"),
|
cut_string(20, re.sub(r"[^a-zA-Z0-9. ]", "", drive.modelfamily), "end"),
|
||||||
cut_string(20, re.sub(r"[^a-zA-Z0-9. ]", "", drive.modelname), "end"),
|
cut_string(20, re.sub(r"[^a-zA-Z0-9. ]", "", drive.modelname), "end"),
|
||||||
cut_string(20, human_readable_capacity(drive.capacity), "end"),
|
cut_string(20, human_readable_capacity(drive.capacity), "end"),
|
||||||
@ -149,17 +153,19 @@ def format_to_printable(drive):
|
|||||||
cut_string(30, str(datetime.timedelta(seconds=drive.shred_duration)), "end"),
|
cut_string(30, str(datetime.timedelta(seconds=drive.shred_duration)), "end"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def draw_text(drawable, printable_data, font_regular, font_bold, font_bold_bigger):
|
def draw_text(drawable, printable_data, font_regular, font_bold, font_bold_bigger):
|
||||||
"""Draws formatted text with Cycles and Errors on one row."""
|
"""Draws formatted text with Cycles and Errors on one row."""
|
||||||
|
y_start = 4
|
||||||
line_height = 26
|
line_height = 26
|
||||||
label_x = TEXT_X_OFFSET
|
label_x = TEXT_X_OFFSET
|
||||||
value_offset = 115
|
value_offset = 115
|
||||||
right_field_spacing = 200 # Horizontal gap between Cycles and Errors
|
right_field_spacing = 200 # Horizontal gap between Cycles and Errors
|
||||||
x_capacity = 520
|
x_capacity = 520
|
||||||
y_capacity = 142
|
y_capacity = 142
|
||||||
y_start = 4
|
x_connection_type = 600
|
||||||
|
y_connection_type = y_start
|
||||||
|
y_spacing_connection_type = 25
|
||||||
|
|
||||||
|
|
||||||
# Serial Number
|
# Serial Number
|
||||||
drawable.text((label_x, y_start), "Serial:", fill=0, font=font_bold)
|
drawable.text((label_x, y_start), "Serial:", fill=0, font=font_bold)
|
||||||
@ -246,6 +252,49 @@ def draw_text(drawable, printable_data, font_regular, font_bold, font_bold_bigge
|
|||||||
font=font_bold_bigger,
|
font=font_bold_bigger,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (printable_data.connectiontype == "sata"):
|
||||||
|
drawable.text(
|
||||||
|
(x_connection_type, y_connection_type),
|
||||||
|
"⬤ SATA",
|
||||||
|
fill=0,
|
||||||
|
font=font_regular,
|
||||||
|
)
|
||||||
|
|
||||||
|
drawable.text(
|
||||||
|
(x_connection_type, y_connection_type+y_spacing_connection_type),
|
||||||
|
"◯ NVME",
|
||||||
|
fill=0,
|
||||||
|
font=font_regular,
|
||||||
|
)
|
||||||
|
elif (printable_data.connectiontype == "nvme"):
|
||||||
|
drawable.text(
|
||||||
|
(x_connection_type, y_connection_type),
|
||||||
|
"◯ SATA",
|
||||||
|
fill=0,
|
||||||
|
font=font_regular,
|
||||||
|
)
|
||||||
|
|
||||||
|
drawable.text(
|
||||||
|
(x_connection_type, y_connection_type+y_spacing_connection_type),
|
||||||
|
"⬤ NVME",
|
||||||
|
fill=0,
|
||||||
|
font=font_regular,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
drawable.text(
|
||||||
|
(x_connection_type, y_connection_type),
|
||||||
|
"◯ SATA",
|
||||||
|
fill=0,
|
||||||
|
font=font_regular,
|
||||||
|
)
|
||||||
|
|
||||||
|
drawable.text(
|
||||||
|
(x_connection_type, y_connection_type+y_spacing_connection_type),
|
||||||
|
"◯ NVME",
|
||||||
|
fill=0,
|
||||||
|
font=font_regular,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def draw_qr_code(image, data):
|
def draw_qr_code(image, data):
|
||||||
"""
|
"""
|
||||||
@ -270,7 +319,6 @@ def draw_qr_code(image, data):
|
|||||||
region = (5, 5, 5 + QR_CODE_SIZE, 5 + QR_CODE_SIZE)
|
region = (5, 5, 5 + QR_CODE_SIZE, 5 + QR_CODE_SIZE)
|
||||||
image.paste(qr_img, box=region)
|
image.paste(qr_img, box=region)
|
||||||
|
|
||||||
|
|
||||||
def draw_outline(drawable, margin, width, output_width, output_height):
|
def draw_outline(drawable, margin, width, output_width, output_height):
|
||||||
"""
|
"""
|
||||||
Draws a rectangular outline on the drawable canvas.
|
Draws a rectangular outline on the drawable canvas.
|
||||||
@ -299,13 +347,13 @@ def draw_outline(drawable, margin, width, output_width, output_height):
|
|||||||
for line in lines:
|
for line in lines:
|
||||||
drawable.line(line, fill=0, width=width)
|
drawable.line(line, fill=0, width=width)
|
||||||
|
|
||||||
|
|
||||||
def generate_image(drive, rehdd_info, output_file):
|
def generate_image(drive, rehdd_info, output_file):
|
||||||
"""Generates an image containing drive data and a QR code."""
|
"""Generates an image containing drive data and a QR code."""
|
||||||
try:
|
try:
|
||||||
|
|
||||||
drive_json = DriveDataJson(
|
drive_json = DriveDataJson(
|
||||||
state=drive.drive_state,
|
state=drive.drive_state,
|
||||||
|
contype=drive.drive_connection_type,
|
||||||
fam=drive.modelfamily,
|
fam=drive.modelfamily,
|
||||||
name=drive.modelname,
|
name=drive.modelname,
|
||||||
cap=drive.capacity,
|
cap=drive.capacity,
|
||||||
@ -346,6 +394,7 @@ def main():
|
|||||||
|
|
||||||
temp_drive = DriveData(
|
temp_drive = DriveData(
|
||||||
drive_index=0,
|
drive_index=0,
|
||||||
|
drive_connection_type="sata",
|
||||||
drive_state="shredded",
|
drive_state="shredded",
|
||||||
modelfamily='Toshiba 2.5" HDD MK..65GSSX',
|
modelfamily='Toshiba 2.5" HDD MK..65GSSX',
|
||||||
modelname="TOSHIBA MK3265GSDX",
|
modelname="TOSHIBA MK3265GSDX",
|
||||||
|
|||||||
BIN
output.png
BIN
output.png
Binary file not shown.
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.6 KiB |
@ -43,6 +43,7 @@ class TDriveData(ctypes.Structure):
|
|||||||
("caDriveShredDuration", ctypes.c_char * STR_BUFFER_SIZE),
|
("caDriveShredDuration", ctypes.c_char * STR_BUFFER_SIZE),
|
||||||
("caDriveCapacity", ctypes.c_char * STR_BUFFER_SIZE),
|
("caDriveCapacity", ctypes.c_char * STR_BUFFER_SIZE),
|
||||||
("caDriveState", ctypes.c_char * STR_BUFFER_SIZE),
|
("caDriveState", ctypes.c_char * STR_BUFFER_SIZE),
|
||||||
|
("caDriveConnectionType", ctypes.c_char * STR_BUFFER_SIZE),
|
||||||
("caDriveModelFamily", ctypes.c_char * STR_BUFFER_SIZE),
|
("caDriveModelFamily", ctypes.c_char * STR_BUFFER_SIZE),
|
||||||
("caDriveModelName", ctypes.c_char * STR_BUFFER_SIZE),
|
("caDriveModelName", ctypes.c_char * STR_BUFFER_SIZE),
|
||||||
("caDriveSerialnumber", ctypes.c_char * STR_BUFFER_SIZE),
|
("caDriveSerialnumber", ctypes.c_char * STR_BUFFER_SIZE),
|
||||||
@ -106,6 +107,7 @@ def create_drive_objects(drive_info):
|
|||||||
smart_error_count=int(drive_info["driveErrors"]),
|
smart_error_count=int(drive_info["driveErrors"]),
|
||||||
shred_timestamp=int(drive_info["driveShredTimestamp"]),
|
shred_timestamp=int(drive_info["driveShredTimestamp"]),
|
||||||
shred_duration=int(drive_info["driveShredDuration"]),
|
shred_duration=int(drive_info["driveShredDuration"]),
|
||||||
|
drive_connection_type=drive_info["driveConnectionType"],
|
||||||
)
|
)
|
||||||
|
|
||||||
rehdd_info = layouter.ReHddInfo(
|
rehdd_info = layouter.ReHddInfo(
|
||||||
@ -130,9 +132,11 @@ def worker(queue_id, test_mode=False):
|
|||||||
"driveShredDuration": 0,
|
"driveShredDuration": 0,
|
||||||
"driveCapacity": 42,
|
"driveCapacity": 42,
|
||||||
"driveState": "shredded",
|
"driveState": "shredded",
|
||||||
|
"driveConnectionType": "sata",
|
||||||
"driveModelFamily": "modelFamily",
|
"driveModelFamily": "modelFamily",
|
||||||
"driveModelName": "modelName",
|
"driveModelName": "modelName",
|
||||||
"driveSerialnumber": "serial",
|
"driveSerialnumber": "serial",
|
||||||
|
"driveConnectionType": "sata",
|
||||||
"driveReHddVersion": "V1.1.2",
|
"driveReHddVersion": "V1.1.2",
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
@ -163,9 +167,15 @@ def worker(queue_id, test_mode=False):
|
|||||||
),
|
),
|
||||||
"driveCapacity": int(d.caDriveCapacity.decode().strip("\x00")),
|
"driveCapacity": int(d.caDriveCapacity.decode().strip("\x00")),
|
||||||
"driveState": d.caDriveState.decode().strip("\x00"),
|
"driveState": d.caDriveState.decode().strip("\x00"),
|
||||||
|
"driveConnectionType": d.caDriveConnectionType.decode().strip(
|
||||||
|
"\x00"
|
||||||
|
),
|
||||||
"driveModelFamily": d.caDriveModelFamily.decode().strip("\x00"),
|
"driveModelFamily": d.caDriveModelFamily.decode().strip("\x00"),
|
||||||
"driveModelName": d.caDriveModelName.decode().strip("\x00"),
|
"driveModelName": d.caDriveModelName.decode().strip("\x00"),
|
||||||
"driveSerialnumber": d.caDriveSerialnumber.decode().strip("\x00"),
|
"driveSerialnumber": d.caDriveSerialnumber.decode().strip("\x00"),
|
||||||
|
"driveConnectionType": d.caDriveConnectionType.decode().strip(
|
||||||
|
"\x00"
|
||||||
|
),
|
||||||
"driveReHddVersion": d.caDriveReHddVersion.decode().strip("\x00"),
|
"driveReHddVersion": d.caDriveReHddVersion.decode().strip("\x00"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user