Go to file
MakotoKurauchi feb5e4aaeb Keyboard: Helix serial improvements (#3608)
* add change_reciver2sender()/change_sender2reciver()

This is a change to improve readability.

* txled, rxled off in matrix_init()

* add serial_send_packet() / serial_recive_packet()

This is a change to reduce object size.

* add serial_low() at ISR() top

* add __attribute__((always_inline)) to some functions

* modify serial_send_packet()/serial_recive_packet()

A little, object size reduction.
A little, speedup.

* add debug code to helix/serial.c

* Adjust sampling timing of serial signal being received

* add split_scomm.c/split_scomm.h and change serial.c/serial.h

serial.c was divided into 2 layers, split_scom.c and serial.c.
The upper layer split_scomm.c is called from matrix.c.
The lower layer serial.c accesses the hardware.

* add split_scomm.c/split_scomm.h into helix/rev1

* reduce object size helix/rev2/matrix.c

* remove checksum check, add parity check

* force occur parity error for test

* parity test ok. remove test code

* change some comment & add skip code when buffer_size == 0

* serial.c: multiple types of transaction support

Add 4 bits transaction-type field at packet top.
Select Transaction Descriptor Table entry by transaction-type.

* helix serial master-slave transaction optimize

Using multi-type transaction feature of serial.c, communication contents between master slaves were optimized.

* add debug code for retry

* add comment into each config.h

* fix ISR status drop

* add a debug macro 'debug_retry_chg()'

* reduce led_test size

* remove debug code from helix/serial.c and etc.

* helix:five_rows change TAPPING_TERM value 140

* Improved compatibility with let's split of serial.c. Finish helix/serial.c improvement.

- The difference with the original let's split's serial.c
  - It's high-speed about 4 times.
  - Stable bi-directional data transfer. (Helix need master to slave transfer)
  - serial.h was divided 2 files, serial_config.h and sereial.h
  - With multiple types of transaction support, communication contents can be optimized. (NEW flexible API)

- USE OLD Simple APIs (compatible with let's split serial.c)
  - files :
    - serial_config.h -- hardware configuration (need include by config.h)
    - serial.c/serial.h -- serial communication

- USE NEW flexible APIs. (Support multi-type transaction function.)
  serial.c was divided into 2 layers, split_scom.c and serial.c.
  The upper layer split_scomm.c is called from matrix.c.
  The lower layer serial.c accesses the hardware.
  - files
    - split_scomm.c -- communication buffer is defined in here. call by matrix.c.
    - split_scomm.h -- buffer size is defined in here. include by matrix.c, split_util.c
    - serial_config.h -- hardware configuration (need include by config.h)
      To use the NEW API, specify #define SERIAL_USE_MULTI_TRANSACTION
    - serial.c/serial.h -- serial communication lower layer

- NEW APIs for serial.c / serial.h (The lower layer)
  // Soft Serial Transaction Descriptor
  typedef struct _SSTD_t  {
      uint8_t *status;
      uint8_t initiator2target_buffer_size;
      uint8_t *initiator2target_buffer;
      uint8_t target2initiator_buffer_size;
      uint8_t *target2initiator_buffer;
  } SSTD_t;

  // initiator is transaction start side
  void soft_serial_initiator_init(SSTD_t *sstd_table);
  // target is interrupt accept side
  void soft_serial_target_init(SSTD_t *sstd_table);
  int soft_serial_transaction(int sstd_index);
  int soft_serial_get_and_clean_target_status(int sstd_index);

- NEW APIs for split_scomm.c / split_scomm.h (The upper layer)
   move from old serial.c the following buffer and functions
     serial_slave_buffer[]
     serial_master_buffer[]
     void serial_master_init(void)
     void serial_slave_init(void)
     int serial_update_buffers(void)
   define SERIAL_xxxxx_BUFFER_LENGTH move from serial_config.h to split_scomm.h
2018-08-10 08:22:09 -07:00
.vscode Xton's first keymap! (#2941) 2018-05-12 08:52:11 -07:00
docs RGB Driver Documentation Update (#3601) 2018-08-09 17:41:48 -07:00
drivers DC01 keyboard addition (#3428) 2018-07-18 12:55:57 -04:00
keyboards Keyboard: Helix serial improvements (#3608) 2018-08-10 08:22:09 -07:00
layouts Keymap: Adds zen layout for 333fred (#3563) 2018-08-05 08:42:16 -07:00
lib gcc 8.10 compilation fix (#2914) 2018-05-09 23:39:46 -04:00
quantum Update ps2avrgb readme (#3599) 2018-08-09 17:45:43 -07:00
tests add tests for action_layer.c and reset layer state after tests 2017-12-15 13:23:30 -05:00
tmk_core Loop based vusb_transfer_keyboard 2018-07-22 11:49:36 -04:00
users Keymap: Adds zen layout for 333fred (#3563) 2018-08-05 08:42:16 -07:00
util Update ISP flashing guide with pre-compiled binary (#3217) 2018-08-02 23:07:33 -04:00
.clang_complete Vim Layout for Ergodox-EZ (mac only) (#2112) 2017-12-11 21:06:05 -05:00
.editorconfig Fix .editorconfig to not mess with line endings 2018-02-03 15:20:44 -05:00
.gitattributes Set eep files to binary mode 2016-08-27 18:37:28 +03:00
.gitignore Ajp10304 (#2719) 2018-04-15 09:48:19 -07:00
.gitmodules Update .gitmodules 2017-11-16 15:09:45 -05:00
.travis.yml Generate API docs from source code comments (#2491) 2018-03-22 02:50:38 -04:00
CODE_OF_CONDUCT.md Update CODE_OF_CONDUCT.md 2018-08-01 15:20:02 -04:00
Dockerfile Reverting CMD Changes 2017-08-19 08:17:58 -04:00
Doxyfile Generate API docs from source code comments (#2491) 2018-03-22 02:50:38 -04:00
LICENSE add an explicit lisence file for github to pickup 2017-11-13 20:50:54 -05:00
Makefile Correct parsing of rules.mk for keyboard revisions 2018-07-17 00:10:42 -04:00
Vagrantfile removed unused boxes (qmk won't compile with them anyway), updated welcome message 2018-06-28 22:09:38 -04:00
autocomplete.sh Make arguments redo, subproject elimination (#1784) 2017-10-14 11:32:19 -10:00
book.json adds redirects for docs 2017-08-19 08:31:54 -04:00
bootloader.mk Add Teensy ++ 2.0 bootloader support 2018-05-08 20:08:17 -04:00
build_full_test.mk Add SRC and OPT_DEFS when building tests 2017-07-20 10:17:31 -04:00
build_keyboard.mk Import userspace config.h according to USER_NAME (#2983) 2018-05-22 12:47:28 -07:00
build_layout.mk Creates a layouts/ folder for keymaps shared between keyboards (#1609) 2017-08-23 22:29:07 -04:00
build_test.mk Split common.mk into common.mk and common_features.mk 2017-06-18 21:22:22 +03:00
common.mk Lets split eh (#3120) 2018-07-16 22:25:02 -04:00
common_features.mk Lets split eh (#3120) 2018-07-16 22:25:02 -04:00
doxygen-todo Generate API docs from source code comments (#2491) 2018-03-22 02:50:38 -04:00
license_GPLv2.md Clarify the quantum license (#1042) 2017-03-28 15:20:36 -07:00
license_GPLv3.md Clarify the quantum license (#1042) 2017-03-28 15:20:36 -07:00
license_Modified_BSD.md Clarify the quantum license (#1042) 2017-03-28 15:20:36 -07:00
message.mk Update message.mk (#3602) 2018-08-09 17:41:07 -07:00
readme.md add discord link 2018-05-03 15:56:10 -04:00
secrets.tar.enc update building for .hex, secrets moving 2017-08-21 21:57:46 -04:00
shell.nix allow building with nix on darwin 2018-07-15 13:58:50 -04:00
testlist.mk Add basic infrastrucure for building full tests 2017-06-18 21:08:23 +03:00

readme.md

Quantum Mechanical Keyboard Firmware

Current Version Build Status Discord Docs Status GitHub contributors GitHub forks

This is a keyboard firmware based on the tmk_keyboard firmware with some useful features for Atmel AVR and ARM controllers, and more specifically, the OLKB product line, the ErgoDox EZ keyboard, and the Clueboard product line.

Documentation

The docs are hosted on Gitbook and GitHub (they are synced). You can request changes by making a fork and pull request, or by clicking the "suggest an edit" link on any page of the docs.

Supported Keyboards

The project also includes community support for lots of other keyboards.

Maintainers

QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, Hasu. The OLKB product firmwares are maintained by Jack Humbert, the Ergodox EZ by Erez Zukerman, and the Clueboard by Zach White.

Official website

http://qmk.fm is the official website of QMK, where you can find links to this page, the documentation, and the keyboards supported by QMK.