void PhasorThread::RemoveAuxEvent(DWORD id) { Lock _(cs); auto itr = auxEvents.begin(); while (itr != auxEvents.end()) { if (EVENT_ID(*itr) == id) { itr = auxEvents.erase(itr); //break; // remove all events with this id } else itr++; } }
// Adds an event to the specified list DWORD PhasorThread::AddEvent(event_dest_t dest, std::shared_ptr<PhasorThreadEvent>& e) { Lock _(cs); eventlist_t* eventList = NULL; if (dest == DEST_MAIN) eventList = &mainEvents; else eventList = &auxEvents; DWORD id = EVENT_ID(e); // was going to keep list sorted based on expiry time, but no // point.. will never have many events at once. plus most won't // have an expiry time eventList->push_back(e); return id; }
INT cd_gen_read(char *pevent, int offset) { float *pdata; GEN_INFO *gen_info; EQUIPMENT *pequipment; #ifdef HAVE_YBOS DWORD *pdw; #endif pequipment = *((EQUIPMENT **) pevent); gen_info = (GEN_INFO *) pequipment->cd_info; if (gen_info->format == FORMAT_FIXED) { memcpy(pevent, gen_info->demand, sizeof(float) * gen_info->num_channels); pevent += sizeof(float) * gen_info->num_channels; memcpy(pevent, gen_info->measured, sizeof(float) * gen_info->num_channels); pevent += sizeof(float) * gen_info->num_channels; return 2 * sizeof(float) * gen_info->num_channels; } else if (gen_info->format == FORMAT_MIDAS) { bk_init(pevent); /* create DMND bank */ bk_create(pevent, "DMND", TID_FLOAT, (void **)&pdata); memcpy(pdata, gen_info->demand, sizeof(float) * gen_info->num_channels); pdata += gen_info->num_channels; bk_close(pevent, pdata); /* create MSRD bank */ bk_create(pevent, "MSRD", TID_FLOAT, (void **)&pdata); memcpy(pdata, gen_info->measured, sizeof(float) * gen_info->num_channels); pdata += gen_info->num_channels; bk_close(pevent, pdata); return bk_size(pevent); } else if (gen_info->format == FORMAT_YBOS) { #ifdef HAVE_YBOS ybk_init((DWORD *) pevent); /* create EVID bank */ ybk_create((DWORD *) pevent, "EVID", I4_BKTYPE, (DWORD *) (&pdw)); *(pdw)++ = EVENT_ID(pevent); /* Event_ID + Mask */ *(pdw)++ = SERIAL_NUMBER(pevent); /* Serial number */ *(pdw)++ = TIME_STAMP(pevent); /* Time Stamp */ ybk_close((DWORD *) pevent, pdw); /* create DMND bank */ ybk_create((DWORD *) pevent, "DMND", F4_BKTYPE, (DWORD *) & pdata); memcpy(pdata, gen_info->demand, sizeof(float) * gen_info->num_channels); pdata += gen_info->num_channels; ybk_close((DWORD *) pevent, pdata); /* create MSRD bank */ ybk_create((DWORD *) pevent, "MSRD", F4_BKTYPE, (DWORD *) & pdata); memcpy(pdata, gen_info->measured, sizeof(float) * gen_info->num_channels); pdata += gen_info->num_channels; ybk_close((DWORD *) pevent, pdata); return ybk_size((DWORD *) pevent); #else assert(!"YBOS support not compiled in"); #endif } return 0; }
INT cd_multi_read(char *pevent, int offset) { float *pdata; MULTI_INFO *m_info; EQUIPMENT *pequipment; #ifdef HAVE_YBOS DWORD *pdw; #endif pequipment = *((EQUIPMENT **) pevent); m_info = (MULTI_INFO *) pequipment->cd_info; if (m_info->format == FORMAT_FIXED) { memcpy(pevent, m_info->var_input, sizeof(float) * m_info->num_channels_input); pevent += sizeof(float) * m_info->num_channels_input; memcpy(pevent, m_info->var_output, sizeof(float) * m_info->num_channels_output); pevent += sizeof(float) * m_info->num_channels_output; return sizeof(float) * (m_info->num_channels_input + m_info->num_channels_output); } else if (m_info->format == FORMAT_MIDAS) { bk_init(pevent); /* create INPT bank */ if (m_info->num_channels_input) { bk_create(pevent, "INPT", TID_FLOAT, (void **)&pdata); memcpy(pdata, m_info->var_input, sizeof(float) * m_info->num_channels_input); pdata += m_info->num_channels_input; bk_close(pevent, pdata); } /* create OUTP bank */ if (m_info->num_channels_output) { bk_create(pevent, "OUTP", TID_FLOAT, (void **)&pdata); memcpy(pdata, m_info->var_output, sizeof(float) * m_info->num_channels_output); pdata += m_info->num_channels_output; bk_close(pevent, pdata); } return bk_size(pevent); } else if (m_info->format == FORMAT_YBOS) { #ifdef HAVE_YBOS ybk_init((DWORD *) pevent); /* create EVID bank */ ybk_create((DWORD *) pevent, "EVID", I4_BKTYPE, (DWORD *) (&pdw)); *(pdw)++ = EVENT_ID(pevent); /* Event_ID + Mask */ *(pdw)++ = SERIAL_NUMBER(pevent); /* Serial number */ *(pdw)++ = TIME_STAMP(pevent); /* Time Stamp */ ybk_close((DWORD *) pevent, pdw); /* create INPT bank */ ybk_create((DWORD *) pevent, "INPT", F4_BKTYPE, (DWORD *) & pdata); memcpy(pdata, m_info->var_input, sizeof(float) * m_info->num_channels_input); pdata += m_info->num_channels_input; ybk_close((DWORD *) pevent, pdata); /* create OUTP bank */ ybk_create((DWORD *) pevent, "OUTP", F4_BKTYPE, (DWORD *) & pdata); memcpy(pdata, m_info->var_output, sizeof(float) * m_info->num_channels_output); pdata += m_info->num_channels_output; ybk_close((DWORD *) pevent, pdata); return ybk_size((DWORD *) pevent); #lese assert(!"YBOS support not compiled in"); #endif } return 0; }