Google Glassã®æ°æ©è½ãããã¯ãã
ã¯ããã«
GoogleGlassã®æ°å(V2)ã®ç®çã®ä¸ã¤ã«ã¤ã¤ãã³(Earbud)ã®ãµãã¼ããããã¾ãã
ãã®ã¤ã¤ãã³ãå®ã¯ä¸¡è³ã¿ã¤ããåå¨ãã¦ããã®ã§ãããExploreæå¾
ããã°ã©ã ã®ææã«ã¯çºå£²ããã¦ãããããªãã¨ãæ°åã®å
¥æã«æåã§ãããã®ã®ãåæè³¼å
¥ãããã¨ãã§ããã«æããæããããã¦ããæ¹ãå¤ãã®ã§ã¯ãªããã¨æãã¾ããã¾ãæ¨æºæ·»ä»ã®ã¤ã¤ãã³ãGlassã®ãã´ããããã£ããæ´è½ãªãã¶ã¤ã³ã§è¦ãç®ã¯ããªãã¯ã¼ã«ãªã®ã§ãããå®éã«ä½¿ã£ã¦ã¿ãã¨è£
çæããã¾ã²ã¨ã¤ã§å¸¸æçãã¦ä½¿ãã®ã«ã¯æ®å¿µãªåç©ã§ããã
ããã§Glassã«èªå好ã¿ã®ã¤ã¤ãã³ãä»ããããããã«ãã¦ã¿ã¾ããã®ã§ããã®æ¹æ³ã«ã¤ãã¦ã¬ãã¼ããããã¾ãã
å
責äºé
ãã®è¨äºã«æ¸ããã¦ããå
容ã¯æè¡çãªåèè³æã¨ãã¦è¨è¼ãã¦ãã¾ãã
端æ«çã®ç ´æãä½æ¥ä¸ã®äºæ
ã«ã¤ãã¦å¼ç¤¾ããã³è¨äºä½æè
ã¯è²¬ä»»ãæã¡ã¾ããã
å®æ½ã«ããã£ã¦ã¯åèªã®å¤æã«ããã¦è¡ãããã«ãã¦ãã ããã
1.ã¤ã¤ãã³ããµãã¼ãããä»æã
Glassã«ã¤ã¤ãã³ãå·®ãè¾¼ãå ´æã¯å
é»ãUSBãããã°ãè¡ãããã®ç«¯åã§ããã¨ãã¨ã¯éä¿¡ãè¡ãããã®ãã®ã§ããåããããªä½¿ãæ¹ãã§ãããã®ã«ã¹ãã¼ããã©ã³ãããã¾ãããæ°åGlass(V2)ã«ãåæ§ã«USBåè·¯ãã¢ããã°çã«åãæ¿ããããã¹ã¤ãããå
¥ã£ã¦ãããUSBéä¿¡ã¨ã¤ã¤ãã³ã®ä¿¡å·ãåãæ¿ããããããã«ãªãã¾ããã
ã¾ãã«ã¼ãã«ã½ã¼ã¹ã調ã¹ãã¨USBæ©è½ãåãæ¿ããã³ã¼ããè¦ã¤ããã¾ããã
arch/arm/mach-omap2/notel-usb-mux.c
static void sync_usb_mux_mode(struct usb_mux_device_info *di)
{
ããenum usb_mux_mode mode;~~~~~~
~~~~~~
ããif (di->force_usb || di->usb_online)
ããããmode = USB_MUX_MODE_USB;
ããelse
ããããmode = di->req_mode;ããdev_warn(di->dev, "Setting MUX mode to %s\n", str_for_mode(mode));
ããswitch (mode) {
ããããcase USB_MUX_MODE_FLOATING:
ããããããgpio_set_value(di->gpio_cb1, 0);
ããããããgpio_set_value(di->gpio_cb0, 0);
ããããããbreak;ããããcase USB_MUX_MODE_USB:
ããããããgpio_set_value(di->gpio_cb1, 0);
ããããããgpio_set_value(di->gpio_cb0, 1);
ããããããbreak;ããããcase USB_MUX_MODE_TTY:
ããããããgpio_set_value(di->gpio_cb1, 1);
ããããããgpio_set_value(di->gpio_cb0, 0);
ããããããbreak;ããããcase USB_MUX_MODE_AUDIO:
ããããããgpio_set_value(di->gpio_cb1, 1);
ããããããgpio_set_value(di->gpio_cb0, 1);
ããããããbreak;ããããdefault:
ããããããdev_err(di->dev, "Invalid USB MUX mode requested: %d\n", mode);
ããããããgoto error;
ãã}ããdi->cur_mode = mode;
error:
return;
}
ãã®é¨åã¯sysfsããè¨å®ãããããã«ãªã£ã¦ãã¦ãã¬ã¼ã ã¯ã¼ã¯å´ããåãæ¿ããè¡ã£ã¦ããããã§ãã
ãããæ°ã¥ããã¨æãã¾ãããä¸è¨ã³ã¼ãããGlassã«ã¯ã¤ã¤ãã³ä»¥å¤ã«ãã·ãªã¢ã«ãã¼ããä»ããã¨ãè¦ã¦åãã¾ããããã·ãªã¢ã«ãã¼ãã¸ã®åãæ¿ããã§ããã°ã«ã¼ãã«ã®ãããã°ã«å½¹ç«ã¤ã¯ãã§ããããããåãæ¿ãã¯ãã¬ã¼ã ã¯ã¼ã¯å´ã§è¡ã£ã¦ãããããã®é¨åããã¯æ¨å¯ãããã¨ãã§ãã¾ãããä»å¾ã®èª¿æ»ãå¿
è¦ãã¨æãã¾ãã
2.å¸è²©ã®ã¢ããã¿ã¯ä½¿ãããï¼
ã¡ããã©æå
ã«æç¨PHSã«æ·»ä»ããã¦ããå¤æã¢ããã¿ããããæ©è½çã«é¡ä¼¼ãã¦ãããã¨ãã試ãã«æ¥ç¶ãã¦ã¿ã¾ããããæ¨æºæ·»ä»ã¤ã¤ãã³ã®ããã«é³å£°ãåãæ¿ããã骨ä¼å°ã¹ãã¼ã«ããé³å£°ãåºç¶ãã¾ãããã¾ãè¿æã®ç¾åã§å£²ã£ã¦ããå¤æã¢ããã¿ãåæ§ã§ãããã©ãããæ¥æ¬å½å
ã§æµéãã¦ããè¦æ ¼ã¨ã¯éããã®ã®ããã§ãã
3.解æãã¦ã¿ã
ã³ãã¯ã¿é¨åã¯USBã®Micro-Bã¿ã¤ããªã®ã§å¤æã¢ããã¿ã«ç¹ãã§åè·¯ã調ã¹ã¦ã¿ã¾ããã
æ¨æºæ·»ä»ã®ã¤ã¤ãã³ã¯D+ã¨GNDéã®æµæã40Ωã ã£ãã®ã§ããããã¤ãããã¯ã¹ãã¼ã«ã使ã£ãé³å£°ç³»ã ã¨å¤ãã¾ãããã以å¤ã«IDã¨GNDéã«ãåè·¯æµæãããããã®é¨åãå¤ä»ãã¢ã¯ã»ãµãªãèå¥ããä»æãã®ããã§ãã
ä»åº¦ã¯æ¥æ¬å½å
ã§å
¥æã§ããå¤æã¢ããã¿ã§ãã
åãããã«D+/D-ã¨GNDãããããã³ç«¯åã«ç¹ãã£ã¦ããã®ã§ãã®é¨åã¯ç価ã®åè·¯ã§ãã
ã¨ãããIDã¨GNDéã®æµæå¤ãç°ãªãã¾ãã
æ¨æºæ·»ä»ã®ã¤ã¤ãã³ 1MΩ
å½å
ã®ãã® 287K-303KΩ
USBé¢é£ã®æç®ãæ¢ãã¦ã¿ãã¨Glassã®æ·»ä»åã¯"Audio Type 1"ãæ¥æ¬å½å ã§æµéãã¦ãããã®ã¯"Audio Cradle"ã«æºæ ãããã®ã§ãããã¨ãå¤ãã¾ããã
3. æ¹é
æ¨æºæ·»ä»åã¨ã®å·®ç°ãå¤ãã°ãã¨ã¯æ¹é ããã®ã¿ã§ãã
ä»åã¯ç¾åã®Seriaããã§å£²ã£ã¦ããå¤æã¢ããã¿ã使ãã¾ããããã®ã·ãªã¼ãºã®å¤æã¢ããã¿ã¯USBå´ã®ã³ãã¯ã¿ãå解ã§ããããã«ãªã£ã¦ãã¦ãã¾ãã¦ãç¾åUSBããã«ã¼å¾¡ç¨éã®ååã¨ãªã£ã¦ãã¾ãã
æ
éã«ãã³ã»ããã§USBã³ãã¯ã¿å´ã®ã±ã¼ã¹ãéããã¨ã³ãã¯ã¿é¨åã«æµæãä»ãã¦ããã®ãè¦ããã¨ãã§ãã¾ãã
ãã®æµæã1MΩã«äº¤æãã¾ãã端åé¨åãç´°ããã®ã§ã·ã§ã¼ãããªãããã«æ°ãä»ãã¦ãã ããã
交æãçµãã£ããã¹ãã¬ãªããããã³ãç¹ãã§Glassã¨æ¥ç¶ãã¾ãã
ä»ã¾ã§é³´ã£ã¦ãã骨ä¼å°ã¹ãã¼ã«ããã®é³ãæ¢ã¾ãããããã³ã®ä¸¡è³ããæä½é³ãåºã¦ããã°æåã§ãã
ãªãå¿
ãã¹ãã¬ãªããããã³ã使ç¨ãã¦ãã ãããã¢ãã©ã«ã¿ã¤ãã¯å³å´ã®åè·¯ãç絡ãã¦æ
éã®åå ã¨ãªãã¾ããã¾ãGlassã¯å¤é¨ãã¤ã¯ããµãã¼ãããªãã®ã§ãã¤ã¯ä»ãã®ãã®ã使ç¨ãã¦ããã¤ã¯ã¯åä½ãã¾ããã
ã¾ã¨ã
ä»å¾ãé³æ¥½åçã¢ããªã使ããããã«ãªãã°Glassã§å¿«é©ã«é³æ¥½ã楽ãããããã«ãªãã§ãããã
1500ãã«ãããéçºããã¤ã¹ãç¾åã®ååã§ããã¯ã§ãããªãã¦é¢ç½ãã§ããã
次åã¯GlassãAndroidã£ã½ã使ãæ¹æ³ã«ã¤ãã¦ã¬ãã¼ãããäºå®ã§ãã
ãã¾ã: Glassã®é ãã¢ã¼ã
ã«ã¼ãã«ã³ã¼ãã追ã£ã¦ããã¨æ¬¡ã®ãããªä¿å®ç¨ã³ã¼ããè¦ã¤ããã¾ããã
USBã³ãã¯ã¿ã®ID端åã¨VBUSãç絡ããã±ã¼ãã«ãæ¥ç¶ããã¨å¼·å¶çã«fastbootã«ç§»è¡ããããã§ãã
é常åä½ä¸ã§ããæ§ããªãã«å¼·å¶çã·ã£ãããã¦ã³ãã¦ãã¾ãã®ã§æãããã¦å®é¨ã§ãã¾ãããããã¶ãæé®åããGlassã復æ§ããç®çã®ããã«å®è£
ããããã®ã¨ã æããã¾ãã
arch/arm/mach-omap2/notel-usb-mux.c
#define FACTORY_CABLE_VOLTAGE_THRESHOLDã4200 /* millivolts */
#define CABLE_SHUTDOWN_INTERVALããããã30000 /* msec */static void sync_usb_mux_mode(struct usb_mux_device_info *di)
{
ãenum usb_mux_mode mode;
ãint id_voltage;ã/* check for factory cable */
ãid_voltage = voltage_id(0, 0);
ãif (notle_factorycable_bootmode) {
ãã/* schedule a shutdown if factory cable removed */
ããif (id_voltage < FACTORY_CABLE_VOLTAGE_THRESHOLD) {
ãããããschedule_delayed_work(&di->shutdown_work, msecs_to_jiffies(CABLE_SHUTDOWN_INTERVAL));
ãã}
ã} else {
ããif (id_voltage > FACTORY_CABLE_VOLTAGE_THRESHOLD) {
ããããkernel_restart("bootloader");
ãã}
ã}
ãã©ã³ãæ¦ç¥é¨ ä¸æåè²´