Tool/software: Code Composer Studio
Hi,
I'm using CCS v8 and simplelink_cc13x2_sdk_1_60_00_29.
I'm trying to communicate with the simple_peripheral and multi_role via an ADC Service created in Bluetooth Developer Studio with the TI plugin but I only get weird values. But I do get the same values every time. Do you have any idea what can be wrong and what I have to change to receive the right data? I've tried to send shorter values and strings with the same result.
The code used in simple_peripheral to set the values is shown below and is in the SimplePeripheral_init function:
uint32_t Sensor1 = 1234; uint32_t Sensor2 = 656; uint32_t Sensor3 = 2529; uint32_t Sensor4 = 999; uint32_t Sensor5 = 1952; // Send data over BLE AdcService_SetParameter(AS_SENSOR_1_ID, sizeof(uint32_t), &Sensor1); AdcService_SetParameter(AS_SENSOR_2_ID, sizeof(uint32_t), &Sensor2); AdcService_SetParameter(AS_SENSOR_3_ID, sizeof(uint32_t), &Sensor3); AdcService_SetParameter(AS_SENSOR_4_ID, sizeof(uint32_t), &Sensor4); AdcService_SetParameter(AS_SENSOR_5_ID, sizeof(uint32_t), &Sensor5);
where AdcService_SetParameter is:
bStatus_t AdcService_SetParameter( uint8_t param, uint16_t len, void *value ) { bStatus_t ret = SUCCESS; uint8_t *pAttrVal; uint16_t *pValLen; uint16_t valMinLen; uint16_t valMaxLen; switch ( param ) { case AS_SENSOR_1_ID: pAttrVal = as_Sensor_1Val; pValLen = &as_Sensor_1ValLen; valMinLen = AS_SENSOR_1_LEN_MIN; valMaxLen = AS_SENSOR_1_LEN; Log_info2("SetParameter : %s len: %d", (IArg)"Sensor_1", (IArg)len); break; case AS_SENSOR_2_ID: pAttrVal = as_Sensor_2Val; pValLen = &as_Sensor_2ValLen; valMinLen = AS_SENSOR_2_LEN_MIN; valMaxLen = AS_SENSOR_2_LEN; Log_info2("SetParameter : %s len: %d", (IArg)"Sensor_2", (IArg)len); break; case AS_SENSOR_3_ID: pAttrVal = as_Sensor_3Val; pValLen = &as_Sensor_3ValLen; valMinLen = AS_SENSOR_3_LEN_MIN; valMaxLen = AS_SENSOR_3_LEN; Log_info2("SetParameter : %s len: %d", (IArg)"Sensor_3", (IArg)len); break; case AS_SENSOR_4_ID: pAttrVal = as_Sensor_4Val; pValLen = &as_Sensor_4ValLen; valMinLen = AS_SENSOR_4_LEN_MIN; valMaxLen = AS_SENSOR_4_LEN; Log_info2("SetParameter : %s len: %d", (IArg)"Sensor_4", (IArg)len); break; case AS_SENSOR_5_ID: pAttrVal = as_Sensor_5Val; pValLen = &as_Sensor_5ValLen; valMinLen = AS_SENSOR_5_LEN_MIN; valMaxLen = AS_SENSOR_5_LEN; Log_info2("SetParameter : %s len: %d", (IArg)"Sensor_5", (IArg)len); break; default: Log_error1("SetParameter: Parameter #%d not valid.", (IArg)param); return INVALIDPARAMETER; } // Check bounds, update value and send notification or indication if possible. if ( len <= valMaxLen && len >= valMinLen ) { memcpy(pAttrVal, value, len); *pValLen = len; // Update length for read and get. } else { Log_error3("Length outside bounds: Len: %d MinLen: %d MaxLen: %d.", (IArg)len, (IArg)valMinLen, (IArg)valMaxLen); ret = bleInvalidRange; } return ret; }
The code in multi_role for retrieving the data is set in multi_role_doGattRead function and shown below:
uint32_t length; uint32_t Sensor1; uint32_t Sensor2; uint32_t Sensor3; uint32_t Sensor4; uint32_t Sensor5; AdcService_GetParameter(AS_SENSOR_1_ID, &length, &Sensor1); AdcService_GetParameter(AS_SENSOR_2_ID, &length, &Sensor2); AdcService_GetParameter(AS_SENSOR_3_ID, &length, &Sensor3); AdcService_GetParameter(AS_SENSOR_4_ID, &length, &Sensor4); AdcService_GetParameter(AS_SENSOR_5_ID, &length, &Sensor5);
where
bStatus_t AdcService_GetParameter( uint8_t param, uint16_t *len, void *value ) { bStatus_t ret = SUCCESS; switch ( param ) { case AS_SENSOR_1_ID: *len = MIN(*len, as_Sensor_1ValLen); memcpy(value, as_Sensor_1Val, *len); Log_info2("GetParameter : %s returning %d bytes", (IArg)"Sensor_1", (IArg)*len); break; case AS_SENSOR_2_ID: *len = MIN(*len, as_Sensor_2ValLen); memcpy(value, as_Sensor_2Val, *len); Log_info2("GetParameter : %s returning %d bytes", (IArg)"Sensor_2", (IArg)*len); break; case AS_SENSOR_3_ID: *len = MIN(*len, as_Sensor_3ValLen); memcpy(value, as_Sensor_3Val, *len); Log_info2("GetParameter : %s returning %d bytes", (IArg)"Sensor_3", (IArg)*len); break; case AS_SENSOR_4_ID: *len = MIN(*len, as_Sensor_4ValLen); memcpy(value, as_Sensor_4Val, *len); Log_info2("GetParameter : %s returning %d bytes", (IArg)"Sensor_4", (IArg)*len); break; case AS_SENSOR_5_ID: *len = MIN(*len, as_Sensor_5ValLen); memcpy(value, as_Sensor_5Val, *len); Log_info2("GetParameter : %s returning %d bytes", (IArg)"Sensor_5", (IArg)*len); break; default: Log_error1("GetParameter: Parameter #%d not valid.", (IArg)param); ret = INVALIDPARAMETER; break; } return ret; }
Thanks and regards,
Elin