typedef struct{
TeslaBMS_Pack_Module modarr[MAX_MODULE_ADDR];
int listSize = 0;
}
ModuleList;
// add module to list
void modulelist_add_module(ModuleList * modList, TeslaBMS_Pack_Module module) {
if (modList->listSize < MAX_MODULE_ADDR) {
modList->modarr[modList->listSize] = module;
modList->listSize++;
}
}
void module_array_maker(ModuleList *list){
for (int i = 1; i <= bms.getNumOfModules(); i++) {
TeslaBMS_Pack_Module myModule = TeslaBMS_Pack_Module_init_zero;
BMSModule thisTestModule = bms.getModules(i);
myModule.id = i;
myModule.moduleVoltage = thisTestModule.getModuleVoltage();
myModule.moduleTemp = thisTestModule.getTemperature();
myModule.lowestCellVolt = thisTestModule.getLowestCellVolt();
myModule.highestCellVolt = thisTestModule.getHighestCellVolt();
list->modarr[i-1] = myModule;
}
}
/* Module encode callback */
bool modules_encode(pb_ostream_t *stream, const pb_field_iter_t *field, void * const *arg)
{
ModuleList *source = (ModuleList*)(*arg);
for(int i=0; i<bms.getNumOfModules();i++)
{
printf(" \n Mod %i is at %f \n",(int)source->modarr[i].id, source->modarr[i].moduleVoltage);
if (!pb_encode_tag_for_field(stream, field))
{
const char * error = PB_GET_ERROR(stream);
printf("encode_modules error: %s", error);
return false;
}
if (!(stream, TeslaBMS_Pack_Module_fields, &source->modarr[i]))
{
const char * error = PB_GET_ERROR(stream);
printf("SimpleMessage_encode_numbers error: %s", error);
return false;
}
}
return true;
}
/* Decode module callback*/
bool modules_decode(pb_istream_t *istream, const pb_field_t *field, void **arg){
ModuleList * dest = (ModuleList*)(*arg);
TeslaBMS_Pack_Module module;
if(!pb_decode(istream, TeslaBMS_Pack_Module_fields, &module)){
const char * error = PB_GET_ERROR(istream);
printf("module_decode error: %s", error);
return false;
}
modulelist_add_module(dest, module);
return true;