Sunday, December 15, 2024

Some bit manipulations

 This C++ code has bits access routines to get and set some bits:


dataBits.h:




#include <cstdint>
#include <iostream>

template <typename T>
class DataBits
{
public:
DataBits(T v=0) : m_data(v) {};
        
        T get() const { return m_data; }

        void set(T v) { m_data = v; }

        // 0-based
        template <typename TB>
static constexpr TB BitMask(int startpos, int endpos)
{
return TB((1<<(endpos-startpos+1))-1) << startpos;
        }

        constexpr T GetBits(int startpos, int endpos)
        {
            return (m_data & BitMask<T>(startpos, endpos)) >> startpos;
        }

        void SetBits(int startpos, int endpos, T newData)
        {
            auto mask = BitMask<T>(startpos, endpos);
            m_data = (m_data & ~mask) | ((newData << startpos) & mask);
        }

private:
    T  m_data;

};



main.cpp:

#include <iostream>
#include <format>
#include <bitset>
#include <iomanip>
#include "dataBits.h"


int main()
{
    std::cout << std::format("{:#04x}", 0x0e) << std::endl;
    std::cout << "BitMask[1..3] = " << std::hex << "0x" << DataBits<uint32_t>::BitMask<uint32_t>(1,3) << std::endl;

    DataBits bits = 0b1110101001010011;
    std::cout << "bits = " << std::setw(55) << std::bitset<32>(bits.get()) << std::endl;
    auto newbits = 0b010;
    bits.SetBits(13, 15, newbits);
    std::cout << "bits with bits[13..15]=" << std::bitset<3>(newbits) << " -> " << std::bitset<32>(bits.get()) << std::endl;
    std::cout << "BitMask[1..3] = " << std::hex << "0x" << DataBits<uint32_t>::BitMask<uint32_t>(1,3) << std::endl;
    std::cout << "data @bits[13..15] = " << std::bitset<3>(bits.GetBits(13,15)) << std::endl;
    return 0;
}


Saturday, February 5, 2022

Solution to Weak Sound from Maono USB/XLR HD300T Microphone

 I bought a USB/XLR Dynamic Microphone "Maono HD-300T" from Amazon a few months ago and was disappointed with its low or quiet sound made by my Windows 11 when connected through its USB connection.  I tested the microphone through its XLR connection to my Yamaha Audio mixer, no phantom power is needed (as this is a dynamic microphone), but I had to set the preamp gain all the way to its max to get a decent volume.

The volume setting was set to 100%, but I had no luck making it better. I was thinking perhaps it required a special USB driver, but nope, it simply used the stock Windows driver (Maono's official website doesn't mention anything about a special driver for this particular model).

At one point I gave up on using it for my video conferences and meetings and back to just using the built-in microphone on my webcam (Logitech HD 920).  Last week I found an idea to test the microphone using my PC analog microphone input.  I found and bought an XLR-to-3.5mm TRS which is perfect to connect the microphone to my PC.  The good thing with built-in audio from motherboard is that Windows support boost gain to +30 dB, so I was able to make the microphone work properly.

Not being satisfied with that one solution, I googled around and found somebody mentioned about Equalizer APO and its accompanying UI interface, Peace Equalizer APO.  Got them installed and ran, I then connected my Microphone to one of my PC's USB.  After playing around on how to use it (It's a lot of parameter controls and kind of confusing, at least for beginners), I managed to boost the gain of the microphone to + 3- dB. Hooray!

Below is my settings (I saved it as "My Microphone mono" settings.  It is based on the "Microphone mono" preset configuration.):


Set the preamp to gain around +20 dB.  As can be seen, I turn on "Prevent Clipping" down below, so even if set it to the max (+30 dB gain), we shouldn't get the audio clipped.  The downside to crank it up to the max is we'd also get louder noise.









I configure the audio to live play back to its headphone connector (so I can hear my own voice for monitoring purposes):


The level is always set to 100% in this pane:


Saturday, December 18, 2021

2.5 Gbps Ethernet slowing down

 I was having issues again with the unexpected slowness of my internet access.  This time turns out due to failure in ethernet auto-negotiation.  My PC's ethernet interface is 2.5 Gbps, as well MoCA adapter that is connected to it.  It was working fine, until yesterday, where I got only 90's Mbps on SpeedTest.

There is cool PowerShell command to display the link speed: Get-NetAdapter.

We can create a DOS shell wrapper, so invoking this from a regular DOS prompt would work.

For example, I put this command in a file called "getnet.ps1".  I created another DOS script called "getnet.cmd" with the content of it just calling getps1.ps1:


In getnet.ps1:

Get-NetAdapter


In getnet.cmd:

call getnet.ps1


For example:

C:\Users\anon\bin>type getnet.cmd

call getnet.ps1


C:\Users\lshih\bin>getnet


C:\Users\lshih\bin>call getnet.ps1


Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed

----                      --------------------                    ------- ------       ----------             ---------

Bluetooth Network Conn... Bluetooth Device (Personal Area Netw...      27 Disconnected 38-FC-98-13-E9-2A         3 Mbps

2.5 GigE LAN              Realtek Gaming 2.5GbE Family Contr...#2      21 Up           04-42-1A-0C-2C-C4       2.5 Gbps

vEthernet (2.5 GigE LAN)  Hyper-V Virtual Ethernet Adapter             16 Up           00-15-5D-76-F1-69        10 Gbps

vEthernet (1 GigE LAN)    Hyper-V Virtual Ethernet Adapter #3          52 Up           00-15-5D-D2-5B-EB        10 Gbps

1 GigE LAN                Intel(R) I211 Gigabit Network Conn...#2      14 Up           04-42-1A-0C-2C-C3         1 Gbps

vEthernet (VirtualBox ... Hyper-V Virtual Ethernet Adapter #2          40 Up           00-15-5D-F1-53-24        10 Gbps

VirtualBox Host-Only N... VirtualBox Host-Only Ethernet Adapter         7 Up           0A-00-27-00-00-07         1 Gbps

vEthernet (WSL)           Hyper-V Virtual Ethernet Adapter #4          75 Up           00-15-5D-9C-4E-D0        10 Gbps


Friday, December 17, 2021

Chinese Hackers are now the top of the list

 My gateway router has a cool security feature called Intrusive Threat Prevention (ITS).  When I checked the statistics from where most of the attacks occurred to my gateway, majority the attacks come from China.




Friday, December 10, 2021

What is the maximum Transmit Power sent by 5G Iphone?

 I have been wondering so far how much power a 5G phone, like iPhone 12, can transmit to RAN (Radio Access Network), a.k.a. a base station.

According to the table in standard document ETSI TS 138 101-1, section 6.2.1 for "UE maximum output power", the maximum power for class 2 is 26 dBm (0.398 Watt) and for class 3 is 23 dBm (0.199 Watt).  Class 2 UE (User Element) only transmits at certain frequency bands only, namely n41, n77, n78, and n79, while class 3 transmits in all spectrums.


As stated, the period of measurement shall be at least one sub-frame (sfn, 1ms). 

The above maximum value is rarely reached unless the signal reception by UE or BS (Base station) is too weak.

To understand what are those NR bands, see 5G NR frequency bands - Wikipedia



Tuesday, November 30, 2021

Enabling Older Key Algorithms in SSH

Supposedly the server we want to access is at address 192.168.1.11 and it only supports older key hash algorithms.  Add those algorithms in ~/.ssh/config, such as:


 Host 192.168.1.11
        KexAlgorithms +diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1
        PubkeyAcceptedAlgorithms +ssh-rsa
        HostkeyAlgorithms +ssh-rsa



On another occasion, when I do that on Windows 11, I have to create a file %USERPROFILE%\.ssh\config with the content:


Host 192.168.1.11
    KexAlgorithms +diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1
    HostkeyAlgorithms +ssh-rsa
    PubkeyAcceptedAlgorithms +ssh-rsa
    MACS hmac-md5,hmac-sha1