2018-09-03

 既存のスクリプトを流用する案件があった。バックアップソフトウエアを起動する既存バッチを眺めていたら、バックアップソフトウエアを実行するユーザ名とドメイン名がバッチ中にハードコーディングされていた。

 このバッチはJP1 AJSから起動するので、JP1 AJSで実行ユーザを指定、そのユーザ情報がバックアップソフトウエアへ渡される様に作るのでは?!誰だこんなものを作ったのはと思ったのだが、後の祭り。

 さて、色々眺めていたところ、以下で良い様だ。

 whoamiを実行するとdomain\userの形式でユーザ情報が出力されるので、\記号を区切り文字として1番目を%%a、2番目を%%bへ代入させる。
 



FOR /F "usebackq tokens=1-2 delims=\" %%a IN (`whoami`) DO (
SET DO_Domain=%%a
SET DO_User=%%b
)
echo %DO_Domain% , %DO_User%

SET PSWD=%DO_User%.psw




 バックアップソフトウエアはarcserveUDPでPowershellで起動する。
 予め、.pswファイルを生成しておき、上記から得た%DO_User%と%DO_Domaiin%を使って、以下の感じで起動すれば良い、






C:\PS>UDPPowerCLI.ps1 -Command Backup -UDPConsoleUserName %DO_User% -UDPConsoleDomainName %DO_Domain% -UDPConsolePasswordFile %PSWD% -NodeName myNodeName



2018-08-18

 順不同で進むシリーズです。

 Keycapの種類は色々あるが、説明は他のサイトへ譲る事にする。

 IRIS Keyboardの親指用Keycapを試したところ以下が判った。

1)両端の2個のキーは1.25Uが取り付けられる。1Uでも構わないが、1.25Uの方が押しやすい。

2)内側の上キーは1.25Uは未加工で取り付けられる。さらに1.5U、1.75UはKeycapの端の部分を丸やすりで削って逃げを作ると他のキーに干渉せずに取り付けられる。1.75Uでプレートの端と同じ幅にKeycapの端が出っ張るようになる。このキーは押しづらいためか下のキーと合わせて2Uの1キーとする作例も多いが、この加工をした長めのKeycapを取り付けると操作しやすくなるのでお勧めである。


 順不同で進むシリーズです。

 ProMicroのUSB端子がもげ易いとの噂で2点対策をしてみた。

 1点目は定番の2液式接着剤を端子の周りに盛る方式。端子の中に接着剤が入り込まないように留意が必要である。

 2点目はProMicroのソケットもどき化。Webにも検索結果が無さそうなので公開。

 この加工はスイッチを半田付けする前に行う。
 ヘッダピンを基板に半田付けするのではなく、ロープロファイルのヘッダピンソケットを取り付ける。この時点では半田はしない。ヘッダピンソケットへProMicroとヘッダピンを差し込みテープで仮止めする。


 基盤と接触している黒いものがロープロファイルのヘッダピンソケット。12pは市販されていないので14pを購入して切断して利用する。




 ProMicroの上部からピンが貫通しているが、これはProMicroに付属していたヘッダピンである。

 ヘッダピンソケットを半田付けする。
 
 ヘッダピンの樹脂部分をラジオペンチを用いてヘッダピンの端へ樹脂部分を持ち上げる。ヘッダピンの高さが不揃いになってしまうので、ピン側を下にして基板を押し付ける。ヘッダピンを十分ヘッダピンソケットの中に押し込む。



 先ずは黒い樹脂部分をラジオペンチで持ち上げる様に押し上げる。




 ヘッダピンを4隅のみ半田付けする。その後ヘッダピンをニッパで切断、さらに樹脂部分を切断する。ヘッダピンを切断すると、内側のピンが上へ持ち上がってくるので切断毎にピンを押し込むこと。


 

 上記を繰り返してヘッダピンを全て半田付けする。
  ProMicroを取り外す。片側だけを持ち上げるとヘッダピンが曲がってしまうので片側を僅かに持ち上げる。多分に持ち上がった瞬間に「ぺきっ」という音と共に僅かにヘッダピンソケットとの間隔が開いている筈である。
ProMicroを取り外した後、スイッチを半田付けする。

2018-08-17

 順不同で進むシリーズです。

 ASCIIの記事を見て作りたくなったIRIS Keyboardですが、先ずはKeebioでPCBを調達。$17.99と安価なので予備を考慮して3セット発注。


Iris Keyboard - PCBs for Split Ergonomic Keyboard × 3
White PCB Kit

Subtotal
    $53.97

Shipping
    $24.22

Total
    $78.19 USD

 小物なのに送料が意外に高価。基板に加えてTRRSコネクタ、リセットスイッチ、ダイオードが付属する。抵抗が付属するとあるが言わないと付属しないようです。LEDを使わない場合は抵抗不要。
 注文後配送に2週間程必要。


 次にスイッチを取り付けるプレートを検討した。PCB発注時にはkeebioでステンレスプレートは売り切れだったが、暫くしたら入荷していたので3セット発注。国内でステンレス加工の見積を取ってみたが高価だったのでkeebioからとした。ASCIIの記事では「仕上げは良くない」と書かれていたが、そのとおりで表面に若干の傷が付いた仕上げになっていた。見た目は梨目の様である。
(追記)
 良く見たらステンレスプレートはB-Stockであり、小傷ありの在庫品扱いである。この様な傷はあっても正常ということ。


Iris Keyboard - Case/Plates × 3
(B-stock) Stainless Steel Plates

Subtotal
    $107.97

Shipping
    $53.11

Total
    $161.08 USD

 こちらも送料が高価。送料込みで表裏1枚2セットで6000円程になる。国内でステンレス加工すると2万円以上なのでステンレスパネルが良ければkeebio購入が現実的な選択だろう。こちらは注文後1週間程度と重量があるのに早く到着した。スペーサーとネジのセットが付属する。
 ところで荷物を確認したところネジのセットが半分しか入っていなかった。mailしたところbug trackシステムへ登録され、2日程で連絡があり不足分が発送された。こちらは到着まで10日程必要であった。


 現在使用しているCherry茶軸キーボードのクローンとなるGateron茶軸を調達。56個で1セット完成するので110個入りとした。
 Keycapは取り敢えずDSA profileとした。1Uキーが多数あれば良いので色の良さそうなセットを適当に選択。blankでキー数が多いものにしたが、1.25Uと1.5Uのキーが数個あると便利なので結果的には正解であった。

Store: Cool Jazz Store

Gateron mx switch 3 pin adn 5 pin transparent case mx green brown blue switches for mechanical keyboard cherry mx compatible
Color: 3 pin 110 pcs
Axis Body: Gateron mx Brown
(sail chen)
    ¥ 3,330     1 Pack     ¥ 3,330     Confirmation Timeout Open Dispute   

AliExpress Standard Shipping

Free Shipping

Estimated Delivery Time:13-20 Days
Cool Jazz 121/152 DSA keycap dolch white and grey pbt blank keycaps for wried mechanical gaming keyboard
Color: white and blue
Axis Body: 121 keys
(sail chen)
    ¥ 3,533     1 Set     ¥ 3,533     Confirmation Timeout Open Dispute   

AliExpress Standard Shipping

Free Shipping

Estimated Delivery Time:13-20 Days
Product Amount     Shipping Cost     Total Amount
JPY ¥ 6,862
  
JPY ¥ 0
  
JPY ¥ 6,637

 送料無料で到着まで2週間程度。



 ProMicroコントローラはkeebioで購入しても良かったがAliexpressで1個398円なのでそちらで。諸所の情報ではUSBコネクタがもげてしまうとあったので、予備を2個追加。


Store: XM (ShenZhen) Electronic Trade Co.,Ltd

1pcs With the bootloader New version Pro Micro ATmega32U4 ATMEGA32U4-AU 5V/16MHz Module controller (hei)
(Dennis lau)
    ¥ 398     8 pieces     ¥ 3,184     Confirmation Timeout Open Dispute   

China Post Registered Air Mail

Estimated Delivery Time:13-21 Days

Processing Time:7 Days
Product Amount     Shipping Cost     Total Amount
JPY ¥ 3,177
  
JPY ¥ 238
  
JPY ¥ 3,415

 送料無料で到着まで2週間程度。



 2,3台目を作成する際に以下を追加。茶軸の感触は良いのだが、親指用にもう少し重めの黒軸を調達してみた。
 キートップはblankも良いが使いづらいのでTOP printのものを追加してみた。

Store: Cool Jazz Store


Gateron mx switch 3 pin adn 5 pin transparent case mx green brown blue switches for mechanical keyboard cherry mx compatible
Color: 3 pin 65 pcs
Axis Body: Gateron mx Brown
(sail chen)
    ¥ 2,239     1 Pack     ¥ 2,239     Confirmation Received Open Dispute   

AliExpress Standard Shipping

Free Shipping

Estimated Delivery Time:13-20 Days
Free Shipping Mechanical keyboard cherry clone gateron mx switch transparent case mx brown blue red switch lighting translucent
Color: 3 pin 12 pcs
Axis Body: Gateron mx Black
(sail chen)
    ¥ 811     1 Pack     ¥ 811     Confirmation Received Open Dispute   

AliExpress Standard Shipping

Free Shipping

Estimated Delivery Time:13-20 Days
top printed dsa pbt keycap for mechanical keyboard 108 keys iso keys full set dolch keycaps color corsair keycap filco minila
Color: blue and white
Axis Body: 87 add iso keys
(sail chen)
    ¥ 3,736     1 Set     ¥ 3,736     Confirmation Received Open Dispute   

AliExpress Standard Shipping

Free Shipping

Estimated Delivery Time:13-20 Days
Product Amount     Shipping Cost     Total Amount
JPY ¥ 6,783
  
JPY ¥ 0
  
JPY ¥ 6,447




 それ以外の小物は以下。

 TRRSケーブルMicro USB変換ケーブル短めのUSBケーブルを千石電商で調達。
 ProMicroのUSBコネクタもげ対策にソケット化もどき用にヘッダピンソケット、絶縁用にポリイミドテープを秋月電子で調達。
 ProMicroのUSBコネクタもげ対策で接着剤をヨドバシカメラで調達。
 後述のProMicroソケット化もどきをするとスペーサーの高さが若干不足するので調整用にM2のスプリングワッシャをネジの西川で調達。100枚入りで120円。


-----

 DSAプロファイルのキートップは手に馴染まなかったので、以下のOEMプロファイルのキーキャップを2セット追加。
 他にProMicroがもげたので再度発注...。

Store: Shenzhen YMD Tech Co.,LTD Store


YMDK 96 84 ANSI ISO Keyset OEM Profile Thick PBT Keycap set For Cherry MX Mechanical Keyboard YMD96 RS96 YMD75 KBD75 FC980M
Color:   Gray Beige
(Vincent Zhao)
¥ 2,699 1 piece ¥ 2,699 Confirmation Received Open Dispute
HongKong Post Air Mail
Free Shipping
Estimated Delivery Time:12-19 Days
Processing Time:5 Days
Product Amount Shipping Cost Total Amount
JPY ¥ 2,698
JPY ¥ 0
JPY ¥ 2,699

2018-08-15



#include "iris.h"
#include "action_layer.h"
#include "eeconfig.h"

extern keymap_config_t keymap_config;

#define _QWERTY 0
#define _LOWER 1
#define _RAISE 2
#define _NUMPAD 4
#define _MOUSECURSOR 8
#define _ADJUST 16

enum custom_keycodes {
  QWERTY = SAFE_RANGE,
  LOWER,
  RAISE,
  NUMPAD,
  MOUSECURSOR,
  ADJUST,
};

/* Tap Dance */
enum {
  TD_LGUIESC=0,
  TD_LGUIAPP,
  TD_LALTAPP,
  TD_SHIFTCAPS,
  TD_LGUINMPD,
  TD_LGUIMSCS
};


#define KC_ KC_TRNS
#define _______ KC_TRNS

#define KC_LOWR LOWER
#define KC_RASE RAISE
#define KC_RST RESET
#define KC_BL_S BL_STEP
#define KC_DBUG DEBUG
#define KC_RTOG RGB_TOG
#define KC_RMOD RGB_MOD
#define KC_RHUI RGB_HUI
#define KC_RHUD RGB_HUD
#define KC_RSAI RGB_SAI
#define KC_RSAD RGB_SAD
#define KC_RVAI RGB_VAI
#define KC_RVAD RGB_VAD
#define KC_MCPW KC_POWER
#define KC_MCVU KC__VOLUP
#define KC_MCVD KC__VOLDOWN

//#define KC_BSGU MT(MOD_LGUI, KC_BSPC) // tap BackSpace , Hold RGUI
#define KC_BSAL MT(MOD_LALT, KC_BSPC) // tap BackSpace , Hold LALT
#define KC_DLAL MT(MOD_LALT, KC_DEL) // tap Delete , Hold LALT

#define KC_TBAL MT(MOD_LALT, KC_TAB) // tap TAB , Hold LALT
#define KC_SLGU MT(MOD_LGUI, KC_SLSH) // tap Slash , Hold LGUI
#define KC_DOAL MT(MOD_LALT, KC_DOT) // tap Dot , Hold LALT
#define KC_COCT MT(MOD_LCTL, KC_COMM) // tap Comma , Hold LCTL
#define KC_BLRS MT(MOD_RSFT, KC_BSLS) // tap BackSlash , Hold RSFT
//#define KC_SPAT MT(MOD_LALT, KC_SPC) // tap Space , Hold LALT
#define KC_ESCT MT(MOD_LCTL, KC_ESC) // tap Escape , Hold LCTL
#define KC_TBCT MT(MOD_LCTL, KC_TAB) // tap TAB , Hold LCTL

//#define KC_CMZ LGUI(KC_Z)
//#define KC_CMX LGUI(KC_X)
//#define KC_CMC LGUI(KC_C)
//#define KC_CMV LGUI(KC_V)
#define KC_CADL ALTG(KC_DEL)
#define KC_STAB S(KC_TAB)


#define KC_SPLW LT(_LOWER,KC_SPC) // tap Space , Hold LowerLayer
#define KC_ENLW LT(_LOWER,KC_ENTER) // tap Enter , Hold LowerLayer
#define KC_ESRA LT(_RAISE,KC_ESC) // tap ESC , Hold RaiseLayer
//#define KC_DLRA LT(_RAISE,KC_DEL) // tap ESC , Hold RaiseLayer
//#define KC_NPD TT(_NUMPAD) // tap Momentary NUMPAD , DualTap toggle NUMPAD
//#define KC_MSC TT(_MOUSECURSOR) // tap Momentary NUMPAD , DualTap toggle Mousecursor

/* Tap Dance */
#define KC_LGES TD(TD_LGUIESC)
#define KC_LGAP TD(TD_LGUIAPP)
#define KC_LAAP TD(TD_LALTAPP)
#define KC_SHCL TD(TD_SHIFTCAPS)
#define KC_LGNP TD(TD_LGUINMPD)
#define KC_LGMC TD(TD_LGUIMSCS)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {


  [_QWERTY] = LAYOUT_kc(
  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
     GRV , 1  , 2  , 3  , 4  , 5  ,                6  , 7  , 8  , 9  , 0  ,MINS,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
     TBAL, Q  , W  , E  , R  , T  ,                Y  , U  , I  , O  , P  ,EQL ,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
     LCTL, A  , S  , D  , F  , G  ,                H  , J  , K  , L  ,SCLN,QUOT,
  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
     SHCL, Z  , X  , C  , V  , B  ,ESRA,     RASE, N  , M  ,COCT,DOAL,SLGU,BLRS,
  //`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
                       LAAP,SPLW,TBCT,         BSAL,ENLW,LGES
  //                  `----+----+----'        `----+----+----'
  ),


  [_LOWER] = LAYOUT_kc(
  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
     CADL,EXLM, AT ,HASH,DLR ,PERC,               CIRC,AMPR,ASTR,LPRN,RPRN,DEL ,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
         ,TILD,UNDS,PLUS,PIPE,LABK,               RABK,PGUP, UP ,PGDN,HOME,BSPC,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
         ,GRV ,MINS,EQL ,BSLS,LBRC,               RBRC,LEFT,DOWN,RGHT,END ,ENT ,
  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
         , RO ,JYEN,QUES,LPRN,LCBR,TAB ,         ,RCBR,RPRN,    ,    ,    ,    ,
  //`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
                           ,    ,ESCT,         DLAL,    ,LGNP
  //                  `----+----+----'        `----+----+----'
  ),


  [_RAISE] = LAYOUT_kc(
  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
     F12 , F1 , F2 , F3 , F4 , F5 ,                F6 , F7 , F8 , F9 ,F10 ,F11 ,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
         , 1  , 2  , 3  , 4  , 5  ,                6  , 7  , 8  , 9  , 0  ,BSPC,
  //|----+----+----+----+----+----+              |----+----+----+----+----+----|
         ,EXLM, AT ,HASH,DLR ,PERC,               CIRC,AMPR,ASTR,LPRN,RPRN,ENT ,
  //|----+----+----+----+----+----|----.    ,----|----+----+----+----+----+----|
         ,PLUS,MINS,EQL ,BSLS,QUOT,    ,         ,DQUO,SLSH,    ,    ,    ,    ,
  //`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
                           ,SPC ,    ,             ,ENT ,LGMC
  //                  `----+----+----'        `----+----+----'
  ),

  [_NUMPAD] = LAYOUT_kc(
  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
     NLCK,    ,    ,    ,    ,    ,                   , P7 , P8 , P9 ,PMNS,DEL ,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
         ,HOME,PGUP, UP ,PGDN,LABK,               RABK, P4 , P5 , P6 ,PPLS,BSPC,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
         ,END ,LEFT,DOWN,RGHT,LPRN,               RPRN, P1 , P2 , P3 ,PAST,COLN,
  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
         ,    ,    ,    ,    ,STAB,    ,      P0 ,EQL , P0 ,COMM,DOT ,PSLS,PENT,
  //`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
                           ,    ,    ,             ,    ,
  //                  `----+----+----'        `----+----+----'
  ),

  [_MOUSECURSOR] = LAYOUT_kc(
  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
         ,    ,    ,    ,    ,    ,                   ,    ,    ,    ,    ,    ,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
         ,HOME,PGUP, UP ,PGDN,    ,               WH_D,WH_R,MS_U,ACL0,ACL1,ACL2,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
         ,END ,LEFT,DOWN,RGHT,    ,               WH_L,MS_L,MS_D,MS_R,BTN1,BTN2,
  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
         ,    ,    ,    ,    ,    ,    ,         ,WH_U,LEFT,DOWN, UP ,RGHT,BTN3,
  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
                           ,    ,    ,             ,    ,
  //                  `----+----+----'        `----+----+----'
),


  [_ADJUST] = LAYOUT_kc(
  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
     RST ,MUTE,VOLD,VOLU,    ,    ,                   ,    ,    ,    ,    ,PSCR,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
         ,    ,    ,    ,    ,    ,               RTOG,RMOD,RHUI,RSAI,RVAI,    ,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
     MCPW,EJCT,MCVD,MCVU,    ,    ,                   ,DBUG,RHUD,RSAD,RVAD,    ,
  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
     MUTE,    ,VOLD,VOLU,    ,    ,    ,         ,    ,    ,    ,    ,    ,BL_S,
  //`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
                           ,    ,    ,             ,    ,
  //                  `----+----+----'        `----+----+----'
  )

};


/* TAP DANCE */
void shift_caps_down (qk_tap_dance_state_t *state, void *user_data) {
  if (state->count >= 3) {
    register_code (KC_CAPS);
  } else {
    register_code (KC_LSFT);
  }
}

void shift_caps_up (qk_tap_dance_state_t *state, void *user_data) {
  if (state->count >= 3) {
    unregister_code (KC_CAPS);
  } else {
    unregister_code (KC_LSFT);
  }
}

void dance_lgui_numpad_finished(qk_tap_dance_state_t* state, void* user_data)
{
    if (state->count == 1)
    {
        register_code(KC_LGUI);
    }
}

void dance_lgui_numpad_reset(qk_tap_dance_state_t* state, void* user_data)
{
    if (state->count == 1)
    {
        unregister_code(KC_LGUI);
    }
    else
    {
        uint8_t layer = biton32(layer_state);
        if (layer == _NUMPAD)
        {
            layer_off(_NUMPAD);
        } else {
            layer_on(_NUMPAD);
            layer_off(_MOUSECURSOR);
        }
    }
}


void dance_lgui_mousecursor_finished(qk_tap_dance_state_t* state, void* user_data)
{
    if (state->count == 1)
    {
        register_code(KC_LGUI);
    }
}

void dance_lgui_mousecursor_reset(qk_tap_dance_state_t* state, void* user_data)
{
    if (state->count == 1)
    {
        unregister_code(KC_LGUI);
    }
    else
    {
        uint8_t layer = biton32(layer_state);
        if (layer == _MOUSECURSOR)
        {
            layer_off(_MOUSECURSOR);
        } else {
            layer_on(_MOUSECURSOR);
            layer_off(_NUMPAD);
        }
    }
}


qk_tap_dance_action_t tap_dance_actions[] = {

  // Tap once for L-GUI(Windows), twice for Escape
        [TD_LGUIESC] = ACTION_TAP_DANCE_DOUBLE(KC_LGUI, KC_ESC),
  // Tap once for L-GUI(Windows), twice for APP
        [TD_LGUIAPP] = ACTION_TAP_DANCE_DOUBLE(KC_LGUI, KC_APP),
  // Tap once for R-Alt, twice for APP
        [TD_LALTAPP] = ACTION_TAP_DANCE_DOUBLE(KC_LALT, KC_APP),
  // Tap once for Left Shift , trice for CAPS Lock
        [TD_SHIFTCAPS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, shift_caps_down, shift_caps_up),
  // tap once for LGUI , twice for move to NUMPAD layer
        [TD_LGUINMPD] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_lgui_numpad_finished, dance_lgui_numpad_reset),
  // tap once for LGUI , twice for move to MOUSECURSOR layer
        [TD_LGUIMSCS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_lgui_mousecursor_finished, dance_lgui_mousecursor_reset)

};

/* END TAP DANCE */


void persistent_default_layer_set(uint16_t default_layer) {
  eeconfig_update_default_layer(default_layer);
  default_layer_set(default_layer);
}

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case QWERTY:
      if (record->event.pressed) {
        persistent_default_layer_set(1UL<<_qwerty break="" case="" false="" if="" lower:="" record-="" return="">event.pressed) {
        layer_on(_LOWER);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      } else {
        layer_off(_LOWER);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      }
      return false;
      break;
    case RAISE:
      if (record->event.pressed) {
        layer_on(_RAISE);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      } else {
        layer_off(_RAISE);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      }
      return false;
      break;
    case ADJUST:
      if (record->event.pressed) {
        layer_on(_ADJUST);
      } else {
        layer_off(_ADJUST);
      }
      return false;
      break;
  }
  return true;
}



2018-08-14

 ASCIIの記事を見ていたら思い切り作成したくなったので、色々発注してみた。

 順不同であるが、keymapの作成過程を書いてみる。

 先ずはdefaultを書き込んでみて色々試してみた。以下の事が徐々に判ったので、実装に反映した。

1)自分の手は思ったより小さい。小指の先のキーを使うのは結構大変。この手のエルゴキーボードは指をホームポジションから大きく動かさずに使うことが前提の様である。小指を伸ばしてホームポジションがずれるとミスタッチが増える。

2)最上段の列に指を伸ばすと同様にホームポジションから外れやすくなる。

3)親指担当のキーで内側上のキーはとても押しずらい。

4)横一列のhjklを使ったカーソルキーより逆Tのカーソルキー配列が使い易い。

5)業務でも使用するので、10キーは欲しい。

6)Macでも使用したい。

 上記を考慮すると以下の様な実装となった。

a)親指が最も押し易い中央のキーにSpace、Enterを配置。そして長押しでLowerLayerへ遷移とする。この結果、Spaceの押しっぱなしによる空白大量入力は出来なくなるが許容する。

b)LowerLayerに入力頻度の高い記号類、カーソルキーを極力配置する。

c)ModifierのALT,CTRL,Win、使用頻度の高いESC,BackSpace,TABは親指が担当する4キー中の下3キーの組み合わせで入力出来る様にする。

d)RaiseLayerはFnキー等の押し下げ頻度が低く、入力に時間が掛かっても良いキーを配置する。

e)10キー、マウスキーのLayerへの遷移はアクション数増加を許容。Lower,Raise状態にしてからDouble Tapでの遷移とする。

f)Lower,Raiseの同時押しが必要なAdjustLayerにMute,Volume等のハードウエア関連のキーを配置。


 特に6)を考慮したため、以下の様な事に留意している。

 Macでは所謂コマンド入力がコマンドキー押し下げ状態で英字を入力する。しかしながらWindowsではALT,Winを押し下げ後、一度離して英字を入力する。
 そのため、ALT(Mac OSでコマンドキーに設定),Win(Mac OSでOptionキーに設定)の長押しを別機能に割り当てる事はしない。

 WindowsではALT,Winの同時押しは発生しないが(あったらごめんなさい)Macでは発生する。そのため、両手にALT,Winキーを分散して配置する。

2018-08-11


#include "iris.h"
#include "action_layer.h"
#include "eeconfig.h"

extern keymap_config_t keymap_config;

#define _QWERTY 0
#define _LOWER 1
#define _RAISE 2
#define _NUMPAD 4
#define _MOUSECURSOR 8
#define _ADJUST 16

enum custom_keycodes {
  QWERTY = SAFE_RANGE,
  LOWER,
  RAISE,
  NUMPAD,
  MOUSECURSOR,
  ADJUST,
};

/* Tap Dance */
enum {
  TD_LGUIESC=0,
  TD_LGUIAPP,
  TD_LALTAPP,
  TD_SHIFTCAPS
};


#define KC_ KC_TRNS
#define _______ KC_TRNS

#define KC_LOWR LOWER
#define KC_RASE RAISE
#define KC_RST RESET
#define KC_BL_S BL_STEP
#define KC_DBUG DEBUG
#define KC_RTOG RGB_TOG
#define KC_RMOD RGB_MOD
#define KC_RHUI RGB_HUI
#define KC_RHUD RGB_HUD
#define KC_RSAI RGB_SAI
#define KC_RSAD RGB_SAD
#define KC_RVAI RGB_VAI
#define KC_RVAD RGB_VAD
#define KC_MCPW KC_POWER
#define KC_MCVU KC__VOLUP
#define KC_MCVD KC__VOLDOWN

#define KC_BSGU MT(MOD_LGUI, KC_BSPC) // tap BackSpace , Hold RGUI
#define KC_BSAL MT(MOD_LALT, KC_BSPC) // tap BackSpace , Hold LALT
#define KC_TBAL MT(MOD_LALT, KC_TAB) // tap TAB , Hold LALT
#define KC_SLGU MT(MOD_LGUI, KC_SLSH) // tap Slash , Hold LGUI
#define KC_DOAL MT(MOD_LALT, KC_DOT) // tap Dot , Hold LALT
#define KC_COCT MT(MOD_LCTL, KC_COMM) // tap Comma , Hold LCTL
#define KC_BLRS MT(MOD_RSFT, KC_BSLS) // tap BackSlash , Hold RSFT
#define KC_SPAT MT(MOD_LALT, KC_SPC) // tap Space , Hold LALT
#define KC_ESCT MT(MOD_LCTL, KC_ESC) // tap Escape , Hold LCTL
#define KC_TBCT MT(MOD_LCTL, KC_TAB) // tap TAB , Hold LCTL

#define KC_CMZ LGUI(KC_Z)
#define KC_CMX LGUI(KC_X)
#define KC_CMC LGUI(KC_C)
#define KC_CMV LGUI(KC_V)
#define KC_CADL ALTG(KC_DEL)
#define KC_STAB S(KC_TAB)


#define KC_SPLW LT(_LOWER,KC_SPC) // tap Space , Hold LowerLayer
#define KC_ENLW LT(_LOWER,KC_ENTER) // tap Enter , Hold LowerLayer
#define KC_ESRA LT(_RAISE,KC_ESC) // tap ESC , Hold RaiseLayer
#define KC_DLRA LT(_RAISE,KC_DEL) // tap ESC , Hold RaiseLayer
#define KC_NPD TT(_NUMPAD) // tap Momentary NUMPAD , DualTap toggle NUMPAD
#define KC_MSC TT(_MOUSECURSOR) // tap Momentary NUMPAD , DualTap toggle numpad

/* Tap Dance */
#define KC_LGES TD(TD_LGUIESC)
#define KC_LGAP TD(TD_LGUIAPP)
#define KC_LAAP TD(TD_LALTAPP)
#define KC_SHCL TD(TD_SHIFTCAPS)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {


  [_QWERTY] = LAYOUT_kc(
  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
     GRV , 1  , 2  , 3  , 4  , 5  ,                6  , 7  , 8  , 9  , 0  ,MINS,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
     TBAL, Q  , W  , E  , R  , T  ,                Y  , U  , I  , O  , P  ,EQL ,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
     LCTL, A  , S  , D  , F  , G  ,                H  , J  , K  , L  ,SCLN,QUOT,
  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
     SHCL, Z  , X  , C  , V  , B  ,ESRA,     RASE, N  , M  ,COCT,DOAL,SLGU,BLRS,
  //`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
                       LAAP,SPLW,TBCT,         BSAL,ENLW,LGES
  //                  `----+----+----'        `----+----+----'
  ),


  [_LOWER] = LAYOUT_kc(
  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
     ESC ,EXLM, AT ,HASH,DLR ,PERC,               CIRC,AMPR,ASTR,LPRN,RPRN,DEL ,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
         ,TILD,UNDS,PLUS,PIPE,LABK,               RABK,PGUP, UP ,PGDN,HOME,BSPC,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
         ,GRV ,MINS,EQL ,BSLS,LBRC,               RBRC,LEFT,DOWN,RGHT,END ,ENT ,
  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
         , RO ,JYEN,QUES,LPRN,LCBR,TAB ,         ,RCBR,RPRN,    ,    ,    ,    ,
  //`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
                       LGUI,    ,ESC ,         DEL ,    ,NPD
  //                  `----+----+----'        `----+----+----'
  ),


  [_RAISE] = LAYOUT_kc(
  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
     F12 , F1 , F2 , F3 , F4 , F5 ,                F6 , F7 , F8 , F9 ,F10 ,F11 ,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
     CADL, 1  , 2  , 3  , 4  , 5  ,                6  , 7  , 8  , 9  , 0  ,BSPC,
  //|----+----+----+----+----+----+              |----+----+----+----+----+----|
         ,EXLM, AT ,HASH,DLR ,PERC,               CIRC,AMPR,ASTR,LPRN,RPRN,ENT ,
  //|----+----+----+----+----+----|----.    ,----|----+----+----+----+----+----|
     MUTE,PLUS,MINS,EQL ,BSLS,QUOT,    ,         ,DQUO,SLSH,    ,    ,    ,PSCR,
  //`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
                           ,SPC ,TAB ,         BSPC,ENT ,MSC
  //                  `----+----+----'        `----+----+----'
  ),

  [_NUMPAD] = LAYOUT_kc(
  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
     ESC ,    ,    ,    ,    ,    ,                   , P7 , P8 , P9 ,PMNS,DEL ,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
         ,HOME,PGUP, UP ,PGDN,LABK,               RABK, P4 , P5 , P6 ,PPLS,BSPC,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
         ,END ,LEFT,DOWN,RGHT,LPRN,               RPRN, P1 , P2 , P3 ,PAST,COLN,
  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
         ,    ,    ,    ,    ,STAB,NLCK,      P0 ,EQL , P0 ,COMM,DOT ,PSLS,PENT,
  //`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
                           ,    ,    ,             ,    ,
  //                  `----+----+----'        `----+----+----'
  ),

  [_MOUSECURSOR] = LAYOUT_kc(
  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
         ,    ,    ,    ,    ,    ,                   ,    ,    ,    ,    ,    ,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
         ,HOME,PGUP, UP ,PGDN,    ,               WH_D,WH_R,MS_U,ACL0,ACL1,ACL2,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
         ,END ,LEFT,DOWN,RGHT,    ,               WH_L,MS_L,MS_D,MS_R,BTN1,BTN2,
  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
         ,    ,    ,    ,    ,    ,    ,         ,WH_U,LEFT,DOWN, UP ,RGHT,BTN3,
  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
                           ,    ,    ,             ,    ,
  //                  `----+----+----'        `----+----+----'
),


  [_ADJUST] = LAYOUT_kc(
  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
     RST ,MUTE,VOLD,VOLU,    ,    ,                   ,    ,    ,    ,    ,    ,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
         ,    ,    ,    ,    ,    ,               RTOG,RMOD,RHUI,RSAI,RVAI,    ,
  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
     MCPW,EJCT,MCVD,MCVU,    ,    ,                   ,DBUG,RHUD,RSAD,RVAD,    ,
  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
     MUTE,    ,VOLD,VOLU,    ,    ,    ,         ,    ,    ,    ,    ,    ,BL_S,
  //`----+----+----+--+-+----+----+----/    \----+----+----+----+----+----+----'
                           ,    ,    ,             ,    ,
  //                  `----+----+----'        `----+----+----'
  )

};


/* TAP DANCE */
void shift_caps_down (qk_tap_dance_state_t *state, void *user_data) {
  if (state->count >= 3) {
    register_code (KC_CAPS);
  } else {
    register_code (KC_LSFT);
  }
}

void shift_caps_up (qk_tap_dance_state_t *state, void *user_data) {
  if (state->count >= 3) {
    unregister_code (KC_CAPS);
  } else {
    unregister_code (KC_LSFT);
  }
}


qk_tap_dance_action_t tap_dance_actions[] = {

  // Tap once for L-GUI(Windows), twice for R-GUI(APP)
        [TD_LGUIESC] = ACTION_TAP_DANCE_DOUBLE(KC_LGUI, KC_ESC),
  // Tap once for L-GUI(Windows), twice for R-GUI(APP)
        [TD_LGUIAPP] = ACTION_TAP_DANCE_DOUBLE(KC_LGUI, KC_APP),
  // Tap once for R-Alt, twice for R-GUI
        [TD_LALTAPP] = ACTION_TAP_DANCE_DOUBLE(KC_LALT, KC_APP),
  // Tap once for Left Shift , trice for CAPS Lock
        [TD_SHIFTCAPS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, shift_caps_down, shift_caps_up)
};

/* END TAP DANCE */


void persistent_default_layer_set(uint16_t default_layer) {
  eeconfig_update_default_layer(default_layer);
  default_layer_set(default_layer);
}

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case QWERTY:
      if (record->event.pressed) {
        persistent_default_layer_set(1UL<<_qwerty break="" case="" false="" if="" lower:="" record-="" return="">event.pressed) {
        layer_on(_LOWER);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      } else {
        layer_off(_LOWER);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      }
      return false;
      break;
    case RAISE:
      if (record->event.pressed) {
        layer_on(_RAISE);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      } else {
        layer_off(_RAISE);
        update_tri_layer(_LOWER, _RAISE, _ADJUST);
      }
      return false;
      break;
    case ADJUST:
      if (record->event.pressed) {
        layer_on(_ADJUST);
      } else {
        layer_off(_ADJUST);
      }
      return false;
      break;
  }
  return true;
}



自己紹介

自分の写真
東京都, Japan
憂鬱な凍死家です。こちらではmixiとは異なり固めの話題中心です。

Total Page View

Categories

Powered by Blogger.

Popular Posts

Blog Archive