"""
LUFA Library
Copyright ( C ) Dean Camera , 2016.
dean [ at ] fourwalledcubicle [ dot ] com
www . lufa - lib . org
"""
"""
Front - end configuration app for the TempDataLogger project . This script
configures the logger to the current system time and date , with a user
defined logging interval .
The logging interval should be specified in milliseconds and is rounded to
a multiple of 500 ms .
Usage :
python temp_log_config . py < Log_Interval >
Example :
python temp_log_config . py 500
Requires the pywinusb library ( https : / / pypi . python . org / pypi / pywinusb / ) .
"""
import sys
from datetime import datetime
import pywinusb . hid as hid
# Generic HID device VID, PID and report payload length (length is increased
# by one to account for the Report ID byte that must be pre-pended)
device_vid = 0x03EB
device_pid = 0x2063
report_length = 1 + 7
def get_hid_device_handle ( ) :
hid_device_filter = hid . HidDeviceFilter ( vendor_id = device_vid ,
product_id = device_pid )
valid_hid_devices = hid_device_filter . get_devices ( )
if len ( valid_hid_devices ) is 0 :
return None
else :
return valid_hid_devices [ 0 ]
def configure_temp_log_device ( device , time_date , log_interval_500ms ) :
# Report data for the demo is the report ID (always zero)
report_data = [ 0 ]
# Followed by the time/date data
report_data . extend ( [ time_date . hour , time_date . minute ,
time_date . second , time_date . day ,
time_date . month , time_date . year - 2000 ] )
# Lastly the log interval in 500ms units of time
report_data . extend ( [ log_interval_500ms ] )
# Zero-extend the array to the length the report should be
report_data . extend ( [ 0 ] * ( report_length - len ( report_data ) ) )
# Send the generated report to the device
device . send_output_report ( report_data )
def main ( time_date , log_interval_500ms ) :
hid_device = get_hid_device_handle ( )
if hid_device is None :
print ( " No valid HID device found. " )
sys . exit ( 1 )
try :
hid_device . open ( )
print ( " Connected to device 0x %04X /0x %04X - %s [ %s ] " %
( hid_device . vendor_id , hid_device . product_id ,
hid_device . product_name , hid_device . vendor_name ) )
configure_temp_log_device ( hid_device , time_date , log_interval_500ms )
print ( " Time/Date is now set to %s " % time_date )
print ( " Log interval is now set to every %0.1f s " % ( log_interval_500ms * ( 500.0 / 1000.0 ) ) )
finally :
hid_device . close ( )
if __name__ == ' __main__ ' :
time_date = datetime . now ( )
log_interval_500ms = ( int ( sys . argv [ 1 ] ) / 500 ) if len ( sys . argv ) > 1 else 2
# Clamp the log interval to the allowable range
log_interval_500ms = max ( log_interval_500ms , 0x01 )
log_interval_500ms = min ( log_interval_500ms , 0xFF )
main ( time_date , log_interval_500ms )