Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Middlewares/ST/STM32_WPAN/ble/mesh/Src/serial_ctrl.c')
-rw-r--r--Middlewares/ST/STM32_WPAN/ble/mesh/Src/serial_ctrl.c102
1 files changed, 80 insertions, 22 deletions
diff --git a/Middlewares/ST/STM32_WPAN/ble/mesh/Src/serial_ctrl.c b/Middlewares/ST/STM32_WPAN/ble/mesh/Src/serial_ctrl.c
index 5ed1de904..4914bbc73 100644
--- a/Middlewares/ST/STM32_WPAN/ble/mesh/Src/serial_ctrl.c
+++ b/Middlewares/ST/STM32_WPAN/ble/mesh/Src/serial_ctrl.c
@@ -26,7 +26,10 @@
#include "light.h"
#include "light_lc.h"
#include "vendor.h"
-
+#include "appli_vendor.h"
+#include "generic_client.h"
+#include "light_client.h"
+#include "sensors_client.h"
/** @addtogroup BlueNRG_Mesh
* @{
*/
@@ -62,14 +65,22 @@ MOBLEUINT8 SerialCtrl_GetData(char *rcvdStringBuff, uint16_t rcvdStringSize, MOB
*/
void SerialCtrlVendorRead_Process(char *rcvdStringBuff, uint16_t rcvdStringSize)
{
- MOBLE_ADDRESS peer = 0; /*node adderess of the destination node*/
MOBLEUINT16 command = 0; /*Opcode command to be executed by the destination node*/
MOBLEUINT8 datalength = 0;
- MOBLEUINT8 elementIndex = 0; /*default element index*/
MOBLEUINT8 data [10] = {0}; /*buffer to output property variables */
MOBLE_RESULT result = MOBLE_RESULT_FAIL;
+ MODEL_MessageHeader_t msgHdr;
- sscanf(rcvdStringBuff+5, "%4hx %hx ", &peer,&command);
+ /*Initializing the parameters*/
+ msgHdr.elementIndex = 0;
+ msgHdr.peer_addr = 0;
+ msgHdr.dst_peer = 0;
+ msgHdr.ttl = 0;
+ msgHdr.rssi = 0;
+ msgHdr.rcvdAppKeyOffset = 0;
+ msgHdr.rcvdNetKeyOffset = 0;
+
+ sscanf(rcvdStringBuff+5, "%4hx %hx ", &msgHdr.peer_addr, &command);
for(int i = 0; i < 6 ; i++)
{
@@ -86,26 +97,26 @@ void SerialCtrlVendorRead_Process(char *rcvdStringBuff, uint16_t rcvdStringSize)
if(result)
{
- TRACE_I(TF_SERIAL_CTRL,"Invalid Command\r\n");
+ TRACE_I(TF_SERIAL_PRINTS,"Invalid Command\r\n");
return;
}
else
{
-
- result = BLEMesh_ReadRemoteData(peer,elementIndex,command,
- data, datalength);
+ result = BLEMesh_ReadRemoteData(&msgHdr,command, data, datalength);
if(result == MOBLE_RESULT_SUCCESS)
{
- TRACE_I(TF_SERIAL_CTRL,"Command Executed Successfully\r\n");
+ TRACE_I(TF_SERIAL_PRINTS,"Command Executed Successfully\r\n");
}
else
{
- TRACE_I(TF_SERIAL_CTRL,"Invalid Opcode Parameter\r\n");
+ TRACE_I(TF_SERIAL_PRINTS,"Invalid Opcode Parameter\r\n");
}
}
}
+
+
void SerialCtrlVendorWrite_Process(char *rcvdStringBuff, uint16_t rcvdStringSize)
{
MOBLE_ADDRESS peer = 0; /*node adderess of the destination node*/
@@ -113,7 +124,7 @@ void SerialCtrlVendorWrite_Process(char *rcvdStringBuff, uint16_t rcvdStringSize
MOBLEUINT8 elementIndex = 0; /*default element index*/
MOBLE_RESULT result = MOBLE_RESULT_FAIL;
MOBLEBOOL response = MOBLE_FALSE;
- MOBLEUINT8 data_buff[VENDOR_DATA_BYTE];
+ MOBLEUINT8 data_buff[VENDOR_DATA_BUFFER_SIZE];
MOBLEUINT16 idx=0;
MOBLEUINT8 length;
MOBLEUINT8 j = 1;
@@ -122,15 +133,42 @@ void SerialCtrlVendorWrite_Process(char *rcvdStringBuff, uint16_t rcvdStringSize
if(command == 0x000E)
{
+ /* Check parameter if data to be send continuously */
+ if (idx == 0xFF)
+ {
+ data_buff[0] = 0x01; /* data write sub command; */
+ length = sizeof(data_buff)-1;
+ for(MOBLEUINT8 i=1;i <sizeof(data_buff);i++)
+ {
+ data_buff[j] = i;
+ j++;
+ }
+ Appli_Vendor_SetBigDataPacket(data_buff, length, 0 , peer);
+ Vendor_SendDataFreq(0xFF);
+ TRACE_I(TF_SERIAL_PRINTS,"Command Executed Successfully\r\n");
+ return;
+ }
+ /* Check parameter if continuously data send operation need to stop */
+ else if (idx == 0x00)
+ {
+ BSP_LED_Off(LED_BLUE);
+ Vendor_SendDataFreq(0x00);
+ TRACE_I(TF_SERIAL_PRINTS,"Command Executed Successfully\r\n");
+ return;
+ }
+ /* Data will be sent only once */
+ else
+ {
data_buff[0] = 0x01; /* data write sub command; */
length = sizeof(data_buff)-idx;
-
+ Vendor_SendDataFreq(0x00); /* To stop sending packets periodically */
for(MOBLEUINT8 i=idx;i <sizeof(data_buff);i++)
{
data_buff[j] = i;
j++;
}
}
+ }
else
{
length = SerialCtrl_GetData(rcvdStringBuff, rcvdStringSize, SERIAL_MODEL_DATA_OFFSET, data_buff);
@@ -146,27 +184,27 @@ void SerialCtrlVendorWrite_Process(char *rcvdStringBuff, uint16_t rcvdStringSize
}
if(result)
{
- TRACE_I(TF_SERIAL_CTRL,"Invalid Command\r\n");
+ TRACE_I(TF_SERIAL_PRINTS,"Invalid Command\r\n");
return;
}
else
{
-
result = BLEMesh_SetRemoteData(peer,elementIndex,command,
data_buff, length,
response, MOBLE_TRUE);
if(result == MOBLE_RESULT_SUCCESS)
{
- TRACE_I(TF_SERIAL_CTRL,"Command Executed Successfully\r\n");
+ TRACE_I(TF_SERIAL_PRINTS,"Command Executed Successfully\r\n");
}
else
{
- TRACE_I(TF_SERIAL_CTRL,"Invalid Opcode Parameter\r\n");
+ TRACE_I(TF_SERIAL_PRINTS,"Invalid Opcode Parameter\r\n");
}
}
}
+
void SerialCtrl_Process(char *rcvdStringBuff, uint16_t rcvdStringSize)
{
MOBLE_ADDRESS peer = 0; /*node adderess of the destination node*/
@@ -180,10 +218,29 @@ void SerialCtrl_Process(char *rcvdStringBuff, uint16_t rcvdStringSize)
sscanf(rcvdStringBuff+5, "%4hx %hx ", &peer,&command);
/* Callback to store a pointer to Opcode table starting sddress and length of the table*/
+#ifdef ENABLE_GENERIC_MODEL_SERVER
GenericModelServer_GetOpcodeTableCb(&Generic_OpcodeTable,&Generic_OpcodeTableLength);
+#else /* Get Generic Client OpCode Table */
+#ifdef ENABLE_GENERIC_MODEL_CLIENT
+ GenericModelClient_GetOpcodeTableCb(&Generic_OpcodeTable,&Generic_OpcodeTableLength);
+#endif
+#endif
+#ifdef ENABLE_LIGHT_MODEL_SERVER
LightModelServer_GetOpcodeTableCb(&Light_OpcodeTable,&Light_OpcodeTableLength);
- Light_LC_ModelServer_GetOpcodeTableCb(&LightLC_OpcodeTable,&LightLC_OpcodeTableLength);
+ LightLcServer_GetOpcodeTableCb(&LightLC_OpcodeTable,&LightLC_OpcodeTableLength);
+#else /* Get Light Client OpCode Table */
+#ifdef ENABLE_LIGHT_MODEL_CLIENT
+ LightModelClient_GetOpcodeTableCb(&Light_OpcodeTable,&Light_OpcodeTableLength);
+ //Note: Light LC is included in Lighting Client Model
+#endif
+#endif
+#ifdef ENABLE_SENSOR_MODEL_SERVER
SensorModelServer_GetOpcodeTableCb(&Sensor_OpcodeTable,&Sensor_OpcodeTableLength);
+#else /* Get Sensor Client OpCode Table */
+#ifdef ENABLE_SENSOR_MODEL_CLIENT
+ SensorsModelClient_GetOpcodeTableCb(&Sensor_OpcodeTable,&Sensor_OpcodeTableLength);
+#endif
+#endif
/* Minimum parameter length required for a valid opcade in Generic opcode table */
minParamLength = SerialCtrl_GetMinParamLength(command,
@@ -215,7 +272,7 @@ void SerialCtrl_Process(char *rcvdStringBuff, uint16_t rcvdStringSize)
Sensor_OpcodeTable,
Sensor_OpcodeTableLength);
- TRACE_I(TF_SERIAL_CTRL, "Min Parameter Length after sensor model check %d\r\n",
+ TRACE_I(TF_SERIAL_PRINTS, "Min Parameter Length after sensor model check %d\r\n",
minParamLength);
}
@@ -235,16 +292,16 @@ void SerialCtrl_Process(char *rcvdStringBuff, uint16_t rcvdStringSize)
MOBLE_FALSE);
if(result == MOBLE_RESULT_SUCCESS)
{
- TRACE_I(TF_SERIAL_CTRL,"Command Executed Successfully\r\n");
+ TRACE_I(TF_SERIAL_PRINTS, "Command Executed Successfully\r\n");
}
else
{
- TRACE_I(TF_SERIAL_CTRL,"Invalid Opcode Parameter\r\n");
+ TRACE_I(TF_SERIAL_PRINTS, "Invalid Opcode Parameter\r\n");
}
}
else
{
- TRACE_I(TF_SERIAL_CTRL,"Unknown Opcode\r\n");
+ TRACE_I(TF_SERIAL_PRINTS, "Unknown Opcode\r\n");
}
}
@@ -269,6 +326,7 @@ MOBLEUINT8 SerialCtrl_GetMinParamLength(MOBLEUINT32 opcode, const MODEL_OpcodeTa
return 0xff;
}
+
/**
* @brief This function extract the function parameter from the string
* @param rcvdStringBuff: array of the string parsed from the serial terminal
@@ -323,4 +381,4 @@ MOBLEUINT8 SerialCtrl_GetData(char *rcvdStringBuff, uint16_t rcvdStringSize, MOB
/**
* @}
*/
-/******************* (C) COPYRIGHT 2018 STMicroelectronics *****END OF FILE****/
+/******************* (C) COPYRIGHT 2020 STMicroelectronics *****END OF FILE****/