public void handlePacket(byte[] packet)
        {
            byte[] pack = packet;

            int handle = get_first_element(packet);
            while (handle != -1)
            {
                byte[] type_buf = get_element_type(pack, handle);

                if (this.OnElementParsed != null)
                {
                    var element = new ElementDesc()
                    {
                        ElementType = (int)type_buf[0],
                        Data = get_element_data(pack, handle),
                    };
                    this.OnElementParsed(element);
                }

                switch ((int)type_buf[0])
                {

                    case ELEMENT_TYPE_FILE:
                        handle_file(pack, handle);
                        break;

                    case ELEMENT_TYPE_GET_DATA:
                        {
                            byte[] data_buf = get_element_data(pack, handle);
                            handle_activity(pack, handle);
                        }
                        break;

                    case ELEMENT_TYPE_GET_GRID:
                        {
                            byte[] data_buf = get_element_data(pack, handle);
                            if (this.OnSportsGridRead != null)
                                this.OnSportsGridRead(data_buf);
                        }
                        break;

                    case ELEMENT_TYPE_SN:
                        {
                            byte[] data_buf = get_element_data(pack, handle);
                            string deviceId = Encoding.UTF8.GetString(data_buf, 0, data_buf.Length);
                            if (this.OnDeviceIDRead != null)
                                this.OnDeviceIDRead(deviceId);
                        }
                        break;
                    case ELEMENT_TYPE_FIRMWARE_VERSION:
                        {
                            if (this.OnFirmwareVersionRequest != null) 
                            {
                                byte[] data_buf = get_element_data(pack, handle);
                                string firmwareVersion = Encoding.UTF8.GetString(data_buf, 0, data_buf.Length);
                                this.OnFirmwareVersionRequest(firmwareVersion);
                            }
                                
                        }
                        break;

                    case ELEMENT_TYPE_DAILY_ACTIVITY:
                        {
                            handle_today_activity(pack, handle);
                        }
                        break;
                }

                handle = get_next_element(pack, handle);

            }

        }
 /****************************************************************
  * Delegates
  **/
 private void OnElementParsed (ElementDesc p_element)
 {
     KreyosUtils.Log("BluetoothManager::OnElementParsed", "Type:" + p_element.ElementType + " Data:" + string.Join(" ", p_element.Data));
 }