Пример #1
0
bool BbdBridge_SendSensorData(struct BbdBridge* p,
                unsigned char* pSensorData, unsigned short size)
{
    if (BbdEngine_Lock(__LINE__)) {
	    struct sStreamEncoder* str = &p->m_otStreamEncoder;
	    StreamCodec_Reset      (str);
	    StreamEncoder_PutU16   (str, size);
	    StreamEncoder_PutBuffer(str, pSensorData, size);

	    if (StreamCodec_Fail(str))
	    {
    		BbdEngine_Unlock();
		return false;
	    }
	    if (!BbdBridge_AddRpc(p, RPC_DEFINITION(IRpcSensorRequest, Data)))
	    {
    		BbdEngine_Unlock();
		return false;
	    }
	    TransportLayer_SendPacket(&p->m_otTL,
			    p->m_aucTransactionPayload,
			    p->m_uiTransactionPayloadSize);
	    p->m_uiTransactionPayloadSize = 0;
	    bbd_update_stat(STAT_TX_SSP, size);
	    bbd_update_stat(STAT_TX_RPC, size);

	    	BbdEngine_Unlock();
	    return true;
    }
    return false;
}
Пример #2
0
bool SensorRpc_ProcessRpc(void* p, unsigned short usRpcId,
                          struct sStreamDecoder *str)
{
    if (usRpcId == RPC_DEFINITION(IRpcSensorResponse, Data))
    {
        unsigned short size       = StreamDecoder_GetU16(str);
        unsigned char* sensorData = StreamDecoder_GetBuffer(str, size);
        ssize_t result = bbd_sensor_write_internal(sensorData , size);
        return ((short) result == size);
    }
    return false;
}