Files
MiPi_Investigation/server/__pycache__/hw_interface.cpython-312.pyc

68 lines
8.6 KiB
Plaintext
Raw Normal View History

2026-05-06 15:57:48 +01:00
<EFBFBD>
R<>i <00><01><00>UdZddlmZddlZddlZddlZddlZddlZddlZddl m
Z
ddl m Z eje<0E>ZdZdZdZd Zd
Zd Zdad ed <ddd<0E>Zdd<0F>Zdd<10>Zd d<11>Zd!d<12>Zd"d<13>Zdd<14>Zd#d$d<15>Zd d<16>Z d d<17>Z!ddiZ"d%d&d<1A>Z#d d<1B>Z$y)'u<>On-target hardware shims used by the Flask app.
Runs ON THE i.MX 8M Mini, not the host PC. Shells out to memtool, i2cget,
and /sys/kernel/debug/regmap. Cache bypass for SN65DSI83 is mandatory
before every IRQ_STAT read — see CLAUDE.md invariant 1.
<EFBFBD>)<01> annotationsN)<01>Path)<01>Optionalz/sys/kernel/debug/regmap/2-002c<32><00>,i<><00>2<EFBFBD> z/sys/class/graphics/fb0/blankzOptional[subprocess.Popen]<5D> _video_procc<01><00>tjd|<00>tjt j
|<00>dd|<02><03>}|r8|j dk7r)td|<00>d|jj<00><00><00><04><00>|jS)Nzrun: %sT)<03>capture_output<75>text<78>timeoutrzCommand failed: z
stderr: ) <0B>log<6F>debug<75>
subprocess<EFBFBD>run<75>shlex<65>split<69>
returncode<EFBFBD> RuntimeError<6F>stderr<72>strip<69>stdout)<04>cmd<6D>checkr <00>ress <20>server/hw_interface.py<70>_runr&sz<00><00><07>I<EFBFBD>I<EFBFBD>i<EFBFBD><13><1D>
<14>.<2E>.<2E> <0A> <0B> <0B>C<EFBFBD><18><1B> <11><17>  <06>C<EFBFBD>  <0A><13><1E><1E>1<EFBFBD>$<24><1A><1E>s<EFBFBD>e<EFBFBD>:<3A>c<EFBFBD>j<EFBFBD>j<EFBFBD>.><3E>.><3E>.@<40>-A<> B<>
<EFBFBD>
<EFBFBD> <0F>:<3A>:<3A><15>c<01>8<00>t|<00>j|<01>y)N)r<00>
write_text)<02>path<74>values r<00> _write_sysfsr#5s<00><00><08><14>J<EFBFBD><19><19>%<25> rc<01><><00>tdtd<02>dtd<02><04><04>}tjd|<00>}t |<01>dkrt d|<00><00><02><00>|dd\}}}d|<02><00>d|<03><00>d|<04><00>|<02>d |<03>d |<04><00>d
<EFBFBD>S) u?memtool md -l 0x32e100b4+0x0c → 3 little-endian 32-bit words.zmemtool md -l 0x<30>xz+0xz\b([0-9a-fA-F]{8})\b<>z$memtool returned unexpected output:
N<EFBFBD>0x<30> )<04>
PHY_TIMING<EFBFBD> PHY_TIMING1<47> PHY_TIMING2<47>raw_hex)r<00>DSIM_PHYTIMING_BASE<53>DSIM_PHYTIMING_LEN<45>re<72>findall<6C>lenr)<05>out<75> hex_words<64>pt<70>pt1<74>pt2s r<00>read_dsim_phy_timingr7=s<><00><00>
<0E>!<21>"5<>a<EFBFBD>!8<><03><N<>q<EFBFBD>;Q<>R<>
S<EFBFBD>C<EFBFBD><12>
<EFBFBD>
<EFBFBD>2<>C<EFBFBD>8<>I<EFBFBD>
<EFBFBD>9<EFBFBD>~<7E><01><19><1A>B<>3<EFBFBD>%<25>H<>I<>I<><1C>R<EFBFBD>a<EFBFBD>=<3D>L<EFBFBD>B<EFBFBD><03>S<EFBFBD><1A>2<EFBFBD>$<24>i<EFBFBD><1B>C<EFBFBD>5<EFBFBD>z<EFBFBD><1B>C<EFBFBD>5<EFBFBD>z<EFBFBD><18>T<EFBFBD><11>3<EFBFBD>%<25>q<EFBFBD><13><05>&<26>  <06>rc<01><><00>tt<00>dz } |jd<02>y#ttf$r }t
j d|<01>Yd}~yd}~wwxYw)N<> cache_bypassz1
z:Could not bypass regmap cache (%s); falling back to i2cget)r<00>SN65_REGMAP_DIRr <00>FileNotFoundError<6F>PermissionErrorr<00>warning)<02>bypass<73>es r<00>_bypass_sn65_regmap_cacher@QsO<00><00> <11>/<2F> "<22>^<5E> 3<>F<EFBFBD>U<01><0E><19><19>%<25> <20><> <1D><EFBFBD> /<2F>U<01> <0B> <0B> <0B>P<>RS<52>T<>T<><54>U<01>s<00>&<00>A<03>A<03>Ac<01><><00>tt<00>dz }|j<00>}i}|j<00>D]<5D>}t j
d|j <00><00>}|s<01>*|jd<03>j<00>||jd<04>j<00>jd<05>jdd<05><<00><>|S)uORead /sys/kernel/debug/regmap/2-002c/registers — returns {hex_addr: hex_val}.<2E> registersz'\s*([0-9a-fA-F]+)\s*:?\s*([0-9a-fA-F]+)r<00><00>0) rr:<00> read_text<78>
splitlinesr/<00>matchr<00>group<75>lower<65>lstrip<69>rjust)<05> regs_pathr r2<00>line<6E>ms r<00>_read_sn65_regmaprOYs<><00><00><14>_<EFBFBD>%<25> <0B>3<>I<EFBFBD> <14> <1E> <1E> <20>D<EFBFBD><1C>C<EFBFBD><14><0F><0F>!<21>S<01><04> <0E>H<EFBFBD>H<EFBFBD>?<3F><14><1A><1A><1C> N<><01> <0C>@A<><07><07><01>
<EFBFBD>@P<>@P<>@R<>C<EFBFBD><01><07><07><01>
<EFBFBD> <20> <20>"<22>)<29>)<29>#<23>.<2E>4<>4<>Q<EFBFBD><03><<3C> =<3D>S<01> <0F>Jrc <01>r<00>tdt<00>dtd<03>d|d<03><04><06>}t|j <00>d<04>S)Nz i2cget -y -f z 0x<30>02x<32>)r<00> SN65_I2C_BUS<55> SN65_I2C_ADDR<44>intr)<02>regr2s r<00>_read_sn65_via_i2cgetrWes7<00><00>
<0E><1D>|<7C>n<EFBFBD>C<EFBFBD> <0A>c<EFBFBD>/B<>#<23>c<EFBFBD>#<23>Y<EFBFBD>O<>
P<EFBFBD>C<EFBFBD> <0E>s<EFBFBD>y<EFBFBD>y<EFBFBD>{<7B>B<EFBFBD> <1F>rc
<01><><00>t<00> t<00>}t|jdd<02>d<03>}t|jdd<02>d<03>}t|jdd<02>d<03>}|t |d z<00>t |d z<00>d |d<0E><04>t |dz<00>t |dz<00>t |dz<00>d<11>S#t$r2i}t d<06>}t d<07>}t d<08>}|d <09>|d <09>|d <09>d
<EFBFBD>}Y<00><>wxYw)uCache-bypassed SN65DSI83 register read with explicit IRQ flags decoded.
Critical: the bypass write must happen on every call — without it,
IRQ_STAT (0xE5) returns the last cached value, not the current hardware
state, and flicker events become invisible.
<20>e5rDrR<00>0a<30>0b<30><62><00>
<00> rQ)rYrZr[<00><>rCr'<00>02X<32><00>@)rB<00>
pll_locked<EFBFBD> clk_detected<65> irq_stat_raw<61>sot_err<72> synch_err<72> unc_ecc_err)r@rOrU<00>getr;rW<00>bool)<04>regs<67>irq_raw<61>pll_raw<61>clk_raws r<00>read_sn65_registersrojs<00><00><1E><1F>
<EFBFBD> <20>"<22><04><15>d<EFBFBD>h<EFBFBD>h<EFBFBD>t<EFBFBD>S<EFBFBD>)<29>2<EFBFBD>.<2E><07><15>d<EFBFBD>h<EFBFBD>h<EFBFBD>t<EFBFBD>S<EFBFBD>)<29>2<EFBFBD>.<2E><07><15>d<EFBFBD>h<EFBFBD>h<EFBFBD>t<EFBFBD>S<EFBFBD>)<29>2<EFBFBD>.<2E><07><1A><1A>7<EFBFBD>T<EFBFBD>><3E>*<2A><1C>W<EFBFBD>t<EFBFBD>^<5E>,<2C><1C>W<EFBFBD>S<EFBFBD>M<EFBFBD>*<2A><17><07>6<EFBFBD>*<2A>+<2B><19>'<27>V<EFBFBD>,<2C>-<2D><1B>G<EFBFBD>v<EFBFBD>.<2E>/<2F> <06><06><> <1D> 
<EFBFBD><11><04>'<27><04>-<2D><07>'<27><04>-<2D><07>'<27><04>-<2D><07><1C>S<EFBFBD>M<EFBFBD><1C>S<EFBFBD>M<EFBFBD><1C>S<EFBFBD>M<EFBFBD>
<EFBFBD><04> 
<EFBFBD>s<00>AB4<00>48C/<03>.C/c<01>$<00>g}tj<00>|z}tj<00>|kr_t<00>}tj<00>|d<|j|<04>tj|<01>tj<00>|kr<01>_|S)uLSample SN65 registers at fixed cadence — catches transient LP→HS errors.<2E>t_s)<05>time<6D> monotonicro<00>append<6E>sleep)<05>
duration_s<EFBFBD>
interval_s<EFBFBD> snapshots<74>deadline<6E>snaps r<00>settling_capturer{<00>sr<00><00><1E>I<EFBFBD><13>~<7E>~<7E><1F>*<2A>,<2C>H<EFBFBD>
<0E>.<2E>.<2E>
<1A>X<EFBFBD>
%<25>"<22>$<24><04><1A>n<EFBFBD>n<EFBFBD>&<26><04>U<EFBFBD> <0B><11><18><18><14><1E> <0C>
<EFBFBD>
<EFBFBD>:<3A><1E> <0F>.<2E>.<2E>
<1A>X<EFBFBD>
%<25>
<15>rc<01>$<00>ttd<01>y)Nz0
<EFBFBD>r#<00> FB_BLANK_PATH<54>rr<00>
display_onr<EFBFBD><00><00> <00><00><10><1D><05>&rc<01>$<00>ttd<01>y)Nz4
r}rrr<00> display_offr<66><00>r<>r<00> static-pinkz<6B>gst-launch-1.0 videotestsrc pattern=solid-color foreground-color=0xFFFF69B4 ! video/x-raw,width=1280,height=800,framerate=60/1 ! fbdevsink device=/dev/fb0c<01>&<00>t<00>tj<00><00>
t<00>tj |<00>}|<01>t d|<00><00><02><00>t jtj|<01>t jt jd<02><03>ay)NzUnknown video mode: T)rr<00>start_new_session) r <00>poll<6C>
video_stop<EFBFBD>_VIDEO_PIPELINESri<00>
ValueErrorr<00>Popenrr<00>DEVNULL)<02>mode<64>pipelines r<00> video_startr<74><00>su<00><00><12><1E>;<3B>#3<>#3<>#5<>#=<3D><12> <0C><1F>#<23>#<23>D<EFBFBD>)<29>H<EFBFBD><0F><17><18>/<2F><04>v<EFBFBD>6<>7<>7<><1C>"<22>"<22> <0A> <0B> <0B>H<EFBFBD><1D><19>!<21>!<21><19>!<21>!<21><1E> <06>Krc<01><><00>t<00>ytj<00><00>[ ddl}|j|j tj
<00>t j<00>tjd<02><03>dayday#ttjf$r* tj<00>n#t$rYnwxYwYdaywxYw)Nr<00>@)r ) r r<><00>os<6F>killpg<70>getpgid<69>pid<69>signal<61>SIGTERM<52>wait<69>ProcessLookupErrorr<00>TimeoutExpired<65>kill)r<>s rr<>r<><00>s<><00><00><12><1A><0E><12><17><17><19>!<21> <15> <15> <0E>I<EFBFBD>I<EFBFBD>b<EFBFBD>j<EFBFBD>j<EFBFBD><1B><1F><1F>1<>6<EFBFBD>><3E>><3E> B<> <17> <1C> <1C>S<EFBFBD> <1C> )<29> <17>K<EFBFBD>$<24>K<EFBFBD><4B> #<23>J<EFBFBD>$=<3D>$=<3D>><3E> <15> <15><1B> <20> <20>"<22><>%<25> <15><14> <15><><16>K<EFBFBD>  <15>s6<00>AA:<00>:B=<03>B)<02>(B=<03>) B5<05>2B=<03>4B5<05>5B=<03><B=)Tg@)r<00>strrrjr <00>float<61>returnr<6E>)r!r<>r"r<>r<><00>None)r<><00>dict)r<>r<>)r<>zdict[str, str])rVrUr<>rU)r<>g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?)rvr<>rwr<>r<>z
list[dict])r<>)r<>r<>r<>r<>)%<25>__doc__<5F>
__future__r<00>loggingr/rr<>rrr<00>pathlibr<00>typingr<00> getLogger<65>__name__rr:rSrTr-r.r~r <00>__annotations__rr#r7r@rOrWror{r<>r<>r<>r<>r<>rrr<00><module>r<>s<><00><01><04>#<23><0E> <09> <0C> <0A><11> <0B><18><1B><17>g<EFBFBD><17><17><08>!<21><03>3<><0F><10> <0C><14> <0A> <20><13><19><12>/<2F> <0A>+/<2F> <0B> '<27>.<2E> <16>!<21> <06>(U<01> <0F> <20>
!<06>H <15> '<27>'<27>
<12> &<26><02><10><06>"r