Revision: 4366
Author: dverna
URL: http://bknr.net/trac/changeset/4366
Deadline extension
U trunk/projects/lisp-ecoop/website/templates/home.xml
U trunk/projects/lisp-ecoop/website/templates/news.xml
Modified: trunk/projects/lisp-ecoop/website/templates/home.xml
===================================================================
--- trunk/projects/lisp-ecoop/website/templates/home.xml 2009-04-07 11:47:42 UTC (rev 4365)
+++ trunk/projects/lisp-ecoop/website/templates/home.xml 2009-04-08 16:09:09 UTC (rev 4366)
@@ -33,6 +33,7 @@
<h2>Important News</h2>
<ul>
+ <li>The submission deadline has been extended to April 22nd</li>
<li>
This year, and for the first time, the workshop proceedings will be
published in the ACM Digital Library.
@@ -75,7 +76,9 @@
<h2>Important Dates</h2>
<ul>
-<li>Submission deadline: <b>April 08, 2009</b></li>
+<li>
+ Submission deadline <span style="color: red;">EXTENDED</span>:
+ <b>April 22, 2009</b></li>
<li>Notification of acceptance: <b>May 08, 2009</b></li>
<li>ECOOP early registration deadline: <b>May 20, 2009</b></li>
</ul>
Modified: trunk/projects/lisp-ecoop/website/templates/news.xml
===================================================================
--- trunk/projects/lisp-ecoop/website/templates/news.xml 2009-04-07 11:47:42 UTC (rev 4365)
+++ trunk/projects/lisp-ecoop/website/templates/news.xml 2009-04-08 16:09:09 UTC (rev 4366)
@@ -35,6 +35,14 @@
</ul>
-->
+<h3>April 8th, 2009</h3>
+<ul>
+ <li>
+ Upon request from potential contributors, the deadline for submissions has
+ been extended. You now have until April 22nd.
+ </li>
+</ul>
+
<h3>February 23, 2009</h3>
<ul>
<li>
Revision: 4365
Author: hans
URL: http://bknr.net/trac/changeset/4365
documentation
A trunk/projects/symbolics-keyboard/teensy-firmware/README.txt
U trunk/projects/symbolics-keyboard/teensy-firmware/symbolics.c
Added: trunk/projects/symbolics-keyboard/teensy-firmware/README.txt
===================================================================
--- trunk/projects/symbolics-keyboard/teensy-firmware/README.txt (rev 0)
+++ trunk/projects/symbolics-keyboard/teensy-firmware/README.txt 2009-04-07 11:47:42 UTC (rev 4365)
@@ -0,0 +1,53 @@
+Symbolics keyboard adapter, based on Teensy keyboard example.
+
+The Symbolics keyboard acts as a shift register with 128 bits. Each
+key is represented by one bit in the shift register. The hardware
+interface consists of a clear line which is used to signal the
+beginning of a read cycle, a clock line, and a data line. All signals
+are active low. The keyboard changes the data line on the rising edge
+of the clock. It should be read near the falling edge of the clock by
+the host.
+
+The keyboard needs to be interfaced to the Teensy board as
+follows. The wire colors specified are those used in the original
+modular cable supplied with the keyboard:
+
+blue 5V
+green GND
+red D4 DIN
+black D5 CLK
+white D6 CLR
+
+The keyboard implements two locking functions, caps lock and mode
+lock. Both of these are implemented as switches, not as buttons.
+Host systems do not usually expect switches on keyboards, so
+precautions must be taken to synchronize their state to the host's
+state.
+
+The "Caps Lock" key is implemented so that it works as usual, i.e. it
+is transmitted to the host as if it were a button. The host sends
+back its caps lock state through the keyboard LEDs. Thus, the
+controller firmware can synchronize the host's state with the state of
+the caps lock switch on the keyboard.
+
+The "Mode Lock" key is used to switch the keyboard between the classic
+Symbolics layout and a variant that assigns the modifier keys on the
+right side of the space bar to be cursor keys. This mode is called
+f_mode.
+
+The "Local" key is used as a modifier key to trigger functions in the
+converter firmware. The following functions are implemented:
+
+Local-B boots the AVR into the boot loader so that it can be
+reprogrammed through USB by the host.
+
+Local-V sends the Subversion revision number of this file to the host.
+
+Mapping of the symbolics key number to an USB key number is done
+through the mapping table defined in the file keymap.inc. There are
+two separate tables, one for normal mode and one for f_mode. The
+mapping table is normally autogenerated by the keymap generation
+program contained in make-keymap.lisp, but it can be manually edited
+if no Lisp evironment is available.
+
+Author: Hans Huebner (hans.huebner(a)gmail.com).
Property changes on: trunk/projects/symbolics-keyboard/teensy-firmware/README.txt
___________________________________________________________________
Name: svn:executable
+ *
Modified: trunk/projects/symbolics-keyboard/teensy-firmware/symbolics.c
===================================================================
--- trunk/projects/symbolics-keyboard/teensy-firmware/symbolics.c 2009-04-07 10:56:59 UTC (rev 4364)
+++ trunk/projects/symbolics-keyboard/teensy-firmware/symbolics.c 2009-04-07 11:47:42 UTC (rev 4365)
@@ -1,29 +1,16 @@
// -*- C++ -*- (this is really C)
-// Symbolics keyboard adapter, based on Teensy keyboard example.
+// -*- C++ -*-
-// The Symbolics keyboard acts as a shift register with 128 bits. The
-// hardware interface consists of a clear line which is used to signal
-// the beginning of a read cycle, a clock line, and a data line. All
-// signals are active low. The keyboard changes the data line on the
-// rising edge of the clock. It should be read near the falling edge
-// of the clock by the host.
+// Symbolics keyboard to USB adapter
-// The keyboard needs to be interfaced to the Teensy board as
-// follows. The wire colors specified are those used in the original
-// modular cable supplied with the keyboard:
-//
-// blue 5V
-// green GND
-// red D4 DIN
-// black D5 CLK
-// white D6 CLR
+// See the README.txt file for documentation
-// The keyboard implements two locking functions, caps lock and mode
-// lock. Both of these are implemented as switches, not as buttons,
-// so precautions must be made to synchronize their state to the
-// host's caps lock state.
+// Copyright 2009 by Hans Huebner (hans.huebner(a)gmail.com).
+// Additional copyrights apply.
+// This is the original copyright notice for this file:
+
/* Keyboard example for Teensy USB Development Board
* http://www.pjrc.com/teensy/usb_keyboard.html
* Copyright (c) 2008 PJRC.COM, LLC
@@ -87,6 +74,8 @@
void
init_keyboard_interface(void)
{
+ // Initialize I/O ports used to interface to the keyboard
+
DDRD = MASK_CLOCK | MASK_CLEAR;
PORTD = MASK_CLOCK | MASK_CLEAR | MASK_DIN;
}
@@ -94,30 +83,34 @@
void
poll_keyboard(uint8_t* state)
{
- PORTD &= ~MASK_CLEAR;
- _delay_us(10);
- PORTD |= MASK_CLEAR;
- _delay_us(100);
- for (int i = 0; i < 16; i++) {
- uint8_t buf = 0;
- for (int j = 0; j < 8; j++) {
- buf >>= 1;
- PORTD &= ~MASK_CLOCK;
- _delay_us(10);
- PORTD |= MASK_CLOCK;
- _delay_us(40);
- if (!(PIND & MASK_DIN)) {
- buf |= 0x80;
- }
+ // Read the keyboard shift register into the memory region pointed
+ // to by state.
+
+ PORTD &= ~MASK_CLEAR;
+ _delay_us(10);
+ PORTD |= MASK_CLEAR;
+ _delay_us(100);
+ for (int i = 0; i < 16; i++) {
+ uint8_t buf = 0;
+ for (int j = 0; j < 8; j++) {
+ buf >>= 1;
+ PORTD &= ~MASK_CLOCK;
+ _delay_us(10);
+ PORTD |= MASK_CLOCK;
+ _delay_us(40);
+ if (!(PIND & MASK_DIN)) {
+ buf |= 0x80;
}
- state[i] = buf;
}
+ state[i] = buf;
+ }
}
void
jump_to_loader(void)
{
// Jump to the HalfKay (or any other) boot loader
+
USBCON = 0;
asm("jmp 0x3000");
}
@@ -159,9 +152,11 @@
// Evaluate key press.
switch (keyboard_keys[0]) {
+
case KEY_B:
jump_to_loader();
break;
+
case KEY_V:
report_version();
break;
@@ -171,8 +166,8 @@
void
send_keys(uint8_t* state)
{
- // A change of state has been detected by the main loop, report all
- // currently pressed keys to the host.
+ // Report all currently pressed keys to the host. This function
+ // will be called when a change of state has been detected.
uint8_t local = 0;
uint8_t caps_lock_pressed = 0;
Revision: 4364
Author: hans
URL: http://bknr.net/trac/changeset/4364
Add WITHIN-REQUEST-P function that can be used to check whether a request is processed within the current dynamic context. Provided by Mark David, ITA
U trunk/thirdparty/hunchentoot/doc/index.xml
U trunk/thirdparty/hunchentoot/packages.lisp
U trunk/thirdparty/hunchentoot/request.lisp
U trunk/thirdparty/hunchentoot/specials.lisp
Modified: trunk/thirdparty/hunchentoot/doc/index.xml
===================================================================
--- trunk/thirdparty/hunchentoot/doc/index.xml 2009-04-07 07:22:30 UTC (rev 4363)
+++ trunk/thirdparty/hunchentoot/doc/index.xml 2009-04-07 10:56:59 UTC (rev 4364)
@@ -2854,6 +2854,15 @@
</clix:function>
<clix:special-variable name="*tmp-directory*">
+ <clix:function name='within-request-p'>
+ <clix:lambda-list>
+ </clix:lambda-list>
+ <clix:returns>generalized-boolean
+ </clix:returns>
+ <clix:description>Returns true if in the context of a request. Otherwise, <code>NIL</code>.
+ </clix:description>
+ </clix:function>
+
<clix:description>
This should be a pathname denoting a directory where temporary
files can be stored. It is used for <a href="#upload">file
Modified: trunk/thirdparty/hunchentoot/packages.lisp
===================================================================
--- trunk/thirdparty/hunchentoot/packages.lisp 2009-04-07 07:22:30 UTC (rev 4363)
+++ trunk/thirdparty/hunchentoot/packages.lisp 2009-04-07 10:56:59 UTC (rev 4364)
@@ -64,6 +64,7 @@
"*METHODS-FOR-POST-PARAMETERS*"
"*REPLY*"
"*REQUEST*"
+ "WITHIN-REQUEST-P"
"*REWRITE-FOR-SESSION-URLS*"
"*SESSION*"
"*SESSION-GC-FREQUENCY*"
Modified: trunk/thirdparty/hunchentoot/request.lisp
===================================================================
--- trunk/thirdparty/hunchentoot/request.lisp 2009-04-07 07:22:30 UTC (rev 4363)
+++ trunk/thirdparty/hunchentoot/request.lisp 2009-04-07 10:56:59 UTC (rev 4364)
@@ -217,7 +217,8 @@
(let (*tmp-files* *headers-sent*)
(unwind-protect
(with-mapped-conditions ()
- (let* ((*request* request))
+ (let* ((*request* request)
+ (*within-request-p* t))
(multiple-value-bind (body error)
(catch 'handler-done
(handler-bind ((error
@@ -255,6 +256,10 @@
(ignore-errors
(delete-file path)))))))
+(defun within-request-p ()
+ "True if we're in the context of a request, otherwise nil."
+ *within-request-p*)
+
(defun parse-multipart-form-data (request external-format)
"Parse the REQUEST body as multipart/form-data, assuming that its
content type has already been verified. Returns the form data as
Modified: trunk/thirdparty/hunchentoot/specials.lisp
===================================================================
--- trunk/thirdparty/hunchentoot/specials.lisp 2009-04-07 07:22:30 UTC (rev 4363)
+++ trunk/thirdparty/hunchentoot/specials.lisp 2009-04-07 10:56:59 UTC (rev 4364)
@@ -234,6 +234,11 @@
(defvar-unbound *request*
"The current REQUEST object while in the context of a request.")
+(defvar *within-request-p* nil
+ "True while in the context of a request (while *request* is bound),
+otherwise nil. Outside callers should use exported function
+within-request-p to test this.")
+
(defvar-unbound *reply*
"The current REPLY object while in the context of a request.")
Revision: 4363
Author: hans
URL: http://bknr.net/trac/changeset/4363
comments again
U trunk/projects/symbolics-keyboard/teensy-firmware/symbolics.c
Modified: trunk/projects/symbolics-keyboard/teensy-firmware/symbolics.c
===================================================================
--- trunk/projects/symbolics-keyboard/teensy-firmware/symbolics.c 2009-04-07 07:21:12 UTC (rev 4362)
+++ trunk/projects/symbolics-keyboard/teensy-firmware/symbolics.c 2009-04-07 07:22:30 UTC (rev 4363)
@@ -17,7 +17,7 @@
// green GND
// red D4 DIN
// black D5 CLK
-// white D6 CK]
+// white D6 CLR
// The keyboard implements two locking functions, caps lock and mode
// lock. Both of these are implemented as switches, not as buttons,
Revision: 4362
Author: hans
URL: http://bknr.net/trac/changeset/4362
comments
U trunk/projects/symbolics-keyboard/teensy-firmware/symbolics.c
Modified: trunk/projects/symbolics-keyboard/teensy-firmware/symbolics.c
===================================================================
--- trunk/projects/symbolics-keyboard/teensy-firmware/symbolics.c 2009-04-07 06:04:35 UTC (rev 4361)
+++ trunk/projects/symbolics-keyboard/teensy-firmware/symbolics.c 2009-04-07 07:21:12 UTC (rev 4362)
@@ -1,5 +1,29 @@
-/* Symbolics keyboard adapter, based on Teensy keyboard example */
+// -*- C++ -*- (this is really C)
+// Symbolics keyboard adapter, based on Teensy keyboard example.
+
+// The Symbolics keyboard acts as a shift register with 128 bits. The
+// hardware interface consists of a clear line which is used to signal
+// the beginning of a read cycle, a clock line, and a data line. All
+// signals are active low. The keyboard changes the data line on the
+// rising edge of the clock. It should be read near the falling edge
+// of the clock by the host.
+
+// The keyboard needs to be interfaced to the Teensy board as
+// follows. The wire colors specified are those used in the original
+// modular cable supplied with the keyboard:
+//
+// blue 5V
+// green GND
+// red D4 DIN
+// black D5 CLK
+// white D6 CK]
+
+// The keyboard implements two locking functions, caps lock and mode
+// lock. Both of these are implemented as switches, not as buttons,
+// so precautions must be made to synchronize their state to the
+// host's caps lock state.
+
/* Keyboard example for Teensy USB Development Board
* http://www.pjrc.com/teensy/usb_keyboard.html
* Copyright (c) 2008 PJRC.COM, LLC
@@ -103,6 +127,10 @@
void
report_version(void)
{
+ // Report Subversion revision number. We only convert the revision
+ // number and do not bother to convert other characters to key
+ // presses.
+
int i = 0;
for (;;) {
uint8_t c = pgm_read_byte(&revision[i++]);
@@ -143,13 +171,19 @@
void
send_keys(uint8_t* state)
{
+ // A change of state has been detected by the main loop, report all
+ // currently pressed keys to the host.
+
uint8_t local = 0;
uint8_t caps_lock_pressed = 0;
const uint8_t* keymap = keymap_normal;
retry:
// If we detect that we are in f-mode, we need to translate the
- // pressed keys with the f-mode translation table.
+ // pressed keys with the f-mode translation table. Detection of
+ // f-mode happens while decoding the shift register. When the
+ // f-mode key is detected as being pressed, the translation table is
+ // switched and the decoding process is restarted.
{
uint8_t key_index = 0;
uint8_t map_index = 0;
Revision: 4359
Author: hans
URL: http://bknr.net/trac/changeset/4359
Implement CAPS LOCK properly.
U trunk/projects/symbolics-keyboard/make-keymap.lisp
_U trunk/projects/symbolics-keyboard/teensy-firmware/
U trunk/projects/symbolics-keyboard/teensy-firmware/keymap.inc
U trunk/projects/symbolics-keyboard/teensy-firmware/symbolics.c
A trunk/projects/symbolics-keyboard/teensy-firmware/symbolics.hex
Change set too large, please see URL above