summaryrefslogtreecommitdiff
diff options
authorPMR <pmr@pmr-lander>2020-02-11 12:51:26 +0000
committerPMR <pmr@pmr-lander>2020-02-11 12:51:26 +0000
commit944807d70b5f784f3f9b29a2d7fc547c8bbc6645 (patch)
treebca4f14860b9a950adbc8dc50de88b6418070a82
parentdc386bea3aba5215baf335ce1ec1452ce36a8b4b (diff)
Import plainbox-provider-checkbox_0.51.0~rc1.orig.tar.gzupstream-0.51.0_rc1patched-0.51.0_rc1-1
-rwxr-xr-xbin/boot_mode_test45
-rwxr-xr-xbin/camera_test_rpi.py63
-rwxr-xr-xbin/chameleon_edid_stress.py115
-rwxr-xr-xbin/chameleon_hdmi_hotplug.py74
-rwxr-xr-xbin/cpuid.py2
-rwxr-xr-xbin/disk_read_performance_test6
-rwxr-xr-xbin/dkms_info.py (renamed from bin/dkms_info)206
-rwxr-xr-xbin/dmi-sysfs-resource46
-rwxr-xr-xbin/dmi_sysfs_resource.py43
-rwxr-xr-xbin/fan_reaction_test.py9
-rwxr-xr-xbin/i2c_driver_test.py (renamed from bin/i2c_driver_test)61
-rwxr-xr-xbin/kernel_taint_test93
-rwxr-xr-xbin/module_loaded_test.py (renamed from bin/module_loaded_test)25
-rwxr-xr-xbin/pm_test12
-rwxr-xr-xbin/recovery_info399
-rwxr-xr-xbin/recovery_info.py206
-rwxr-xr-xbin/removable_storage_test6
-rwxr-xr-xbin/snap_tests.py65
-rwxr-xr-xbin/tpm-sysfs-resource68
-rwxr-xr-xbin/tpm_sysfs_resoource.py62
-rwxr-xr-xbin/virtualization15
-rwxr-xr-xbin/wifi_master_mode.py (renamed from bin/wifi_master_mode)17
-rwxr-xr-xbin/wwan_tests.py (renamed from bin/wwan_tests)96
-rw-r--r--data/chameleon_edids/README2
-rw-r--r--data/chameleon_edids/daily/4K_ACER_BX320HK_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/4K_DELL_UP3216Q_DP.txt16
-rw-r--r--data/chameleon_edids/daily/4K_HP_Spectre32_DP.txt16
-rw-r--r--data/chameleon_edids/daily/4K_HP_Spectre32_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/ACI_9155_ASUS_VH238_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/ACI_9713_ASUS_VE258_DP.txt16
-rw-r--r--data/chameleon_edids/daily/ACR_314_Acer_T232HL_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/ACR_315_Acer_T272HL_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/ACR_5429_H6510BD_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/AMX_2150_DVX-2150_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/ATL_1_AT-HDVS-RX_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/CEI_0_Crestron_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/CEI_31032_Crestron_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/CVT_3_CVT_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/DEL_16443_DELL_2208WFP_DP.txt8
-rw-r--r--data/chameleon_edids/daily/DEL_16543_DELL_P2314T_DP.txt16
-rw-r--r--data/chameleon_edids/daily/DEL_16544_DELL_P2314T_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/DEL_16545_DELL_P2314T_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/DEL_40976_DELL_2405FPW_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/DEL_40983_DELL_2407WFP_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/DEL_41046_DELL_U2711_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/DEL_61462_DELL_U2410_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/DEL_61463_DELL_U2410_DP.txt16
-rw-r--r--data/chameleon_edids/daily/DTV_0_DTV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/DTV_0_Kogan_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/ELO_8705_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/EXN_0_EXTRON_D_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/EXN_0_ExtronScalerD_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/EXN_0_Extron_HDMI_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/GSM_1_LG_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/GSM_22593_D2342P_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/GSM_22594_D2342P_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/GSM_23155_22CV241_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/GSM_50200_LG_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/GSM_50294_M3704C_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/HEC_48_HDMI_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/HWP_10345_HP_ZR24w_DP.txt8
-rw-r--r--data/chameleon_edids/daily/HWP_10346_HP_ZR24w_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/HWP_10348_HP_ZR30w_DP.txt8
-rw-r--r--data/chameleon_edids/daily/HWP_10580_HP_ZR2440w_DP.txt16
-rw-r--r--data/chameleon_edids/daily/HWP_10581_HP_ZR2440w_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/HWP_10582_HP_ZR2440w_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/HWP_12441_HP_Z30i_DP.txt16
-rw-r--r--data/chameleon_edids/daily/HWP_12442_HP_Z30i_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/HWP_12446_HP_Z24i_DP.txt8
-rw-r--r--data/chameleon_edids/daily/HWP_12447_HP_Z24i_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/HWP_9846_HP_LP2465_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/HWP_9976_HP_LP2475w_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/IFS_65330_InFocus_3118D_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/JVC_37393_ILAFPJ_--_XH2_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/LEN_4420_LEN_LT2452pwC_DP.txt16
-rw-r--r--data/chameleon_edids/daily/MEI_41153_PanasonicTV0_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/MEI_41178_PanasonicTV0_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/MEI_41622_Panasonic-TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/MEI_49938_Panasonic-TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/MEL_12813_UL7400_DP.txt16
-rw-r--r--data/chameleon_edids/daily/MEL_12813_UL7400_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/MEL_18424_MDT521S_DP.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18424_MDT521S_DVI.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18424_MDT521S_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18425_MDT521S_DP.txt16
-rw-r--r--data/chameleon_edids/daily/MEL_18425_MDT521S_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/MEL_18426_MDT521S_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/MEL_18427_MDT521S_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/MEL_18431_MDT421S_DP.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18431_MDT421S_DVI.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18431_MDT421S_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18432_MDT421S_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/MEL_18433_MDT421S_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/MEL_18434_MDT421S_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/MEL_18435_MDT421S_DP.txt16
-rw-r--r--data/chameleon_edids/daily/MEL_18473_LDT422V_DVI.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18477_MDT651S_DP.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18477_MDT651S_DVI.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18497_MDT652S_DP.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18497_MDT652S_DVI.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18497_MDT652S_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18501_LDT551V_DP.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18501_LDT551V_DVI.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18545_MDT551S_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/MEL_18546_MDT551S_DP.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18546_MDT551S_DVI.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18546_MDT551S_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18547_MDT551S_DP.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18547_MDT551S_DVI.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18589_A2129_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/MEL_18590_A2129_DP.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18590_A2129_DVI.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18590_A2129_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18596_A2129_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/MEL_18599_A3112_DP.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18599_A3112_DVI.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18600_A3112_DP.txt8
-rw-r--r--data/chameleon_edids/daily/MEL_18600_A3112_DVI.txt8
-rw-r--r--data/chameleon_edids/daily/MST_48_TV_MONITOR_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/MTK_1_MTK_LCDTV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26504_P461_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26505_P461_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26511_P521_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26515_P551_DP.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26515_P551_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26519_P701_DP.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26519_P701_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26666_P402_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26669_P462_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26771_P702_DP.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26771_P702_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26795_V423_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26796_V423_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26799_V463_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26800_V463_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26803_V552_DP.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26803_V552_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26804_V552_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26807_V652_DP.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26807_V652_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26811_V801_DP.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26811_V801_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_26941_P703_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_31161_NP-PA500U_DVI.txt16
-rw-r--r--data/chameleon_edids/daily/NEC_31178_NP-P420X_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/PHL_0_PHILIPS_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/PHL_0_Philips_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_1629_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_1639_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_1882_SM460DX3_DVI.txt8
-rw-r--r--data/chameleon_edids/daily/SAM_1984_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_1986_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_1987_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2047_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2114_SyncMaster_DP.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2185_SMS27A850T_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2262_S23B350_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2300_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2302_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2306_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2381_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2382_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2412_SyncMaster_DP.txt8
-rw-r--r--data/chameleon_edids/daily/SAM_2412_SyncMaster_DVI.txt8
-rw-r--r--data/chameleon_edids/daily/SAM_2412_SyncMaster_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/SAM_2413_SyncMaster_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2460_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2620_S24C350_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2682_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2685_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2686_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2758_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2763_SyncMaster_DP.txt8
-rw-r--r--data/chameleon_edids/daily/SAM_2763_SyncMaster_DVI.txt8
-rw-r--r--data/chameleon_edids/daily/SAM_2763_SyncMaster_HDMI.txt8
-rw-r--r--data/chameleon_edids/daily/SAM_2764_SyncMaster_DP.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2765_SyncMaster_DP.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2765_SyncMaster_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2908_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2912_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2919_S27D390_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2940_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2961_SAMSUNG_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2965_SyncMaster_DVI.txt8
-rw-r--r--data/chameleon_edids/daily/SAM_2978_SyncMaster_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SAM_2979_SyncMaster_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SEC_42499_EPSON_PJ_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SEC_42502_EPSON_PJ_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_0_LC-48LE551U_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_0_LC-65LE643U_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_13448_LC-50LE650U_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_13450_LC-50LE442U_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_18004_LC-46LE540U_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_4168_SHARP_HDMI_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_4217_SHARP_HDMI_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_4234_SHARP_HDMI_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_4262_SHARP_HDMI_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_4293_SHARP_HDMI_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_4314_SHARP_HDMI_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_4315_SHARP_HDMI_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_4320_SHARP_HDMI_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_4325_SHARP_HDMI_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_4326_SHARP_HDMI_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_4327_SHARP_HDMI_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_4351_SHARP_HDMI_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SHP_4353_SHARP_HDMI_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SNY_11522_SONY_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SNY_12546_SONY_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SNY_17666_SONY_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SNY_19459_SONY_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SNY_24833_SONY_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SNY_32258_SONY_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SNY_32770_SONY_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SNY_33280_SONY_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SNY_33536_SONY_TV_XV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SNY_39937_SONY_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SNY_43265_SONY_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SNY_55810_SONY_TV_01_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SNY_5635_SONY_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SNY_59905_SONY_TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/SNY_9475_SONY_TV_07_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/TFA_1664_PC2TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/TSB_518_TOSHIBA-TV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/VIZ_113_E370VA_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/VIZ_120_M3D550KDE_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/VIZ_133_M421NV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/VIZ_146_E3D470VX_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/VIZ_146_E601i-A3_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/VIZ_146_E701i-A3_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/VIZ_146_M3D651SV_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/VIZ_149_E291-A1_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/VIZ_152_E470-A0_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/VIZ_4100_E470i-A0_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/VIZ_4100_E550i-B2_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/VIZ_4102_E600i-B3_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/VIZ_87_E470VL_HDMI.txt16
-rw-r--r--data/chameleon_edids/daily/VSC_54823_VX1951m_HDMI.txt8
-rwxr-xr-xmanage.py2
-rw-r--r--units/audio/jobs.pxu2
-rw-r--r--units/audio/manifest.pxu6
-rw-r--r--units/bluetooth/test-plan.pxu1
-rw-r--r--units/camera/jobs.pxu30
-rw-r--r--units/camera/manifest.pxu4
-rw-r--r--units/camera/test-plan.pxu26
-rw-r--r--units/cpu/jobs.pxu4
-rw-r--r--units/dock/jobs.pxu519
-rw-r--r--units/dock/test-plan.pxu251
-rw-r--r--units/gpgpu/jobs.pxu2
-rw-r--r--units/graphics/jobs.pxu2
-rw-r--r--units/i2c/jobs.pxu6
-rw-r--r--units/info/jobs.pxu18
-rw-r--r--units/info/packaging.pxu5
-rw-r--r--units/keys/jobs.pxu13
-rw-r--r--units/keys/test-plan.pxu1
-rw-r--r--units/led/test-plan.pxu6
-rw-r--r--units/miscellanea/jobs.pxu25
-rw-r--r--units/miscellanea/test-plan.pxu3
-rw-r--r--units/monitor/jobs.pxu25
-rw-r--r--units/monitor/test-plan.pxu23
-rw-r--r--units/stress/boot.pxu10
-rw-r--r--units/stress/jobs.pxu57
-rw-r--r--units/stress/test-plan.pxu10
-rw-r--r--units/submission/jobs.pxu6
-rw-r--r--units/submission/test-plan.pxu1
-rw-r--r--units/suspend/test-plan.pxu4
-rw-r--r--units/thunderbolt/test-plan.pxu12
-rw-r--r--units/tpm/sysfs.pxu12
-rw-r--r--units/usb/manifest.pxu5
-rw-r--r--units/usb/test-plan.pxu2
-rw-r--r--units/usb/usb.pxu21
-rw-r--r--units/wireless/wifi-ap.pxu8
-rw-r--r--units/wwan/jobs.pxu8
-rw-r--r--units/wwan/resource.pxu2
273 files changed, 4858 insertions, 1026 deletions
diff --git a/bin/boot_mode_test b/bin/boot_mode_test
index 7c9358c..e51a099 100755
--- a/bin/boot_mode_test
+++ b/bin/boot_mode_test
@@ -26,19 +26,16 @@ import logging
from argparse import ArgumentParser
-def version_check(check):
- """Check the installed Ubuntu version to see if it is older than 16.04
- (Xenial) and run the requested check
+def do_tests(check):
+ """Dispatcher for the requested tests.
:returns:
- 0 if if the installed version is older than 16.04 regardless of return
- code from the requested check
-
- return code from requested check if the installed version is 16.04 or
- newer.
+ return code from requested check.
"""
if check == 'efi':
return efi_boot_check()
+ elif check == 'reboot_firmware':
+ return reboot_to_firmware_check()
else:
return secure_boot_check()
@@ -59,6 +56,33 @@ def efi_boot_check():
return 1
+def reboot_to_firmware_check():
+ """Test that the computer supports the reboot-to-firmware feature.
+
+ :returns:
+ 0 if the feature IS supported (pass)
+ 1 if the feature is NOT supported (fail)
+ """
+ osis_dir = "/sys/firmware/efi/efivars/"
+ osis_var = osis_dir + \
+ "OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c"
+ if os.path.isdir(osis_dir):
+ if os.path.isfile(osis_var):
+ fw_info = open(osis_var).read()
+ if ord(fw_info[4]) & 1:
+ logging.info("PASS: Reboot-to-firmware feature is present.")
+ return 0
+ else:
+ logging.error("FAIL: Reboot-to-firmware feature is missing.")
+ return 1
+ else:
+ logging.info("FAIL: OsIndicationsSupported variable not present.")
+ return 1
+ else:
+ logging.info("FAIL: System did NOT boot in EFI mode.")
+ return 1
+
+
def secure_boot_check():
"""Test that the computer booted with Secure Boot active.
@@ -97,13 +121,14 @@ def secure_boot_check():
def main():
parser = ArgumentParser()
parser.add_argument('check',
- choices=['efi', 'secureboot'],
+ choices=['efi', 'secureboot', 'reboot_firmware'],
help='The type of check to perform')
args = parser.parse_args()
FORMAT = '%(levelname)s: %(message)s'
logging.basicConfig(level=logging.INFO, format=FORMAT)
- return version_check(args.check)
+ return do_tests(args.check)
+
if __name__ == '__main__':
sys.exit(main())
diff --git a/bin/camera_test_rpi.py b/bin/camera_test_rpi.py
new file mode 100755
index 0000000..467ac13
--- /dev/null
+++ b/bin/camera_test_rpi.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python3
+# This file is part of Checkbox.
+#
+# Copyright 2020 Canonical Ltd.
+# Written by:
+# Jonathan Cave <jonathan.cave@canonical.com>
+#
+# Checkbox is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3,
+# as published by the Free Software Foundation.
+#
+# Checkbox is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Checkbox. If not, see <http://www.gnu.org/licenses/>.
+
+import argparse
+import os
+import sys
+import time
+
+import picamera
+
+# resolutions and framerates corresponding to sensor modes at:
+# https://picamera.readthedocs.io/en/release-1.13/fov.html#camera-modes
+test_res = [
+ ((1920, 1080), 2),
+ ((2592, 1944), 2),
+ ((2592, 1944), (1, 8)),
+ ((1296, 972), 5),
+ ((1296, 730), 20),
+ ((640, 480), 50),
+ ((640, 480), 80),
+]
+
+
+def capture():
+ path = os.path.expandvars('$PLAINBOX_SESSION_SHARE')
+ print('Images will be written to:\n{}\n'.format(path), flush=True)
+ for mode_no, (res, fr) in enumerate(test_res):
+ with picamera.PiCamera(resolution=res, framerate=fr) as camera:
+ print('Camera initialised, wait to settle...', flush=True)
+ time.sleep(2)
+ print('Resolution: {}'.format(camera.resolution))
+ print('Framerate: {}'.format(camera.framerate))
+ file = 'picam_{}.jpg'.format(mode_no+1)
+ camera.capture(os.path.join(path, file))
+ print('Image {} captured\n'.format(file))
+
+
+def main():
+ parser = argparse.ArgumentParser(description='PiCamera Tests')
+ parser.add_argument('--device', default="/dev/vchiq", type=str)
+ args = parser.parse_args()
+ print('Resolutions test on device: {}'.format(args.device), flush=True)
+ return capture()
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/bin/chameleon_edid_stress.py b/bin/chameleon_edid_stress.py
new file mode 100755
index 0000000..8cc007d
--- /dev/null
+++ b/bin/chameleon_edid_stress.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python3
+
+import glob
+import os
+import subprocess as sp
+import sys
+import time
+
+import xmlrpc.client
+
+
+def Chameleon(host, port=9992):
+ """
+ Get a proxy object that is used to control the Chameleon board.
+
+ The interface definition for this object can be found at:
+ https://chromium.googlesource.com/chromiumos/platform/chameleon/+/refs/heads/master/chameleond/interface.py
+ """
+ print('== Chameleon connection ==')
+ print('Target device: {}:{}'.format(host, port))
+ proxy = xmlrpc.client.ServerProxy('http://{}:{}'.format(host, port))
+ try:
+ # test the proxy works
+ mac = proxy.GetMacAddress()
+ print('MAC address: {}'.format(mac))
+ except OSError as e:
+ print(e)
+ raise SystemExit('ERROR connecting to Chameleon board')
+ print()
+ return proxy
+
+
+def get_hdmi_port(chameleon):
+ supported_ports = chameleon.GetSupportedPorts()
+ for port in supported_ports:
+ port_type = chameleon.GetConnectorType(port)
+ if port_type == 'HDMI':
+ return port
+
+
+def get_hdmi_status(drm_id):
+ path = '/sys/class/drm/{}/status'.format(drm_id)
+ with open(path) as sys_f:
+ return sys_f.readline().strip()
+
+
+def get_hdmi_edid(drm_id):
+ path = '/sys/class/drm/{}/edid'.format(drm_id)
+ output = sp.run(['edid-decode', path], check=False, stdout=sp.PIPE).stdout
+ for line in output.decode(sys.stdout.encoding).splitlines():
+ if 'Manufacturer:' in line:
+ return line.strip()
+
+
+def edid_from_file(filename):
+ with open(filename, 'r') as file:
+ if filename.upper().endswith('.TXT'):
+ # Convert the EDID text format returned from xrandr.
+ hex = file.read().replace('\n', '')
+ data = bytes.fromhex(hex)
+ else:
+ data = open(filename).read()
+ return data
+
+
+if __name__ == '__main__':
+ if len(sys.argv) != 3:
+ raise SystemExit('ERROR: please specify drm card and chameleon IP')
+
+ drm_id = sys.argv[1]
+ c = Chameleon(sys.argv[2])
+
+ edid_dir = os.path.expandvars(
+ '$PLAINBOX_PROVIDER_DATA/chameleon_edids/daily')
+ print('Loading EDIDs from {}'.format(edid_dir))
+ edids = glob.glob(edid_dir + os.path.sep + '[A-Z][A-Z][A-Z]_*.txt')
+
+ port_num = get_hdmi_port(c)
+ c.Unplug(port_num)
+
+ fails = []
+ for edid in edids:
+ edid_base = os.path.basename(edid)
+ print('=={}=='.format(edid_base))
+ print('Send EDID to Chameleon')
+ edid_id = c.CreateEdid(edid_from_file(edid))
+ c.ApplyEdid(port_num, edid_id)
+ print('Plug HDMI')
+ c.Plug(port_num)
+ time.sleep(2)
+
+ # TODO: make this an actual test
+ if get_hdmi_status(drm_id) == 'connected':
+ manufacturer_str = get_hdmi_edid(drm_id)
+ print(manufacturer_str)
+ if edid_base[:3] not in manufacturer_str:
+ print('Manufacturer {} not found')
+ fails.append(edid_base)
+ else:
+ print('HDMI not connected')
+ fails.append(edid_base)
+
+ print('Unplug HDMI')
+ c.Unplug(port_num)
+ time.sleep(2)
+ print('Free EDID data')
+ c.DestroyEdid(edid_id)
+ print('====\n', flush=True)
+
+ if fails:
+ print("Failed EDIDs:")
+ for f in fails:
+ print(f)
+ raise SystemExit("Total {}/{}".format(len(fails), len(edids)))
+ print('PASS')
diff --git a/bin/chameleon_hdmi_hotplug.py b/bin/chameleon_hdmi_hotplug.py
new file mode 100755
index 0000000..7366886
--- /dev/null
+++ b/bin/chameleon_hdmi_hotplug.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python3
+
+import sys
+import time
+
+import xmlrpc.client
+
+
+def Chameleon(host, port=9992):
+ """
+ Get a proxy object that is used to control the Chameleon board.
+
+ The interface definition for this object can be found at:
+ https://chromium.googlesource.com/chromiumos/platform/chameleon/+/refs/heads/master/chameleond/interface.py
+ """
+ print('== Chameleon connection ==')
+ print('Target device: {}:{}'.format(host, port))
+ proxy = xmlrpc.client.ServerProxy('http://{}:{}'.format(host, port))
+ try:
+ # test the proxy works
+ mac = proxy.GetMacAddress()
+ print('MAC address: {}'.format(mac))
+ except OSError as e:
+ print(e)
+ raise SystemExit('ERROR connecting to Chameleon board')
+ print()
+ return proxy
+
+
+def get_hdmi_port(chameleon):
+ supported_ports = chameleon.GetSupportedPorts()
+ for port in supported_ports:
+ port_type = chameleon.GetConnectorType(port)
+ if port_type == 'HDMI':
+ return port
+
+
+def get_hdmi_status(drm_id):
+ path = '/sys/class/drm/{}/status'.format(drm_id)
+ with open(path) as sys_f:
+ return sys_f.readline().strip()
+
+
+if __name__ == '__main__':
+ drm_id = sys.argv[1]
+ c = Chameleon(sys.argv[2])
+
+ start = get_hdmi_status(drm_id)
+ print('Starting status: {}'.format(start))
+ print(flush=True)
+
+ port_num = get_hdmi_port(c)
+
+ print('chameleon> plug hdmi')
+ c.Plug(port_num)
+ time.sleep(10)
+
+ new_status = get_hdmi_status(drm_id)
+ print('Status after plug request: {}'.format(new_status))
+ print(flush=True)
+ if new_status != 'connected':
+ raise SystemExit('FAIL: hdmi not connected')
+
+ print('chameleon> unplug hdmi')
+ c.Unplug(port_num)
+ time.sleep(10)
+
+ final_status = get_hdmi_status(drm_id)
+ print('Status after unplug request: {}'.format(final_status))
+ print(flush=True)
+ if final_status != 'disconnected':
+ raise SystemExit('FAIL: hdmi did not disconnect')
+
+ print('PASS')
diff --git a/bin/cpuid.py b/bin/cpuid.py
index a434309..fcb6e0c 100755
--- a/bin/cpuid.py
+++ b/bin/cpuid.py
@@ -83,7 +83,7 @@ CPUIDS = {
"Broadwell": ['0x4067', '0x306d4', '0x5066', '0x406f'],
"Canon Lake": ['0x6066'],
"Cascade Lake": ['0x50655', '0x50656', '0x50657'],
- "Coffee Lake": ['0x806ea', '0x906ea', '0x906eb', '0x906ec'],
+ "Coffee Lake": ['0x806ea', '0x906e'],
"Haswell": ['0x306c', '0x4065', '0x4066', '0x306f'],
"Ice Lake": ['0x706e'],
"Ivy Bridge": ['0x306a', '0x306e'],
diff --git a/bin/disk_read_performance_test b/bin/disk_read_performance_test
index 972c5b6..fec27c2 100755
--- a/bin/disk_read_performance_test
+++ b/bin/disk_read_performance_test
@@ -16,6 +16,9 @@ for disk in $@; do
if [[ $dev_path =~ dm ]]; then
disk_type="devmapper"
fi
+ if [[ $dev_path =~ md ]]; then
+ disk_type="mdadm"
+ fi
if [[ $dev_path =~ nvme ]]; then
disk_type="nvme"
fi
@@ -45,7 +48,8 @@ for disk in $@; do
"devmapper" ) MIN_BUF_READ=$DEFAULT_BUF_READ;;
"ide" ) MIN_BUF_READ=40;;
"mmc" ) MIN_BUF_READ=$DEFAULT_BUF_READ;;
- "nvme" ) MIN_BUF_READ=400;;
+ "nvme" ) MIN_BUF_READ=200;;
+ "mdadm" ) MIN_BUF_READ=500;;
* ) MIN_BUF_READ=$DEFAULT_BUF_READ;;
esac
echo "INFO: $disk_type: Using $MIN_BUF_READ MB/sec as the minimum throughput speed"
diff --git a/bin/dkms_info b/bin/dkms_info.py
index 9b36a28..9addc2d 100755
--- a/bin/dkms_info
+++ b/bin/dkms_info.py
@@ -4,6 +4,7 @@
# Written by:
# Shawn Wang <shawn.wang@canonical.com>
# Zygmunt Krynicki <zygmunt.krynicki@canonical.com>
+# Jonathan Cave <jonathan.cave@canonical.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3,
@@ -30,6 +31,7 @@ supported output format:
- dumps: json output (fully information)
"""
+import argparse
import fnmatch
import functools
import email.parser
@@ -39,14 +41,7 @@ import logging
import os
import subprocess
import sys
-import unittest
-from guacamole import Command
-
-try:
- from unittest import mock
-except ImportError:
- from plainbox.vendor import mock
_logger = logging.getLogger(None)
@@ -158,99 +153,6 @@ def match_patterns(patterns):
return matched
-class SystemInfoTests(unittest.TestCase):
-
- """Tests for System Information Parsing and Collection."""
-
- _proc_modules = """\
-xt_REDIRECT 16384 3 - Live 0x0000000000000000
-nf_nat_redirect 16384 1 xt_REDIRECT, Live 0x0000000000000000
-xt_hl 16384 3 - Live 0x0000000000000000
-hid_generic 16384 0 - Live 0x0000000000000000
-usbhid 53248 0 - Live 0x0000000000000000
-hid 110592 2 hid_generic,usbhid, Live 0x0000000000000000
-overlay 45056 1 - Live 0x0000000000000000
-"""
- _modalias = """\
-usb:v1D6Bp0003d0319dc09dsc00dp03ic09isc00ip00in00
-"""
-
- def setUp(self):
- """Common setup code."""
- get_system_module_list.cache_clear()
- get_system_modaliases.cache_clear()
-
- @mock.patch('io.open', mock.mock_open(read_data=_proc_modules))
- def test_get_module_list__calls_and_parses_lsmod(self):
- """Ensure that get_module_list() parses lsmod output."""
- # NOTE: Return value was loaded from my system running kernel 4.0.
- # The first few and last rows to be precise.
- modules = get_system_module_list()
- self.assertEqual(modules, [
- 'xt_REDIRECT', 'nf_nat_redirect', 'xt_hl', 'hid_generic',
- 'usbhid', 'hid', 'overlay'])
-
- @mock.patch('io.open', mock.mock_open(read_data=_proc_modules))
- def test_get_module_list_is_cached(self):
- """Ensure that get_module_list() cache works."""
- modules1 = get_system_module_list()
- modules2 = get_system_module_list()
- self.assertIn('xt_REDIRECT', modules1)
- self.assertIn('overlay', modules2)
- self.assertEqual(modules1, modules2)
-
- @mock.patch('os.walk')
- @mock.patch('io.open', mock.mock_open(read_data=_modalias))
- def test_get_system_modalias(self, mock_os_walk):
- """test_get_system_modalias."""
- mock_os_walk.return_value = [
- ("/sys/devices/pci0000:00/0000:00:14.0/usb2/2-0:1.0/modalias",
- ["driver", "subsystem"],
- ["modalias", "uevent"]),
- ]
-
- """fetch hw_modaliases from machine and check modalis types."""
- modaliases = get_system_modaliases()
- self.assertEqual(len(modaliases), 1)
- self.assertIn("usb", modaliases)
-
- @mock.patch('os.uname')
- @mock.patch('os.walk')
- def test_get_installed_dkms_modules(self, mock_os_walk, mock_os_uname):
- """test_get_installed_dkms_modules."""
- mock_os_walk.return_value = [
- ("/var/lib/dkms/hello/0.1",
- ["3.19.0-15-generic", "build", "source"],
- []),
- ]
- o = mock.Mock()
- o.release = "3.19.0-15-generic"
- mock_os_uname.return_value = o
- self.assertEqual([['hello', '0.1']],
- get_installed_dkms_modules())
-
- @mock.patch('__main__.get_system_modaliases')
- def test_match_patterns(self, mock_get_system_modaliases):
- """Test of match_patterns."""
- mock_get_system_modaliases.return_value = {
- "pci": ["v0000168Cd00000036sv0000103Csd0000217Fbc02sc80i00",
- "v00008086d00008C26sv0000103Csd000022D9bc0Csc03i20"],
- "usb": ["v8087p8000d0005dc09dsc00dp01ic09isc00ip00in00",
- "v1D6Bp0002d0319dc09dsc00dp00ic09isc00ip00in00"],
- }
- pkg_modalieses = ["pci:v00008086d00008C26sv*sd*bc*sc*i*",
- "usb:v07B4p010Ad0102dc*dsc*dp*ic*isc*ip*in*",
- "oemalias:test"]
- matched_modalieses = match_patterns(tuple(pkg_modalieses))
- # match_patterns
- self.assertIn("pci:v00008086d00008C26sv*sd*bc*sc*i*",
- matched_modalieses)
- self.assertIn("oemalias:test",
- matched_modalieses)
- self.assertNotIn("usb:v07B4p010Ad0102dc*dsc*dp*ic*isc*ip*in*",
- matched_modalieses)
-
-
class DkmsPackage(object):
"""
@@ -295,9 +197,9 @@ class DkmsPackage(object):
if not fn.endswith(".list"):
continue
with io.open(os.path.join(dpkg_info_root, fn), 'rt',
- encoding='UTF-8') as stream:
+ encoding='UTF-8') as stream:
if path in stream.read():
- return fn[:-len(".list")]
+ return fn[:-len(".list")]
return None
def _list_modules(self):
@@ -350,6 +252,7 @@ class DkmsPackage(object):
install_mods[m] = match_patterns(tuple(aliases))
return install_mods
+
def _headers_to_dist(pkg_str):
"""
Convert rft822 headers string to dict.
@@ -366,6 +269,7 @@ def _headers_to_dist(pkg_str):
target[key.lower()] = header[key]
return target
+
class DebianPackageHandler(object):
"""Use rtf822(email) to handle the package information from file_object."""
@@ -396,7 +300,6 @@ class DebianPackageHandler(object):
for pkg_str in self._file_object.read().split('\n\n'):
yield pkg_str
-
def _get_device_pkgs(self):
"""
Only device packages have debian package header 'Modaliases'.
@@ -409,23 +312,21 @@ class DebianPackageHandler(object):
"""
_logger.info("Looking for packages providing modaliases")
- _modalias_pkgs = {}
- target_str = ""
result = {}
for pkg_str in self._gen_all_pkg_strs():
for pkg in self.extra_pkgs:
- if pkg.pkg_name is None:
- continue
- pstr = "Package: {}".format(pkg.pkg_name)
- if pstr in pkg_str:
- _logger.info("Gathering information of package, {}".format(
- pkg.pkg_name))
- pkg.pkg = _headers_to_dist(pkg_str)
- break
+ if pkg.pkg_name is None:
+ continue
+ pstr = "Package: {}".format(pkg.pkg_name)
+ if pstr in pkg_str:
+ _logger.info("Gathering information of package, {}".format(
+ pkg.pkg_name))
+ pkg.pkg = _headers_to_dist(pkg_str)
+ break
else:
- if "Modaliases:" in pkg_str:
+ if "Modaliases:" in pkg_str:
pkg = _headers_to_dist(pkg_str)
(modalias_header, pattern_str) = \
@@ -434,15 +335,17 @@ class DebianPackageHandler(object):
patterns.sort()
pkg['match_patterns'] = match_patterns(tuple(patterns))
- with io.open("/var/lib/dpkg/info/{}.list".format(pkg['package']),
- 'rt', encoding='UTF-8') as stream:
+ dpkgf = "/var/lib/dpkg/info/{}.list".format(pkg['package'])
+ with io.open(dpkgf, 'rt', encoding='UTF-8') as stream:
if "/dkms.conf" in stream.read():
- pkg['unused_dkms'] = True
+ pkg['unused_dkms'] = True
result[pkg['package']] = pkg
return result
def to_json(self):
- return json.dumps({ "dkms": self.extra_pkgs, "non-dkms": self.pkgs }, default=lambda o: o.__dict__, sort_keys=True, indent=4)
+ return json.dumps(
+ {"dkms": self.extra_pkgs, "non-dkms": self.pkgs},
+ default=lambda o: o.__dict__, sort_keys=True, indent=4)
def to_outline(self):
result = ""
@@ -467,48 +370,7 @@ class DebianPackageHandler(object):
return result
-class DebianPackageHandlerTest(unittest.TestCase):
-
- """Test of DebianPackageHandler."""
-
- _var_lib_dpkg_status = """\
-Package: foo
-Status: install ok installed
-Modaliases: hwe(pci:v000099DDd00000036sv*sd*bc*sc*i*)
-
-Package: foo1
-Status: install ok installed
-Modaliases: hwe(pci:v0000AADDd00000036sv*sd*bc*sc*i*)
-
-Package: foo2
-Status: install ok installed
-
-Package: foo3
-Status: install ok installed
-
-Package: bar
-Status: install ok installed
-
-"""
-
-
- @mock.patch('io.open', mock.mock_open(read_data=_var_lib_dpkg_status))
- @mock.patch('__main__.get_system_modaliases')
- def test_get_pkgs(self, mock_get_system_modaliases):
- """Test of test_get_pkgs."""
- mock_get_system_modaliases.return_value = {
- "pci": ["v0000168Cd00000036sv0000103Csd0000217Fbc02sc80i00",
- "v00008086d00008C26sv0000103Csd000022D9bc0Csc03i20"],
- "usb": ["v8087p8000d0005dc09dsc00dp01ic09isc00ip00in00",
- "v1D6Bp0002d0319dc09dsc00dp00ic09isc00ip00in00"],
- }
-
- self.pkg_handler = DebianPackageHandler(
- file_object=io.StringIO(self._var_lib_dpkg_status))
- self.assertEqual(len(self.pkg_handler.pkgs), 2)
-
-
-class DeviceInfo(Command):
+class DeviceInfo():
"""
Implementation of the dkms-info command.
@@ -529,37 +391,35 @@ class DeviceInfo(Command):
- dumps: json output (fully information)
"""
- def register_arguments(self, parser):
- """Register command line arguments for dkms-info."""
-
+ def main(self):
+ """Invoke dkms-info."""
+ parser = argparse.ArgumentParser()
parser.add_argument(
'--format', default="onelines",
choices=["summary", "json"],
help=("Choose output format type: "
"summary (one line per packages) "
"or json (json format, fully information)"))
-
parser.add_argument(
'--output', default=None,
help=("Output filename to store the output date"))
+ args = parser.parse_args()
- def invoked(self, ctx):
- """Invoke dkms-info."""
logging.basicConfig(
level=logging.INFO, format='[%(relativeCreated)06dms] %(message)s')
_logger.info("Started")
- dkms_pkgs = []
+ dkms_pkgs = []
for (dkms_name, dkms_ver) in get_installed_dkms_modules():
dkms_pkg = DkmsPackage(dkms_name, dkms_ver)
dkms_pkgs.append(dkms_pkg)
output = sys.stdout
- if ctx.args.output is not None:
- output = open(ctx.args.output, 'wt', encoding='UTF-8')
+ if args.output is not None:
+ output = open(args.output, 'wt', encoding='UTF-8')
pkg_handler = DebianPackageHandler(extra_pkgs=dkms_pkgs)
- if ctx.args.format == "summary":
+ if args.format == "summary":
output.write(pkg_handler.to_outline())
else:
output.write(pkg_handler.to_json())
@@ -567,8 +427,4 @@ class DeviceInfo(Command):
if __name__ == '__main__':
- if '--test' in sys.argv:
- sys.argv.remove('--test')
- unittest.main()
- else:
- DeviceInfo().main()
+ DeviceInfo().main()
diff --git a/bin/dmi-sysfs-resource b/bin/dmi-sysfs-resource
deleted file mode 100755
index 6741030..0000000
--- a/bin/dmi-sysfs-resource
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2015 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-# Zygmunt Krynicki <zygmunt.krynicki@canonical.com>
-
-"""Collect information about all sysfs attributes related to DMI."""
-
-import os
-
-import guacamole
-
-
-class dmi_sysfs_resource(guacamole.Command):
-
- """
- Collect information about all sysfs attributes related to DMI.
-
- This program reads all the readable files in /sys/class/dmi/id/ and
- presents them a single RFC822 record.
-
- @EPILOG@
-
- Unreadable files (typically due to permissions) are silently skipped.
- Please run this program as root if you wish to access various serial
- numbers.
- """
-
- def invoked(self, ctx):
- sysfs_root = '/sys/class/dmi/id/'
- if not os.path.isdir(sysfs_root):
- return
- for dmi_attr in sorted(os.listdir(sysfs_root)):
- dmi_filename = os.path.join(sysfs_root, dmi_attr)
- if not os.path.isfile(dmi_filename):
- continue
- if not os.access(dmi_filename, os.R_OK):
- continue
- with open(dmi_filename, 'rt', encoding='utf-8') as stream:
- dmi_data = stream.read().strip()
- print("{}: {}".format(dmi_attr, dmi_data))
-
-
-if __name__ == "__main__":
- dmi_sysfs_resource().main()
diff --git a/bin/dmi_sysfs_resource.py b/bin/dmi_sysfs_resource.py
new file mode 100755
index 0000000..a098976
--- /dev/null
+++ b/bin/dmi_sysfs_resource.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+# Copyright 2015-2020 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+# Zygmunt Krynicki <zygmunt.krynicki@canonical.com>
+# Jonathan Cave <jonathan.cave@canonical.com>
+
+"""Collect information about all sysfs attributes related to DMI."""
+
+import os
+
+"""
+Collect information about all sysfs attributes related to DMI.
+
+This program reads all the readable files in /sys/class/dmi/id/ and
+presents them a single RFC822 record.
+
+@EPILOG@
+
+Unreadable files (typically due to permissions) are silently skipped.
+Please run this program as root if you wish to access various serial
+numbers.
+"""
+
+
+def main():
+ sysfs_root = '/sys/class/dmi/id/'
+ if not os.path.isdir(sysfs_root):
+ return
+ for dmi_attr in sorted(os.listdir(sysfs_root)):
+ dmi_filename = os.path.join(sysfs_root, dmi_attr)
+ if not os.path.isfile(dmi_filename):
+ continue
+ if not os.access(dmi_filename, os.R_OK):
+ continue
+ with open(dmi_filename, 'rt', encoding='utf-8') as stream:
+ dmi_data = stream.read().strip()
+ print("{}: {}".format(dmi_attr, dmi_data))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/bin/fan_reaction_test.py b/bin/fan_reaction_test.py
index 3ae6362..a4ab744 100755
--- a/bin/fan_reaction_test.py
+++ b/bin/fan_reaction_test.py
@@ -37,9 +37,12 @@ class FanMonitor:
def get_rpm(self):
result = {}
for p in self._fan_paths:
- with open(p, 'rt') as f:
- fan_mon_name = os.path.relpath(p, '/sys/class/hwmon')
- result[fan_mon_name] = int(f.read())
+ try:
+ with open(p, 'rt') as f:
+ fan_mon_name = os.path.relpath(p, '/sys/class/hwmon')
+ result[fan_mon_name] = int(f.read())
+ except OSError:
+ print('Fan SysFS node dissappeared ({})'.format(p))
return result
def get_average_rpm(self, period):
acc = self.get_rpm()
diff --git a/bin/i2c_driver_test b/bin/i2c_driver_test.py
index 4af3bf8..c6aae78 100755
--- a/bin/i2c_driver_test
+++ b/bin/i2c_driver_test.py
@@ -1,28 +1,28 @@
#!/usr/bin/env python3
-# Copyright 2016 Canonical Ltd.
+# Copyright 2016-2020 Canonical Ltd.
# All rights reserved.
#
# Written by:
# Authors: Gavin Lin <gavin.lin@canonical.com>
# Sylvain Pineau <sylvain.pineau@canonical.com>
+# Jonathan Cave <jonathan.cave@canonical.com>
"""
-This script will check number of detected I2C buses or devices
+This script will check number of detected I2C buses or devices
-To see how to use, please run "./i2c_driver_test"
+To see how to use, please run "./i2c_driver_test.py"
"""
+import argparse
import os
import subprocess
-from guacamole import Command
-
-class Bus(Command):
+class Bus():
"""Detect I2C bus."""
- def invoked(self, ctx):
+ def invoked(self, args):
"""Method called when the command is invoked."""
# Detect I2C buses and calculate number of them
result = subprocess.check_output(['i2cdetect', '-l'],
@@ -37,25 +37,19 @@ class Bus(Command):
# Verify if detected number of buses is as expected
else:
- if ctx.args.bus != 0:
- if bus_number == ctx.args.bus:
+ if args.bus != 0:
+ if bus_number == args.bus:
print('Test passed')
else:
raise SystemExit('Test failed, expecting {} I2C '
- 'buses.'.format(ctx.args.bus))
-
- def register_arguments(self, parser):
- """Register command line arguments for the bus sub-command."""
- parser.add_argument(
- '-b', '--bus', type=int, help='Expected number of I2C bus.',
- default=0)
+ 'buses.'.format(args.bus))
-class Device(Command):
+class Device():
"""Detect I2C device."""
- def invoked(self, ctx):
+ def invoked(self, args):
# Make sure that we have root privileges
if os.geteuid() != 0:
raise SystemExit('Error: please run this command as root')
@@ -78,30 +72,29 @@ class Device(Command):
for l in result_line:
address_value = l.strip('\n').split(':')[1].split()
for v in address_value:
- if v != '--': exit_code = 0
+ if v != '--':
+ exit_code = 0
if exit_code == 1:
raise SystemExit('No I2C device detected on any I2C bus')
- else:
- print('I2C device detected')
- return exit_code
+ print('I2C device detected')
-class I2cDriverTest(Command):
+class I2cDriverTest():
"""I2C driver test."""
- sub_commands = (
- ('bus', Bus),
- ('device', Device)
- )
-
- def invoked(self, ctx):
- """Method called when the command is invoked."""
- if not ctx.early_args.rest:
- ctx.parser.print_help()
- return 1
+ def main(self):
+ subcommands = {
+ 'bus': Bus,
+ 'device': Device
+ }
+ parser = argparse.ArgumentParser()
+ parser.add_argument('subcommand', type=str, choices=subcommands)
+ parser.add_argument('-b', '--bus', type=int, default=0,
+ help='Expected number of I2C bus.')
+ args = parser.parse_args()
+ subcommands[args.subcommand]().invoked(args)
if __name__ == '__main__':
I2cDriverTest().main()
-
diff --git a/bin/kernel_taint_test b/bin/kernel_taint_test
new file mode 100755
index 0000000..976ccb6
--- /dev/null
+++ b/bin/kernel_taint_test
@@ -0,0 +1,93 @@
+#!/usr/bin/env python3
+"""
+Test that the kernel is not "tainted" by out-of-tree drivers, etc.
+
+Copyright (C) 2019 Canonical Ltd.
+
+Authors:
+ Rod Smith <rod.smith@canonical.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License version 3,
+as published by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+This script examines the /proc/sys/kernel/tainted file (or a user-specified
+file, for debugging purposes) and parses the contents to determine if the
+kernel is tainted. If so, the script reports the nature of the taint and
+returns a value of 1. The script also returns a value of 1 if
+# /proc/sys/kernel/tainted cannot be found or opened. If the kernel is NOT
+# tainted, the script notes this fact and returns 0.
+"""
+
+
+import sys
+from argparse import ArgumentParser
+
+
+# Note: If max_taints is increased, add descriptions to taint_meanings in
+# report_failures()
+max_taints = 17
+
+
+def find_taints(taint_file):
+ """Read the kernel-taint file."""
+ try:
+ f = open(taint_file, "r")
+ taints = int(f.read())
+ except OSError:
+ taints = 2**(max_taints+1) # Set so we have a non-0 value to return
+ print("Kernel taint file ({}) not found!".format(taint_file))
+ print("Kernel taint value is {}".format(taints))
+ return(taints)
+
+
+def report_failures(taints):
+ """Report the failure code and its meaning(s)."""
+ # Below meaning strings are taken from
+ # https://www.kernel.org/doc/html/latest/admin-guide/tainted-kernels.html
+ taint_meanings = ["proprietary module was loaded",
+ "module was force loaded",
+ "SMP kernel oops on an officially SMP incapable CPU",
+ "module was force unloaded",
+ "processor reported a Machine Check Exception (MCE)",
+ "bad page referenced or some unexpected page flags",
+ "taint requested by userspace application",
+ "kernel died recently, i.e. there was an OOPS or BUG",
+ "ACPI table overridden by user",
+ "kernel issued warning",
+ "staging driver was loaded",
+ "workaround for bug in platform firmware applied",
+ "externally-built ('out-of-tree') module was loaded",
+ "unsigned module was loaded",
+ "soft lockup occurred",
+ "kernel has been live patched",
+ "auxiliary taint, defined for and used by distros",
+ "kernel was built with the struct randomization plugin"]
+ for i in range(max_taints+1):
+ if (taints & (2 ** i)):
+ print("Taint bit value: {} ({})".format(i, taint_meanings[i]))
+ if taints == 0:
+ print("No kernel taints detected.")
+
+
+def main():
+ parser = ArgumentParser()
+ parser.add_argument('--taint-file',
+ default="/proc/sys/kernel/tainted",
+ help='The file that holds the taint information')
+ args = parser.parse_args()
+ taints = find_taints(args.taint_file)
+ report_failures(taints)
+ return(taints > 0)
+
+
+if __name__ == '__main__':
+ sys.exit(main())
diff --git a/bin/module_loaded_test b/bin/module_loaded_test.py
index 028d70b..b23fc63 100755
--- a/bin/module_loaded_test
+++ b/bin/module_loaded_test.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# Copyright 2015 Canonical Ltd.
+# Copyright 2015-2020 Canonical Ltd.
# All rights reserved.
#
# Written by:
@@ -10,31 +10,32 @@ Script to test if a module is loaded in the running kernel. If not the
module will be loaded. This can be disabled using a flag.
"""
+import argparse
import subprocess
-from guacamole import Command
-
-class ModuleLoadedTest(Command):
+class ModuleLoadedTest():
"""Check if a kernel module is loaded. If not load it."""
- def register_arguments(self, parser):
+ def main(self):
+ parser = argparse.ArgumentParser()
parser.add_argument("module", help="Specify the module to test for.")
-
parser.add_argument("-n", "--no-load", action="store_true", help=(
"Don't try and load the module just test."))
+ args = parser.parse_args()
- def invoked(self, context):
- if self.is_module_loaded(context.args.module):
+ if self.is_module_loaded(args.module):
return
# module not loaded
- if context.args.no_load:
- return 1
+ if args.no_load:
+ raise SystemExit("ERROR: module {} not loaded in running"
+ " kernel".format(args.module))
# attempt a load of the module
- if not self.load_module(context.args.module):
- return 1
+ if not self.load_module(args.module):
+ raise SystemExit(
+ "ERROR: attempt to load module {} failed".format(args.module))
def is_module_loaded(self, module):
with open('/proc/modules', 'r') as modules:
diff --git a/bin/pm_test b/bin/pm_test
index f455858..b03e680 100755
--- a/bin/pm_test
+++ b/bin/pm_test
@@ -68,7 +68,7 @@ def main():
operation.teardown()
result = {
'outcome': 'fail',
- 'comment': message,
+ 'comments': message,
}
with open(os.path.join(args.log_dir, '__result'), 'wt') as f:
json.dump(result, f)
@@ -256,8 +256,12 @@ class PowerManagementOperation():
fwts_log_path = os.path.join(self.args.log_dir, 'fwts.log')
try:
with open(fwts_log_path, 'rt') as f:
- magic_line = 'Completed S3 cycle(s) \n'
- count = f.readlines().count(magic_line)
+ magic_line_s3 = 'Completed S3 cycle(s) \n'
+ magic_line_s2idle = 'Completed s2idle cycle(s) \n'
+ lines = f.readlines()
+ count_s3 = lines.count(magic_line_s3)
+ count_s2idle = lines.count(magic_line_s2idle)
+ count = count_s3 + count_s2idle
if count != total_suspends_expected:
problems = (
"Found {} occurrences of '{}'. Expected {}".format(
@@ -268,7 +272,7 @@ class PowerManagementOperation():
if problems:
result = {
'outcome': 'fail' if problems else 'pass',
- 'comment': problems,
+ 'comments': problems,
}
result_filename = os.path.join(self.args.log_dir, '__result')
with open(result_filename, 'wt') as f:
diff --git a/bin/recovery_info b/bin/recovery_info
deleted file mode 100755
index b2feedb..0000000
--- a/bin/recovery_info
+++ /dev/null
@@ -1,399 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2015 Canonical Ltd.
-# Written by:
-# Shawn Wang <shawn.wang@canonical.com>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 3,
-# as published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-"""Show the recovery partition information for the preinstalled OS."""
-
-import os
-import re
-import subprocess
-import sys
-import tempfile
-import unittest
-import xml.dom.minidom as minidom
-
-from guacamole import Command
-
-try:
- from unittest import mock
-except ImportError:
- from plainbox.vendor import mock
-
-RECOVERY_PACKAGES = ["dell-recovery", "ubuntu-recovery"]
-
-
-def get_recovery_package():
- """
- Test with RECOVERY_PACKAGES.
-
- to check recovery application is installed or not
-
- :return:
- string of package_version or None
- """
- for pkg in RECOVERY_PACKAGES:
- output = subprocess.check_output(["apt-cache", "policy", pkg],
- universal_newlines=True)
- for line in output.split("\n"):
- if line.startswith(" Installed:"):
- ver = line.split(": ")[1]
- return "{}_{}".format(pkg, ver.strip())
- return None
-
-
-RECOVERY_LABELS = {"HP_TOOLS": "HP",
- "PQSERVICE": "UBUNTU",
- "BACKUP": "TEST",
- "INSTALL": "DELL",
- "OS": "DELL",
- "RECOVERY": "DELL"}
-
-
-_escape_pattern = re.compile(r'\\x([0-9a-fA-F][0-9a-fA-F])')
-
-
-def lsblk_unescape(label):
- """Un-escape text escaping done by lsblk(8)."""
- return _escape_pattern.sub(
- lambda match: chr(int(match.group(1), 16)), label)
-
-
-def get_recovery_partition():
- """
- Get the type and location of the recovery partition.
-
- :return:
- (recovery_type, recovery_partition) or None
-
- Use lsblk(8) to inspect available block devices looking
- for a partition with FAT or NTFS and a well-known label.
- """
- cmd = ['lsblk', '-o', 'TYPE,FSTYPE,NAME,LABEL', '--raw']
- for line in subprocess.check_output(cmd).splitlines()[1:]:
- type, fstype, name, label = line.split(b' ', 3)
- # Skip everything but partitions
- if type != b'part':
- continue
- # Skip everything but FAT and NTFS
- if fstype != b'vfat' and fstype != b'ntfs':
- continue
- label = lsblk_unescape(label.decode('utf-8'))
- recovery_type = RECOVERY_LABELS.get(label)
- # Skip unknown labels
- if recovery_type is None:
- continue
- recovery_partition = '/dev/{}'.format(name.decode('utf-8'))
- return (recovery_type, recovery_partition)
-
-
-class FunctionTests(unittest.TestCase):
-
- """Tests for several functions."""
-
- @mock.patch('subprocess.check_output')
- def test_get_recovery_package(self, mock_subprocess_check_output):
- """Smoke test for get_recovery_package()."""
- mock_subprocess_check_output.return_value = """\
-dell-recovery:
- Installed: 1.11
- Candidate: 1.11
- Version table:
- 1.11
- 500 https://archive/cesg-mirror/ test/public amd64 Packages
-"""
- self.assertEqual(get_recovery_package(),
- "dell-recovery_1.11")
-
- @mock.patch('subprocess.check_output')
- def test_get_recovery_partition(self, mock_subprocess_check_output):
- """Smoke test for get_recovery_partition()."""
- mock_subprocess_check_output.return_value = (
- b'TYPE FSTYPE NAME LABEL\n'
- b'disk linux_raid_member sda fx:2x250GB\n'
- b'raid1 bcache md127 \n'
- b'disk ext4 bcache0 Ultra\n'
- b'disk linux_raid_member sdb fx:2x250GB\n'
- b'raid1 bcache md127 \n'
- b'disk ext4 bcache0 Ultra\n'
- b'disk sdc \n'
- b'part btrfs sdc1 vol1\n'
- b'disk sdd \n'
- b'part ntfs sdd1 Windows\x208.1\n'
- b'part sdd2 \n'
- b'part ext4 sdd5 Utopic\n'
- b'part swap sdd6 \n'
- b'disk bcache sde \n'
- b'disk ext4 bcache0 Ultra\n'
- b'disk sdf \n'
- b'part ntfs sda3 RECOVERY\n')
- self.assertEqual(get_recovery_partition(), ("DELL", "/dev/sda3"))
-
- def test_lsblk_unescape(self):
- """Smoke tests for lsblk_unescape()."""
- self.assertEqual(lsblk_unescape('Windows\\x208.1'), 'Windows 8.1')
- self.assertEqual(lsblk_unescape('Windows XP'), 'Windows XP')
-
-
-class MountedPartition(object):
-
- """
- Mount Manager to mount partition on tempdir.
-
- e.g.
- with MountedPartition("/dev/sda1") as tmp:
- print("This is the mount point: {}".format(tmp))
- do_stuff()
- """
-
- def __init__(self, part):
- """
- Prepare the mntdir point.
-
- :param part: string of the partition device file, like /dev/sda2
- """
- self.part = part
- self.mntdir = tempfile.mkdtemp()
-
- def __enter__(self):
- """
- __enter__ method for python's with statement.
-
- Mount the partition device to the mntdir.
- """
- cmd = ["mount", self.part, self.mntdir]
- subprocess.check_output(cmd, universal_newlines=True)
- return self.mntdir
-
- def __exit__(self, type, value, traceback):
- """
- __exit__ method for python's with statement.
-
- Unmount and remove the mntdir.
- """
- subprocess.check_output(["umount", self.mntdir],
- universal_newlines=True)
- os.rmdir(self.mntdir)
-
-
-class MountedPartitionTests(unittest.TestCase):
-
- """Unittest of MountedPartition."""
-
- @mock.patch('subprocess.check_output')
- def test_with_of_MountedPartition(self, mock_subprocess_check_output):
- """Test mount point."""
- test_dir = ""
- with MountedPartition("/dev/test") as tmp:
- test_dir = tmp
- self.assertTrue(os.path.exists(test_dir))
- mock_subprocess_check_output.assert_has_calls(
- [mock.call(['mount', '/dev/test', test_dir],
- universal_newlines=True)])
- self.assertFalse(os.path.exists(test_dir))
- mock_subprocess_check_output.assert_has_calls(
- [mock.call(['umount', test_dir],
- universal_newlines=True)])
-
-
-class RecoveryVersion(Command):
-
- """
- print the version of recovery image.
-
- @EPILOG@
-
- This commands prints information such as:
-
- image_version: xxx
- bto_version: REV_xxx.iso (dell only)
- """
-
- def invoked(self, ctx):
- """
- Guacamole method called when the command is invoked.
-
- /etc/buildstamp is a image information file,
- it created by the oem image builder.
-
- oilpalm Fri, 20 Jun 2014 04:02:07 +0000
- somerville-trusty-amd64-20140620-0
-
- If /etc/buildstamp exist, print out the second line (image iso name).
-
- For Dell-recovery partition, /etc/buildstamp shows base image info.
- If recovery_partition/bto.xml,
- print out the bto_version (read from xml file).
- """
- if os.path.isfile("/etc/buildstamp"):
- with open('/etc/buildstamp', 'rt', encoding='UTF-8') as stream:
- data = stream.readlines()
- print("image_version: {}".format(data[1].strip()))
-
- with MountedPartition(ctx.recovery_partition) as mntdir:
- fname = "{}/bto.xml".format(mntdir)
- if os.path.isfile(fname):
- o = minidom.parse("{}/bto.xml".format(mntdir))
- bto_platform = o.getElementsByTagName("platform")
- bto_revision = o.getElementsByTagName("revision")
- if bto_platform and bto_revision:
- bto_platform = bto_platform[0].firstChild.data
- bto_revision = bto_revision[0].firstChild.data
- bto_version = bto_platform + " " + bto_revision
- else:
- bto_iso = o.getElementsByTagName("iso")
- bto_version = bto_iso[0].firstChild.data
- print("bto_version: {}".format(bto_version))
-
-
-class RecoveryFile(Command):
-
- """
- display a single file from the recovery partition
-
- This command can be used to ``cat`` any file from the recovery partition
- """
-
- def register_arguments(self, parser):
- """
- Guacamole method used by the argparse ingredient.
-
- :param parser:
- Argument parser (from :mod:`argparse`) specific to this command.
- """
- parser.add_argument('file', help='name of the file to display')
-
- def invoked(self, ctx):
- """
- Guacamole method used by the command ingredient.
-
- :param ctx:
- The guacamole context object. Context provides access to all
- features of guacamole. The argparse ingredient adds the ``args``
- attribute to it. That attribute contains the result of parsing
- command line arguments.
- :returns:
- The return code of the command. Guacamole translates ``None`` to a
- successful exit status (return code zero).
- """
- with MountedPartition(ctx.recovery_partition) as mnt:
- return subprocess.call([
- 'cat', '--', os.path.join(mnt, ctx.args.file)])
-
-
-class RecoveryCheckType(Command):
-
- """
- test if the recovery partition is of the given type.
-
- This command can be used for scripted tests, to see if the recovery
- partition on the current system is of a concrete type or not (e.g.
- DELL-specific)
-
- @EPILOG@
-
- The exit code is 0 if the recovery partition type matches and 1 otherwise.
- """
-
- def register_arguments(self, parser):
- """
- Guacamole method used by the argparse ingredient.
-
- :param parser:
- Argument parser (from :mod:`argparse`) specific to this command.
- """
- parser.add_argument(
- 'type', help="expected type of the recovery partition")
-
- def invoked(self, ctx):
- """
- Guacamole method used by the command ingredient.
-
- :param ctx:
- The guacamole context object. Context provides access to all
- features of guacamole. The argparse ingredient adds the ``args``
- attribute to it. That attribute contains the result of parsing
- command line arguments.
- :returns:
- The return code of the command. Guacamole translates ``None`` to a
- successful exit status (return code zero).
- """
- if ctx.recovery_type != ctx.args.type:
- return 1
-
-
-class RecoveryInfo(Command):
-
- """
- Inspect the recovery partition.
-
- This command can be used to inspect the recovery partition. It has several
- sub-commands that do various tasks. If the system has no recovery
- partition, the command exits with the error code 1.
- """
-
- sub_commands = (
- ('version', RecoveryVersion),
- ('file', RecoveryFile),
- ('checktype', RecoveryCheckType),
- )
-
- def invoked(self, ctx):
- """
- Guacamole method used by the command ingredient.
-
- :param ctx:
- The guacamole context object. Context provides access to all
- features of guacamole. The argparse ingredient adds the ``args``
- attribute to it. That attribute contains the result of parsing
- command line arguments.
- :returns:
- The return code of the command. Guacamole translates ``None`` to a
- successful exit status (return code zero).
- """
- partition = get_recovery_partition()
-
- if partition is None:
- print("Recovery partition not found", file=sys.stderr)
- return 1
- (recovery_type, recovery_partition) = partition
- ctx.recovery_partition = recovery_partition
- ctx.recovery_type = recovery_type
-
-
-class RecoveryInfoTests(unittest.TestCase):
-
- """Tests for RecoveryInfo."""
-
- @mock.patch('__main__.get_recovery_package')
- @mock.patch('__main__.get_recovery_partition')
- def test_smoke(self, mock_get_recovery_partition,
- mock_get_recovery_package):
- """Smoke tests for running recovery_info."""
- mock_get_recovery_partition.return_value = ("DELL", "/dev/sda3")
- mock_get_recovery_package.return_value = "dell-recovery_1.11"
- self.assertEqual(RecoveryInfo().main(argv=[], exit=False), 0)
- self.assertEqual(
- RecoveryInfo().main(argv=["checktype", "HP"], exit=False), 1)
- self.assertEqual(
- RecoveryInfo().main(argv=["checktype", "DELL"], exit=False), 0)
-
-
-if __name__ == '__main__':
- if '--test' in sys.argv:
- sys.argv.remove('--test')
- unittest.main()
- else:
- RecoveryInfo().main()
diff --git a/bin/recovery_info.py b/bin/recovery_info.py
new file mode 100755
index 0000000..5ce1ba9
--- /dev/null
+++ b/bin/recovery_info.py
@@ -0,0 +1,206 @@
+#!/usr/bin/env python3
+# Copyright 2015-2020 Canonical Ltd.
+# Written by:
+# Shawn Wang <shawn.wang@canonical.com>
+# Jonathan Cave <jonathan.cave@canonical.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+"""Show the recovery partition information for the preinstalled OS."""
+
+import os
+import re
+import subprocess
+import sys
+import tempfile
+
+import xml.dom.minidom as minidom
+
+
+RECOVERY_PACKAGES = ["dell-recovery", "ubuntu-recovery"]
+
+
+def get_recovery_package():
+ """
+ Test with RECOVERY_PACKAGES.
+
+ to check recovery application is installed or not
+
+ :return:
+ string of package_version or None
+ """
+ for pkg in RECOVERY_PACKAGES:
+ output = subprocess.check_output(["apt-cache", "policy", pkg],
+ universal_newlines=True)
+ for line in output.split("\n"):
+ if line.startswith(" Installed:"):
+ ver = line.split(": ")[1]
+ return "{}_{}".format(pkg, ver.strip())
+ return None
+
+
+RECOVERY_LABELS = {"HP_TOOLS": "HP",
+ "PQSERVICE": "UBUNTU",
+ "BACKUP": "TEST",
+ "INSTALL": "DELL",
+ "OS": "DELL",
+ "RECOVERY": "DELL"}
+
+
+_escape_pattern = re.compile(r'\\x([0-9a-fA-F][0-9a-fA-F])')
+
+
+def lsblk_unescape(label):
+ """Un-escape text escaping done by lsblk(8)."""
+ return _escape_pattern.sub(
+ lambda match: chr(int(match.group(1), 16)), label)
+
+
+def get_recovery_partition():
+ """
+ Get the type and location of the recovery partition.
+
+ :return:
+ (recovery_type, recovery_partition) or None
+
+ Use lsblk(8) to inspect available block devices looking
+ for a partition with FAT or NTFS and a well-known label.
+ """
+ cmd = ['lsblk', '-o', 'TYPE,FSTYPE,NAME,LABEL', '--raw']
+ for line in subprocess.check_output(cmd).splitlines()[1:]:
+ type, fstype, name, label = line.split(b' ', 3)
+ # Skip everything but partitions
+ if type != b'part':
+ continue
+ # Skip everything but FAT and NTFS
+ if fstype != b'vfat' and fstype != b'ntfs':
+ continue
+ label = lsblk_unescape(label.decode('utf-8'))
+ recovery_type = RECOVERY_LABELS.get(label)
+ # Skip unknown labels
+ if recovery_type is None:
+ continue
+ recovery_partition = '/dev/{}'.format(name.decode('utf-8'))
+ return (recovery_type, recovery_partition)
+
+
+class MountedPartition(object):
+
+ """
+ Mount Manager to mount partition on tempdir.
+
+ e.g.
+ with MountedPartition("/dev/sda1") as tmp:
+ print("This is the mount point: {}".format(tmp))
+ do_stuff()
+ """
+
+ def __init__(self, part):
+ """
+ Prepare the mntdir point.
+
+ :param part: string of the partition device file, like /dev/sda2
+ """
+ self.part = part
+ self.mntdir = tempfile.mkdtemp()
+
+ def __enter__(self):
+ """
+ __enter__ method for python's with statement.
+
+ Mount the partition device to the mntdir.
+ """
+ cmd = ["mount", self.part, self.mntdir]
+ subprocess.check_output(cmd, universal_newlines=True)
+ return self.mntdir
+
+ def __exit__(self, type, value, traceback):
+ """
+ __exit__ method for python's with statement.
+
+ Unmount and remove the mntdir.
+ """
+ subprocess.check_output(["umount", self.mntdir],
+ universal_newlines=True)
+ os.rmdir(self.mntdir)
+
+
+class RecoveryInfo():
+
+ """
+ Inspect the recovery partition.
+
+ This command can be used to inspect the recovery partition. It has several
+ sub-commands that do various tasks. If the system has no recovery
+ partition, the command exits with the error code 1.
+ """
+
+ def main(self):
+ partition = get_recovery_partition()
+ if len(sys.argv) == 1:
+ # no subcommand == detect test
+ if partition is None:
+ raise SystemExit("FAIL: Recovery partition not found")
+ else:
+ print("Found recovery partiion")
+ return
+
+ (recovery_type, recovery_partition) = partition
+
+ subcommand = sys.argv[1]
+ sub_commands = ('version', 'file', 'checktype')
+ if subcommand not in sub_commands:
+ raise SystemExit("ERROR: unexpected subcommand")
+
+ if subcommand == "checktype":
+ if len(sys.argv) != 3:
+ raise SystemExit(
+ "ERROR: recovery_info.py checktype EXPECTED_TYPE")
+ expected_type = sys.argv[2]
+ if recovery_type != expected_type:
+ raise SystemExit("FAIL: expected {}, found {}".format(
+ expected_type, recovery_type))
+
+ if subcommand == "file":
+ if len(sys.argv) != 3:
+ raise SystemExit(
+ "ERROR: recovery_info.py file FILE")
+ file = sys.argv[2]
+ with MountedPartition(recovery_partition) as mnt:
+ return subprocess.call([
+ 'cat', '--', os.path.join(mnt, file)])
+
+ if subcommand == "version":
+ if os.path.isfile("/etc/buildstamp"):
+ with open('/etc/buildstamp', 'rt', encoding='UTF-8') as stream:
+ data = stream.readlines()
+ print("image_version: {}".format(data[1].strip()))
+
+ with MountedPartition(recovery_partition) as mntdir:
+ fname = "{}/bto.xml".format(mntdir)
+ if os.path.isfile(fname):
+ o = minidom.parse("{}/bto.xml".format(mntdir))
+ bto_platform = o.getElementsByTagName("platform")
+ bto_revision = o.getElementsByTagName("revision")
+ if bto_platform and bto_revision:
+ bto_platform = bto_platform[0].firstChild.data
+ bto_revision = bto_revision[0].firstChild.data
+ bto_version = bto_platform + " " + bto_revision
+ else:
+ bto_iso = o.getElementsByTagName("iso")
+ bto_version = bto_iso[0].firstChild.data
+ print("bto_version: {}".format(bto_version))
+
+
+if __name__ == '__main__':
+ RecoveryInfo().main()
diff --git a/bin/removable_storage_test b/bin/removable_storage_test
index 249911a..bbace30 100755
--- a/bin/removable_storage_test
+++ b/bin/removable_storage_test
@@ -729,6 +729,8 @@ def main():
total_write_size = sum(write_sizes)
try:
+ # Clear dmesg so we can check for I/O errors later
+ subprocess.check_output(['dmesg', '-C'])
for disk, mount_point in disks_eligible.items():
print("%s (Total Data Size / iteration: %0.4f MB):" %
(disk, (total_write_size / 1024 / 1024)))
@@ -807,6 +809,10 @@ def main():
if test.umount() != 0:
errors += 1
test.clean_tmp_dir()
+ dmesg = subprocess.run(['dmesg'], stdout=subprocess.PIPE)
+ if 'I/O error' in dmesg.stdout.decode():
+ logging.error("I/O errors found in dmesg")
+ errors += 1
if errors > 0:
logging.warning(
diff --git a/bin/snap_tests.py b/bin/snap_tests.py
index ad1e22a..f548db8 100755
--- a/bin/snap_tests.py
+++ b/bin/snap_tests.py
@@ -5,9 +5,10 @@
# Written by:
# Authors: Jonathan Cave <jonathan.cave@canonical.com>
+import argparse
import os
+import sys
-from guacamole import Command
from checkbox_support.snap_utils.snapd import Snapd
# Requirements for the test snap:
@@ -19,11 +20,11 @@ SNAPD_TASK_TIMEOUT = int(os.getenv('SNAPD_TASK_TIMEOUT', 30))
SNAPD_POLL_INTERVAL = int(os.getenv('SNAPD_POLL_INTERVAL', 1))
-class SnapList(Command):
+class SnapList():
"""snap list sub-command."""
- def invoked(self, ctx):
+ def invoked(self):
"""snap list should show the core package is installed."""
data = Snapd().list()
for snap in data:
@@ -34,11 +35,11 @@ class SnapList(Command):
return 1
-class SnapSearch(Command):
+class SnapSearch():
"""snap search sub-command."""
- def invoked(self, ctx):
+ def invoked(self):
"""snap search for TEST_SNAP."""
data = Snapd().find(TEST_SNAP,)
for snap in data:
@@ -49,19 +50,18 @@ class SnapSearch(Command):
return 1
-class SnapInstall(Command):
+class SnapInstall():
"""snap install sub-command."""
- def register_arguments(self, parser):
- """Setup command arguments."""
- parser.add_argument('channel', help='channel to install from')
-
- def invoked(self, ctx):
+ def invoked(self):
"""Test install of test-snapd-tools snap."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument('channel', help='channel to install from')
+ args = parser.parse_args(sys.argv[2:])
print('Install {}...'.format(TEST_SNAP))
s = Snapd(SNAPD_TASK_TIMEOUT, SNAPD_POLL_INTERVAL)
- s.install(TEST_SNAP, ctx.args.channel)
+ s.install(TEST_SNAP, args.channel)
print('Confirm in snap list...')
data = s.list()
for snap in data:
@@ -71,11 +71,11 @@ class SnapInstall(Command):
return 1
-class SnapRefresh(Command):
+class SnapRefresh():
"""snap refresh sub-command."""
- def invoked(self, ctx):
+ def invoked(self):
"""Test refresh of test-snapd-tools snap."""
def get_rev():
data = Snapd().list()
@@ -96,11 +96,11 @@ class SnapRefresh(Command):
return 0
-class SnapRevert(Command):
+class SnapRevert():
"""snap revert sub-command."""
- def invoked(self, ctx):
+ def invoked(self):
"""Test revert of test-snapd-tools snap."""
s = Snapd(SNAPD_TASK_TIMEOUT, SNAPD_POLL_INTERVAL)
print('Get stable channel revision from store...')
@@ -123,11 +123,11 @@ class SnapRevert(Command):
return 0
-class SnapReupdate(Command):
+class SnapReupdate():
"""snap reupdate sub-command."""
- def invoked(self, ctx):
+ def invoked(self):
"""Test re-update of test-snapd-tools snap."""
s = Snapd(SNAPD_TASK_TIMEOUT, SNAPD_POLL_INTERVAL)
print('Get edge channel revision from store...')
@@ -145,11 +145,11 @@ class SnapReupdate(Command):
return 1
-class SnapRemove(Command):
+class SnapRemove():
"""snap remove sub-command."""
- def invoked(self, ctx):
+ def invoked(self):
"""Test remove of test-snapd-tools snap."""
print('Install {}...'.format(TEST_SNAP))
s = Snapd(SNAPD_TASK_TIMEOUT, SNAPD_POLL_INTERVAL)
@@ -163,19 +163,24 @@ class SnapRemove(Command):
return 0
-class Snap(Command):
+class Snap():
"""Fake snap like command."""
- sub_commands = (
- ('list', SnapList),
- ('search', SnapSearch),
- ('install', SnapInstall),
- ('refresh', SnapRefresh),
- ('revert', SnapRevert),
- ('reupdate', SnapReupdate),
- ('remove', SnapRemove)
- )
+ def main(self):
+ sub_commands = {
+ 'list': SnapList,
+ 'search': SnapSearch,
+ 'install': SnapInstall,
+ 'refresh': SnapRefresh,
+ 'revert': SnapRevert,
+ 'reupdate': SnapReupdate,
+ 'remove': SnapRemove
+ }
+ parser = argparse.ArgumentParser()
+ parser.add_argument('subcommand', type=str, choices=sub_commands)
+ args = parser.parse_args(sys.argv[1:2])
+ sub_commands[args.subcommand]().invoked()
if __name__ == '__main__':
diff --git a/bin/tpm-sysfs-resource b/bin/tpm-sysfs-resource
deleted file mode 100755
index 34f81b5..0000000
--- a/bin/tpm-sysfs-resource
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2015 Canonical Ltd.
-# All rights reserved.
-#
-# Written by:
-# Zygmunt Krynicki <zygmunt.krynicki@canonical.com>
-
-
-"""Collect information about all sysfs attributes related to TPM."""
-
-import os
-
-import guacamole
-
-
-class tpm_sysfs_resource(guacamole.Command):
-
- """
- Collect information about all sysfs attributes related to TPM.
-
- This program traverses all the TPM device nodes found in /sys/class/tpm/.
- Each present device is subsequently inspected by reading all readable files
- in /sys/class/tpm/*/device/* and presenting the data present there as
- subsequent RFC822 records. There is one record per TPM chip. In order to
- differentiate each chip, each record contains the field x-sysfs-device-name
- that stores the full sysfs directory name of the chip.
-
- @EPILOG@
-
- Unreadable files (typically due to permissions) are silently skipped.
- """
-
- def invoked(self, ctx):
- # This is found on 4.2 kernels
- sysfs_root_tpm = '/sys/class/tpm/'
- # This is found on 3.19 kernels
- sysfs_root_misc = '/sys/class/misc/'
- if os.path.isdir(sysfs_root_tpm):
- sysfs_root = sysfs_root_tpm
- elif os.path.isdir(sysfs_root_misc):
- sysfs_root = sysfs_root_misc
- else:
- return
- for tpm_id in sorted(os.listdir(sysfs_root)):
- if sysfs_root == sysfs_root_misc and not tpm_id.startswith('tpm'):
- continue
- print("x-sysfs-device-name: {}".format(tpm_id))
- tpm_dirname = os.path.join(sysfs_root, tpm_id, 'device')
- for tpm_attr in sorted(os.listdir(tpm_dirname)):
- tpm_filename = os.path.join(tpm_dirname, tpm_attr)
- if not os.path.isfile(tpm_filename):
- continue
- if not os.access(tpm_filename, os.R_OK):
- continue
- with open(tpm_filename, 'rt', encoding='utf-8') as stream:
- tpm_data = stream.read()
- tpm_data = tpm_data.rstrip()
- if '\n' in tpm_data:
- print("{}:".format(tpm_attr))
- for tpm_data_chunk in tpm_data.splitlines():
- print(" {}".format(tpm_data_chunk))
- else:
- print("{}: {}".format(tpm_attr, tpm_data))
- print()
-
-
-if __name__ == "__main__":
- tpm_sysfs_resource().main()
diff --git a/bin/tpm_sysfs_resoource.py b/bin/tpm_sysfs_resoource.py
new file mode 100755
index 0000000..2f8c256
--- /dev/null
+++ b/bin/tpm_sysfs_resoource.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python3
+# Copyright 2015-2020 Canonical Ltd.
+# All rights reserved.
+#
+# Written by:
+# Zygmunt Krynicki <zygmunt.krynicki@canonical.com>
+# Jonathan Cave <jonathan.cave@canonical.com>
+
+"""
+Collect information about all sysfs attributes related to TPM.
+
+This program traverses all the TPM device nodes found in /sys/class/tpm/.
+Each present device is subsequently inspected by reading all readable files
+in /sys/class/tpm/*/device/* and presenting the data present there as
+subsequent RFC822 records. There is one record per TPM chip. In order to
+differentiate each chip, each record contains the field x-sysfs-device-name
+that stores the full sysfs directory name of the chip.
+
+@EPILOG@
+
+Unreadable files (typically due to permissions) are silently skipped.
+"""
+
+import os
+
+
+def main():
+ # This is found on 4.2 kernels
+ sysfs_root_tpm = '/sys/class/tpm/'
+ # This is found on 3.19 kernels
+ sysfs_root_misc = '/sys/class/misc/'
+ if os.path.isdir(sysfs_root_tpm):
+ sysfs_root = sysfs_root_tpm
+ elif os.path.isdir(sysfs_root_misc):
+ sysfs_root = sysfs_root_misc
+ else:
+ return
+ for tpm_id in sorted(os.listdir(sysfs_root)):
+ if sysfs_root == sysfs_root_misc and not tpm_id.startswith('tpm'):
+ continue
+ print("x-sysfs-device-name: {}".format(tpm_id))
+ tpm_dirname = os.path.join(sysfs_root, tpm_id, 'device')
+ for tpm_attr in sorted(os.listdir(tpm_dirname)):
+ tpm_filename = os.path.join(tpm_dirname, tpm_attr)
+ if not os.path.isfile(tpm_filename):
+ continue
+ if not os.access(tpm_filename, os.R_OK):
+ continue
+ with open(tpm_filename, 'rt', encoding='utf-8') as stream:
+ tpm_data = stream.read()
+ tpm_data = tpm_data.rstrip()
+ if '\n' in tpm_data:
+ print("{}:".format(tpm_attr))
+ for tpm_data_chunk in tpm_data.splitlines():
+ print(" {}".format(tpm_data_chunk))
+ else:
+ print("{}: {}".format(tpm_attr, tpm_data))
+ print()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/bin/virtualization b/bin/virtualization
index de001a1..487fba5 100755
--- a/bin/virtualization
+++ b/bin/virtualization
@@ -24,24 +24,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
from argparse import ArgumentParser
-import configparser
-from glob import glob
import os
-import re
import logging
import lsb_release
import platform
import requests
import shlex
-import signal
from subprocess import (
Popen,
PIPE,
- STDOUT,
DEVNULL,
CalledProcessError,
check_output,
- check_call,
call
)
import sys
@@ -204,7 +198,7 @@ class KVMTest(object):
self.arch = check_output(['dpkg', '--print-architecture'],
universal_newlines=True).strip()
self.qemu_config = QEMU_ARCH_CONFIG[self.arch]
- self.release = lsb_release.get_lsb_information()["CODENAME"]
+ self.release = lsb_release.get_distro_information()["CODENAME"]
def url_to_path(self, image_path):
"""
@@ -552,7 +546,7 @@ class RunCommand(object):
def run(self, cmd):
proc = Popen(shlex.split(cmd), stdout=PIPE, stderr=PIPE,
- universal_newlines=True)
+ stdin=DEVNULL, universal_newlines=True)
self.stdout, self.stderr = proc.communicate()
self.returncode = proc.returncode
@@ -834,7 +828,8 @@ def main():
args.func(args)
except AttributeError:
parser.print_help()
- return False
+ return 1
+
if __name__ == "__main__":
- main()
+ sys.exit(main())
diff --git a/bin/wifi_master_mode b/bin/wifi_master_mode.py
index 5953ea3..3888caa 100755
--- a/bin/wifi_master_mode
+++ b/bin/wifi_master_mode.py
@@ -1,32 +1,32 @@
#!/usr/bin/env python3
-# Copyright 2015 Canonical Ltd.
+# Copyright 2015-2020 Canonical Ltd.
# All rights reserved.
#
# Written by:
# Jonathan Cave <jonathan.cave@canonical.com>
# Po-Hsu Lin <po-hsu.lin@canonical.com>
+import argparse
import logging
import os
import sys
import subprocess
import tempfile
-from guacamole import Command
-
-class WifiMasterMode(Command):
+class WifiMasterMode():
"""Make system to act as an 802.11 Wi-Fi Access Point."""
- def register_arguments(self, parser):
+ def main(self):
+ parser = argparse.ArgumentParser()
parser.add_argument('--protocol', default='g',
choices=['a', 'b', 'g', 'ad'],
help="802.11 protocol, possible value: a/b/g/ad")
parser.add_argument('--auto', action='store_true',
help="Run in the automated mode")
+ args = parser.parse_args()
- def invoked(self, ctx):
data_dir = ""
try:
data_dir = os.environ['PLAINBOX_PROVIDER_DATA']
@@ -50,12 +50,12 @@ class WifiMasterMode(Command):
with tempfile.NamedTemporaryFile(mode='w+t') as conf_file_out:
with open(conf_in, "r") as conf_file_in:
data_in = conf_file_in.read()
- data_out = data_in.replace("$PROTOCOL", ctx.args.protocol)
+ data_out = data_in.replace("$PROTOCOL", args.protocol)
data_out = data_out.replace("$WIFI-DEV-NAME", wifi_dev)
conf_file_out.write(data_out)
conf_file_out.flush()
- if ctx.args.auto:
+ if args.auto:
child = subprocess.Popen(['hostapd', '-d', conf_file_out.name],
stdout=subprocess.PIPE,
universal_newlines=True)
@@ -87,5 +87,6 @@ class WifiMasterMode(Command):
finally:
child.terminate()
+
if __name__ == "__main__":
WifiMasterMode().main()
diff --git a/bin/wwan_tests b/bin/wwan_tests.py
index 17389e5..c19c547 100755
--- a/bin/wwan_tests
+++ b/bin/wwan_tests.py
@@ -1,11 +1,12 @@
#!/usr/bin/env python3
-# Copyright 2015 Canonical Ltd.
+# Copyright 2015-2020 Canonical Ltd.
# All rights reserved.
#
# Written by:
# Jonathan Cave <jonathan.cave@canonical.com>
# Po-Hsu Lin <po-hsu.lin@canonical.com>
+import argparse
import logging
import os
import subprocess
@@ -13,7 +14,6 @@ import sys
import time
import dbus
-from guacamole import Command
TEST_IP = "8.8.8.8"
@@ -56,7 +56,8 @@ class MMDbus():
if (excp.get_dbus_name() ==
"org.freedesktop.DBus.Error.ServiceUnknown"):
logging.error(excp.get_dbus_message())
- logging.error("Note: wwan_tests requires ModemManager >=1.0")
+ logging.error(
+ "Note: wwan_tests.py requires ModemManager >=1.0")
else:
logging.error(excp.get_dbus_message())
return
@@ -258,9 +259,10 @@ def _ping_test(if_name):
return ret_code
-class ThreeGppConnection(Command):
+class ThreeGppConnection():
- def register_arguments(self, parser):
+ def invoked(self, ctx):
+ parser = argparse.ArgumentParser()
parser.add_argument('wwan_control_if', type=str,
help='The control interface for the device')
parser.add_argument('wwan_net_if', type=str,
@@ -269,14 +271,13 @@ class ThreeGppConnection(Command):
help='The APN for data connection')
parser.add_argument('wwan_setup_time', type=int, default=30,
help='delay before ping test')
-
- def invoked(self, ctx):
+ args = parser.parse_args(sys.argv[2:])
ret_code = 1
try:
- _create_3gpp_connection(ctx.args.wwan_control_if, ctx.args.apn)
+ _create_3gpp_connection(ctx.args.wwan_control_if, args.apn)
_wwan_radio_on()
- time.sleep(ctx.args.wwan_setup_time)
- ret_code = _ping_test(ctx.args.wwan_net_if)
+ time.sleep(args.wwan_setup_time)
+ ret_code = _ping_test(args.wwan_net_if)
except:
pass
_destroy_3gpp_connection()
@@ -284,20 +285,28 @@ class ThreeGppConnection(Command):
return ret_code
-class CountModems(Command):
+class CountModems():
- def invoked(self, ctx):
- if ctx.args.use_cli:
+ def invoked(self):
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--use-cli', action='store_true',
+ help="Use mmcli for all calls rather than dbus")
+ args = parser.parse_args(sys.argv[2:])
+ if args.use_cli:
mm = MMCLI()
else:
mm = MMDbus()
print(len(mm.get_modem_ids()))
-class Resources(Command):
+class Resources():
- def invoked(self, ctx):
- if ctx.args.use_cli:
+ def invoked(self):
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--use-cli', action='store_true',
+ help="Use mmcli for all calls rather than dbus")
+ args = parser.parse_args(sys.argv[2:])
+ if args.use_cli:
mm = MMCLI()
else:
mm = MMDbus()
@@ -332,55 +341,60 @@ class Resources(Command):
print()
-class SimPresent(Command):
+class SimPresent():
- def register_arguments(self, parser):
+ def invoked(self):
+ parser = argparse.ArgumentParser()
parser.add_argument('hw_id', type=str,
help='The hardware ID of the modem whose attached'
'SIM we want to query')
-
- def invoked(self, ctx):
- if ctx.args.use_cli:
+ parser.add_argument('--use-cli', action='store_true',
+ help="Use mmcli for all calls rather than dbus")
+ args = parser.parse_args(sys.argv[2:])
+ if args.use_cli:
mm = MMCLI()
else:
mm = MMDbus()
- mm_id = mm.equipment_id_to_mm_id(ctx.args.hw_id)
+ mm_id = mm.equipment_id_to_mm_id(args.hw_id)
if not mm.sim_present(mm_id):
return 1
-class SimInfo(Command):
+class SimInfo():
- def register_arguments(self, parser):
+ def invoked(self):
+ parser = argparse.ArgumentParser()
parser.add_argument('hw_id', type=str,
help='The hardware ID of the modem whose attached'
'SIM we want to query')
-
- def invoked(self, ctx):
- if ctx.args.use_cli:
+ parser.add_argument('--use-cli', action='store_true',
+ help="Use mmcli for all calls rather than dbus")
+ args = parser.parse_args(sys.argv[2:])
+ if args.use_cli:
mm = MMCLI()
else:
mm = MMDbus()
- mm_id = mm.equipment_id_to_mm_id(ctx.args.hw_id)
+ mm_id = mm.equipment_id_to_mm_id(args.hw_id)
print("Operator: {}".format(mm.get_sim_operatorname(mm_id)))
print("IMSI: {}".format(mm.get_sim_imsi(mm_id)))
print("MCC/MNC: {}".format(mm.get_sim_operatoridentifier(mm_id)))
print("ICCID: {}".format(mm.get_sim_simidentifier(mm_id)))
-class WWANTests(Command):
-
- sub_commands = (
- ('count', CountModems),
- ('resources', Resources),
- ('3gpp-connection', ThreeGppConnection),
- ('sim-present', SimPresent),
- ('sim-info', SimInfo)
- )
-
- def register_arguments(self, parser):
- parser.add_argument('--use-cli', action='store_true',
- help="Use mmcli for all calls rather than dbus")
+class WWANTests():
+
+ def main(self):
+ sub_commands = {
+ 'count': CountModems,
+ 'resources': Resources,
+ '3gpp-connection': ThreeGppConnection,
+ 'sim-present': SimPresent,
+ 'sim-info': SimInfo
+ }
+ parser = argparse.ArgumentParser()
+ parser.add_argument('subcommand', type=str, choices=sub_commands)
+ args = parser.parse_args(sys.argv[1:2])
+ sub_commands[args.subcommand]().invoked()
if __name__ == "__main__":
diff --git a/data/chameleon_edids/README b/data/chameleon_edids/README
new file mode 100644
index 0000000..d05e2eb
--- /dev/null
+++ b/data/chameleon_edids/README
@@ -0,0 +1,2 @@
+EDID data set taken from:
+https://chromium.googlesource.com/chromiumos/third_party/autotest/+/refs/heads/master/server/site_tests/display_EdidStress/test_data/edids
diff --git a/data/chameleon_edids/daily/4K_ACER_BX320HK_HDMI.txt b/data/chameleon_edids/daily/4K_ACER_BX320HK_HDMI.txt
new file mode 100644
index 0000000..1a753b2
--- /dev/null
+++ b/data/chameleon_edids/daily/4K_ACER_BX320HK_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0004729a0445540000
+20190103804728782e88e5a8554da025
+0e5054bfef80714f8140818081c09500
+b300d1c001014dd000a0f0703e803020
+3500c48f2100001a000000fd00174c1f
+873c000a202020202020000000fc0042
+58333230484b0a2020202020000000ff
+005435373044303030383530310a018f
+020349f35410050403020716011f1213
+1420151106615d5e5f23090707830100
+006d030c001000387820006001020367
+d85dc40178c000e3050301e40f000001
+681a00000101233c00023a801871382d
+40582c4500c48f2100001e565e00a0a0
+a0295030203500c48f2100001af45100
+a0f070198030203500c48f2100001eda
diff --git a/data/chameleon_edids/daily/4K_DELL_UP3216Q_DP.txt b/data/chameleon_edids/daily/4K_DELL_UP3216Q_DP.txt
new file mode 100644
index 0000000..e88b15e
--- /dev/null
+++ b/data/chameleon_edids/daily/4K_DELL_UP3216Q_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0010acf84050383230
+051a0104a5431c783aca95a6554ea126
+0f5054a54b808100b300714f8180d1c0
+0101010101017e4800e0a0381f404040
+3a00a11c2100001a000000ff00393143
+5937333538303238500a000000fc0044
+454c4c205532393137570a20000000fd
+00314c1d5e13010a2020202020200117
+02031df1501005040302071601061112
+1513141f2023091f0783010000023a80
+1871382d40582c2500a11c2100001e01
+1d8018711c1620582c2500a11c210000
+9e011d007251d01e206e285500a11c21
+00001e8c0ad08a20e02d10103e9600a1
+1c210000180000000000000000000000
+000000000000000000000000000000dd
diff --git a/data/chameleon_edids/daily/4K_HP_Spectre32_DP.txt b/data/chameleon_edids/daily/4K_HP_Spectre32_DP.txt
new file mode 100644
index 0000000..c921e1c
--- /dev/null
+++ b/data/chameleon_edids/daily/4K_HP_Spectre32_DP.txt
@@ -0,0 +1,16 @@
+00FFFFFFFFFFFF0022F01A3200000000
+2E180104B54728783A87D5A8554D9F25
+0E5054210800D1C0A9C081C0D100B300
+9500A94081804DD000A0F0703E803020
+3500C48F2100001A000000FD00183C1E
+873C000A202020202020000000FC0048
+502053706563747265203332000000FF
+00434E43393430303030310A2020018F
+020318F14B101F041303120211010514
+2309070783010000A36600A0F0701F80
+30203500C48F2100001A565E00A0A0A0
+295030203500C48F2100001AEF5100A0
+F070198030203500C48F2100001AB339
+00A080381F4030203A00C48F2100001A
+283C80A070B0234030203600C48F2100
+001A00000000000000000000000000C4
diff --git a/data/chameleon_edids/daily/4K_HP_Spectre32_HDMI.txt b/data/chameleon_edids/daily/4K_HP_Spectre32_HDMI.txt
new file mode 100644
index 0000000..3d6643e
--- /dev/null
+++ b/data/chameleon_edids/daily/4K_HP_Spectre32_HDMI.txt
@@ -0,0 +1,16 @@
+00FFFFFFFFFFFF0022F01C3201010101
+04190103804728782A87D5A8554D9F25
+0E5054210800D1C0A9C081C0D100B300
+9500A94081804DD000A0F0703E803020
+3500C48F2100001A000000FD00183C1B
+873C000A202020202020000000FC0048
+502053706563747265203332000000FF
+00434E43393430303030310A202001FB
+02033DF15361605F5D101F0413031202
+11010514070616152309070783010000
+6C030C001000383C200040010367D85D
+C401788000E40F030000E2002B047400
+30F2705A80B0588A00C48F2100001A56
+5E00A0A0A0295030203500C48F210000
+1EEF5100A0F070198030203500C48F21
+00001E000000000000000000000000A8
diff --git a/data/chameleon_edids/daily/ACI_9155_ASUS_VH238_HDMI.txt b/data/chameleon_edids/daily/ACI_9155_ASUS_VH238_HDMI.txt
new file mode 100644
index 0000000..8b0d7ff
--- /dev/null
+++ b/data/chameleon_edids/daily/ACI_9155_ASUS_VH238_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff000469c323fccc0000
+2017010380331d782add45a3554fa027
+125054bfef00714f814081809500b300
+d1c001010101023a801871382d40582c
+4500fd1e1100001e000000ff0044384c
+4d54463035323437360a000000fd0032
+4b1e5011000a202020202020000000fc
+00415355532056483233380a202000be \ No newline at end of file
diff --git a/data/chameleon_edids/daily/ACI_9713_ASUS_VE258_DP.txt b/data/chameleon_edids/daily/ACI_9713_ASUS_VE258_DP.txt
new file mode 100644
index 0000000..99f4f3e
--- /dev/null
+++ b/data/chameleon_edids/daily/ACI_9713_ASUS_VE258_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff000469f125f3c60100
+1d150104a5371f783a7695a5544ba226
+115054bfef00714f81c0814081809500
+950fb300d1c0023a801871382d40582c
+450029372100001e000000ff0042374c
+4d54463131363436370a000000fd0032
+4b185311041100f0f838f03c000000fc
+00415355532056453235380a202001b7
+020322714f0102031112130414051f90
+0e0f1d1e2309170783010000656e0c00
+10008c0ad08a20e02d10103e96002937
+21000018011d007251d01e206e285500
+29372100001e011d00bc52d01e20b828
+554029372100001e8c0ad09020403120
+0c405500293721000018000000000000
+000000000000000000000000000000aa \ No newline at end of file
diff --git a/data/chameleon_edids/daily/ACR_314_Acer_T232HL_HDMI.txt b/data/chameleon_edids/daily/ACR_314_Acer_T232HL_HDMI.txt
new file mode 100644
index 0000000..3173661
--- /dev/null
+++ b/data/chameleon_edids/daily/ACR_314_Acer_T232HL_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0004723a014c072030
+0217010380331d782aee95a3544c9926
+0f5054b30c00714f810081809500d1c0
+81c0b3000101023a801871382d40582c
+4500fe1f1100001e000000fd00384b1e
+5311000a202020202020000000fc0041
+6365722054323332484c0a20000000ff
+004c57594141303031343330300a01e3
+020322724f010203040590111213149f
+0607151623097f078301000065030c00
+1000023a80d072382d40102c9680fe1f
+11000018011d8018711c1620582c2500
+fe1f1100009e011d80d0721c1620102c
+2580fe1f1100009e023a80d072382d40
+102c2580fe1f1100001e000000000000
+000000000000000000000000000000c6 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/ACR_315_Acer_T272HL_HDMI.txt b/data/chameleon_edids/daily/ACR_315_Acer_T272HL_HDMI.txt
new file mode 100644
index 0000000..5195669
--- /dev/null
+++ b/data/chameleon_edids/daily/ACR_315_Acer_T272HL_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0004723b013c2a9034
+31170103803c22782a2fa5a554509e27
+105054b30c00714f81c0810081809500
+b300d1c00101023a801871382d40582c
+450056502100001e000000fd00324b1e
+5311000a202020202020000000fc0041
+6365722054323732484c0a20000000ff
+004c575a4141303032343331300a0126
+020322724f010203040590111213149f
+0607151623097f078301000065030c00
+1000023a801871382d40582c45005650
+2100001e023a80d072382d40102c2580
+56502100001e011d8018711c1620582c
+250056502100009e011d80d0721c1620
+102c258056502100009e000000000000
+0000000000000000000000000000009e \ No newline at end of file
diff --git a/data/chameleon_edids/daily/ACR_5429_H6510BD_HDMI.txt b/data/chameleon_edids/daily/ACR_5429_H6510BD_HDMI.txt
new file mode 100644
index 0000000..6b2ec86
--- /dev/null
+++ b/data/chameleon_edids/daily/ACR_5429_H6510BD_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff000472351534053033
+21170103800000780a436ea5574f9d25
+0d4e5e3fcf80317c457c617c813c8180
+81c09500d1c0023a801871382d40582c
+450000000000001e000000fd0017780f
+6611000a202020202020000000fc0048
+3635313042440a2020202020000000ff
+004a465a3131303041383430310a0146
+020329f14d0602151104130514901f20
+212223091707830100006a030c001000
+3828208000e30503018c0ad08a20e02d
+10103e9600c48e21000018011d007251
+d01e206e285500c48e2100001e011d80
+18711c1620582c2500c48e2100009ef3
+39801871382d40582c4500c48e210000
+1e000000000000000000000000000073 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/AMX_2150_DVX-2150_HDMI.txt b/data/chameleon_edids/daily/AMX_2150_DVX-2150_HDMI.txt
new file mode 100644
index 0000000..1cb91e2
--- /dev/null
+++ b/data/chameleon_edids/daily/AMX_2150_DVX-2150_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0005b8660800000000
+00150103803c22780a14e5a3564c9d25
+0e5054a56f808180818f7140b300814f
+714f01010101273c80a170b023403020
+360056502100001a21399030621a2740
+68b0360056502100001c000000fd0038
+4b1e5311000a202020202020000000fc
+004456582d323135300a20202020013d
+02031ff14e8405030220221011131214
+1f071623097f0767030c002000802c01
+1d007251d01e20388815005650210000
+1e011d8018711c1620582c2500565021
+00009e8c0ad08a20e02d10103e960056
+5021000018023a801871382d40582c45
+0056502100001e000000000000000000
+0000000000000000000000000000008b \ No newline at end of file
diff --git a/data/chameleon_edids/daily/ATL_1_AT-HDVS-RX_HDMI.txt b/data/chameleon_edids/daily/ATL_1_AT-HDVS-RX_HDMI.txt
new file mode 100644
index 0000000..bca55d7
--- /dev/null
+++ b/data/chameleon_edids/daily/ATL_1_AT-HDVS-RX_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00068c010001000000
+131701038010098cfa9c209c544f8f26
+215256afcf008180a940d1c0a9c081c0
+90408100b3009e20009051201f304880
+3600100a0000001c283c80a070b02340
+30203600100a0000001a000000fd0018
+550f5c11000a202020202020000000fc
+0041542d484456532d52580a2020013d
+02032ef14c010602840510151113141f
+20320907051557500007000907070907
+0709070765030c001000830100000e1f
+008051001e304080370010090000001c
+662156aa51001e30468f330004030000
+001e023a801871382d40582c45001009
+0000001e011d007251d01e206e285500
+10090000001e00000000000000000045 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/CEI_0_Crestron_HDMI.txt b/data/chameleon_edids/daily/CEI_0_Crestron_HDMI.txt
new file mode 100644
index 0000000..7bd5199
--- /dev/null
+++ b/data/chameleon_edids/daily/CEI_0_Crestron_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff000ca9000000000000
+0113010380502d960eee91a3544c9926
+0f5054210800d1dcd1e2d1dd81c081f6
+3bb601010101023a801871382d40582c
+450020c23100001e023a80d072382d40
+102c458020c23100001e000000fc0043
+72657374726f6e0a20202020000000fd
+00173d1a440f000a2020202020200168
+020323414a901f200514041311020126
+0907070957078301000068030c001000
+002d009a29a0d0518422305098360020
+c23100001c662150b051001b30407036
+0020c23100001e9e20009051201f3048
+80360020c23100001c00000000000000
+00000000000000000000000000000000
+00000000000000000000000000000042 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/CEI_31032_Crestron_HDMI.txt b/data/chameleon_edids/daily/CEI_31032_Crestron_HDMI.txt
new file mode 100644
index 0000000..5793a8f
--- /dev/null
+++ b/data/chameleon_edids/daily/CEI_31032_Crestron_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff000ca9387900000000
+0113010380502d960eee91a3544c9926
+0f505421080001010101010101010101
+010101010101011d007251d01e206e28
+550020c23100001e023a801871382d40
+582c450020c23100001e000000fc0043
+72657374726f6e0a20202020000000fd
+003b3d1e440f000a2020202020200104
+02031961438410012309070783010000
+68030c001000002d0000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000037 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/CVT_3_CVT_TV_HDMI.txt b/data/chameleon_edids/daily/CVT_3_CVT_TV_HDMI.txt
new file mode 100644
index 0000000..57384ab
--- /dev/null
+++ b/data/chameleon_edids/daily/CVT_3_CVT_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff000ed4030000000000
+1014010380643d008aee95a3544c9926
+0f5054a54e0001010101010101010101
+010101010101023a801871382d40582c
+45003f432100001a000000fd0018550f
+5010000a202020202020000000fc0043
+5654205456200a0a0a0a0a0a00000000
+000000000000000000000000000001f0
+020323744f90050403070206011f1413
+12161115230907038301000066030c00
+100080011d00bc52d01e20b8285540c4
+8e2100001e011d80d0721c1620102c25
+80c48e2100009e8c0ad08a20e02d1010
+3e9600138e210000188c0ad090204031
+200c405500138e210000180000000000
+000000000000000000000000000000a5 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/DEL_16443_DELL_2208WFP_DP.txt b/data/chameleon_edids/daily/DEL_16443_DELL_2208WFP_DP.txt
new file mode 100644
index 0000000..3e4745c
--- /dev/null
+++ b/data/chameleon_edids/daily/DEL_16443_DELL_2208WFP_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0010ac3b4053343034
+18120103682f1e78ea3af5aa5037ab24
+135054a54b00714f8180b30001010101
+01010101010121399030621a274068b0
+3600d9281100001c000000ff00463533
+3248383643343034530a000000fc0044
+454c4c20323230385746500a000000fd
+00384c1e5310000a2020202020200039 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/DEL_16543_DELL_P2314T_DP.txt b/data/chameleon_edids/daily/DEL_16543_DELL_P2314T_DP.txt
new file mode 100644
index 0000000..798c233
--- /dev/null
+++ b/data/chameleon_edids/daily/DEL_16543_DELL_P2314T_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0010ac9f404c4c3645
+10180104a5331d783ae595a656529d27
+105054a54b00714f8180a9c0d1c00101
+010101010101023a801871382d40582c
+4500fd1e1100001e000000ff00445746
+325834344645364c4c0a000000fc0044
+454c4c205032333134540a20000000fd
+00384c1e5311010a20202020202001bb
+02031cf14f9005040302071601061112
+1513141f2309070783010000023a8018
+71382d40582c4500fd1e1100001e011d
+8018711c1620582c2500fd1e1100009e
+011d007251d01e206e285500fd1e1100
+001e8c0ad08a20e02d10103e9600fd1e
+11000018000000000000000000000000
+0000000000000000000000000000003f \ No newline at end of file
diff --git a/data/chameleon_edids/daily/DEL_16544_DELL_P2314T_HDMI.txt b/data/chameleon_edids/daily/DEL_16544_DELL_P2314T_HDMI.txt
new file mode 100644
index 0000000..7c7e852
--- /dev/null
+++ b/data/chameleon_edids/daily/DEL_16544_DELL_P2314T_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0010aca0404c455145
+1018010380331d78eae595a656529d27
+105054a54b00714f8180a9c0d1c00101
+010101010101023a801871382d40582c
+4500fd1e1100001e000000ff00445746
+32583434464551454c0a000000fc0044
+454c4c205032333134540a20000000fd
+00384c1e5311000a2020202020200109
+020326f14f9005040302071601061112
+1513141f2309070765030c0010008301
+0000e3050301023a801871382d40582c
+4500fd1e1100001e011d8018711c1620
+582c2500fd1e1100009e011d007251d0
+1e206e285500fd1e1100001e8c0ad08a
+20e02d10103e9600fd1e110000180000
+000000000000000000000000000000c5 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/DEL_16545_DELL_P2314T_HDMI.txt b/data/chameleon_edids/daily/DEL_16545_DELL_P2314T_HDMI.txt
new file mode 100644
index 0000000..f689f58
--- /dev/null
+++ b/data/chameleon_edids/daily/DEL_16545_DELL_P2314T_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0010aca1404c385145
+1018010380331d78eae595a656529d27
+105054a54b00714f8180a9c0d1c00101
+010101010101023a801871382d40582c
+4500fd1e1100001e000000ff00445746
+32583434464551384c0a000000fc0044
+454c4c205032333134540a20000000fd
+00384c1e5311000a2020202020200122
+020326f14f9005040302071601061112
+1513141f2309070765030c0020008301
+0000e3050301023a801871382d40582c
+4500fd1e1100001e011d8018711c1620
+582c2500fd1e1100009e011d007251d0
+1e206e285500fd1e1100001e8c0ad08a
+20e02d10103e9600fd1e110000180000
+000000000000000000000000000000b5 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/DEL_40976_DELL_2405FPW_HDMI.txt b/data/chameleon_edids/daily/DEL_40976_DELL_2405FPW_HDMI.txt
new file mode 100644
index 0000000..b7380cc
--- /dev/null
+++ b/data/chameleon_edids/daily/DEL_40976_DELL_2405FPW_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0010ac10a053465630
+0b10010380342178eeee50a3544c9b26
+0f5054a54b008180a940714fb3000101
+010101010101283c80a070b023403020
+360007442100001a000000ff00543631
+33333633493056465320000000fc0044
+454c4c20323430354650570a000000fd
+00384c1e5111000a20202020202000e9 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/DEL_40983_DELL_2407WFP_HDMI.txt b/data/chameleon_edids/daily/DEL_40983_DELL_2407WFP_HDMI.txt
new file mode 100644
index 0000000..3d83fdb
--- /dev/null
+++ b/data/chameleon_edids/daily/DEL_40983_DELL_2407WFP_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0010ac17a053575930
+0511010380342178eeee91a3544c9926
+0f5054a54b008180a940714fb3000101
+010101010101283c80a070b023403020
+360007442100001a000000ff00555935
+34353732323059575320000000fc0044
+454c4c20323430375746500a000000fd
+00384c1e5311000a2020202020200068 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/DEL_41046_DELL_U2711_HDMI.txt b/data/chameleon_edids/daily/DEL_41046_DELL_U2711_HDMI.txt
new file mode 100644
index 0000000..baa826b
--- /dev/null
+++ b/data/chameleon_edids/daily/DEL_41046_DELL_U2711_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0010ac56a04c4d3231
+33150103803c2278ea8e05ad4f33b026
+0d5054a54b008100b300714fa9408180
+010101010101023a801871382d40582c
+250055502100001e000000ff00443937
+315431434731324d4c0a000000fc0044
+454c4c2055323731310a2020000000fd
+00384c1e5111000a20202020202001cc
+020329f1509005040302071601061112
+1513141f20230d7f0767030c00100038
+2d830f0000e3050301023a801871382d
+40582c250055502100001e011d801871
+1c1620582c250055502100009e011d00
+7251d01e206e28550055502100001e8c
+0ad08a20e02d10103e96005550210000
+18000000000000000000000000000068 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/DEL_61462_DELL_U2410_HDMI.txt b/data/chameleon_edids/daily/DEL_61462_DELL_U2410_HDMI.txt
new file mode 100644
index 0000000..9adf5f4
--- /dev/null
+++ b/data/chameleon_edids/daily/DEL_61462_DELL_U2410_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0010ac16f04c4e4332
+1f13010380342078ea1ec5ae4f34b126
+0e5054a54b008180a940d100714f0101
+010101010101283c80a070b023403020
+360006442100001a000000ff00463532
+354d39375332434e4c0a000000fc0044
+454c4c2055323431300a2020000000fd
+00384c1e5111000a202020202020012e
+020329f15090050403020716011f1213
+14201511062309070767030c00100038
+2d83010000e3050301023a801871382d
+40582c450006442100001e011d801871
+1c1620582c250006442100009e011d00
+7251d01e206e28550006442100001e8c
+0ad08a20e02d10103e96000644210000
+1800000000000000000000000000003e \ No newline at end of file
diff --git a/data/chameleon_edids/daily/DEL_61463_DELL_U2410_DP.txt b/data/chameleon_edids/daily/DEL_61463_DELL_U2410_DP.txt
new file mode 100644
index 0000000..04c5ff8
--- /dev/null
+++ b/data/chameleon_edids/daily/DEL_61463_DELL_U2410_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0010ac17f04c334a31
+08150104b53420783a1ec5ae4f34b126
+0e5054a54b008180a940d100714f0101
+010101010101283c80a070b023403020
+360006442100001a000000ff00463532
+354d313247314a334c0a000000fc0044
+454c4c2055323431300a2020000000fd
+00384c1e5111000a20202020202001ff
+02031df15090050403020716011f1213
+14201511062309070783010000023a80
+1871382d40582c450006442100001e01
+1d8018711c1620582c25000644210000
+9e011d007251d01e206e285500064421
+00001e8c0ad08a20e02d10103e960006
+44210000180000000000000000000000
+00000000000000000000000000000021 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/DTV_0_DTV_HDMI.txt b/data/chameleon_edids/daily/DTV_0_DTV_HDMI.txt
new file mode 100644
index 0000000..3cce70b
--- /dev/null
+++ b/data/chameleon_edids/daily/DTV_0_DTV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff001296000001010101
+0c180103803a20780a0dc9a057479827
+12484ca14b008180d1c0590f01010101
+010101010101023a801871382d40582c
+450020c23100001e011d007251d01e20
+6e28550044402100001e000000fc0020
+202020204454560a20202020000000fd
+0032550e4610000a2020202020200125
+02032770521413121116150504030207
+06011f10202122260907071507508301
+000067030c001000b82d011d80d0721c
+1620102c258044402100009e011d8018
+711c1620582c2500444021000098011d
+00bc52d01e20b828554044402100001e
+011d007251d01e206e28550044402100
+001e0000000000000000000000000093 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/DTV_0_Kogan_TV_HDMI.txt b/data/chameleon_edids/daily/DTV_0_Kogan_TV_HDMI.txt
new file mode 100644
index 0000000..4889890
--- /dev/null
+++ b/data/chameleon_edids/daily/DTV_0_Kogan_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff001296000001010101
+05170103800000780adebda355479926
+0c474aa10800d1c00101010101010101
+010101010101023a801871382d40582c
+4500a2123200001e662150b051001b30
+40703600f8ae2100001e000000fd0032
+4c1f4b10000a202020202020000000fc
+0020204b6f67616e2054560a20200115
+020324744f90050403070206011f1413
+12161115230907038301000067030c00
+1000b82d011d00bc52d01e20b8285540
+c48e2100001e011d80d0721c1620102c
+2580c48e2100009e8c0ad08a20e02d10
+103e9600138e210000188c0ad0902040
+31200c405500138e2100001800000000
+0000000000000000000000000000003e \ No newline at end of file
diff --git a/data/chameleon_edids/daily/ELO_8705_HDMI.txt b/data/chameleon_edids/daily/ELO_8705_HDMI.txt
new file mode 100644
index 0000000..0979fd1
--- /dev/null
+++ b/data/chameleon_edids/daily/ELO_8705_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff00158f01220c4b0000
+2b17010381301b78eaf5c5a85337ae25
+1250542308008180814081c001010101
+010101010101d039801871382d40582c
+4500dc0c1100001e662156aa51001e30
+468f3300dc0c1100001e21399030621a
+274068b03600dc0c1100001c9a29a0d0
+5184223050983600dc0c1100001c00fe \ No newline at end of file
diff --git a/data/chameleon_edids/daily/EXN_0_EXTRON_D_HDMI.txt b/data/chameleon_edids/daily/EXN_0_EXTRON_D_HDMI.txt
new file mode 100644
index 0000000..0d07b39
--- /dev/null
+++ b/data/chameleon_edids/daily/EXN_0_EXTRON_D_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00170e000001010101
+0013010380000078ee00000000000000
+000000a54b00d1c0a940714f90408180
+010101010101023a801871382d40582c
+450080387400001e302a7820511a1240
+30701300781a5400001c000000fd0017
+4c0e5c11000a202020202020000000fc
+00455854524f4e20440a20202020010e
+02031a414690050403020123091f4083
+01000066030c00100000023a80187138
+2d40582c450080387400001e00000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+0000000000000000000000000000002a \ No newline at end of file
diff --git a/data/chameleon_edids/daily/EXN_0_ExtronScalerD_HDMI.txt b/data/chameleon_edids/daily/EXN_0_ExtronScalerD_HDMI.txt
new file mode 100644
index 0000000..3613c38
--- /dev/null
+++ b/data/chameleon_edids/daily/EXN_0_ExtronScalerD_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00170e000000000000
+0017010380000078ee00000000000000
+00000021080081c0810081809500b300
+a940d1c0d100011d007251d01e206e28
+550000d05200001e000000fd00173d0e
+4c11000a202020202020000000ff000a
+202020202020202020202020000000fc
+00457874726f6e5363616c657244011d
+020328f053901f200514270413020311
+12060715162221012309070783010000
+67030c001000982d023a801871382d40
+582c4500803874000018023a80d07238
+2d40102c458080387400001800000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000de \ No newline at end of file
diff --git a/data/chameleon_edids/daily/EXN_0_Extron_HDMI_HDMI.txt b/data/chameleon_edids/daily/EXN_0_Extron_HDMI_HDMI.txt
new file mode 100644
index 0000000..d5fcb26
--- /dev/null
+++ b/data/chameleon_edids/daily/EXN_0_Extron_HDMI_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00170e000000000000
+00160103800000782a00000000000000
+00000021000001010101010101010101
+010101010101011d007251d01e206e28
+550000d05200001e000000fd00173d0e
+4c11000a202020202020000000fc0045
+7874726f6e2048444d490a2000000010
+000000000000000000000000000001db
+02031ac0468402030607012309070783
+01000066030c00100080000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000006d14 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/GSM_1_LG_TV_HDMI.txt b/data/chameleon_edids/daily/GSM_1_LG_TV_HDMI.txt
new file mode 100644
index 0000000..7a8b2b7
--- /dev/null
+++ b/data/chameleon_edids/daily/GSM_1_LG_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff001e6d010001010101
+0116010380a05a780aee91a3544c9926
+0f5054a1080031404540614071408180
+010101010101023a801871382d40582c
+4500a05a0000001e662150b051001b30
+40703600a05a0000001e000000fd003a
+3e1e5310000a202020202020000000fc
+004c472054560a202020202020200143
+020322f14e109f041305140302122021
+2215012615075009570767030c001000
+801e011d8018711c1620582c250020c2
+3100009e011d007251d01e206e285500
+20c23100001e023a801871382d40582c
+4500a05a0000001e011d00bc52d01e20
+b8285540c48e2100001e000000000000
+00000000000000000000000000000025 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/GSM_22593_D2342P_HDMI.txt b/data/chameleon_edids/daily/GSM_22593_D2342P_HDMI.txt
new file mode 100644
index 0000000..7beca7e
--- /dev/null
+++ b/data/chameleon_edids/daily/GSM_22593_D2342P_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff001e6d41589d000000
+0c15010380331d78ead945a2554da027
+125054a76b80714f81808140b3000101
+010101010101023a801871382d40582c
+4500fe221100001e000000fd00384b1e
+530f000a202020202020000000fc0044
+32333432500a202020202020000000ff
+003131324e444b4430303135370a0094 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/GSM_22594_D2342P_HDMI.txt b/data/chameleon_edids/daily/GSM_22594_D2342P_HDMI.txt
new file mode 100644
index 0000000..cb62feb
--- /dev/null
+++ b/data/chameleon_edids/daily/GSM_22594_D2342P_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff001e6d425801010101
+0113010380331d78ead945a2554da027
+125054210800714081408180b3000101
+010101010101023a801871382d40582c
+4500fe221100001e000000fd00383d1e
+530f000a202020202020000000fc0044
+32333432500a202020202020000000ff
+0053657269616c4e756d6265720a01a7
+020334f14c101f841305140312202122
+0123090707830100007a030c00100000
+2d20c0100041050f0810181088105810
+38104810023a801871382d40582c4500
+fe221100001e011d8018711c1620582c
+2500fe221100009e011d007251d01e20
+6e285500fe221100001e000000000000
+0000000000000000000000000000006d \ No newline at end of file
diff --git a/data/chameleon_edids/daily/GSM_23155_22CV241_HDMI.txt b/data/chameleon_edids/daily/GSM_23155_22CV241_HDMI.txt
new file mode 100644
index 0000000..2240c68
--- /dev/null
+++ b/data/chameleon_edids/daily/GSM_23155_22CV241_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff001e6d735a01010101
+32170103802f1a78eaebf5a656519c26
+105054210800010181c0810081809500
+0101a9c0b300023a801871382d40582c
+45000f282100001e000000fd00383f1e
+530f000a202020202020000000fc0032
+3243563234310a2020202020000000ff
+000a2020202020202020202020200143
+02031df14a900403011412051f101323
+0907078301000065030c001000023a80
+1871382d40582c4500fe221100001e01
+1d8018711c1620582c2500fe22110000
+9e011d007251d01e206e285500fe2211
+00001e8c0ad08a20e02d10103e9600fe
+22110000180000000000000000000000
+000000000000000000000000000000e6 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/GSM_50200_LG_TV_HDMI.txt b/data/chameleon_edids/daily/GSM_50200_LG_TV_HDMI.txt
new file mode 100644
index 0000000..d2231b2
--- /dev/null
+++ b/data/chameleon_edids/daily/GSM_50200_LG_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff001e6d18c401010101
+0113010380462778ead9b0a357499c25
+11494ba10800a94081809040d1c00101
+010101010101023a801871382d40582c
+450008442100001e1b2150a051001e30
+48883500bc882100001c000000fd002f
+3f1c4b10000a202020202020000000fc
+004c472054560a202020202020200187
+020323f150850402010311121314101f
+2021220716230907078301000065030c
+003000011d008051d01c2040803500bc
+882100001e8c0ad08a20e02d10103e96
+00138e210000182a1200104143172028
+60350000003200001c011d8018711c16
+20582c2500c48e2100009e0000000000
+0000000000000000000000000000000a \ No newline at end of file
diff --git a/data/chameleon_edids/daily/GSM_50294_M3704C_HDMI.txt b/data/chameleon_edids/daily/GSM_50294_M3704C_HDMI.txt
new file mode 100644
index 0000000..1cfa0d1
--- /dev/null
+++ b/data/chameleon_edids/daily/GSM_50294_M3704C_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff001e6d76c401010101
+2514010380522e78eaac27a355499b25
+10474aa1080081807140614045403140
+81400101b300023a801871382d40582c
+4500a20b3200001e1a3680a070381f40
+30203500a20b32000018000000fd0038
+3c1e530f000a202020202020000000fc
+004d33373034430a202020202020013e
+02031c714990050403011f1412132309
+07078301000065030c001000023a8018
+71382d40582c450006442100001e011d
+8018711c1620582c250006442100009e
+011d007251d01e206e28550006442100
+001e011d80d0721c1620102c2580848a
+4200009e023a80d072382d40102c4520
+06442100001e00000000000000000056 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/HEC_48_HDMI_HDMI.txt b/data/chameleon_edids/daily/HEC_48_HDMI_HDMI.txt
new file mode 100644
index 0000000..2c09b14
--- /dev/null
+++ b/data/chameleon_edids/daily/HEC_48_HDMI_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0020a3300001000000
+23140103807341780acf74a3574cb023
+09484c21080081c08140818001010101
+010101010101023a801871382d40582c
+450080884200001e1b2150a051001e30
+48883500444a2100001c000000fc0048
+444d490a2020202020202020000000fd
+00324b0f450f000a202020202020016c
+020328714b0102040590141f11202122
+26090707177f18830100006c030c0030
+00382d20a0020141011d80d0721c1620
+102c2580c48e2100009e011d8018711c
+1620582c2500c48e2100009e011d0072
+51d01e206e285500c48e210000180000
+00000000000000000000000000000000
+00000000000000000000000000000095 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/HWP_10345_HP_ZR24w_DP.txt b/data/chameleon_edids/daily/HWP_10345_HP_ZR24w_DP.txt
new file mode 100644
index 0000000..d5f5e58
--- /dev/null
+++ b/data/chameleon_edids/daily/HWP_10345_HP_ZR24w_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0022f0692801010101
+0d150104a53623782efc81a4554d9d25
+125054210800814081809500a940b300
+d1c001010101283c80a070b023403020
+360022602100001a000000fd003b3d18
+5011000a202020202020000000fc0048
+50205a523234770a20202020000000ff
+00434e54313133373034500a20200031 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/HWP_10346_HP_ZR24w_HDMI.txt b/data/chameleon_edids/daily/HWP_10346_HP_ZR24w_HDMI.txt
new file mode 100644
index 0000000..bc2241b
--- /dev/null
+++ b/data/chameleon_edids/daily/HWP_10346_HP_ZR24w_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0022f06a2801010101
+11150103803623782efc81a4554d9d25
+125054210800814081809500a940b300
+d1c001010101283c80a070b023403020
+360022602100001a000000fd003b3d18
+5011000a202020202020000000fc0048
+50205a523234770a20202020000000ff
+00434e5431313737354e420a2020003d \ No newline at end of file
diff --git a/data/chameleon_edids/daily/HWP_10348_HP_ZR30w_DP.txt b/data/chameleon_edids/daily/HWP_10348_HP_ZR30w_DP.txt
new file mode 100644
index 0000000..994bfde
--- /dev/null
+++ b/data/chameleon_edids/daily/HWP_10348_HP_ZR30w_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0022f06c2801010101
+0c170104b5402878e28d85ad4f35b125
+0e505400000001010101010101010101
+010101010101e26800a0a0402e603020
+360081902100001abc1b00a050201730
+3020360081902100001a000000fc0048
+50205a523330770a20202020000000ff
+00434e34333132303344420a20200067 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/HWP_10580_HP_ZR2440w_DP.txt b/data/chameleon_edids/daily/HWP_10580_HP_ZR2440w_DP.txt
new file mode 100644
index 0000000..f4e006d
--- /dev/null
+++ b/data/chameleon_edids/daily/HWP_10580_HP_ZR2440w_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0022f0542900000000
+14170104a534207823fc81a4554d9d25
+125054210800d1c081c0814081809500
+a940b3000101283c80a070b023403020
+360006442100001a000000fd00183c18
+5011000a202020202020000000fc0048
+50205a5232343430770a2020000000ff
+00434e3433323030314c500a20200156
+020319c14c901f051404130302070612
+012309070783010000023a801871382d
+40582c450006442100001e023a80d072
+382d40102c458006442100001e011d00
+7251d01e206e28550006442100001e01
+1d00bc52d01e20b82855400644210000
+1e8c0ad08a20e02d10103e9600064421
+0000180000000000000000000000007b \ No newline at end of file
diff --git a/data/chameleon_edids/daily/HWP_10581_HP_ZR2440w_HDMI.txt b/data/chameleon_edids/daily/HWP_10581_HP_ZR2440w_HDMI.txt
new file mode 100644
index 0000000..3b34e3e
--- /dev/null
+++ b/data/chameleon_edids/daily/HWP_10581_HP_ZR2440w_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0022f0552901010101
+0c170103803420782afc81a4554d9d25
+125054210800d1c081c0814081809500
+a940b3000101283c80a070b023403020
+360006442100001a000000fd00183c18
+5011000a202020202020000000fc0048
+50205a5232343430770a2020000000ff
+00434e34333132303836580a2020007f \ No newline at end of file
diff --git a/data/chameleon_edids/daily/HWP_10582_HP_ZR2440w_HDMI.txt b/data/chameleon_edids/daily/HWP_10582_HP_ZR2440w_HDMI.txt
new file mode 100644
index 0000000..7ec1dcb
--- /dev/null
+++ b/data/chameleon_edids/daily/HWP_10582_HP_ZR2440w_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0022f0562901010101
+0b170103803420782afc81a4554d9d25
+125054210800d1c081c0814081809500
+a940b3000101283c80a070b023403020
+360006442100001a000000fd00183c18
+5011000a202020202020000000fc0048
+50205a5232343430770a2020000000ff
+00434e34333131315042560a2020015c
+02031ff14c901f051404130302070612
+0165030c001000230907078301000002
+3a801871382d40582c45000644210000
+1e023a80d072382d40102c4580064421
+00001e011d007251d01e206e28550006
+442100001e011d00bc52d01e20b82855
+4006442100001e8c0ad08a20e02d1010
+3e9600064421000018000000000000c1 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/HWP_12441_HP_Z30i_DP.txt b/data/chameleon_edids/daily/HWP_12441_HP_Z30i_DP.txt
new file mode 100644
index 0000000..05dff0e
--- /dev/null
+++ b/data/chameleon_edids/daily/HWP_12441_HP_Z30i_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0022f0993000000000
+06180104a54028783a1df5ae4f35b325
+0d5054a10800d100b30095008100a940
+8180d1c081c0e26800a0a0402e603020
+360081902100001a000000fd00324618
+621b000a202020202020000000fc0048
+50205a3330690a2020202020000000ff
+00434e34343036304743560a20200142
+020316f149900403021f131211012309
+070783010000023a801871382d40582c
+450081902100001e023a80d072382d40
+102c458081902100001e011d007251d0
+1e206e28550081902100001e011d00bc
+52d01e20b828554081902100001e8c0a
+d08a20e02d10103e9600819021000018
+00000000000000000000000000000083 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/HWP_12442_HP_Z30i_HDMI.txt b/data/chameleon_edids/daily/HWP_12442_HP_Z30i_HDMI.txt
new file mode 100644
index 0000000..52d43b2
--- /dev/null
+++ b/data/chameleon_edids/daily/HWP_12442_HP_Z30i_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0022f09a3001010101
+06180103804028782a1df5ae4f35b325
+0d5054a10800d100b30095008100a940
+8180d1c081c0e26800a0a0402e603020
+360081902100001a000000fd00324618
+621b000a202020202020000000fc0048
+50205a3330690a2020202020000000ff
+00434e34343036304742530a20200078 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/HWP_12446_HP_Z24i_DP.txt b/data/chameleon_edids/daily/HWP_12446_HP_Z24i_DP.txt
new file mode 100644
index 0000000..1d6082b
--- /dev/null
+++ b/data/chameleon_edids/daily/HWP_12446_HP_Z24i_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0022f09e3000000000
+15180104a5342078264ca5a7554da226
+105054a10800b30095008100a9408180
+d1c081c00101283c80a070b023403020
+360006442100001a000000fd00324c18
+5e11000a202020202020000000fc0048
+50205a3234690a2020202020000000ff
+00434e343432313050334b0a2020006f \ No newline at end of file
diff --git a/data/chameleon_edids/daily/HWP_12447_HP_Z24i_HDMI.txt b/data/chameleon_edids/daily/HWP_12447_HP_Z24i_HDMI.txt
new file mode 100644
index 0000000..f17497b
--- /dev/null
+++ b/data/chameleon_edids/daily/HWP_12447_HP_Z24i_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0022f09f3001010101
+1a180103803420782e3c50a7544da226
+105054a1080081009500b3008180a940
+81c0d1c00101283c80a070b023403020
+360006442100001a000000fd00324c18
+5e11000a202020202020000000fc0048
+50205a3234690a2020202020000000ff
+00434e4b343236304c47320a202000d6 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/HWP_9846_HP_LP2465_HDMI.txt b/data/chameleon_edids/daily/HWP_9846_HP_LP2465_HDMI.txt
new file mode 100644
index 0000000..42796bd
--- /dev/null
+++ b/data/chameleon_edids/daily/HWP_9846_HP_LP2465_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0022f0762601010101
+1411010380342178eeef95a3544c9b26
+0f5054a56b808140818081997100a900
+a940b300d100283c80a070b023403020
+360007442100001a000000fd0030551e
+5e11000a202020202020000000fc0048
+50204c50323436350a202020000000ff
+00434e4b373230305739560a20200077 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/HWP_9976_HP_LP2475w_HDMI.txt b/data/chameleon_edids/daily/HWP_9976_HP_LP2475w_HDMI.txt
new file mode 100644
index 0000000..3bfec32
--- /dev/null
+++ b/data/chameleon_edids/daily/HWP_9976_HP_LP2475w_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0022f0f82601010101
+3213010380362378eece50a3544c9926
+0f5054a56b8081408180a900a940b300
+d10001010101283c80a070b023403020
+360022602100001a000000fc00485020
+4c5032343735770a2020000000fd0030
+551e5e11000a202020202020000000ff
+00434e433935303059354a0a20200141
+02031e714b010204850610111314151f
+230907078301000065030c001000011d
+8018711c1620582c250006442100009e
+011d80d0721c1620102c258006442100
+009e011d007251d01e206e2855000644
+2100001e011d00bc52d01e20b8285540
+06442100001e00000000000000000000
+000000000000000000000000000000ef \ No newline at end of file
diff --git a/data/chameleon_edids/daily/IFS_65330_InFocus_3118D_HDMI.txt b/data/chameleon_edids/daily/IFS_65330_InFocus_3118D_HDMI.txt
new file mode 100644
index 0000000..d4933c8
--- /dev/null
+++ b/data/chameleon_edids/daily/IFS_65330_InFocus_3118D_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0024d332ff92010000
+13160103800000780a3531a15a5a9725
+1451587fef8081c08100d1c08bc09500
+9040a940b300023a801871382d40582c
+450000000000001e283c80a070b02340
+3020360000000000001a000000fd0032
+551f5a11000a202020202020000000fc
+00496e466f6375732033313138440126
+020324c14f0102030607111204130514
+901f2021230907078301000067030c00
+10008021011d00bc52d01e20b8285540
+00000000001e011d8018711c1620582c
+250000000000009e011d80d0721c1620
+102c258000000000009e8c0ad08a20e0
+2d10103e96000000000000188c0ad090
+204031200c40550000000000001800c5 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/JVC_37393_ILAFPJ_--_XH2_HDMI.txt b/data/chameleon_edids/daily/JVC_37393_ILAFPJ_--_XH2_HDMI.txt
new file mode 100644
index 0000000..4b1d2cc
--- /dev/null
+++ b/data/chameleon_edids/daily/JVC_37393_ILAFPJ_--_XH2_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff002ac3119201010101
+0011010380dd7d782a6be9ab544caf24
+0b484a21080081800101010101010101
+010101010101011d8018711c1620582c
+2500a2e28400009e011d80d0721c1620
+102c2580a2e28400009e000000fc0049
+4c4146504a202d2d20584832000000fd
+00173d0f440f000a202020202020017d
+020319314c8594909f04130211061520
+0167030c001000382d023a801871382d
+40582c4500a2e28400001e023a80d072
+382d40102c4580a2e28400001e011d00
+7251d01e206e285500a2e28400001e01
+1d00bc52d01e20b8285540a2e2840000
+1e011d803e73382d407eb84590a2e284
+00001e0000000000000000000000002f \ No newline at end of file
diff --git a/data/chameleon_edids/daily/LEN_4420_LEN_LT2452pwC_DP.txt b/data/chameleon_edids/daily/LEN_4420_LEN_LT2452pwC_DP.txt
new file mode 100644
index 0000000..b5b8255
--- /dev/null
+++ b/data/chameleon_edids/daily/LEN_4420_LEN_LT2452pwC_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0030ae441143564254
+31160104a53420783af915a354509e27
+125054adcf0031468180818c9500950f
+b300a940d1c0283c80a070b023403020
+360006442100001a1a3680a070381f40
+3020350006442100001a000000fd0032
+4b1e4b11000a202020202020000000fc
+004c454e204c54323435327077430192
+020316f14901020304901112131f2309
+7f0783010000023a80d072382d40102c
+9680064421000018011d007251d01e20
+6e28550006442100001e8c0ad08a20e0
+2d10103e9600064421000018023a80d0
+72382d40102c258006442100001e0000
+00000000000000000000000000000000
+0000000000000000000000000000000a \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEI_41153_PanasonicTV0_HDMI.txt b/data/chameleon_edids/daily/MEI_41153_PanasonicTV0_HDMI.txt
new file mode 100644
index 0000000..c5de176
--- /dev/null
+++ b/data/chameleon_edids/daily/MEI_41153_PanasonicTV0_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034a9c1a001010101
+00150103800000780adaffa3584aa229
+17494b00000001010101010101010101
+010101010101023a801871382d40582c
+4500ba882100001e011d8018711c1620
+582c2500ba882100009e000000fc0050
+616e61736f6e69635456300a000000fd
+00173d0f440f000a20202020202001b4
+02031f71499005200403020706012309
+070168030c001000b82d0fe3051f0101
+1d007251d01e206e285500ba88210000
+1e8c0ad08a20e02d10103e9600ba8821
+0000188c0ad08a20e02d10103e96000b
+88210000188c0aa01451f01600267c43
+00ba88210000988c0aa01451f0160026
+7c43000b882100009800000000000088 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEI_41178_PanasonicTV0_HDMI.txt b/data/chameleon_edids/daily/MEI_41178_PanasonicTV0_HDMI.txt
new file mode 100644
index 0000000..bd420cc
--- /dev/null
+++ b/data/chameleon_edids/daily/MEI_41178_PanasonicTV0_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034a9daa001010101
+00160103800000780adaffa3584aa229
+17494b00000001010101010101010101
+010101010101023a801871382d40582c
+4500ba882100001e011d8018711c1620
+582c2500ba882100009e000000fc0050
+616e61736f6e69635456300a000000fd
+00173d0f440f000a202020202020019a
+02032a71499005200403020706012309
+070173030c001000b82d2fc007814901
+fe0608000000e3051f01011d007251d0
+1e206e285500ba882100001e8c0ad08a
+20e02d10103e9600ba88210000188c0a
+d08a20e02d10103e96000b8821000018
+8c0aa01451f01600267c4300ba882100
+00980000000000000000000000000086 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEI_41622_Panasonic-TV_HDMI.txt b/data/chameleon_edids/daily/MEI_41622_Panasonic-TV_HDMI.txt
new file mode 100644
index 0000000..8d294f1
--- /dev/null
+++ b/data/chameleon_edids/daily/MEI_41622_Panasonic-TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034a996a201010101
+00180103808048780adaffa3584aa229
+17494b21080031404540614081800101
+010101010101023a80d072382d40102c
+4580ba882100001e023a801871382d40
+582c4500ba882100001e000000fc0050
+616e61736f6e69632d54560a000000fd
+00173d0f440f000a202020202020015a
+020322f24d9f90140520212213041203
+16072309070168030c001000b8260fe2
+004b011d80d0721c1620102c2580ba88
+2100009e011d8018711c1620582c2500
+ba882100009e011d00bc52d01e20b828
+5540ba882100001e662156aa51001e30
+468f3300ba882100001e000000000000
+000000000000000000000000000000bb \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEI_49938_Panasonic-TV_HDMI.txt b/data/chameleon_edids/daily/MEI_49938_Panasonic-TV_HDMI.txt
new file mode 100644
index 0000000..6d6e853
--- /dev/null
+++ b/data/chameleon_edids/daily/MEI_49938_Panasonic-TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034a912c301010101
+00150103800000780adaffa3584aa229
+17494b00000001010101010101010101
+010101010101023a80d072382d40102c
+4580ba882100001e023a801871382d40
+582c4500ba882100001e000000fc0050
+616e61736f6e69632d54560a000000fd
+00173d0f440f000a2020202020200141
+02032272509f90140520130412031102
+16071506012309070168030c001000b8
+2600011d80d0721c1620102c2580ba88
+2100009e011d8018711c1620582c2500
+ba882100009e011d00bc52d01e20b828
+5540ba882100001e011d007251d01e20
+6e285500ba882100001e8c0ad0902040
+31200c405500ba882100001800000019 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_12813_UL7400_DP.txt b/data/chameleon_edids/daily/MEL_12813_UL7400_DP.txt
new file mode 100644
index 0000000..4fb4fee
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_12813_UL7400_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034ac0d32690a0000
+26160103810000780aab02a256579f23
+0e4e5ba1080071408100814081809040
+9500a940a9c0283c80a070b023403020
+360000000000001a9e20009051201f30
+4880360000000000001c000000fd0032
+780f6411000a202020202020000000fc
+00554c373430300a2020202020200171
+020310004b0203111205148413101f01
+8c0ad08a20e02d10103e960000000000
+00188c0ad090204031200c4055000000
+00000018011d007251d01e206e285500
+00000000001e011d8018711c1620582c
+250000000000009e023a801871382d40
+582c450000000000001e0e1f00805100
+1e304080370000000000001c00000027 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_12813_UL7400_DVI.txt b/data/chameleon_edids/daily/MEL_12813_UL7400_DVI.txt
new file mode 100644
index 0000000..048bb71
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_12813_UL7400_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034ac0d329a090000
+22160103810000780aab02a256579f23
+0e4e5ba1080071408100814081809040
+9500a940a9c0283c80a070b023403020
+360000000000001a9e20009051201f30
+4880360000000000001c000000fd0032
+780f6411000a202020202020000000fc
+00554c373430300a2020202020200145
+020310004b0203111205148413101f01
+8c0ad08a20e02d10103e960000000000
+00188c0ad090204031200c4055000000
+00000018011d007251d01e206e285500
+00000000001e011d8018711c1620582c
+250000000000009e023a801871382d40
+582c450000000000001e0e1f00805100
+1e304080370000000000001c00000027 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18424_MDT521S_DP.txt b/data/chameleon_edids/daily/MEL_18424_MDT521S_DP.txt
new file mode 100644
index 0000000..d7ccf7e
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18424_MDT521S_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034acf84701010101
+3214010380734078eab2eda454489824
+0f474aa109008180a94081c0d1009500
+010101010101023a801871382d40582c
+4500808842000018000000fd0031561f
+5c11000a202020202020000000fc004d
+4454353231530a2020202020000000ff
+00305a32303237323145570a20200086 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18424_MDT521S_DVI.txt b/data/chameleon_edids/daily/MEL_18424_MDT521S_DVI.txt
new file mode 100644
index 0000000..85c6175
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18424_MDT521S_DVI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034acf84701010101
+1415010380734078eab2eda454489824
+0f474aa109008180a94081c0d1009500
+010101010101023a801871382d40582c
+4500808842000018000000fd0031561f
+5c11000a202020202020000000fc004d
+4454353231530a2020202020000000ff
+00313532303339313045570a202000c6 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18424_MDT521S_HDMI.txt b/data/chameleon_edids/daily/MEL_18424_MDT521S_HDMI.txt
new file mode 100644
index 0000000..58202d0
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18424_MDT521S_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034acf84701010101
+0e15010380734078eab2eda454489824
+0f474aa109008180a94081c0d1009500
+010101010101023a801871382d40582c
+4500808842000018000000fd0031561f
+5c11000a202020202020000000fc004d
+4454353231530a2020202020000000ff
+00313332303333353745570a202000c9 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18425_MDT521S_DP.txt b/data/chameleon_edids/daily/MEL_18425_MDT521S_DP.txt
new file mode 100644
index 0000000..fbb15c4
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18425_MDT521S_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034acf947b3100000
+1815010380734078eab2eda454489824
+0f474a20000001010101010101010101
+010101010101011d8018711c1620582c
+250080884200009e8c0ad08a20e02d10
+103e9600808842000018000000fd0031
+561f5c11000a202020202020000000fc
+004d4454353231530a20202020200124
+02031c71488503040207010920230957
+078301000066030c002000008c0ad08a
+20e02d10103e960080884200001e8c0a
+a01451f01600267c4300808842000018
+011d00bc52d01e20b828554080884200
+00980000000000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000d2 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18425_MDT521S_DVI.txt b/data/chameleon_edids/daily/MEL_18425_MDT521S_DVI.txt
new file mode 100644
index 0000000..ef50b66
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18425_MDT521S_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034acf9475c0c0000
+0a15010380734078eab2eda454489824
+0f474a20000001010101010101010101
+010101010101011d8018711c1620582c
+250080884200009e8c0ad08a20e02d10
+103e9600808842000018000000fd0031
+561f5c11000a202020202020000000fc
+004d4454353231530a2020202020018d
+02031c71488503040207010920230957
+078301000066030c002000008c0ad08a
+20e02d10103e960080884200001e8c0a
+a01451f01600267c4300808842000018
+011d00bc52d01e20b828554080884200
+00980000000000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000d2 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18426_MDT521S_HDMI.txt b/data/chameleon_edids/daily/MEL_18426_MDT521S_HDMI.txt
new file mode 100644
index 0000000..94ba5a1
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18426_MDT521S_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034acfa4701010101
+0e15010380734078eab2eda454489824
+0f474aa109008180a94081c0d1009500
+010101010101023a801871382d40582c
+4500808842000018000000fd0031561f
+5c11000a202020202020000000fc004d
+4454353231530a2020202020000000ff
+00313332303335383045570a202001c8
+02031c71488503040207060110230957
+078301000066030c001000008c0ad08a
+20e02d10103e960080884200001e8c0a
+a01451f01600267c4300808842000018
+011d00bc52d01e20b828554080884200
+00980000000000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000f5 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18427_MDT521S_HDMI.txt b/data/chameleon_edids/daily/MEL_18427_MDT521S_HDMI.txt
new file mode 100644
index 0000000..c0418b6
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18427_MDT521S_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034acfb47190d0000
+0e15010380734078eab2eda454489824
+0f474a20000001010101010101010101
+010101010101011d8018711c1620582c
+250080884200009e8c0ad08a20e02d10
+103e9600808842000018000000fd0031
+561f5c11000a202020202020000000fc
+004d4454353231530a202020202001c9
+02031e714a8503040207010906102023
+0957078301000066030c001000008c0a
+d08a20e02d10103e960080884200001e
+8c0aa01451f01600267c430080884200
+0018011d00bc52d01e20b82855408088
+42000098000000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000c8 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18431_MDT421S_DP.txt b/data/chameleon_edids/daily/MEL_18431_MDT421S_DP.txt
new file mode 100644
index 0000000..368d1e3
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18431_MDT421S_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034acff4717090000
+1a150103805d3478eab2eba454489824
+0f474aa109008180a94081c0d1000101
+010101010101023a801871382d40582c
+4500a20b32000018283c80a070b02340
+30203600a20b3200001a000000fd0031
+561f5c11000a202020202020000000fc
+004d4454343231530a202020202000b4 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18431_MDT421S_DVI.txt b/data/chameleon_edids/daily/MEL_18431_MDT421S_DVI.txt
new file mode 100644
index 0000000..06fbcca
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18431_MDT421S_DVI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034acff470a070000
+04150103805d3478eab2eba454489824
+0f474aa109008180a94081c0d1000101
+010101010101023a801871382d40582c
+4500a20b32000018283c80a070b02340
+30203600a20b3200001a000000fd0031
+561f5c11000a202020202020000000fc
+004d4454343231530a202020202000d9 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18431_MDT421S_HDMI.txt b/data/chameleon_edids/daily/MEL_18431_MDT421S_HDMI.txt
new file mode 100644
index 0000000..198a970
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18431_MDT421S_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034acff4742090000
+1a150103805d3478eab2eba454489824
+0f474aa109008180a94081c0d1000101
+010101010101023a801871382d40582c
+4500a20b32000018283c80a070b02340
+30203600a20b3200001a000000fd0031
+561f5c11000a202020202020000000fc
+004d4454343231530a20202020200089 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18432_MDT421S_DVI.txt b/data/chameleon_edids/daily/MEL_18432_MDT421S_DVI.txt
new file mode 100644
index 0000000..5196950
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18432_MDT421S_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034ac004883070000
+04150103805d3478eab2eba454489824
+0f474a20000001010101010101010101
+010101010101011d8018711c1620582c
+2500a20b3200009e8c0ad08a20e02d10
+103e9600a20b32000018000000fd0031
+561f5c11000a202020202020000000fc
+004d4454343231530a20202020200164
+02031c71488503040207010920230957
+078301000066030c002000008c0ad08a
+20e02d10103e9600a20b3200001e8c0a
+a01451f01600267c4300a20b32000018
+011d00bc52d01e20b8285540a20b3200
+00980000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000013 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18433_MDT421S_HDMI.txt b/data/chameleon_edids/daily/MEL_18433_MDT421S_HDMI.txt
new file mode 100644
index 0000000..ccb38a3
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18433_MDT421S_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034ac014817090000
+1a150103805d3478eab2eba454489824
+0f474aa109008180a94081c0d1000101
+010101010101023a801871382d40582c
+4500a20b32000018283c80a070b02340
+30203600a20b3200001a000000fd0031
+561f5c11000a202020202020000000fc
+004d4454343231530a202020202001b0
+02031cf1488503040207060110230957
+078301000066030c001000008c0ad08a
+20e02d10103e9600a20b3200001e8c0a
+a01451f01600267c4300a20b32000018
+011d00bc52d01e20b8285540a20b3200
+00980000000000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000b6 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18434_MDT421S_HDMI.txt b/data/chameleon_edids/daily/MEL_18434_MDT421S_HDMI.txt
new file mode 100644
index 0000000..cdfdb83
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18434_MDT421S_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034ac024828070000
+04150103805d3478eab2eba454489824
+0f474a20000001010101010101010101
+010101010101011d8018711c1620582c
+2500a20b3200009e8c0ad08a20e02d10
+103e9600a20b32000018000000fd0031
+561f5c11000a202020202020000000fc
+004d4454343231530a202020202001bd
+02031e714a8503040207010906102023
+0957078301000066030c001000008c0a
+d08a20e02d10103e9600a20b3200001e
+8c0aa01451f01600267c4300a20b3200
+0018011d00bc52d01e20b8285540a20b
+32000098000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000009 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18435_MDT421S_DP.txt b/data/chameleon_edids/daily/MEL_18435_MDT421S_DP.txt
new file mode 100644
index 0000000..097ac0e
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18435_MDT421S_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034ac034801010101
+01160104b55d3478eab2eba454489824
+0f474aa109008180a94081c0d1008bc0
+010101010101023a801871382d40582c
+4500a20b32000018000000fd0031561f
+5c11000a202020202020000000fc004d
+4454343231530a2020202020000000ff
+00323132303430363241570a20200177
+020314a166030c001000004885030402
+070601108c0ad08a20e02d10103e9600
+a20b3200001e8c0aa01451f01600267c
+4300a20b32000018011d00bc52d01e20
+b8285540a20b32000098000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+0000000000000000000000000000001c \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18473_LDT422V_DVI.txt b/data/chameleon_edids/daily/MEL_18473_LDT422V_DVI.txt
new file mode 100644
index 0000000..74a57a2
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18473_LDT422V_DVI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac2948c8140000
+30160103805d3478eab2eba454489824
+0f474aa109008180a94081c0d1000101
+010101010101023a801871382d40582c
+4500a20b32000018283c80a070b02340
+30203600a20b3200001a000000fd0031
+561f5c10000a202020202020000000fc
+004c4454343232560a202020202000b4 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18477_MDT651S_DP.txt b/data/chameleon_edids/daily/MEL_18477_MDT651S_DP.txt
new file mode 100644
index 0000000..0846f4e
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18477_MDT651S_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac2d4801010101
+24140103808e5078eae69da3544a9926
+0f474aa109008180a94081c0d1000101
+010101010101023a801871382d40582c
+4500942353000018283c80a070b02340
+3020360094235300001a000000fd0031
+561f5c10000a202020202020000000fc
+004d4454363531530a20202020200007 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18477_MDT651S_DVI.txt b/data/chameleon_edids/daily/MEL_18477_MDT651S_DVI.txt
new file mode 100644
index 0000000..0846f4e
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18477_MDT651S_DVI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac2d4801010101
+24140103808e5078eae69da3544a9926
+0f474aa109008180a94081c0d1000101
+010101010101023a801871382d40582c
+4500942353000018283c80a070b02340
+3020360094235300001a000000fd0031
+561f5c10000a202020202020000000fc
+004d4454363531530a20202020200007 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18497_MDT652S_DP.txt b/data/chameleon_edids/daily/MEL_18497_MDT652S_DP.txt
new file mode 100644
index 0000000..e4f2fbd
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18497_MDT652S_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac414800000000
+2e150103808f5078eae69da3544a9926
+0f474aa109008180a94081c001018100
+950001010101023a801871382d40582c
+4500942353000018283c80a070b02340
+3020360094235300001a000000fd0031
+561f5c11000a202020202020000000fc
+004d4454363532530a202020202000a6 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18497_MDT652S_DVI.txt b/data/chameleon_edids/daily/MEL_18497_MDT652S_DVI.txt
new file mode 100644
index 0000000..bdba87b
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18497_MDT652S_DVI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac414800000000
+29150103808f5078eae69da3544a9926
+0f474aa109008180a94081c001018100
+950001010101023a801871382d40582c
+4500942353000018283c80a070b02340
+3020360094235300001a000000fd0031
+561f5c11000a202020202020000000fc
+004d4454363532530a202020202000ab \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18497_MDT652S_HDMI.txt b/data/chameleon_edids/daily/MEL_18497_MDT652S_HDMI.txt
new file mode 100644
index 0000000..bdba87b
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18497_MDT652S_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac414800000000
+29150103808f5078eae69da3544a9926
+0f474aa109008180a94081c001018100
+950001010101023a801871382d40582c
+4500942353000018283c80a070b02340
+3020360094235300001a000000fd0031
+561f5c11000a202020202020000000fc
+004d4454363532530a202020202000ab \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18501_LDT551V_DP.txt b/data/chameleon_edids/daily/MEL_18501_LDT551V_DP.txt
new file mode 100644
index 0000000..15ccf5f
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18501_LDT551V_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac4548af020000
+2215010380794478eae69da3544a9926
+0f474aa109004540614081c08bc0d1c0
+810095000101023a801871382d40582c
+4500baac4200001e662150b051001b30
+40703600baac4200001e000000fd0031
+561f5c11000a202020202020000000fc
+004c4454353531560a20202020200049 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18501_LDT551V_DVI.txt b/data/chameleon_edids/daily/MEL_18501_LDT551V_DVI.txt
new file mode 100644
index 0000000..8cbb9a3
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18501_LDT551V_DVI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac45484a020000
+2015010380794478eae69da3544a9926
+0f474aa109004540614081c08bc0d1c0
+810095000101023a801871382d40582c
+4500baac4200001e662150b051001b30
+40703600baac4200001e000000fd0031
+561f5c11000a202020202020000000fc
+004c4454353531560a202020202000b0 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18545_MDT551S_HDMI.txt b/data/chameleon_edids/daily/MEL_18545_MDT551S_HDMI.txt
new file mode 100644
index 0000000..56963f7
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18545_MDT551S_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034ac7148af000000
+2b15010380794478eaf610a3554a9b25
+10484e2000004540614081c08bc0d1c0
+810095000101023a801871382d40582c
+4500baac4200001e662150b051001b30
+40703600baac4200001e000000fd0031
+561f5c11000a202020202020000000fc
+004d4454353531530a20202020200116
+020322f14e90201f0504020701030911
+121314230957078301000066030c0010
+0000011d007251d01e206e285500baac
+4200001e8c0ad08a20e02d10103e9600
+baac42000018023a80d072382d40942c
+4500baac4200001efa1c803e73382d40
+7e2c4580baac4200001a011d8018711c
+1620582c2500baac4200009e0000006b \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18546_MDT551S_DP.txt b/data/chameleon_edids/daily/MEL_18546_MDT551S_DP.txt
new file mode 100644
index 0000000..bf17d17
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18546_MDT551S_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac7248000a0000
+3415010380794478eaf610a3554a9b25
+10484ea109004540614081c08bc0d1c0
+810095000101023a801871382d40582c
+4500baac4200001e662150b051001b30
+40703600baac4200001e000000fd0031
+561f5c11000a202020202020000000fc
+004d4454353531530a20202020200028 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18546_MDT551S_DVI.txt b/data/chameleon_edids/daily/MEL_18546_MDT551S_DVI.txt
new file mode 100644
index 0000000..b645d21
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18546_MDT551S_DVI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac7248ce010000
+2c15010380794478eaf610a3554a9b25
+10484ea109004540614081c08bc0d1c0
+810095000101023a801871382d40582c
+4500baac4200001e662150b051001b30
+40703600baac4200001e000000fd0031
+561f5c11000a202020202020000000fc
+004d4454353531530a2020202020006b \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18546_MDT551S_HDMI.txt b/data/chameleon_edids/daily/MEL_18546_MDT551S_HDMI.txt
new file mode 100644
index 0000000..0c238e1
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18546_MDT551S_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac724865010000
+2c15010380794478eaf610a3554a9b25
+10484ea109004540614081c08bc0d1c0
+810095000101023a801871382d40582c
+4500baac4200001e662150b051001b30
+40703600baac4200001e000000fd0031
+561f5c11000a202020202020000000fc
+004d4454353531530a202020202000d4 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18547_MDT551S_DP.txt b/data/chameleon_edids/daily/MEL_18547_MDT551S_DP.txt
new file mode 100644
index 0000000..11bb4a7
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18547_MDT551S_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac73481e000000
+2b15010380794478eaf610a3554a9b25
+10484e2000004540614081c08bc0d1c0
+810095000101023a801871382d40582c
+4500baac4200001e662150b051001b30
+40703600baac4200001e000000fd0031
+561f5c11000a202020202020000000fc
+004d4454353531530a202020202000a6 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18547_MDT551S_DVI.txt b/data/chameleon_edids/daily/MEL_18547_MDT551S_DVI.txt
new file mode 100644
index 0000000..d3191eb
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18547_MDT551S_DVI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac7348b8010000
+0f16010380794478eaf610a3554a9b25
+10484e2000004540614081c08bc0d1c0
+810095000101023a801871382d40582c
+4500baac4200001e662150b051001b30
+40703600baac4200001e000000fd0031
+561f5c11000a202020202020000000fc
+004d4454353531530a20202020200026 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18589_A2129_HDMI.txt b/data/chameleon_edids/daily/MEL_18589_A2129_HDMI.txt
new file mode 100644
index 0000000..c7f54cb
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18589_A2129_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034ac9d4800000000
+2d16010380794478eae3bda354529e26
+0c474a2000004540614081c08bc0d1c0
+81009500a9c0023a801871382d40582c
+4500baa84200001e662150b051001b30
+40703600baa84200001e000000fd0031
+561f5c11000a202020202020000000fc
+0041323132390a20202020202020011f
+020322f14e90201f0504020701030911
+121314230957078301000066030c0010
+0000011d007251d01e206e285500baa8
+4200001e8c0ad08a20e02d10103e9600
+baa842000018023a80d072382d40942c
+4500baa84200001efa1c803e73382d40
+7e2c4580baa84200001a011d8018711c
+1620582c2500baa84200009e0000007f \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18590_A2129_DP.txt b/data/chameleon_edids/daily/MEL_18590_A2129_DP.txt
new file mode 100644
index 0000000..221e5df
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18590_A2129_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac9e4800000000
+0117010380794478eae3bda354529e26
+0c474aa109004540614081c08bc0d1c0
+81009500a9c0023a801871382d40582c
+4500baa84200001e662150b051001b30
+40703600baa84200001e000000fd0031
+561f5c11000a202020202020000000fc
+0041323132390a2020202020202000c0 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18590_A2129_DVI.txt b/data/chameleon_edids/daily/MEL_18590_A2129_DVI.txt
new file mode 100644
index 0000000..be8ccba
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18590_A2129_DVI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac9e489f010000
+2d16010380794478eae3bda354529e26
+0c474aa109004540614081c08bc0d1c0
+81009500a9c0023a801871382d40582c
+4500baa84200001e662150b051001b30
+40703600baa84200001e000000fd0031
+561f5c11000a202020202020000000fc
+0041323132390a2020202020202000f5 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18590_A2129_HDMI.txt b/data/chameleon_edids/daily/MEL_18590_A2129_HDMI.txt
new file mode 100644
index 0000000..e43b8c1
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18590_A2129_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034ac9e4850010000
+2d16010380794478eae3bda354529e26
+0c474aa109004540614081c08bc0d1c0
+81009500a9c0023a801871382d40582c
+4500baa84200001e662150b051001b30
+40703600baa84200001e000000fd0031
+561f5c11000a202020202020000000fc
+0041323132390a202020202020200044 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18596_A2129_HDMI.txt b/data/chameleon_edids/daily/MEL_18596_A2129_HDMI.txt
new file mode 100644
index 0000000..c220b78
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18596_A2129_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0034aca44800000000
+0917010380794478eae3bda354529e26
+0c474a2000004540614081c08bc0d1c0
+81009500a9c0023a801871382d40582c
+4500baa84200001e662150b051001b30
+40703600baa84200001e000000fd0031
+561f5c11000a202020202020000000fc
+0041323132390a20202020202020013b
+020322f14e90201f0504020701030911
+121314230957078301000066030c0020
+0000011d007251d01e206e285500baa8
+4200001e8c0ad08a20e02d10103e9600
+baa842000018023a80d072382d40942c
+4500baa84200001efa1c803e73382d40
+7e2c4580baa84200001a011d8018711c
+1620582c2500baa84200009e0000006f \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18599_A3112_DP.txt b/data/chameleon_edids/daily/MEL_18599_A3112_DP.txt
new file mode 100644
index 0000000..39c9811
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18599_A3112_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034aca74817040000
+1b170103809a5778eafb34a55851a428
+0f5155a109004540614081c08bc0d1c0
+81009500a9c0023a801871382d40582c
+450003626300001e662150b051001b30
+4070360003626300001e000000fd0031
+561f5c11000a202020202020000000fc
+0041333131320a202020202020200059 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18599_A3112_DVI.txt b/data/chameleon_edids/daily/MEL_18599_A3112_DVI.txt
new file mode 100644
index 0000000..f558a82
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18599_A3112_DVI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034aca74818040000
+1b170103809a5778eafb34a55851a428
+0f5155a109004540614081c08bc0d1c0
+81009500a9c0023a801871382d40582c
+450003626300001e662150b051001b30
+4070360003626300001e000000fd0031
+561f5c11000a202020202020000000fc
+0041333131320a202020202020200058 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18600_A3112_DP.txt b/data/chameleon_edids/daily/MEL_18600_A3112_DP.txt
new file mode 100644
index 0000000..ef115fa
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18600_A3112_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034aca84829010000
+02170103809a5778eafb34a55851a428
+0f51552000004540614081c08bc0d1c0
+81009500a9c0023a801871382d40582c
+450003626300001e662150b051001b30
+4070360003626300001e000000fd0031
+561f5c11000a202020202020000000fc
+0041333131320a2020202020202000ec \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MEL_18600_A3112_DVI.txt b/data/chameleon_edids/daily/MEL_18600_A3112_DVI.txt
new file mode 100644
index 0000000..54e7a56
--- /dev/null
+++ b/data/chameleon_edids/daily/MEL_18600_A3112_DVI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff0034aca8482a010000
+02170103809a5778eafb34a55851a428
+0f51552000004540614081c08bc0d1c0
+81009500a9c0023a801871382d40582c
+450003626300001e662150b051001b30
+4070360003626300001e000000fd0031
+561f5c11000a202020202020000000fc
+0041333131320a2020202020202000eb \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MST_48_TV_MONITOR_HDMI.txt b/data/chameleon_edids/daily/MST_48_TV_MONITOR_HDMI.txt
new file mode 100644
index 0000000..f890b4a
--- /dev/null
+++ b/data/chameleon_edids/daily/MST_48_TV_MONITOR_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff003674300001000000
+0a160103807341780acf74a3574cb023
+09484c21080081804540614095000101
+010101010101023a801871382d40582c
+4500c48e2100001e662150b051001b30
+40703600c48e2100001e000000fc0054
+565f4d4f4e49544f520a2020000000fd
+00324b1e5017000a202020202020014c
+02032cf24d010304050790121314169f
+202226090707111750830100006e030c
+002000b82d20c004014100008c0ad08a
+20e02d10103e9600c48e210000188c0a
+d090204031200c405500c48e21000018
+011d00bc52d01e20b8285540c48e2100
+001e011d80d0721c1620102c2580c48e
+2100009e000000000000000000000008 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/MTK_1_MTK_LCDTV_HDMI.txt b/data/chameleon_edids/daily/MTK_1_MTK_LCDTV_HDMI.txt
new file mode 100644
index 0000000..bb8369c
--- /dev/null
+++ b/data/chameleon_edids/daily/MTK_1_MTK_LCDTV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00368b010000000000
+010f0103803c22780a0dc9a057479827
+12484c20010001010101010101010101
+010101010101011d007251d01e206e28
+5500c48e2100001e011d8018711c1620
+582c2500c48e2100009e000000fc004d
+544b204c434454560a202020000000fd
+00314c0f500e000a20202020202001e7
+02031c74498405131401021106152309
+57038301000065030c001000011d00bc
+52d01e20b8285540c48e2100001e011d
+80d0721c1620102c2580c48e2100009e
+8c0ad08a20e02d10103e9600138e2100
+00188c0ad090204031200c405500138e
+21000018000000000000000000000000
+00000000000000000000000000000044 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26504_P461_DVI.txt b/data/chameleon_edids/daily/NEC_26504_P461_DVI.txt
new file mode 100644
index 0000000..5ef63ff
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26504_P461_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3886701010101
+1115010380663978eaf80da355489b25
+0f474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+4500fa3d3200001e000000fd0030551c
+5c11000a202020202020000000fc0050
+3436310a2020202020202020000000ff
+0031343130373936374e410a2020013d
+02010400023a801871382d40582c4500
+fa3d3200001e023a80d072382d40102c
+4580fa3d3200001e011d8018711c1620
+582c2500fa3d3200009e011d80d0721c
+1620102c2580fa3d3200009e011d0072
+51d01e206e285500fa3d3200001e011d
+00bc52d01e20b8285540fa3d3200001e
+000000000000000000000000000000ba \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26505_P461_HDMI.txt b/data/chameleon_edids/daily/NEC_26505_P461_HDMI.txt
new file mode 100644
index 0000000..2d4a90e
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26505_P461_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3896700000000
+111501038066397832fa0da355489b25
+0f474a20000001010101010101010101
+010101010101011d8018711c1620582c
+2500fa3d3200009e011d80d0721c1620
+102c2580fa3d3200009e000000fd0031
+3d1a440f000a202020202020000000fc
+00503436310a2020202020202020019a
+02031ef14b851404130312101f202122
+230907078301000065030c001000011d
+007251d01e206e285500fa3d3200001e
+011d00bc52d01e20b8285540fa3d3200
+001e8c0ad08a20e02d10103e9600fa3d
+320000188c0ad090204031200c405500
+fa3d3200001800000000000000000000
+00000000000000000000000000000016 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26511_P521_DVI.txt b/data/chameleon_edids/daily/NEC_26511_P521_DVI.txt
new file mode 100644
index 0000000..b40a949
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26511_P521_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a38f6701010101
+1c14010380734178eab2eda454489824
+0f474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+450080884200001e000000fd0030551c
+5c11000a202020202020000000fc0050
+3532310a2020202020202020000000ff
+0030373030323330324e410a202001b8
+02010400023a801871382d40582c4500
+80884200001e023a80d072382d40102c
+458080884200001e011d8018711c1620
+582c250080884200009e011d80d0721c
+1620102c258080884200009e011d0072
+51d01e206e28550080884200001e011d
+00bc52d01e20b828554080884200001e
+00000000000000000000000000000074 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26515_P551_DP.txt b/data/chameleon_edids/daily/NEC_26515_P551_DP.txt
new file mode 100644
index 0000000..cdb1ab0
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26515_P551_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3936701010101
+0315010380794478ea69ada454499b25
+0f474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+4500b9a84200001e000000fd0030551c
+5c11000a202020202020000000fc0050
+3535310a2020202020202020000000ff
+0031313030323238354e410a202001e6
+02010400023a801871382d40582c4500
+b9a84200001e023a80d072382d40102c
+4580b9a84200001e011d8018711c1620
+582c2500b9a84200009e011d80d0721c
+1620102c2580b9a84200009e011d0072
+51d01e206e285500b9a84200001e011d
+00bc52d01e20b8285540b9a84200001e
+0000000000000000000000000000005e \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26515_P551_DVI.txt b/data/chameleon_edids/daily/NEC_26515_P551_DVI.txt
new file mode 100644
index 0000000..bcaa42c
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26515_P551_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3936701010101
+2f14010380794478ea69ada454499b25
+0f474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+4500b9a84200001e000000fd0030551c
+5c11000a202020202020000000fc0050
+3535310a2020202020202020000000ff
+0030593030313431334e410a2020019c
+02010400023a801871382d40582c4500
+b9a84200001e023a80d072382d40102c
+4580b9a84200001e011d8018711c1620
+582c2500b9a84200009e011d80d0721c
+1620102c2580b9a84200009e011d0072
+51d01e206e285500b9a84200001e011d
+00bc52d01e20b8285540b9a84200001e
+0000000000000000000000000000005e \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26519_P701_DP.txt b/data/chameleon_edids/daily/NEC_26519_P701_DP.txt
new file mode 100644
index 0000000..71653a1
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26519_P701_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3976701010101
+0c150103809b5778ea8d1da756459c25
+0f474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+45000d686300001e000000fd0030551c
+5c11000a202020202020000000fc0050
+3730310a2020202020202020000000ff
+003134303032353038524120202001c1
+02010400023a801871382d40582c4500
+0d686300001e023a80d072382d40102c
+45800d686300001e011d8018711c1620
+582c25000d686300009e011d80d0721c
+1620102c25800d686300009e011d0072
+51d01e206e2855000d686300001e011d
+00bc52d01e20b82855400d686300001e
+00000000000000000000000000000020 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26519_P701_DVI.txt b/data/chameleon_edids/daily/NEC_26519_P701_DVI.txt
new file mode 100644
index 0000000..291125f
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26519_P701_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3976701010101
+0c150103809b5778ea8d1da756459c25
+0f474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+45000d686300001e000000fd0030551c
+5c11000a202020202020000000fc0050
+3730310a2020202020202020000000ff
+003134303032343937524120202001ba
+02010400023a801871382d40582c4500
+0d686300001e023a80d072382d40102c
+45800d686300001e011d8018711c1620
+582c25000d686300009e011d80d0721c
+1620102c25800d686300009e011d0072
+51d01e206e2855000d686300001e011d
+00bc52d01e20b82855400d686300001e
+00000000000000000000000000000020 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26666_P402_HDMI.txt b/data/chameleon_edids/daily/NEC_26666_P402_HDMI.txt
new file mode 100644
index 0000000..9c3fd32
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26666_P402_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a32a6801010101
+2c17010380593278ea1aada455499b25
+0f474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+450075f23100001e000000fd0030551c
+5c11000a202020202020000000fc0050
+3430320a2020202020202020000000ff
+0033583231313132354e570a20200179
+020320f14d900504130312141f202122
+0716230907078301000065030c001000
+0e1f008051001e304080370075f23100
+001c662150b051001b304070360075f2
+3100001e662156aa51001e30468f3300
+75f23100001e011d8018711c1620582c
+250075f23100009e011d80d0721c1620
+102c258075f23100009e0000000000ac \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26669_P462_DVI.txt b/data/chameleon_edids/daily/NEC_26669_P462_DVI.txt
new file mode 100644
index 0000000..64ed644
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26669_P462_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a32d6801010101
+2215010380663978eaee9da3544c9926
+0f474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+4500fa3c3200001e000000fd0030551c
+5c11000a202020202020000000fc0050
+3436320a2020202020202020000000ff
+0031383030323335334e410a2020010b
+020104000e1f008051001e3040803700
+fa3c3200001c662150b051001b304070
+3600fa3c3200001e662156aa51001e30
+468f3300fa3c3200001e023a80187138
+2d40582c4500fa3c3200001e023a80d0
+72382d40102c4580fa3c3200001e011d
+8018711c1620582c2500fa3c3200009e
+00000000000000000000000000000064 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26771_P702_DP.txt b/data/chameleon_edids/daily/NEC_26771_P702_DP.txt
new file mode 100644
index 0000000..e26d5fa
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26771_P702_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3936801010101
+15160103809b5778ea8d1da756459c25
+0f474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+45000d676300001e000000fd0030551c
+5c11000a202020202020000000fc0050
+3730320a2020202020202020000000ff
+003235303030343038525720202001a5
+020104000e1f008051001e3040803700
+0d676300001c662150b051001b304070
+36000d676300001e662156aa51001e30
+468f33000d676300001e023a80187138
+2d40582c45000d676300001e023a80d0
+72382d40102c45800d676300001e011d
+8018711c1620582c25000d676300009e
+000000000000000000000000000000ca \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26771_P702_DVI.txt b/data/chameleon_edids/daily/NEC_26771_P702_DVI.txt
new file mode 100644
index 0000000..0093bc8
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26771_P702_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3936801010101
+14160103809b5778ea8d1da756459c25
+0f474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+45000d676300001e000000fd0030551c
+5c11000a202020202020000000fc0050
+3730320a2020202020202020000000ff
+003235303030333538525720202001a2
+020104000e1f008051001e3040803700
+0d676300001c662150b051001b304070
+36000d676300001e662156aa51001e30
+468f33000d676300001e023a80187138
+2d40582c45000d676300001e023a80d0
+72382d40102c45800d676300001e011d
+8018711c1620582c25000d676300009e
+000000000000000000000000000000ca \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26795_V423_DVI.txt b/data/chameleon_edids/daily/NEC_26795_V423_DVI.txt
new file mode 100644
index 0000000..8c5133d
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26795_V423_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3ab6801010101
+1b170103805d3478eaef4ba5554d9c27
+0e474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+4500a20b3200001e000000fd0030551c
+5c11000a202020202020000000fc0056
+3432330a2020202020202020000000ff
+0033373030353133344e420a2020016e
+020104000e1f008051001e3040803700
+a20b3200001c662150b051001b304070
+3600a20b3200001e662156aa51001e30
+468f3300a20b3200001e023a80187138
+2d40582c4500a20b3200001e023a80d0
+72382d40102c4580a20b3200001e011d
+8018711c1620582c2500a20b3200009e
+0000000000000000000000000000009a \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26796_V423_HDMI.txt b/data/chameleon_edids/daily/NEC_26796_V423_HDMI.txt
new file mode 100644
index 0000000..a60b457
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26796_V423_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3ac6801010101
+0e180103805d3478eaef4ba5554d9c27
+0e474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+4500a20b3200001e000000fd0030551c
+5c11000a202020202020000000fc0056
+3432330a2020202020202020000000ff
+0034333031353033314e420a2020017f
+020320f14d900504130312141f202122
+0716230907078301000065030c001000
+0e1f008051001e3040803700a20b3200
+001c662150b051001b3040703600a20b
+3200001e662156aa51001e30468f3300
+a20b3200001e011d8018711c1620582c
+2500a20b3200009e011d80d0721c1620
+102c2580a20b3200009e000000000049 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26799_V463_DVI.txt b/data/chameleon_edids/daily/NEC_26799_V463_DVI.txt
new file mode 100644
index 0000000..a05dc9a
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26799_V463_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3af6801010101
+1318010380663978eae3bda354529e26
+0c474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+4500fa3c3200001e000000fd0030551c
+5c11000a202020202020000000fc0056
+3436330a2020202020202020000000ff
+0034353032333137354e410a2020016c
+020104000e1f008051001e3040803700
+fa3c3200001c662150b051001b304070
+3600fa3c3200001e662156aa51001e30
+468f3300fa3c3200001e023a80187138
+2d40582c4500fa3c3200001e023a80d0
+72382d40102c4580fa3c3200001e011d
+8018711c1620582c2500fa3c3200009e
+00000000000000000000000000000064 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26800_V463_HDMI.txt b/data/chameleon_edids/daily/NEC_26800_V463_HDMI.txt
new file mode 100644
index 0000000..45f95b6
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26800_V463_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3b06801010101
+0718010380663978eae3bda354529e26
+0c474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+4500fa3c3200001e000000fd0030551c
+5c11000a202020202020000000fc0056
+3436330a2020202020202020000000ff
+0034323030383538324e420a20200174
+020320f14d900504130312141f202122
+0716230907078301000065030c001000
+0e1f008051001e3040803700fa3c3200
+001c662150b051001b3040703600fa3c
+3200001e662156aa51001e30468f3300
+fa3c3200001e011d8018711c1620582c
+2500fa3c3200009e011d80d0721c1620
+102c2580fa3c3200009e00000000009c \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26803_V552_DP.txt b/data/chameleon_edids/daily/NEC_26803_V552_DP.txt
new file mode 100644
index 0000000..3bc2de2
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26803_V552_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3b36801010101
+2018010380794478eae3bda354529e26
+0c474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+4500b9a84200001e000000fd0030551c
+5c11000a202020202020000000fc0056
+3535320a2020202020202020000000ff
+0034383030383537304e410a202001fe
+020104000e1f008051001e3040803700
+b9a84200001c662150b051001b304070
+3600b9a84200001e662156aa51001e30
+468f3300b9a84200001e023a80187138
+2d40582c4500b9a84200001e023a80d0
+72382d40102c4580b9a84200001e011d
+8018711c1620582c2500b9a84200009e
+00000000000000000000000000000002 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26803_V552_DVI.txt b/data/chameleon_edids/daily/NEC_26803_V552_DVI.txt
new file mode 100644
index 0000000..f001142
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26803_V552_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3b36801010101
+2018010380794478eae3bda354529e26
+0c474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+4500b9a84200001e000000fd0030551c
+5c11000a202020202020000000fc0056
+3535320a2020202020202020000000ff
+0034383030383536364e410a202001f9
+020104000e1f008051001e3040803700
+b9a84200001c662150b051001b304070
+3600b9a84200001e662156aa51001e30
+468f3300b9a84200001e023a80187138
+2d40582c4500b9a84200001e023a80d0
+72382d40102c4580b9a84200001e011d
+8018711c1620582c2500b9a84200009e
+00000000000000000000000000000002 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26804_V552_HDMI.txt b/data/chameleon_edids/daily/NEC_26804_V552_HDMI.txt
new file mode 100644
index 0000000..439657e
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26804_V552_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3b46801010101
+0d17010380794478eae3bda354529e26
+0c474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+4500b9a84200001e000000fd0030551c
+5c11000a202020202020000000fc0056
+3535320a2020202020202020000000ff
+0033333030303737374e420a20200115
+020320f14d900504130312141f202122
+0716230907078301000065030c001000
+0e1f008051001e3040803700b9a84200
+001c662150b051001b3040703600b9a8
+4200001e662156aa51001e30468f3300
+b9a84200001e011d8018711c1620582c
+2500b9a84200009e011d80d0721c1620
+102c2580b9a84200009e000000000075 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26807_V652_DP.txt b/data/chameleon_edids/daily/NEC_26807_V652_DP.txt
new file mode 100644
index 0000000..efe0aef
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26807_V652_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3b76801010101
+0f180103808f5078ea639da154529e26
+0a474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+450094235300001e000000fd0030551c
+5c11000a202020202020000000fc0056
+3635320a2020202020202020000000ff
+0034343030333739354e410a20200125
+020104000e1f008051001e3040803700
+94235300001c662150b051001b304070
+360094235300001e662156aa51001e30
+468f330094235300001e023a80187138
+2d40582c450094235300001e023a80d0
+72382d40102c458094235300001e011d
+8018711c1620582c250094235300009e
+00000000000000000000000000000098 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26807_V652_DVI.txt b/data/chameleon_edids/daily/NEC_26807_V652_DVI.txt
new file mode 100644
index 0000000..fc4ee93
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26807_V652_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3b76801010101
+07180103808f5078ea639da154529e26
+0a474aa1090081c08100814081809040
+9500a940b300023a801871382d40582c
+450094235300001e000000fd0030551c
+5c11000a202020202020000000fc0056
+3635320a2020202020202020000000ff
+0034323030333638334e410a20200133
+020104000e1f008051001e3040803700
+94235300001c662150b051001b304070
+360094235300001e662156aa51001e30
+468f330094235300001e023a80187138
+2d40582c450094235300001e023a80d0
+72382d40102c458094235300001e011d
+8018711c1620582c250094235300009e
+00000000000000000000000000000098 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26811_V801_DP.txt b/data/chameleon_edids/daily/NEC_26811_V801_DP.txt
new file mode 100644
index 0000000..d728e3f
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26811_V801_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3bb6801010101
+3417010380b16478eace67a3594c9f26
+0e4849a1090081c08100814081809040
+9500a940b300023a801871382d40582c
+4500ebe46300001e000000fd0030551c
+5c11000a202020202020000000fc0056
+3830310a2020202020202020000000ff
+00335a3030303533334e570a2020013a
+020104000e1f008051001e3040803700
+ebe46300001c662150b051001b304070
+3600ebe46300001e662156aa51001e30
+468f3300ebe46300001e023a80187138
+2d40582c4500ebe46300001e023a80d0
+72382d40102c4580ebe46300001e011d
+8018711c1620582c2500ebe46300009e
+000000000000000000000000000000a8 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26811_V801_DVI.txt b/data/chameleon_edids/daily/NEC_26811_V801_DVI.txt
new file mode 100644
index 0000000..e2738e6
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26811_V801_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3bb6801010101
+2117010380b16478eace67a3594c9f26
+0e4849a1090081c08100814081809040
+9500a940b300023a801871382d40582c
+4500ebe46300001e000000fd0030551c
+5c11000a202020202020000000fc0056
+3830310a2020202020202020000000ff
+0033383030303130324e570a20200177
+020104000e1f008051001e3040803700
+ebe46300001c662150b051001b304070
+3600ebe46300001e662156aa51001e30
+468f3300ebe46300001e023a80187138
+2d40582c4500ebe46300001e023a80d0
+72382d40102c4580ebe46300001e011d
+8018711c1620582c2500ebe46300009e
+000000000000000000000000000000a8 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_26941_P703_DVI.txt b/data/chameleon_edids/daily/NEC_26941_P703_DVI.txt
new file mode 100644
index 0000000..7cd4cbc
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_26941_P703_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a33d6901010101
+1d180103809a5778eacdd9a35a4e9f26
+114a4da1090081c08100814081809040
+9500a940b300023a801871382d40582c
+450003626300001e000000fd0030551c
+5c11000a202020202020000000fc0050
+3730330a2020202020202020000000ff
+0034373030303733374e420a20200114
+020104000e1f008051001e3040803700
+03626300001c662150b051001b304070
+360003626300001e662156aa51001e30
+468f330003626300001e023a80187138
+2d40582c450003626300001e023a80d0
+72382d40102c458003626300001e011d
+8018711c1620582c250003626300009e
+00000000000000000000000000000024 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_31161_NP-PA500U_DVI.txt b/data/chameleon_edids/daily/NEC_31161_NP-PA500U_DVI.txt
new file mode 100644
index 0000000..b599b76
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_31161_NP-PA500U_DVI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3b97901010101
+11180103800000782ad466a359599c23
+0b505ea128809040a94081808bc0a9c0
+81009500b300283c80a070b023403020
+360000000000001a000000fd0030551f
+5c11000a202020202020000000fc004e
+502d5041353030550a202020000000ff
+005534343030303233370a20202001a1
+020330f156010203111204130514901f
+2221200e0f1d1e060715162309070783
+0100006c030c001000382dc01a002700
+0e1f008051001e304080370000000000
+001c662156aa51001e30468f33000000
+0000001e283c80a070b0234030203600
+00000000001a023a801871382d40582c
+450000000000001e00000000000000b7 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/NEC_31178_NP-P420X_HDMI.txt b/data/chameleon_edids/daily/NEC_31178_NP-P420X_HDMI.txt
new file mode 100644
index 0000000..c740c48
--- /dev/null
+++ b/data/chameleon_edids/daily/NEC_31178_NP-P420X_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0038a3ca7901010101
+1e160103800000782a2a02a9545d9d25
+0e525d2fcf00904081808bc0a9c0d1c0
+81009500b30064190040410026301888
+3600000000000018000000fd0030551f
+5c10000a202020202020000000fc004e
+502d50343230580a20202020000000ff
+004732373030303236390a20202001b5
+02031b7148031284051314101f230907
+078300000065030c0010008c0ad08a20
+e02d10103e96001009000000188c0ad0
+90204031200c40550010090000001801
+1d007251d01e206e2855001009000000
+1e011d8018711c1620582c2500100900
+00009e011d00bc52d01e20b828554010
+090000001e0000000000000000000067 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/PHL_0_PHILIPS_HDMI.txt b/data/chameleon_edids/daily/PHL_0_PHILIPS_HDMI.txt
new file mode 100644
index 0000000..28295c3
--- /dev/null
+++ b/data/chameleon_edids/daily/PHL_0_PHILIPS_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00410c000000000000
+00150103800000780a2fcda354459724
+11464721080001010101010101010101
+010101010101023a801871382d40582c
+450010090000001e8c0ad08a20e02d10
+103e9600100900000018000000fc0050
+48494c4950530a2020202020000000fd
+00173f0f450f000a2020202020200168
+020320704a1003202204020506070126
+0907071507508301000065030c001000
+011d803e73382d407e2c458010090000
+001e011d801871382d40582c45001009
+0000001e011d007251d01e206e285500
+10090000001e662150b051001b304070
+360010090000001ea91a00a050001630
+3020370005030000001a0000000000a9 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/PHL_0_Philips_HDMI.txt b/data/chameleon_edids/daily/PHL_0_Philips_HDMI.txt
new file mode 100644
index 0000000..8f2275f
--- /dev/null
+++ b/data/chameleon_edids/daily/PHL_0_Philips_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00410c000001010101
+01140103804627780a6e5ba4554a9b25
+0e474a2dce00d1c03140454061408180
+010101010101023a801871382d40582c
+4500bc862100001e662150b051001b30
+40703600bc862100001e000000fd0038
+4b0e4610000a202020202020000000fc
+005068696c6970730a202020202001ac
+02032771521413121116150504030207
+06011f90202122230907078301000067
+030c001000182d011d80d0721c162010
+2c2580bc862100009e011d8018711c16
+20582c2500bc862100009e011d00bc52
+d01e20b8285540bc862100001e011d00
+7251d01e206e285500bc862100001e00
+00000000000000000000000000000023 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_1629_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_1629_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..31b73a2
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_1629_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d5d0600000000
+2e130103801009780aee91a3544c9926
+0f5054bdef80714f8100814081809500
+950fb300a940023a801871382d40582c
+4500a05a0000001e662150b051001b30
+40703600a05a0000001e000000fd0018
+4b1a5117000a202020202020000000fc
+0053414d53554e470a20202020200135
+02031ef1469004050320222309070783
+010000e2000f67030c002000b82d011d
+007251d01e206e285500a05a0000001e
+011d8018711c1620582c2500a05a0000
+009e8c0ad08a20e02d10103e9600a05a
+00000018000000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000cf \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_1639_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_1639_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..3d7ed37
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_1639_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d670601000000
+2f130103801009780aee91a3544c9926
+0f5054bdef80714f8100814081809500
+950fb300a940023a801871382d40582c
+4500a05a0000001e662150b051001b30
+40703600a05a0000001e000000fd0018
+4b1a5117000a202020202020000000fc
+0053414d53554e470a20202020200129
+020322f1469004050320222309070783
+010000e2000fe305030167030c004000
+b82d011d007251d01e206e285500a05a
+0000001e011d8018711c1620582c2500
+a05a0000009e8c0ad08a20e02d10103e
+9600a05a000000180000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000bf \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_1882_SM460DX3_DVI.txt b/data/chameleon_edids/daily/SAM_1882_SM460DX3_DVI.txt
new file mode 100644
index 0000000..32bb0c0
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_1882_SM460DX3_DVI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff004c2d5a075a42535a
+2715010380663a782ae21da354499925
+0f474abfef8081808140714fb3008100
+950001010101023a801871382d40582c
+4500fa3c3200001e662156aa51001e30
+468f3300fa3c3200001e000000fd0038
+551e5110000a202020202020000000fc
+00534d3436304458330a202020200078 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_1984_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_1984_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..3648ada
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_1984_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2dc00700000000
+2e140103805932780aee91a3544c9926
+0f5054bdef80714f8100814081809500
+950fb300a940023a801871382d40582c
+4500a05a0000001e662150b051001b30
+40703600a05a0000001e000000fd0018
+4b1a5117000a202020202020000000fc
+0053414d53554e470a2020202020015e
+020323f14b901f041305140312202122
+2309070783010000e2000f67030c0040
+00b82d011d007251d01e206e285500a0
+5a0000001e011d00bc52d01e20b82855
+40a05a0000001e011d8018711c162058
+2c2500a05a0000009e011d80d0721c16
+20102c2580a05a0000009e0000000000
+000000000000000000000000000000dd \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_1986_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_1986_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..315e934
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_1986_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2dc20701000000
+2e140103807944780aee91a3544c9926
+0f5054bdef80714f8100814081809500
+950fb300a940023a801871382d40582c
+4500a05a0000001e662150b051001b30
+40703600a05a0000001e000000fd0018
+4b1a5117000a202020202020000000fc
+0053414d53554e470a20202020200129
+02032bf1469004050320222309070783
+010000e2000fe305030170030c001000
+b82d20d006014000372050011d007251
+d01e206e285500a05a0000001e011d80
+18711c1620582c2500a05a0000009e8c
+0ad08a20e02d10103e9600a05a000000
+18000000000000000000000000000000
+000000000000000000000000000000ff \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_1987_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_1987_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..c51f0b5
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_1987_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2dc30701000000
+2e140103801009780aee91a3544c9926
+0f5054bdef80714f8100814081809500
+950fb300a940023a801871382d40582c
+4500a05a0000001e662150b051001b30
+40703600a05a0000001e000000fd0018
+4b1a5117000a202020202020000000fc
+0053414d53554e470a202020202001cc
+020322f1469004050320222309070783
+010000e2000fe305030167030c001000
+b82d011d007251d01e206e285500a05a
+0000001e011d8018711c1620582c2500
+a05a0000009e8c0ad08a20e02d10103e
+9600a05a000000180000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000ef \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2047_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_2047_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..66daa1d
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2047_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2dff0701000000
+31140103808e50780aee91a3544c9926
+0f5054bdef80714f8100814081809500
+950fb300a940023a801871382d40582c
+4500a05a0000001e662150b051001b30
+40703600a05a0000001e000000fd0018
+4b1a5117000a202020202020000000fc
+0053414d53554e470a202020202001c8
+02032bf1469004050320222309070783
+010000e2000fe305030170030c002000
+b82d20d006014000372050011d007251
+d01e206e285500a05a0000001e011d80
+18711c1620582c2500a05a0000009e8c
+0ad08a20e02d10103e9600a05a000000
+18000000000000000000000000000000
+000000000000000000000000000000ef \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2114_SyncMaster_DP.txt b/data/chameleon_edids/daily/SAM_2114_SyncMaster_DP.txt
new file mode 100644
index 0000000..fba8f79
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2114_SyncMaster_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d420800000000
+08150104a5593278223cf1a4554c9b25
+0e5054bfef8081808140714f8100b300
+9500950fa940023a801871382d40582c
+450075f23100001e662150b051001b30
+4070360075f23100001e000000fd0038
+4b1e5111000a202020202020000000fc
+0053796e634d61737465720a2020012b
+020312c145901f041303230907078301
+0000023a80d072382d40102c458075f2
+3100001e011d007251d01e206e285500
+75f23100001e011d00bc52d01e20b828
+554075f23100001e0000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+0000000000000000000000000000000d \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2185_SMS27A850T_HDMI.txt b/data/chameleon_edids/daily/SAM_2185_SMS27A850T_HDMI.txt
new file mode 100644
index 0000000..0d9abba
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2185_SMS27A850T_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d89084b43585a
+12180103803c22782a73a1a4544d9926
+0f5054bfef80a9408180814081009500
+b300714f950f023a801871382d40582c
+450055502100001e011d007251d01e20
+6e28550055502100001e000000fd0038
+4b1e5111000a202020202020000000fc
+00534d53323741383530540a20200149
+02031af14690041f1303122309070783
+01000066030c00100080011d00bc52d0
+1e20b828554055502100001e8c0ad090
+204031200c4055005550210000188c0a
+d08a20e02d10103e9600555021000018
+023a80d072382d40102c458055502100
+001e0000000000000000000000000000
+000000000000000000000000000000dc \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2262_S23B350_HDMI.txt b/data/chameleon_edids/daily/SAM_2262_S23B350_HDMI.txt
new file mode 100644
index 0000000..f32128c
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2262_S23B350_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2dd6085451345a
+0516010380331d782a01f1a257529f27
+0a5054bfef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+4500fe1f1100001e011d007251d01e20
+6e285500fe1f1100001e000000fd0032
+4b1e5111000a202020202020000000fc
+00533233423335300a202020202001b4
+020311b14690041f13120365030c0010
+00011d00bc52d01e20b8285540fe1f11
+00001e8c0ad090204031200c405500fe
+1f110000188c0ad08a20e02d10103e96
+00fe1f11000018000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000b4 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2300_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_2300_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..1ebf566
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2300_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2dfc0800000000
+29150103801009780aee91a3544c9926
+0f5054bdee0081c00101010101010101
+010101010101662156aa51001e30468f
+3300a05a0000001e011d007251d01e20
+6e285500a05a0000001e000000fd0018
+4b0f4417000a202020202020000000fc
+0053414d53554e470a2020202020016d
+02031ff1478405031020220723090707
+83010000e2000f67030c001000b82d01
+1d8018711c1620582c2500a05a000000
+9e8c0ad08a20e02d10103e9600a05a00
+000018023a801871382d40582c4500a0
+5a0000001e0000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000fd \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2302_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_2302_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..44e2583
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2302_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2dfe0800000000
+29150103801009780aee91a3544c9926
+0f5054bdef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+4500a05a0000001e662156aa51001e30
+468f3300a05a0000001e000000fd0018
+4b0f5117000a202020202020000000fc
+0053414d53554e470a2020202020011d
+02031ff1479004050320220723090707
+83010000e2000f67030c001000b82d01
+1d8018711c1620582c2500a05a000000
+9e011d007251d01e206e285500a05a00
+00001e8c0ad08a20e02d10103e9600a0
+5a000000180000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000d6 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2306_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_2306_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..b22bd51
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2306_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d020900000000
+29150103806639780aee91a3544c9926
+0f5054bdef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+4500a05a0000001e662156aa51001e30
+468f3300a05a0000001e000000fd0018
+4b0f5117000a202020202020000000fc
+0053414d53554e470a20202020200192
+020325f14d901f041305140312202122
+07162309070783010000e2000f67030c
+001000b82d011d80d0721c1620102c25
+80a05a0000009e011d8018711c162058
+2c2500a05a0000009e011d00bc52d01e
+20b8285540a05a0000001e011d007251
+d01e206e285500a05a0000001e000000
+000000000000000000000000000000ec \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2381_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_2381_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..3a6c335
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2381_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d4d0901000000
+2e150103807944780aee91a3544c9926
+0f5054bdef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+4500a05a0000001e662156aa51001e30
+468f3300a05a0000001e000000fd0018
+4b0f5117000a202020202020000000fc
+0053414d53554e470a20202020200123
+02032cf1479004050320220723090707
+83010000e2000fe305030170030c0030
+00b82d21d006014000372050011d8018
+711c1620582c2500a05a0000009e011d
+007251d01e206e285500a05a0000001e
+8c0ad08a20e02d10103e9600a05a0000
+00180000000000000000000000000000
+000000000000000000000000000000d5 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2382_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_2382_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..666d23c
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2382_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d4e0901000000
+2e150103805932780aee91a3544c9926
+0f5054bdef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+4500a05a0000001e662156aa51001e30
+468f3300a05a0000001e000000fd0018
+4b0f5117000a202020202020000000fc
+0053414d53554e470a20202020200154
+020323f1479004050320220723090707
+83010000e2000fe305030167030c0020
+00b82d011d8018711c1620582c2500a0
+5a0000009e011d007251d01e206e2855
+00a05a0000001e8c0ad08a20e02d1010
+3e9600a05a0000001800000000000000
+00000000000000000000000000000000
+000000000000000000000000000000d6 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2412_SyncMaster_DP.txt b/data/chameleon_edids/daily/SAM_2412_SyncMaster_DP.txt
new file mode 100644
index 0000000..c5d0470
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2412_SyncMaster_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff004c2d6c09464c3231
+33140103807944782aee9da354479926
+0f474abfef808180a9c0714fb3008100
+950081c00101023a801871382d40582c
+450075f23100001e662156aa51001e30
+468f330075f23100001e000000fd0038
+4b1e5111000a202020202020000000fc
+0053796e634d61737465720a20200007 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2412_SyncMaster_DVI.txt b/data/chameleon_edids/daily/SAM_2412_SyncMaster_DVI.txt
new file mode 100644
index 0000000..c5d0470
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2412_SyncMaster_DVI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff004c2d6c09464c3231
+33140103807944782aee9da354479926
+0f474abfef808180a9c0714fb3008100
+950081c00101023a801871382d40582c
+450075f23100001e662156aa51001e30
+468f330075f23100001e000000fd0038
+4b1e5111000a202020202020000000fc
+0053796e634d61737465720a20200007 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2412_SyncMaster_HDMI.txt b/data/chameleon_edids/daily/SAM_2412_SyncMaster_HDMI.txt
new file mode 100644
index 0000000..c5d0470
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2412_SyncMaster_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff004c2d6c09464c3231
+33140103807944782aee9da354479926
+0f474abfef808180a9c0714fb3008100
+950081c00101023a801871382d40582c
+450075f23100001e662156aa51001e30
+468f330075f23100001e000000fd0038
+4b1e5111000a202020202020000000fc
+0053796e634d61737465720a20200007 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2413_SyncMaster_HDMI.txt b/data/chameleon_edids/daily/SAM_2413_SyncMaster_HDMI.txt
new file mode 100644
index 0000000..6c20a51
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2413_SyncMaster_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d6d0901000000
+33150103807944780aee9da354479926
+0f474abdef80714f810081c081809500
+a9c0b3000101023a801871382d40582c
+450075f23100001e662156aa51001e30
+468f330075f23100001e000000fd0018
+4b1a5111000a202020202020000000fc
+0053796e634d61737465720a2020013e
+020325f14a901f051422200413031223
+09070783010000e2000fe30503016603
+0c00100080011d007251d01e206e2855
+0075f23100001e011d8018711c162058
+2c250075f23100009e8c0ad08a20e02d
+10103e960075f231000018023a80d072
+382d40102c458075f23100001e000000
+000000000000000000000000000000c2 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2460_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_2460_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..dd38753
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2460_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d9c0900000000
+0c160103807944780aee91a3544c9926
+0f5054bdef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+4500a05a0000001e662156aa51001e30
+468f3300a05a0000001e000000fd0018
+4b0f5117000a202020202020000000fc
+0053414d53554e470a202020202001f6
+020328f1479004050320220723090707
+83010000e2000f70030c001000b82d20
+d006014000372050011d8018711c1620
+582c2500a05a0000009e011d007251d0
+1e206e285500a05a0000001e8c0ad08a
+20e02d10103e9600a05a000000180000
+00000000000000000000000000000000
+000000000000000000000000000000e6 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2620_S24C350_HDMI.txt b/data/chameleon_edids/daily/SAM_2620_S24C350_HDMI.txt
new file mode 100644
index 0000000..a2f31e8
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2620_S24C350_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d3c0a4a37375a
+2d17010380341d782a7dd1a45650a128
+0f5054bfef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+450009252100001e011d007251d01e20
+6e28550009252100001e000000fd0032
+4b1e5111000a202020202020000000fc
+00533234433335300a2020202020019c
+02031af14690041f1312032309070783
+01000066030c00100080011d00bc52d0
+1e20b828554009252100001e8c0ad090
+204031200c4055000925210000188c0a
+d08a20e02d10103e9600092521000018
+00000000000000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000c9 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2682_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_2682_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..baba7d9
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2682_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d7a0a00000000
+2e160103806639780aee91a3544c9926
+0f5054bdef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+450024724200001e662156aa51001e30
+468f330024724200001e000000fd0018
+4b0f5117000a202020202020000000fc
+0053414d53554e470a20202020200157
+020325f14d901f041305140312202122
+07162309070783010000e2000f67030c
+001000b82d011d80d0721c1620102c25
+8024724200009e011d8018711c162058
+2c250024724200009e011d00bc52d01e
+20b828554024724200001e011d007251
+d01e206e28550024724200001e8c0ad0
+90204031200c4055002472420000183c \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2685_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_2685_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..c11d782
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2685_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d7d0a01000000
+2e160103807944780aee91a3544c9926
+0f5054bdef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+450024724200001e662156aa51001e30
+468f330024724200001e000000fd0018
+4b0f5117000a202020202020000000fc
+0053414d53554e470a20202020200135
+020330f14d901f041305140312202122
+07162309070783010000e2000f72030c
+001000b82d21d0080140073f405090a0
+011d80d0721c1620102c258024724200
+009e011d8018711c1620582c25002472
+4200009e011d00bc52d01e20b8285540
+24724200001e011d007251d01e206e28
+550024724200001e000000000000001e \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2686_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_2686_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..c5dd10f
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2686_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d7e0a01000000
+2e160103806f3e780aee91a3544c9926
+0f5054bdef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+450024724200001e662156aa51001e30
+468f330024724200001e000000fd0018
+4b0f5117000a202020202020000000fc
+0053414d53554e470a20202020200144
+020325f14d901f041305140312202122
+07162309070783010000e2000f67030c
+002000b82d011d80d0721c1620102c25
+8024724200009e011d8018711c162058
+2c250024724200009e011d00bc52d01e
+20b828554024724200001e011d007251
+d01e206e28550024724200001e000000
+00000000000000000000000000000064 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2758_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_2758_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..1e3bc07
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2758_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2dc60a00000000
+34160103806639780aee91a3544c9926
+0f5054bdef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+450076f23100001e662156aa51001e30
+468f330076f23100001e000000fd0018
+4b0f5117000a202020202020000000fc
+0053414d53554e470a20202020200183
+020330f14d901f041305140312202122
+07162309070783010000e2000f72030c
+002000b82d20d0080140073f405090a0
+011d80d0721c1620102c258076f23100
+009e011d8018711c1620582c250076f2
+3100009e011d00bc52d01e20b8285540
+76f23100001e011d007251d01e206e28
+550076f23100001e000000000000000b \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2763_SyncMaster_DP.txt b/data/chameleon_edids/daily/SAM_2763_SyncMaster_DP.txt
new file mode 100644
index 0000000..18ea10f
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2763_SyncMaster_DP.txt
@@ -0,0 +1,8 @@
+00ffffffffffff004c2dcb0a00000000
+01170103805932782aee9da354479926
+0f474abfef808180a9c0714fb3008100
+950081c00101023a801871382d40582c
+450075f23100001e662156aa51001e30
+468f330075f23100001e000000fd0038
+4b1e5111000a202020202020000000fc
+0053796e634d61737465720a202000fd \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2763_SyncMaster_DVI.txt b/data/chameleon_edids/daily/SAM_2763_SyncMaster_DVI.txt
new file mode 100644
index 0000000..18ea10f
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2763_SyncMaster_DVI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff004c2dcb0a00000000
+01170103805932782aee9da354479926
+0f474abfef808180a9c0714fb3008100
+950081c00101023a801871382d40582c
+450075f23100001e662156aa51001e30
+468f330075f23100001e000000fd0038
+4b1e5111000a202020202020000000fc
+0053796e634d61737465720a202000fd \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2763_SyncMaster_HDMI.txt b/data/chameleon_edids/daily/SAM_2763_SyncMaster_HDMI.txt
new file mode 100644
index 0000000..18ea10f
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2763_SyncMaster_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff004c2dcb0a00000000
+01170103805932782aee9da354479926
+0f474abfef808180a9c0714fb3008100
+950081c00101023a801871382d40582c
+450075f23100001e662156aa51001e30
+468f330075f23100001e000000fd0038
+4b1e5111000a202020202020000000fc
+0053796e634d61737465720a202000fd \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2764_SyncMaster_DP.txt b/data/chameleon_edids/daily/SAM_2764_SyncMaster_DP.txt
new file mode 100644
index 0000000..1961a68
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2764_SyncMaster_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2dcc0a1fcdc15c
+01170104a5593278223cf1a4554c9b25
+0e5054bfef808180a9c0714f8100b300
+950081c00101023a801871382d40582c
+450075f23100001e662156aa51001e30
+468f330075f23100001e000000fd0038
+4b1e5111000a202020202020000000fc
+0053796e634d61737465720a20200118
+020312c145901f041303230907078301
+0000023a80d072382d40102c458075f2
+3100001e011d007251d01e206e285500
+75f23100001e011d00bc52d01e20b828
+554075f23100001e0000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+0000000000000000000000000000000d \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2765_SyncMaster_DP.txt b/data/chameleon_edids/daily/SAM_2765_SyncMaster_DP.txt
new file mode 100644
index 0000000..e4805f5
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2765_SyncMaster_DP.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2dcd0a01000000
+01170103806639780aee9da354479926
+0f474abdef80714f810081c081809500
+a9c0b3000101023a801871382d40582c
+450075f23100001e662156aa51001e30
+468f330075f23100001e000000fd0018
+4b1a5111000a202020202020000000fc
+0053796e634d61737465720a2020012b
+020325f14a901f051422200413031223
+09070783010000e2000fe30503016603
+0c00100080011d007251d01e206e2855
+0075f23100001e011d8018711c162058
+2c250075f23100009e8c0ad08a20e02d
+10103e960075f231000018023a80d072
+382d40102c458075f23100001e000000
+000000000000000000000000000000c2 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2765_SyncMaster_HDMI.txt b/data/chameleon_edids/daily/SAM_2765_SyncMaster_HDMI.txt
new file mode 100644
index 0000000..48cc506
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2765_SyncMaster_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2dcd0a01000000
+01170103805932780aee9da354479926
+0f474abdef80714f810081c081809500
+a9c0b3000101023a801871382d40582c
+450075f23100001e662156aa51001e30
+468f330075f23100001e000000fd0018
+4b1a5111000a202020202020000000fc
+0053796e634d61737465720a2020013f
+020325f14a901f051422200413031223
+09070783010000e2000fe30503016603
+0c00100080011d007251d01e206e2855
+0075f23100001e011d8018711c162058
+2c250075f23100009e8c0ad08a20e02d
+10103e960075f231000018023a80d072
+382d40102c458075f23100001e000000
+000000000000000000000000000000c2 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2908_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_2908_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..02c3a2a
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2908_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d5c0b01000000
+30170103807944780aee91a3544c9926
+0f5054bdef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+4500bcaa4200001e662156aa51001e30
+468f3300bcaa4200001e000000fd0018
+4b0f5117000a202020202020000000fc
+0053414d53554e470a202020202001b2
+020326f14d901f041305140312202122
+07162309070783010000e2000f68030c
+001000b82d01011d80d0721c1620102c
+2580bcaa4200009e011d8018711c1620
+582c2500bcaa4200009e011d00bc52d0
+1e20b8285540bcaa4200001e011d0072
+51d01e206e285500bcaa4200001e0000
+00000000000000000000000000000031 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2912_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_2912_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..2293cfc
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2912_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d600b01000000
+30170103807944780aee91a3544c9926
+0f5054bdef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+450077f43100001e662156aa51001e30
+468f330077f43100001e000000fd0018
+4b0f5117000a202020202020000000fc
+0053414d53554e470a202020202001c6
+020330f14d901f041305140312202122
+07162309070783010000e2000f72030c
+001100b82d21d0080140073f405090a0
+011d80d0721c1620102c258077f43100
+009e011d8018711c1620582c250077f4
+3100009e011d00bc52d01e20b8285540
+77f43100001e011d007251d01e206e28
+550077f43100001e000000000000000d \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2919_S27D390_HDMI.txt b/data/chameleon_edids/daily/SAM_2919_S27D390_HDMI.txt
new file mode 100644
index 0000000..cf1ae2b
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2919_S27D390_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d670b4b4b3230
+1b180103803c22782a9791a556549d25
+0e5054bfef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+450056502100001e011d007251d01e20
+6e28550056502100001e000000fd0032
+4b1e5111000a202020202020000000fc
+00533237443339300a202020202001bf
+02031af14690041f1303122309070783
+01000066030c00100080011d00bc52d0
+1e20b828554056502100001e8c0ad090
+204031200c4055005650210000188c0a
+d08a20e02d10103e9600565021000018
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000061 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2940_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_2940_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..2e7da7c
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2940_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d7c0b00000000
+33170103806f3e780aee91a3544c9926
+0f5054bdef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+450076f23100001e662156aa51001e30
+468f330076f23100001e000000fd0018
+4b0f5117000a202020202020000000fc
+0053414d53554e470a202020202001be
+020325f14d901f041305140312202122
+07162309070783010000e2000f67030c
+001000b82d011d80d0721c1620102c25
+8076f23100009e011d8018711c162058
+2c250076f23100009e011d00bc52d01e
+20b828554076f23100001e011d007251
+d01e206e28550076f23100001e000000
+00000000000000000000000000000070 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2961_SAMSUNG_HDMI.txt b/data/chameleon_edids/daily/SAM_2961_SAMSUNG_HDMI.txt
new file mode 100644
index 0000000..62a9df1
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2961_SAMSUNG_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2d910b01000000
+0218010380a55d780aee91a3544c9926
+0f5054bdef80714f81c0810081809500
+a9c0b300010108e80030f2705a80b058
+8a00501d7400001e023a801871382d40
+582c4500501d7400001e000000fd0018
+4b0f873c000a202020202020000000fc
+0053414d53554e470a202020202001d8
+020342f15761101f041305142021225d
+5e5f6065666263640716031223090707
+83010000e2000f76030c003000b83c21
+d0880102030401403f9f50608090e30f
+01e0011d80d0721c1620102c2580501d
+7400009e662156aa51001e30468f3300
+501d7400001e00000000000000000000
+00000000000000000000000000000062 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2965_SyncMaster_DVI.txt b/data/chameleon_edids/daily/SAM_2965_SyncMaster_DVI.txt
new file mode 100644
index 0000000..96e6fd3
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2965_SyncMaster_DVI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff004c2d950b00000000
+02180103807944782aee9da354479926
+0f474abdef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+450075f23100001e662156aa51001e30
+468f330075f23100001e000000fd003c
+4b1e5111000a202020202020000000fc
+0053796e634d61737465720a202000fc \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2978_SyncMaster_HDMI.txt b/data/chameleon_edids/daily/SAM_2978_SyncMaster_HDMI.txt
new file mode 100644
index 0000000..89b6eb5
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2978_SyncMaster_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2da20b00000000
+02180103807944782aee9da354479926
+0f474abdef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+450075f23100001e662156aa51001e30
+468f330075f23100001e000000fd003c
+4b1e5111000a202020202020000000fc
+0053796e634d61737465720a202001ee
+020316c1429004230907078301000066
+030c0010008000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+0000000000000000000000000000008b \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SAM_2979_SyncMaster_HDMI.txt b/data/chameleon_edids/daily/SAM_2979_SyncMaster_HDMI.txt
new file mode 100644
index 0000000..f80aaf4
--- /dev/null
+++ b/data/chameleon_edids/daily/SAM_2979_SyncMaster_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004c2da30b01000000
+02180103804627780aee9da354479926
+0f474abdef80714f81c0810081809500
+a9c0b3000101023a801871382d40582c
+450075f23100001e662156aa51001e30
+468f330075f23100001e000000fd0018
+4b1a5111000a202020202020000000fc
+0053796e634d61737465720a20200184
+020326f14b901f041305140312202122
+2309070783010000e2000fe305030166
+030c00100080023a80d072382d40102c
+458075f23100001e011d007251d01e20
+6e28550075f23100001e011d00bc52d0
+1e20b828554075f23100001e8c0ad08a
+20e02d10103e960075f2310000180000
+00000000000000000000000000000092 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SEC_42499_EPSON_PJ_HDMI.txt b/data/chameleon_edids/daily/SEC_42499_EPSON_PJ_HDMI.txt
new file mode 100644
index 0000000..8c16711
--- /dev/null
+++ b/data/chameleon_edids/daily/SEC_42499_EPSON_PJ_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004ca303a601010101
+2614010380a05a780ade50a3544c9926
+0f5054210800a94090408180814081c0
+010101010101023a801871382d40582c
+450040846300001e9e20009051201f30
+4880360040846300001c000000fd0017
+550f5c11000a202020202020000000fc
+004550534f4e20504a0a2020202001a6
+020328f651901f202205140413030212
+11070616150123090707830100006603
+0c00110080e200fd011d8018711c1620
+582c250040846300009e011d80d0721c
+1620102c258040846300009e011d0072
+51d01e206e28550040846300001e8c0a
+d08a20e02d10103e9600408463000018
+00000000000000000000000000000039 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SEC_42502_EPSON_PJ_HDMI.txt b/data/chameleon_edids/daily/SEC_42502_EPSON_PJ_HDMI.txt
new file mode 100644
index 0000000..90fb769
--- /dev/null
+++ b/data/chameleon_edids/daily/SEC_42502_EPSON_PJ_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004ca306a601010101
+0316010380a05a780ade50a3544c9926
+0f5054210800a94090408180814081c0
+9500b300a9c0023a801871382d40582c
+450040846300001e9e20009051201f30
+4880360040846300001c000000fd0017
+550f5c11000a202020202020000000fc
+004550534f4e20504a0a202020200119
+020328f651901f202205140413030212
+11070616150123090707830100006603
+0c00110080e200fd011d8018711c1620
+582c250040846300009e011d80d0721c
+1620102c258040846300009e662156aa
+51001e30468f330040846300001e8c0a
+d08a20e02d10103e9600408463000018
+000000000000000000000000000000e5 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_0_LC-48LE551U_HDMI.txt b/data/chameleon_edids/daily/SHP_0_LC-48LE551U_HDMI.txt
new file mode 100644
index 0000000..36374fc
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_0_LC-48LE551U_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10000001010101
+0f18010380693b780a942ba854459622
+204b5ca5ce0001010101010101010101
+010101010101023a801871382d40582c
+45001e504200001e000000fd00324d1f
+460f000a202020202020000000ff0030
+34303130303731313131320a000000fc
+004c432d34384c45353531550a20016c
+020326714b010304059020151213141f
+29090705155750000700830100006703
+0c003000282d023a801871382d40582c
+55001e504200001e011d007251d01e20
+6e2855001e504200001e000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000036 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_0_LC-65LE643U_HDMI.txt b/data/chameleon_edids/daily/SHP_0_LC-65LE643U_HDMI.txt
new file mode 100644
index 0000000..30723e4
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_0_LC-65LE643U_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10000001010101
+08180103808f50780a5c3da55549a727
+0a474aa5ce0001c10101010101010101
+010101010101023a801871382d40582c
+450094245300001e000000fd00324d1f
+460f000a202020202020000000ff0034
+303230303731313131320a20000000fc
+004c432d36354c45363433550a200165
+020326714b010304059020151213141f
+29090705155750000700830100006703
+0c001000282d023a801871382d40582c
+550094245300001e011d007251d01e20
+6e28550094245300001e000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000a0 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_13448_LC-50LE650U_HDMI.txt b/data/chameleon_edids/daily/SHP_13448_LC-50LE650U_HDMI.txt
new file mode 100644
index 0000000..91b9826
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_13448_LC-50LE650U_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10883401010101
+29160103806e3e780a838da5544c9826
+0e474aa5ce0001010101010101010101
+010101010101023a801871382d40582c
+4500a20b3200001e000000fc004c432d
+35304c45363530550a20000000fd0017
+4c0f510f000a20202020202000000010
+00303030303030303030303030300131
+02032471521f14131216111590050403
+07020601202122260907071507506503
+0c001100011d80d0721c1620102c2580
+a20b3200009e011d00bc52d01e20b828
+5540a20b3200001e023a801871382d40
+582c4500a20b3200001e011d8018711c
+1620582c2500a20b3200009e00000000
+000000000000000000000000000000b8 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_13450_LC-50LE442U_HDMI.txt b/data/chameleon_edids/daily/SHP_13450_LC-50LE442U_HDMI.txt
new file mode 100644
index 0000000..9063576
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_13450_LC-50LE442U_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d108a3401010101
+32160103806e3e780a02eda3554e9d03
+0e474aa5ce0001010101010101010101
+010101010101023a801871382d40582c
+45004c6c4200001e000000fc004c432d
+35304c45343432550a20000000fd0017
+4c0f510f000a20202020202000000010
+0030303030303030303030303030014a
+02032471521f14131216111590050403
+07020601202122260907071507506503
+0c001000011d80d0721c1620102c2580
+4c6c4200009e011d00bc52d01e20b828
+55404c6c4200001e023a801871382d40
+582c45004c6c4200001e011d8018711c
+1620582c25004c6c4200009e00000000
+0000000000000000000000000000004d \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_18004_LC-46LE540U_HDMI.txt b/data/chameleon_edids/daily/SHP_18004_LC-46LE540U_HDMI.txt
new file mode 100644
index 0000000..b7e4eaa
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_18004_LC-46LE540U_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10544601010101
+06160103806639780aef8da3554e9c27
+0d474aa5ce0001010101010101010101
+010101010101023a801871382d40582c
+4500fa3d3200001e000000fc004c432d
+34364c45353430550a20000000fd0017
+4c0f510f000a20202020202000000010
+00303030303030303030303030300185
+02032471521f14131216111590050403
+07020601202122260907071507506503
+0c001000011d80d0721c1620102c2580
+fa3d3200009e011d00bc52d01e20b828
+5540fa3d3200001e023a801871382d40
+582c4500fa3d3200001e011d8018711c
+1620582c2500fa3d3200009e00000000
+00000000000000000000000000000091 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_4168_SHARP_HDMI_HDMI.txt b/data/chameleon_edids/daily/SHP_4168_SHARP_HDMI_HDMI.txt
new file mode 100644
index 0000000..268c5fd
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_4168_SHARP_HDMI_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10481000000000
+ff140103809a57782a1bbea25534b326
+144a52afce00a9409040818001010101
+010101010101023a80d072382d40102c
+458003626300001e662150b051001b30
+4070360000000000001e000000fc0053
+484152502048444d490a2020000000fd
+00174c0f4b11000a202020202020010c
+02032e72509f90201405130412031102
+16071506012309070783010000e30503
+016c030c001000b82dc03d3d5b5b023a
+801871382d40582c450003626300001e
+011d80d0721c1620102c258003626300
+009e011d8018711c1620582c25000362
+6300009e011d00bc52d01e20b8285540
+03626300001e000000000000000000f2 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_4217_SHARP_HDMI_HDMI.txt b/data/chameleon_edids/daily/SHP_4217_SHARP_HDMI_HDMI.txt
new file mode 100644
index 0000000..aedddcc
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_4217_SHARP_HDMI_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10791000000000
+ff15010380854b782a1bbea25534b326
+144a52afce00a9409040818001010101
+010101010101023a801871382d40582c
+450031ec5200001e662150b051001b30
+4070360000000000001e000000fc0053
+484152502048444d490a2020000000fd
+00174c0f4b11000a2020202020200145
+02031f714a9020220504030207060123
+0907078301000067030c001000b82d01
+1d8018711c1620582c250031ec520000
+9e011d007251d01e206e28550031ec52
+00001e8c0ad08a20e02d10103e9600e4
+ec320000188c0aa01451f01600267c43
+00e4ec32000098000000000000000000
+00000000000000000000000000000029 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_4234_SHARP_HDMI_HDMI.txt b/data/chameleon_edids/daily/SHP_4234_SHARP_HDMI_HDMI.txt
new file mode 100644
index 0000000..44710eb
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_4234_SHARP_HDMI_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d108a1000000000
+ff15010380854b782a1bbea25534b326
+144a52afce0090408180010101010101
+010101010101023a80d072382d40102c
+458032ee5200001e662150b051001b30
+4070360032ee5200001e000000fc0053
+484152502048444d490a2020000000fd
+00174c0e440f000a20202020202001bf
+02032e72509f90201405130412031102
+16071506012309070183010000e30500
+006c030c002000801e8011110000023a
+801871382d40582c450032ee5200001e
+011d80d0721c1620102c258032ee5200
+009e011d8018711c1620582c250032ee
+5200009e011d00bc52d01e20b8285540
+32ee5200001e000000000000000000d9 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_4262_SHARP_HDMI_HDMI.txt b/data/chameleon_edids/daily/SHP_4262_SHARP_HDMI_HDMI.txt
new file mode 100644
index 0000000..8b58500
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_4262_SHARP_HDMI_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10a61000000000
+ff16010380854b782a1bbea25534b326
+144a52afce00a9409040818001010101
+010101010101023a801871382d40582c
+450031ec5200001e662150b051001b30
+4070360000000000001e000000fc0053
+484152502048444d490a2020000000fd
+00174c0f4b11000a2020202020200117
+02032d714a9020220504030207060126
+09070715075083010000e30503016e03
+0c003000b82d20a00401401040011d80
+18711c1620582c250031ec5200009e01
+1d007251d01e206e28550031ec520000
+1e8c0ad08a20e02d10103e9600e4ec32
+0000188c0aa01451f01600267c4300e4
+ec320000980000000000000000000044 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_4293_SHARP_HDMI_HDMI.txt b/data/chameleon_edids/daily/SHP_4293_SHARP_HDMI_HDMI.txt
new file mode 100644
index 0000000..70654f4
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_4293_SHARP_HDMI_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10c51000000000
+ff160103807341782a1bbea25534b326
+144a52afce00a9409040818001010101
+010101010101023a80d072382d40102c
+458080884200001e662150b051001b30
+4070360000000000001e000000fc0053
+484152502048444d490a2020000000fd
+00174c0f4b11000a2020202020200148
+02033472509f90201405130412031102
+16071506012609070715075083010000
+e30503016f030c001000b82d20a00501
+40205060023a801871382d40582c4500
+80884200001e011d80d0721c1620102c
+258080884200009e011d8018711c1620
+582c250080884200009e011d00bc52d0
+1e20b828554080884200001e0000008c \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_4314_SHARP_HDMI_HDMI.txt b/data/chameleon_edids/daily/SHP_4314_SHARP_HDMI_HDMI.txt
new file mode 100644
index 0000000..5be0e1a
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_4314_SHARP_HDMI_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10da1000000000
+ff17010380b164782a1bbea25534b326
+144a52afce00a9409040818001010101
+010101010101023a801871382d40582c
+4500ebe46300001e662150b051001b30
+4070360000000000001e000000fc0053
+484152502048444d490a2020000000fd
+00174c0f4b11000a20202020202001da
+020330714a9020220504030207060129
+0907071507503d07c083010000e30503
+016e030c003000b82d20a00401401040
+011d8018711c1620582c2500ebe46300
+009e011d007251d01e206e285500ebe4
+6300001e8c0ad08a20e02d10103e9600
+30e4530000188c0aa01451f01600267c
+430030e45300009800000000000000ea \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_4315_SHARP_HDMI_HDMI.txt b/data/chameleon_edids/daily/SHP_4315_SHARP_HDMI_HDMI.txt
new file mode 100644
index 0000000..915b286
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_4315_SHARP_HDMI_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10db1000000000
+ff17010380854b782a1bbea25534b326
+144a52afce0090408180010101010101
+010101010101023a80d072382d40102c
+458031eb5200001e662150b051001b30
+4070360000000000001e000000fc0053
+484152502048444d490a2020000000fd
+00174c0e440f000a20202020202001e2
+02032872509f90201405130412031102
+1607150601230907078301000067030c
+001000801ee2003f023a801871382d40
+582c450031eb5200001e011d80d0721c
+1620102c258031eb5200009e011d8018
+711c1620582c250031eb5200009e011d
+00bc52d01e20b828554031eb5200001e
+00000000000000000000000000000067 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_4320_SHARP_HDMI_HDMI.txt b/data/chameleon_edids/daily/SHP_4320_SHARP_HDMI_HDMI.txt
new file mode 100644
index 0000000..2080c12
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_4320_SHARP_HDMI_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10e01000000000
+ff17010380c770782a1bbea25534b326
+144a52afce00a9409040818001010101
+010101010101023a80d072382d40102c
+4580c9617400001e662150b051001b30
+4070360000000000001e000000fc0053
+484152502048444d490a2020000000fd
+00174c0f4b11000a2020202020200155
+02033772519f90202214051304120311
+021607150601290907071507503d07c0
+830100006f030c003000b82d20a00501
+40206070e2003f023a801871382d4058
+2c4500c9617400001e011d80d0721c16
+20102c2580c9617400009e011d801871
+1c1620582c2500c9617400009e011d00
+bc52d01e20b8285540c9617400001e9a \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_4325_SHARP_HDMI_HDMI.txt b/data/chameleon_edids/daily/SHP_4325_SHARP_HDMI_HDMI.txt
new file mode 100644
index 0000000..8c398de
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_4325_SHARP_HDMI_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10e51000000000
+ff170103809a57782a1bbea25534b326
+144a52afce00a9409040818001010101
+010101010101023a801871382d40582c
+450003626300001e662150b051001b30
+4070360000000000001e000000fc0053
+484152502048444d490a2020000000fd
+00174c0f4b11000a202020202020015d
+020325714a9020220504030207060129
+0907071507503d07c08301000067030c
+002000b82d011d8018711c1620582c25
+0003626300009e011d007251d01e206e
+28550003626300001e8c0ad08a20e02d
+10103e96008262430000188c0aa01451
+f01600267c4300826243000098000000
+000000000000000000000000000000a1 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_4326_SHARP_HDMI_HDMI.txt b/data/chameleon_edids/daily/SHP_4326_SHARP_HDMI_HDMI.txt
new file mode 100644
index 0000000..b7d948e
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_4326_SHARP_HDMI_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10e61000000000
+ff170103809a57782a1bbea25534b326
+144a52afce00a9409040818001010101
+010101010101023a801871382d40582c
+450003626300001e662150b051001b30
+4070360000000000001e000000fc0053
+484152502048444d490a2020000000fd
+00174c0f4b11000a202020202020015c
+020329714a9020220504030207060129
+0907071507503d07c083010000e30503
+0167030c001100b82d011d8018711c16
+20582c250003626300009e011d007251
+d01e206e28550003626300001e8c0ad0
+8a20e02d10103e96008262430000188c
+0aa01451f01600267c43008262430000
+980000000000000000000000000000c0 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_4327_SHARP_HDMI_HDMI.txt b/data/chameleon_edids/daily/SHP_4327_SHARP_HDMI_HDMI.txt
new file mode 100644
index 0000000..3434deb
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_4327_SHARP_HDMI_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10e71000000000
+ff17010380c770782a1bbea25534b326
+144a52afce00a9409040818001010101
+010101010101023a801871382d40582c
+4500c9617400001e662150b051001b30
+4070360000000000001e000000fc0053
+484152502048444d490a2020000000fd
+00174c0f4b11000a202020202020013f
+02032c714a9020220504030207060129
+0907071507503d07c0830100006e030c
+001200b82d20a00401401040011d8018
+711c1620582c2500c9617400009e011d
+007251d01e206e285500c9617400001e
+8c0ad08a20e02d10103e9600d6615400
+00188c0aa01451f01600267c4300d661
+540000980000000000000000000000d8 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_4351_SHARP_HDMI_HDMI.txt b/data/chameleon_edids/daily/SHP_4351_SHARP_HDMI_HDMI.txt
new file mode 100644
index 0000000..9d93c31
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_4351_SHARP_HDMI_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10ff1000000000
+ff18010380b164782a1bbea25534b326
+144a52afce00a9409040818001010101
+010101010101023a801871382d40582c
+4500ebe46300001e662150b051001b30
+4070360000000000001e000000fc0053
+484152502048444d490a2020000000fd
+00174c0f4b1e000a20202020202001a7
+020336714a9020220504030207060129
+0907071507503d07c083010000e30503
+0171030c001200b83c20a06401020301
+401040e2003f011d803e73382d407e2c
+4580ebe46300001e011d8018711c1620
+582c2500ebe46300009e011d007251d0
+1e206e285500ebe46300001e8c0ad08a
+20e02d10103e9600ebe4630000180070 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SHP_4353_SHARP_HDMI_HDMI.txt b/data/chameleon_edids/daily/SHP_4353_SHARP_HDMI_HDMI.txt
new file mode 100644
index 0000000..e15584e
--- /dev/null
+++ b/data/chameleon_edids/daily/SHP_4353_SHARP_HDMI_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004d10011100000000
+ff18010380b164782a1bbea25534b326
+144a52afce00a9409040818001010101
+010101010101023a80d072382d40102c
+4580ebe46300001e662150b051001b30
+4070360000000000001e000000fc0053
+484152502048444d490a2020000000fd
+00174c0f4b1e000a20202020202001b3
+02033e72519f90202214051304120311
+021607150601290907071507503d07c0
+83010000e305030172030c002000b83c
+20a0650102030140206070e2003f023a
+801871382d40582c4500ebe46300001e
+011d80d0721c1620102c2580ebe46300
+009e011d8018711c1620582c2500ebe4
+6300009e0000000000000000000000ee \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SNY_11522_SONY_TV_HDMI.txt b/data/chameleon_edids/daily/SNY_11522_SONY_TV_HDMI.txt
new file mode 100644
index 0000000..97be509
--- /dev/null
+++ b/data/chameleon_edids/daily/SNY_11522_SONY_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004dd9022d01010101
+01150103807a44780a0dc9a057479827
+12484c21080081800101010101010101
+010101010101023a801871382d40582c
+4500c2ad4200001e011d007251d01e20
+6e285500c2ad4200001e000000fc0053
+4f4e592054560a2020202020000000fd
+003a3e0e460f000a202020202020019b
+020333f04c10050420223c3e03070206
+01260907071507508301000073030c00
+3000b82d2fd0090140000f1040506046
+e200fb8c0ad08a20e02d10103e9600c2
+ad42000018011d8018711c1620582c25
+00c2ad4200009e000000000000000000
+00000000000000000000000000000000
+0000000000000000000000000000001a \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SNY_12546_SONY_TV_HDMI.txt b/data/chameleon_edids/daily/SNY_12546_SONY_TV_HDMI.txt
new file mode 100644
index 0000000..505203d
--- /dev/null
+++ b/data/chameleon_edids/daily/SNY_12546_SONY_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004dd9023101010101
+01150103806639780a0dc9a057479827
+12484c21080081800101010101010101
+010101010101023a801871382d40582c
+4500fa3d3200001e011d007251d01e20
+6e285500fa3d3200001e000000fc0053
+4f4e592054560a2020202020000000fd
+003a3e0e460f000a2020202020200146
+020328f04c10050420223c3e03070206
+01260907071507508301000068030c00
+1000b82d0fe200fb8c0ad08a20e02d10
+103e9600fa3d32000018011d8018711c
+1620582c2500fa3d3200009e00000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+0000000000000000000000000000006f \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SNY_17666_SONY_TV_HDMI.txt b/data/chameleon_edids/daily/SNY_17666_SONY_TV_HDMI.txt
new file mode 100644
index 0000000..19b34e8
--- /dev/null
+++ b/data/chameleon_edids/daily/SNY_17666_SONY_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004dd9024501010101
+0115010380a05a780a83ada256499b25
+0f474a21080081800101010101010101
+010101010101023a801871382d40582c
+450040846300001e011d007251d01e20
+6e28550040846300001e000000fd003a
+3e0f460f000a202020202020000000fc
+00534f4e592054560a20202020200102
+020325f0491004050302070620012609
+07071507508301000068030c00100080
+1e0fe2007b011d8018711c1620582c25
+0040846300009e8c0ad08a20e02d1010
+3e96004084630000188c0ad08a20e02d
+10103e9600b084430000188c0aa01451
+f01600267c4300b08443000098000000
+00000000000000000000000000000027 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SNY_19459_SONY_TV_HDMI.txt b/data/chameleon_edids/daily/SNY_19459_SONY_TV_HDMI.txt
new file mode 100644
index 0000000..cdc1a0e
--- /dev/null
+++ b/data/chameleon_edids/daily/SNY_19459_SONY_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004dd9034c01010101
+01180103805932780a0dc9a057479827
+12484c2108008180a9c0010101010101
+010101010101023a801871382d40582c
+450076f23100001e011d007251d01e20
+6e28550076f23100001e000000fc0053
+4f4e592054560a2020202020000000fd
+003a3e0e460f000a2020202020200174
+020328f04c10050420223c3e03070206
+01260d0707150750830f000068030c00
+1000b82d0fe200fb8c0ad08a20e02d10
+103e960076f231000018011d8018711c
+1620582c250076f23100009e00000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000fd \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SNY_24833_SONY_TV_HDMI.txt b/data/chameleon_edids/daily/SNY_24833_SONY_TV_HDMI.txt
new file mode 100644
index 0000000..40737f8
--- /dev/null
+++ b/data/chameleon_edids/daily/SNY_24833_SONY_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004dd9016101010101
+0112010380a05a780a0dc9a057479827
+12484c21080081809040010101010101
+010101010101023a801871382d40582c
+450040846300001e011d007251d01e20
+6e28550040846300001e000000fd003a
+3e0f460f000a202020202020000000fc
+00534f4e592054560a20202020200174
+02032070491004050302070620012609
+07071507508301000066030c00200080
+011d8018711c1620582c250040846300
+009e8c0ad08a20e02d10103e96004084
+630000188c0ad08a20e02d10103e9600
+b084430000188c0aa01451f01600267c
+4300b084430000980000000000000000
+00000000000000000000000000000028 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SNY_32258_SONY_TV_HDMI.txt b/data/chameleon_edids/daily/SNY_32258_SONY_TV_HDMI.txt
new file mode 100644
index 0000000..5615e25
--- /dev/null
+++ b/data/chameleon_edids/daily/SNY_32258_SONY_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004dd9027e01010101
+0116010380a05a780a0dc9a057479827
+12484c21080081800101010101010101
+010101010101023a801871382d40582c
+450040846300001e011d007251d01e20
+6e28550040846300001e000000fc0053
+4f4e592054560a2020202020000000fd
+00303e0e460f000a202020202020012b
+02032cf0501f10140513041211161503
+02070601202609070715075083010000
+68030c001000801e0fe2007b023a80d0
+72382d40102c458040846300001e011d
+00bc52d01e20b828554040846300001e
+011d8018711c1620582c250040846300
+009e011d80d0721c1620102c25804084
+6300009e000000000000000000000055 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SNY_32770_SONY_TV_HDMI.txt b/data/chameleon_edids/daily/SNY_32770_SONY_TV_HDMI.txt
new file mode 100644
index 0000000..2af8e53
--- /dev/null
+++ b/data/chameleon_edids/daily/SNY_32770_SONY_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004dd9028001010101
+0116010380a05a780a83ada256499b25
+0f474a21080081800101010101010101
+010101010101023a801871382d40582c
+450040846300001e011d007251d01e20
+6e28550040846300001e000000fd003a
+3e0f460f000a202020202020000000fc
+00534f4e592054560a202020202001c6
+020325f0491004050302070620012609
+07071507508301000068030c00100080
+1e0fe2007b011d8018711c1620582c25
+0040846300009e8c0ad08a20e02d1010
+3e96004084630000188c0ad08a20e02d
+10103e9600b084430000188c0aa01451
+f01600267c4300b08443000098000000
+00000000000000000000000000000027 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SNY_33280_SONY_TV_HDMI.txt b/data/chameleon_edids/daily/SNY_33280_SONY_TV_HDMI.txt
new file mode 100644
index 0000000..8c3652e
--- /dev/null
+++ b/data/chameleon_edids/daily/SNY_33280_SONY_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004dd9008201010101
+320f0103804628780a0dc9a057479827
+12484c00000001010101010101010101
+010101010101023a801871382d40582c
+4500dfa42100001e8c0ad08a20e02d10
+103e960030a421000018000000fc0053
+4f4e592054560a2020202020000000fd
+003a3e0f460f000a202020202020012c
+02031c76480590030406070102230907
+078301000066030c00200080011d0072
+51d01e206e285500dfa42100001e8c0a
+a01451f01600267c430030a421000098
+011d8018711c1620582c2500dfa42100
+009e8c0ad08a20e02d10103e9600dfa4
+21000018000000000000000000000000
+000000000000000000000000000000c2 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SNY_33536_SONY_TV_XV_HDMI.txt b/data/chameleon_edids/daily/SNY_33536_SONY_TV_XV_HDMI.txt
new file mode 100644
index 0000000..b950b79
--- /dev/null
+++ b/data/chameleon_edids/daily/SNY_33536_SONY_TV_XV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004dd9008301010101
+0c12010380a05a780a0dc9a057479827
+12484c21080081800101010101010101
+010101010101023a801871382d40582c
+450040846300001e011d007251d01e20
+6e28550040846300001e000000fc0053
+4f4e592054562058560a2020000000fd
+003a3e0f460f000a20202020202001a8
+02032570491004050302070620012609
+07071507508301000067030c001000b8
+2de3050301011d8018711c1620582c25
+0040846300009e8c0ad08a20e02d1010
+3e96004084630000188c0ad08a20e02d
+10103e960040b0640000188c0aa01451
+f01600267c430040b064000098000000
+00000000000000000000000000000027 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SNY_39937_SONY_TV_HDMI.txt b/data/chameleon_edids/daily/SNY_39937_SONY_TV_HDMI.txt
new file mode 100644
index 0000000..9dac2f5
--- /dev/null
+++ b/data/chameleon_edids/daily/SNY_39937_SONY_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004dd9019c01010101
+0113010380a05a780a0dc9a057479827
+12484c21080081800101010101010101
+010101010101023a801871382d40582c
+450040846300001e011d007251d01e20
+6e28550040846300001e000000fd003a
+3e0f460f000a202020202020000000fc
+00534f4e592054560a20202020200106
+02032070491004050302070620012609
+07071507508301000066030c00100080
+011d8018711c1620582c250040846300
+009e8c0ad08a20e02d10103e96004084
+630000188c0ad08a20e02d10103e9600
+b084430000188c0aa01451f01600267c
+4300b084430000980000000000000000
+00000000000000000000000000000038 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SNY_43265_SONY_TV_HDMI.txt b/data/chameleon_edids/daily/SNY_43265_SONY_TV_HDMI.txt
new file mode 100644
index 0000000..a9fb653
--- /dev/null
+++ b/data/chameleon_edids/daily/SNY_43265_SONY_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004dd901a901010101
+0113010380a05a780a0dc9a057479827
+12484c21080081800101010101010101
+010101010101023a801871382d40582c
+450040846300001e011d007251d01e20
+6e28550040846300001e000000fd003a
+3e0f460f000a202020202020000000fc
+00534f4e592054560a202020202001f9
+020325f0491004050302070620012609
+07071507508301000068030c001000b8
+2d0fe2007b011d8018711c1620582c25
+0040846300009e8c0ad08a20e02d1010
+3e96004084630000188c0ad08a20e02d
+10103e9600b084430000188c0aa01451
+f01600267c4300b08443000098000000
+000000000000000000000000000000e0 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SNY_55810_SONY_TV_01_HDMI.txt b/data/chameleon_edids/daily/SNY_55810_SONY_TV_01_HDMI.txt
new file mode 100644
index 0000000..d973461
--- /dev/null
+++ b/data/chameleon_edids/daily/SNY_55810_SONY_TV_01_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004dd902da01010101
+01170103807a44780a0dc9a057479827
+12484c21080081800101010101010101
+010101010101023a801871382d40582c
+4500c2ad4200001e011d007251d01e20
+6e285500c2ad4200001e000000fc0053
+4f4e5920545620202a30310a000000fd
+003a3e0e460f000a20202020202001c1
+020333f04c10050420223c3e03070206
+01260907071507508301000073030c00
+2000b82d2fd0090140000f1040506046
+e200fb8c0ad08a20e02d10103e9600c2
+ad42000018011d8018711c1620582c25
+00c2ad4200009e000000000000000000
+00000000000000000000000000000000
+0000000000000000000000000000002a \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SNY_5635_SONY_TV_HDMI.txt b/data/chameleon_edids/daily/SNY_5635_SONY_TV_HDMI.txt
new file mode 100644
index 0000000..e02a15f
--- /dev/null
+++ b/data/chameleon_edids/daily/SNY_5635_SONY_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004dd9031601010101
+0117010380a05a780a83ada256499b25
+0f474a21080081800101010101010101
+010101010101023a801871382d40582c
+450040846300001e011d007251d01e20
+6e28550040846300001e000000fd003a
+3e0f460f000a202020202020000000fc
+00534f4e592054560a2020202020012e
+020328f04c10050420223c3e03070206
+01260907071507508301000068030c00
+1000801e0fe2007b011d8018711c1620
+582c250040846300009e8c0ad08a20e0
+2d10103e96004084630000188c0ad08a
+20e02d10103e9600b084430000188c0a
+a01451f01600267c4300b08443000098
+00000000000000000000000000000085 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SNY_59905_SONY_TV_HDMI.txt b/data/chameleon_edids/daily/SNY_59905_SONY_TV_HDMI.txt
new file mode 100644
index 0000000..98b3c8b
--- /dev/null
+++ b/data/chameleon_edids/daily/SNY_59905_SONY_TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004dd901ea01010101
+0114010380a05a780a83ada256499b25
+0f474a21080081800101010101010101
+010101010101023a801871382d40582c
+450040846300001e011d007251d01e20
+6e28550040846300001e000000fd003a
+3e0f460f000a202020202020000000fc
+00534f4e592054560a2020202020015f
+02032270491004050302070620012609
+07071507508301000068030c00100080
+1e0f011d8018711c1620582c25004084
+6300009e8c0ad08a20e02d10103e9600
+4084630000188c0ad08a20e02d10103e
+9600b084430000188c0aa01451f01600
+267c4300b08443000098000000000000
+00000000000000000000000000000007 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/SNY_9475_SONY_TV_07_HDMI.txt b/data/chameleon_edids/daily/SNY_9475_SONY_TV_07_HDMI.txt
new file mode 100644
index 0000000..1abe847
--- /dev/null
+++ b/data/chameleon_edids/daily/SNY_9475_SONY_TV_07_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff004dd9032501010101
+01170103807a44780a0dc9a057479827
+12484c2108008180a9c0010101010101
+010101010101023a801871382d40582c
+4500c2ad4200001e011d007251d01e20
+6e285500c2ad4200001e000000fc0053
+4f4e5920545620202a30370a000000fd
+003a3e0e460f000a2020202020200108
+020343f05010050420223c3e03070206
+015d5e5f622609070715075083010000
+77030c001000b83c2fd0890102030401
+40000f1040506046e200fbe3051f01e3
+0e61668c0ad08a20e02d10103e9600c2
+ad42000018011d8018711c1620582c25
+00c2ad4200009e000000000000000000
+0000000000000000000000000000004d \ No newline at end of file
diff --git a/data/chameleon_edids/daily/TFA_1664_PC2TV_HDMI.txt b/data/chameleon_edids/daily/TFA_1664_PC2TV_HDMI.txt
new file mode 100644
index 0000000..972b0f7
--- /dev/null
+++ b/data/chameleon_edids/daily/TFA_1664_PC2TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff0050c1800601000000
+2115010380331d780ac5c8a3574a9c23
+12484cbfef804bc08100814081809040
+9500b3000101011d007251d01e206e28
+5500c48e2100001e662150b051001b30
+00702644c48e2100001e000000fc0050
+433254560a20202020202020000000fd
+00184b0f460f000a2020202020200139
+02032071230906018301000065030c00
+10004d0284050610111314151f202122
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000072 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/TSB_518_TOSHIBA-TV_HDMI.txt b/data/chameleon_edids/daily/TSB_518_TOSHIBA-TV_HDMI.txt
new file mode 100644
index 0000000..e323a07
--- /dev/null
+++ b/data/chameleon_edids/daily/TSB_518_TOSHIBA-TV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff005262060201010101
+0117010380a05a780af09da355499b26
+0f474a2fce0081808bc0010101010101
+010101010101023a801871382d40582c
+450040846300001e662150b051001b30
+4070360040846300001e000000fc0054
+4f53484942412d54560a2020000000fd
+00174b0f440f000a20202020202001b1
+02032b714a9001020304050607202226
+090707110718830100006c030c001000
+382dc015151f1fe3050301011d801871
+1c1620582c250040846300009e011d00
+7251d01e206e28550040846300001e8c
+0ad08a20e02d10103e9600b084430000
+188c0aa01451f01600267c4300b08443
+000098000000000000000000000000f7 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/VIZ_113_E370VA_HDMI.txt b/data/chameleon_edids/daily/VIZ_113_E370VA_HDMI.txt
new file mode 100644
index 0000000..2335df7
--- /dev/null
+++ b/data/chameleon_edids/daily/VIZ_113_E370VA_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00593a710001010101
+0914010380522e782adefda355459924
+10474aa54e00d1c00101010101010101
+010101010101023a801871382d40582c
+450033cc3100001e6419004041002630
+1888360033cc31000018000000fc0045
+33373056410a202020202020000000fd
+00384b1f500f000a20202020202001bb
+02032571480106070203040590261507
+50090707830100006c030c001000001e
+c001010101023a801871382d40582c45
+0033cc3100001e011d8018711c162058
+2c250033cc3100009e011d007251d01e
+206e28550033cc3100001e0000000000
+00000000000000000000000000000000
+000000000000000000000000000000be \ No newline at end of file
diff --git a/data/chameleon_edids/daily/VIZ_120_M3D550KDE_HDMI.txt b/data/chameleon_edids/daily/VIZ_120_M3D550KDE_HDMI.txt
new file mode 100644
index 0000000..c4e4514
--- /dev/null
+++ b/data/chameleon_edids/daily/VIZ_120_M3D550KDE_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00593a780001010101
+00160103807944782216fda355469924
+10474aa54e00d1c00101010101010101
+010101010101023a801871382d40582c
+4500b9a84200001e6419004041002630
+18883600b9a842000018000000fc004d
+33443535304b44450a202020000000fd
+00384c1f500f000a202020202020010a
+02032874490106070203059004202609
+0707110718830100006e030c00300000
+2def010101018000023a801871382d40
+582c4500b9a84200001e011d007251d0
+1e206e285500b9a84200001e8c0aa014
+51f01600267c43008ba8320000980000
+00000000000000000000000000000000
+0000000000000000000000000000007a \ No newline at end of file
diff --git a/data/chameleon_edids/daily/VIZ_133_M421NV_HDMI.txt b/data/chameleon_edids/daily/VIZ_133_M421NV_HDMI.txt
new file mode 100644
index 0000000..d6df057
--- /dev/null
+++ b/data/chameleon_edids/daily/VIZ_133_M421NV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00593a850001010101
+2e140103805d34780afcf7a355499c24
+10474aa5ce0001010101010101010101
+010101010101023a801871382d40582c
+4500a2083200001e000000fd00324d1f
+460f000a202020202020000000ff0055
+4b4755464d30313030303031000000fc
+004d3432314e560a2020202020200123
+020320714b010304059020151213141f
+231107508301000067030c003000282d
+023a801871382d40582c5500a2083200
+001e011d007251d01e206e285500a208
+3200001e000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+0000000000000000000000000000005a \ No newline at end of file
diff --git a/data/chameleon_edids/daily/VIZ_146_E3D470VX_HDMI.txt b/data/chameleon_edids/daily/VIZ_146_E3D470VX_HDMI.txt
new file mode 100644
index 0000000..7b7f67b
--- /dev/null
+++ b/data/chameleon_edids/daily/VIZ_146_E3D470VX_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00593a920001010101
+2a15010380683a780aa5bba3554a9b25
+0e474aa5ce00810081c0010101010101
+010101010101023a801871382d40582c
+450010494200001e000000fd00324d1f
+460f000a202020202020000000ff0055
+4b4a5a454d30313030303031000000fc
+0045334434373056580a2020202001db
+02032d714b010304059020111213141f
+29090705155750000700830100006e03
+0c002000282d20c0040141002c023a80
+1871382d40582c550010494200001e01
+1d007251d01e206e2855001049420000
+1e000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000014 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/VIZ_146_E601i-A3_HDMI.txt b/data/chameleon_edids/daily/VIZ_146_E601i-A3_HDMI.txt
new file mode 100644
index 0000000..8adb700
--- /dev/null
+++ b/data/chameleon_edids/daily/VIZ_146_E601i-A3_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00593a920001010101
+2316010380854b782a0657a559519c26
+114849a5ce00810081c0010101010101
+010101010101023a801871382d40582c
+450031ec5200001e000000fd00324d1f
+460f000a202020202020000000ff0055
+4b4a57414d30313030303031000000fc
+0045363031692d41330a2020202001d6
+02032d714b010304059020111213141f
+29090705155750000700830100006e03
+0c002000282d00000000000000023a80
+1871382d40582c550031ec5200001e01
+1d007251d01e206e28550031ec520000
+1e000000000000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000be \ No newline at end of file
diff --git a/data/chameleon_edids/daily/VIZ_146_E701i-A3_HDMI.txt b/data/chameleon_edids/daily/VIZ_146_E701i-A3_HDMI.txt
new file mode 100644
index 0000000..a05a490
--- /dev/null
+++ b/data/chameleon_edids/daily/VIZ_146_E701i-A3_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00593a920001010101
+25160103809a57782a8937a35a4e9e26
+104849a5ce00810081c0010101010101
+010101010101023a801871382d40582c
+450002616300001e000000fd00324d1f
+460f000a202020202020000000ff0055
+4b4a57414d30313030303031000000fc
+0045373031692d41330a2020202001fb
+02032d714b010304059020111213141f
+29090705155750000700830100006e03
+0c001000282d00000000000000023a80
+1871382d40582c550002616300001e01
+1d007251d01e206e2855000261630000
+1e000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000020 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/VIZ_146_M3D651SV_HDMI.txt b/data/chameleon_edids/daily/VIZ_146_M3D651SV_HDMI.txt
new file mode 100644
index 0000000..758185f
--- /dev/null
+++ b/data/chameleon_edids/daily/VIZ_146_M3D651SV_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00593a920001010101
+14160103808f507802639da154529e26
+0a474aa5ce00810081c0010101010101
+010101010101023a801871382d40582c
+450096245300001e000000fd00324d1f
+460f000a202020202020000000ff0055
+414e43414e30313030303031000000fc
+004d334436353153560a2020202001c0
+02032d714b010304059020111213141f
+29090705155750100750830100006e03
+0c002000382d20c0040141002c023a80
+1871382d40582c550096245300001e01
+1d007251d01e206e2855009624530000
+1e000000000000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000c0 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/VIZ_149_E291-A1_HDMI.txt b/data/chameleon_edids/daily/VIZ_149_E291-A1_HDMI.txt
new file mode 100644
index 0000000..b2f0ced
--- /dev/null
+++ b/data/chameleon_edids/daily/VIZ_149_E291-A1_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00593a950001010101
+00170103803f23782a1f1b9f58559e27
+0c474aa5460001010101010101010101
+010101010101662150b051001b304070
+360077622100001e6419004041002630
+18883600776221000018000000fc0045
+3239312d41310a2020202020000000fd
+003a4c1e3d09000a2020202020200123
+02031e71488504100203070601260907
+071507508301000065030c001000011d
+8018711c1620582c250077622100009e
+011d007251d01e206e28550077622100
+001e8c0ad08a20e02d10103e9600d862
+110000188c0aa01451f01600267c4300
+7762210000988c0aa01451f01600267c
+4300d862110000980000000000000026 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/VIZ_152_E470-A0_HDMI.txt b/data/chameleon_edids/daily/VIZ_152_E470-A0_HDMI.txt
new file mode 100644
index 0000000..2f18142
--- /dev/null
+++ b/data/chameleon_edids/daily/VIZ_152_E470-A0_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00593a980001010101
+1816010380683a780af8dba257519b27
+0e474aa5ce0001010101010101010101
+010101010101023a801871382d40582c
+450010494200001e000000fd00324d1f
+460f000a202020202020000000ff004c
+41554b4f4e414e3031303030000000fc
+00453437302d41300a2020202020016c
+020324714b010304059020151213141f
+29090705155750000700830100006503
+0c001000023a801871382d40582c5500
+10494200001e011d007251d01e206e28
+550010494200001e0000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000d9 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/VIZ_4100_E470i-A0_HDMI.txt b/data/chameleon_edids/daily/VIZ_4100_E470i-A0_HDMI.txt
new file mode 100644
index 0000000..e682aee
--- /dev/null
+++ b/data/chameleon_edids/daily/VIZ_4100_E470i-A0_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00593a041001010101
+0d17010380683a780af8dba257519b27
+0e474aa5ce00810081c0010101010101
+010101010101023a801871382d40582c
+450010494200001e000000fd00324d1f
+460f000a202020202020000000ff0055
+4b4f43425030313030303031000000fc
+0045343730692d41300a202020200127
+020326714b010304059020111213141f
+29090705155750100750830100006703
+0c001000382d023a801871382d40582c
+550010494200001e011d007251d01e20
+6e28550010494200001e000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000014 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/VIZ_4100_E550i-B2_HDMI.txt b/data/chameleon_edids/daily/VIZ_4100_E550i-B2_HDMI.txt
new file mode 100644
index 0000000..0a35794
--- /dev/null
+++ b/data/chameleon_edids/daily/VIZ_4100_E550i-B2_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00593a041001010101
+0a180103805d34780ae69da3544a9926
+0f474aa1080081809500b30001010101
+010101010101023a801871382d40582c
+4500a2083200001e0e1f008051001e30
+40803700dd0c1100001c000000fd0032
+4b1e460f000a202020202020000000fc
+0045353530692d42320a202020200156
+02032c714f0203040506079013141f20
+2201111226090707150750830100006c
+030c001000382dc002020202011d0072
+51d01e206e2855009ae61000001a011d
+8018711c1620582c25009ae61000009e
+8c0ad08a20e02d10103a96009ae61000
+0018023a801871382d40582c45009ae6
+1000001e0000000000000000000000e9 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/VIZ_4102_E600i-B3_HDMI.txt b/data/chameleon_edids/daily/VIZ_4102_E600i-B3_HDMI.txt
new file mode 100644
index 0000000..fb211f2
--- /dev/null
+++ b/data/chameleon_edids/daily/VIZ_4102_E600i-B3_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00593a061001010101
+0017010380854b782a2098a35a53a027
+0e484ca5ce00810081c0010101010101
+010101010101023a801871382d40582c
+450031ec5200001e000000fd00324d1f
+460f000a202020202020000000fc0045
+363030692d42330a20202020000000ff
+0056495a494f30303030310a20200168
+02032d714b010304059020111213141f
+29090705155750000700830100006e03
+0c001000282d00000000000000023a80
+1871382d40582c550031ec5200001e01
+1d007251d01e206e28550031ec520000
+1e000000000000000000000000000000
+00000000000000000000000000000000
+000000000000000000000000000000ce \ No newline at end of file
diff --git a/data/chameleon_edids/daily/VIZ_87_E470VL_HDMI.txt b/data/chameleon_edids/daily/VIZ_87_E470VL_HDMI.txt
new file mode 100644
index 0000000..bdd1c55
--- /dev/null
+++ b/data/chameleon_edids/daily/VIZ_87_E470VL_HDMI.txt
@@ -0,0 +1,16 @@
+00ffffffffffff00593a570001010101
+3113010380683a780afcf7a355499c24
+10474aa5ce0001010101010101010101
+010101010101023a801871382d40582c
+450010444200001e000000fd00324d1f
+460f000a202020202020000000ff0055
+4b4846414c30313030303031000000fc
+0045343730564c0a202020202020019e
+020320714b010304059020151213141f
+231107508301000067030c001000282d
+023a801871382d40582c550010444200
+001e011d007251d01e206e2855001044
+4200001e000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000000
+00000000000000000000000000000006 \ No newline at end of file
diff --git a/data/chameleon_edids/daily/VSC_54823_VX1951m_HDMI.txt b/data/chameleon_edids/daily/VSC_54823_VX1951m_HDMI.txt
new file mode 100644
index 0000000..76cd6d6
--- /dev/null
+++ b/data/chameleon_edids/daily/VSC_54823_VX1951m_HDMI.txt
@@ -0,0 +1,8 @@
+00ffffffffffff005a6327d601010101
+2615010380291a782a1455a5564a9c25
+115054bfef80a9c0950f8180810f8100
+714f010181c09a29a0d0518422305098
+360098ff1000001c000000ff00534252
+3131333831303938370a000000fd0032
+4b18520e000a202020202020000000fc
+005658313935316d0a202020202000e2 \ No newline at end of file
diff --git a/manage.py b/manage.py
index 27100f7..ff112f7 100755
--- a/manage.py
+++ b/manage.py
@@ -5,7 +5,7 @@ from plainbox.provider_manager import N_
setup(
name='plainbox-provider-checkbox',
namespace='com.canonical.certification',
- version="0.50.0",
+ version="0.51.0rc1",
description=N_("Checkbox provider"),
gettext_domain='plainbox-provider-checkbox',
strict=False, deprecated=False,
diff --git a/units/audio/jobs.pxu b/units/audio/jobs.pxu
index 0745e5c..126209e 100644
--- a/units/audio/jobs.pxu
+++ b/units/audio/jobs.pxu
@@ -679,6 +679,8 @@ flags: also-after-suspend
command: alsa_test loopback -d 5
category_id: com.canonical.plainbox::audio
estimated_duration: 5
+imports: from com.canonical.plainbox import manifest
+requires: manifest.has_audio_loopback_connector == 'True'
id: audio/alsa-loopback
_summary: Captured sound matches played one
diff --git a/units/audio/manifest.pxu b/units/audio/manifest.pxu
index 95417f6..d3e285b 100644
--- a/units/audio/manifest.pxu
+++ b/units/audio/manifest.pxu
@@ -13,3 +13,9 @@ unit: manifest entry
id: has_audio_capture
_name: Audio capture
value-type: bool
+
+unit: manifest entry
+id: has_audio_loopback_connector
+prompt: Does this device have the following?:
+_name: Audio Loopback Connector
+value-type: bool
diff --git a/units/bluetooth/test-plan.pxu b/units/bluetooth/test-plan.pxu
index 69497ae..9de4d37 100644
--- a/units/bluetooth/test-plan.pxu
+++ b/units/bluetooth/test-plan.pxu
@@ -17,7 +17,6 @@ include:
bluetooth/audio-a2dp certification-status=blocker
bluetooth4/HOGP-mouse certification-status=blocker
bluetooth4/HOGP-keyboard certification-status=blocker
- bluetooth/file-transfer certification-status=non-blocker
id: bluetooth-cert-automated
unit: test plan
diff --git a/units/camera/jobs.pxu b/units/camera/jobs.pxu
index 0605d18..d7ad2aa 100644
--- a/units/camera/jobs.pxu
+++ b/units/camera/jobs.pxu
@@ -6,7 +6,19 @@ requires:
device.category == 'CAPTURE'
command:
camera_test detect
-_description: This Automated test attempts to detect a camera.
+_summary: This Automated test attempts to detect a camera.
+user: root
+
+plugin: shell
+category_id: com.canonical.plainbox::camera
+id: camera/detect-rpi
+estimated_duration: 1.0
+imports: from com.canonical.plainbox import manifest
+requires:
+ manifest.has_rpi_camera == 'True'
+command:
+ udev_resource -f MMAL | grep "category: MMAL"
+_summary: Detect presence of a MMAL camera.
unit: template
template-resource: device
@@ -103,3 +115,19 @@ _description:
Takes multiple pictures based on the resolutions supported by the camera and
validates their size and that they are of a valid format.
+unit: template
+template-resource: device
+template-filter: device.category == 'MMAL' and device.name != ''
+template-unit: job
+plugin: shell
+category_id: com.canonical.plainbox::camera
+id: camera/multiple-resolution-images-rpi_{name}
+_summary: Webcam multiple resolution capture test for Pi Camera
+estimated_duration: 16.0
+depends: camera/detect-rpi
+command:
+ camera_test_rpi.py --device /dev/{name}
+_description:
+ Takes multiple pictures based on the resolutions supported by the camera and
+ validates their size and that they are of a valid format.
+user: root \ No newline at end of file
diff --git a/units/camera/manifest.pxu b/units/camera/manifest.pxu
new file mode 100644
index 0000000..de12798
--- /dev/null
+++ b/units/camera/manifest.pxu
@@ -0,0 +1,4 @@
+unit: manifest entry
+id: has_rpi_camera
+_name: RaspberryPi Camera Module
+value-type: bool \ No newline at end of file
diff --git a/units/camera/test-plan.pxu b/units/camera/test-plan.pxu
index 578a7ce..c3b8378 100644
--- a/units/camera/test-plan.pxu
+++ b/units/camera/test-plan.pxu
@@ -60,3 +60,29 @@ include:
after-suspend-manual-camera/display_.* certification-status=blocker
bootstrap_include:
device
+
+id: camera-full
+unit: test plan
+_name: Camera tests
+_description: Camera tests for Ubuntu Core devices
+include:
+nested_part:
+ camera-automated
+ camera-manual
+
+id: camera-manual
+unit: test plan
+_name: Manual camera tests
+_description: Manual camera tests for Ubuntu Core devices
+include:
+
+id: camera-automated
+unit: test plan
+_name: Automated camera tests
+_description: Automated camera tests for Ubuntu Core devices
+estimated_duration: 1h30m
+include:
+ camera/multiple-resolution-images-_.*
+ camera/multiple-resolution-images-rpi_.*
+bootstrap_include:
+ device
diff --git a/units/cpu/jobs.pxu b/units/cpu/jobs.pxu
index a027aa9..dccf2e4 100644
--- a/units/cpu/jobs.pxu
+++ b/units/cpu/jobs.pxu
@@ -2,7 +2,9 @@ plugin: shell
category_id: com.canonical.plainbox::cpu
id: cpu/scaling_test
estimated_duration: 150.0
-requires: executable.name == 'fwts'
+requires:
+ executable.name == 'fwts'
+ 'userspace' in cpuinfo.governors
user: root
environ: PLAINBOX_SESSION_SHARE LD_LIBRARY_PATH SNAP
command:
diff --git a/units/dock/jobs.pxu b/units/dock/jobs.pxu
index c425402..c457102 100644
--- a/units/dock/jobs.pxu
+++ b/units/dock/jobs.pxu
@@ -152,6 +152,23 @@ _verification:
Was the desktop displayed correctly on the screen connected
using a "USB Type-C to VGA" adapter in every mode?
+id: dock/monitor-thunderbolt3
+category_id: dock-display
+depends: dock/cold-plug
+imports: from com.canonical.plainbox import manifest
+requires: manifest.has_thunderbolt3 == 'True'
+estimated_duration: 120.0
+_summary: Thunderbolt3 port test on the dock
+plugin: manual
+_purpose:
+ This test will check the Thunderbolt3 port(s) on the dock.
+_steps:
+ Skip this test if the dock does not have a Thunderbolt3 port.
+ 1. Connect a display (if not already connected) to the Thunderbolt3 port on the dock
+ 2. Repeat step 1 for each additional Thunderbolt3 port, if any
+_verification:
+ Was the desktop displayed correctly on both screens?
+
id: dock/monitor-dual-head
category_id: dock-display
depends: dock/cold-plug
@@ -159,9 +176,9 @@ estimated_duration: 120.0
_summary: Dual monitors test while docked
plugin: manual
_purpose:
- This test verifies that dual-monitor output works using the dock. You will need two external monitors to perform this test.
+ This test verifies that dual-monitor output works using the dock. You will need two external monitors to perform this test. Depends on the specification of the device to use 4K monitor or FHD monitor.
_steps:
- Skip this test if your video card or the dock do not support multiple monitors. Use 4K monitors to run this test if the video card and dock both support.
+ Skip this test if your video card or the dock do not support multiple monitors.
1. If your dock provides more than one monitor outputs, connect two monitors
2. Open the "Displays" tool (open the dash and search for "Displays")
3. Configure your output to provide one desktop across all the monitors
@@ -169,14 +186,14 @@ _steps:
_verification:
Was the stretched desktop displayed correctly across all the screens?
-id: dock/monitor-tripple-head
+id: dock/monitor-triple-head
category_id: dock-display
depends: dock/cold-plug
estimated_duration: 120.0
_summary: Tripple monitors test while docked
plugin: manual
_purpose:
- This test verifies that tripple-monitor output works using the dock. You will need three external monitors to perform this test.
+ This test verifies that triple-monitor output works using the dock. You will need three external monitors to perform this test. Depends on the specification of the device to use 4K monitor or FHD monitor.
_steps:
Skip this test if your video card or the dock do not support multiple monitors.
1. If your dock provides more than one monitor outputs, connect three monitors
@@ -225,6 +242,7 @@ requires:
package.name == 'pulseaudio-utils'
_summary: HDMI audio test
plugin: user-interact-verify
+flags: also-after-suspend-manual
estimated_duration: 30.0
command:
audio_settings store --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
@@ -252,6 +270,7 @@ requires:
package.name == 'pulseaudio-utils'
_summary: DisplayPort audio test
plugin: user-interact-verify
+flags: also-after-suspend-manual
estimated_duration: 30.0
command:
audio_settings store --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
@@ -269,9 +288,96 @@ _steps:
_verification:
Did you hear the sound from the DisplayPort device?
+id: dock/audio-playback-type-c-hdmi
+category_id: dock-audio
+depends: dock/cold-plug
+requires:
+ device.category == 'AUDIO'
+ package.name == 'alsa-base'
+ package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
+ package.name == 'pulseaudio-utils'
+_summary: HDMI audio test
+plugin: user-interact-verify
+estimated_duration: 30.0
+command:
+ audio_settings store --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
+ audio_settings set --verbose --device=hdmi --volume=50
+ gst_pipeline_test -t 2 --device hdmi 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink'
+ EXIT_CODE=$?
+ audio_settings restore --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
+ exit $EXIT_CODE
+_purpose:
+ Dock USB Type-C HDMI audio interface verification
+_steps:
+ 1. Plug an external HDMI device with sound on a USB Type-C port using a "USB Typce-C to HDMI" adapter on Dock (use only one HDMI/DisplayPort/Thunderbolt interface at a time for this test)
+ 2. Go to the Sound settings and make sure the correct Output is selected
+ 3. Click the Test button
+_verification:
+ Did you hear the sound from the HDMI device?
+
+id: dock/audio-playback-type-c-displayport
+category_id: dock-audio
+depends: dock/cold-plug
+requires:
+ device.category == 'AUDIO'
+ package.name == 'alsa-base'
+ package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
+ package.name == 'pulseaudio-utils'
+_summary: HDMI audio test
+plugin: user-interact-verify
+flags: also-after-suspend-manual
+estimated_duration: 30.0
+command:
+ audio_settings store --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
+ audio_settings set --verbose --device=hdmi --volume=50
+ gst_pipeline_test -t 2 --device hdmi 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink'
+ EXIT_CODE=$?
+ audio_settings restore --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
+ exit $EXIT_CODE
+_purpose:
+ Dock USB Type-C Displayport audio interface verification
+_steps:
+ 1. Plug an external Displayport device with sound on a USB Type-C port using a "USB Typce-C to Displayport" adapter on Dock (use only one HDMI/DisplayPort/Thunderbolt interface at a time for this test)
+ 2. Go to the Sound settings and make sure the correct Output is selected
+ 3. Click the Test button
+_verification:
+ Did you hear the sound from the Displayport device?
+
+id: dock/audio-playback-thunderbolt3
+category_id: dock-audio
+depends: dock/cold-plug
+imports: from com.canonical.plainbox import manifest
+requires:
+ device.category == 'AUDIO'
+ package.name == 'alsa-base'
+ package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
+ package.name == 'pulseaudio-utils'
+ manifest.has_thunderbolt3 == 'True'
+_summary: DisplayPort audio test
+plugin: user-interact-verify
+flags: also-after-suspend-manual
+estimated_duration: 30.0
+command:
+ audio_settings store --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
+ audio_settings set --verbose --device=hdmi --volume=50
+ gst_pipeline_test -t 2 --device hdmi 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink'
+ EXIT_CODE=$?
+ audio_settings restore --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
+ exit $EXIT_CODE
+_purpose:
+ Dock Thunderbolt3 audio interface verification
+_steps:
+ 1. Plug an external Thunderbolt3 device with sound to the dock (use only one HDMI/DisplayPort/Thunderbolt3 interface at a time for this test)
+ 2. Go to the Sound settings and make sure the correct Output is selected
+ 3. Click the Test button
+_verification:
+ Did you hear the sound from the Thunderbolt3 device?
+
+
id: dock/audio-playback-headphones
category_id: dock-audio
plugin: user-interact-verify
+flags: also-after-suspend-manual
estimated_duration: 30.0
_summary: Headphones output test
depends: dock/audio-list-devices
@@ -292,7 +398,8 @@ _purpose:
(Skip this test if there is no headphone connector on the dock)
_steps:
1. Connect a pair of headphones to the dock
- 2. Click the Test button to play a sound to your audio device
+ 2. Go to the Sound settings and make sure the correct Output is selected
+ 3. Click the Test button to play a sound to your audio device
_verification:
Did you hear a sound through the headphones and did the sound play without any distortion, clicks or other strange noises from your headphones?
@@ -300,6 +407,7 @@ plugin: user-interact-verify
category_id: dock-audio
id: dock/audio-alsa-record-playback-external
estimated_duration: 30.0
+flags: also-after-suspend-manual
_summary: External microphone plugged to the dock to record sound test
depends: dock/audio-playback-headphones
requires:
@@ -319,8 +427,9 @@ _purpose:
(Skip this test if the dock does not have a microphone connector)
_steps:
1. Connect a microphone to the dock's microphone port
- 2. Click "Test", then speak into the external microphone
- 3. After a few seconds, your speech will be played back to you
+ 2. Go to the Sound settings and make sure the correct Output is selected
+ 3. Click "Test", then speak into the external microphone
+ 4. After a few seconds, your speech will be played back to you
_verification:
Did you hear your speech played back?
@@ -883,6 +992,27 @@ _description:
Did a notification show and was the connection correctly established?
plugin: user-interact
+id: dock/hotplug-usb-insert
+category_id: dock-hotplug
+depends: dock/hot-plug
+estimated_duration: 10.0
+_summary: USB drive insertion test
+command: removable_storage_watcher insert usb
+_purpose:
+ This test will check that the system correctly detects the insertion of
+ a USB storage device plugged on the dock
+_steps:
+ 1. Click "Test" and insert a USB storage device, preferably a HDD,
+ in one of the dock's port.
+ Although a USB pen drive may be used it might cause performance
+ related tests to fail. (Note: this test will time-out after 20
+ seconds.)
+ 2. Do not unplug the device after the test.
+_verification:
+ The verification of this test is automated. Do not change the
+ automatically selected result.
+
+plugin: user-interact
id: dock/hotplug-usb3-insert
category_id: dock-hotplug
depends: dock/hot-plug
@@ -903,6 +1033,17 @@ _verification:
automatically selected result.
plugin: shell
+id: dock/hotplug-usb-storage-automated
+category_id: dock-hotplug
+depends: dock/hotplug-usb-insert
+user: root
+estimated_duration: 45.0
+_summary: USB drive storage test
+command: removable_storage_test -s 268400000 usb
+_description:
+ This test is automated and executes after the dock/usb_insert test is run.
+
+plugin: shell
id: dock/hotplug-usb3-storage-automated
category_id: dock-hotplug
depends: dock/hotplug-usb3-insert
@@ -914,6 +1055,23 @@ _description:
This test is automated and executes after the dock/usb3_insert test is run.
plugin: user-interact
+id: dock/hotplug-usb-remove
+category_id: dock-hotplug
+depends: dock/hotplug-usb-insert
+estimated_duration: 10.0
+_summary: USB drive removal test
+command: removable_storage_watcher remove usb
+_purpose:
+ This test will check that the system correctly detects the removal of
+ a USB storage device
+_steps:
+ 1. Click "Test" and remove the USB device from the dock.
+ (Note: this test will time-out after 20 seconds.)
+_verification:
+ The verification of this test is automated. Do not change the
+ automatically selected result.
+
+plugin: user-interact
id: dock/hotplug-usb3-remove
category_id: dock-hotplug
depends: dock/hotplug-usb3-insert
@@ -930,35 +1088,117 @@ _verification:
The verification of this test is automated. Do not change the
automatically selected result.
-id: dock/hotplug-monitor-displayport
+id: dock/hotplug-playback-type-c-displayport
category_id: dock-hotplug
depends: dock/hot-plug
-estimated_duration: 120.0
-_summary: DisplayPort test on the dock
-plugin: manual
+requires:
+ device.category == 'AUDIO'
+ package.name == 'alsa-base'
+ package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
+ package.name == 'pulseaudio-utils'
+_summary: HDMI audio test
+plugin: user-interact-verify
+flags: also-after-suspend-manual
+estimated_duration: 30.0
+command:
+ audio_settings store --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
+ audio_settings set --verbose --device=hdmi --volume=50
+ gst_pipeline_test -t 2 --device hdmi 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink'
+ EXIT_CODE=$?
+ audio_settings restore --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
+ exit $EXIT_CODE
_purpose:
- This test will check the DisplayPort(s) on the dock after hot plugged in.
+ Dock USB Type-C Displayport audio interface verification
_steps:
- Skip this test if the dock does not have a DisplayPort.
- 1. Connect a display (if not already connected) to the DisplayPort on the dock
- 2. Repeat step 1 for each additional DisplayPorts, if any
+ 1. Plug an external Displayport device with sound on a USB Type-C port using a "USB Typce-C to Displayport" adapter on Dock (use only one HDMI/DisplayPort/Thunderbolt interface at a time for this test)
+ 2. Go to the Sound settings and make sure the correct Output is selected
+ 3. Click the Test button
_verification:
- Was the desktop displayed correctly on both screens?
+ Did you hear the sound from the Displayport device?
-id: dock/hotplug-monitor-hdmi
+id: dock/hotplug-playback-thumderbolt3
category_id: dock-hotplug
depends: dock/hot-plug
-estimated_duration: 120.0
-_summary: HDMI port test on the dock
-plugin: manual
+requires:
+ device.category == 'AUDIO'
+ package.name == 'alsa-base'
+ package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
+ package.name == 'pulseaudio-utils'
+_summary: HDMI audio test
+plugin: user-interact-verify
+flags: also-after-suspend-manual
+estimated_duration: 30.0
+command:
+ audio_settings store --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
+ audio_settings set --verbose --device=hdmi --volume=50
+ gst_pipeline_test -t 2 --device hdmi 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink'
+ EXIT_CODE=$?
+ audio_settings restore --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
+ exit $EXIT_CODE
_purpose:
- This test will check the HDMI port(s) on the dock after hot plugged in.
+ Dock Thunderbolt3 audio interface verification
_steps:
- Skip this test if the dock does not have a HDMI port.
- 1. Connect a display (if not already connected) to the HDMI port on the dock
- 2. Repeat step 1 for each additional HDMI port, if any
+ 1. Plug an external Thunderbolt3 device with sound (Use only one HDMI/DisplayPort/Thunderbolt3 interface at a time for this test)
+ 2. Go to the Sound settings and make sure the correct Output is selected
+ 3. Click the Test button
_verification:
- Was the desktop displayed correctly on both screens?
+ Did you hear the sound from the HDMI device?
+
+id: dock/hotplug-playback-displayport
+category_id: dock-hotplug
+depends: dock/hot-plug
+requires:
+ device.category == 'AUDIO'
+ package.name == 'alsa-base'
+ package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
+ package.name == 'pulseaudio-utils'
+_summary: DisplayPort audio test
+plugin: user-interact-verify
+flags: also-after-suspend-manual
+estimated_duration: 30.0
+command:
+ audio_settings store --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
+ audio_settings set --verbose --device=hdmi --volume=50
+ gst_pipeline_test -t 2 --device hdmi 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink'
+ EXIT_CODE=$?
+ audio_settings restore --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
+ exit $EXIT_CODE
+_purpose:
+ Dock DisplayPort audio interface verification
+_steps:
+ 1. Plug an external DisplayPort device with sound to the dock (use only one HDMI/DisplayPort/Thunderbolt interface at a time for this test)
+ 2. Go to the Sound settings and make sure the correct Output is selected
+ 3. Click the Test button
+_verification:
+ Did you hear the sound from the DisplayPort device?
+
+id: dock/hotplug-playback-hdmi
+category_id: dock-hotplug
+depends: dock/hot-plug
+requires:
+ device.category == 'AUDIO'
+ package.name == 'alsa-base'
+ package.name == 'gir1.2-gst-plugins-base-0.10' or package.name == 'gir1.2-gst-plugins-base-1.0'
+ package.name == 'pulseaudio-utils'
+_summary: HDMI audio test
+plugin: user-interact-verify
+flags: also-after-suspend-manual
+estimated_duration: 30.0
+command:
+ audio_settings store --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
+ audio_settings set --verbose --device=hdmi --volume=50
+ gst_pipeline_test -t 2 --device hdmi 'audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! autoaudiosink'
+ EXIT_CODE=$?
+ audio_settings restore --verbose --file=$PLAINBOX_SESSION_SHARE/pulseaudio_settings
+ exit $EXIT_CODE
+_purpose:
+ Dock HDMI audio interface verification
+_steps:
+ 1. Plug an external HDMI device with sound to the dock (use only one HDMI/DisplayPort/Thunderbolt interface at a time for this test)
+ 2. Go to the Sound settings and make sure the correct Output is selected
+ 3. Click the Test button
+_verification:
+ Did you hear the sound from the HDMI device?
### Network ###
@@ -1234,6 +1474,41 @@ _verification:
Was the desktop displayed correctly on the screen connected
using a "USB Type-C to VGA" adapter in every mode?
+id: dock/monitor-dual-head-after-suspend
+category_id: dock-display
+depends: suspend/suspend_advanced
+estimated_duration: 120.0
+_summary: Dual monitors test while docked after suspend
+plugin: manual
+_purpose:
+ This test verifies that dual-monitor output works using the dock after suspend. You will need two external monitors to perform this test. Depends on the specification of the device to use 4K monitor or FHD monitor.
+_steps:
+ Skip this test if your video card or the dock do not support multiple monitors.
+ 1. If your dock provides more than one monitor outputs, connect two monitors
+ 2. Open the "Displays" tool (open the dash and search for "Displays")
+ 3. Configure your output to provide one desktop across all the monitors
+ 4. Open any application and drag its window from one monitor to the next.
+_verification:
+ Was the stretched desktop displayed correctly across all the screens?
+
+id: dock/monitor-triple-head-after-suspend
+category_id: dock-display
+depends: suspend/suspend_advanced
+estimated_duration: 120.0
+_summary: Tripple monitors test while docked after suspend
+plugin: manual
+_purpose:
+ This test verifies that triple-monitor output works using the dock after suspend. You will need three external monitors to perform this test. Depends on the specification of the device to use 4K monitor or FHD monitor.
+_steps:
+ Skip this test if your video card or the dock do not support multiple monitors.
+ 1. If your dock provides more than one monitor outputs, connect three monitors
+ 2. Open the "Displays" tool (open the dash and search for "Displays")
+ 3. Turn off internal monitor
+ 4. Configure your output to provide one desktop across all the monitors
+ 5. Open any application and drag its window from one monitor to the next.
+_verification:
+ Was the stretched desktop displayed correctly across all the screens?
+
### Suspend, Undocked, Resume ###
id: dock/suspend-undock-resume
@@ -1650,52 +1925,84 @@ _verification:
Are all kinds of discs properly written?
plugin: user-interact
-id: dock/thunderbolt-insert
+id: dock/thunderbolt3-insert
category_id: dock
estimated_duration: 40.0
depends: dock/cold-plug
+imports: from com.canonical.plainbox import manifest
+requires: manifest.has_thunderbolt3 == 'True'
+flags: also-after-suspend-manual
command: removable_storage_watcher insert --timeout 40 scsi
-_summary: Thunderbolt storage insertion detection
+_summary: Thunderbolt3 storage insertion detection
_purpose:
- This test will check if the connection of a Thunderbolt HDD to the dock could be detected
+ This test will check if the connection of a Thunderbolt3 HDD to the dock could be detected
_steps:
1. Click 'Test' to begin the test. This test will
timeout and fail if the insertion has not been detected within 40 seconds.
- 2. Plug a Thunderbolt HDD into an available Thunderbolt port on the dock;
+ 2. Plug a Thunderbolt3 HDD into an available Thunderbolt3 port on the dock;
if it's not mounted automatically, please click the HDD icon to mount it.
_verification:
The verification of this test is automated. Do not change the automatically
selected result
plugin: shell
-id: dock/thunderbolt-storage-test
+id: dock/thunderbolt3-storage-test
category_id: dock
estimated_duration: 45.0
user: root
-depends: dock/thunderbolt-insert
+depends: dock/thunderbolt3-insert
+imports: from com.canonical.plainbox import manifest
+requires: manifest.has_thunderbolt3 == 'True'
+flags: also-after-suspend-manual
command: removable_storage_test -s 268400000 scsi
-_summary: Thunderbolt storage test
+_summary: Thunderbolt3 storage test
_description:
This is an automated test which performs read/write operations on an attached
Thunderbolt HDD
plugin: user-interact
-id: dock/thunderbolt-remove
+id: dock/thunderbolt3-remove
category_id: dock
estimated_duration: 20.0
-depends: dock/thunderbolt-insert
+depends: dock/thunderbolt3-insert
+imports: from com.canonical.plainbox import manifest
+requires: manifest.has_thunderbolt3 == 'True'
+flags: also-after-suspend-manual
command: removable_storage_watcher remove scsi
-_summary: Thunderbolt storage removal detection
+_summary: Thunderbolt3 storage removal detection
_purpose:
- This test will check the system can detect the removal of a Thunderbolt HDD
+ This test will check the system can detect the removal of a Thunderbolt3 HDD
_steps:
1. Click 'Test' to begin the test. This test will timeout and fail if
the removal has not been detected within 20 seconds.
- 2. Remove the previously attached Thunderbolt HDD from the Thunderbolt port.
+ 2. Remove the previously attached Thunderbolt3 HDD from the Thunderbolt3 port.
_verification:
The verification of this test is automated. Do not change the automatically
selected result
+plugin: user-interact-verify
+category_id: dock
+id: dock/thunderbolt3-daisy-chain
+flags: also-after-suspend-manual
+estimated_duration: 45.0
+imports: from com.canonical.plainbox import manifest
+requires: manifest.has_thunderbolt3 == 'True'
+command: removable_storage_test -s 268400000 scsi
+_summary: Daisy-chain testing for Thunderbolt 3 storage and display device
+_description:
+_purpose:
+ This test will check if your system can support daisy-chaining of a storage
+ and a monitor over Thunderbolt 3 port
+ _steps:
+ 1. Connect your Thunderbolt monitor to your systems
+ 2. Connect and mount your Thunderbolt HDD to another Thunderbolt 3 port of the
+ monitor (you can do this with HDD first as well)
+ 3. Click 'Test' to perform the storage test on the Thunderbolt HDD
+ _verification:
+ 1. The verification for storage is automated, please select the result combine
+ with the result for the display.
+ 2. Was the desktop displayed correctly on the Thunderbolt-connected screen?
+
### Hot Plug after suspend ###
id: dock/hot-plug-after-suspend
@@ -1728,6 +2035,27 @@ _description:
Did a notification show and was the connection correctly established?
plugin: user-interact
+id: dock/hotplug-usb-insert-after-suspend
+category_id: dock-hotplug
+depends: dock/hot-plug-after-suspend
+estimated_duration: 10.0
+_summary: USB drive insertion after resuming
+command: removable_storage_watcher insert usb
+_purpose:
+ This test will check that the system correctly detects the insertion of
+ a USB storage device plugged on the dock after suspend
+_steps:
+ 1. Click "Test" and insert a USB storage device, preferably a HDD,
+ in one of the dock's port.
+ Although a USB pen drive may be used it might cause performance
+ related tests to fail. (Note: this test will time-out after 20
+ seconds.)
+ 2. Do not unplug the device after the test.
+_verification:
+ The verification of this test is automated. Do not change the
+ automatically selected result.
+
+plugin: user-interact
id: dock/hotplug-usb3-insert-after-suspend
category_id: dock-hotplug
depends: dock/hot-plug-after-suspend
@@ -1748,6 +2076,17 @@ _verification:
automatically selected result.
plugin: shell
+id: dock/hotplug-usb-storage-automated-after-suspend
+category_id: dock-hotplug
+depends: dock/hotplug-usb-insert-after-suspend
+user: root
+estimated_duration: 45.0
+_summary: USB drive storage test after resuming
+command: removable_storage_test -s 268400000 usb
+_description:
+ This test is automated and executes after the dock/usb-insert test is run.
+
+plugin: shell
id: dock/hotplug-usb3-storage-automated-after-suspend
category_id: dock-hotplug
depends: dock/hotplug-usb3-insert-after-suspend
@@ -1759,6 +2098,23 @@ _description:
This test is automated and executes after the dock/usb3_insert test is run.
plugin: user-interact
+id: dock/hotplug-usb-remove-after-suspend
+category_id: dock-hotplug
+depends: dock/hotplug-usb-insert-after-suspend
+estimated_duration: 10.0
+_summary: USB drive removal after resuming
+command: removable_storage_watcher remove usb
+_purpose:
+ This test will check that the system correctly detects the removal of
+ a USB storage device after suspend
+_steps:
+ 1. Click "Test" and remove the USB device from the dock.
+ (Note: this test will time-out after 20 seconds.)
+_verification:
+ The verification of this test is automated. Do not change the
+ automatically selected result.
+
+plugin: user-interact
id: dock/hotplug-usb3-remove-after-suspend
category_id: dock-hotplug
depends: dock/hotplug-usb3-insert-after-suspend
@@ -1775,36 +2131,6 @@ _verification:
The verification of this test is automated. Do not change the
automatically selected result.
-id: dock/hotplug-monitor-displayport-after-suspend
-category_id: dock-hotplug
-depends: dock/hot-plug-after-suspend
-estimated_duration: 120.0
-_summary: DisplayPort test on the dock
-plugin: manual
-_purpose:
- This test will check the DisplayPort(s) on the dock after hot plugged in.
-_steps:
- Skip this test if the dock does not have a DisplayPort.
- 1. Connect a display (if not already connected) to the DisplayPort on the dock
- 2. Repeat step 1 for each additional DisplayPorts, if any
-_verification:
- Was the desktop displayed correctly on both screens?
-
-id: dock/hotplug-monitor-hdmi-after-suspend
-category_id: dock-hotplug
-depends: dock/hot-plug-after-suspend
-estimated_duration: 120.0
-_summary: HDMI port test on the dock
-plugin: manual
-_purpose:
- This test will check the HDMI port(s) on the dock after hot plugged in.
-_steps:
- Skip this test if the dock does not have a HDMI port.
- 1. Connect a display (if not already connected) to the HDMI port on the dock
- 2. Repeat step 1 for each additional HDMI port, if any
-_verification:
- Was the desktop displayed correctly on both screens?
-
### Suspend, Undocked, Docked, Resume ###
id: dock/suspend-dock-resume
@@ -1838,6 +2164,27 @@ _description:
Did a notification show and was the connection correctly established?
plugin: user-interact
+id: dock/usb-insert-after-suspend-dock-resume
+category_id: suspend-dock-resume
+depends: dock/suspend-dock-resume
+estimated_duration: 10.0
+_summary: USB drive insertion after resuming
+command: removable_storage_watcher insert usb
+_purpose:
+ This test will check that the system correctly detects the insertion of
+ a USB storage device plugged on the dock after suspend
+_steps:
+ 1. Click "Test" and insert a USB storage device, preferably a HDD,
+ in one of the dock's port.
+ Although a USB pen drive may be used it might cause performance
+ related tests to fail. (Note: this test will time-out after 20
+ seconds.)
+ 2. Do not unplug the device after the test.
+_verification:
+ The verification of this test is automated. Do not change the
+ automatically selected result.
+
+plugin: user-interact
id: dock/usb3-insert-after-suspend-dock-resume
category_id: suspend-dock-resume
depends: dock/suspend-dock-resume
@@ -1858,6 +2205,17 @@ _verification:
automatically selected result.
plugin: shell
+id: dock/usb-storage-automated-after-suspend-dock-resume
+category_id: suspend-dock-resume
+depends: dock/usb-insert-after-suspend-dock-resume
+user: root
+estimated_duration: 45.0
+_summary: USB drive storage test after resuming
+command: removable_storage_test -s 268400000 usb
+_description:
+ This test is automated and executes after the dock/usb-insert test is run.
+
+plugin: shell
id: dock/usb3-storage-automated-after-suspend-dock-resume
category_id: suspend-dock-resume
depends: dock/usb3-insert-after-suspend-dock-resume
@@ -1869,6 +2227,23 @@ _description:
This test is automated and executes after the dock/usb3_insert test is run.
plugin: user-interact
+id: dock/usb-remove-after-suspend-dock-resume
+category_id: suspend-dock-resume
+depends: dock/usb-insert-after-suspend-dock-resume
+estimated_duration: 10.0
+_summary: USB drive removal after resuming
+command: removable_storage_watcher remove usb
+_purpose:
+ This test will check that the system correctly detects the removal of
+ a USB storage device after suspend
+_steps:
+ 1. Click "Test" and remove the USB device from the dock.
+ (Note: this test will time-out after 20 seconds.)
+_verification:
+ The verification of this test is automated. Do not change the
+ automatically selected result.
+
+plugin: user-interact
id: dock/usb3-remove-after-suspend-dock-resume
category_id: suspend-dock-resume
depends: dock/usb3-insert-after-suspend-dock-resume
@@ -1914,3 +2289,13 @@ _steps:
2. Repeat step 1 for each additional HDMI port, if any
_verification:
Was the desktop displayed correctly on both screens?
+
+id: dock/mac-address-passthrough
+category_id: dock
+plugin: shell
+user: root
+command: mac-passthrough.py
+_description: Check dock MAC address pass-through function, please make sure following items before running this test:
+ 1. Pass-through mac address is flashed in BIOS
+ 2. MAC address pass-through is enabled in BIOS settings
+ 3. Dock is connected
diff --git a/units/dock/test-plan.pxu b/units/dock/test-plan.pxu
new file mode 100644
index 0000000..4c906ac
--- /dev/null
+++ b/units/dock/test-plan.pxu
@@ -0,0 +1,251 @@
+id: dock-cert-full
+unit: test plan
+_name: Dock Cert tests
+_description:
+ Cert tests for dock devices.
+include:
+nested_part:
+ dock-cold-plug-cert
+ dock-hot-plug
+
+id: after-suspend-dock-cert-full
+unit: test plan
+_name: Dock Cert tests after suspend
+_description:
+ Cert tests for dock devices.
+include:
+nested_part:
+ after-suspend-dock-cert
+ after-suspend-dock-hot-plug
+ suspend-dock-resume-test
+ suspend-undock-resume-test
+
+id: dock-cold-plug-cert
+unit: test plan
+_name: Dock Cold Plug Cert tests
+_description:
+ Cert tests for dock cold plug.
+include:
+ dock/cold-plug certification-status=blocker
+ dock/power-button certification-status=blocker
+ dock/monitor-displayport certification-status=blocker
+ dock/audio-playback-displayport certification-status=blocker
+ dock/monitor-dvi certification-status=blocker
+ dock/monitor-hdmi certification-status=blocker
+ dock/audio-playback-hdmi certification-status=blocker
+ dock/monitor-vga certification-status=blocker
+ dock/monitor_type-c_displayport certification-status=blocker
+ dock/audio-playback-type-c-displayport certification-status=blocker
+ dock/monitor_type-c_hdmi certification-status=blocker
+ dock/audio-playback-type-c-hdmi certification-status=blocker
+ dock/monitor_type-c_vga certification-status=blocker
+ dock/keys-video-out certification-status=blocker
+ dock/monitor-dual-head certification-status=blocker
+ dock/monitor-triple-head
+ dock/audio-alsa-info-collect
+ dock/audio-alsa-info-attachment
+ dock/audio-list-devices
+ dock/audio-playback-headphones certification-status=blocker
+ dock/audio-alsa-record-playback-external certification-status=blocker
+ dock/audio-external-linein
+ dock/audio-external-lineout
+ dock/networking-gateway-ping certification-status=blocker
+ dock/networking-ntp certification-status=blocker
+ dock/mac-address-passthrough
+ dock/usb-HID certification-status=blocker
+ dock/usb-insert certification-status=blocker
+ dock/usb-storage-automated certification-status=blocker
+ dock/usb-remove certification-status=blocker
+ dock/usb3-insert certification-status=blocker
+ dock/usb3-storage-automated certification-status=blocker
+ dock/usb3-remove certification-status=blocker
+ dock/usb-c/c-to-a-adapter/insert
+ dock/usb-c/c-to-a-adapter/storage-automated
+ dock/usb-c/c-to-a-adapter/remove
+ dock/usb-c/insert
+ dock/usb-c/storage-automated
+ dock/usb-c/remove
+ dock/battery-charging certification-status=blocker
+ dock/monitor-thunderbolt3
+ dock/audio-playback-thunderbolt3
+ dock/thunderbolt3-insert
+ dock/thunderbolt3-storage-test
+ dock/thunderbolt3-remove
+ dock/thunderbolt3-daisy-chain
+ dock/network-before-suspend certification-status=blocker
+ dock/audio-before-suspend certification-status=blocker
+
+id: dock-hot-plug
+unit: test plan
+_name: Dock Hot Plug tests
+_description:
+ Tests for dock cold plug.
+include:
+ dock/hot-plug
+ dock/hotplug-ethernet
+ dock/hotplug-usb-insert
+ dock/hotplug-usb-storage-automated
+ dock/hotplug-usb-remove
+ dock/hotplug-usb3-insert
+ dock/hotplug-usb3-storage-automated
+ dock/hotplug-usb3-remove
+ dock/hotplug-playback-displayport
+ dock/hotplug-playback-hdmi
+ dock/hotplug-playback-type-c-displayport
+ dock/hotplug-playback-thumderbolt3
+
+id: after-suspend-dock-cert
+unit: test plan
+_name: After suspend Dock Cert tests
+_description:
+ Cert tests for the dock after suspend.
+include:
+ # Do power on/off to clean up the test environment
+ power-management/poweroff certification-status=blocker
+ power-management/poweroff-log-attach
+ suspend/suspend_advanced certification-status=blocker
+ dock/power-button-after-suspend certification-status=blocker
+ dock/networking-gateway-ping-after-suspend certification-status=blocker
+ dock/usb-HID-after-suspend certification-status=blocker
+ dock/usb-insert-after-suspend certification-status=blocker
+ dock/usb-storage-automated-after-suspend certification-status=blocker
+ dock/usb-remove-after-suspend certification-status=blocker
+ dock/usb3-insert-after-suspend certification-status=blocker
+ dock/usb3-storage-automated-after-suspend certification-status=blocker
+ dock/usb3-remove-after-suspend certification-status=blocker
+ dock/usb-c/c-to-a-adapter/insert-after-suspend
+ dock/usb-c/c-to-a-adapter/storage-automated-after-suspend
+ dock/usb-c/c-to-a-adapter/remove-after-suspend
+ dock/usb-c/insert-after-suspend
+ dock/usb-c/storage-automated-after-suspend
+ dock/usb-c/remove-after-suspend
+ after-suspend-manual-dock/audio-playback-headphones certification-status=blocker
+ after-suspend-manual-dock/audio-alsa-record-playback-external certification-status=blocker
+ dock/monitor-displayport-after-suspend certification-status=blocker
+ after-suspend-manual-dock/audio-playback-displayport certification-status=blocker
+ dock/monitor-dvi-after-suspend certification-status=blocker
+ dock/monitor-hdmi-after-suspend certification-status=blocker
+ after-suspend-manual-dock/audio-playback-hdmi certification-status=blocker
+ dock/monitor-vga-after-suspend certification-status=blocker
+ dock/monitor_type-c_displayport-after-suspend
+ after-suspend-manual-dock/audio-playback-type-c-displayport
+ dock/monitor_type-c_hdmi-after-suspend
+ dock/monitor_type-c_vga-after-suspend
+ after-suspend-manual-dock/thunderbolt3-insert
+ after-suspend-manual-dock/thunderbolt3-storage-test
+ after-suspend-manual-dock/thunderbolt3-remove
+ after-suspend-manual-dock/thunderbolt3-daisy-chain
+ after-suspend-manual-dock/audio-playback-thunderbolt3
+ dock/monitor-dual-head-after-suspend certification-status=blocker
+ dock/monitor-triple-head-after-suspend
+
+id: after-suspend-dock-hot-plug
+unit: test plan
+_name: After suspend Dock Hot-plug tests
+_description:
+ Tests for after suspend dock hot-plug.
+include:
+ dock/hot-plug-after-suspend
+ dock/hotplug-ethernet-after-suspend
+ dock/hotplug-usb-insert-after-suspend
+ dock/hotplug-usb-storage-automated-after-suspend
+ dock/hotplug-usb-remove-after-suspend
+ dock/hotplug-usb3-insert-after-suspend
+ dock/hotplug-usb3-storage-automated-after-suspend
+ dock/hotplug-usb3-remove-after-suspend
+ dock/hotplug-monitor-displayport-after-suspend
+ dock/hotplug-monitor-hdmi-after-suspend
+ after-suspend-manual-dock/hotplug-playback-displayport
+ after-suspend-manual-dock/hotplug-playback-hdmi
+ after-suspend-manual-dock/hotplug-playback-type-c-displayport
+ after-suspend-manual-dock/hotplug-playback-thumderbolt3
+
+id: suspend-dock-resume-test
+unit: test plan
+_name: Suspend dock resume tests
+_description:
+ Tests for suspend dock then resume it.
+include:
+ dock/suspend-dock-resume
+ dock/ethernet-after-suspend-dock-resume
+ dock/usb-insert-after-suspend-dock-resume
+ dock/usb-storage-automated-after-suspend-dock-resume
+ dock/usb-remove-after-suspend-dock-resume
+ dock/usb3-insert-after-suspend-dock-resume
+ dock/usb3-storage-automated-after-suspend-dock-resume
+ dock/usb3-remove-after-suspend-dock-resume
+ dock/monitor-displayport-after-suspend-dock-resume
+ dock/monitor-hdmi-after-suspend-dock-resume
+
+id: suspend-undock-resume-test
+unit: test plan
+_name: After suspend Dock Hot-plug Cert tests
+_description:
+ Test for after susepnd then undock then resume the system.
+include:
+ dock/suspend-undock-resume
+
+id: dock-cold-plug-cert-blockers
+unit: test plan
+_name: Dock Cold Plug Cert blocker tests
+_description:
+ Cert blocker tests for dock cold plug.
+include:
+ dock/cold-plug certification-status=blocker
+ dock/power-button certification-status=blocker
+ dock/monitor-displayport certification-status=blocker
+ dock/audio-playback-displayport certification-status=blocker
+ dock/monitor-dvi certification-status=blocker
+ dock/monitor-hdmi certification-status=blocker
+ dock/audio-playback-hdmi certification-status=blocker
+ dock/monitor-vga certification-status=blocker
+ dock/monitor_type-c_displayport certification-status=blocker
+ dock/dock_playback_type-c_displayport certification-status=blocker
+ dock/monitor_type-c_hdmi certification-status=blocker
+ dock/dock_playback_type-c_hdmi certification-status=blocker
+ dock/monitor_type-c_vga certification-status=blocker
+ dock/keys-video-out certification-status=blocker
+ dock/monitor-dual-head certification-status=blocker
+ dock/audio-playback-headphones certification-status=blocker
+ dock/audio-alsa-record-playback-external certification-status=blocker
+ dock/networking-gateway-ping certification-status=blocker
+ dock/networking-ntp certification-status=blocker
+ dock/usb-HID certification-status=blocker
+ dock/usb-insert certification-status=blocker
+ dock/usb-storage-automated certification-status=blocker
+ dock/usb-remove certification-status=blocker
+ dock/usb3-insert certification-status=blocker
+ dock/usb3-storage-automated certification-status=blocker
+ dock/usb3-remove certification-status=blocker
+ dock/battery-charging certification-status=blocker
+ dock/network-before-suspend certification-status=blocker
+ dock/audio-before-suspend certification-status=blocker
+
+id: after-suspend-dock-cert-blockers
+unit: test plan
+_name: After suspend Dock Cert blocker tests
+_description:
+ Cert blocker tests for the dock after suspend.
+include:
+ # Do power on/off to clean up the test environment
+ power-management/poweroff certification-status=blocker
+ power-management/poweroff-log-attach
+ suspend/suspend_advanced certification-status=blocker
+ dock/power-button-after-suspend certification-status=blocker
+ dock/networking-gateway-ping-after-suspend certification-status=blocker
+ after-suspend-manual-dock/audio-playback-headphones certification-status=blocker
+ after-suspend-manual-dock/audio-alsa-record-playback-external certification-status=blocker
+ dock/usb-HID-after-suspend certification-status=blocker
+ dock/usb-insert-after-suspend certification-status=blocker
+ dock/usb-storage-automated-after-suspend certification-status=blocker
+ dock/usb-remove-after-suspend certification-status=blocker
+ dock/usb3-insert-after-suspend certification-status=blocker
+ dock/usb3-storage-automated-after-suspend certification-status=blocker
+ dock/usb3-remove-after-suspend certification-status=blocker
+ dock/monitor-displayport-after-suspend certification-status=blocker
+ after-suspend-manual-dock/audio-playback-displayport certification-status=blocker
+ dock/monitor-dvi-after-suspend certification-status=blocker
+ dock/monitor-hdmi-after-suspend certification-status=blocker
+ after-suspend-manual-dock/audio-playback-hdmi certification-status=blocker
+ dock/monitor-vga-after-suspend certification-status=blocker
+ dock/monitor-dual-head-after-suspend certification-status=blocker
diff --git a/units/gpgpu/jobs.pxu b/units/gpgpu/jobs.pxu
index 2c823a0..e65d0be 100644
--- a/units/gpgpu/jobs.pxu
+++ b/units/gpgpu/jobs.pxu
@@ -5,4 +5,4 @@ estimated_duration: 300
requires:
package.name == 'cuda'
_summary: GPGPU stress testing
-command: cd /opt/gpu-burn/ && ./gpu_burn 1800
+command: cd /opt/gpu-burn/ && ./gpu_burn 14400 | grep -v -e '^[[:space:]]*$' -e "errors:" -e "Summary at"
diff --git a/units/graphics/jobs.pxu b/units/graphics/jobs.pxu
index 13d9afe..fba1f7e 100644
--- a/units/graphics/jobs.pxu
+++ b/units/graphics/jobs.pxu
@@ -405,7 +405,7 @@ command:
totem --fullscreen $PLAINBOX_PROVIDER_DATA/video/Ogg_Theora_Video.ogv 2>/dev/null &
set -o pipefail
sleep 15 && camera_test still --device=/dev/external_webcam -f $PLAINBOX_SESSION_SHARE/screenshot_fullscreen_video_{index}.jpg -q 2>&1 | ansi_parser
- sleep 5 && totem --quit 2>/dev/null
+ sleep 5 && pkill totem
gsettings set org.gnome.totem repeat false
_summary: Test FSV screenshot for {vendor} {product}
_description:
diff --git a/units/i2c/jobs.pxu b/units/i2c/jobs.pxu
index db90509..a928917 100644
--- a/units/i2c/jobs.pxu
+++ b/units/i2c/jobs.pxu
@@ -16,9 +16,9 @@ _steps:
detected there's at least one i2c bus.
command:
if [ -z ${I2C_BUS_NUMBER+x} ]; then
- i2c_driver_test bus
+ i2c_driver_test.py bus
else
- i2c_driver_test bus -b $I2C_BUS_NUMBER
+ i2c_driver_test.py bus -b $I2C_BUS_NUMBER
fi
user: root
plugin: shell
@@ -37,7 +37,7 @@ _steps:
1. This task is fully automatic, test will pass if there's at least one
i2c device detected on any I2C bus.
command:
- i2c_driver_test device
+ i2c_driver_test.py device
user: root
plugin: shell
category_id: i2c
diff --git a/units/info/jobs.pxu b/units/info/jobs.pxu
index e7ac3ea..e1d56ae 100644
--- a/units/info/jobs.pxu
+++ b/units/info/jobs.pxu
@@ -103,7 +103,7 @@ category_id: com.canonical.plainbox::info
user: root
command:
if [[ -v SNAP ]]; then
- checkbox-support-lsusb -f $SNAP/checkbox-runtime/var/lib/usbutils/usb.ids
+ checkbox-support-lsusb -f $CHECKBOX_RUNTIME/var/lib/usbutils/usb.ids
else
lsusb -vv | iconv -t 'utf-8' -c
fi
@@ -218,7 +218,7 @@ plugin: attachment
category_id: com.canonical.plainbox::info
requires:
package.name == 'dkms'
-command: dkms_info --format json
+command: dkms_info.py --format json
_description: Attaches json dumps of installed dkms package information.
_summary: Attaches json dumps of installed dkms package information.
@@ -361,7 +361,7 @@ user: root
estimated_duration: 0.2
_summary: Check existence of recovery partition
_description: Check existence of recovery partition
-command: recovery_info
+command: recovery_info.py
plugin: shell
category_id: com.canonical.plainbox::info
@@ -372,7 +372,7 @@ user: root
estimated_duration: 0.2
_summary: Check the recovery type is dell or not
_description: Check the recovery type is dell or not
-command: recovery_info checktype DELL
+command: recovery_info.py checktype DELL
plugin: attachment
category_id: com.canonical.plainbox::info
@@ -389,7 +389,7 @@ _description:
Example:
image_version: somerville-trusty-amd64-20140620-0
bto_version: A00_dell-bto-trusty-houston-15-A11-iso-20141203-0.iso
-command: recovery_info version
+command: recovery_info.py version
plugin: attachment
category_id: com.canonical.plainbox::info
@@ -404,7 +404,7 @@ _description:
The information include:
- fish packages
- dell recovery stage 2 boot log
-command: recovery_info file bto.xml
+command: recovery_info.py file bto.xml
plugin: attachment
category_id: com.canonical.plainbox::info
@@ -463,7 +463,11 @@ command: network_configs
id: parts_meta_info_attachment
plugin: attachment
category_id: com.canonical.plainbox::info
-command: cat $SNAP/parts_meta_info $SNAP/checkbox-runtime/parts_meta_info || echo "no parts meta info available"
+command:
+ # some top-level snaps don't bother with parts
+ cat $SNAP/parts_meta_info || true
+ # should always have parts info from content snap
+ cat $CHECKBOX_RUNTIME/parts_meta_info
environ: SNAP
estimated_duration: 0.02
_summary: Attaches an information about all parts that constituted this snap
diff --git a/units/info/packaging.pxu b/units/info/packaging.pxu
index 67f18c2..61e26d2 100644
--- a/units/info/packaging.pxu
+++ b/units/info/packaging.pxu
@@ -3,11 +3,6 @@ unit: packaging meta-data
os-id: debian
Depends: python3-debian
-# The dkms_info script requires python3-guacamole package
-unit: packaging meta-data
-os-id: debian
-Depends: python3-guacamole (>= 0.9)
-
# This is for lsblk attachment and disk/detect
unit: packaging meta-data
os-id: debian
diff --git a/units/keys/jobs.pxu b/units/keys/jobs.pxu
index 4402b4c..7bc69a2 100644
--- a/units/keys/jobs.pxu
+++ b/units/keys/jobs.pxu
@@ -277,3 +277,16 @@ _description:
VERIFICATION:
Did the keyboard overhead light key or switch turns on and off the light?
+plugin: manual
+category_id: com.canonical.plainbox::keys
+id: keys/power-button
+estimated_duration: 30.0
+flags: also-after-suspend-manual
+_purpose:
+ This test will test the power button
+_steps:
+ 1. press the power button.
+ 2. press cancel to quit.
+_verification:
+ Did the power management prompt pop up when press power button?
+
diff --git a/units/keys/test-plan.pxu b/units/keys/test-plan.pxu
index 38386ef..87b7fbc 100644
--- a/units/keys/test-plan.pxu
+++ b/units/keys/test-plan.pxu
@@ -24,6 +24,7 @@ include:
keys/wireless certification-status=blocker
keys/keyboard-backlight certification-status=blocker
keys/microphone-mute certification-status=blocker
+ keys/power-button certification-status=blocker
id: keys-cert-automated
unit: test plan
diff --git a/units/led/test-plan.pxu b/units/led/test-plan.pxu
index 40f5697..33c5642 100644
--- a/units/led/test-plan.pxu
+++ b/units/led/test-plan.pxu
@@ -22,9 +22,6 @@ _description:
- led/wireless is redundant given that we have led/wlan and
led/bluetooth already. (Manual)
include:
- led/battery-charged
- led/battery-charging
- led/battery-low
camera/led_.* certification-status=blocker
led/caps-lock certification-status=blocker
led/numeric-keypad certification-status=blocker
@@ -52,9 +49,6 @@ unit: test plan
_name: LED tests (after suspend)
_description: LED tests (after suspend)
include:
- suspend/led_after_suspend/battery-charged
- suspend/led_after_suspend/battery-charging
- suspend/led_after_suspend/battery-low
after-suspend-manual-camera/led_.* certification-status=blocker
suspend/led_after_suspend/caps-lock certification-status=blocker
suspend/led_after_suspend/numeric-keypad certification-status=blocker
diff --git a/units/miscellanea/jobs.pxu b/units/miscellanea/jobs.pxu
index 41c9253..ebc7c4d 100644
--- a/units/miscellanea/jobs.pxu
+++ b/units/miscellanea/jobs.pxu
@@ -150,12 +150,23 @@ command: boot_mode_test secureboot
plugin: shell
category_id: com.canonical.plainbox::miscellanea
estimated_duration: 0.5
+id: miscellanea/reboot_firmware
+requires:
+ cpuinfo.platform in ("i386", "x86_64", "aarch64")
+depends: miscellanea/efi_boot_mode
+_summary: Test that system supports booting into firmware setup utility
+_description:
+ Test that the system supports rebooting into the firmware setup utility.
+command: boot_mode_test reboot_firmware
+
+plugin: shell
+category_id: com.canonical.plainbox::miscellanea
+estimated_duration: 0.5
unit: template
template-resource: model_assertion
template-unit: job
requires:
- executable.name == 'dumpimage'
- executable.name == 'mokutil'
+ executable.name == 'dumpimage' or executable.name == 'mokutil'
id: miscellanea/secure_boot_mode_{gadget}
_summary: Test that {gadget} Ubuntu Core system booted with Secure Boot active
_description:
@@ -190,6 +201,16 @@ command: check-prerelease
plugin: shell
category_id: com.canonical.plainbox::miscellanea
+estimated_duration: 0.5
+id: miscellanea/kernel_taint_test
+_summary: Test that kernel is not tainted
+_description:
+ Test to verify that the kernel is not tainted by out-of-tree
+ drivers, live patches, proprietary modules, etc.
+command: kernel_taint_test
+
+plugin: shell
+category_id: com.canonical.plainbox::miscellanea
id: miscellanea/bmc_info
requires:
package.name == 'ipmitool' or executable.name == 'ipmitool'
diff --git a/units/miscellanea/test-plan.pxu b/units/miscellanea/test-plan.pxu
index 1b119f1..b202727 100644
--- a/units/miscellanea/test-plan.pxu
+++ b/units/miscellanea/test-plan.pxu
@@ -32,7 +32,6 @@ include:
firmware/fwts_uefirtvariable.* certification-status=blocker
miscellanea/oops certification-status=blocker
miscellanea/oops_results.log
- miscellanea/dmitest_client
miscellanea/fan_stress_reaction
bootstrap_include:
fwts
@@ -65,8 +64,10 @@ mandatory_include:
miscellanea/get_maas_version certification-status=blocker
miscellanea/efi_boot_mode certification-status=blocker
miscellanea/secure_boot_mode
+ miscellanea/reboot_firmware
miscellanea/efi_pxeboot
miscellanea/check_prerelease
+ miscellanea/kernel_taint_test
miscellanea/cpus_are_not_samples
miscellanea/ipmi_test certification-status=blocker
miscellanea/bmc_info
diff --git a/units/monitor/jobs.pxu b/units/monitor/jobs.pxu
index df1bb95..c16471d 100644
--- a/units/monitor/jobs.pxu
+++ b/units/monitor/jobs.pxu
@@ -403,17 +403,16 @@ plugin: shell
category_id: com.canonical.plainbox::monitor
_summary: Automated HDMI hotplug test
_description:
- This test will use edid injector on muxpi to check if system detect HDMI hotplug
-environ: HDMI_PORT MUXPI_IP
-requires: manifest.has_muxpi_hdmi == 'True'
-imports: from com.canonical.plainbox import manifest
+ Use chamleon board to simulate connection/disconnection of an HDMI monitor.
+environ: HDMI_PORT CHAMELEON_IP
+command:
+ chameleon_hdmi_hotplug.py $HDMI_PORT $CHAMELEON_IP
+
+id: monitor/edid-stress-automated
+estimated_duration: 30m
+plugin: shell
+category_id: com.canonical.plainbox::monitor
+_summary: Stress DUT by switching through large EDID set
+environ: HDMI_PORT CHAMELEON_IP
command:
- export SSH_OPTS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
- timeout 60 ssh $SSH_OPTS ubuntu@$MUXPI_IP "stm -hdmi off" || exit 1
- sleep 3
- timeout 60 ssh $SSH_OPTS ubuntu@$MUXPI_IP "stm -hdmi on" || exit 1
- sleep 3
- if [ "$(cat /sys/class/drm/$HDMI_PORT/status)" != "connected" ] ;then exit 1; fi
- timeout 60 ssh $SSH_OPTS ubuntu@$MUXPI_IP "stm -hdmi off" || exit 1
- sleep 3
- if [ "$(cat /sys/class/drm/$HDMI_PORT/status)" != "disconnected" ] ;then exit 1; fi
+ chameleon_edid_stress.py $HDMI_PORT $CHAMELEON_IP
diff --git a/units/monitor/test-plan.pxu b/units/monitor/test-plan.pxu
index 5eb1f66..aa99f3f 100644
--- a/units/monitor/test-plan.pxu
+++ b/units/monitor/test-plan.pxu
@@ -36,9 +36,6 @@ include:
monitor/1_dvi_.* certification-status=blocker
monitor/1_hdmi_.* certification-status=blocker
audio/1_playback_hdmi_.* certification-status=blocker
- monitor/1_thunderbolt_.* certification-status=blocker
- audio/1_playback_thunderbolt_.* certification-status=blocker
- thunderbolt/daisy-chain certification-status=blocker
monitor/1_thunderbolt3_.* certification-status=non-blocker
audio/1_playback_thunderbolt3_.* certification-status=non-blocker
thunderbolt3/daisy-chain certification-status=non-blocker
@@ -65,9 +62,6 @@ include:
after-suspend-manual-monitor/1_dvi_.* certification-status=blocker
after-suspend-manual-monitor/1_hdmi_.* certification-status=blocker
after-suspend-manual-audio/1_playback_hdmi_.* certification-status=blocker
- after-suspend-manual-monitor/1_thunderbolt_.* certification-status=blocker
- after-suspend-manual-audio/1_playback_thunderbolt_.* certification-status=blocker
- after-suspend-manual-thunderbolt/daisy-chain certification-status=blocker
after-suspend-manual-monitor/1_thunderbolt3_.* certification-status=non-blocker
after-suspend-manual-audio/1_playback_thunderbolt3_.* certification-status=non-blocker
after-suspend-manual-thunderbolt3/daisy-chain certification-status=non-blocker
@@ -116,8 +110,6 @@ include:
monitor/2_dvi_.* certification-status=blocker
monitor/2_hdmi_.* certification-status=blocker
audio/2_playback_hdmi_.* certification-status=blocker
- monitor/2_thunderbolt_.* certification-status=blocker
- audio/2_playback_thunderbolt_.* certification-status=blocker
monitor/2_thunderbolt3_.* certification-status=non-blocker
audio/2_playback_thunderbolt3_.* certification-status=non-blocker
monitor/2_vga_.* certification-status=blocker
@@ -153,9 +145,6 @@ include:
after-suspend-manual-monitor/2_dvi_.* certification-status=blocker
after-suspend-manual-monitor/2_hdmi_.* certification-status=blocker
after-suspend-manual-audio/2_playback_hdmi_.* certification-status=blocker
- after-suspend-manual-monitor/2_thunderbolt_.* certification-status=blocker
- after-suspend-manual-audio/2_playback_thunderbolt_.* certification-status=blocker
- after-suspend-manual-thunderbolt/daisy-chain certification-status=blocker
after-suspend-manual-monitor/2_thunderbolt3_.* certification-status=non-blocker
after-suspend-manual-audio/2_playback_thunderbolt3_.* certification-status=non-blocker
after-suspend-manual-thunderbolt3/daisy-chain certification-status=non-blocker
@@ -191,9 +180,6 @@ include:
monitor/1_dvi_.* certification-status=blocker
monitor/1_hdmi_.* certification-status=blocker
audio/1_playback_hdmi_.* certification-status=blocker
- monitor/1_thunderbolt_.* certification-status=blocker
- audio/1_playback_thunderbolt_.* certification-status=blocker
- thunderbolt/daisy-chain certification-status=blocker
monitor/1_vga_.* certification-status=blocker
monitor/1_multi-head_.* certification-status=blocker
bootstrap_include:
@@ -216,9 +202,6 @@ include:
after-suspend-manual-monitor/1_dvi_.* certification-status=blocker
after-suspend-manual-monitor/1_hdmi_.* certification-status=blocker
after-suspend-manual-audio/1_playback_hdmi_.* certification-status=blocker
- after-suspend-manual-monitor/1_thunderbolt_.* certification-status=blocker
- after-suspend-manual-audio/1_playback_thunderbolt_.* certification-status=blocker
- after-suspend-manual-thunderbolt/daisy-chain certification-status=blocker
after-suspend-manual-monitor/1_vga_.* certification-status=blocker
after-suspend-manual-monitor/1_multi-head_.* certification-status=blocker
bootstrap_include:
@@ -241,8 +224,6 @@ include:
monitor/2_dvi_.* certification-status=blocker
monitor/2_hdmi_.* certification-status=blocker
audio/2_playback_hdmi_.* certification-status=blocker
- monitor/2_thunderbolt_.* certification-status=blocker
- audio/2_playback_thunderbolt_.* certification-status=blocker
monitor/2_vga_.* certification-status=blocker
monitor/2_multi-head_.* certification-status=blocker
bootstrap_include:
@@ -265,9 +246,6 @@ include:
after-suspend-manual-monitor/2_dvi_.* certification-status=blocker
after-suspend-manual-monitor/2_hdmi_.* certification-status=blocker
after-suspend-manual-audio/2_playback_hdmi_.* certification-status=blocker
- after-suspend-manual-monitor/2_thunderbolt_.* certification-status=blocker
- after-suspend-manual-audio/2_playback_thunderbolt_.* certification-status=blocker
- after-suspend-manual-thunderbolt/daisy-chain certification-status=blocker
after-suspend-manual-monitor/2_vga_.* certification-status=blocker
after-suspend-manual-monitor/2_multi-head_.* certification-status=blocker
bootstrap_include:
@@ -299,6 +277,7 @@ _name: Automated monitor tests
_description: Automated monitor tests for Snappy Ubuntu Core devices
include:
monitor/hdmi-hotplug-automated
+ monitor/edid-stress-automated
id: after-suspend-monitor-full
unit: test plan
diff --git a/units/stress/boot.pxu b/units/stress/boot.pxu
index dcc0bf5..f4085aa 100644
--- a/units/stress/boot.pxu
+++ b/units/stress/boot.pxu
@@ -48,7 +48,7 @@ plugin: shell
command:
lspci -i $SNAP/usr/share/misc/pci.ids > $PLAINBOX_SESSION_SHARE/lspci_original || true
nmcli -t -f active,BSSID d w l | grep -oP "(?<=^yes:).*" > $PLAINBOX_SESSION_SHARE/wifi_original || true
- checkbox-support-lsusb -f $SNAP/checkbox-runtime/var/lib/usbutils/usb.ids -s | sort > $PLAINBOX_SESSION_SHARE/lsusb_original || true
+ checkbox-support-lsusb -f $CHECKBOX_RUNTIME/var/lib/usbutils/usb.ids -s | sort > $PLAINBOX_SESSION_SHARE/lsusb_original || true
environ: LD_LIBRARY_PATH
user: root
estimated_duration: 1s
@@ -101,7 +101,7 @@ environ: LD_LIBRARY_PATH
command:
lspci -i $SNAP/usr/share/misc/pci.ids > $PLAINBOX_SESSION_SHARE/lspci_test
nmcli -t -f active,BSSID d w l | grep -oP "(?<=^yes:).*" > $PLAINBOX_SESSION_SHARE/wifi_test
- checkbox-support-lsusb -f $SNAP/checkbox-runtime/var/lib/usbutils/usb.ids -s | sort > $PLAINBOX_SESSION_SHARE/lsusb_test
+ checkbox-support-lsusb -f $CHECKBOX_RUNTIME/var/lib/usbutils/usb.ids -s | sort > $PLAINBOX_SESSION_SHARE/lsusb_test
diff -u $PLAINBOX_SESSION_SHARE/lspci_original $PLAINBOX_SESSION_SHARE/lspci_test
if [ $? -ne 0 ] ; then
echo "lspci mismatch during cycle 1"
@@ -136,7 +136,7 @@ environ: LD_LIBRARY_PATH
command:
lspci -i $SNAP/usr/share/misc/pci.ids > $PLAINBOX_SESSION_SHARE/lspci_test
nmcli -t -f active,BSSID d w l | grep -oP "(?<=^yes:).*" > $PLAINBOX_SESSION_SHARE/wifi_test
- checkbox-support-lsusb -f $SNAP/checkbox-runtime/var/lib/usbutils/usb.ids -s | sort > $PLAINBOX_SESSION_SHARE/lsusb_test
+ checkbox-support-lsusb -f $CHECKBOX_RUNTIME/var/lib/usbutils/usb.ids -s | sort > $PLAINBOX_SESSION_SHARE/lsusb_test
diff -u $PLAINBOX_SESSION_SHARE/lspci_original $PLAINBOX_SESSION_SHARE/lspci_test
if [ $? -ne 0 ] ; then
echo "lspci mismatch during cycle {reboot_id}"
@@ -205,7 +205,7 @@ environ: LD_LIBRARY_PATH
command:
lspci -i $SNAP/usr/share/misc/pci.ids > $PLAINBOX_SESSION_SHARE/lspci_test
nmcli -t -f active,BSSID d w l | grep -oP "(?<=^yes:).*" > $PLAINBOX_SESSION_SHARE/wifi_test
- checkbox-support-lsusb -f $SNAP/checkbox-runtime/var/lib/usbutils/usb.ids -s | sort > $PLAINBOX_SESSION_SHARE/lsusb_test
+ checkbox-support-lsusb -f $CHECKBOX_RUNTIME/var/lib/usbutils/usb.ids -s | sort > $PLAINBOX_SESSION_SHARE/lsusb_test
diff -u $PLAINBOX_SESSION_SHARE/lspci_original $PLAINBOX_SESSION_SHARE/lspci_test
if [ $? -ne 0 ] ; then
echo "lspci mismatch during cycle 1"
@@ -240,7 +240,7 @@ environ: LD_LIBRARY_PATH
command:
lspci -i $SNAP/usr/share/misc/pci.ids > $PLAINBOX_SESSION_SHARE/lspci_test
nmcli -t -f active,BSSID d w l | grep -oP "(?<=^yes:).*" > $PLAINBOX_SESSION_SHARE/wifi_test
- checkbox-support-lsusb -f $SNAP/checkbox-runtime/var/lib/usbutils/usb.ids -s | sort > $PLAINBOX_SESSION_SHARE/lsusb_test
+ checkbox-support-lsusb -f $CHECKBOX_RUNTIME/var/lib/usbutils/usb.ids -s | sort > $PLAINBOX_SESSION_SHARE/lsusb_test
diff -u $PLAINBOX_SESSION_SHARE/lspci_original $PLAINBOX_SESSION_SHARE/lspci_test
if [ $? -ne 0 ] ; then
echo "lspci mismatch during cycle {reboot_id}"
diff --git a/units/stress/jobs.pxu b/units/stress/jobs.pxu
index 719e9e1..cf44c6c 100644
--- a/units/stress/jobs.pxu
+++ b/units/stress/jobs.pxu
@@ -86,13 +86,14 @@ flags: noreturn
user: root
environ: PM_TEST_DRY_RUN
command:
+ rm -f $PLAINBOX_SESSION_SHARE/__result
pm_test reboot --checkbox-respawn-cmd $PLAINBOX_SESSION_SHARE/__respawn_checkbox --fwts --log-level=debug --log-dir=$PLAINBOX_SESSION_SHARE --suspends-before-reboot=30 -r 3 --silent --check-hardware-list
_summary: 30 suspend/resume cycles and 1 reboot, 3 times (automated stress test)
_description:
This is an automated stress test that will run a sequence of '30 suspend/resume cycles and one reboot' 3 times.
_siblings: [
{ "id": "power-management/suspend_30_cycles_with_coldboots",
- "command": "pm_test poweroff --checkbox-respawn-cmd $PLAINBOX_SESSION_SHARE/__respawn_checkbox --fwts --log-level=debug --log-dir=$PLAINBOX_SESSION_SHARE --suspends-before-reboot=30 -r 3 --silent --check-hardware-list",
+ "command": "rm -f $PLAINBOX_SESSION_SHARE/__result; pm_test poweroff --checkbox-respawn-cmd $PLAINBOX_SESSION_SHARE/__respawn_checkbox --fwts --log-level=debug --log-dir=$PLAINBOX_SESSION_SHARE --suspends-before-reboot=30 -r 3 --silent --check-hardware-list",
"_description": "This is an automated stress test that will run a sequence of '30 suspend/resume cycles and one poweroff' 3 times.",
"_summary": "30 suspend/resume cycles and 1 poweroff, 3 times (automated stress test)"
}
@@ -267,7 +268,9 @@ category_id: com.canonical.plainbox::stress
id: stress/reboot
estimated_duration: 4500.0
requires: executable.name == 'fwts'
-command: pm_test --checkbox-respawn-cmd $PLAINBOX_SESSION_SHARE/__respawn_checkbox -r 100 --silent --log-level=notset reboot --log-dir=$PLAINBOX_SESSION_SHARE
+command:
+ rm -f $PLAINBOX_SESSION_SHARE/__result
+ pm_test --checkbox-respawn-cmd $PLAINBOX_SESSION_SHARE/__respawn_checkbox -r 100 --silent --log-level=notset reboot --log-dir=$PLAINBOX_SESSION_SHARE
flags: noreturn
user: root
environ: PLAINBOX_SESSION_SHARE PM_TEST_DRY_RUN
@@ -288,7 +291,9 @@ category_id: com.canonical.plainbox::stress
id: stress/reboot_30
requires: executable.name == 'fwts'
executable.name == 'x-terminal-emulator'
-command: pm_test --checkbox-respawn-cmd $PLAINBOX_SESSION_SHARE/__respawn_checkbox -r 30 --silent --log-level=notset reboot --log-dir=$PLAINBOX_SESSION_SHARE
+command:
+ rm -f $PLAINBOX_SESSION_SHARE/__result
+ pm_test --checkbox-respawn-cmd $PLAINBOX_SESSION_SHARE/__respawn_checkbox -r 30 --silent --log-level=notset reboot --log-dir=$PLAINBOX_SESSION_SHARE
flags: noreturn
estimated_duration: 2700
user: root
@@ -311,7 +316,9 @@ estimated_duration: 4500.0
requires:
executable.name == 'fwts'
executable.name == 'x-terminal-emulator'
-command: pm_test --checkbox-respawn-cmd $PLAINBOX_SESSION_SHARE/__respawn_checkbox -r 100 --silent --log-level=notset poweroff --log-dir=$PLAINBOX_SESSION_SHARE
+command:
+ rm -f $PLAINBOX_SESSION_SHARE/__result
+ pm_test --checkbox-respawn-cmd $PLAINBOX_SESSION_SHARE/__respawn_checkbox -r 100 --silent --log-level=notset poweroff --log-dir=$PLAINBOX_SESSION_SHARE
flags: noreturn
user: root
environ: PLAINBOX_SESSION_SHARE PM_TEST_DRY_RUN
@@ -333,7 +340,9 @@ id: stress/poweroff_30
requires:
executable.name == 'fwts'
executable.name == 'x-terminal-emulator'
-command: pm_test --checkbox-respawn-cmd $PLAINBOX_SESSION_SHARE/__respawn_checkbox -r 30 --wakeup 150 --silent --log-level=notset poweroff --log-dir=$PLAINBOX_SESSION_SHARE
+command:
+ rm -f $PLAINBOX_SESSION_SHARE/__result
+ pm_test --checkbox-respawn-cmd $PLAINBOX_SESSION_SHARE/__respawn_checkbox -r 30 --wakeup 150 --silent --log-level=notset poweroff --log-dir=$PLAINBOX_SESSION_SHARE
flags: noreturn
estimated_duration: 3600
user: root
@@ -495,3 +504,41 @@ _description:
2. Press wifi hotkey at a rate of 1 press per second and slowly increase the speed of the tap, until you are tapping as fast as possible
VERIFICATION:
Verify the system is not frozen and the wifi and bluetooth applets are still visible and functional
+
+plugin:shell
+category_id: com.canonical.plainbox::stress
+id: stress/s2idle_pm-graph_30
+estimated_duration: 10m
+requires: executable.name == 'sleepgraph'
+user: root
+_summary: Resume from idle by using Intel pm-graph
+command:
+ sleepgraph -m freeze -rtcwake 10 -sync -gzip -multi 30 0 -skiphtml -o $PLAINBOX_SESSION_SHARE/s2idle_pm-graph/s2idle-{date}-{time}
+
+plugin: attachment
+category_id: com.canonical.plainbox::stress
+id: stress/s2idle_pm-graph_30.tar.xz
+estimated_duration: 1
+user: root
+_summary: Attach pm-graph logs (s2idle)
+command:
+ tar Jcf $PLAINBOX_SESSION_SHARE/s2idle_pm-graph_30.tar.xz $PLAINBOX_SESSION_SHARE/s2idle_pm-graph && cat $PLAINBOX_SESSION_SHARE/s2idle_pm-graph_30.tar.xz
+
+plugin:shell
+category_id: com.canonical.plainbox::stress
+id: stress/s3_pm-graph_30
+estimated_duration: 10m
+requires: executable.name == 'sleepgraph'
+user: root
+_summary: Resume from suspend by using Intel pm-graph
+command:
+ sleepgraph -m mem -rtcwake 10 -sync -gzip -multi 30 0 -skiphtml -o $PLAINBOX_SESSION_SHARE/s3_pm-graph/suspend-{date}-{time}
+
+plugin: attachment
+category_id: com.canonical.plainbox::stress
+id: stress/s3_pm-graph_30.tar.xz
+estimated_duration: 1
+user: root
+_summary: Attach pm-graph logs (s3)
+command:
+ tar Jcf $PLAINBOX_SESSION_SHARE/s3_pm-graph_30.tar.xz $PLAINBOX_SESSION_SHARE/s3_pm-graph && cat $PLAINBOX_SESSION_SHARE/s3_pm-graph_30.tar.xz
diff --git a/units/stress/test-plan.pxu b/units/stress/test-plan.pxu
index 7967dd5..f162517 100644
--- a/units/stress/test-plan.pxu
+++ b/units/stress/test-plan.pxu
@@ -245,3 +245,13 @@ include:
ethernet/iperf3_.*
bootstrap_include:
device
+
+id: stress-pm-graph
+unit: test plan
+_name: pm-graph stress test
+_description: pm-graph stress test
+include:
+ stress/s2idle_pm-graph_30
+ stress/s2idle_pm-graph_30.tar.xz
+ stress/s3_pm-graph_30
+ stress/s3_pm-graph_30.tar.xz
diff --git a/units/submission/jobs.pxu b/units/submission/jobs.pxu
index b433fd3..e0829b6 100644
--- a/units/submission/jobs.pxu
+++ b/units/submission/jobs.pxu
@@ -2,7 +2,7 @@ id: dkms_info_json
plugin: attachment
category_id: com.canonical.plainbox::info
command:
- dkms_info --format json | python3 -m plainbox dev parse dkms-info | \
+ dkms_info.py --format json | python3 -m plainbox dev parse dkms-info | \
jq '.dkms_info'
_description: Attaches json dumps of installed dkms package information.
_summary: Attaches json dumps of installed dkms package information.
@@ -62,7 +62,7 @@ _description:
The information include:
- fish packages
- dell recovery stage 2 boot log
-command: recovery_info file bto.xml | python3 -m plainbox dev parse bto
+command: recovery_info.py file bto.xml | python3 -m plainbox dev parse bto
id: recovery_info_attachment_json
plugin: attachment
@@ -79,7 +79,7 @@ _description:
Example:
image_version: somerville-trusty-amd64-20140620-0
bto_version: A00_dell-bto-trusty-houston-15-A11-iso-20141203-0.iso
-command: recovery_info version | python3 -m plainbox dev parse recovery-info
+command: recovery_info.py version | python3 -m plainbox dev parse recovery-info
id: system_info_json
plugin: attachment
diff --git a/units/submission/test-plan.pxu b/units/submission/test-plan.pxu
index 3bb4cd3..5ae692f 100644
--- a/units/submission/test-plan.pxu
+++ b/units/submission/test-plan.pxu
@@ -4,7 +4,6 @@ _name: Submission resources
_description: Submission resources
include:
mandatory_include:
- com.canonical.plainbox::collect-manifest
miscellanea/device_check
# Meta-job to include required resources, don't remove.
miscellanea/submission-resources
diff --git a/units/suspend/test-plan.pxu b/units/suspend/test-plan.pxu
index 1d6e12f..e84d6e9 100644
--- a/units/suspend/test-plan.pxu
+++ b/units/suspend/test-plan.pxu
@@ -35,8 +35,6 @@ include:
suspend/cpu_before_suspend certification-status=blocker
suspend/memory_before_suspend certification-status=blocker
suspend/bluetooth_obex_send_before_suspend certification-status=blocker
- suspend/bluetooth_obex_browse_before_suspend certification-status=blocker
- suspend/bluetooth_obex_get_before_suspend certification-status=blocker
bluetooth4/beacon_eddystone_url_.* certification-status=blocker
bootstrap_include:
device
@@ -52,8 +50,6 @@ include:
suspend/memory_after_suspend certification-status=blocker
suspend/bluetooth_detect_after_suspend certification-status=blocker
suspend/bluetooth_obex_send_after_suspend certification-status=blocker
- suspend/bluetooth_obex_browse_after_suspend certification-status=blocker
- suspend/bluetooth_obex_get_after_suspend certification-status=blocker
after-suspend-manual-bluetooth4/beacon_eddystone_url_.* certification-status=blocker
bootstrap_include:
device
diff --git a/units/thunderbolt/test-plan.pxu b/units/thunderbolt/test-plan.pxu
index 75aa0ac..5015cde 100644
--- a/units/thunderbolt/test-plan.pxu
+++ b/units/thunderbolt/test-plan.pxu
@@ -23,9 +23,6 @@ _name: Thunderbolt tests (Manual)
_description:
Thunderbolt tests (Manual)
include:
- thunderbolt/insert certification-status=blocker
- thunderbolt/storage-test certification-status=blocker
- thunderbolt/remove certification-status=blocker
thunderbolt3/insert certification-status=non-blocker
thunderbolt3/storage-test certification-status=non-blocker
thunderbolt3/remove certification-status=non-blocker
@@ -43,9 +40,6 @@ unit: test plan
_name: Thunderbolt tests (certification blockers only)
_description: Thunderbolt tests (certification blockers only)
include:
- thunderbolt/insert certification-status=blocker
- thunderbolt/storage-test certification-status=blocker
- thunderbolt/remove certification-status=blocker
id: after-suspend-thunderbolt-cert-manual
unit: test plan
@@ -53,9 +47,6 @@ _name: Thunderbolt tests (after suspend Manual)
_description:
Thunderbolt tests (after suspend Manual)
include:
- after-suspend-manual-thunderbolt/insert certification-status=blocker
- after-suspend-manual-thunderbolt/storage-test certification-status=blocker
- after-suspend-manual-thunderbolt/remove certification-status=blocker
after-suspend-manual-thunderbolt3/insert certification-status=non-blocker
after-suspend-manual-thunderbolt3/storage-test certification-status=non-blocker
after-suspend-manual-thunderbolt3/remove certification-status=non-blocker
@@ -65,8 +56,5 @@ unit: test plan
_name: Thunderbolt tests (after suspend - certification blockers only)
_description: Thunderbolt tests (after suspend - certification blockers only)
include:
- after-suspend-manual-thunderbolt/insert certification-status=blocker
- after-suspend-manual-thunderbolt/storage-test certification-status=blocker
- after-suspend-manual-thunderbolt/remove certification-status=blocker
diff --git a/units/tpm/sysfs.pxu b/units/tpm/sysfs.pxu
index fdbf390..5db5fe7 100644
--- a/units/tpm/sysfs.pxu
+++ b/units/tpm/sysfs.pxu
@@ -11,8 +11,8 @@ plugin: resource
_summary: Count the number of visible TPM chips in sysfs
_description:
This job just counts the number of visible TPM chips in as reported by
- tpm-sysfs-resource tool. The only resource attribute is 'count'
-command: echo "count: $(tpm-sysfs-resource | grep -F 'x-sysfs-device-name' | wc -l)"
+ tpm_sysfs_resource.py tool. The only resource attribute is 'count'
+command: echo "count: $(tpm_sysfs_resource.py | grep -F 'x-sysfs-device-name' | wc -l)"
estimated_duration: 2s
flags: preserve-locale
@@ -24,7 +24,7 @@ _summary: Collect TPM information from sysfs
_description:
This job collects all the available TPM information from
/sys/class/tpm/*/device/*.
-command: tpm-sysfs-resource
+command: tpm_sysfs_resource.py
estimated_duration: 2s
flags: preserve-locale
# Tie this resource with the has_tpm_chip manifest entry. This way it will
@@ -43,7 +43,7 @@ _description:
This job collects all the available TPM information from
/sys/class/tpm/*/device/*. Distinct files present there are converted to
attributes of resource records.
-command: tpm-sysfs-resource
+command: tpm_sysfs_resource.py
estimated_duration: 2s
flags: preserve-locale
# See note about manifest on the sysfs_tpm job above.
@@ -60,7 +60,7 @@ _description:
This job collects all the available TPM information from
/sys/class/tpm/*/device/*. Distinct files present there are converted to
attributes of resource records.
-command: tpm-sysfs-resource
+command: tpm_sysfs_resource.py
estimated_duration: 2s
flags: preserve-locale
# See note about manifest on the sysfs_tpm job above.
@@ -76,6 +76,6 @@ _description:
This job collects all the available DMI information from /sys/class/dmi/id/*.
The main purpose of including this job is to allow the provider to include
vendor-specific quirks by looking at the sysfs_dmi.bios_vendor attribute.
-command: dmi-sysfs-resource
+command: dmi_sysfs_resource.py
estimated_duration: 1s
flags: preserve-locale
diff --git a/units/usb/manifest.pxu b/units/usb/manifest.pxu
index 914e892..fef1a64 100644
--- a/units/usb/manifest.pxu
+++ b/units/usb/manifest.pxu
@@ -2,3 +2,8 @@ unit: manifest entry
id: has_usb_type_c
_name: USB Type-C Support
value-type: bool
+
+unit: manifest entry
+id: has_usb_storage
+_name: USB Storage Device Connected
+value-type: bool
diff --git a/units/usb/test-plan.pxu b/units/usb/test-plan.pxu
index f177798..02dc6e5 100644
--- a/units/usb/test-plan.pxu
+++ b/units/usb/test-plan.pxu
@@ -221,6 +221,7 @@ unit: test plan
_name: Automated USB tests
_description: Automated USB tests for Snappy Ubuntu Core devices
include:
+ usb/storage-detect
usb/storage-preinserted-.*
bootstrap_include:
removable_partition
@@ -326,6 +327,7 @@ unit: test plan
_name: Automated USB tests
_description: Automated USB tests for Snappy Ubuntu Core devices
include:
+ after-suspend-usb/storage-detect
after-suspend-usb/storage-preinserted-.*
bootstrap_include:
removable_partition
diff --git a/units/usb/usb.pxu b/units/usb/usb.pxu
index 670f649..77dd601 100644
--- a/units/usb/usb.pxu
+++ b/units/usb/usb.pxu
@@ -7,7 +7,7 @@ estimated_duration: 1.0
command:
set -o pipefail
if [[ -v SNAP ]]; then
- checkbox-support-lsusb -f $SNAP/checkbox-runtime/var/lib/usbutils/usb.ids 2>/dev/null | sed 's/.*\(ID .*\)/\1/' | head -n 4 || echo "No USB devices were detected" >&2
+ checkbox-support-lsusb -f $CHECKBOX_RUNTIME/var/lib/usbutils/usb.ids 2>/dev/null | sed 's/.*\(ID .*\)/\1/' | head -n 4 || echo "No USB devices were detected" >&2
else
lsusb 2>/dev/null | sort || echo "No USB devices were detected" >&2
fi
@@ -18,6 +18,8 @@ plugin: user-interact-verify
category_id: com.canonical.plainbox::usb
id: usb/disk_detect
depends: usb/detect
+requires:
+ package.name == 'udisks2' or snap.name == 'udisks2'
estimated_duration: 1.0
command: removable_storage_test -l usb
_description:
@@ -232,7 +234,7 @@ category_id: com.canonical.plainbox::usb
id: usb/storage-preinserted
user: root
estimated_duration: 45.0
-command: removable_storage_test -l usb && removable_storage_test -s 268400000 usb
+command: removable_storage_test -l usb && timeout 300 removable_storage_test -s 268400000 usb
flags: also-after-suspend preserve-cwd
requires:
cpuinfo.platform != 's390x'
@@ -256,7 +258,7 @@ requires:
package.name == 'udisks2' or snap.name == 'udisks2'
package.name == 'udisks2' or (snap.name == 'core' and int(snap.revision) >= 1804)
estimated_duration: 45.0
-command: removable_storage_test -l usb && removable_storage_test -s 268400000 -m 500000000 usb --driver xhci_hcd
+command: removable_storage_test -l usb && timeout 300 removable_storage_test -s 268400000 -m 500000000 usb --driver xhci_hcd
_summary:
Test USB 3.0 or 3.1 ports
_description:
@@ -291,6 +293,18 @@ _description:
This test will check that your USB 2.0 port transfers data at a
minimum expected speed.
+id: usb/storage-detect
+category_id: com.canonical.plainbox::usb
+plugin: shell
+_summary: Detect storage partitions on a device on the USB bus
+command:
+ udev_resource -f PARTITION | grep "bus: usb"
+estimated_duration: 1.0
+flags: also-after-suspend
+imports: from com.canonical.plainbox import manifest
+requires:
+ manifest.has_usb_storage == 'True'
+
unit: template
template-resource: removable_partition
template-filter: "usb" in removable_partition.bus
@@ -308,6 +322,7 @@ _description:
Tests USB 2.0 or 1.1 ports on a system by doing write/read/compare tests on
randomly created data. It requires that a USB stick is plugged into an
available USB port before running the certification suite.
+depends: usb/storage-detect
id: usb/hid
_summary: USB keyboard works
diff --git a/units/wireless/wifi-ap.pxu b/units/wireless/wifi-ap.pxu
index 335d505..493a2ca 100644
--- a/units/wireless/wifi-ap.pxu
+++ b/units/wireless/wifi-ap.pxu
@@ -585,7 +585,6 @@ plugin: user-interact-verify
requires:
wifi_interface_mode.{interface}_AP == 'supported'
snap.name == 'wifi-ap'
-depends: wireless/wireless_connection_open_bg_nm_{interface}
estimated_duration: 120.0
environ: LD_LIBRARY_PATH OPEN_BG_SSID
command:
@@ -624,7 +623,6 @@ plugin: shell
requires:
wifi_interface_mode.{interface}_AP == 'supported'
snap.name == 'wifi-ap'
-depends: wireless/wireless_connection_open_bg_nm_{interface}
estimated_duration: 120.0
environ: LD_LIBRARY_PATH OPEN_BG_SSID WIFI_AP_SETUPTIME
command:
@@ -673,7 +671,6 @@ plugin: user-interact-verify
requires:
wifi_interface_mode.{interface}_AP == 'supported'
snap.name == 'wifi-ap'
-depends: wireless/wireless_connection_open_bg_nm_{interface}
estimated_duration: 120.0
environ: LD_LIBRARY_PATH $OPEN_BG_SSID
command:
@@ -712,7 +709,6 @@ plugin: shell
requires:
wifi_interface_mode.{interface}_AP == 'supported'
snap.name == 'wifi-ap'
-depends: wireless/wireless_connection_open_bg_nm_{interface}
estimated_duration: 120.0
environ: LD_LIBRARY_PATH OPEN_BG_SSID WIFI_AP_SETUPTIME
command:
@@ -761,7 +757,6 @@ plugin: user-interact-verify
requires:
wifi_interface_mode.{interface}_AP == 'supported'
snap.name == 'wifi-ap'
-depends: wireless/wireless_connection_open_bg_nm_{interface}
estimated_duration: 120.0
environ: LD_LIBRARY_PATH OPEN_BG_SSID
command:
@@ -800,7 +795,6 @@ plugin: shell
requires:
wifi_interface_mode.{interface}_AP == 'supported'
snap.name == 'wifi-ap'
-depends: wireless/wireless_connection_open_bg_nm_{interface}
estimated_duration: 120.0
environ: LD_LIBRARY_PATH OPEN_BG_SSID WIFI_AP_SETUPTIME
command:
@@ -849,7 +843,6 @@ plugin: user-interact-verify
requires:
wifi_interface_mode.{interface}_AP == 'supported'
snap.name == 'wifi-ap'
-depends: wireless/wireless_connection_open_bg_nm_{interface}
estimated_duration: 120.0
environ: LD_LIBRARY_PATH OPEN_BG_SSID
command:
@@ -888,7 +881,6 @@ plugin: shell
requires:
wifi_interface_mode.{interface}_AP == 'supported'
snap.name == 'wifi-ap'
-depends: wireless/wireless_connection_open_bg_nm_{interface}
estimated_duration: 120.0
environ: LD_LIBRARY_PATH OPEN_BG_SSID WIFI_AP_SETUPTIME
command:
diff --git a/units/wwan/jobs.pxu b/units/wwan/jobs.pxu
index d18cdc3..b031385 100644
--- a/units/wwan/jobs.pxu
+++ b/units/wwan/jobs.pxu
@@ -15,7 +15,7 @@ _purpose:
plugin: shell
user: root
command:
- COUNT=$(wwan_tests count)
+ COUNT=$(wwan_tests.py count)
if [ $COUNT -eq 0 ]; then
exit 1
fi
@@ -38,7 +38,7 @@ _description:
plugin: shell
command:
BEGIN_CONNECTION_TEST_TS=`date '+%Y-%m-%d %H:%M:%S'`
- wwan_tests 3gpp-connection $WWAN_CONTROL_IF $WWAN_NET_IF $WWAN_APN ${{WWAN_SETUPTIME:-30}}
+ wwan_tests.py 3gpp-connection $WWAN_CONTROL_IF $WWAN_NET_IF $WWAN_APN ${{WWAN_SETUPTIME:-30}}
RETVAL=$?
if [ $RETVAL -ne 0 ]; then
echo "==== Service units logs ===="
@@ -64,7 +64,7 @@ _summary: Check if a SIM card is present in a slot connected to the modem
_description:
Check if a SIM card is present in a slot connected to the modem
plugin: shell
-command: wwan_tests sim-present {hw_id}
+command: wwan_tests.py sim-present {hw_id}
environ: LD_LIBRARY_PATH
user: root
estimated_duration: 10.0
@@ -90,7 +90,7 @@ _steps:
1. Start the test to automatically retrieve information from the SIM card
_verification:
Check the output, if as expected then mark the test as passed.
-command: wwan_tests sim-info {hw_id}
+command: wwan_tests.py sim-info {hw_id}
environ: LD_LIBRARY_PATH
user: root
estimated_duration: 5s
diff --git a/units/wwan/resource.pxu b/units/wwan/resource.pxu
index a0e82ff..0197f15 100644
--- a/units/wwan/resource.pxu
+++ b/units/wwan/resource.pxu
@@ -11,7 +11,7 @@ category_id: wwan
plugin: resource
_summary: Gather device info about WWAN modems
_description: Gather device info about WWAN modems
-command: wwan_tests --use-cli resources
+command: wwan_tests.py --use-cli resources
user: root
estimated_duration: 3s
flags: preserve-locale