More usbserial utility functions
This commit is contained in:
parent
ce6b63046f
commit
9e4f27ad12
|
@ -7,73 +7,31 @@
|
||||||
|
|
||||||
#include "funk/nrf24l01p.h"
|
#include "funk/nrf24l01p.h"
|
||||||
|
|
||||||
#include "core/usbcdc/usb.h"
|
#include "usbcdc/usb.h"
|
||||||
#include "core/usbcdc/usbcore.h"
|
#include "usbcdc/usbcore.h"
|
||||||
#include "core/usbcdc/usbhw.h"
|
#include "usbcdc/usbhw.h"
|
||||||
#include "core/usbcdc/cdcuser.h"
|
#include "usbcdc/cdcuser.h"
|
||||||
#include "core/usbcdc/cdc_buf.h"
|
#include "usbcdc/cdc_buf.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#if CFG_USBMSC
|
#if CFG_USBMSC
|
||||||
#error "MSC is defined
|
#error "MSC is defined"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !CFG_USBCDC
|
#if !CFG_USBCDC
|
||||||
#error "CDC is not defined
|
#error "CDC is not defined"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
volatile unsigned int lastTick;
|
|
||||||
int puts(const char * str)
|
|
||||||
{
|
|
||||||
// There must be at least 1ms between USB frames (of up to 64 bytes)
|
|
||||||
// This buffers all data and writes it out from the buffer one frame
|
|
||||||
// and one millisecond at a time
|
|
||||||
if (USB_Configuration)
|
|
||||||
{
|
|
||||||
while(*str)
|
|
||||||
cdcBufferWrite(*str++);
|
|
||||||
// Check if we can flush the buffer now or if we need to wait
|
|
||||||
unsigned int currentTick = systickGetTicks();
|
|
||||||
if (currentTick != lastTick)
|
|
||||||
{
|
|
||||||
uint8_t frame[64];
|
|
||||||
uint32_t bytesRead = 0;
|
|
||||||
while (cdcBufferDataPending())
|
|
||||||
{
|
|
||||||
// Read up to 64 bytes as long as possible
|
|
||||||
bytesRead = cdcBufferReadLen(frame, 64);
|
|
||||||
USB_WriteEP (CDC_DEP_IN, frame, bytesRead);
|
|
||||||
systickDelay(1);
|
|
||||||
}
|
|
||||||
lastTick = currentTick;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void f_ser(void) {
|
void f_ser(void) {
|
||||||
//lastTick = systickGetTicks(); // Used to control output/printf timing
|
usbCDCInit();
|
||||||
CDC_Init(); // Initialise VCOM
|
|
||||||
USB_Init(); // USB Initialization
|
|
||||||
lcdPrintln("preconnect");
|
|
||||||
USB_Connect(TRUE); // USB Connect
|
|
||||||
lcdPrintln("postconnect");
|
|
||||||
// Wait until USB is configured or timeout occurs
|
|
||||||
uint32_t usbTimeout = 0;
|
|
||||||
// while ( usbTimeout < CFG_USBCDC_INITTIMEOUT / 10 ) {
|
|
||||||
// if (USB_Configuration) break;
|
|
||||||
// delayms(10); // Wait 10ms
|
|
||||||
// usbTimeout++;
|
|
||||||
// }
|
|
||||||
lcdPrintln("fini");
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void f_disconnect(void) {
|
void f_disconnect(void) {
|
||||||
USB_Connect(FALSE);
|
usbCDCOff();
|
||||||
};
|
};
|
||||||
|
|
||||||
#define LEN 10
|
#define LEN 10
|
||||||
|
@ -113,4 +71,3 @@ void f_echo(){
|
||||||
void f_say(){
|
void f_say(){
|
||||||
puts("hello world\r\n");
|
puts("hello world\r\n");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ OBJS += usbcore.o
|
||||||
OBJS += usbdesc.o
|
OBJS += usbdesc.o
|
||||||
OBJS += usbhw.o
|
OBJS += usbhw.o
|
||||||
OBJS += usbuser.o
|
OBJS += usbuser.o
|
||||||
|
OBJS += util.o
|
||||||
|
|
||||||
LIBNAME=usbcdc
|
LIBNAME=usbcdc
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
#include <sysinit.h>
|
||||||
|
|
||||||
|
#include "usbcdc/usb.h"
|
||||||
|
#include "usbcdc/usbcore.h"
|
||||||
|
#include "usbcdc/cdc_buf.h"
|
||||||
|
#include "usbcdc/usbhw.h"
|
||||||
|
#include "usbcdc/cdcuser.h"
|
||||||
|
|
||||||
|
#include "basic/basic.h"
|
||||||
|
|
||||||
|
volatile unsigned int lastTick;
|
||||||
|
|
||||||
|
// There must be at least 1ms between USB frames (of up to 64 bytes)
|
||||||
|
// This buffers all data and writes it out from the buffer one frame
|
||||||
|
// and one millisecond at a time
|
||||||
|
int puts(const char * str){
|
||||||
|
if(!USB_Configuration)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
while(*str)
|
||||||
|
cdcBufferWrite(*str++);
|
||||||
|
|
||||||
|
//XXX: This assumes systick is 1ms, which it isn't for us.
|
||||||
|
// this makes usbserial unnecessary slow. Ah well....
|
||||||
|
|
||||||
|
// Check if we can flush the buffer now or if we need to wait
|
||||||
|
unsigned int currentTick = systickGetTicks();
|
||||||
|
if (currentTick != lastTick){
|
||||||
|
uint8_t frame[64];
|
||||||
|
uint32_t bytesRead = 0;
|
||||||
|
while (cdcBufferDataPending()){
|
||||||
|
// Read up to 64 bytes as long as possible
|
||||||
|
bytesRead = cdcBufferReadLen(frame, 64);
|
||||||
|
USB_WriteEP (CDC_DEP_IN, frame, bytesRead);
|
||||||
|
systickDelay(1);
|
||||||
|
}
|
||||||
|
lastTick = currentTick;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void usbCDCInit(){
|
||||||
|
lastTick = systickGetTicks(); // Used to control output/printf timing
|
||||||
|
CDC_Init(); // Initialise VCOM
|
||||||
|
USB_Init(); // USB Initialization
|
||||||
|
USB_Connect(TRUE); // USB Connect
|
||||||
|
|
||||||
|
/* You could wait until serial is connected. */
|
||||||
|
#if 0 // We don't
|
||||||
|
uint32_t usbTimeout = 0;
|
||||||
|
|
||||||
|
while ( usbTimeout < CFG_USBCDC_INITTIMEOUT / 10 ) {
|
||||||
|
if (USB_Configuration) break;
|
||||||
|
delayms(10); // Wait 10ms
|
||||||
|
usbTimeout++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
usbCDCOff(void){
|
||||||
|
USB_Connect(FALSE);
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
int puts(const char * str);
|
||||||
|
void usbCDCInit(void);
|
||||||
|
void usbCDCOff(void);
|
Loading…
Reference in New Issue