2016年8月17日水曜日

chan_mobile用ファームウェア



GL-MT300NでCHAN_MOBILEを使えるファームウェア
なんかpythonも入ったっぽく容量カツカツで本当にそれにしか使えない

ファーム

不必要なpythonを除いてみた

追加ファイル


pythonを除いたものでも3MBしか残りがないので注意
基本的にルーターの内側で電話の転送だけ行うことを前提にしている

要するに、MVNOに移ったけど前の電話番号にかかってくる電話をbrastelで転送したい
というのを少ないステップで実現できたらいいよねという話
外からレジストさせるとなるとfail2banとか色々ほしくなるので、
raspbx使うなりorange piにそれっぽいの入れるほうが手っ取り早い
一応ipsetは入れてるはずなので
opkg update
opkg install hostip
で、DDNSを逆引きさせれる方法でクライアントを制限するぐらいはできるかな

setup.tarを/tmpにでもコピーして
tar xvf setup.tar
chmod +x setup.sh
./setup.sh

で必要なファイルをコピーしてくれるはず。予め入れておけばいいんだけど面倒なのでw
必要なものは
GL-MT300N
3ドルぐらいのBT4.0ドングル(planexのmicro4とかでもよい)

BTでハンズフリーが使えて
BTタイムアウトにしない設定ができる
携帯電話(たぶん)

○グラティーナ2(運用中)
△ポラロイドpigu (5分くらいで切れる)
○doogee DG110(ごにょごにょできる)
○IDEOS(主にテスト中)
○N-03E

OpenWrt*CLI> mobile show devices
ID              Address           Group Adapter         Connected State      SMS
N03E            38:BF:33:10:XX:XX 2     dlink3          Yes       Free       No
U8150           28:5F:DB:33:XX:XX 2     dlink2          Yes       Free       No

ハブを使ってドングルを2こさせば複数収容も可能
bluetoothctlでホストを切り替えて設定するには

select XX:XX:XX:XX:XX:XX:XX
agent DisplayOnly
default-agent on
scan on
pair XX:XX:XX:XX:XX:XX:XX
trust XX:XX:XX:XX:XX:XX:XX

をすればOK


SIMなしでテストするにはbrastel+標準SIPが便利



JBのMTK6572,6582だとIMEI書き換えは簡単なのでキッズケータイでカケホ契約してゲフンゲフン
登録方法とかは割愛で
EXROOTはなんかかっこ悪いのでなんとかしたかっただけで特にメリットはない(笑)


--ほかの追加機能--

asterisk11-chan-dongle

値段の安い E173に対応するよう手を入れたもの

E173の場合は

portsel=1

を設定すること。

このドングルは音声ポートが違っているようなのでAT^PORTSEL=1をセットしてやらないといけない

https://github.com/gabrielzmt/asterisk-chan-dongle/issues/152

この通りにすると今度は普通のが使えなくなるのでdongle.confの値を使うようにした

他のご一行さま




2016年7月3日日曜日

ATTINY85のi2cスレーブデバイスをOPENWRTにつないでみる



さて、虎の子のGPIOを使ってしまったのでリレーをつなげなくなってしまった。
シリアルポートにarduinoをつなげるという手も考えた・・・っていうか作ったのだけど

i2cのスレーブにarduinoのようなもの をぶら下げるほうがいいと思えた。


tinywireSというライブラリがあるっぽい。
http://qiita.com/mt08/items/46d73c4e1957c1eb55f5


DIGISPARKは持ってないけど、ATTINY85,45なら持っているのでサクッとブートローダーを書いて
適当にサンプルソースを書き換える。


// ATTiny based I2C relay control
// ForkRobotics 2012
//

#include "TinyWireS.h"                  // wrapper class for I2C slave routines

#define I2C_SLAVE_ADDR  0x26            // i2c slave address
#define Relay1_PIN  1
#define Relay2_PIN  4
#define Relay3_PIN  3

void setup() {
  pinMode(Relay1_PIN, OUTPUT);
  pinMode(Relay2_PIN, OUTPUT);
  pinMode(Relay3_PIN, OUTPUT);
  digitalWrite(Relay1_PIN, HIGH); //HIGHでOFFのリレー用
  digitalWrite(Relay2_PIN, HIGH);
  digitalWrite(Relay3_PIN, HIGH);

  TinyWireS.begin(I2C_SLAVE_ADDR);      // init I2C Slave mode
}

void loop() {
  byte byteRcvd = 0;
  if (TinyWireS.available()) {          // got I2C input!
    byteRcvd = TinyWireS.receive();     // get the byte from master
    switch (byteRcvd) {
      case 0x01:
        digitalWrite(Relay1_PIN, LOW);
        break;
      case 0x02:
        digitalWrite(Relay2_PIN, LOW);
        break;

      case 0x03:
        digitalWrite(Relay3_PIN, LOW);
        break;
      case 0x11:
        digitalWrite(Relay1_PIN, HIGH);
        break;

      case 0x12:
        digitalWrite(Relay2_PIN, HIGH);
        break;
      case 0x13:
        digitalWrite(Relay3_PIN, HIGH);
        break;


    }

  }
}

void Switch(int relay) {
  if (digitalRead(relay) == HIGH) {
    digitalWrite(relay, LOW);
  }
  else {
    digitalWrite(relay, HIGH);
  }
}

超絶手抜きだけど気にしない。

#6番ピンON/OFF
#i2cset -y 0 0x26 0x01 0x00 b
#i2cset -y 0 0x26 0x11 0x00 b


ふつうは正論理でいいはずなのだけど、arduino用の5vリレーは大抵負論理なので注意
途中に抵抗を入れてやらなきゃいけなかったりもするしめんどくさい。
ebayに3.3v用のリレーが売ってるのを買ってつなげたほうが手っ取り早い。



OPENWRTにLCDをつなげてみる


GL-MT300Nではほかに供用されていないGPIOでピンが出ているのは

WPSボタン用2番
未使用の44番

これをi2cにして液晶をつなげてみる。

これにはちょっと問題があって、この手のルータは大抵3.3v 

LCDに変換ボードがついているものは大抵5vだ。

ただ、いくつか例外があって、変換ボードを介さないACM1602 ACM802なんてのは3.3v

ちょうど手元にあった スイッチサイエンスの液晶(3.3v版)

を接続してみる。

まずは参考にするページ

https://wiki.openwrt.org/doc/hardware/port.i2c

http://netlog.jpn.org/r271-635/2013/01/raspberry_pi_i2c_lcd.html
配線は
SCL->GPIO 2
SDA-> GPIO 44
VCC->3.3v
GNDー>GND


といたってシンプル

# opkg update
# opkg install kmod-i2c-gpio-custom kmod-i2c-core
# insmod i2c-dev
# insmod i2c-gpio-custom bus0=0,2,44
ところがどっこい、こやつにはi2c-toolsがないので


# wget http://dl.eko.one.pl/chaos_calmer/ramips/packages/i2c-tools_3.1.2-1_ramips_24kec.ipk

# opkg install i2c-tools_3.1.2-1_ramips_24kec.ipk


確認
# i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- 26 -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

3eが見えていればOK。

起動時ロードさせるには

# echo "i2c-gpio-custom bus0=0,2,44" > /etc/modules.d/99-i2c-gpio-custom

んなのでええんでないのと。
先人のありがたいスクリプトをリスペクト(古い)しよう

# opkg install bash perl

# vi i2c_lcd.sh

#!/bin/bash
function usage {
    echo "Usage: $0 [-ic] [-p pos] message" > /dev/stderr;
    echo "       -i : LCD init, -c : Clear Screen" > /dev/stderr
    echo "       -p : position (0:top left, 40:bottom left)" > /dev/stderr
    exit 1
}
[ $# = 0 ] && usage

while getopts "icp:" flag; do
    case $flag in
        \?) usage ;;
        i)  i2cset -y 0 0x3e 0 0x38 0x39 0x14 0x70 0x5e 0x6c i
            sleep 0.25
            i2cset -y 0 0x3e 0 0x0c 0x01 0x06 i
            sleep 0.05
            ;;
        c)  i2cset -y 0 0x3e 0 0x01 ;;
        p)  i2cset -y 0 0x3e 0 $((OPTARG+128)) ;;
    esac
done
shift $((OPTIND-1))
[ $# = 0 ] && exit

LANG=C
MSG=`echo -n "$1" | perl -pe '$_=join" ",map{ord }split//'`
#echo $MSG
i2cset -y 0 0x3e 0x40 $MSG i

で保存。


# chmod +x ./i2c_lcd.sh
#  ./i2c_lcd.sh -i
#  ./i2c_lcd.sh  "hogehoge"
#  ./i2c_lcd.sh -c

2016年6月30日木曜日

OPENWRTでページング

いわゆる ぴんぽんぱんぽんってやつ。

アイコムがそのものを出していたらしいのだけど、生産終了になった模様

じゃぁラズパイなりでやればいいじゃないっていうことを有名どころさんも考えた。


紆余曲折の果ておっぱいでも同じことをしてみた。。。が省略
おそらく詰まるところが1つあって


loborisカーネルだと
HDMIのRAWサポートが有効なので動かない


カーネルを再コンパイルしないとだめ。


ふと、openwrtのtrunkを見てたら、asterisk13でossとalsaサポートが有効化されていた。
CCにバックポートしてコンパイルしたらGL-MT300Nで動いた。


GL-MT300Nは苦労せずに動かせるGPIOポートが2個(2,44)があるのでそれを使う。
GPIO2は元々WPSボタン用なので、
電源投入時プルアップがされておりリレーがONになってしまう。
それ以外は納得の出来だ。

2016年3月18日金曜日

GL-MT300A 発売!

http://www.gl-inet.com/product/gl-mt300a/

すでにARM-A9系でchan_mobileが動くと確認できたので
今更買わなくても良い気がするけどぽちった。
これでGbEなら文句なしなのだが
微妙に外すのが中華っぽい。
トラベルルーターとしては高性能だけど
そもそも、トラベルルーターという商品が
日本ではほとんど役に立たない。

ルーターとしてはWHR-300HP2程度の性能しかなく
ラズパイ3が優秀過ぎなのとおっぱいが安すぎなので
おもちゃとしての魅力も乏しい。






CPUMTK 7620A @580Mhz
Memory/StorageDDR1 128MB/ FLASH 16MB
Interfaces1 WAN, 1 LAN, 1 USB2.0, 1 micro USB (power), 1 Reset button
Frequency2.4GHz
Transmission rate300Mbps
Max Tx Power20dBm
Protocol802.11 b/g/n
External Storage supportFAT32/EXFAT/EXT4/EXT3/EXT2/NTFS
Webcam supportMJPG, YUV
DIY featuresUART, TF Card interface, 3.3V & 5V power port
External antenna supportYes
PoE supportNo
Power input5V/1A
Power consumption<3W
Dimension, Weigh58*58*25mm, 39g

TFスロットというのがピンだけ出ていてあとは自分で
って言われると(たぶんいわれる)面倒というかダルイい。

どうやらSDのドーターボードは無料でつけてくれるが、はんだ付けは自分でしてね
らしい。それならまぁいいか。

ざっとソース覗いた感じ、300Nと大差ないのでasterisk11とchan_mobileはあっさり動きそうだ。

asterisk11で携帯電話を収容する という一点だけでコスト比較

名称価格
OrangePI-ONE$13.1(9.99)+SDCARD+BT
NANOPI M1$21(10)+SDCARD+BT
GL-MT300A$36(30)+SDCARD+BT
Raspberry Pi 36500円($35)+SDCARD
Xiaomi Mi WiFi Mini$29+SDCARD+BT+HUB

純正でケースがない点を除けばおっぱい1号が最強
でもorangepiのサポート体制ってないも同然だからね~
NANOPIM1のこれからに期待

GL-MT300Aは立ち位置がちょっと微妙



AR71xxで音が出ないのはENDIANの問題っぽいことはわかった。
問題はどこで起きているのか? で
BLUEZにそれっぽい問題があったので5.37まで上げてみるも変わらず。
PULSEAUDIOのほうかな?と思って手を入れてみたけどこちらも空振り。

すでに動かす必要が無いとはいえ、動かないと腹が立つ。

2016年3月14日月曜日

わりと完璧な asterisk routerを作る(機種選定)

色々な実験の結果以下のことがわかった
いいから(ry-> http://ppl.ug/QHRh4bvF0sc/

1.OpenWRT CC だとchan_mobileが動かせる

bluez5.30が disable audioでコンパイルされているので再コンパイルが必要(たぶん)
asterisk11がdisable bluetoothでコンパイルされているので再コンパイルが必要

すごく重要なことなのだが
Ar71xx だと音がまともに出ない

頭きたのでCCの最新をビルドしてみたけど結果は同じだった。
big endianだとだめってことなのか?

2.chan_dongleもちゃんと動く

たっ・・・たぶん・・・ただしパッチをあてるのは結構面倒な作業なので
動くドングルは限定される



2016年3月9日水曜日

openwrt CC で chan_mobileを試す(暫定版)

Bluez5.30になってるしいけるんでねえの?

と、思い立って試してみた。
元々、日本でasteriskが流行らない上に
openwrtでasterisk11を動かす必要はないし
bluetoothでつなぐ必要なんてまるっきりないので
情報らしいものが全然ない(笑)

今のところ

(AR71xx)WNDR4300-> 音がぐちゃぐちゃで使いもんにならない
(RALINK)GL-MT300N+ハブ->なんか動いてる??
(BCM53xx)WZR-600DHP2->なんか動いてる??

能書きはいいからchan_mobile.soはよ! って人は
http://ppl.ug/Csl3k10giIY/ (MT7620用)