mirror of
https://github.com/EFForg/rayhunter.git
synced 2026-04-27 07:59:59 -07:00
Add support for the Wingtech CT2MHS01 hotspot, a Qualcomm mdm9650-based device with a screen available for US$15-35. This device is often used as a base platform for while labeled versions like the T-Mobile TMOHS1. AT&T branded versions of the hotspot seem to be the most abundant. The device has a framebuffer-driven screen at /dev/fb0 that behaves similarly to the Orbic RC400L, although the userspace program `displaygui` refreshes the screen significantly more often than on the Orbic. This causes the green line on the screen to subtly flicker and only be displayed during some frames. Subsequent work to fully control the display without removing the OEM interface is desired.
55 lines
1.4 KiB
Rust
55 lines
1.4 KiB
Rust
/// Display support for the Wingtech CT2MHS01 hotspot.
|
|
///
|
|
/// Tested on (from `/etc/wt_version`):
|
|
/// WT_INNER_VERSION=SW_Q89323AA1_V057_M10_CRICKET_USR_MP
|
|
/// WT_PRODUCTION_VERSION=CT2MHS01_0.04.55
|
|
/// WT_HARDWARE_VERSION=89323_1_20
|
|
use crate::config;
|
|
use crate::display::generic_framebuffer::{self, Dimensions, GenericFramebuffer};
|
|
use crate::display::DisplayState;
|
|
|
|
use tokio::sync::mpsc::Receiver;
|
|
use tokio::sync::oneshot;
|
|
use tokio_util::task::TaskTracker;
|
|
|
|
const FB_PATH: &str = "/dev/fb0";
|
|
|
|
#[derive(Copy, Clone, Default)]
|
|
struct Framebuffer;
|
|
|
|
impl GenericFramebuffer for Framebuffer {
|
|
fn dimensions(&self) -> Dimensions {
|
|
Dimensions {
|
|
height: 128,
|
|
width: 160,
|
|
}
|
|
}
|
|
|
|
fn write_buffer(&mut self, buffer: &[(u8, u8, u8)]) {
|
|
let mut raw_buffer = Vec::new();
|
|
for (r, g, b) in buffer {
|
|
let mut rgb565: u16 = (*r as u16 & 0b11111000) << 8;
|
|
rgb565 |= (*g as u16 & 0b11111100) << 3;
|
|
rgb565 |= (*b as u16) >> 3;
|
|
raw_buffer.extend(rgb565.to_le_bytes());
|
|
}
|
|
|
|
std::fs::write(FB_PATH, &raw_buffer).unwrap();
|
|
}
|
|
}
|
|
|
|
pub fn update_ui(
|
|
task_tracker: &TaskTracker,
|
|
config: &config::Config,
|
|
ui_shutdown_rx: oneshot::Receiver<()>,
|
|
ui_update_rx: Receiver<DisplayState>,
|
|
) {
|
|
generic_framebuffer::update_ui(
|
|
task_tracker,
|
|
config,
|
|
Framebuffer,
|
|
ui_shutdown_rx,
|
|
ui_update_rx,
|
|
)
|
|
}
|