LeAudio: Remove Lc3 spec. code from client_parser

Bug: 295972694
Test: atest bluetooth_le_audio_test bluetooth_le_audio_client_test  bluetooth_test_broadcaster bluetooth_test_broadcaster_state_machine
Change-Id: Iec29b128a97fe013d44be94c6c34e282cfe83279
diff --git a/system/bta/le_audio/client_parser.cc b/system/bta/le_audio/client_parser.cc
index 5bcca9f..9ac8c73 100644
--- a/system/bta/le_audio/client_parser.cc
+++ b/system/bta/le_audio/client_parser.cc
@@ -321,15 +321,14 @@
       confs.begin(), confs.end(),
       confs.size() * kCtpCodecConfMinLen + kAseNumSize + kCtpOpSize,
       [&conf_ents_str](size_t cur_len, auto const& conf) {
-        auto ltv_map = conf.codec_config.GetAsLtvMap();
-        for (const auto& [type, value] : ltv_map.Values()) {
+        for (const auto& [type, value] : conf.codec_config.Values()) {
           conf_ents_str +=
               "\ttype: " + std::to_string(type) +
               "\tlen: " + std::to_string(value.size()) +
               "\tdata: " + base::HexEncode(value.data(), value.size()) + "\n";
         };
 
-        return cur_len + ltv_map.RawPacketSize();
+        return cur_len + conf.codec_config.RawPacketSize();
       });
   value.resize(msg_len);
 
@@ -345,11 +344,10 @@
     UINT16_TO_STREAM(msg, conf.codec_id.vendor_company_id);
     UINT16_TO_STREAM(msg, conf.codec_id.vendor_codec_id);
 
-    auto ltv_map = conf.codec_config.GetAsLtvMap();
-    auto codec_spec_conf_len = ltv_map.RawPacketSize();
+    auto codec_spec_conf_len = conf.codec_config.RawPacketSize();
 
     UINT8_TO_STREAM(msg, codec_spec_conf_len);
-    msg = ltv_map.RawPacket(msg);
+    msg = conf.codec_config.RawPacket(msg);
 
     LOG(INFO) << __func__ << ", Codec configuration"
               << "\n\tAse id: " << loghex(conf.ase_id)
diff --git a/system/bta/le_audio/client_parser.h b/system/bta/le_audio/client_parser.h
index f047138..38a7ec1 100644
--- a/system/bta/le_audio/client_parser.h
+++ b/system/bta/le_audio/client_parser.h
@@ -161,7 +161,7 @@
   uint8_t target_latency;
   uint8_t target_phy;
   types::LeAudioCodecId codec_id;
-  types::LeAudioLc3Config codec_config;
+  types::LeAudioLtvMap codec_config;
 };
 
 constexpr uint16_t kCtpQosConfMinLen = 16;
diff --git a/system/bta/le_audio/client_parser_test.cc b/system/bta/le_audio/client_parser_test.cc
index dbb3f1c..c3f0ebc 100644
--- a/system/bta/le_audio/client_parser_test.cc
+++ b/system/bta/le_audio/client_parser_test.cc
@@ -1112,10 +1112,15 @@
   types::LeAudioCodecId codec_id{.coding_format = 0x06,
                                  .vendor_company_id = 0x0203,
                                  .vendor_codec_id = 0x0405};
-  types::LeAudioLc3Config codec_conf{.sampling_frequency = 0x10,
-                                     .frame_duration = 0x03,
-                                     .audio_channel_allocation = 0x04050607,
-                                     .octets_per_codec_frame = 0x0203};
+  types::LeAudioLtvMap codec_conf =
+      types::LeAudioLtvMap()
+          .Add(codec_spec_conf::kLeAudioCodecLC3TypeSamplingFreq, (uint8_t)0x10)
+          .Add(codec_spec_conf::kLeAudioCodecLC3TypeFrameDuration,
+               (uint8_t)0x03)
+          .Add(codec_spec_conf::kLeAudioCodecLC3TypeAudioChannelAllocation,
+               (uint32_t)0x04050607)
+          .Add(codec_spec_conf::kLeAudioCodecLC3TypeOctetPerFrame,
+               (uint16_t)0x0203);
 
   confs.push_back(ctp_codec_conf{
       .ase_id = 0x05,
@@ -1168,10 +1173,15 @@
   types::LeAudioCodecId codec_id{.coding_format = 0x06,
                                  .vendor_company_id = 0x0203,
                                  .vendor_codec_id = 0x0405};
-  types::LeAudioLc3Config codec_conf{.sampling_frequency = 0x10,
-                                     .frame_duration = 0x03,
-                                     .audio_channel_allocation = 0x04050607,
-                                     .octets_per_codec_frame = 0x0203};
+  types::LeAudioLtvMap codec_conf =
+      types::LeAudioLtvMap()
+          .Add(codec_spec_conf::kLeAudioCodecLC3TypeSamplingFreq, (uint8_t)0x10)
+          .Add(codec_spec_conf::kLeAudioCodecLC3TypeFrameDuration,
+               (uint8_t)0x03)
+          .Add(codec_spec_conf::kLeAudioCodecLC3TypeAudioChannelAllocation,
+               (uint32_t)0x04050607)
+          .Add(codec_spec_conf::kLeAudioCodecLC3TypeOctetPerFrame,
+               (uint16_t)0x0203);
 
   confs.push_back(ctp_codec_conf{
       .ase_id = 0x05,
@@ -1219,10 +1229,15 @@
   types::LeAudioCodecId codec_id2{.coding_format = 0x16,
                                   .vendor_company_id = 0x1213,
                                   .vendor_codec_id = 0x1415};
-  types::LeAudioLc3Config codec_conf2{.sampling_frequency = 0x11,
-                                      .frame_duration = 0x13,
-                                      .audio_channel_allocation = 0x14151617,
-                                      .octets_per_codec_frame = 0x1213};
+  types::LeAudioLtvMap codec_conf2 =
+      types::LeAudioLtvMap()
+          .Add(codec_spec_conf::kLeAudioCodecLC3TypeSamplingFreq, (uint8_t)0x11)
+          .Add(codec_spec_conf::kLeAudioCodecLC3TypeFrameDuration,
+               (uint8_t)0x13)
+          .Add(codec_spec_conf::kLeAudioCodecLC3TypeAudioChannelAllocation,
+               (uint32_t)0x14151617)
+          .Add(codec_spec_conf::kLeAudioCodecLC3TypeOctetPerFrame,
+               (uint16_t)0x1213);
 
   confs.push_back(ctp_codec_conf{
       .ase_id = 0x15,
diff --git a/system/bta/le_audio/le_audio_types.h b/system/bta/le_audio/le_audio_types.h
index d59d12c..d70eb91 100644
--- a/system/bta/le_audio/le_audio_types.h
+++ b/system/bta/le_audio/le_audio_types.h
@@ -544,8 +544,33 @@
       : values(std::move(values)) {}
 
   std::optional<std::vector<uint8_t>> Find(uint8_t type) const;
-  void Add(uint8_t type, std::vector<uint8_t> value) {
+  LeAudioLtvMap& Add(uint8_t type, std::vector<uint8_t> value) {
     values.insert_or_assign(type, std::move(value));
+    return *this;
+  }
+  LeAudioLtvMap& Add(uint8_t type, uint8_t value) {
+    std::vector<uint8_t> v(sizeof(value));
+    auto ptr = v.data();
+
+    UINT8_TO_STREAM(ptr, value);
+    values.insert_or_assign(type, v);
+    return *this;
+  }
+  LeAudioLtvMap& Add(uint8_t type, uint16_t value) {
+    std::vector<uint8_t> v(sizeof(value));
+    auto ptr = v.data();
+
+    UINT16_TO_STREAM(ptr, value);
+    values.insert_or_assign(type, std::move(v));
+    return *this;
+  }
+  LeAudioLtvMap& Add(uint8_t type, uint32_t value) {
+    std::vector<uint8_t> v(sizeof(value));
+    auto ptr = v.data();
+
+    UINT32_TO_STREAM(ptr, value);
+    values.insert_or_assign(type, std::move(v));
+    return *this;
   }
   void Remove(uint8_t type) { values.erase(type); }
   bool IsEmpty() const { return values.empty(); }
diff --git a/system/bta/le_audio/state_machine.cc b/system/bta/le_audio/state_machine.cc
index 74e8b02..88ce804 100644
--- a/system/bta/le_audio/state_machine.cc
+++ b/system/bta/le_audio/state_machine.cc
@@ -1655,7 +1655,8 @@
       conf.target_latency = ase->target_latency;
       conf.target_phy = group->GetTargetPhy(ase->direction);
       conf.codec_id = ase->codec_id;
-      conf.codec_config = ase->codec_config;
+      // FIXME: Use LtvMap in ASE
+      conf.codec_config = ase->codec_config.GetAsLtvMap();
       confs.push_back(conf);
 
       msg_stream << "ASE_ID " << +conf.ase_id << ",";