import h5py
import numpy as np


def getData(cfileName):
    """
    Given a name of a *.cfile, this function extracts the interleaved
    Inphase-Quadrature data samples and convert it into a numpy array of complex
    data elements. *.cfile format has interleaved I and Q samples where each sample
    is a float32 type. GNURadio Companion (GRC) scripts output data into a file
    though a file sink block in this format.
    Read more in SDR data types: https://github.com/miek/inspectrum
    """

    # Read the *.cfile which has each element in float32 format.
    data = np.fromfile(cfileName, dtype="float32")

    # Take each consecutive interleaved I sample and Q sample to create a single complex element.
    data = data[0::2] + 1j*data[1::2]
    #print("data type=", type(data))
    # Return the complex numpy array.
    return data


dataset_folder = "/home/tharindu/data"


# creating the HDF5 file
hf = h5py.File('em-new-dataset-2023.h5', 'w')
# setting the file attributes
hf.attrs[u'dataset_version'] = u'1'
hf.attrs[u'dataset_creater'] = u'Tharindu L. Yasarathna <tharindu.yasarathna@ucdconnect.ie>'
hf.attrs[u'dataset_date'] = u'2023'


#########################################################################
#########################################################################
# creating internet of things group
iot = hf.create_group('internet-of-things')
# setting iot group attributes
iot.attrs[u'description'] = u'The EM radiation data of Internet of Things'

#------------------------------------------------------------------------
# creating Dragon Board 1 group 
dragonboard1 = iot.create_group('dragon-board-1')
# setting Dragon Board 1 attributes 
dragonboard1.attrs[u'device_name'] = u'Dragon Board device 1'
dragonboard1.attrs[u'sampling_frequency'] = u'20MHz'
dragonboard1.attrs[u'centre_frequency'] = u'1.2GHz'


# creating datasets with their attributes
iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/dragonboard1/db1_print2.cfile")
dataset = dragonboard1.create_dataset('print-task', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Dragon Board 1 run print task on cpu core 1 for 10 seconds'
del iqdata

iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/dragonboard1/db1_math2.cfile")
dataset = dragonboard1.create_dataset('math-task', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Dragon Board 1 run math task on cpu core 1 for 10 seconds'
del iqdata

iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/dragonboard1/db1_memory2.cfile")
dataset = dragonboard1.create_dataset('memory-task', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Dragon Board 1 run memory task on cpu core 1 for 10 seconds'
del iqdata

iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/dragonboard1/db1_io2.cfile")
dataset = dragonboard1.create_dataset('IO-task', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Dragon Board 1 run I/O task on cpu core 1 for 10 seconds'
del iqdata

#------------------------------------------------------------------------
# creating Amazon Echo Show device 1 group 
echoshow1 = iot.create_group('amazon-echo-show5')
# setting Amazon Echo Show device 1 attributes 
echoshow1.attrs[u'device_name'] = u'Amazon Echo Show device 1'
echoshow1.attrs[u'sampling_frequency'] = u'20MHz'
echoshow1.attrs[u'centre_frequency'] = u'1.2GHz'


# creating datasets with their attributes
iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/echoshow1/time.cfile")
dataset = echoshow1.create_dataset('asking-for-time', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Amazon Echo Show device 1 was asked to provide the time'
del iqdata

iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/echoshow1/radio.cfile")
dataset = echoshow1.create_dataset('asking-to-play-radio', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Amazon Echo Show device 1 was asked to play the radio'
del iqdata

iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/echoshow1/playmusic.cfile")
dataset = echoshow1.create_dataset('asking-to-play-music', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Amazon Echo Show device 1 was asked to play the music'
del iqdata

iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/echoshow1/weather.cfile")
dataset = echoshow1.create_dataset('asking-to-weather', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Amazon Echo Show device 1 was asked to weather'
del iqdata


#------------------------------------------------------------------------
# creating Dragon Board 2 group 
dragonboard2 = iot.create_group('dragon-board-2')
# setting Dragon Board 2 attributes 
dragonboard2.attrs[u'device_name'] = u'Dragon Board device 2'
dragonboard2.attrs[u'sampling_frequency'] = u'20MHz'
dragonboard2.attrs[u'centre_frequency'] = u'1.2GHz'


# creating datasets with their attributes
iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/dragonboard2/db2_print2.cfile")
dataset = dragonboard2.create_dataset('print-task', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Dragon Board 2 run print task on cpu core 1 for 10 seconds'
del iqdata

iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/dragonboard2/db2_math2.cfile")
dataset = dragonboard2.create_dataset('math-task', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Dragon Board 2 run math task on cpu core 1 for 10 seconds'
del iqdata

iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/dragonboard2/db2_memory2.cfile")
dataset = dragonboard2.create_dataset('memory-task', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Dragon Board 2 run memory task on cpu core 1 for 10 seconds'
del iqdata

iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/dragonboard2/db2_io2.cfile")
dataset = dragonboard2.create_dataset('IO-task', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Dragon Board 2 run I/O task on cpu core 1 for 10 seconds'
del iqdata

#------------------------------------------------------------------------
# creating Amazon Echo Show device 2 group 
echoshow2 = iot.create_group('amazon-echo-show-2')
# setting Amazon Echo Show 2 attributes 
echoshow2.attrs[u'device_name'] = u'Amazon Echo Show device 2'
echoshow2.attrs[u'sampling_frequency'] = u'20MHz'
echoshow2.attrs[u'centre_frequency'] = u'1.2GHz'


# creating datasets with their attributes
iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/echoshow2/time2.cfile")
dataset = echoshow2.create_dataset('asking-for-time', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Amazon Echo Show device 2 was asked to provide the time'
del iqdata

iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/echoshow2/radio2.cfile")
dataset = echoshow2.create_dataset('asking-to-play-radio', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Amazon Echo Show device 2 was asked to play the radio'
del iqdata

iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/echoshow2/playmusic2.cfile")
dataset = echoshow2.create_dataset('asking-to-play-music', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Amazon Echo Show device 2 was asked to play the music'
del iqdata

iqdata = getData(dataset_folder + "/iot-device-EM-dataset-2023/echoshow2/weather2.cfile")
dataset = echoshow2.create_dataset('asking-to-weather', data=iqdata)
dataset.attrs[u'dataset_description'] = u'Amazon Echo Show device 2 was asked to weather'
del iqdata


hf.close()

