Witam,
Piszę aplikację na linuxie w qt 5.11 do komunikacji z urządzeniem w c++. Napisałem już bibliotekę do obsługi urządzenia.
Do transferu danych używam cyusb_control_transfer();
Na początku przetestowałem program w wersji konsolowej i wszystko działa jak należy, dopiero przy implementacji funkcji do okna QT pojawiają się problemy.
Okno graficzne stworzyłem w kreatorze ui.
W oknie jest graphicsView i jeden button. Dodałem do niego taką funkcję:
void window::on_ButtonStart_clicked()
{
drawDataOnScreen();
}
Draw data function:
void window::drawDataOnScreen()
{
m_chart = new QChart;
m_chart->setMinimumSize(721, 301);
m_chart->setMaximumSize(721, 301);
m_chart->legend()->hide();
QLineSeries *series = new QLineSeries;
cyusb_handle *h;
h = cyusb_gethandle(0);
globalResetAllDeviceRegister(h);
switchONDevice(h);
unsigned short len = packetLengthRegister(h);
unsigned int *source = sourceFromPacket(h, len);
for(int i=0; i<1; i++)
{
series->append(0.001*i, source[i+54]);
}
delete[] source;
switchOFFDevice(h);
globalResetAllDeviceRegister(h);
closeDevices();
m_chart->addSeries(series);
m_chart->createDefaultAxes();
m_chart->setAcceptHoverEvents(true);
scene->addItem(m_chart);
}
Kiedy debuguję program dostaję taki błąd:
Signal from system: SIGSEGV
Meaning of signal: Segmentation fault
I mój program zatrzymuje się w pierwszym napotkanym transferze danych.
unsigned char *databuff = new unsigned char[2];
if(cyusb_control_transfer(h, 0x02, 0x04, 0, 0, databuff, 0, TIME_OUT)) //dokładnie tutaj, rejestry są dobrze, a nie muszę nic przesyłać bo jest to reset urządzenia
return 1;
Nie wiem co jest nie tak skoro wszystko działało w wersji konsolowej. Nie mam już pomysłów na sprawdzenie co może być nie tak.