117 lines
4.1 KiB
Python
117 lines
4.1 KiB
Python
|
import os
|
||
|
import time
|
||
|
import spidev
|
||
|
from StartUpTest import StartUPTest
|
||
|
from TotOnline import TotOnline
|
||
|
|
||
|
def read_data(num_numbers, bits_per_number):
|
||
|
spi = spidev.SpiDev()
|
||
|
spi.open(0, 0) # Öffnet die SPI-Kommunikation (Bus 0, Device 0)
|
||
|
spi.max_speed_hz = 16000000 # Legt die maximale Taktrate fest
|
||
|
|
||
|
# Calculate the total number of bytes required to accommodate the desired number of bits
|
||
|
total_bytes = (num_numbers * bits_per_number + 7) // 8
|
||
|
|
||
|
# Define the filename
|
||
|
filename = f'{num_numbers}numbers_{bits_per_number}bits.bin'
|
||
|
|
||
|
with open(filename, 'wb') as file:
|
||
|
bytes_received = 0
|
||
|
while bytes_received < total_bytes:
|
||
|
# Read a byte from SPI
|
||
|
data = spi.readbytes(1)
|
||
|
file.write(bytes(data))
|
||
|
bytes_received += 1
|
||
|
time.sleep(0.0000001)
|
||
|
|
||
|
return filename
|
||
|
|
||
|
def convert_to_binary(filename, num_numbers, bits_per_number):
|
||
|
with open(filename, 'rb') as f:
|
||
|
# Read the contents of the file as bytes
|
||
|
content = f.read()
|
||
|
|
||
|
# Convert the bytes to a string of binary digits
|
||
|
binary_str = ''.join(format(byte, '08b') for byte in content)
|
||
|
|
||
|
# Truncate the binary string to the desired length
|
||
|
truncated_binary_str = binary_str[:num_numbers * bits_per_number]
|
||
|
|
||
|
# Write the truncated binary string back to the file with separators
|
||
|
binary_filename = f'{num_numbers}numbers_{bits_per_number}bits_binary.txt'
|
||
|
with open(binary_filename, 'w') as f:
|
||
|
for i in range(0, len(truncated_binary_str), bits_per_number):
|
||
|
binary_number = truncated_binary_str[i:i+bits_per_number]
|
||
|
f.write(binary_number)
|
||
|
|
||
|
return binary_filename
|
||
|
|
||
|
|
||
|
def process_data_in_chunks(data, chunk_size=1000000):
|
||
|
chunks = [data[i:i+chunk_size] for i in range(0, len(data), chunk_size)]
|
||
|
return chunks
|
||
|
|
||
|
def perform_startup_tests(filename):
|
||
|
with open(filename, 'rb') as f:
|
||
|
# Read the contents of the file as bytes
|
||
|
content = f.read()
|
||
|
|
||
|
print("Run all StartUPTests")
|
||
|
binary_chunks = process_data_in_chunks(content)
|
||
|
first_chunk = binary_chunks[0]
|
||
|
result = StartUPTest.run_all_tests(first_chunk)
|
||
|
print(result)
|
||
|
return result
|
||
|
|
||
|
def perform_tot_online_tests(filename):
|
||
|
with open(filename, 'rb') as f:
|
||
|
# Read the contents of the file as bytes
|
||
|
content = f.read()
|
||
|
|
||
|
print("Run all TotOnline tests")
|
||
|
binary_chunks = process_data_in_chunks(content)
|
||
|
first_chunk = binary_chunks[0]
|
||
|
result = TotOnline.run_all_tests(first_chunk)
|
||
|
print(result)
|
||
|
return result
|
||
|
|
||
|
def analyze_data(num_numbers, bits_per_number, startup=False):
|
||
|
|
||
|
if startup:
|
||
|
filename = read_data(10, 80000)
|
||
|
binary_filename = convert_to_binary(filename, 10, 80000)
|
||
|
perform_startup_tests(binary_filename)
|
||
|
perform_tot_online_tests(binary_filename)
|
||
|
os.unlink(filename)
|
||
|
os.unlink(binary_filename)
|
||
|
|
||
|
else:
|
||
|
filename = read_data(num_numbers, bits_per_number)
|
||
|
binary_filename = convert_to_binary(filename, num_numbers, bits_per_number)
|
||
|
hex_filename = convert_to_hex(binary_filename, num_numbers, bits_per_number)
|
||
|
result = perform_tot_online_tests(binary_filename)
|
||
|
with open(hex_filename, 'rb') as f:
|
||
|
# Read the contents of the file as bytes
|
||
|
hex_return = f.read()
|
||
|
print(hex_return)
|
||
|
os.unlink(filename)
|
||
|
os.unlink(hex_filename)
|
||
|
os.unlink(binary_filename)
|
||
|
if result:
|
||
|
return hex_return
|
||
|
else:
|
||
|
filename = read_data(10, 80000)
|
||
|
binary_filename = convert_to_binary(filename, 10, 80000)
|
||
|
SUTres = perform_startup_tests(binary_filename)
|
||
|
TOTres = perform_tot_online_tests(binary_filename)
|
||
|
if SUTres and TOTres:
|
||
|
os.unlink(filename)
|
||
|
os.unlink(binary_filename)
|
||
|
return hex_return
|
||
|
else:
|
||
|
return False
|
||
|
|
||
|
# Teste den Code
|
||
|
result = analyze_data(50, 2560, startup=False)
|
||
|
print(result)
|