#!/usr/bin/env python
# -*- coding: utf-8 -*-
#####################
# Query FreeSyle Blood Glucose Meter for Memory and write data to CSV file freestyle.csv
#
# (c) 2008 Andreas Böhler
# andy (dot) boehler (at) gmx (dot at
#
# v0.1 2008/04/02
#
# ChangeLog
#
# v0.1 Initial Release, my very first python program :)
#
#####################


import serial

###################################
# Function to read from FreeStyle #
###################################

def freestyle_read():
	ser = serial.Serial(0, 19200, timeout=1) #Open first serial port
	print 'Port used: ' + ser.portstr  #Print the used port
	ser.write('mem')  #Query FreeStyle
	line = ''
	line_vector=[]

	while line.find('END') == -1:  #Read from FreeStyle
		line = ser.readline()
		line_vector.append(line)

	ser.close()  #Close port

	return line_vector

###########################################################
# Function to convert line to data and eliminate newlines #
###########################################################

def str2data(line): #Convert line to data, eliminating \r\n
	str = line[0:len(line)-2]
	data = str.split()
	return data

#############################
# Main program starts below #
#############################

line_vector = freestyle_read() #Read from the meter

num_entries = int(line_vector[4])
print 'Number of records found: ' + str(num_entries)

data=[]

for ii in range(num_entries):  #Eliminate \r\n from Data and append it to list
	line_data = str2data(line_vector[ii+6])
	del line_data[len(line_data)-2:len(line_data)]
	data.append(line_data) 

#print data
try:
	fp = file('freestyle.csv', 'w')
except:
	fp = None
	print 'File could not be opened for writing (Permission?)'

if fp:
	for ii in range(num_entries): # Create CSV string from data
		str = data[ii]
		#Append data to new string
		out_str = str[0] + ';' + str[1] + ' ' + str[2] + ' ' + str[3] + ';' + str[4] + '\n'

		fp.writelines(out_str) #Write string to file

	#Close file and delete object

fp.close()
del fp

