• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+

ytak01のブログ一覧

2017年01月24日 イイね!

gamecon-gpio-rpi改をGitHubに公開しました

gamecon-gpio-rpi改をGitHubに公開しました

https://github.com/ytak01/gamecon-gpio-rpi
になります。

https://github.com/ytak01/gamecon-gpio-rpi/releases
にdpkgをリリースファイルとしておきました。
GPIO番号がCOMピンがGPIO12になっていますので注意してください。

実際にインストール時には使用しているkernelバージョンのkernel headersのインストールが必要になります。

これでほぼFixですが何かあったら今後はGitHubの方を修正していきます。
Posted at 2017/01/24 23:52:23 | コメント(0) | トラックバック(0) | gimx | 趣味
2017年01月23日 イイね!

gamecon_gpio_rpiのGPIO番号可変

neGT-USBを使わずにRPiにダイレクトにネジコンをつなぐ(Part4)
でgamecon_gpio_rpi.cの変更点を書いたのですが、GPIOの番号を可変出来るように修正したのでこれも載せておきます。

GC_PSX_COMMAND_PIN,GC_PSX_SELECT_PINで変更出来ますが、1X番台ではないと動作しませんでした。

--- gamecon_gpio_rpi_1.2_org.c  2015-12-28 07:27:26.000000000 +0900
+++ gamecon_gpio_rpi_1.2_new.c   2017-01-23 23:06:57.732432783 +0900
@@ -46,11 +46,11 @@

 #define GPIO_BASE                (BCM2708_PERI_BASE + 0x200000) /* GPIO controller */

+static volatile unsigned *gpio;
+
 #define GPIO_SET *(gpio+7)
 #define GPIO_CLR *(gpio+10)

-static volatile unsigned *gpio;
-
 struct gc_config {
        int args[GC_MAX_DEVICES];
        unsigned int nargs;
@@ -619,8 +619,7 @@
  *
  */

-#define GC_PSX_DELAY   3               /* clock phase length in us. Valid clkfreq is 100kHz...500kHz. 2*udelay(3) results to ~250kHz on RPi1. */
-#define GC_PSX_DELAY2  25              /* delay between bytes. */
+#define GC_PSX_DELAY   10              /* 25 usec */
 #define GC_PSX_LENGTH  8               /* talk to the controller in bits */
 #define GC_PSX_BYTES   6               /* the maximum number of bytes to read off the controller */

@@ -630,13 +629,22 @@
 #define GC_PSX_ANALOG  5               /* Analog in Analog mode / Rumble in Green mode */
 #define GC_PSX_RUMBLE  7               /* Rumble in Red mode */

+#define GC_PSX_COMMAND_PIN     16              /* Pin 16 */
+#define GC_PSX_SELECT_PIN              17              /* Pin 17 */
+
+#define GC_GPIO(g) (((g)%10)*3)
+
 #define GC_PSX_CLOCK   (1<<18)         /* Pin 18 */
-#define GC_PSX_COMMAND (1<<14)         /* Pin 14 */
-#define GC_PSX_SELECT  (1<<15)         /* Pin 15 */
+#define GC_PSX_COMMAND (1<<GC_PSX_COMMAND_PIN)
+#define GC_PSX_SELECT  (1<<GC_PSX_SELECT_PIN)

 #define GC_PSX_ID(x)   ((x) >> 4)      /* High nibble is device type */
 #define GC_PSX_LEN(x)  (((x) & 0xf) << 1)      /* Low nibble is length in bytes/2 */

+static int gc_psx_delay = GC_PSX_DELAY;
+module_param_named(psx_delay, gc_psx_delay, uint, 0);
+MODULE_PARM_DESC(psx_delay, "Delay when accessing Sony PSX controller (usecs)");
+
 static const short gc_psx_abs[] = {
        ABS_HAT0X, ABS_HAT0Y, ABS_RX, ABS_RY, ABS_X, ABS_Y
 };
@@ -659,15 +667,14 @@

        for (i = 0; i < GC_PSX_LENGTH; i++, b >>= 1) {

-               GPIO_CLR = GC_PSX_CLOCK;
-
                if (b & 1)
                        GPIO_SET = GC_PSX_COMMAND;
                else
                        GPIO_CLR = GC_PSX_COMMAND;
-
-               udelay(GC_PSX_DELAY);
-        GPIO_SET = GC_PSX_CLOCK;
+
+               GPIO_CLR = GC_PSX_CLOCK;
+
+               udelay(gc_psx_delay);

                read = *(gpio+13);

@@ -678,10 +685,10 @@
                                data[j] |= (read & gc_status_bit[j]) ? (1 << i) : 0;
                }

-               udelay(GC_PSX_DELAY);
+               GPIO_SET = GC_PSX_CLOCK;
+
+               udelay(gc_psx_delay);
        }
-
-    udelay(GC_PSX_DELAY2);
 }

 /*
@@ -697,14 +704,14 @@
        unsigned long flags;
        unsigned char data2[GC_MAX_DEVICES];

-    local_irq_save(flags);
-
        /* Select pad */
        GPIO_SET = GC_PSX_CLOCK | GC_PSX_SELECT;
-
+       udelay(gc_psx_delay);
        /* Deselect, begin command */
        GPIO_CLR = GC_PSX_SELECT;
-       udelay(GC_PSX_DELAY2);
+       udelay(gc_psx_delay);
+
+       local_irq_save(flags);

        gc_psx_command(gc, 0x01, data2);        /* Access pad */
        gc_psx_command(gc, 0x42, id);           /* Get device ids */
@@ -1146,9 +1153,16 @@
        if (gc->pad_count[GC_PSX] ||
                gc->pad_count[GC_DDR]) {

-               /* set clk, cmd & sel pins to OUTPUT */
+               /* set clk, cmd & sel pins to OUTPUT
+                       12 = GPIO14(CMD)
+                       15 = GPIO15(SEL)
+                       24 = GPIO18(CLK)
+
                *(gpio+1) &= ~((7<<12) | (7<<15) | (7<<24));
                *(gpio+1) |= ((1<<12) | (1<<15) | (1<<24));
+               */
+               *(gpio+1) &= ~((7<<GC_GPIO(GC_PSX_COMMAND_PIN)) | (7<<GC_GPIO(GC_PSX_SELECT_PIN)) | (7<<24));
+               *(gpio+1) |= ((1<<GC_GPIO(GC_PSX_COMMAND_PIN)) | (1<<GC_GPIO(GC_PSX_SELECT_PIN)) | (1<<24));
        }

        return gc;
@@ -1190,6 +1204,9 @@
        if (gc_cfg.nargs < 1) {
                pr_err("at least one device must be specified\n");
                return -EINVAL;
+       } else if ((gc_psx_delay < 1) || (gc_psx_delay > 50)) {
+               pr_err("Invalid psx_delay (1-50 allowed)\n");
+               return -EINVAL;
        } else {
                gc_base = gc_probe(gc_cfg.args, gc_cfg.nargs);
                if (IS_ERR(gc_base))
Posted at 2017/01/24 00:01:29 | コメント(0) | トラックバック(0) | gimx | 趣味
2017年01月17日 イイね!

RetroPieの動作が不安定な件

(Raspbian上の)RetroPieでsnesが凄くもっさりしている原因が解った

どうもRaspberryPi3あたりから5V電源に問題(電力不足)があるとHDMI出力の右上に雷マークが表示されるようになったらしい

出力2.5AのAC-DCアダプタを使用していたがそれでも雷マークが出ていた。
(尤もUSBにDS4とか繋いでいますが)

その雷マークが出ている状態ではCPUクロックが600MHzに制限されてしまう
CPUクロックが600MHzだと本来の性能を発揮できずにsnesが重いと言う状態に陥っていた。

PlayStationの電源からDC-DCコンバータで7.2Vから5Vを作り、それを供給したところ雷マークの表示も消えCPUクロックも1200MHzで動くようになった。
その状態で各エミュレータを動作させてみたが問題無く動作するようになった。

以前、RetroPieで頻繁にkernel panicが発生し使い物にならなかったと書いたがこれは恐らくCPUクロックが1200MHz固定になっており、RetroPieインストール時のコンパイル時にCPUに過度な負荷がかかり電源不足又は温度超過が発生したために動作不安定になっていたからだと思われる

CPUクロックの違いでgimxの動作も変わると思います。

これでとりあえず動作するようにはなったが問題は温度超過で、エミュレータをやっているとたまにカクつくときがあった。
その時はCPUクロックが600MHzに戻っていた。
これを1200MHz固定にするには冷却対策が必要と思われる。

RPi3って結構電力と発熱問題がシビアなんですね
Posted at 2017/01/17 22:07:17 | コメント(0) | トラックバック(0) | gimx | 趣味
2017年01月10日 イイね!

GIMX USB Adapter(Arduino)への書き込みに失敗する

ArduinoへのGIMX firmware書き込み時のハマりどころです。

良くArduinoBuilderを使ったArduinoへの書き込みに失敗すると言う書き込みを見ますが、恐らく
・ArduinoBuilder-0.9.1を使う
・ArduinoへACアダプタを使う
の2つを行えばすんなりと書き込み出来るようになると思います。

特にACは重要で、ArduinoBuilderで書き込み中にUSBがリセットされたような感じになります。
USBで電源を取っているとこの時にArduino自体もリセットされるようで、次のStepに進まなくなりエラーとなっているようです。

私もこの症状に陥り暫く途方に暮れましたが、DCジャックにACアダプタを接続したところ問題無く書き込めるようになりました。

まあ、このACアダプタが意外と問題でたった一度の書き込みの為に購入するのも面倒だし勿体ないしで普通はUSBケーブルから電源を取って済ませたくなりますよね・・・

ArduinoBuilderの書き込みボタンとArduinoのリセットボタンのタイミングでたまに書き込み出来るので根気よく繰り返すのも有りだと思います。

ですが、そのタイミングによってPC上でUSBが認識されない状態に陥ってしまうこともあります。
(私もなりました)

その場合はBootloaderが飛んでいるのでArduino純正のアプリで適当なソースをコンパイル&書き込みを行えば純正のBootloaderがまた書き込まれます。
(この時もタイミングがあります)

完全文鎮化はしないようなのですが、意外と大変なので初心者の方は素直にACアダプタを使う方が早いと思います。

ちなみに書いたファームはこれです。
firmwares-5.8\EMUG29PS4\atmega32u4.hex
Posted at 2017/01/10 16:11:14 | コメント(0) | トラックバック(0) | gimx | 趣味
2017年01月10日 イイね!

neGT-USBをGIMXにつなぐ為のconfig設定

現在私の環境では

ゼロテック <-> RaspberryPi3(+DS4) <-> Arduino <-> PS4

と、なっていますが、結構大変なので

ゼロテック <-> neGT-USB <-> RaspberryPi3(+DS4) <-> Arduino <-> PS4

として使う場合のGIMXのconfig設定を載せておきます。

neGT-USBはGT Force互換のUSBをエミュレートしているのですが、日本名でGT Forceは海外では「WingMan Formula Force GP」と言う名前らしく、GIMXの設定ファイルは"LogitechFormulaForceGP_G29.xml"と言うのを下地に使いました。


そのままでは動作しません。
キーポイントはnameパラメータです。
<device type="joystick" id="0" name="Logitech Inc. WingMan Formula Force GP"/>
と言う部分があるのですが、ここがデフォルトでは「Logitech Inc. WingMan Formula Force GP」になっています。
これを全て「HID 046d:c293」に変更します。

このnameに置き換える文言はlsusb,dmesg等で確認できるのでneGT-USB3等でもnameを変えれば使えるようになると思います。

私の設定を載せておきます。

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <controller id="1" dpi="0" type="G29 PS4">
    <configuration id="1">
      <trigger type="" id="" name="" button_id="" switch_back="no" delay="0"/>
      <mouse_options_list/>
      <intensity_list/>
      <button_map>
        <button id="abs_axis_10" label="">
          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
          <event type="button" id="0"/>
        </button>
        <button id="abs_axis_9" label="">
          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
          <event type="button" id="1"/>
        </button>
        <button id="abs_axis_8" label="">
          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
          <event type="button" id="2"/>
        </button>
        <button id="abs_axis_7" label="">
          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
          <event type="button" id="3"/>
        </button>
        <button id="abs_axis_11" label="">
          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
          <event type="button" id="4"/>
        </button>
        <button id="abs_axis_12" label="">
          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
          <event type="button" id="5"/>
        </button>
        <button id="abs_axis_0" label="">
          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
          <event type="button" id="8"/>
        </button>
        <button id="abs_axis_1" label="">
          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
          <event type="button" id="9"/>
        </button>
        <button id="abs_axis_15" label="">
          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
          <event type="button" id="10"/>
        </button>
        <button id="abs_axis_16" label="">
          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
          <event type="button" id="11"/>
        </button>
        <button id="abs_axis_2" label="">
          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
          <event type="button" id="12"/>
        </button>
        <button id="abs_axis_3" label="">
          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
          <event type="button" id="14"/>
        </button>
        <button id="abs_axis_4" label="">
          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
          <event type="button" id="15"/>
        </button>
        <button id="abs_axis_5" label="">
          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
          <event type="button" id="16"/>
        </button>
        <button id="abs_axis_6" label="">
          <device type="joystick" id="0" name="Sony Computer Entertainment Wireless Controller"/>
          <event type="button" id="17"/>
        </button>
        <button id="abs_axis_3" label="">
          <device type="joystick" id="0" name="HID 046d:c293"/>
          <event type="button" id="3"/>
        </button>
        <button id="abs_axis_5" label="">
          <device type="joystick" id="0" name="HID 046d:c293"/>
          <event type="button" id="2"/>
        </button>
        <button id="abs_axis_6" label="">
          <device type="joystick" id="0" name="HID 046d:c293"/>
          <event type="button" id="0"/>
        </button>
        <button id="abs_axis_4" label="">
          <device type="joystick" id="0" name="HID 046d:c293"/>
          <event type="button" id="1"/>
        </button>
        <button id="abs_axis_9" label="">
          <device type="joystick" id="0" name="HID 046d:c293"/>
          <event type="button" id="5"/>
        </button>
        <button id="abs_axis_8" label="">
          <device type="joystick" id="0" name="HID 046d:c293"/>
          <event type="button" id="4"/>
        </button>
      </button_map>
      <axis_map>
        <axis id="abs_axis_17" label="">
          <device type="joystick" id="0" name="HID 046d:c293"/>
          <event type="axis" id="1" dead_zone="0" multiplier="-0.008" exponent="1.00" shape=""/>
        </axis>
        <axis id="abs_axis_18" label="">
          <device type="joystick" id="0" name="HID 046d:c293"/>
          <event type="axis" id="1" dead_zone="0" multiplier="0.008" exponent="1.00" shape=""/>
        </axis>
        <axis id="rel_axis_0" label="">
          <device type="joystick" id="0" name="HID 046d:c293"/>
          <event type="axis" id="0" dead_zone="0" multiplier="0.0039" exponent="1.00" shape=""/>
        </axis>
      </axis_map>
      <joystick_corrections_list/>
    </configuration>
  </controller>
</root>

Posted at 2017/01/10 12:31:47 | コメント(0) | トラックバック(0) | gimx | 趣味

プロフィール

「GIMXがPS5で動いた~~~!!! http://cvw.jp/b/1799061/45524956/
何シテル?   10/08 22:18
ytak01と言う者です。 貧乏な車好きのおっさんです。 この度86購入しました。 よろしくお願いします。
みんカラ新規会員登録

ユーザー内検索

<< 2017/1 >>

123456 7
8 9 1011121314
1516 1718192021
22 23 2425262728
293031    

ブログカテゴリー

リンク・クリップ

[トヨタ 86]スバル(純正) E型用 パワーステアリング コンピュータASSY 
カテゴリ:その他(カテゴリ未設定)
2022/06/13 15:24:19
実験君(ヘッドライト編 パート2) 
カテゴリ:その他(カテゴリ未設定)
2019/02/21 18:27:48
ブルーエリア / ネッツトヨタ東埼玉 リアスタビブラケット 
カテゴリ:その他(カテゴリ未設定)
2018/08/01 07:36:34

愛車一覧

トヨタ 86 トヨタ 86
5月M納車です
トヨタ シエンタハイブリッド トヨタ シエンタハイブリッド
4月納車です
トヨタ MR2 トヨタ MR2
MR2に乗っていました。
日産 シルビア 日産 シルビア
シルビアに乗っていました。

過去のブログ

2020年
01月02月03月04月05月06月
07月08月09月10月11月12月
2018年
01月02月03月04月05月06月
07月08月09月10月11月12月
2017年
01月02月03月04月05月06月
07月08月09月10月11月12月
2016年
01月02月03月04月05月06月
07月08月09月10月11月12月
2013年
01月02月03月04月05月06月
07月08月09月10月11月12月
ヘルプ利用規約サイトマップ
© LY Corporation