1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-03-15 07:29:15 +01:00

Merge remote-tracking branch 'raid/Brian-PipXtreme-V2' into Brian-PipXtreme-V2

This commit is contained in:
Brian Webb 2012-04-22 08:45:33 -07:00
commit a7cec7c823
3 changed files with 34 additions and 15 deletions

View File

@ -285,7 +285,7 @@ static void com2RadioBridgeTask(void * parameters)
// Pass the new data through UAVTalk
for (uint8_t i = 0; i < cur_rx_bytes; i++)
UAVTalkProcessInputStream(data->inUAVTalkCon, *(data->com2radio_buf + i + rx_bytes));
UAVTalkProcessInputStreamQuiet(data->inUAVTalkCon, *(data->com2radio_buf + i + rx_bytes));
// Do we have an data to send?
rx_bytes += cur_rx_bytes;
@ -437,7 +437,7 @@ static void receiveData(uint8_t *buf, uint8_t len)
uint8_t sent_bytes = 0;
for (uint8_t i = 0; i < len; ++i)
{
UAVTalkRxState state = UAVTalkProcessInputStream(data->outUAVTalkCon, buf[i]);
UAVTalkRxState state = UAVTalkProcessInputStreamQuiet(data->outUAVTalkCon, buf[i]);
/* if(state == UAVTALK_STATE_ERROR) */
/* DEBUG_PRINTF(2, "OUT Error\n\r"); */
if((state == UAVTALK_STATE_COMPLETE) || (state == UAVTALK_STATE_SYNC))

View File

@ -54,6 +54,7 @@ UAVTalkOutputStream UAVTalkGetOutputStream(UAVTalkConnection connection);
int32_t UAVTalkSendObject(UAVTalkConnection connection, UAVObjHandle obj, uint16_t instId, uint8_t acked, int32_t timeoutMs);
int32_t UAVTalkSendObjectRequest(UAVTalkConnection connection, UAVObjHandle obj, uint16_t instId, int32_t timeoutMs);
UAVTalkRxState UAVTalkProcessInputStream(UAVTalkConnection connection, uint8_t rxbyte);
UAVTalkRxState UAVTalkProcessInputStreamQuiet(UAVTalkConnection connection, uint8_t rxbyte);
void UAVTalkGetStats(UAVTalkConnection connection, UAVTalkStats *stats);
void UAVTalkResetStats(UAVTalkConnection connection);

View File

@ -254,7 +254,7 @@ static int32_t objectTransaction(UAVTalkConnectionData *connection, UAVObjHandle
* \param[in] rxbyte Received byte
* \return UAVTalkRxState
*/
UAVTalkRxState UAVTalkProcessInputStream(UAVTalkConnection connectionHandle, uint8_t rxbyte)
UAVTalkRxState UAVTalkProcessInputStreamQuiet(UAVTalkConnection connectionHandle, uint8_t rxbyte)
{
UAVTalkConnectionData *connection;
CHECKCONHANDLE(connectionHandle,connection,return -1);
@ -449,15 +449,9 @@ UAVTalkRxState UAVTalkProcessInputStream(UAVTalkConnection connectionHandle, uin
iproc->state = UAVTALK_STATE_ERROR;
break;
}
if (iproc->obj)
{
xSemaphoreTakeRecursive(connection->lock, portMAX_DELAY);
receiveObject(connection, iproc->type, iproc->objId, iproc->instId, connection->rxBuffer, iproc->length);
connection->stats.rxObjectBytes += iproc->length;
connection->stats.rxObjects++;
xSemaphoreGiveRecursive(connection->lock);
}
connection->stats.rxObjectBytes += iproc->length;
connection->stats.rxObjects++;
iproc->state = UAVTALK_STATE_COMPLETE;
break;
@ -470,6 +464,30 @@ UAVTalkRxState UAVTalkProcessInputStream(UAVTalkConnection connectionHandle, uin
// Done
return iproc->state;
}
/**
* Process an byte from the telemetry stream.
* \param[in] connection UAVTalkConnection to be used
* \param[in] rxbyte Received byte
* \return UAVTalkRxState
*/
UAVTalkRxState UAVTalkProcessInputStream(UAVTalkConnection connectionHandle, uint8_t rxbyte)
{
UAVTalkRxState state = UAVTalkProcessInputStreamQuiet(connectionHandle, rxbyte);
if (state == UAVTALK_STATE_COMPLETE)
{
UAVTalkConnectionData *connection;
CHECKCONHANDLE(connectionHandle,connection,return -1);
UAVTalkInputProcessor *iproc = &connection->iproc;
xSemaphoreTakeRecursive(connection->lock, portMAX_DELAY);
receiveObject(connection, iproc->type, iproc->objId, iproc->instId, connection->rxBuffer, iproc->length);
xSemaphoreGiveRecursive(connection->lock);
}
return state;
}
/**
* Receive an object. This function process objects received through the telemetry stream.
@ -495,7 +513,7 @@ static int32_t receiveObject(UAVTalkConnectionData *connection, uint8_t type, ui
switch (type) {
case UAVTALK_TYPE_OBJ:
// All instances, not allowed for OBJ messages
if (instId != UAVOBJ_ALL_INSTANCES)
if (obj && (instId != UAVOBJ_ALL_INSTANCES))
{
// Unpack object, if the instance does not exist it will be created!
UAVObjUnpack(obj, instId, data);
@ -509,7 +527,7 @@ static int32_t receiveObject(UAVTalkConnectionData *connection, uint8_t type, ui
break;
case UAVTALK_TYPE_OBJ_ACK:
// All instances, not allowed for OBJ_ACK messages
if (instId != UAVOBJ_ALL_INSTANCES)
if (obj && (instId != UAVOBJ_ALL_INSTANCES))
{
// Unpack object, if the instance does not exist it will be created!
if ( UAVObjUnpack(obj, instId, data) == 0 )
@ -539,7 +557,7 @@ static int32_t receiveObject(UAVTalkConnectionData *connection, uint8_t type, ui
break;
case UAVTALK_TYPE_ACK:
// All instances, not allowed for ACK messages
if (instId != UAVOBJ_ALL_INSTANCES)
if (obj && (instId != UAVOBJ_ALL_INSTANCES))
{
// Check if an ack is pending
updateAck(connection, obj, instId);