Skip to content

Commit

Permalink
Fixed Windows build! Also tidied output progress notification.
Browse files Browse the repository at this point in the history
  • Loading branch information
thelastpsion committed Mar 6, 2019
1 parent cb8e8c3 commit 62e11f0
Showing 1 changed file with 56 additions and 26 deletions.
82 changes: 56 additions & 26 deletions src/sibodump.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

#ifdef _WIN32
#include <windows.h>
#include <tchar.h>
const char *slash = "\\";

#define B9600 CBR_9600
Expand Down Expand Up @@ -100,6 +101,15 @@ bool fsitemexists(const char *filename) {
//
#ifdef _WIN32

void PrintCommState(DCB dcb) {
// Print some of the DCB structure values
_tprintf( TEXT("BaudRate = %ld, ByteSize = %d, Parity = %d, StopBits = %d\n"),
dcb.BaudRate,
dcb.ByteSize,
dcb.Parity,
dcb.StopBits );
}

int portopen(SerialDevice *sd) {
sd->portHandle = CreateFile(sd->device, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (sd->portHandle == INVALID_HANDLE_VALUE) {
Expand All @@ -113,42 +123,62 @@ int portopen(SerialDevice *sd) {
}

int portcfg(SerialDevice *sd, int speed) {
BOOL Status;
DCB dcbSerialParams = { 0 };
BOOL Success;
DCB dcb;
COMMTIMEOUTS timeouts = { 0 };

dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
Status = GetCommState(sd->portHandle, &dcbSerialParams);
dcbSerialParams.BaudRate = CBR_57600; // TODO: Test alternative methods
dcbSerialParams.ByteSize = 8;
dcbSerialParams.StopBits = ONESTOPBIT;
dcbSerialParams.Parity = NOPARITY;
dcbSerialParams.fRtsControl = RTS_CONTROL_DISABLE;
dcbSerialParams.fOutxCtsFlow = FALSE;
dcbSerialParams.fOutX = FALSE;
dcbSerialParams.fInX = FALSE;
dcb.DCBlength = sizeof(dcb);
Success = GetCommState(sd->portHandle, &dcb);
if (!Success) {
printf("GetCommState failed with error %ld.\n", GetLastError());
return 2;
}
// PrintCommState(dcb);

dcb.BaudRate = speed; // TODO: Test alternative methods
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;

timeouts.ReadIntervalTimeout = 500; // in milliseconds
timeouts.ReadTotalTimeoutConstant = 500; // in milliseconds
timeouts.ReadTotalTimeoutMultiplier = 100; // in milliseconds
timeouts.WriteTotalTimeoutConstant = 500; // in milliseconds
timeouts.WriteTotalTimeoutMultiplier = 100; // in milliseconds

Status = SetCommState(sd->portHandle, &dcbSerialParams);
Status = SetCommTimeouts(sd->portHandle, &timeouts);
timeouts.ReadIntervalTimeout = 50; // in milliseconds
timeouts.ReadTotalTimeoutConstant = 50; // in milliseconds
timeouts.ReadTotalTimeoutMultiplier = 10; // in milliseconds
timeouts.WriteTotalTimeoutConstant = 50; // in milliseconds
timeouts.WriteTotalTimeoutMultiplier = 10; // in milliseconds

// PrintCommState(dcb);

Success = SetCommState(sd->portHandle, &dcb);
if (!Success) {
printf("SetCommState failed with error %ld.\n", GetLastError());
return 1;
}
Success = GetCommState(sd->portHandle, &dcb);
if (!Success) {
printf("Second GetCommState failed with error %ld.\n", GetLastError());
return 3;
}
// PrintCommState(dcb);


Success = SetCommTimeouts(sd->portHandle, &timeouts);
return 0;
}

int portsend(SerialDevice *sd, char buffer) {
DWORD count;
printf("Trying to send '%s'...\n", &buffer);
// printf("Trying to send '%s' (%x)...\n", &buffer, buffer);
WriteFile(sd->portHandle, &buffer, 1, &count, NULL);
return (int) count;
}

int portread(SerialDevice *sd, unsigned char *buffer) {
DWORD count;
ReadFile(sd->portHandle, &buffer, 1, &count, NULL);
ReadFile(sd->portHandle, buffer, 1, &count, NULL);
return (int) count;
}

Expand Down Expand Up @@ -203,8 +233,8 @@ int portcfg(SerialDevice *sd, int speed) {
return 0;
}

int portsend(SerialDevice *sd, char cmd) {
return write(sd->fd, &cmd, 1);
int portsend(SerialDevice *sd, char buffer) {
return write(sd->fd, &buffer, 1);
}

int portread(SerialDevice *sd, unsigned char *buffer) {
Expand Down Expand Up @@ -318,7 +348,7 @@ void dump(SerialDevice *sd, const char *path) {
void getblock(SerialDevice *sd, unsigned int blocknum, unsigned char *block) {
unsigned int i;

printf("Fetch block %d/%d\r", blocknum, ssdinfo.blocks);
printf("Fetch block %d (0 to %d, total %d)\r", blocknum, ssdinfo.blocks - 1, ssdinfo.blocks);
fflush(stdout);
portsend(sd, 'f');
for (i = 0; i <= 255; i++) {
Expand Down Expand Up @@ -364,7 +394,7 @@ int main (int argc, const char **argv) {
if (wlen != 1) {
printf("Error from read: %d, %d\n", wlen, errno);
}
printf("%x\n", buffer);
// printf("%x\n", buffer);
GetSSDInfo(buffer);
printinfo();

Expand Down

0 comments on commit 62e11f0

Please sign in to comment.