SyntaxHighlighter

2015年4月29日水曜日

ChronoEngine導入メモ

1. IRRLICHT ENGINEのx64buildは、READMEに書いてあるとおり、VC Expressではできない。
 最近だとVC Communityがあるので、そっちを使えば、なんの苦労もなく(設定調整もなく)、
 x64を選択するだけでビルドできる

2.なぜか、ChronoEngineでcmakeを行う際、Irrlichtの指定が1.8.1ではなく1.8になることがある。
 やったらファイル存在エラーを吐いてる時はここに注意。

3.ChronoEngineのx64も同様に。

WS2812をいじってわかったこと

WS2812をPICから点灯させようとした結果。
俗に言われる、シリアルLED、シリアルRGBLED、テープLED、LEDリングと呼ばれるもの
(自分が購入したのは、NeoPixel Ring - 12連フルカラーシリアルLED)

1.データシートによってタイミングはバラバラだが、以下のサイトの値がちょうどいい感じだった。

秋月でWS2812B買ってしまったので動かないかも知れないけれど作ってみた
http://www.mars.dti.ne.jp/~m7030/pic_room/ws2812b/index.html

確かに、Hの時間が重要で、Lの時間が長い文には問題ないらしい


2.起動一発目の通信は必ずバグるっぽい
 全部0にしているのに緑が点灯したりするが、ほっといて二周目以降の通信は正常になる。
 (これにだいぶハマった)

3.MPLABXのシミュレートサイクルは、供給クロックではなく、命令サイクル
 つまり、32MHzで動作させているのなら8MHzに設定する。
 よく読むと書いてあるが、これまたハマった。
 時間調整にstopWatch機能を使用したため

4.当然だが、バイト-バイト間の時間が50uSを超えるとリセットされる。

5.光り方が変なときは、電源電流を疑え(特に、点灯数が増えるに連れ赤っぽくなる時)

6.MPASMで使えたMOVFWとかは使えない。なぜかSTATUS,Zの指定もできない(Z=2)

X8Cで、16F1705を32MHzで動作させた場合のサンプルを置いておく。
エディタではエラー表示が大量に出るが、コンパイルは問題なく通る。
asm_testが1つのLEDにデータを送る処理となる。

static volatile char cnt;
static volatile char TMP;
static volatile char asmR;
static volatile char asmG;
static volatile char asmB;
void asm_test(char R,char G,char B)
{
    asmR = R;
    asmG = G;
    asmB = B;
#asm
    MOVF _asmG,W
    call SEND

    MOVF _asmR,W
    call SEND

    MOVF _asmB,W
    call SEND
    goto EXIT

SEND:
    MOVWF _TMP

    MOVLW 8
    MOVWF _cnt

LP_R:
    MOVF _TMP,W
    RLF  _TMP,f
    ANDLW 0x80
    BTFSC STATUS,2
    goto BIT_LOW
    goto BIT_HIGH

LP_B:
    DECFSZ  _cnt
    goto LP_R

    return
         
 BIT_LOW:
    bsf LATC,0 //125ns
    nop //125ns
    nop //125ns
    bcf LATC,0
    goto LP_B
BIT_HIGH:
    bsf LATC,0 //125ns
    nop //125ns
    nop //125ns
    nop //125ns
    nop //125ns
    bcf LATC,0
    goto LP_B

EXIT:
    nop
#endasm
}
void send_led(char R[],char G[],char B[])
{
    __delay_us(50); //ある程度高速に送ってやらないとダメ。
    asm_test(R[0],G[0],B[0]);
    asm_test(R[1],G[1],B[1]);
    asm_test(R[2],G[2],B[2]);
    asm_test(R[3],G[3],B[3]);
    asm_test(R[4],G[4],B[4]);
    asm_test(R[5],G[5],B[5]);
    asm_test(R[6],G[6],B[6]);
    asm_test(R[7],G[7],B[7]);
    asm_test(R[8],G[8],B[8]);
    asm_test(R[9],G[9],B[9]);
    asm_test(R[10],G[10],B[10]);
    asm_test(R[11],G[11],B[11]);
    asm_test(R[12],G[12],B[12]);
}

2015年4月22日水曜日

FlashAirでやったこと

サンプルスクリプト一覧
・Pushoverを通してスマホに通知
・Stewgate-Uを通してtwitterにツイート
・Pastebinからテキストファイルをダウンロード
・ポメラからLuaスクリプトを組むための補助スクリプト8_sys_pomeralua
・Dropboxへ自動アップロード
・スクリプトをHTTPサーバーからダウンロードして実行
・フリーズ試験用スクリプト
・ソフトSPIもどき(Arduino風版)
・ソフトSPIもどき(チューンアップ版)
・ソフトI2Cで秋月I2C液晶を駆動
・ソフトPWM
・隠し関数解析結果

ライブラリ的なもの
・pioduino (fa.pioをArduino風に扱う)
・pioduino for FlashAirプロトタイピングボード
 (イベントで配布された非公式開発ボードのSPI-I2Cブリッジ補助関数、秋月LCD制御関数と、Arduino風GPIO制御関数)

その他表に出してないけどやったもの
・I2C経由でAquesTalk Picoを制御してしゃべる
・I2C経由でLEDマトリクスを表示
・Googleスプレッドシートに書き込み(ニコニコに動画あり)
・ソフトSPIもどきを経由して、Arduinoを通し、e-DISP(カラー液晶)を制御(ニコニコに動画あり)
・ボタンと液晶でメニュー実装して操作してみる
・FlashAir同士のIBSS通信でLチカ同期
・FlashAir同士のルータ経由の通信でLチカ同期
・FlashAir同士のAP-STA通信でLチカ同期
・ポメラ用テキストブラウザ(Google携帯電話変換利用)
・IPアドレス固定化
・ハードウェアSPI通信(fa.HTTPGetFileのバグにより頓挫)
・PCからGET経由での液晶制御(URL長さバグにより頓挫)
・ComputerCraftとの提携(Lua不使用)

・諸所の不具合調査
 (URLバグ、リターンスタックバグ、CP2120GPIOの仕様...etc)

2015年4月13日月曜日

FlashAirへの要望等々

意見要望等があれば書いて欲しい、というお話があったので、
とりあえず、書くだけ書いてみる。

書いてみただけなので、需要とか、実現可能性はあまり考慮していない。
(特に可能性の低そうなものは優先度低としている)


>不具合対応

FA9CAW3AW3.00.01で修正された
・関数をネストした時、特にfa.requestなどを使った際に、SDカード機能ごとフリーズして
 ホスト機器を巻き込むのをやめてほしい。
 Luaインタプリタ側でエラーを吐いて止めて、メモリをクリーンアップしてくれるのが一番だが、
 できなくとも、せめてSDカード機能は死守してほしい。可能ならWebサーバー機能も。

・dofile、requireで2KB以上のファイルを読み込んだ時に、組み込み関数の動作が不安定に
 なる(もしくはフリーズする)問題も同様である。
→改善されたようです。

・fa.HTTPGetfileの、受信に失敗してゴミデータを生成する状態、および、
 受信には成功しているがデータに異常が発生する状態をどうにかしてほしい。
→取得成功するか、失敗して空ファイルが出来上がるか、だけになったようです。

・URLの長さ制限が142文字なのはいいとしても、それを超えるとエラー無しに
 URLが切れ、ゴミデータがつくのはやめてほしい。
 無理ならば、128Byteくらいで414 Request URI too long を返してほしい。
 (あまりにも長いようなら、500が帰ってきているようだが)
→124文字で414 Request-URI Too Largeが帰るようになりました。

・URLゴミ蓄積問題(数十回の長いURL呼び出しでWebサーバーが落ちる問題)をどうにかしてほしい。
 おそらく、Lua外のメモリがリークしているか、開放されずに食いつぶされているようにみえる。

上記の不具合については、以下のURLに詳細を掲示しているので参照してほしい。
https://sites.google.com/site/gpsnmeajp/flashairnobagu-de-ju-dong

・fa.requestにおいて、http://192.168.1.3:8080/ のようなポート番号付きURLのアクセスに対応していない問題を解決してほしい。
 →新板でも改善していない。

>改善要望

*優先度高
・fa.requestおよび、HTTPGetFileで、独自のユーザーエージェントを設定してほしい。
 サーバ管理者がアクセス元を識別できず、困ったことになる。
 (デフォルトで設定し、別に指定したいものがあれば上書きできるようにすると良いと思う)

・HTTPGetFileで、ヘッダの編集機能を追加してほしい。
 現在はHTTP/1.1と、Hostと、BASIC認証しかなく、取得したいものが取りにいけない場合がある。

・command.cgi、upload.cgiにある機能はすべてLuaから操作できるようにしてほしい。
 共有メモリや、ホスト機器書き込みプロテクトが特に必要。
→共有メモリは実装された。

・STAモードで接続した時、flashair/にアクセスするとリダイレクトループに巻き込まれるのを
 どうにかしてほしい。
→治った?

・iPhoneから、誤ったファイルにアクセスした際、またflashair/にアクセスした際、
 リダイレクトループに巻き込まれるのをどうにかしてほしい。

・Luaからしかアクセス出来ない領域がほしい。
 (ホスト機器からFAT破壊を起こされる心配のない、Luaからしか見えない
 ファイル領域があるとすごく嬉しい(16MBくらい))
 →現在は、破壊を受ける心配のないホスト機器のみに厳選し、
 タイミングを計って操作する必要がある。専用領域があれば、その心配なく
 すべでの機器で、アップロード次のファイル管理などが出来る様になる。
 専用領域は開発者用ツールなどで操作できると嬉しいが、できなくてもよい。
 ファイルシステムが無理なら、せめてArduinoのEEPROMライブラリのようなものが
 あれば、最悪何とかなる。

・fa.reqestにタイムアウト設定がほしい。
 (よく、応答なくなったまま帰ってこなくなる)

・ブラウザからfa.requestを呼び出してflashair自身にアクセスすると
 503エラーを出すのを何とかしてほしい。
 (成功するか、もしくは、関数側で拒否してほしい)

・起動時などのLuaスクリプトを動作させながら、ブラウザからLuaスクリプトを呼び出すと
 ブラウザの応答がなくなるのをどうにかしてほしい(エラーを返してほしい)


*優先度低

・GoogleChromeでアクセスした際に応答が遅いのを何とかできないだろうか。
 (iPhone等でもたまに非常に応答が悪い場合がある)

・GETのみでなく、POSTを受け付けてほしい。
 また、POSTを受け取るための関数か、環境変数を用意してほしい。

・東芝設定ツールの「初期化」でクイックフォーマットをしてほしい。
 (設定の初期化と、ファイルの削除くらいしかしていないように見える)
 現在は、FATが破損した際、WindowsかSDアソシエーションのフォーマッタから
 クイックフォーマットの上、さらに設定ツールで初期化をするため、無駄に手間がかかる。

・PIO関数でなく、ホスト機器から初期化されているか否かチェックできる関数がほしい。

・HTTPでない、生のソケット通信ができると嬉しい
 サーバーとして受付できるとさらに嬉しい
 これらができると、他の無線モジュールと同等の立ち位置で使用できる。

・ComputerCraftのように、イベント駆動のプログラムが組めるようになると嬉しい。
 例えば、fa.request_nonblockというように、要求だけ先に送り、
 あとから受け取れる機能があると嬉しい。
 (sleepの間に実行ということになるだろうが)
http://computercraft.info/wiki/Os.pullEvent

・同様に、タイマー(アラーム)、IO変化などの割り込みがあると嬉しい。

・エンコードの変換関数があると嬉しい。
 (SJIS←→UTF-8など)
→実装された。

・再起動関数および、command.cgiからの再起動があると良い。

・LUA_SD_EVENTで起動する際、引数にトリガになったファイルのパスを
 入れてくれると、非常に汎用性が上がる。(いちいちディレクトリスキャンをせずにすむ)

・APモードおよびIBSSモードで、接続している子機のMACアドレスとIPアドレスの対応テーブルが
 あると、なにかと便利である。強制切断がLuaから行えると、セキュリティにもなる。

・CGI実行時、アクセス元のIPアドレスとMACアドレスが取得できると、
 業務用アプリケーションにおいて、簡易な不正防止が実装できる。
 (Wi-Fiのパスワードはクラックされる危険がそこそこに高いので)
 可能であれば、ユーザーエージェントなど、通常CGIでえられる環境変数をすべて取得できると
 より良い。

・現在隠し(未公開/非公開)となっている関数を正式にサポートしてほしい。
 ドキュメントがあると嬉しいが、ないのなら、せめて存在していることだけでも公式に示してほしい。
 (政治上の理由等で不可能であるのなら無理にとは言わない)
→fa.spiは公開された。

・コルーチン機能を、次期バージョン(W-04)でもいいので実装されるとうれしい。

Windows8.1でアドホックネットワークを作る・接続する

Windows8.1でアドホックネットワークを作る・接続する手順。

探してもなかなか出てこないので。
ソフトAPはここじゃないです。この1つ前の記事を参照すると幸せになれます。

あくまで「アドホックネットワーク」「Adhoc」「IBSS」の接続でやりたい方に
(いろいろ問題があるので、可能なら使わないことをお勧めしますが)

ここを見れば一発ですが、日本語で書いておく。

Windows 8.1 connecting to Ad Hoc networks
https://social.technet.microsoft.com/forums/windows/en-US/56ff83ff-1f15-4fc1-aa37-6651340d46fa/windows-81-connecting-to-ad-hoc-networks


1.「ネットワークと共有センター」を開く
2.「新しい接続またはネットワークのセットアップ」を開く
3.「ワイヤレス ネットワークに手動で接続します」を選ぶ
4.「ネットワーク名」にSSIDを選び、セキュリティの種類を選ぶ。
 正しいアドホックネットワークでは、オープンアクセスかWEPが望ましいが、
 より強固なセキュリティでは、接続できる機器とできない機器が現れる。
5.「この接続を自動的に開始します(T)」がオンでないことを確認する
   
(WEPを選ぶとチェックが入るので外す)

6.次へ
7.正常に(SSID)を追加しました が出たら、閉じる。

8.管理者権限のあるコマンドプロンプトを開く
9. netsh wlan set profileparameter <ssid> connectiontype=ibss
 (ネットワークの種別を通常の物から、アドホックに変更する)
10. netsh wlan connect <ssid>
 (アドホックネットワークを開始する)

11. IPアドレスは自分で設定しましょう。

12. netsh wlan disconnect
 (アドホックネットワークから切断する)


13. netsh wlan delete profile <ssid>
 (作ったプロファイルを削除する)

※netshでネットワークプロファイルを作成するのは面倒っぽい

Windows8.1でソフトウェアアクセスポイントを起動するためのバッチファイル

Windows8.1で、PCを親機としたソフトAPを使いたいことがあると思う。
GUIから設定できなくなったらしい。
以下のバッチを使えば、自動でソフトAPを起動&終了することができる。
一時的に使用せざるを得ない状況になった時に使うといい。


@echo off
echo 管理者権限で実行せよ。中止するならCtrl+Cを押せ。
SET /P SSID=Enter_SSID:
SET /P KEY=Enter_KEY:

netsh wlan set hostednetwork mode=allow
netsh wlan set hostednetwork ssid=%SSID% key=%KEY%
netsh wlan start hostednetwork

echo ソフトAPモード開始
echo なにかキーを押すとソフトAPモードを停止する
echo SSIDは%SSID%、キーは%KEY%
pause > NUL

netsh wlan stop hostednetwork
echo ソフトAPを停止した。なにかキーを押すと終了する。
pause >NUL

2015年4月9日木曜日

Windows リソース保護により、破損したファイルが見つかりましたが、それらの一部は修復できませんでした。 と出た時。

sfc /scannnow で

Windows リソース保護により、破損したファイルが見つかりましたが、それらの
一部は修復できませんでした。

と表示された時。

結論

DISM.exe /Online /Cleanup-image /ScanHealth   さらに高機能な自動検査
DISM.exe /Online /Cleanup-image /Restorehealth  さらに高機能な自動修復

つまり、Windows 8以上なら

DISM.exe /Online /Cleanup-image /Restorehealth

を実行すれば修復してくれる。


---以下、実行したときのログ---

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\windows\system32>sfc /scannow

システム スキャンを開始しています。これにはしばらく時間がかかります。

システム スキャンの検証フェーズを開始しています。
検証 100% が完了しました。

Windows リソース保護により、破損したファイルが見つかりましたが、それらの
一部は修復できませんでした。詳細は CBS.Log windir\Logs\CBS\CBS.log に
含まれています。例: C:\Windows\Logs\CBS\CBS.log。ただし、オフライン
サービス シナリオでのログの記録は現在サポートされていません。

C:\windows\system32>Dism /Online /Cleanup-Image /ScanHealth

展開イメージのサービスと管理ツール
バージョン: 6.3.9600.17031

イメージのバージョン: 6.3.9600.17031

[==========================100.0%==========================]
コンポーネント ストアは修復できます。
操作は正常に完了しました。

C:\windows\system32>DISM.exe /Online /Cleanup-image /Restorehealth

展開イメージのサービスと管理ツール
バージョン: 6.3.9600.17031

イメージのバージョン: 6.3.9600.17031

[==========================100.0%==========================]
復元操作は正常に完了しました。壊れたコンポーネント ストアは修復されました。
操作は正常に完了しました。

C:\windows\system32>sfc /scannow

システム スキャンを開始しています。これにはしばらく時間がかかります。

システム スキャンの検証フェーズを開始しています。
検証 100% が完了しました。

Windows リソース保護は、整合性違反を検出しませんでした。

C:\windows\system32>

2015年4月4日土曜日

GoogleSitesにガジェットを挿入する手順(Google Driveの公開機能を使う)

GoogleSitesにガジェットを挿入する手順(Google Driveの公開機能を使う)
(Googleガジェットエディタが使用不能になってりるので)

1.外部公開フォルダを作る

2.そこにXMLファイルを保存する
<Module>
<ModulePrefs title="My Gadget"/>
<Content type="html">
<![CDATA[

使いたいjavascript

]]>
</Content>
</Module>

3.その共有リンクを取得する
https://drive.google.com/folderview?id=[[ フォルダID ]]&usp=sharing


4.そこから外部アクセス用URLに加工し、アクセス(シンプルなファイル一覧になる)
https://googledrive.com/host/[[フォルダID]]


5.XMLファイルを開き、そこからURLを作成する
(めっちゃ長いアドレスです)

6.サイトから挿入(その他のガジェット)