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; }
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; }