2021年10月5日火曜日

Androidアプリでのタイミング調査

 Androidアプリを開発する際、タイミングが気になるときありませんか?
このAPIは本当に10mS周期で呼ばれているのだろうか・・など。

マイコンなら空いたIOポートにHIGH/LOW出力を組み込み、オシロスコープで確認すれば簡単。ではAndroidでは ・・ ???


Raspberry PI4でAndroid11が動くというOmniROMの存在を知りました。

このような方たちが試してくれています。

 https://paiza.hatenablog.com/entry/2020/11/25/150000


ラズパイ上でAndroidが動くなら、ラズパイ上のGPIOが使えるじゃないか!
でもAndroidアプリ(Java)でラズパイのGPIOを動かせるのか??

私はCでGPIO制御を作り、JNIを使ってJavaから呼び出すことで、JavaアプリでAPI呼び出しタイミングをオシロスコープで確認することに成功しました。

以下のコードをAndroidプロジェクト内のJNIに追加します。

(JavaからのJNI呼び出しは各自設定してください)。


またAndroidのJavaプログラムから下記関数をJNI経由で呼び出すことで、ラズパイのGPIOが動くのです。
Androidアプリを構築される方はオシロを使ってタイミングを確認したりしないのかな?

ミリ秒周期の動作確認する場合、GPIO端子をHigh/Low切り替えてオシロで見るほうが確実ですよ(こんなことしたいなんて思ったことないですか??)。


※ gpiod.hは libgpiodのものを呼び出します。

// ======================================
//          GPIO
// ======================================
#include "gpiod.h"
const char *chipname = "gpiochip0";
struct gpiod_chip *chip;
struct gpiod_line *line20;
struct gpiod_line *line21;
void    OpenGpio( void )
{
    // open GPIO chip
    chip = gpiod_chip_open_by_name(chipname);

    // open GPIO Lines
    line20 = gpiod_chip_get_line( chip, 20 );
    line21 = gpiod_chip_get_line( chip, 21 );

    // Open GPIO Lines for Output
    gpiod_line_request_output(line20, "example1", 0 );
    gpiod_line_request_output(line21, "example1", 0 );
}
int     gpioOut20Dat = 0;
void    SetGpio20( int val )
{
    gpioOut20Dat = val;
    gpiod_line_set_value( line20, gpioOut20Dat );
}


 

経歴について

先日ふっと経歴の資料を更新する必要があったので、ひさしぶりに見直してみた。

進化してないなと思いつつ、いろんな案件に関わりながら比較的新しい開発項目にも

参加させていただいていることに感謝あるのみ。 

 
Windows / Linux / Android / RaspberryPi
マイコン基板、Arduino基板

CAN / I2C  / LAN / Wifi / Bluetooth

 ・・ 一通り何でも開発対応します。


経歴追加
1995年9月有限会社マックスポート創業
     :
2009年4月Real Time Linux マルチコア対応モジュール開発
2008年4月Real Time Linux用PCIボードドライバ開発、V850POD開発など
2010年4月Virtual システム計測機用PCIボードデバイスドライバ開発
2011年4月車両モニタシステム北京モーターショーデモ用システム開発
2011年4月心拍オンライン計測システム開発
2012年4月CAN連動車両周辺映像録画/再生システム開発(Windows)
2013年4月CAN-RS232Cデータ変換アプリケーション開発(Windows)
2013年4月車両情報サーバーアップロード用デモ装置開発
2013年4月Forum8連動トヨタ展示用車両制御システム構築
2014年4月車両データ収集装置GPS対応版開発、車両データ解析ツール開発
2014年4月~現在視線検知対応車両制御システム
2015年4月Forum8対応車両運行デモシステム開発
2016年4月ドライブシミュレータ、Forum8/CANデータ連動対応
2016年4月HD映像キャプチャCAN送受信連動ロギングシステム開発
2017年4月車両データシミュレーションWindowsシステム開発
2018年4月ドライブレコーダ評価装置用SDカード読み出しシステム開発
2018年4月音声周波数解析ライブラリ開発
2017年4月船舶用CAN変換BOX、船舶用簡易ナビシステム開発
2017年4月トルクレンチ締め付け値無線ロギング/結果収集システム構築
2018年4月静電容量自動計測システム(無線データ収集&ロギング)開発
2018年4月無線機&Bluetooth通信システム開発
2017年4月スマート体温計システム開発
2019年4月発電センサーモジュール用データ収集システム開発
2019年4月CAN Gateway装置開発
2020年4月各種センサー情報無線データ収集システム構築
2020年4月AndroidスマホUSB接続デジタルFMラジオ装置開発
2020年4月船舶用CANドライバ構築
2020年4月LORA無線機用リモコンユニット開発
2021年4月ミライパネルPLC装置プログラム構築
2021年4月CO2センサーデータ収集&Androidスマホ表示&ロギング装置開発

2020年9月23日水曜日

Androidスマホでラジオ制御

Androidのスマホからラジオチューナー(Si4730)の制御を行い、スマホから音を出すという装置の開発を行った。


Android、チューナー間は USB Isochronous通信で行うのだが、まぁ動かない動かない。

これほど悪戦苦闘したのは本当にひさしぶり。トータルで2か月くらいかかってしまった(工数的には超大赤字w)。


USB Isochronous通信のベースはlibusbを使用したけど、Isochronousの使い方がわからない。

チューナー側もきちんと送信できているのかわからない。

「よくわからないもの」と「なんだかよくわからないもの」をつないでも動くわけがなくw

 

ただ依頼いただいた方を裏切るわけにはいかないので、意地と根性だけでなんとか克服できました。

結局、AndroidでIsochronous通信を行う際は ・・

 ・ libusbの改造が必要

 ・ Javaで取り込んだDescriptorとFSをLibusbに渡さないといけない。

 ・ Isochronous通信のコールバック処理部で修正しないと使えなかった(今回の案件の場合)。

 

LibusbはLGPL2.1 なので、ソースの公開が必要なのかな?

そのうち公開するかも(案件の状況次第)。

 

※ もしUSBでIsochronous通信をしたいという方、ひと声かけてください!

2020年8月5日水曜日

いつもありがとうございます。

ひさしぶりの更新

細々とながら仕事を続け、元気にすごしております。
2020年4~5月はコロナ禍のおかげで開発案件がスタートせず、事業もどうなることかと思っていたけど、6月後半からいくつかの問い合わせが来て、今はパンクに近い状況にあります。

最近C〇C〇NALA経由でBLEやWifi、スマホ関連でこんなもの作れませんか?という感じの問い合わせをいただきます。本当にありがとうございます。


C〇C〇NALAのチェックはあまりできていないので、下記メールアドレスからいただけると助かります。できる限り誠実に、正直に対応するよう心掛けます。
今後ともよろしくお願いします。


2020年8月2日、丹波ひまわり畑への夫婦ライド

有限会社マックスポート
info.maxport.anami●gmail.com
※ ●を@に置き換えてください。

2017年10月7日土曜日

Embarcadero C++ Win32 link Error LME200






 自分への忘備録

 Embarcadero C++でWin32ビルドする際、突然リンクエラーが発生する場合がある。

このようなもの
[ilink32 Warning] Warning: unknown heap name   : 0x08000000 / 0x08000000 [ilink32 Warning] Warning: Error detected (LME200)

 link32.exeをLARGEアドレス対応にしてあげることで、対応するみたい。
コマンドプロンプトを管理者権限で起動し、以下のコマンドを実行することでリンクエラーは解消されました。

C:\Program Files (x86)\Embarcadero\Studio\19.0\bin>"c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\editbin.exe" /LARGEADDRESSAWARE ilink32.exe

かしこい人たちのおかげで助かりました。
それにしてもEmbarcaderoには悩まされます ・・・

2017年8月16日水曜日

RADStudio : paclient exited with code 1 (iOS)

かなり久しぶりの更新(仕事ネタは機密上書けないことが多いので ・・ )
 しかもTwitterは完全に自転車アカウントなどになっていて、この会社何なんだ?って状態になっている。笑って許してください。


BluetoothLEのデバイスを制御するアプリを作る必要があり、iOSとAndroidを別々に作るのも無駄なので Embarcadero RADStudio を採用してみた(と言っても一年前に購入してもらったものだが)。
 
Android版は思ったよりすんなり動いたので、次はiPhoneで ・・ そこでハマってしまった。


Embarcadero RADStudio でiOS アプリ開発を行う場合は、以下のように接続する。
Windows(RADStudio) ->  Mac(PAClient) -> iPhone

Windows上のRADStudioがMac上のPAClientを経由して、iPhoneの制御を行うことでデバッグできるようになっている。

いろいろと試していたら、突然デバッグができなくなってしまった!
実行しようとすると、RADStudioが 「paclient exited with code 1」と吐きだして、止まってしまう。

今更動かないと困る。評価できない!
RADStudioをアンインストール~新しいバージョンをインストール ・・ だめだ
パッチがあったので、あててみる ・・・ だめだ

Macはほとんど使ったことないので、よくわからないことも多い。
こんなことの繰り返しで、何日費やしたことやら。

Mac側のpaclient画面には /use/bin/security find-identity -v という表示が連発している。
ふっとMac側に「KeyChain」なるものを思い出した。

開いてみると、この中にEmbacadero開発関連のキーをいくつか発見。
ここにあったものをすべて削除して、RADStudioのMac接続関連設定を再設定すると、いとも簡単に動いた。

あとから気づけばこんなもんなのだが、こんなことにばかり時間がかかって、肝心のことはこれから。

BLEデバイス、Androidではすぐに接続できるのだが、iOSからはつながらない。
やっとこれから原因調査できるが、その前の段階で無駄な時間を使いすぎて嫌になってきた(涙)。

2013年6月28日金曜日

あるき音システムをわかりやすく



あるき音システムが理解できないという指摘を受け、説明用の図を作成しました。
(ケイさんごめんなさい)。

あるき音のイメージはこうです。


屋内施設の中(たくさんの場所)にスピーカー+CDプレーヤーを設置し、異なるIDのあるき音を鳴らしておきます。

スマホを手にした顧客がこの施設を歩くと、クラウド(サーバー)は次のようなデータを収集できます。

[2013/08/21 12:13:30][スマホ123号][AREA9]

[2013/08/21 12:13:40][スマホ123号][AREA8]

[2013/08/21 12:15:20][スマホ123号][AREA6]

[2013/08/21 12:21:50][スマホ123号][AREA2]

[2013/08/21 12:25:03][スマホ123号][AREA1]

あとでこのデータを解析すると、この顧客の移動パターンが把握できるというものです。
これらたくさんの行動パターン解析結果は、施設構成レイアウトや顧客誘導経路等の営業戦略の基礎データに利用可能です。


※ スマホを手に持って歩くと「いいことがある」「楽しい」という仕掛けが必要です。
→ 自動ポイント配布、シークレット割引メッセージ表示などのスマホアプリを開発し、バックグララウンドであるき音アプリを動かしておく。

※ スマホのマイク性能(指向性)、スマホの持ち方(マイクを指でふさいでない)、歩く速さなどで、あるき音を聞き取りできない場合が多々発生します。 
 → このため完璧な人間の動線をトレースすることは困難です。


あるき音アプリのダウンロードはこちらから