Skip to content

Commit

Permalink
Work on USB code for ChibiOS v17 (#344)
Browse files Browse the repository at this point in the history
- remove WP_CheckAvailableIncomingData because USB drivers now provide "channel" interfaces with timeout
- replace stream read/write calls with channel with timeout
- delete unused chconf.h file
- remove commented file from CMake
- fixes #343

Signed-off-by: José Simões <[email protected]>
  • Loading branch information
josesimoes authored Jun 2, 2017
1 parent e09977b commit 632412c
Show file tree
Hide file tree
Showing 10 changed files with 43 additions and 789 deletions.
6 changes: 5 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
{
"cmake.generator": "NMake Makefiles",
"files.associations": {
"xlocale": "cpp"
"xlocale": "cpp",
"system_error": "cpp",
"istream": "cpp",
"xutility": "cpp",
"xmemory0": "cpp"
}
}
2 changes: 0 additions & 2 deletions CMake/Modules/FindCHIBIOS.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,6 @@ set(CHIBIOS_SRCS
chmemcore.c
chmempools.c

#chqueues.c #no longer in v17 see commit https://github.com/ChibiOS/ChibiOS/commit/1914bcbbf422a9616dd2c1d6906a8ced3548921d

# required to use malloc and other newlib stuff
syscalls.c

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ bool WP_ReceiveBytes(uint8_t* ptr, uint16_t* size)
//////////////////////////////////////////////////////////

// read from serial stream
volatile size_t read = streamRead((BaseSequentialStream *)&SDU1, ptr, *size);
volatile size_t read = chnReadTimeout(&SDU1, ptr, *size, MS2ST(100));

ptr += read;
*size -= read;
Expand Down Expand Up @@ -104,7 +104,7 @@ bool WP_TransmitMessage(WP_Message* message)
//////////////////////////////////////////////////////////

// write header to output stream
if(streamWrite((BaseSequentialStream *)&SDU1, (const uint8_t *)&message->m_header, sizeof(message->m_header)) != sizeof(message->m_header)) return false;
if(chnWriteTimeout(&SDU1, (const uint8_t *)&message->m_header, sizeof(message->m_header), MS2ST(250)) != sizeof(message->m_header)) return false;

// if there is anything on the payload send it to the output stream
if(message->m_header.m_size && message->m_payload)
Expand All @@ -114,7 +114,7 @@ bool WP_TransmitMessage(WP_Message* message)
///////////////////////////////////////////////////////////
// see description above
//////////////////////////////////////////////////////////
if(streamWrite((BaseSequentialStream *)&SDU1, message->m_payload, message->m_header.m_size ) != message->m_header.m_size) return false;
if(chnWriteTimeout(&SDU1, message->m_payload, message->m_header.m_size, MS2ST(250)) != message->m_header.m_size) return false;
}

return true;
Expand All @@ -132,7 +132,7 @@ bool WP_TransmitMessage(WP_Message* message)
//////////////////////////////////////////////////////////

// write header to output stream
if(sdWrite(&SD2, (const uint8_t *)&message->m_header, sizeof(message->m_header)) != sizeof(message->m_header)) return false;
if(chnWriteTimeout(&SD2, (const uint8_t *)&message->m_header, sizeof(message->m_header), MS2ST(250)) != sizeof(message->m_header)) return false;

// if there is anything on the payload send it to the output stream
if(message->m_header.m_size && message->m_payload)
Expand All @@ -142,7 +142,7 @@ bool WP_TransmitMessage(WP_Message* message)
///////////////////////////////////////////////////////////
// see description above
//////////////////////////////////////////////////////////
if(sdWrite(&SD2, message->m_payload, message->m_header.m_size ) != message->m_header.m_size) return false;
if(chnWriteTimeout(&SD2, message->m_payload, message->m_header.m_size, MS2ST(250)) != message->m_header.m_size) return false;
}

return true;
Expand All @@ -151,43 +151,3 @@ bool WP_TransmitMessage(WP_Message* message)
#else
#error "Wire Protocol needs a transport. Please make sure that HAL_USE_SERIAL and/or HAL_USE_SERIAL_USB are set to TRUE in 'halconf.h'"
#endif

void WP_CheckAvailableIncomingData()
{
//////////////////////////////////////////////////////
// PORTING CHANGE REQUIRED HERE //
//////////////////////////////////////////////////////
// change here the check for existing data to be read
//////////////////////////////////////////////////////

#if (HAL_USE_SERIAL_USB == TRUE)

// only makes sense to check the stream if USB state is active (meaning it's connected to an USB host)
if (SDU1.config->usbp->state == USB_ACTIVE) {

// check if there is any data waiting to be read
if(!sdGetWouldBlock(&SDU1))
{
WP_Message_Initialize(&inboundMessage);
WP_Message_PrepareReception(&inboundMessage);

WP_Message_Process(&inboundMessage);
}
}

#elif (HAL_USE_SERIAL == TRUE)

if(!sdGetWouldBlock(&SD2))
{
WP_Message_Initialize(&inboundMessage);
WP_Message_PrepareReception(&inboundMessage);

WP_Message_Process(&inboundMessage);
}

#else
#error "Wire Protocol needs a transport. Please make sure that HAL_USE_SERIAL and/or HAL_USE_SERIAL_USB are set to TRUE in 'halconf.h'"
#endif

}

Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ bool WP_ReceiveBytes(uint8_t* ptr, uint16_t* size)
//////////////////////////////////////////////////////////

// read from serial stream
volatile size_t read = streamRead((BaseSequentialStream *)&SDU1, ptr, *size);
volatile size_t read = chnReadTimeout(&SDU1, ptr, *size, MS2ST(100));

ptr += read;
*size -= read;
Expand Down Expand Up @@ -104,7 +104,7 @@ bool WP_TransmitMessage(WP_Message* message)
//////////////////////////////////////////////////////////

// write header to output stream
if(streamWrite((BaseSequentialStream *)&SDU1, (const uint8_t *)&message->m_header, sizeof(message->m_header)) != sizeof(message->m_header)) return false;
if(chnWriteTimeout(&SDU1, (const uint8_t *)&message->m_header, sizeof(message->m_header), MS2ST(250)) != sizeof(message->m_header)) return false;

// if there is anything on the payload send it to the output stream
if(message->m_header.m_size && message->m_payload)
Expand All @@ -114,7 +114,7 @@ bool WP_TransmitMessage(WP_Message* message)
///////////////////////////////////////////////////////////
// see description above
//////////////////////////////////////////////////////////
if(streamWrite((BaseSequentialStream *)&SDU1, message->m_payload, message->m_header.m_size ) != message->m_header.m_size) return false;
if(chnWriteTimeout(&SDU1, message->m_payload, message->m_header.m_size, MS2ST(250)) != message->m_header.m_size) return false;
}

return true;
Expand All @@ -132,7 +132,7 @@ bool WP_TransmitMessage(WP_Message* message)
//////////////////////////////////////////////////////////

// write header to output stream
if(sdWrite(&SD2, (const uint8_t *)&message->m_header, sizeof(message->m_header)) != sizeof(message->m_header)) return false;
if(chnWriteTimeout(&SD2, (const uint8_t *)&message->m_header, sizeof(message->m_header), MS2ST(250)) != sizeof(message->m_header)) return false;

// if there is anything on the payload send it to the output stream
if(message->m_header.m_size && message->m_payload)
Expand All @@ -142,7 +142,7 @@ bool WP_TransmitMessage(WP_Message* message)
///////////////////////////////////////////////////////////
// see description above
//////////////////////////////////////////////////////////
if(sdWrite(&SD2, message->m_payload, message->m_header.m_size ) != message->m_header.m_size) return false;
if(chnWriteTimeout(&SD2, message->m_payload, message->m_header.m_size, MS2ST(250)) != message->m_header.m_size) return false;
}

return true;
Expand All @@ -151,42 +151,3 @@ bool WP_TransmitMessage(WP_Message* message)
#else
#error "Wire Protocol needs a transport. Please make sure that HAL_USE_SERIAL and/or HAL_USE_SERIAL_USB are set to TRUE in 'halconf.h'"
#endif

void WP_CheckAvailableIncomingData()
{
//////////////////////////////////////////////////////
// PORTING CHANGE REQUIRED HERE //
//////////////////////////////////////////////////////
// change here the check for existing data to be read
//////////////////////////////////////////////////////

#if (HAL_USE_SERIAL_USB == TRUE)

// only makes sense to check the stream if USB state is active (meaning it's connected to an USB host)
if (SDU1.config->usbp->state == USB_ACTIVE) {

// check if there is any data waiting to be read
if(!sdGetWouldBlock(&SDU1))
{
WP_Message_Initialize(&inboundMessage);
WP_Message_PrepareReception(&inboundMessage);

WP_Message_Process(&inboundMessage);
}
}

#elif (HAL_USE_SERIAL == TRUE)

if(!sdGetWouldBlock(&SD2))
{
WP_Message_Initialize(&inboundMessage);
WP_Message_PrepareReception(&inboundMessage);

WP_Message_Process(&inboundMessage);
}

#else
#error "Wire Protocol needs a transport. Please make sure that HAL_USE_SERIAL and/or HAL_USE_SERIAL_USB are set to TRUE in 'halconf.h'"
#endif

}
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ bool WP_ReceiveBytes(uint8_t* ptr, uint16_t* size)
//////////////////////////////////////////////////////////

// read from serial stream
volatile size_t read = streamRead((BaseSequentialStream *)&SDU1, ptr, *size);
volatile size_t read = chnReadTimeout(&SDU1, ptr, *size, MS2ST(100));

ptr += read;
*size -= read;
Expand Down Expand Up @@ -104,7 +104,7 @@ bool WP_TransmitMessage(WP_Message* message)
//////////////////////////////////////////////////////////

// write header to output stream
if(streamWrite((BaseSequentialStream *)&SDU1, (const uint8_t *)&message->m_header, sizeof(message->m_header)) != sizeof(message->m_header)) return false;
if(chnWriteTimeout(&SDU1, (const uint8_t *)&message->m_header, sizeof(message->m_header), MS2ST(250)) != sizeof(message->m_header)) return false;

// if there is anything on the payload send it to the output stream
if(message->m_header.m_size && message->m_payload)
Expand All @@ -114,7 +114,7 @@ bool WP_TransmitMessage(WP_Message* message)
///////////////////////////////////////////////////////////
// see description above
//////////////////////////////////////////////////////////
if(streamWrite((BaseSequentialStream *)&SDU1, message->m_payload, message->m_header.m_size ) != message->m_header.m_size) return false;
if(chnWriteTimeout(&SDU1, message->m_payload, message->m_header.m_size, MS2ST(250)) != message->m_header.m_size) return false;
}

return true;
Expand All @@ -132,7 +132,7 @@ bool WP_TransmitMessage(WP_Message* message)
//////////////////////////////////////////////////////////

// write header to output stream
if(sdWrite(&SD2, (const uint8_t *)&message->m_header, sizeof(message->m_header)) != sizeof(message->m_header)) return false;
if(chnWriteTimeout(&SD2, (const uint8_t *)&message->m_header, sizeof(message->m_header), MS2ST(250)) != sizeof(message->m_header)) return false;

// if there is anything on the payload send it to the output stream
if(message->m_header.m_size && message->m_payload)
Expand All @@ -142,7 +142,7 @@ bool WP_TransmitMessage(WP_Message* message)
///////////////////////////////////////////////////////////
// see description above
//////////////////////////////////////////////////////////
if(sdWrite(&SD2, message->m_payload, message->m_header.m_size ) != message->m_header.m_size) return false;
if(chnWriteTimeout(&SD2, message->m_payload, message->m_header.m_size, MS2ST(250)) != message->m_header.m_size) return false;
}

return true;
Expand All @@ -151,43 +151,3 @@ bool WP_TransmitMessage(WP_Message* message)
#else
#error "Wire Protocol needs a transport. Please make sure that HAL_USE_SERIAL and/or HAL_USE_SERIAL_USB are set to TRUE in 'halconf.h'"
#endif

void WP_CheckAvailableIncomingData()
{
//////////////////////////////////////////////////////
// PORTING CHANGE REQUIRED HERE //
//////////////////////////////////////////////////////
// change here the check for existing data to be read
//////////////////////////////////////////////////////

#if (HAL_USE_SERIAL_USB == TRUE)

// only makes sense to check the stream if USB state is active (meaning it's connected to an USB host)
if (SDU1.config->usbp->state == USB_ACTIVE) {

// check if there is any data waiting to be read
if(!sdGetWouldBlock(&SDU1))
{
WP_Message_Initialize(&inboundMessage);
WP_Message_PrepareReception(&inboundMessage);

WP_Message_Process(&inboundMessage);
}
}

#elif (HAL_USE_SERIAL == TRUE)

if(!sdGetWouldBlock(&SD2))
{
WP_Message_Initialize(&inboundMessage);
WP_Message_PrepareReception(&inboundMessage);

WP_Message_Process(&inboundMessage);
}

#else
#error "Wire Protocol needs a transport. Please make sure that HAL_USE_SERIAL and/or HAL_USE_SERIAL_USB are set to TRUE in 'halconf.h'"
#endif

}

Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ bool WP_ReceiveBytes(uint8_t* ptr, uint16_t* size)
//////////////////////////////////////////////////////////

// read from serial stream
volatile size_t read = streamRead((BaseSequentialStream *)&SDU1, ptr, *size);
volatile size_t read = chnReadTimeout(&SDU1, ptr, *size, MS2ST(100));

ptr += read;
*size -= read;
Expand Down Expand Up @@ -104,7 +104,7 @@ bool WP_TransmitMessage(WP_Message* message)
//////////////////////////////////////////////////////////

// write header to output stream
if(streamWrite((BaseSequentialStream *)&SDU1, (const uint8_t *)&message->m_header, sizeof(message->m_header)) != sizeof(message->m_header)) return false;
if(chnWriteTimeout(&SDU1, (const uint8_t *)&message->m_header, sizeof(message->m_header), MS2ST(250)) != sizeof(message->m_header)) return false;

// if there is anything on the payload send it to the output stream
if(message->m_header.m_size && message->m_payload)
Expand All @@ -114,7 +114,7 @@ bool WP_TransmitMessage(WP_Message* message)
///////////////////////////////////////////////////////////
// see description above
//////////////////////////////////////////////////////////
if(streamWrite((BaseSequentialStream *)&SDU1, message->m_payload, message->m_header.m_size ) != message->m_header.m_size) return false;
if(chnWriteTimeout(&SDU1, message->m_payload, message->m_header.m_size, MS2ST(250)) != message->m_header.m_size) return false;
}

return true;
Expand All @@ -132,7 +132,7 @@ bool WP_TransmitMessage(WP_Message* message)
//////////////////////////////////////////////////////////

// write header to output stream
if(sdWrite(&SD2, (const uint8_t *)&message->m_header, sizeof(message->m_header)) != sizeof(message->m_header)) return false;
if(chnWriteTimeout(&SD2, (const uint8_t *)&message->m_header, sizeof(message->m_header), MS2ST(250)) != sizeof(message->m_header)) return false;

// if there is anything on the payload send it to the output stream
if(message->m_header.m_size && message->m_payload)
Expand All @@ -142,7 +142,7 @@ bool WP_TransmitMessage(WP_Message* message)
///////////////////////////////////////////////////////////
// see description above
//////////////////////////////////////////////////////////
if(sdWrite(&SD2, message->m_payload, message->m_header.m_size ) != message->m_header.m_size) return false;
if(chnWriteTimeout(&SD2, message->m_payload, message->m_header.m_size, MS2ST(250)) != message->m_header.m_size) return false;
}

return true;
Expand All @@ -151,43 +151,3 @@ bool WP_TransmitMessage(WP_Message* message)
#else
#error "Wire Protocol needs a transport. Please make sure that HAL_USE_SERIAL and/or HAL_USE_SERIAL_USB are set to TRUE in 'halconf.h'"
#endif

void WP_CheckAvailableIncomingData()
{
//////////////////////////////////////////////////////
// PORTING CHANGE REQUIRED HERE //
//////////////////////////////////////////////////////
// change here the check for existing data to be read
//////////////////////////////////////////////////////

#if (HAL_USE_SERIAL_USB == TRUE)

// only makes sense to check the stream if USB state is active (meaning it's connected to an USB host)
if (SDU1.config->usbp->state == USB_ACTIVE) {

// check if there is any data waiting to be read
if(!sdGetWouldBlock(&SDU1))
{
WP_Message_Initialize(&inboundMessage);
WP_Message_PrepareReception(&inboundMessage);

WP_Message_Process(&inboundMessage);
}
}

#elif (HAL_USE_SERIAL == TRUE)

if(!sdGetWouldBlock(&SD2))
{
WP_Message_Initialize(&inboundMessage);
WP_Message_PrepareReception(&inboundMessage);

WP_Message_Process(&inboundMessage);
}

#else
#error "Wire Protocol needs a transport. Please make sure that HAL_USE_SERIAL and/or HAL_USE_SERIAL_USB are set to TRUE in 'halconf.h'"
#endif

}

Loading

0 comments on commit 632412c

Please sign in to comment.