2007年5月11日

LinuxでRadio Shark2 (その1:調査編)

Griffin radio SHARK + icecast2 on Debian GNU/Linuxという記事があった。

Radio Shark2の前のバージョンであるRadio SharkはLinuxからUSB-HIDおよびUSB-audioとして見えるようだ。

Radio Shark2とRadio Sharkでは、HIDコントロール回りがちょっと異なる模様。

手元のLinux Note(ubuntu)にRadio Shark2を接続してみた。
以下が/var/log/messages/の表示。

May 11 02:46:17 hong kernel: [12911.420000] usb 1-1: new full speed USB device using uhci_hcd and address 2
May 11 02:46:17 hong kernel: [12911.620000] usb 1-1: configuration #1 chosen from 1 choice
May 11 02:46:17 hong kernel: [12911.792000] usbcore: registered new interface driver snd-usb-audio
May 11 02:46:17 hong kernel: [12911.792000] usbcore: registered new interface driver hiddev
May 11 02:46:17 hong kernel: [12911.796000] input: Griffin Technology, Inc. radioSHARK as /class/input/input8
May 11 02:46:17 hong kernel: [12911.796000] input: USB HID v1.00 Device [Griffin Technology, Inc. radioSHARK] on usb-0000:00:1d.0-1
May 11 02:46:17 hong kernel: [12911.796000] usbcore: registered new interface driver usbhid
May 11 02:46:17 hong kernel: [12911.796000] drivers/usb/input/hid-core.c: v2.6:USB HID core driver

lsusbで見ると、これ↓。

Bus 001 Device 002: ID 077d:627a Griffin Technology

Griffin radio SHARK + icecast2 on Debian GNU/Linuxからリンクしているshark.cを見ると、

#define SHARK_VENDID 0x077d     /* Griffin's Vendor ID */
#define SHARK_DEVID 0x627a      /* The radioSHARK's Device ID */
というように、変わっていない模様。

#制御が変わっているなら、IDも変えてくれれば良いのに(^^;

radioSHARKにDelphiのRadio Shark2制御ソフトが、ソースコード付きで公開されている。感謝。
しかも、Radio Shark用のソースもある。
比較すれば、両者の違いがすぐ分かる(^^;

とりあえず、ソースを展開して、ディレクトリ毎diffをとってみた。

diff Shark1/Unit1.dfm Shark2/Unit1.dfm
6c6
<   Caption = 'ControlSHARK1'

---
>   Caption = 'ControlSHARK2'

diff Shark1/Unit1.pas Shark2/Unit1.pas
3,4c3,4
< ControlSHARK1

< version 0.2.1

---
> ControlSHARK2

> version 0.2.2

7c7
< Griffin Technology の radio SHARK 1 を

---
> Griffin Technology の radio SHARK 2 を

30c30
<   //SOFTWARE_VERSION = '0.2.1';

---
>   //SOFTWARE_VERSION = '0.2.2';

34c34
<   RADIOSHARK1_VERSION = $01;  // <-- ここが radio SHARK 2 と異なる

---
>   RADIOSHARK2_VERSION = $10;

36,37c36,37
<   FM_DEFAULT_VAL = 1017; // 適当に

<   AM_DEFAULT_VAL = 828;  // 適当に

---
>   FM_DEFAULT_VAL = 765;  // 適当に

>   AM_DEFAULT_VAL = 558;  // 適当に

94d93
<     procedure LightBlueFlash(aInterval: Byte);

121c120
< function IsRadioShark1(HidDev: TJvHidDevice): Boolean; stdcall;

---
> function IsRadioShark2(HidDev: TJvHidDevice): Boolean; stdcall;

127c126
<       and (HidDev.Attributes.VersionNumber = RADIOSHARK1_VERSION)  // プロダクトバージョン で識別

---
>       and (HidDev.Attributes.VersionNumber = RADIOSHARK2_VERSION)  // プロダクトバージョン で識別

141c140
<       and (HidDev.Attributes.VersionNumber <> RADIOSHARK1_VERSION)  // プロダクトバージョン で識別

---
>       and (HidDev.Attributes.VersionNumber <> RADIOSHARK2_VERSION)  // プロダクトバージョン で識別

144c143
<       FormMain.StatusBarMsg.SimpleText := 'radioSHARK1以外には対応していません '

---
>       FormMain.StatusBarMsg.SimpleText := 'radioSHARK2以外には対応していません '

149c148
<       Result := True;

---
>       //Result := True;

159,160c158
<   // 列挙モニター

<   {

---
>   {// 列挙モニター

167,169c165,166
< 

<   // radioSHARK1 の場合

<   if HidDeviceController.CheckOutByCallback(HidDev, IsRadioShark1) then

---
>   // radioSHARK2 の場合

>   if HidDeviceController.CheckOutByCallback(HidDev, IsRadioShark2) then

189c186
<   // radioSHARK2, radioSHARK3(?) の場合 (でっかいお世話です?)

---
>   // radioSHARK1, radioSHARK3(?) の場合 (でっかいお世話です?)

204c201
<      (HidDev.Attributes.VersionNumber = RADIOSHARK1_VERSION) then

---
>      (HidDev.Attributes.VersionNumber = RADIOSHARK2_VERSION) then

233c230
<   numToWrite := CurrentDevice.Caps.OutputReportByteLength; // radioSHARK1 の場合は 7

---
>   numToWrite := CurrentDevice.Caps.OutputReportByteLength; // radioSHARK2 の場合は 8

264,267c261,264
< FM  [freq] MHz にセット

< C0 02 ?? ?? 00 00

<       ?? ?? (16進数) <=>  (freq * 10 * 8) + 0x0358

< +8 で +0.1 MHz

---
> FM [freq] MHz にセット

> 81 ?? ?? 33 04 00 28    ( <== 合ってる? 後半部分の値が何を意味しているのか分からない)

>    ?? ?? (16進数) <=> (freq * 10 * 2) - 3 (10進数)

> +1 で +0.05 MHz

271c268
<   FreqHexVal := IntToHex((aFreq * 8) + $0358, 4);

---
>   FreqHexVal := IntToHex( (aFreq * 2) - 3 , 4 );

276c273
<   HidDeviceWrite([$C0,$02,HexHigh,HexLow,$00,$00]);

---
>   HidDeviceWrite([$81,HexHigh,HexLow,$33,$04,$00,$28]);

289,292c286,289
< AM  [freq] kHz にセット

< C0 12 ?? ?? 00 00

<       ?? ?? (16進数) <=> freq + 0x01C2

< +1 で +1 kHz

---
> AM [freq] kHz にセット

> 81 ?? ?? F3 36 00 24    <== 合ってる?

>    ?? ?? (16進数) <=> (freq * 4) + 16300 (10進数) ]

> +1 で +0.25 kHz

295c292
<   FreqHexVal := IntToHex(aFreq + $01C2, 4);

---
>   FreqHexVal := IntToHex( (aFreq * 4) + 16300 , 4 );

300c297
<   HidDeviceWrite([$C0,$12,HexHigh,HexLow,$00,$00]);

---
>   HidDeviceWrite([$81,HexHigh,HexLow,$F3,$36,$00,$24]);

307c304
<   HidDeviceWrite([$A0,$FF,$00,$00,$00,$00]);

---
>   HidDeviceWrite([$83,$FF,$00,$00,$00,$00,$00]);

312c309
<   HidDeviceWrite([$A0,$00,$00,$00,$00,$00]);

---
>   HidDeviceWrite([$83,$00,$00,$00,$00,$00,$00]);

317c314
<   HidDeviceWrite([$A9,$00,$00,$00,$00,$00]);

---
>   HidDeviceWrite([$84,$01,$00,$00,$00,$00,$00]);

322c319
<   HidDeviceWrite([$A8,$00,$00,$00,$00,$00]);

---
>   HidDeviceWrite([$84,$00,$00,$00,$00,$00,$00]);

327c324
<   HidDeviceWrite([$A0,aBrightness,$00,$00,$00,$00]);

---
>   HidDeviceWrite([$83,aBrightness,$00,$00,$00,$00,$00]);

330,333d326
< procedure TFormMain.LightBlueFlash(aInterval: Byte);

< begin

<   HidDeviceWrite([$A1,aInterval,$00,$00,$00,$00]);

< end;

419,425d411
<     if (ParaLowStr = '-flash') or (ParaLowStr = '/flash') then

<     begin

<       Inc(i);

<       LightBlueFlash(Byte(StrToIntDef(ParamStr(i), 1)));

<     end

< 

<     else

なんとかなるかなぁ。

投稿者 his : 2007年5月11日 02:47
このエントリーのトラックバックURL: http://hoop.euqset.org/blog/mt-tb2006.cgi/58438
LinuxでRadio Shark2 (その2:ちょこっとお試し編)
概要 LinuxでRadio Shark2 (その1:調査編)でのdiffだけ(^^...
ウェブログ: shibata(hi) shokudou
時刻: 2007年5月11日 03:49
コメント
コメントする









名前、アドレスを登録しますか?





画像の中に見える文字を入力してください。