@@ -1911,6 +1911,39 @@ set_mult(const void *cmd, uint16_t cmd_len,
1911
1911
return BTP_STATUS_SUCCESS ;
1912
1912
}
1913
1913
1914
+ static uint8_t
1915
+ set_val (const void * cmd , uint16_t cmd_len ,
1916
+ void * rsp , uint16_t * rsp_len )
1917
+ {
1918
+ const struct btp_gatt_set_value_cmd * cp = cmd ;
1919
+ struct os_mbuf * value ;
1920
+ uint16_t handle ;
1921
+ int rc = 0 ;
1922
+
1923
+ handle = cp -> attr_id ;
1924
+ value = ble_hs_mbuf_att_pkt ();
1925
+ if (value == NULL ) {
1926
+ return BTP_STATUS_FAILED ;
1927
+ }
1928
+ os_mbuf_append (value , cp -> value , cp -> len );
1929
+
1930
+ ble_att_svr_write_local (handle , value );
1931
+
1932
+ if (notify_state ) {
1933
+ rc = ble_gatts_notify_custom (myconn_handle , handle , value );
1934
+ }
1935
+
1936
+ if (indicate_state ) {
1937
+ rc = ble_gatts_indicate_custom (myconn_handle , notify_handle , value );
1938
+ }
1939
+
1940
+ if (rc != 0 ) {
1941
+ return BTP_STATUS_FAILED ;
1942
+ }
1943
+
1944
+ return BTP_STATUS_SUCCESS ;
1945
+ }
1946
+
1914
1947
static uint8_t
1915
1948
change_database (const void * cmd , uint16_t cmd_len ,
1916
1949
void * rsp , uint16_t * rsp_len )
@@ -1935,6 +1968,7 @@ supported_commands(const void *cmd, uint16_t cmd_len,
1935
1968
/* octet 0 */
1936
1969
tester_set_bit (rp -> data , BTP_GATT_READ_SUPPORTED_COMMANDS );
1937
1970
tester_set_bit (rp -> data , BTP_GATT_START_SERVER );
1971
+ tester_set_bit (rp -> data , BTP_GATT_SET_VALUE );
1938
1972
1939
1973
/* octet 1 */
1940
1974
tester_set_bit (rp -> data , BTP_GATT_EXCHANGE_MTU );
@@ -1991,6 +2025,11 @@ static const struct btp_handler handlers[] = {
1991
2025
.expect_len = sizeof (struct btp_gatt_exchange_mtu_cmd ),
1992
2026
.func = exchange_mtu ,
1993
2027
},
2028
+ {
2029
+ .opcode = BTP_GATT_SET_VALUE ,
2030
+ .expect_len = BTP_HANDLER_LENGTH_VARIABLE ,
2031
+ .func = set_val ,
2032
+ },
1994
2033
{
1995
2034
.opcode = BTP_GATT_DISC_ALL_PRIM_SVCS ,
1996
2035
.expect_len = sizeof (struct btp_gatt_disc_all_prim_svcs_cmd ),
0 commit comments