/******************************************************************************* ** ** Function HID_HostWriteDev ** ** Description This function is called when the host has a report to send. ** ** report_id: is only used on GET_REPORT transaction if is specified. ** only valid when it's a non-zero value. ** ** Returns void ** *******************************************************************************/ tHID_STATUS HID_HostWriteDev( UINT8 dev_handle, UINT8 t_type, UINT8 param, UINT16 data, UINT8 report_id, BT_HDR *pbuf ) { tHID_STATUS status = HID_SUCCESS; if( !hh_cb.reg_flag ) { HIDH_TRACE_ERROR0("HID_ERR_NOT_REGISTERED"); status = HID_ERR_NOT_REGISTERED; } if( (dev_handle >= HID_HOST_MAX_DEVICES) || (!hh_cb.devices[dev_handle].in_use) ) { HIDH_TRACE_ERROR0("HID_ERR_INVALID_PARAM"); status = HID_ERR_INVALID_PARAM; } if( hh_cb.devices[dev_handle].state != HID_DEV_CONNECTED ) { HIDH_TRACE_ERROR1("HID_ERR_NO_CONNECTION dev_handle %d", dev_handle); status = HID_ERR_NO_CONNECTION; } if (status != HID_SUCCESS) { if (pbuf) GKI_freebuf ((void *)pbuf); } else status = hidh_conn_snd_data( dev_handle, t_type, param, data, report_id, pbuf ) ; return status; }
/******************************************************************************* ** ** Function hidh_l2cif_reg ** ** Description This function initializes the SDP unit. ** ** Returns void ** *******************************************************************************/ tHID_STATUS hidh_conn_reg (void) { int xx; /* Initialize the L2CAP configuration. We only care about MTU and flush */ memset(&hh_cb.l2cap_cfg, 0, sizeof(tL2CAP_CFG_INFO)); hh_cb.l2cap_cfg.mtu_present = TRUE; hh_cb.l2cap_cfg.mtu = HID_HOST_MTU; hh_cb.l2cap_cfg.flush_to_present = TRUE; hh_cb.l2cap_cfg.flush_to = HID_HOST_FLUSH_TO; /* Now, register with L2CAP */ if (!L2CA_Register (HID_PSM_CONTROL, (tL2CAP_APPL_INFO *) &hst_reg_info)) { HIDH_TRACE_ERROR0 ("HID Control Registration failed"); return (HID_ERR_L2CAP_FAILED) ; } if (!L2CA_Register (HID_PSM_INTERRUPT, (tL2CAP_APPL_INFO *) &hst_reg_info)) { L2CA_Deregister( HID_PSM_CONTROL ) ; HIDH_TRACE_ERROR0 ("HID Interrupt Registration failed"); return (HID_ERR_L2CAP_FAILED) ; } for (xx = 0; xx < HID_HOST_MAX_DEVICES; xx++) { hh_cb.devices[xx].in_use = FALSE ; hh_cb.devices[xx].conn.conn_state = HID_CONN_STATE_UNUSED; } return (HID_SUCCESS); }
tHID_STATUS HID_HostSetSecurityLevel( char serv_name[], UINT8 sec_lvl ) { if (!BTM_SetSecurityLevel (FALSE, serv_name, BTM_SEC_SERVICE_HID_SEC_CTRL, sec_lvl, HID_PSM_CONTROL, BTM_SEC_PROTO_HID, HID_SEC_CHN)) { HIDH_TRACE_ERROR0 ("Security Registration 1 failed"); return (HID_ERR_NO_RESOURCES); } if (!BTM_SetSecurityLevel (TRUE, serv_name, BTM_SEC_SERVICE_HID_SEC_CTRL, sec_lvl, HID_PSM_CONTROL, BTM_SEC_PROTO_HID, HID_SEC_CHN)) { HIDH_TRACE_ERROR0 ("Security Registration 2 failed"); return (HID_ERR_NO_RESOURCES); } if (!BTM_SetSecurityLevel (FALSE, serv_name, BTM_SEC_SERVICE_HID_NOSEC_CTRL, BTM_SEC_NONE, HID_PSM_CONTROL, BTM_SEC_PROTO_HID, HID_NOSEC_CHN)) { HIDH_TRACE_ERROR0 ("Security Registration 3 failed"); return (HID_ERR_NO_RESOURCES); } if (!BTM_SetSecurityLevel (TRUE, serv_name, BTM_SEC_SERVICE_HID_NOSEC_CTRL, BTM_SEC_NONE, HID_PSM_CONTROL, BTM_SEC_PROTO_HID, HID_NOSEC_CHN)) { HIDH_TRACE_ERROR0 ("Security Registration 4 failed"); return (HID_ERR_NO_RESOURCES); } if (!BTM_SetSecurityLevel (TRUE, serv_name, BTM_SEC_SERVICE_HID_INTR, BTM_SEC_NONE, HID_PSM_INTERRUPT, BTM_SEC_PROTO_HID, 0)) { HIDH_TRACE_ERROR0 ("Security Registration 5 failed"); return (HID_ERR_NO_RESOURCES); } if (!BTM_SetSecurityLevel (FALSE, serv_name, BTM_SEC_SERVICE_HID_INTR, BTM_SEC_NONE, HID_PSM_INTERRUPT, BTM_SEC_PROTO_HID, 0)) { HIDH_TRACE_ERROR0 ("Security Registration 6 failed"); return (HID_ERR_NO_RESOURCES); } return( HID_SUCCESS ); }