aboutsummaryrefslogtreecommitdiff
path: root/example-cdc
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2013-06-04 10:20:53 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2013-06-04 10:20:53 +0900
commit7a09ac9a10ece38ec11c9d8588f198eea5c422b1 (patch)
tree262637b6745bfe0270c31301e393632be6f81241 /example-cdc
parentca47da23f1f65fe86eef3ced72cbf2d750a17ff7 (diff)
Now, it works with svc holding lock.
Diffstat (limited to 'example-cdc')
-rw-r--r--example-cdc/sample.c38
-rw-r--r--example-cdc/usb-cdc.c7
2 files changed, 33 insertions, 12 deletions
diff --git a/example-cdc/sample.c b/example-cdc/sample.c
index 3cc87dc..fbb7bac 100644
--- a/example-cdc/sample.c
+++ b/example-cdc/sample.c
@@ -1,5 +1,6 @@
#include <stdint.h>
#include <stdlib.h>
+#include <string.h>
#include <chopstx.h>
#include "sys.h" /* for set_led */
#include "usb_lld.h" /* for set_led */
@@ -9,8 +10,7 @@ static chopstx_cond_t cnd0;
static chopstx_cond_t cnd1;
chopstx_mutex_t usb_mtx;
-chopstx_cond_t cnd_usb_connection;
-chopstx_cond_t cnd_usb_buffer_ready;
+chopstx_cond_t cnd_usb;
static uint8_t u, v;
static uint8_t m; /* 0..100 */
@@ -102,12 +102,23 @@ const size_t __stacksize_blk = (size_t)&__process2_stack_size__;
const uint32_t __stackaddr_intr = (uint32_t)&__process3_stack_base__;
const size_t __stacksize_intr = (size_t)&__process3_stack_size__;
+static char hexchar (uint8_t x)
+{
+ if (x <= 0x09)
+ return '0' + x;
+ else if (x <= 0x0f)
+ return 'a' + x - 10;
+ else
+ return '?';
+}
+
int
main (int argc, const char *argv[])
{
chopstx_t thd;
chopstx_attr_t attr;
+ uint8_t count;
(void)argc;
(void)argv;
@@ -117,8 +128,7 @@ main (int argc, const char *argv[])
chopstx_cond_init (&cnd1);
chopstx_mutex_init (&usb_mtx);
- chopstx_cond_init (&cnd_usb_connection);
- chopstx_cond_init (&cnd_usb_buffer_ready);
+ chopstx_cond_init (&cnd_usb);
m = 10;
@@ -149,21 +159,33 @@ main (int argc, const char *argv[])
{
extern uint8_t connected;
+ count= 0;
+ u = 1;
/* waiting USB connection */
chopstx_mutex_lock (&usb_mtx);
if (!connected)
- chopstx_cond_wait (&cnd_usb_connection, &usb_mtx);
+ chopstx_cond_wait (&cnd_usb, &usb_mtx);
chopstx_mutex_unlock (&usb_mtx);
while (1)
{
+ char s[32];
+
u ^= 1;
chopstx_usec_wait (200*1000*6);
- usb_lld_write (ENDP1, "Hello, World with Chopstx!\r\n", 28);
+ memcpy (s, "xx: Hello, World with Chopstx!\r\n", 32);
+ s[0] = hexchar (count >> 4);
+ s[1] = hexchar (count & 0x0f);
+ count++;
+
chopstx_mutex_lock (&usb_mtx);
- chopstx_cond_wait (&cnd_usb_buffer_ready, &usb_mtx);
- if (!connected)
+ if (connected)
+ {
+ usb_lld_write (ENDP1, s, 32);
+ chopstx_cond_wait (&cnd_usb, &usb_mtx);
+ }
+ else
break;
chopstx_mutex_unlock (&usb_mtx);
}
diff --git a/example-cdc/usb-cdc.c b/example-cdc/usb-cdc.c
index 695c2f0..b44cb89 100644
--- a/example-cdc/usb-cdc.c
+++ b/example-cdc/usb-cdc.c
@@ -4,8 +4,7 @@
#include "usb_lld.h"
extern chopstx_mutex_t usb_mtx;
-extern chopstx_cond_t cnd_usb_connection;
-extern chopstx_cond_t cnd_usb_buffer_ready;
+extern chopstx_cond_t cnd_usb;
#define ENDP0_RXADDR (0x40)
#define ENDP0_TXADDR (0x80)
@@ -241,7 +240,7 @@ vcom_port_data_setup (uint8_t req, uint8_t req_no, uint16_t value)
chopstx_mutex_lock (&usb_mtx);
if (connected != connected_saved)
- chopstx_cond_signal (&cnd_usb_connection);
+ chopstx_cond_signal (&cnd_usb);
chopstx_mutex_unlock (&usb_mtx);
return USB_SUCCESS;
@@ -416,7 +415,7 @@ void
EP1_IN_Callback (void)
{
chopstx_mutex_lock (&usb_mtx);
- chopstx_cond_signal (&cnd_usb_buffer_ready);
+ chopstx_cond_signal (&cnd_usb);
chopstx_mutex_unlock (&usb_mtx);
}