summaryrefslogtreecommitdiffstats
path: root/iwrap
diff options
context:
space:
mode:
authortmk <nobody@nowhere>2012-06-07 02:25:15 +0900
committertmk <nobody@nowhere>2012-06-07 02:47:33 +0900
commitf4125707399d11a7d80587659c464b9bcddb8c56 (patch)
tree1d2a02e30f8cd103e8f4dc36629c09f6a3d44fef /iwrap
parent225de7a847a511d004bf909b1334e19497cf2f9d (diff)
Moved files to common, protocol and doc directory
Diffstat (limited to 'iwrap')
-rw-r--r--iwrap/iWRAP.txt376
-rw-r--r--iwrap/iwrap.c467
-rw-r--r--iwrap/iwrap.h49
-rw-r--r--iwrap/main.c378
-rw-r--r--iwrap/suart.S156
-rw-r--r--iwrap/suart.h8
-rw-r--r--iwrap/wd.h159
7 files changed, 0 insertions, 1593 deletions
diff --git a/iwrap/iWRAP.txt b/iwrap/iWRAP.txt
deleted file mode 100644
index 2a062d9d98..0000000000
--- a/iwrap/iWRAP.txt
+++ /dev/null
@@ -1,376 +0,0 @@
-Bulegiga WT12
-=============
-WT12 is a bluetooth module from Bluegiga. http://www.bluegiga.com/
-
-iWRAP
- higher layer interface for bluetooth firmware
- communicate with UART
-
-iWRAP HID
-default setting
- 115200 8bit/n/1/n
-
-
-TODO
-----
-KiCAD circuit/PCB design
-power saving
- AVR sleep(15ms by watch dog timer)
- WT12 sleep
- measuring current consumption
- measuring battery life of normal usage/idle/intensive usage
-software reset/bootloarder
-LED indicator(chaging/paring/connecting)
-license confirmation of suart.c
-consumer page is not working
-authenticate method/SSP
-SPP keyboard support
-SPP debug console support
-mouse wheel feature request to Bluegiga
-
-
-Problems
---------
-power consumption
-no consumer page support(bug?)
-no mouse wheel support
-no paring management
-no interactive auth method
-
-
-UART hardware flow control
---------------------------
-(iWRAP4 User Guide 9.5)
-Hardware flow control is enabled by default and it should not be disabled unless mandatory, because without the hardware flow control the data transmission may not be reliable.
-If the hardware flow control is enabled from PS-keys, but no flow control is used, the following steps should be implemented in the hardware design:
-- CTS pin must be grounded
-- RTS pin must be left floating
-
-
-Power Saving
-------------
-power consume
- without opimization: 4hr to shutdown(310mAh)
- 2011/08/25: 9hr(310mAh) SNIFF MASTER sleep/WDTO_120MS
-
-measure current consumption
- HHKB keyswitch matrix board
- idle
- scanning
- Bluegiga WT12 module
- SLEEP command
- deep sleep on/off in config bits
-
-HHKB keyswich
- how to power off
- I/O pin configuration when sleeping
- FET switch for 5V regulator
-
-Bluetooth module
- power off when in USB mode
- power off by FET switch
-
-AVR configuration
- unused pins
- ADC
-
-
-
-SET CONTROL CONFIG
-------------------
- SET CONTROL CONFIG 4810
- SET CONTROL CONFIG LIST
- SET CONTROL CONFIG 0000 0000 4910 DEEP_SLEEP KLUDGE INTERACTIVE_PIN UART_LATENCY
-
- Bit14 UART low latency
- Bit11 Interactive pairing mode
- Bit04 Deep sleep
-
-
-Reconnection
-------------
-SET CONTROL AUTOCALL 1124 5000 HID
- 1124 HID service class
- 5000 interval ms
-
-HID profile
------------
-This is needed to configure only once.
- SET PROFILE HID ON
- RESET
-
-HID class
----------
- SET BT CLASS 005C0 // keyboard/mouse combined devie
-
-Pairing Security
-----------------
-Secure Simple Pairing(SSP)
- SET BT SSP 2 0 // Enables SSP for keyboard and Man-in-the-middle protection
- SET BT SSP 3 0 // Enables SSP just works mode
-
-for keyboard with SSP
- SET BT AUTH * 0000
- SET BT SSP 2 0
- SET CONTROL CONFIG 800
- RESET
-
-for keyboard without SSP
- SET BT AUTH * 0000
- SET CONTROL CONFIG 800
- RESET
-
-AUTH
- AUTH xx:xx:xx:xx:xx:xx? // Pairing request event
- AUTH xx:xx:xx:xx:xx:xx 0000
-
- SSP PASSKEY 78:dd:08:b7:e4:a2 ?
- SSP PASSKEY 78:dd:08:b7:e4:a2 xxxxx
- (SSP COMPLETE 78:dd:08:b7:e4:a2 HCI_ERROR_AUTH_FAIL // failed)
- RING 0 78:dd:08:b7:e4:a2 11 HID
-
-Connecton
- RING xx:xx:xx:xx:xx:xx xx HID // connection event
-
- KILL xx:xx:xx:xx:xx:xx
-
-Mode
-----
-Command mode
-Data mode
- Raw mode
- (Simple mode not for a real keyboard)
-
-Raw mode
- Keyboard:
- 0x9f, length(10), 0xa1, 0x01, mods, 0x00, key1, key2, key3, key4, key5, key6
-
- Mouse:
- 0x9f, length(5), 0xa1, 0x02, buttons, X, Y
-
- Consumer page:
- 0x9f, length(5), 0xa1, 0x03, bitfield1, bitfield2, bitfield3
-
- consumer page suage
- Bitfield 1:
- 0x01 Volume Increment
- 0x02 Volume Decrement
- 0x04 Mute
- 0x08 Play/Pause
- 0x10 Scan Next Track
- 0x20 Scan Previous Track
- 0x40 Stop
- 0x80 Eject
- Bitfield 2:
- 0x01 Email Reader
- 0x02 Application Control Search
- 0x04 AC Bookmarks
- 0x08 AC Home
- 0x10 AC Back
- 0x20 AC Forward
- 0x40 AC Stop
- 0x80 AC Refresh
- Bitfield 3:
- 0x01 Application Launch Generic Consumer Control
- 0x02 AL Internet Browser
- 0x04 AL Calculator
- 0x08 AL Terminal Lock / Screensaver
- 0x10 AL Local Machine Browser
- 0x20 AC Minimize
- 0x40 Record
- 0x80 Rewind
-
-
-
-
-
-2011/07/13
-set
-SET BT BDADDR 00:07:80:47:22:14
-SET BT NAME HHKB pro BT
-SET BT CLASS 0005c0
-SET BT AUTH * 0000
-SET BT IDENT BT:47 f000 4.1.0 Bluegiga iWRAP
-SET BT LAP 9e8b33
-SET BT PAGEMODE 4 2000 1
-SET BT PAIR 78:dd:08:b7:e4:a2 a191189cd7e51030ad6a07848ce879bb
-SET BT POWER 3 3 3
-SET BT ROLE 0 f 7d00
-SET BT SNIFF 0 20 1 8
-SET BT SSP 2 1
-SET BT MTU 667
-SET CONTROL AUTOCALL 1124 3000 HID
-SET CONTROL BAUD 38400,8n1
-SET CONTROL CD 00 0
-SET CONTROL ECHO 7
-SET CONTROL ESCAPE 43 00 1
-SET CONTROL GAIN 0 5
-SET CONTROL INIT SET CONTROL MUX 0
-SET CONTROL MSC DTE 00 00 00 00 00 00
-SET CONTROL MUX 1
-SET CONTROL PIO 00 00
-SET CONTROL READY 00
-SET PROFILE HID f HID
-SET
-
-info config
-
-!!! THIS IS BETA RELEASE AND MAY BE USED FOR EVALUATION PURPOSES ONLY !!!
-
-WRAP THOR AI (4.1.0 build 435)
-Copyright (c) 2003-2011 Bluegiga Technologies Inc.
-Compiled on Jun 28 2011 17:19:51, running on WT12-A module, psr v31
- AVRCP BGIO FTP HFP HFP_AG HID HID_CONSUMER_PAGE HSP LEDS MAP OTA PBAP PIO=0x00fc SSP SUBRATE TEST VOLUME
- - BOCK3 version 435 (Jun 28 2011 17:19:37) (max acl/sco 7/1)
- - Bluetooth version 2.1, Power class 2
- - Loader 4279, firmware 6297 (56-bit encryption), native execution mode
- - up 0 days, 06:23, 2 connections (pool 2)
- - User configuration:
-&028a = 0001 0000 0000 0011 0024 0000 0000 0010 0000 0080 0000 0000 0080 005f 009b 0034 00fb 0006
-&028b = 0000 0bb8
-&028d = 0001
-&0295 = 0000 0005 000b 0000 0003 0000 0000 0000 0000 0000 0000
-&0298 = a006
-&0299 = 0000 0000
-&02a3 = 0030 0030 0030 0030
-&02a4 = 009d 0000
-&02a5 = 0053 0045 0054 0020 0043 004f 004e 0054 0052 004f 004c 0020 004d 0055 0058 0020 0030
-&02a7 = 0000 05c0
-&02a8 = 4910 0000 0000
-&02aa = 0004 2000 0001 0033 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
-&02ac = 0000 0000 002b 0000 0000 0000 0000 0000 0000 0000 0002 0000 0000 0000 0010 0000 0000 0000 0000 029b 0000 0000 0000 0000
-&02ad = 4848 424b 7020 6f72 4220 0054
-&02b3 = 0005 0003 0003 0003 0003 0003 0003 0003 0003 0003 0003 0003 0003 0003 0003 0003
-&02b7 = 000f 4948 0044
-&02bb = 8000
-READY.
-
-
-
-
-2011/07/07 settings:
-set
-SET BT BDADDR 00:07:80:47:22:14
-SET BT NAME HHKB Pro BT
-SET BT CLASS 0005c0
-SET BT AUTH * 000
-SET BT IDENT BT:47 f000 4.0.0 Bluegiga iWRAP
-SET BT LAP 9e8b33
-SET BT PAGEMODE 4 2000 1
-SET BT PAIR 78:dd:08:b7:e4:a2 9e54d0aabb1b4d73cfccddb1ea4ef2d6
-SET BT POWER 3 3 3
-SET BT ROLE 0 f 7d00
-SET BT SNIFF 0 20 1 8
-SET BT SSP 3 0
-SET BT MTU 667
-SET CONTROL BAUD 38400,8n1
-SET CONTROL CD 00 0
-SET CONTROL ECHO 7
-SET CONTROL ESCAPE 255 00 1
-SET CONTROL GAIN 0 5
-SET CONTROL INIT set control mux 0
-SET CONTROL MSC DTE 00 00 00 00 00 00
-SET CONTROL PREAMP 1 1
-SET CONTROL READY 00
-SET PROFILE HID HID
-SET PROFILE SPP Bluetooth Serial Port
-SET
-
-info config
-WRAP THOR AI (4.0.0 build 317)
-Copyright (c) 2003-2010 Bluegiga Technologies Inc.
-Compiled on Apr 20 2010 16:44:28, running on WT12-A module, psr v31
- AVRCP FTP PBAP PIO=0x00fc SSP SUBRATE VOLUME
- - BOCK3 version 317 (Apr 20 2010 16:44:21) (max acl/sco 7/1)
- - Bluetooth version 2.1, Power class 2
- - Loader 4279, firmware 6297 (56-bit encryption), native execution mode
- - up 0 days, 00:00, 0 connections (pool 1)
- - User configuration:
-&028c = 0001 0020 0000 0001 0008 0000
-&028d = 0000
-&0296 = 0047 0001 f000 0400 6c42 6575 6967 6167 6920 5257 5041
-&0298 = c006
-&02a3 = 0030 0030 0030
-&02a4 = 009d 0000
-&02a5 = 0073 0065 0074 0020 0063 006f 006e 0074 0072 006f 006c 0020 006d 0075 0078 0020 0030
-&02a7 = 0000 05c0
-&02a8 = 0800 0000 0000
-&02ac = 0000 0000 00ff 0000 0000 0000 0000 0000 0000 0000 0002 0000 0000 0000 0010 0000 0000 0000 0000 029b 0000 0000 0000 0000
-&02ad = 4848 424b 5020 6f72 4220 0054
-&02b3 = 0004 0003 0003 0003 0003 0003 0003 0003 0003 0003 0003 0003 0003 0003 0003 0003
-&02b7 = 0000
-&02bb = 6c42 6575 6f74 746f 2068 6553 6972 6c61 5020 726f 0074
-READY.
-
-
-
-2011/08/23:
-SET BT BDADDR 00:07:80:47:22:14
-SET BT NAME HHKB pro BT
-SET BT CLASS 0005c0
-SET BT AUTH * 0000
-SET BT IDENT BT:47 f000 4.1.0 Bluegiga iWRAP
-SET BT LAP 9e8b33
-SET BT PAGEMODE 4 2000 1
-SET BT PAIRCOUNT 4
-SET BT POWER 3 3 3
-SET BT ROLE 1 f 12c0
-SET BT SNIFF 10 2 1 8
-SET BT SSP 3 0
-SET BT MTU 667
-SET CONTROL BAUD 38400,8n1
-SET CONTROL CD 00 0
-SET CONTROL ECHO 7
-SET CONTROL ESCAPE 43 00 1
-SET CONTROL GAIN 0 5
-SET CONTROL INIT SET CONTROL MUX 0
-SET CONTROL MSC DTE 00 00 00 00 00 00
-SET CONTROL MUX 1
-SET CONTROL PIO 00 00
-SET CONTROL READY 00
-SET PROFILE HID 7 HIDKeyboardMouse
-SET
-
-SET CONTROL CONFIG 0000 0004 481e CLOCK_CACHE INTERLACED_INQ INTERLACED_PAGE DEEP_SLEEP INTERACTIVE_PIN UART_LATENCY 23D_NOKLUDGE
-
-
-
-2011/08/25:
-SET BT BDADDR 00:07:80:47:22:14
-SET BT NAME HHKB pro BT
-SET BT CLASS 0005c0
-
-SET BT IDENT BT:47 f000 4.1.0 Bluegiga iWRAP
-SET BT LAP 9e8b33
-SET BT PAGEMODE 4 2000 1
-SET BT PAIRCOUNT 4
-SET BT PAIR 78:dd:08:b7:e4:a2 0be83335a03fed8ededae42e99554e28
-SET BT POWER 3 3 3
-SET BT ROLE 1 f 12c0
-SET BT SNIFF 100 20 1 8
-SET BT SSP 3 0
-SET BT MTU 667
-SET CONTROL BAUD 38400,8n1
-SET CONTROL CD 00 0
-SET CONTROL ECHO 7
-SET CONTROL ESCAPE - 20 1
-SET CONTROL GAIN 0 5
-SET CONTROL INIT SET CONTROL MUX 0
-SET CONTROL MSC DTE 00 00 00 00 00 00
-SET CONTROL MUX 1
-SET CONTROL PIO 00 00
-SET CONTROL READY 00
-SET PROFILE HID f HIDKeyboardMouse
-SET
-
-
-SET CONTROL CONFIG 0000 0000 490e CLOCK_CACHE INTERLACED_INQ INTERLACED_PAGE KLUDGE INTERACTIVE_PIN UART_LATENCY
-
-
-2011/09/08:
-SET CONTROL CONFIG 0000 0000 410e CLOCK_CACHE INTERLACED_INQ INTERLACED_PAGE KLUDGE UART_LATENCY
-
- Removed INTERACTIVE_PIN to avoid interactive auth and use SET BT AUTH pin(0000).
-
-
-EOF
diff --git a/iwrap/iwrap.c b/iwrap/iwrap.c
deleted file mode 100644
index 9c68761bf0..0000000000
--- a/iwrap/iwrap.c
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
-Copyright 2011 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/* host driver for Bulegiga iWRAP */
-/* Bluegiga BT12
- * Connections
- * Hardware UART Software UART BlueTooth
- * PC=====UART=======AVR=====SUART====iWRAP(BT12)-----------PC
- *
- * - Hardware UART for Debug Console to communicate iWRAP
- * - Software UART for iWRAP control to send keyboard/mouse data
- */
-
-#include <stdint.h>
-#include <string.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include "usb_keycodes.h"
-#include "suart.h"
-#include "uart.h"
-#include "report.h"
-#include "host_driver.h"
-#include "iwrap.h"
-#include "print.h"
-
-
-/* iWRAP MUX mode utils. 3.10 HID raw mode(iWRAP_HID_Application_Note.pdf) */
-#define MUX_HEADER(LINK, LENGTH) do { \
- xmit(0xbf); /* SOF */ \
- xmit(LINK); /* Link */ \
- xmit(0x00); /* Flags */ \
- xmit(LENGTH); /* Length */ \
-} while (0)
-#define MUX_FOOTER(LINK) xmit(LINK^0xff)
-
-
-static uint8_t connected = 0;
-//static uint8_t channel = 1;
-
-/* iWRAP buffer */
-#define MUX_BUF_SIZE 64
-static char buf[MUX_BUF_SIZE];
-static uint8_t snd_pos = 0;
-
-#define MUX_RCV_BUF_SIZE 256
-static char rcv_buf[MUX_RCV_BUF_SIZE];
-static uint8_t rcv_head = 0;
-static uint8_t rcv_tail = 0;
-
-
-/* receive buffer */
-static void rcv_enq(char c)
-{
- uint8_t next = (rcv_head + 1) % MUX_RCV_BUF_SIZE;
- if (next != rcv_tail) {
- rcv_buf[rcv_head] = c;
- rcv_head = next;
- }
-}
-
-static char rcv_deq(void)
-{
- char c = 0;
- if (rcv_head != rcv_tail) {
- c = rcv_buf[rcv_tail++];
- rcv_tail %= MUX_RCV_BUF_SIZE;
- }
- return c;
-}
-
-/*
-static char rcv_peek(void)
-{
- if (rcv_head == rcv_tail)
- return 0;
- return rcv_buf[rcv_tail];
-}
-*/
-
-static void rcv_clear(void)
-{
- rcv_tail = rcv_head = 0;
-}
-
-/* iWRAP response */
-ISR(PCINT1_vect, ISR_BLOCK) // recv() runs away in case of ISR_NOBLOCK
-{
- if ((SUART_IN_PIN & (1<<SUART_IN_BIT)))
- return;
-
- static volatile uint8_t mux_state = 0xff;
- static volatile uint8_t mux_link = 0xff;
- uint8_t c = recv();
- switch (mux_state) {
- case 0xff: // SOF
- if (c == 0xbf)
- mux_state--;
- break;
- case 0xfe: // Link
- mux_state--;
- mux_link = c;
- break;
- case 0xfd: // Flags
- mux_state--;
- break;
- case 0xfc: // Length
- mux_state = c;
- break;
- case 0x00:
- mux_state = 0xff;
- mux_link = 0xff;
- break;
- default:
- if (mux_state--) {
- uart_putchar(c);
- rcv_enq(c);
- }
- }
-}
-
-
-/*------------------------------------------------------------------*
- * iWRAP communication
- *------------------------------------------------------------------*/
-void iwrap_init(void)
-{
- // reset iWRAP if in already MUX mode after AVR software-reset
- iwrap_send("RESET");
- iwrap_mux_send("RESET");
- _delay_ms(3000);
- iwrap_send("\r\nSET CONTROL MUX 1\r\n");
- _delay_ms(500);
- iwrap_check_connection();
-}
-
-void iwrap_mux_send(const char *s)
-{
- rcv_clear();
- MUX_HEADER(0xff, strlen((char *)s));
- iwrap_send(s);
- MUX_FOOTER(0xff);
-}
-
-void iwrap_send(const char *s)
-{
- while (*s)
- xmit(*s++);
-}
-
-/* send buffer */
-void iwrap_buf_add(uint8_t c)
-{
- // need space for '\0'
- if (snd_pos < MUX_BUF_SIZE-1)
- buf[snd_pos++] = c;
-}
-
-void iwrap_buf_del(void)
-{
- if (snd_pos)
- snd_pos--;
-}
-
-void iwrap_buf_send(void)
-{
- buf[snd_pos] = '\0';
- snd_pos = 0;
- iwrap_mux_send(buf);
-}
-
-void iwrap_call(void)
-{
- char *p;
-
- iwrap_mux_send("SET BT PAIR");
- _delay_ms(500);
-
- p = rcv_buf + rcv_tail;
- while (!strncmp(p, "SET BT PAIR", 11)) {
- p += 7;
- strncpy(p, "CALL", 4);
- strncpy(p+22, " 11 HID\n\0", 9);
- print_S(p);
- iwrap_mux_send(p);
- // TODO: skip to next line
- p += 57;
-
- DEBUG_LED_CONFIG;
- DEBUG_LED_ON;
- _delay_ms(500);
- DEBUG_LED_OFF;
- _delay_ms(500);
- DEBUG_LED_ON;
- _delay_ms(500);
- DEBUG_LED_OFF;
- _delay_ms(500);
- DEBUG_LED_ON;
- _delay_ms(500);
- DEBUG_LED_OFF;
- _delay_ms(500);
- DEBUG_LED_ON;
- _delay_ms(500);
- DEBUG_LED_OFF;
- _delay_ms(500);
- DEBUG_LED_ON;
- _delay_ms(500);
- DEBUG_LED_OFF;
- _delay_ms(500);
- }
- iwrap_check_connection();
-}
-
-void iwrap_kill(void)
-{
- char c;
- iwrap_mux_send("LIST");
- _delay_ms(500);
-
- while ((c = rcv_deq()) && c != '\n') ;
- if (strncmp(rcv_buf + rcv_tail, "LIST ", 5)) {
- print("no connection to kill.\n");
- return;
- }
- // skip 10 'space' chars
- for (uint8_t i = 10; i; i--)
- while ((c = rcv_deq()) && c != ' ') ;
-
- char *p = rcv_buf + rcv_tail - 5;
- strncpy(p, "KILL ", 5);
- strncpy(p + 22, "\n\0", 2);
- print_S(p);
- iwrap_mux_send(p);
- _delay_ms(500);
-
- iwrap_check_connection();
-}
-
-void iwrap_unpair(void)
-{
- iwrap_mux_send("SET BT PAIR");
- _delay_ms(500);
-
- char *p = rcv_buf + rcv_tail;
- if (!strncmp(p, "SET BT PAIR", 11)) {
- strncpy(p+29, "\n\0", 2);
- print_S(p);
- iwrap_mux_send(p);
- }
-}
-
-void iwrap_sleep(void)
-{
- iwrap_mux_send("SLEEP");
-}
-
-void iwrap_sniff(void)
-{
-}
-
-void iwrap_subrate(void)
-{
-}
-
-bool iwrap_failed(void)
-{
- if (strncmp(rcv_buf, "SYNTAX ERROR", 12))
- return true;
- else
- return false;
-}
-
-uint8_t iwrap_connected(void)
-{
- return connected;
-}
-
-uint8_t iwrap_check_connection(void)
-{
- iwrap_mux_send("LIST");
- _delay_ms(100);
-
- if (strncmp(rcv_buf, "LIST ", 5) || !strncmp(rcv_buf, "LIST 0", 6))
- connected = 0;
- else
- connected = 1;
- return connected;
-}
-
-
-/*------------------------------------------------------------------*
- * Host driver
- *------------------------------------------------------------------*/
-static uint8_t keyboard_leds(void);
-static void send_keyboard(report_keyboard_t *report);
-static void send_mouse(report_mouse_t *report);
-static void send_system(uint16_t data);
-static void send_consumer(uint16_t data);
-
-static host_driver_t driver = {
- keyboard_leds,
- send_keyboard,
- send_mouse,
- send_system,
- send_consumer
-};
-
-host_driver_t *iwrap_driver(void)
-{
- return &driver;
-}
-
-static uint8_t keyboard_leds(void) {
- return 0;
-}
-
-static void send_keyboard(report_keyboard_t *report)
-{
- if (!iwrap_connected() && !iwrap_check_connection()) return;
- MUX_HEADER(0x01, 0x0c);
- // HID raw mode header
- xmit(0x9f);
- xmit(0x0a); // Length
- xmit(0xa1); // keyboard report
- xmit(0x01);
- xmit(report->mods);
- xmit(0x00); // reserved byte(always 0)
- xmit(report->keys[0]);
- xmit(report->keys[1]);
- xmit(report->keys[2]);
- xmit(report->keys[3]);
- xmit(report->keys[4]);
- xmit(report->keys[5]);
- MUX_FOOTER(0x01);
-}
-
-static void send_mouse(report_mouse_t *report)
-{
-#if defined(MOUSEKEY_ENABLE) || defined(PS2_MOUSE_ENABLE)
- if (!iwrap_connected() && !iwrap_check_connection()) return;
- MUX_HEADER(0x01, 0x07);
- // HID raw mode header
- xmit(0x9f);
- xmit(0x05); // Length
- xmit(0xa1); // mouse report
- xmit(0x02);
- xmit(report->buttons);
- xmit(report->x);
- xmit(report->y);
- MUX_FOOTER(0x01);
-#endif
-}
-
-static void send_system(uint16_t data)
-{
- /* not supported */
-}
-
-static void send_consumer(uint16_t data)
-{
-#ifdef EXTRAKEY_ENABLE
- static uint16_t last_data = 0;
- uint8_t bits1 = 0;
- uint8_t bits2 = 0;
- uint8_t bits3 = 0;
-
- if (!iwrap_connected() && !iwrap_check_connection()) return;
- if (data == last_data) return;
- last_data = data;
-
- // 3.10 HID raw mode(iWRAP_HID_Application_Note.pdf)
- switch (data) {
- case AUDIO_VOL_UP:
- bits1 = 0x01;
- break;
- case AUDIO_VOL_DOWN:
- bits1 = 0x02;
- break;
- case AUDIO_MUTE:
- bits1 = 0x04;
- break;
- case TRANSPORT_PLAY_PAUSE:
- bits1 = 0x08;
- break;
- case TRANSPORT_NEXT_TRACK:
- bits1 = 0x10;
- break;
- case TRANSPORT_PREV_TRACK:
- bits1 = 0x20;
- break;
- case TRANSPORT_STOP:
- bits1 = 0x40;
- break;
- case TRANSPORT_EJECT:
- bits1 = 0x80;
- break;
- case AL_EMAIL:
- bits2 = 0x01;
- break;
- case AC_SEARCH:
- bits2 = 0x02;
- break;
- case AC_BOOKMARKS:
- bits2 = 0x04;
- break;
- case AC_HOME:
- bits2 = 0x08;
- break;
- case AC_BACK:
- bits2 = 0x10;
- break;
- case AC_FORWARD:
- bits2 = 0x20;
- break;
- case AC_STOP:
- bits2 = 0x40;
- break;
- case AC_REFRESH:
- bits2 = 0x80;
- break;
- case AL_CC_CONFIG:
- bits3 = 0x01;
- break;
- case AL_CALCULATOR:
- bits3 = 0x04;
- break;
- case AL_LOCK:
- bits3 = 0x08;
- break;
- case AL_LOCAL_BROWSER:
- bits3 = 0x10;
- break;
- case AC_MINIMIZE:
- bits3 = 0x20;
- break;
- case TRANSPORT_RECORD:
- bits3 = 0x40;
- break;
- case TRANSPORT_REWIND:
- bits3 = 0x80;
- break;
- }
-
- MUX_HEADER(0x01, 0x07);
- xmit(0x9f);
- xmit(0x05); // Length
- xmit(0xa1); // consumer report
- xmit(0x03);
- xmit(bits1);
- xmit(bits2);
- xmit(bits3);
- MUX_FOOTER(0x01);
-#endif
-}
diff --git a/iwrap/iwrap.h b/iwrap/iwrap.h
deleted file mode 100644
index ffaad9395d..0000000000
--- a/iwrap/iwrap.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-Copyright 2011 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef IWRAP_H
-#define IWRAP_H
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "host_driver.h"
-
-
-/* enable iWRAP MUX mode */
-#define MUX_MODE
-
-
-host_driver_t *iwrap_driver(void);
-
-void iwrap_init(void);
-void iwrap_send(const char *s);
-void iwrap_mux_send(const char *s);
-void iwrap_buf_send(void);
-void iwrap_buf_add(uint8_t c);
-void iwrap_buf_del(void);
-
-void iwrap_call(void);
-void iwrap_kill(void);
-void iwrap_unpair(void);
-void iwrap_sleep(void);
-void iwrap_sniff(void);
-void iwrap_subrate(void);
-bool iwrap_failed(void);
-uint8_t iwrap_connected(void);
-uint8_t iwrap_check_connection(void);
-
-#endif
diff --git a/iwrap/main.c b/iwrap/main.c
deleted file mode 100644
index a552afb67e..0000000000
--- a/iwrap/main.c
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
-Copyright 2011 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#include <stdint.h>
-#include <avr/interrupt.h>
-#include <avr/io.h>
-//#include <avr/wdt.h>
-#include "wd.h" // in order to use watchdog in interrupt mode
-#include <avr/sleep.h>
-#include <util/delay.h>
-#include <avr/power.h>
-#include "keyboard.h"
-#include "matrix.h"
-#include "host.h"
-#include "iwrap.h"
-#ifdef HOST_VUSB
-# include "vusb.h"
-# include "usbdrv.h"
-#endif
-#include "uart.h"
-#include "suart.h"
-#include "timer.h"
-#include "debug.h"
-#include "usb_keycodes.h"
-#include "command.h"
-
-
-static void sleep(uint8_t term);
-static bool console(void);
-static uint8_t console_command(uint8_t c);
-static uint8_t key2asc(uint8_t key);
-
-
-/*
-static void set_prr(void)
-{
- power_adc_disable();
- power_spi_disable();
- power_twi_disable();
-#ifndef TIMER_H
- //power_timer0_disable(); // used in timer.c
-#endif
- power_timer1_disable();
- power_timer2_disable();
-}
-*/
-
-/*
-static void pullup_pins(void)
-{
- // DDRs are set to 0(input) by default.
-#ifdef PORTA
- PORTA = 0xFF;
-#endif
- PORTB = 0xFF;
- PORTC = 0xFF;
- PORTD = 0xFF;
-#ifdef PORTE
- PORTE = 0xFF;
-#endif
-#ifdef PORTE
- PORTF = 0xFF;
-#endif
-}
-*/
-
-
-#ifdef HOST_VUSB
-static void disable_vusb(void)
-{
- // disable interrupt & disconnect to prevent host from enumerating
- USB_INTR_ENABLE &= ~(1 << USB_INTR_ENABLE_BIT);
- usbDeviceDisconnect();
-}
-
-static void enable_vusb(void)
-{
- USB_INTR_ENABLE |= (1 << USB_INTR_ENABLE_BIT);
- usbDeviceConnect();
-}
-
-static void init_vusb(void)
-{
- uint8_t i = 0;
-
- usbInit();
- disable_vusb();
- /* fake USB disconnect for > 250 ms */
- while(--i){
- _delay_ms(1);
- }
- enable_vusb();
-}
-#endif
-
-void change_driver(host_driver_t *driver)
-{
- host_clear_keyboard_report();
- host_swap_keyboard_report();
- host_clear_keyboard_report();
- host_send_keyboard_report();
- _delay_ms(1000);
- host_set_driver(driver);
-}
-
-
-static bool sleeping = false;
-static bool insomniac = false; // TODO: should be false for power saving
-static uint16_t last_timer = 0;
-
-int main(void)
-{
- MCUSR = 0;
- clock_prescale_set(clock_div_1);
- WD_SET(WD_OFF);
-
- // power saving: the result is worse than nothing... why?
- //pullup_pins();
- //set_prr();
-
- print_enable = true;
- debug_enable = false;
-
-#ifdef HOST_VUSB
- disable_vusb();
-#endif
- uart_init(115200);
- keyboard_init();
- print("\nSend BREAK for UART Console Commands.\n");
-
- // TODO: move to iWRAP/suart file
- print("suart init\n");
- // suart init
- // PC4: Tx Output IDLE(Hi)
- PORTC |= (1<<4);
- DDRC |= (1<<4);
- // PC5: Rx Input(pull-up)
- PORTC |= (1<<5);
- DDRC &= ~(1<<5);
- // suart receive interrut(PC5/PCINT13)
- PCMSK1 = 0b00100000;
- PCICR = 0b00000010;
-
- host_set_driver(iwrap_driver());
-
- print("iwrap_init()\n");
- iwrap_init();
- iwrap_call();
-
- last_timer = timer_read();
- while (true) {
-#ifdef HOST_VUSB
- if (host_get_driver() == vusb_driver())
- usbPoll();
-#endif
- keyboard_proc();
-#ifdef HOST_VUSB
- if (host_get_driver() == vusb_driver())
- vusb_transfer_keyboard();
-#endif
- if (matrix_is_modified() || console()) {
- last_timer = timer_read();
- sleeping = false;
- } else if (!sleeping && timer_elapsed(last_timer) > 4000) {
- sleeping = true;
- iwrap_check_connection();
- }
-
- if (host_get_driver() == iwrap_driver()) {
- if (sleeping && !insomniac) {
- _delay_ms(1); // wait for UART to send
- iwrap_sleep();
- sleep(WDTO_60MS);
- }
- }
- }
-}
-
-static void sleep(uint8_t term)
-{
- WD_SET(WD_IRQ, term);
-
- cli();
- set_sleep_mode(SLEEP_MODE_PWR_DOWN);
- sleep_enable();
- sleep_bod_disable();
- sei();
- sleep_cpu();
- sleep_disable();
-
- WD_SET(WD_OFF);
-}
-
-ISR(WDT_vect)
-{
- // wake up
-}
-
-static bool console(void)
-{
- // Send to Bluetoot module WT12
- static bool breaked = false;
- if (!uart_available())
- return false;
- else {
- uint8_t c;
- c = uart_getchar();
- uart_putchar(c);
- switch (c) {
- case 0x00: // BREAK signal
- if (!breaked) {
- print("break(? for help): ");
- breaked = true;
- }
- break;
- case '\r':
- uart_putchar('\n');
- iwrap_buf_send();
- break;
- case '\b':
- iwrap_buf_del();
- break;
- default:
- if (breaked) {
- print("\n");
- console_command(c);
- breaked = false;
- } else {
- iwrap_buf_add(c);
- }
- break;
- }
- return true;
- }
-}
-
-uint8_t command_extra()
-{
- return console_command(key2asc(host_get_first_key()));
-}
-
-static uint8_t console_command(uint8_t c)
-{
- switch (c) {
- case 'h':
- case '?':
- print("\nCommands for Bluetooth(WT12/iWRAP):\n");
- print("r: reset. software reset by watchdog\n");
- print("i: insomniac. prevent KB from sleeping\n");
- print("c: iwrap_call. CALL for BT connection.\n");
-#ifdef HOST_VUSB
- print("u: USB mode. switch to USB.\n");
- print("w: BT mode. switch to Bluetooth.\n");
-#endif
- print("k: kill first connection.\n");
- print("Del: unpair first pairing.\n");
- print("\n");
- return 0;
- case 'r':
- print("reset\n");
- WD_AVR_RESET();
- return 1;
- case 'i':
- insomniac = !insomniac;
- if (insomniac)
- print("insomniac\n");
- else
- print("not insomniac\n");
- return 1;
- case 'c':
- print("iwrap_call()\n");
- iwrap_call();
- return 1;
-#ifdef HOST_VUSB
- case 'u':
- print("USB mode\n");
-