void LocalDeviceImpl::CommandComplete(struct hci_ev_cmd_complete* event, BMessage* request, int32 index) { int16 opcodeExpected; BMessage reply; status_t status; // Handle command complete information request->FindInt16("opcodeExpected", index, &opcodeExpected); if (request->IsSourceWaiting() == false) { TRACE_BT("LocalDeviceImpl: Nobody waiting for the event\n"); } switch ((uint16)opcodeExpected) { case PACK_OPCODE(OGF_INFORMATIONAL_PARAM, OCF_READ_LOCAL_VERSION): { struct hci_rp_read_loc_version* version = JumpEventHeader<struct hci_rp_read_loc_version, struct hci_ev_cmd_complete>(event); if (version->status == BT_OK) { if (!IsPropertyAvailable("hci_version")) fProperties->AddInt8("hci_version", version->hci_version); if (!IsPropertyAvailable("hci_revision")) { fProperties->AddInt16("hci_revision", version->hci_revision); } if (!IsPropertyAvailable("lmp_version")) fProperties->AddInt8("lmp_version", version->lmp_version); if (!IsPropertyAvailable("lmp_subversion")) { fProperties->AddInt16("lmp_subversion", version->lmp_subversion); } if (!IsPropertyAvailable("manufacturer")) { fProperties->AddInt16("manufacturer", version->manufacturer); } } TRACE_BT("LocalDeviceImpl: Reply for Local Version %x\n", version->status); reply.AddInt8("status", version->status); status = request->SendReply(&reply); //printf("Sending reply... %ld\n", status); // debug reply.PrintToStream(); // This request is not gonna be used anymore ClearWantedEvent(request); break; } case PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_READ_PG_TIMEOUT): { struct hci_rp_read_page_timeout* pageTimeout = JumpEventHeader<struct hci_rp_read_page_timeout, struct hci_ev_cmd_complete>(event); if (pageTimeout->status == BT_OK) { fProperties->AddInt16("page_timeout", pageTimeout->page_timeout); TRACE_BT("LocalDeviceImpl: Page Timeout=%x\n", pageTimeout->page_timeout); } reply.AddInt8("status", pageTimeout->status); reply.AddInt32("result", pageTimeout->page_timeout); status = request->SendReply(&reply); //printf("Sending reply... %ld\n", status); // debug reply.PrintToStream(); // This request is not gonna be used anymore ClearWantedEvent(request); break; } case PACK_OPCODE(OGF_INFORMATIONAL_PARAM, OCF_READ_LOCAL_FEATURES): { struct hci_rp_read_loc_features* features = JumpEventHeader<struct hci_rp_read_loc_features, struct hci_ev_cmd_complete>(event); if (features->status == BT_OK) { if (!IsPropertyAvailable("features")) { fProperties->AddData("features", B_ANY_TYPE, &features->features, 8); uint16 packetType = HCI_DM1 | HCI_DH1 | HCI_HV1; bool roleSwitch = (features->features[0] & LMP_RSWITCH) != 0; bool encryptCapable = (features->features[0] & LMP_ENCRYPT) != 0; if (features->features[0] & LMP_3SLOT) packetType |= (HCI_DM3 | HCI_DH3); if (features->features[0] & LMP_5SLOT) packetType |= (HCI_DM5 | HCI_DH5); if (features->features[1] & LMP_HV2) packetType |= (HCI_HV2); if (features->features[1] & LMP_HV3) packetType |= (HCI_HV3); fProperties->AddInt16("packet_type", packetType); fProperties->AddBool("role_switch_capable", roleSwitch); fProperties->AddBool("encrypt_capable", encryptCapable); TRACE_BT("LocalDeviceImpl: Packet type %x role switch %d encrypt %d\n", packetType, roleSwitch, encryptCapable); } } TRACE_BT("LocalDeviceImpl: Reply for Local Features %x\n", features->status); reply.AddInt8("status", features->status); status = request->SendReply(&reply); //printf("Sending reply... %ld\n", status); // debug reply.PrintToStream(); // This request is not gonna be used anymore ClearWantedEvent(request); break; } case PACK_OPCODE(OGF_INFORMATIONAL_PARAM, OCF_READ_BUFFER_SIZE): { struct hci_rp_read_buffer_size* buffer = JumpEventHeader<struct hci_rp_read_buffer_size, struct hci_ev_cmd_complete>(event); if (buffer->status == BT_OK) { if (!IsPropertyAvailable("acl_mtu")) fProperties->AddInt16("acl_mtu", buffer->acl_mtu); if (!IsPropertyAvailable("sco_mtu")) fProperties->AddInt8("sco_mtu", buffer->sco_mtu); if (!IsPropertyAvailable("acl_max_pkt")) fProperties->AddInt16("acl_max_pkt", buffer->acl_max_pkt); if (!IsPropertyAvailable("sco_max_pkt")) fProperties->AddInt16("sco_max_pkt", buffer->sco_max_pkt); } TRACE_BT("LocalDeviceImpl: Reply for Read Buffer Size %x\n", buffer->status); reply.AddInt8("status", buffer->status); status = request->SendReply(&reply); //printf("Sending reply... %ld\n", status); // debug reply.PrintToStream(); // This request is not gonna be used anymore ClearWantedEvent(request); } break; case PACK_OPCODE(OGF_INFORMATIONAL_PARAM, OCF_READ_BD_ADDR): { struct hci_rp_read_bd_addr* readbdaddr = JumpEventHeader<struct hci_rp_read_bd_addr, struct hci_ev_cmd_complete>(event); if (readbdaddr->status == BT_OK) { reply.AddData("bdaddr", B_ANY_TYPE, &readbdaddr->bdaddr, sizeof(bdaddr_t)); } TRACE_BT("LocalDeviceImpl: Read bdaddr status = %x\n", readbdaddr->status); reply.AddInt8("status", readbdaddr->status); status = request->SendReply(&reply); //printf("Sending reply... %ld\n", status); // debug reply.PrintToStream(); // This request is not gonna be used anymore ClearWantedEvent(request); } break; case PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_READ_CLASS_OF_DEV): { struct hci_read_dev_class_reply* classDev = JumpEventHeader<struct hci_read_dev_class_reply, struct hci_ev_cmd_complete>(event); if (classDev->status == BT_OK) { reply.AddData("devclass", B_ANY_TYPE, &classDev->dev_class, sizeof(classDev->dev_class)); } TRACE_BT("LocalDeviceImpl: Read DeviceClass status = %x DeviceClass = [%x][%x][%x]\n", classDev->status, classDev->dev_class[0], classDev->dev_class[1], classDev->dev_class[2]); reply.AddInt8("status", classDev->status); status = request->SendReply(&reply); //printf("Sending reply... %ld\n", status); // debug reply.PrintToStream(); // This request is not gonna be used anymore ClearWantedEvent(request); break; } case PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_READ_LOCAL_NAME): { struct hci_rp_read_local_name* readLocalName = JumpEventHeader<struct hci_rp_read_local_name, struct hci_ev_cmd_complete>(event); if (readLocalName->status == BT_OK) { reply.AddString("friendlyname", (const char*)readLocalName->local_name); } TRACE_BT("LocalDeviceImpl: Friendly name status %x\n", readLocalName->status); reply.AddInt8("status", readLocalName->status); status = request->SendReply(&reply); //printf("Sending reply... %ld\n", status); // debug reply.PrintToStream(); // This request is not gonna be used anymore ClearWantedEvent(request); break; } case PACK_OPCODE(OGF_LINK_CONTROL, OCF_PIN_CODE_REPLY): { uint8* statusReply = (uint8*)(event + 1); // TODO: This reply has to match the BDADDR of the outgoing message TRACE_BT("LocalDeviceImpl: pincode accept status %x\n", *statusReply); reply.AddInt8("status", *statusReply); status = request->SendReply(&reply); //printf("Sending reply... %ld\n", status); // debug reply.PrintToStream(); // This request is not gonna be used anymore //ClearWantedEvent(request, HCI_EVENT_CMD_COMPLETE, opcodeExpected); ClearWantedEvent(request); break; } case PACK_OPCODE(OGF_LINK_CONTROL, OCF_PIN_CODE_NEG_REPLY): { uint8* statusReply = (uint8*)(event + 1); // TODO: This reply might match the BDADDR of the outgoing message // => FindPetition should be expanded.... TRACE_BT("LocalDeviceImpl: pincode reject status %x\n", *statusReply); reply.AddInt8("status", *statusReply); status = request->SendReply(&reply); //printf("Sending reply... %ld\n", status); // debug reply.PrintToStream(); // This request is not gonna be used anymore ClearWantedEvent(request, HCI_EVENT_CMD_COMPLETE, opcodeExpected); break; } case PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_READ_STORED_LINK_KEY): { struct hci_read_stored_link_key_reply* linkKeyRetrieval = JumpEventHeader<struct hci_read_stored_link_key_reply, struct hci_ev_cmd_complete>(event); TRACE_BT("LocalDeviceImpl: Status %s MaxKeys=%d, KeysRead=%d\n", BluetoothError(linkKeyRetrieval->status), linkKeyRetrieval->max_num_keys, linkKeyRetrieval->num_keys_read); reply.AddInt8("status", linkKeyRetrieval->status); status = request->SendReply(&reply); //printf("Sending reply... %ld\n", status); // debug reply.PrintToStream(); ClearWantedEvent(request); break; } case PACK_OPCODE(OGF_LINK_CONTROL, OCF_LINK_KEY_NEG_REPLY): case PACK_OPCODE(OGF_LINK_CONTROL, OCF_LINK_KEY_REPLY): { struct hci_cp_link_key_reply_reply* linkKeyReply = JumpEventHeader<struct hci_cp_link_key_reply_reply, struct hci_ev_cmd_complete>(event); TRACE_BT("LocalDeviceImpl: Status %s addresss=%s\n", BluetoothError(linkKeyReply->status), bdaddrUtils::ToString(linkKeyReply->bdaddr).String()); ClearWantedEvent(request, HCI_EVENT_CMD_COMPLETE, opcodeExpected); break; } case PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_READ_SCAN_ENABLE): { struct hci_read_scan_enable* scanEnable = JumpEventHeader<struct hci_read_scan_enable, struct hci_ev_cmd_complete>(event); if (scanEnable->status == BT_OK) { fProperties->AddInt8("scan_enable", scanEnable->enable); TRACE_BT("LocalDeviceImpl: enable = %x\n", scanEnable->enable); } reply.AddInt8("status", scanEnable->status); reply.AddInt8("scan_enable", scanEnable->enable); status = request->SendReply(&reply); printf("Sending reply. scan_enable = %d\n", scanEnable->enable); // debug reply.PrintToStream(); // This request is not gonna be used anymore ClearWantedEvent(request); break; } // place here all CC that just replies a uint8 status case PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_RESET): case PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_WRITE_SCAN_ENABLE): case PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_WRITE_CLASS_OF_DEV): case PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_WRITE_PG_TIMEOUT): case PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_WRITE_CA_TIMEOUT): case PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_WRITE_AUTH_ENABLE): case PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_WRITE_LOCAL_NAME): case PACK_OPCODE(OGF_VENDOR_CMD, OCF_WRITE_BCM2035_BDADDR): { reply.AddInt8("status", *(uint8*)(event + 1)); TRACE_BT("LocalDeviceImpl: %s for %s status %x\n", __FUNCTION__, BluetoothCommandOpcode(opcodeExpected), *(uint8*)(event + 1)); status = request->SendReply(&reply); printf("%s: Sending reply write...\n", __func__); if (status < B_OK) printf("%s: Error sending reply write!\n", __func__); ClearWantedEvent(request); break; } default: TRACE_BT("LocalDeviceImpl: Command Complete not handled\n"); break; } }
bool VideoUIPlayer::HandleAction(int Action) { if (m_render) { if (Action == Torc::DisplayDeviceReset) { return m_render->DisplayReset(); } else if (Action == Torc::EnableHighQualityScaling || Action == Torc::DisableHighQualityScaling || Action == Torc::ToggleHighQualityScaling) { if (IsPropertyAvailable(HQScaling)) { if (Action == Torc::EnableHighQualityScaling) { SendUserMessage(QObject::tr("Requested high quality scaling")); return m_render->SetProperty(TorcPlayer::HQScaling, QVariant(true)); } else if (Action == Torc::DisableHighQualityScaling) { SendUserMessage(QObject::tr("Disabled high quality scaling")); return m_render->SetProperty(TorcPlayer::HQScaling, QVariant(false)); } else if (Action == Torc::ToggleHighQualityScaling) { bool enabled = !(m_render->GetProperty(TorcPlayer::HQScaling).toBool()); SendUserMessage(enabled ? QObject::tr("Requested high quality scaling") : QObject::tr("Disabled high quality scaling")); return m_render->SetProperty(TorcPlayer::HQScaling, QVariant(enabled)); } } else { SendUserMessage(QObject::tr("Not available")); } } else if (Action == Torc::DecreaseBrightness) { return m_colourSpace->ChangeProperty(Brightness, false); } else if (Action == Torc::IncreaseBrightness) { return m_colourSpace->ChangeProperty(Brightness, true); } else if (Action == Torc::DecreaseContrast) { return m_colourSpace->ChangeProperty(Contrast, false); } else if (Action == Torc::IncreaseContrast) { return m_colourSpace->ChangeProperty(Contrast, true); } else if (Action == Torc::DecreaseSaturation) { return m_colourSpace->ChangeProperty(Saturation, false); } else if (Action == Torc::IncreaseSaturation) { return m_colourSpace->ChangeProperty(Saturation, true); } else if (Action == Torc::DecreaseHue) { return m_colourSpace->ChangeProperty(Hue, false); } else if (Action == Torc::IncreaseHue) { return m_colourSpace->ChangeProperty(Hue, true); } } return VideoPlayer::HandleAction(Action); }