summaryrefslogtreecommitdiffhomepage
path: root/digital/dev2/src
diff options
context:
space:
mode:
authorNicolas Schodet2013-01-26 18:34:13 +0100
committerNicolas Schodet2013-01-26 18:34:13 +0100
commit2a06cd6240bfc0222fdac51a2c71cc87e43367d6 (patch)
tree99f29133de6ea3b03211d78eb5ab63bcd7b0ee67 /digital/dev2/src
parent3953c49f0bb0003f9b1b21bb228f25e4fa45206e (diff)
digital/dev2: set serial speed at runtime
Diffstat (limited to 'digital/dev2/src')
-rw-r--r--digital/dev2/src/common/serial.c6
-rw-r--r--digital/dev2/src/common/serial.h8
-rw-r--r--digital/dev2/src/usb_serial_isp/main.c14
3 files changed, 28 insertions, 0 deletions
diff --git a/digital/dev2/src/common/serial.c b/digital/dev2/src/common/serial.c
index f7f3fe06..3f2868fa 100644
--- a/digital/dev2/src/common/serial.c
+++ b/digital/dev2/src/common/serial.c
@@ -52,6 +52,12 @@ serial_uninit (void)
}
void
+serial_set_params (struct serial_parameters_t *params)
+{
+ uart0_set_speed (params->speed);
+}
+
+void
serial_task (void)
{
Endpoint_SelectEndpoint (SERIAL_RX_EPNUM);
diff --git a/digital/dev2/src/common/serial.h b/digital/dev2/src/common/serial.h
index 5b55e681..872adf43 100644
--- a/digital/dev2/src/common/serial.h
+++ b/digital/dev2/src/common/serial.h
@@ -25,6 +25,11 @@
*
* }}} */
+struct serial_parameters_t
+{
+ uint32_t speed;
+};
+
void
serial_init (void);
@@ -32,6 +37,9 @@ void
serial_uninit (void);
void
+serial_set_params (struct serial_parameters_t *params);
+
+void
serial_task (void);
#endif /* serial_h */
diff --git a/digital/dev2/src/usb_serial_isp/main.c b/digital/dev2/src/usb_serial_isp/main.c
index 9639fd83..aad4dbe8 100644
--- a/digital/dev2/src/usb_serial_isp/main.c
+++ b/digital/dev2/src/usb_serial_isp/main.c
@@ -135,6 +135,20 @@ EVENT_HANDLER (USB_UnhandledControlPacket)
Endpoint_ClearSetupIN ();
}
break;
+ /* Set serial parameters. */
+ case 0x70:
+ if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_VENDOR |
+ REQREC_DEVICE))
+ {
+ Endpoint_ClearSetupReceived ();
+ /* Set serial parameters. */
+ struct serial_parameters_t params;
+ Endpoint_Read_Control_Stream_LE (&params, sizeof (params));
+ serial_set_params (&params);
+ /* Send acknowledgement. */
+ Endpoint_ClearSetupIN ();
+ }
+ break;
}
}