Fix multiple serial device init issues (#43)
This commit is contained in:
parent
fddbf726d7
commit
18f043a62e
|
|
@ -84,6 +84,8 @@ int moza_update(SerialDevice* serialdevice, unsigned short rpm, unsigned short m
|
||||||
|
|
||||||
int moza_init(SerialDevice* serialdevice, const char* portdev)
|
int moza_init(SerialDevice* serialdevice, const char* portdev)
|
||||||
{
|
{
|
||||||
serialdevice->id = monocoque_serial_open(serialdevice, portdev);
|
int id = monocoque_serial_open(serialdevice, portdev);
|
||||||
return serialdevice->id;
|
if (id < 0) return id;
|
||||||
|
serialdevice->id = id;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -74,8 +74,9 @@ int moza_new_update(SerialDevice* serialdevice, SimData* simData)
|
||||||
|
|
||||||
int moza_new_init(SerialDevice* serialdevice, const char* portdev)
|
int moza_new_init(SerialDevice* serialdevice, const char* portdev)
|
||||||
{
|
{
|
||||||
serialdevice->id = monocoque_serial_open(serialdevice, portdev);
|
int id = monocoque_serial_open(serialdevice, portdev);
|
||||||
if (serialdevice->id == -1) return serialdevice->id;
|
if (id < 0) return id;
|
||||||
|
serialdevice->id = id;
|
||||||
|
|
||||||
unsigned char p1[] = MOZA_RPM_COLOR_PAYLOAD_1;
|
unsigned char p1[] = MOZA_RPM_COLOR_PAYLOAD_1;
|
||||||
unsigned char p2[] = MOZA_RPM_COLOR_PAYLOAD_2;
|
unsigned char p2[] = MOZA_RPM_COLOR_PAYLOAD_2;
|
||||||
|
|
@ -87,10 +88,11 @@ int moza_new_init(SerialDevice* serialdevice, const char* portdev)
|
||||||
p3[MOZA_COLOR_PAYLOAD_SIZE-1] = moza_checksum(p3, MOZA_COLOR_PAYLOAD_SIZE);
|
p3[MOZA_COLOR_PAYLOAD_SIZE-1] = moza_checksum(p3, MOZA_COLOR_PAYLOAD_SIZE);
|
||||||
p4[MOZA_COLOR_PAYLOAD_SIZE-1] = moza_checksum(p4, MOZA_COLOR_PAYLOAD_SIZE);
|
p4[MOZA_COLOR_PAYLOAD_SIZE-1] = moza_checksum(p4, MOZA_COLOR_PAYLOAD_SIZE);
|
||||||
|
|
||||||
monocoque_serial_write(serialdevice->id, p1, MOZA_COLOR_PAYLOAD_SIZE, MOZA_TIMEOUT);
|
unsigned char* payloads[] = {p1, p2, p3, p4};
|
||||||
monocoque_serial_write(serialdevice->id, p2, MOZA_COLOR_PAYLOAD_SIZE, MOZA_TIMEOUT);
|
for (int i = 0; i < 4; i++) {
|
||||||
monocoque_serial_write(serialdevice->id, p3, MOZA_COLOR_PAYLOAD_SIZE, MOZA_TIMEOUT);
|
int result = monocoque_serial_write(serialdevice->id, payloads[i], MOZA_COLOR_PAYLOAD_SIZE, MOZA_TIMEOUT);
|
||||||
monocoque_serial_write(serialdevice->id, p4, MOZA_COLOR_PAYLOAD_SIZE, MOZA_TIMEOUT);
|
if (result < 0) return result;
|
||||||
|
}
|
||||||
return serialdevice->id;
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,10 +27,13 @@ int check(enum sp_return result)
|
||||||
error_message = sp_last_error_message();
|
error_message = sp_last_error_message();
|
||||||
sloge("error: serial write failed: %s", error_message);
|
sloge("error: serial write failed: %s", error_message);
|
||||||
sp_free_error_message(error_message);
|
sp_free_error_message(error_message);
|
||||||
|
return result;
|
||||||
case SP_ERR_SUPP:
|
case SP_ERR_SUPP:
|
||||||
printf("Error: Not supported.\n");
|
printf("Error: Not supported.\n");
|
||||||
|
return result;
|
||||||
case SP_ERR_MEM:
|
case SP_ERR_MEM:
|
||||||
printf("Error: Couldn't allocate memory.\n");
|
printf("Error: Couldn't allocate memory.\n");
|
||||||
|
return result;
|
||||||
case SP_OK:
|
case SP_OK:
|
||||||
default:
|
default:
|
||||||
return result;
|
return result;
|
||||||
|
|
@ -114,23 +117,30 @@ int monocoque_input_wait(uint8_t serialdevicenum)
|
||||||
return sp_input_waiting(monocoque_serial_dev.port);
|
return sp_input_waiting(monocoque_serial_dev.port);
|
||||||
}
|
}
|
||||||
|
|
||||||
int monocoque_serial_write(uint8_t serialdevicenum, void* data, size_t size, int timeout)
|
// Helper function to get and validate device
|
||||||
|
static monocoque_serial_device* monocoque_get_serial_device(uint8_t serialdevicenum)
|
||||||
{
|
{
|
||||||
|
monocoque_serial_device* dev = &monocoque_serial_devices[serialdevicenum];
|
||||||
slogt("serial device id %i", serialdevicenum);
|
slogt("serial device id %i", serialdevicenum);
|
||||||
monocoque_serial_device monocoque_serial_dev = monocoque_serial_devices[serialdevicenum];
|
slogt("port name: %s, busy %i, open %i, openfail %i", dev->portname, dev->busy, dev->open, dev->openfail);
|
||||||
|
|
||||||
slogt("port name: %s, busy %i, open %i, openfail %i", monocoque_serial_dev.portname, monocoque_serial_dev.busy, monocoque_serial_dev.open, monocoque_serial_dev.busy);
|
if(dev->port == NULL)
|
||||||
|
|
||||||
if(monocoque_serial_dev.port == NULL)
|
|
||||||
{
|
{
|
||||||
sloge("port is null");
|
sloge("port is null");
|
||||||
}
|
}
|
||||||
|
|
||||||
int result = -1;
|
return dev;
|
||||||
if(monocoque_serial_dev.busy == false && monocoque_serial_dev.open == true)
|
}
|
||||||
|
|
||||||
|
int monocoque_serial_write(uint8_t serialdevicenum, void* data, size_t size, int timeout)
|
||||||
{
|
{
|
||||||
monocoque_serial_dev.busy = true;
|
monocoque_serial_device* dev = monocoque_get_serial_device(serialdevicenum);
|
||||||
result = sp_blocking_write(monocoque_serial_dev.port, data, size, timeout);
|
|
||||||
|
int result = -1;
|
||||||
|
if(dev->busy == false && dev->open == true)
|
||||||
|
{
|
||||||
|
dev->busy = true;
|
||||||
|
result = sp_blocking_write(dev->port, data, size, timeout);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -138,67 +148,51 @@ int monocoque_serial_write(uint8_t serialdevicenum, void* data, size_t size, int
|
||||||
result = -1;
|
result = -1;
|
||||||
}
|
}
|
||||||
slogt("write result is %i", result);
|
slogt("write result is %i", result);
|
||||||
monocoque_serial_dev.busy = false;
|
dev->busy = false;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
int monocoque_serial_write_block(uint8_t serialdevicenum, void* data, size_t size, int timeout)
|
int monocoque_serial_write_block(uint8_t serialdevicenum, void* data, size_t size, int timeout)
|
||||||
{
|
{
|
||||||
slogt("serial device id %i", serialdevicenum);
|
monocoque_serial_device* dev = monocoque_get_serial_device(serialdevicenum);
|
||||||
monocoque_serial_device monocoque_serial_dev = monocoque_serial_devices[serialdevicenum];
|
|
||||||
|
|
||||||
slogt("port name: %s, busy %i, open %i, openfail %i", monocoque_serial_dev.portname, monocoque_serial_dev.busy, monocoque_serial_dev.open, monocoque_serial_dev.busy);
|
|
||||||
|
|
||||||
if(monocoque_serial_dev.port == NULL)
|
|
||||||
{
|
|
||||||
sloge("port is null");
|
|
||||||
}
|
|
||||||
|
|
||||||
int result = -1;
|
int result = -1;
|
||||||
if(monocoque_serial_dev.open == true)
|
if(dev->open == true)
|
||||||
{
|
{
|
||||||
while(monocoque_serial_dev.busy == true)
|
while(dev->busy == true)
|
||||||
{
|
{
|
||||||
slogt("hopefully this doesn't happen long");
|
slogt("hopefully this doesn't happen long");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
monocoque_serial_dev.busy = true;
|
dev->busy = true;
|
||||||
result = sp_blocking_write(monocoque_serial_dev.port, data, size, timeout);
|
result = sp_blocking_write(dev->port, data, size, timeout);
|
||||||
slogi("actually performed write");
|
slogi("actually performed write");
|
||||||
}
|
}
|
||||||
|
|
||||||
monocoque_serial_dev.busy = false;
|
dev->busy = false;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
int monocoque_serial_read_block(uint8_t serialdevicenum, void* data, size_t size, int timeout)
|
int monocoque_serial_read_block(uint8_t serialdevicenum, void* data, size_t size, int timeout)
|
||||||
{
|
{
|
||||||
slogt("serial device id %i", serialdevicenum);
|
monocoque_serial_device* dev = monocoque_get_serial_device(serialdevicenum);
|
||||||
monocoque_serial_device monocoque_serial_dev = monocoque_serial_devices[serialdevicenum];
|
|
||||||
|
|
||||||
slogt("port name: %s, busy %i, open %i, openfail %i", monocoque_serial_dev.portname, monocoque_serial_dev.busy, monocoque_serial_dev.open, monocoque_serial_dev.busy);
|
|
||||||
|
|
||||||
if(monocoque_serial_dev.port == NULL)
|
|
||||||
{
|
|
||||||
sloge("port is null");
|
|
||||||
}
|
|
||||||
|
|
||||||
int result = -1;
|
int result = -1;
|
||||||
if(monocoque_serial_dev.open == true)
|
if(dev->open == true)
|
||||||
{
|
{
|
||||||
while(monocoque_serial_dev.busy == true)
|
while(dev->busy == true)
|
||||||
{
|
{
|
||||||
slogt("hopefully this doesn't happen long");
|
slogt("hopefully this doesn't happen long");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
monocoque_serial_dev.busy = true;
|
dev->busy = true;
|
||||||
result = sp_blocking_read(monocoque_serial_dev.port, data, size, timeout);
|
result = sp_blocking_read(dev->port, data, size, timeout);
|
||||||
slogi("actually performed read");
|
slogi("actually performed read");
|
||||||
}
|
}
|
||||||
|
|
||||||
monocoque_serial_dev.busy = false;
|
dev->busy = false;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -720,7 +720,7 @@ int devsetup(const char* device_type, const char* device_subtype, const char* co
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ds->dev_subtype == SIMDEVTYPE_USBHAPTIC || ds->dev_subtype == SIMDEVTYPE_USBWHEEL)
|
if (ds->dev_subtype == SIMDEVTYPE_USBHAPTIC || ds->dev_subtype == SIMDEVTYPE_USBWHEEL || ds->dev_subtype == SIMDEVTYPE_SERIALWHEEL)
|
||||||
{
|
{
|
||||||
// logic for different devices
|
// logic for different devices
|
||||||
int b = 0;
|
int b = 0;
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 1c0b788adb10aaa10c6a5bd63fdeb5811e8ab1ca
|
Subproject commit 532e89a6d9edf026335c1ac29da60aa965616241
|
||||||
Loading…
Reference in New Issue