Exemplo n.º 1
0
static void parse_sense_key_specific(unsigned char *sks, sense_info_t *info)
{
        info->sense_key_specific_valid = sks[0] & 0x80;
        if (info->sense_key_specific_valid)
        {
                uint32_t sense_key_specific = get_uint24(sks, 0) & 0x007FFFFF;
                switch (info->sense_key) {
                        case SENSE_KEY_ILLEGAL_REQUEST:
                                info->sense_key_specific.illegal_request.command_error = sense_key_specific & 0x400000;
                                info->sense_key_specific.illegal_request.bit_pointer_valid = sense_key_specific & 0x080000;
                                info->sense_key_specific.illegal_request.bit_pointer = (sense_key_specific & 0x070000) >> 16;
                                info->sense_key_specific.illegal_request.command_error = sense_key_specific & 0xFFFF;
                                break;
                        case SENSE_KEY_HARDWARE_ERROR:
                        case SENSE_KEY_MEDIUM_ERROR:
                        case SENSE_KEY_RECOVERED_ERROR:
                                info->sense_key_specific.hardware_medium_recovered_error.actual_retry_count = sense_key_specific & 0xFFFF;
                                break;
                        case SENSE_KEY_NOT_READY:
                        case SENSE_KEY_NO_SENSE:
                                info->sense_key_specific.not_ready.progress = ((double)(sense_key_specific & 0xFFFF))/65536.0;
                                break;
                        case SENSE_KEY_COPY_ABORTED:
                                info->sense_key_specific.copy_aborted.segment_descriptor = sense_key_specific & 0x200000;
                                info->sense_key_specific.copy_aborted.bit_pointer_valid = sense_key_specific & 0x080000;
                                info->sense_key_specific.copy_aborted.bit_pointer = (sense_key_specific & 0x070000) >> 16;
                                info->sense_key_specific.copy_aborted.field_pointer = sense_key_specific & 0xFFFF;
                                break;
                        case SENSE_KEY_UNIT_ATTENTION:
                                info->sense_key_specific.unit_attention.overflow = sense_key_specific & 0x010000;
                                break;
                        default:
                                info->sense_key_specific_valid = false;
                                break;
                }
        }
uint24 HCI_WRITE_CURRENT_IAC_LAP_T_PDU::get_iac_lap(uint8 index) const
{
    return get_uint24(HCI_WRITE_CURRENT_IAC_LAP_T_pduSize + index*3) ;
}
Exemplo n.º 3
0
BluetoothDeviceAddress HCIPDU::get_BluetoothDeviceAddress(uint16 offset) const
{
    return BluetoothDeviceAddress ( get_uint16 ( offset + 4 ),
                                    get_uint8  ( offset + 3 ),
                                    get_uint24 ( offset ) ) ; 
}