自宅にはテレビやモニタがないため、AV360でiMacに入れたり、
サーバ設定時にはプロジェクタを使用しています。
そのプロジェクタをHDタイプにアップグレードするべく、故障品を購入。
プロジェクタ事業を譲渡したのでリコー型番ですが。
ランプ部の白いふたをはずした後、裏面の深い5本のネジと端子部のネジ1本をはずすと上部カバーをはずせます。
ヒューズ(T6.3AH250Vセラミック)が飛んでいましたが、
こういう場合たいていFETも飛んでいるので1次側を追おうと思ったらランプ基板も1次側。
切り分けのため電源基板(APS-N802)だけで通電したらやっぱりヒューズ飛ぶので
FETをテスタで当たったらIPA60R199CPの1つがSD間短絡。
同じ品を購入すると本体購入価格を上回る(笑)のでTK20A60Uに2つとも交換、完了。
しかしこれ、FETとダイオードブリッジに修理跡があるんだよね。
FET並列で使ってるし、待機電力減っただけの新機種が出てるし、
まあいわゆる「設計ミス」ですな。多少オン抵抗が小さいのに交換したから長持ちしてくれるといいな。
何気なく裏面見てるとWinCEのライセンスシールが。 そういえばこの機種、Vistaのネットワークプロジェクタに対応してるんですが、 これRDPプロトコルなので、事実上WinCEマシンでないと実装できないんですよね。 USBとLANとWifiが載った別基板があり、ここにTIのDAVINCIが載ってます。
ネットワーク経由で制御できるのですが普段使いにはやっぱりリモコン、 でも別買いすると本体購入価(略)なので、WinLIRC+MCEで6万通り試すコード流したら運よく3分で判明。 学習リモコンに登録できずにubuntu+lirc+mceusb使ったりしてみたところ、RM-VL501は変調38KHzでないとだめみたい。
begin remote
name RICOH_PJ #WX3230N,Toshiba TLP-WX200
flags REVERSE|SPACE_ENC|CONST_LENGTH
frequency 38000
header 9000 4500
one 563 1687
zero 563 562
ptrail 563
gap 108000
repeat 9000 2250
pre_data_bits 16
pre_data 0xEB80
bits 16
begin codes #CODE2
AVMUTE 0xEE11 #5EA1
POWER 0xED12 #5DA2
ENTER 0xEC13 #5CA3
INPUT 0xEB14 #5BA4
AUTO 0xEA15 #45BA
MENU 0xE41B #5AA5
RETURN 0xE21D #59A6
UP 0xBF40 #57A8
DOWN 0xBE41 #56A9
LEFT 0xBD42 #55AA
RIGHT 0xBC43 #54AB
RESIZE+ 0xBB44 #53AC
FREEZE 0xBA45 #52AD
RESIZE- 0xB946 #51AE
NETWORK 0x9C63 #44BB
0 0xFF00 #CF30
1_NCE 0xA55A #4EB1
2_SIZE 0x916E #4BB4
3_GUIDE 0xFC03 #CC33
4 0xFB04 #CB34
5 0xFA05 #CA35
6 0xF906 #C936
7 0xF807 #C837
8 0xF708 #C738
9 0xF609 #C639
CLEAR 0xB44B #C43B
end codes
end remote
授業参観でみかけて面白そうだと思っていたら故障品が安く出ていたので購入。
…故障してないじゃんつまらん。リモコンもついてきて上の3230Nでも使えました。
コード実は微妙に違うみたいだけど、解析も面倒なのでそのまま。
故障してなくても両側網→後面→前面(フォーカス側)→上面の順に分解。
網は細いマイナスドライバーで上部ツメ2か所を押す。
前面は、内側でも金属板経由で止まってるので銀ネジで金属板ごとはずす。
上面は金属同士を止めているネジをはずす。あとは上部ガラスはずしてそこから主鏡掃除。
なんていうか非常にコンパクトで一見華奢にもかかわらず最低限の部材で緻密に強度計算されており、
さすが東芝の系譜+リコーのカメラ技術というか。
ゲームで必要時に床置きして壁投影ってかなりいいのですが、
ここまで超短焦点だと小さなごみでも影がかなり長く出ますし、
壁って意外と平面出てないので特に上辺が歪みます。
実用上はWX4240Nぐらいが使いやすいです。
ただ、どちらも教室向けなのに取っ手がないのがダメ。
ケースで十分との判断かもしれんが、セットアップの時間が長くなるんだよ。
東芝系はPOWER+MUTE+DOWNに電源コードでランプリセットです。POWER+RETURN+MENU等の機種もあります。
リコーの常設系プロジェクタはNECのOEMでリモコンも上記とは非互換。
このPA803Uは該当するリコー型番がないようです。
常設なら大きいほうが静音ですが、
10kg超えをご家庭に天吊りは怖いかも。
だが同等のレーザはさらに倍。
begin remote
name NEC_PROJECTOR #PA803U,P350W,Ricoh WX5350N
flags REVERSE|SPACE_ENC|CONST_LENGTH
frequency 38000
header 9000 4500
one 563 1687
zero 563 562
ptrail 563
gap 108000
repeat 9000 2250
pre_data_bits 16
pre_data 0xe918
bits 16
post_data_bits 16
post_data 0xff00 #REMOTE ID=00
begin codes
PWON 0xf708
PWOFF 0xeb14
AUTO 0xf906
MENU 0xb946
UP 0x47b8
DOWN 0x43bc
LEFT 0x41be
RIGHT 0x45ba
ENTER 0xe817
EXIT 0xda25
HELP 0xb14e
INFO 0xb04f
SOURCE 0xb24d
TESTPTN 0xee11
VGA1 0xfb04
VGA2 0xfa05
VGA3 0xaa55
VIDEO 0xfc03
SVIDEO 0x39c6
HDMI 0xab54
HDMI1 0xe718
HDMI2 0xe619
DP 0xe51a
COMPU 0xe41b
HDBASET 0xe31c
VIEWER 0xd827
NETWORK 0xa956
USB 0xad52
CLEAR 0xbd42
PICTURE 0xf20d
ASPECT 0xef10
ECO 0xe916
PAGE+ 0xd52a
PAGE- 0xd42b
AVMUTE 0xb847
VOL+ 0xb748
VOL- 0xb649
FREEZE 0xb34c
DZOOM+ 0x7689
DZOOM- 0x758a
ZOOM+ 0xf609
ZOOM- 0xf50a
FOCUS+ 0xf40b
FOCUS- 0xf30c
KEYSTON 0x7f80
FOCUS_Z 0x5fa0
LENSSFT 0x5ea1
#ONSCREENMUTE 0x7c83
end codes
end remote
(autoexec.py)
execfile('/media/DATA/start.py')
(start.py)
import xbmc
xbmc.executebuiltin('PlayMedia("/media/DATA/Video/","isdir")')
#xbmc.executebuiltin('PlayMedia("/media/DATA/Video/list.m3u")') #BOM無しUTF8で漢字ファイル名OK
xbmc.executebuiltin('xbmc.PlayerControl(repeatall)')
あとはPi Zeroに刺して適当にセットアップ後設定→File managerでautoexec.pyをProfile dirにコピーすれば
自動再生マシンのできあがり。
日本語ファイル名表示はSkin-FontsをArial basedに指定、
動画切替時にシークバーやビジーリングを出したくないなら標準スキン書換。
Pi ZeroついででHDMI Lag Tester
簡易版
をインストールして測定。
1080p60、eco、グラフィック、SweetVisionオフ、壁紙オフで0.5+1+0.4=1.9フレームはゲーム可ですが、
3CCDなのに明らかに赤が速い。NV1301はDLP版と共通なのでそのあたりの都合?
Powershell script to decode/encode EIR file| EIR | Decoded | 内容 |
|---|---|---|
| INDEX e[i]=d[i]^0x4D-d[i-1] | ||
| 00 4F | 00 02 | BUTTON COUNT (encode from 2nd byte) |
| 4B 4A | 00 07 | BUTTON1 offset |
| 46 08 | 00 45 | BUTTON2 offset |
| 08 23 | 00 6E | STRING offset |
| F1 | 12 | const |
| BUTTON1 (NEC format example) | ||
| 0E | 0E | 0x4E-length |
| 4C 4E 15 | 4C 4E 15 | const? |
| 3C | 3C | length |
| 10 | 01 | const? (encode from here) |
| 4A 7F | 06 C8 | 66MHz/carrier(38.0kHz) |
| 85 4C | 00 01 | const? |
| 6E | 22 | #of code pulses(incl.start stop pulse) |
| 2D | 02 | #of repeat pulses(incl.start stop pulse) |
| 08 | 47 | 4=Minimum Repeat Count,7=#of times |
| 06 5B | 00 16 | t0=22*carrier=0.579ms |
| 37 0D | 00 40 | t1=64*carrier=1.683ms |
| 0D 1B | 00 56 | t2=86*carrier=2.262ms |
| F7 E6 | 00 AB | t3=171*carrier=4.498ms |
| A1 17 | 01 55 | t4=341*carrier=8.969ms |
| F6 54 | 06 17 | t5=1559*carrier=41.0ms |
| 2C FC | 0E 47 | t6=3655*carrier=96.1ms |
| C7 | 43 | code start mark=t4,code start space=t3 |
| 0A 4D 4D 4D 4D 4D 4D 4C 4B 4B 4C 4C 4C 4C 4B 4B 4C 4C 4C 4D 4C 4C 4D 4D 4C 4C 4C 4B 4C 4C 4B 4B |
00 00 00 00 00 00 00 01 01 01 00 01 00 01 01 01 00 01 00 00 01 00 00 00 01 00 01 01 00 01 01 01 |
code data (mark time,space time in one byte) |
| 47 | 05 | code stop mark=t0,stop to next mark=t5 |
| 0A | 42 | repeat mark=t4,repeat space=t2 |
| 09 | 06 | repeat stop mark=t0,stop to next mark=t6 |
| 73 | 34 | const |
| BUTTON2 (SONY format example) | ||
| 23 | 23 | 0x4E-length |
| 4C 4E 15 | 4C 4E 15 | const? |
| 27 | 27 | length |
| 25 | 01 | const? (encode from here) |
| 4A 2E | 06 79 | 66MHz/carrier(39.8kHz) |
| D4 4C | 00 01 | const? |
| 4C | 00 | no code pulses;repeat pulse while pressing |
| 58 | 15 | #of repeat pulses |
| F4 | 44 | 4=Minimum Repeat Count,4=#of times |
| 09 54 | 00 19 | t0=25*carrier=0.628ms |
| 34 63 | 00 2E | t1=46*carrier=1.155ms |
| 1F 13 | 00 5E | t2=94*carrier=2.360ms(not used) |
| EE 92 | 01 DE | t3=478*carrier=12.00ms |
| 8F | 20 | start mark=t2,start space=t0 |
| 3D 3D 5D 3D 5D 3D 4D 4D 5D 3D 5D 4D 3D 5D 3D 4D 5D 4D 4D 4E |
10 00 10 00 10 00 00 00 10 00 10 10 00 10 00 00 10 10 10 13 |
code data last mark to next start mark=t3 (no individual stop mark for sony format) |
| 66 | 34 | const |
| STRING TABLE 1st d[i-1] is offset LSB =6E | ||
| DF 4B | 00 06 | BUTTON1 NAME offset |
| 47 46 | 00 0B | BUTTON2 NAME offset |
| 42 5D | 00 10 | MISC DATA offset |
| BUTTON1 NAME 1st d[i-1] is offset LSB =06 (if NAME="", default name for machine-type/key-number is used) | ||
| 14 BE 21 48 4D 4A D3 | 57 58 34 31 33 30 4E | WX4130N |
| BUTTON2 NAME 1st d[i-1] is offset LSB =0B | ||
| 04 C7 D3 06 EC 24 43 | 42 44 5A 2D 54 35 35 | BDZ-T55 |
| MISC DATA 1st d[i-1] is offset LSB =10 | ||
| 3B AC | 06 FF | length,type ??? |
| 4E 4D 4D 4D | 00 00 00 00 | unknown, sometimes 00 00 00 01 |
| 45 BD | 08 88 | length,type Larner |
| F4 32 51 47 2F 4F | 31 2E 32 34 2E 30 | 1.24.0 |
| 1B C4 | 06 87 | length,type File Format |
| F5 32 4F 4D | 31 2E 30 30 | 1.00 |
| 21 AC | 1C 85 | length,type Date |
| 94 E4 B3 FC 41 EC F7 B5 06 5C 4B 30 41 5F 4B 4F 4B 31 41 5D 4B 41 3E 46 E7 B0 |
54 75 65 2C 20 41 75 67 20 31 31 2C 20 32 30 32 30 2C 20 30 36 3A 35 36 50 4D |
Tue, Aug 11, 2020, 06:56PM |
| 01 C6 | 03 84 | length,type Version |
| F8 | 31 | 1 |
| 19 C7 | 07 83 | length,type Type |
| 7F CA B1 C0 DA | 4F 54 48 45 52 | OTHER |
| F6 C7 | 05 81 | length,type Manufacturer |
| 8B CE CC | 41 42 43 | ABC |
| 05 CA | 05 82 | length,type Model |
| 87 C4 C6 | 44 45 46 | DEF |
| 02 C6 | 05 86 | length,type Comments |
| 84 BE BC | 47 48 49 | GHI |
| FE BA | 0A 89 | length,type File Name |
| 7F BF D6 2A 32 FA BF D6 | 45 49 52 31 2E 65 69 72 | EIR1.eir |
| DB 1B | 00 56 | length=0,const |
var key= new System.Security.Cryptography.Rfc2898DeriveBytes(System.Text.Encoding.ASCII.GetBytes(pin) ,System.Text.Encoding.ASCII.GetBytes(salt),1331).GetBytes(16); var aes= new System.Security.Cryptography.AesManaged(); aes.KeySize= 128; aes.Mode= System.Security.Cryptography.CipherMode.CBC; aes.Padding= System.Security.Cryptography.PaddingMode.PKCS7; var blen= password.Length/2; var user_pw= System.Text.Encoding.ASCII.GetString(aes.CreateDecryptor(key, new byte[16]).TransformFinalBlock( Enumerable.Range(0,blen).Select(x=>Convert.ToByte(password.Substring(x*2,2),16)).ToArray(), 0, blen));32文字のuser_pwが得られるので、 /v2/remote/confirm_connectionにdigest認証(user_id,user_pw)でPOSTすれば登録されますが、 普通に本体設定したAppコネクトのユーザ名とパスワードでもいいです。
{"status":0,"command":[
{"http_method":"POST","resource":"\/v2\/remote\/browser\/url","params":["force_startup","mode","power_on","url"]},
{"http_method":"GET","resource":"\/v2\/remote\/text_box","params":[]},
{"http_method":"POST","resource":"\/v2\/remote\/text_box","params":["text"]},
{"http_method":"POST","resource":"\/v2\/public\/cancel_connection","params":["access_code","current_time","user_id"]},
{"http_method":"POST","resource":"\/v2\/public\/request_connection","params":["access_code","current_time","user_id"]},
{"http_method":"POST","resource":"\/v2\/remote\/confirm_connection","params":[]},
{"http_method":"GET","resource":"\/public\/feature","params":[]},
{"http_method":"POST","resource":"\/v2\/remote\/search\/program","params":[
"broadcast_type","channel","date_from","date_to","genre","keyword","mark","pay_program","rec_storage_id","target"]},
{"http_method":"GET","resource":"\/v2\/remote\/pvr\/folders\/list","params":[]},
{"http_method":"GET","resource":"\/public\/support","params":["http_method","params","resource"]},
{"http_method":"GET","resource":"\/v2\/remote\/support","params":[]},
{"http_method":"POST","resource":"\/v2\/remote\/status\/channel","params":["channel","power_on"]},
{"http_method":"GET","resource":"\/v2\/remote\/status\/foreground_dtvapp","params":[]},
{"http_method":"POST","resource":"\/v2\/remote\/status\/foreground_dtvapp","params":["foreground_dtvapp","option"]},
{"http_method":"GET","resource":"\/v2\/remote\/status\/mute","params":[]},
{"http_method":"GET","resource":"\/v2\/remote\/settings\/channel_list","params":[]},
{"http_method":"GET","resource":"\/v2\/remote\/settings\/timeshift","params":[]},
{"http_method":"GET","resource":"\/v2\/remote\/timeshift\/list\/:channel_code","params":[
"base","count","description","duration","start"]},
{"http_method":"POST","resource":"\/v2\/remote\/timeshift\/list\/:channel_code","params":[
"cloud_user_id","duration","play","start_position"]},
{"http_method":"GET","resource":"\/v2\/remote\/timeshift\/oldest_time","params":[]},
{"http_method":"GET","resource":"\/v2\/remote\/pvr\/storages\/list","params":[]},
{"http_method":"GET","resource":"\/v2\/remote\/pvr\/play\/list\/:rec_storage_id\/:rec_content_id","params":[]},
{"http_method":"POST","resource":"\/v2\/remote\/pvr\/play\/list\/:rec_storage_id\/:rec_content_id","params":[
"cloud_user_id","duration","play","start_position"]},
{"http_method":"GET","resource":"\/v2\/remote\/epg\/:channel_code","params":["time"]},
{"http_method":"GET","resource":"\/v2\/remote\/pvr\/reserves\/list","params":[]},
{"http_method":"POST","resource":"\/v2\/remote\/pvr\/reserves\/list\/:rsv_id","params":[
"cloud_user_id","duration_series","follow","indexing","keyword_series","protect","rec_folder_id","rec_storage_id",
"repeat_series","start_time_series","title_series"]},
{"http_method":"DELETE","resource":"\/v2\/remote\/pvr\/reserves\/list\/:rsv_id","params":["cloud_user_id"]},
{"http_method":"POST","resource":"\/v2\/remote\/pvr\/reserves\/new","params":[
"channel","cloud_user_id","duration","duration_series","epg_content_id","follow","indexing","keyword_series",
"parental_pin","protect","rec_folder_id","rec_storage_id","repeat","repeat_series","series_rec","start_time",
"start_time_series","title_series"]},
{"http_method":"GET","resource":"\/v2\/remote\/pvr\/reserves\/options\/names","params":["rec_mode"]},
{"http_method":"GET","resource":"\/v2\/remote\/settings\/cloud\/device_id\/pdid","params":[]},
{"http_method":"GET","resource":"\/v2\/remote\/settings\/cloud\/device_id\/sdid","params":[]},
{"http_method":"GET","resource":"\/v2\/remote\/play\/status","params":[]},
{"http_method":"GET","resource":"\/v2\/remote\/play\/status\/playing_action_info","params":[]},
{"http_method":"POST","resource":"\/v2\/remote\/play\/status\/playing_time","params":["milli_position","position"]},
{"http_method":"GET","resource":"\/v2\/remote\/csp\/direct_play_list","params":[]},
{"http_method":"POST","resource":"\/v2\/remote\/csp\/list\/:csp_name","params":[
"cloud_user_id","csp_content_id","csp_content_opt","csp_content_type"]},
{"http_method":"GET","resource":"\/v2\/remote\/reminders\/list","params":[]},
{"http_method":"DELETE","resource":"\/v2\/remote\/reminders\/list\/:rem_id","params":["cloud_user_id"]},
{"http_method":"POST","resource":"\/v2\/remote\/reminders\/new","params":[
"channel","cloud_user_id","duration","epg_content_id","repeat","start_time"]}
]}
(jsonはスラッシュをエスケープするんだ・・・これJSONPで</script>が登場しないようにするためらしいなるほどのう。CORSプレフライト万歳。)