Exemplo n.º 1
0
    def save_curr_data(self):
        """"
            adds self.curr_data to self.data_arr with a timestamp
            if it is not heartbeat

            creates a memory_error and adds it self.mem_errors
            if self.curr_data.msg_code == 'ECC_CHECKED'

            clears self.curr_data
        """
        curr_time = str(Time.get_curr_time())
        self.curr_data.time = curr_time

        self.curr_data.extract_data_payload()

        #add end index
        self.curr_data.data_payload += GlobalConstants.END_CODE
        self.curr_data.complete_data += GlobalConstants.END_CODE

        self.classify_data()
        print(str(curr_time) + ' saving data: ' + self.curr_data.complete_data)

        self.curr_data.payload_len = len(self.curr_data.data_payload)
        self.data_cnt += 1
        self.prev_data = self.curr_data
        self.curr_data = Data()
Exemplo n.º 2
0
 def __init__(self):
     self.prev_data = None
     self.data_arr = []
     self.mem_error_storage = MemErrorStorage()
     self.reset_storage = ResetStorage()
     self.curr_data = Data()
     self.last_heartbeat = None
     self.data_cnt = 0
Exemplo n.º 3
0
class DataStorage:
    def __init__(self):
        self.prev_data = None
        self.data_arr = []
        self.mem_error_storage = MemErrorStorage()
        self.reset_storage = ResetStorage()
        self.curr_data = Data()
        self.last_heartbeat = None
        self.data_cnt = 0

    def save_curr_data(self):
        """"
            adds self.curr_data to self.data_arr with a timestamp
            if it is not heartbeat

            creates a memory_error and adds it self.mem_errors
            if self.curr_data.msg_code == 'ECC_CHECKED'

            clears self.curr_data
        """
        curr_time = str(Time.get_curr_time())
        self.curr_data.time = curr_time

        self.curr_data.extract_data_payload()

        #add end index
        self.curr_data.data_payload += GlobalConstants.END_CODE
        self.curr_data.complete_data += GlobalConstants.END_CODE

        self.classify_data()
        print(str(curr_time) + ' saving data: ' + self.curr_data.complete_data)

        self.curr_data.payload_len = len(self.curr_data.data_payload)
        self.data_cnt += 1
        self.prev_data = self.curr_data
        self.curr_data = Data()

    def classify_data(self):
        data_type = self.curr_data.purpose
        if not data_type == 'HEARTBEAT':
            self.data_arr.append(self.curr_data)
        if data_type == 'ECC_CHECKED':
            self.mem_error_storage.add(self.curr_data.data_payload_value)
        elif data_type == 'RESET_RESPONSE':
            payload_int = Calculator.get_int(self.curr_data.data_payload_value)
            reset_purpose = GlobalConstants.RESET_PURPOSES[payload_int]
            reset_packet = ResetData(reset_purpose)
            self.reset_storage.add(reset_packet)

    def reset_curr_data(self):
        self.prev_data = Data()
        self.curr_data = Data()

    def get_data(self, id):
        for data in self.data_arr:
            if data.data_index == id:
                return data
        return None
Exemplo n.º 4
0
 def test_extract_data_counter(self):
     header = 'aa' \
              '0019' \
              '00000001' \
              '00000000' \
              '00'
     data = Data()
     data.extract_data_counter(header)
     self.assertEqual('00000001', data.data_index_hex)
     self.assertEqual(1, data.data_index)
Exemplo n.º 5
0
 def test_extract_packet_length(self):
     header = 'aa' \
              '0019' \
              '00000000' \
              '00000000' \
              '00'
     data = Data()
     data.extract_packet_length(header)
     self.assertEqual('0019', data.packet_len)
     self.assertEqual(50, data.len_of_hex)
Exemplo n.º 6
0
    def check_heartbeat(self, curr_data_item: Data):
        """
            if current data is HEARTBEAT_RESPONSE, extracts HEARTBEAT_ID
            and notifies observers
        :param curr_data_item:
        """
        HEARTBEAT_RESPONSE_CODE = GlobalConstants.MESSAGE_CODE_DICT[
            'HEARTBEAT_RESPONSE']
        if curr_data_item.msg_code == HEARTBEAT_RESPONSE_CODE:
            curr_data_item.extract_data_payload()
            heartbeat = curr_data_item.data_payload_value
            heartbeat = Calculator.get_int(heartbeat)

            self.heartbeat_received_id = heartbeat
            self.notify()
Exemplo n.º 7
0
 def analyse_data(self):
     data = ''
     expected_data_len = GlobalConstants.HEX_DIGITS_PER_BYTE * GlobalConstants.MAX_PACKET_LEN + 1
     data_len_hex = ''
     while True:
         if not self.serial_port: continue
         new_data = self.read_data_queue.get()
         if new_data:
             if self.new_data_to_read:
                 if new_data == GlobalConstants.START_CODE:
                     data += new_data
                     self.new_data_to_read = False
             else:
                 if len(data) < expected_data_len:
                     data += new_data
                     # extract
                     if GlobalConstants.PACKET_LEN_START_INDEX <= len(
                             data) <= GlobalConstants.PACKET_LEN_END_INDEX:
                         data_len_hex += new_data
                     if len(data) == GlobalConstants.DATA_COUNTER_END_INDEX:
                         expected_data_len = Calculator.get_int(
                             data_len_hex
                         ) * GlobalConstants.HEX_DIGITS_PER_BYTE
                     if len(data) == expected_data_len:
                         data_packet = Data(data)
                         self.analyse_data_purpose(data_packet)
                         # clear data
                         self.new_data_to_read = True
                         data = ''
                         expected_data_len = GlobalConstants.HEX_DIGITS_PER_BYTE * GlobalConstants.MAX_PACKET_LEN + 1
                         data_len_hex = ''
    def test_check_data_index(self):
        header = 'aa' \
                 '0019' \
                 '00000000' \
                 '00000000' \
                 '01'
        unordered_payload = '000066660002333300033333'
        data = Data()
        data.add_header_info(header)
        data.data_payload = unordered_payload
        data_processing_thread = DataProcessingThread(Queue())

        self.assertFalse(data_processing_thread.analyse_data_payload(data))

        unordered_payload = '000066660000333300033333'
        data.data_payload = unordered_payload
        self.assertFalse(data_processing_thread.analyse_data_payload(data))

        ordered_payload = '000066660001333300023333'
        data.data_payload = ordered_payload

        self.assertTrue(data_processing_thread.analyse_data_payload(data))
Exemplo n.º 9
0
    def test_extract_message_code(self):
        header = 'aa' \
                 '0019' \
                 '00000000' \
                 '00000000' \
                 '00'
        data = Data()
        data.extract_message_code(header)
        self.assertEqual(
            GlobalConstants.MESSAGE_CODE_DICT['HEARTBEAT_REQUEST'],
            data.msg_code)

        header = 'aa' \
                 '0019' \
                 '00000000' \
                 '00000000' \
                 '01'
        data.extract_message_code(header)
        self.assertEqual(
            GlobalConstants.MESSAGE_CODE_DICT['HEARTBEAT_RESPONSE'],
            data.msg_code)

        header = 'aa' \
                 '0019' \
                 '00000000' \
                 '00000000' \
                 '02'
        data.extract_message_code(header)
        self.assertEqual(GlobalConstants.MESSAGE_CODE_DICT['RESET_REQUEST'],
                         data.msg_code)

        header = 'aa' \
                 '0019' \
                 '00000000' \
                 '00000000' \
                 '03'
        data.extract_message_code(header)
        self.assertEqual(GlobalConstants.MESSAGE_CODE_DICT['RESET_RESPONSE'],
                         data.msg_code)

        header = 'aa' \
                 '0019' \
                 '00000000' \
                 '00000000' \
                 '04'
        data.extract_message_code(header)
        self.assertEqual(GlobalConstants.MESSAGE_CODE_DICT['ECC_CHECKED'],
                         data.msg_code)

        header = 'aa' \
                 '0019' \
                 '00000000' \
                 '00000000' \
                 '05'
        data.extract_message_code(header)
        self.assertEqual(
            GlobalConstants.MESSAGE_CODE_DICT['ECC_PERIOD_CHANGE'],
            data.msg_code)
Exemplo n.º 10
0
 def reset_curr_data(self):
     self.prev_data = Data()
     self.curr_data = Data()
Exemplo n.º 11
0
 def analyse_data_purpose(self, data_packet: Data):
     data_packet.extract_data_payload()
     data_payload = data_packet.data_payload_value
     if data_packet.purpose == 'HEARTBEAT_REQUEST':
         heartbeat = self.analyse_heartbeat(data_payload)
         self.send_data_stream(heartbeat)