mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-03-06 21:00:31 +01:00
adjustments
This commit is contained in:
parent
ec123fffde
commit
8d8a6c338f
1 changed files with 107 additions and 87 deletions
194
src/H8300.cpp
194
src/H8300.cpp
|
@ -20,6 +20,10 @@ H8300::H8300(){
|
||||||
}
|
}
|
||||||
|
|
||||||
H8300::~H8300(){
|
H8300::~H8300(){
|
||||||
|
|
||||||
|
|
||||||
|
close(fd);
|
||||||
|
|
||||||
printf("H8/300 has been killed");
|
printf("H8/300 has been killed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,6 +31,68 @@ void H8300::speak(){
|
||||||
printf("H8 CHIP IS SPEAKING");
|
printf("H8 CHIP IS SPEAKING");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int H8300::debugSerialPort(){
|
||||||
|
int option = 0;
|
||||||
|
while(option != 9){
|
||||||
|
printf("\n\nWelcome to the mini H8/300 Debugger. Please select an option.\n");
|
||||||
|
printf("1. Read\n");
|
||||||
|
printf("2. Write\n");
|
||||||
|
printf("3. FD status\n");
|
||||||
|
printf("4. Configure Serial Port\n");
|
||||||
|
printf("5. Close serial port\n");
|
||||||
|
printf("8. Exit without closing port\n");
|
||||||
|
printf("9. Exit and close serial port\n");
|
||||||
|
scanf("%d", &option);
|
||||||
|
if (option ==1){
|
||||||
|
printf("You have 5 seconds to send me some data!!!\n");
|
||||||
|
sleep(5);
|
||||||
|
|
||||||
|
memset(buf, 0, sizeof(buf));
|
||||||
|
printf("reading");
|
||||||
|
|
||||||
|
int len;
|
||||||
|
len = read(fd, buf, sizeof(buf));
|
||||||
|
|
||||||
|
if (len == -1){
|
||||||
|
perror("Failed to read port");
|
||||||
|
}
|
||||||
|
printf("Rxed %d bytes\n", len);
|
||||||
|
|
||||||
|
for (int i = 0; i < len; i++){
|
||||||
|
printf("0x%02x ", (unsigned char)buf[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (option == 2){
|
||||||
|
printf("writing not implemented\n");
|
||||||
|
}
|
||||||
|
else if (option == 3){
|
||||||
|
|
||||||
|
printf("FD status: %d\n", fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (option == 4){
|
||||||
|
configureSerialPort();
|
||||||
|
}
|
||||||
|
else if (option == 5){
|
||||||
|
close(fd);
|
||||||
|
printf("hopefully closed fd\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (option == 8){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (option == 9){
|
||||||
|
close(fd);
|
||||||
|
printf("Exiting.\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//This should be called dynamically??
|
//This should be called dynamically??
|
||||||
int H8300::configureSerialPort(){
|
int H8300::configureSerialPort(){
|
||||||
|
@ -40,6 +106,7 @@ int H8300::configureSerialPort(){
|
||||||
fd = open(portname, O_RDWR | O_NOCTTY | O_NDELAY);
|
fd = open(portname, O_RDWR | O_NOCTTY | O_NDELAY);
|
||||||
if (fd == -1){
|
if (fd == -1){
|
||||||
printf("H8/300 failed to open the serial port\n");
|
printf("H8/300 failed to open the serial port\n");
|
||||||
|
perror("Err:");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,18 +147,14 @@ int H8300::configureSerialPort(){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Working
|
||||||
|
|
||||||
int H8300::readSerialPort(){
|
int H8300::readSerialPort(){
|
||||||
|
|
||||||
//needs to be done this way so we dont have spliced packets. 4ms of no comms indicates eof. Try to ignore and just wait till there are no packets
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* WORKING BETTER*/
|
|
||||||
char tempBuf[0xB8];
|
char tempBuf[0xB8];
|
||||||
int len = 1; //read(fd, tempBuf, sizeof(tempBuf));
|
int len = 1; //read(fd, tempBuf, sizeof(tempBuf));
|
||||||
u8 pointer = 0;
|
u8 pointer = 0;
|
||||||
while (len > 0){
|
while (len > 0){
|
||||||
|
|
||||||
usleep(4000);
|
usleep(4000);
|
||||||
len = read(fd, tempBuf, sizeof(tempBuf));
|
len = read(fd, tempBuf, sizeof(tempBuf));
|
||||||
|
|
||||||
|
@ -104,6 +167,9 @@ int H8300::readSerialPort(){
|
||||||
}
|
}
|
||||||
pointer = pointer + len;
|
pointer = pointer + len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
tcflush(fd, TCIFLUSH);
|
||||||
recvLen = pointer;
|
recvLen = pointer;
|
||||||
|
|
||||||
if (recvLen == 0) return 0;
|
if (recvLen == 0) return 0;
|
||||||
|
@ -118,9 +184,12 @@ int H8300::readSerialPort(){
|
||||||
|
|
||||||
|
|
||||||
return recvLen;
|
return recvLen;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
printf("trying to recieve\n");
|
int H8300::readSerialPort(){
|
||||||
|
|
||||||
|
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
gettimeofday(&tv, NULL);
|
gettimeofday(&tv, NULL);
|
||||||
long lastRxTime = tv.tv_usec;
|
long lastRxTime = tv.tv_usec;
|
||||||
|
@ -131,17 +200,32 @@ int H8300::readSerialPort(){
|
||||||
u8 pointer = 0;
|
u8 pointer = 0;
|
||||||
|
|
||||||
if (len > 0){
|
if (len > 0){
|
||||||
printf("we are rxing a packer");
|
printf("\nConstructing a packet: %d + ", len);
|
||||||
|
|
||||||
|
lastRxTime = tv.tv_usec;
|
||||||
|
for(int i = 0; i < len; i++){
|
||||||
|
buf[pointer + i] = tempBuf[i];
|
||||||
|
}
|
||||||
|
pointer = pointer + len;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//We are now recieving a packet
|
//We are now recieving a packet
|
||||||
long cond = tv.tv_usec - lastRxTime;
|
long cond = tv.tv_usec - lastRxTime;
|
||||||
while(cond < 3500){
|
while(cond < 4000){
|
||||||
|
//printf("last checkd cond: %ld\n", cond);
|
||||||
cond = tv.tv_usec - lastRxTime;
|
cond = tv.tv_usec - lastRxTime;
|
||||||
gettimeofday(&tv, NULL);
|
gettimeofday(&tv, NULL);
|
||||||
|
|
||||||
len = read(fd, tempBuf, sizeof(tempBuf));
|
len = read(fd, tempBuf, sizeof(tempBuf));
|
||||||
|
|
||||||
if (len < 0) continue;
|
|
||||||
|
|
||||||
|
|
||||||
|
if (len < 0){ continue;}
|
||||||
|
|
||||||
else{
|
else{
|
||||||
|
printf("%d + ", len);
|
||||||
lastRxTime = tv.tv_usec;
|
lastRxTime = tv.tv_usec;
|
||||||
for(int i = 0; i < len; i++){
|
for(int i = 0; i < len; i++){
|
||||||
buf[pointer + i] = tempBuf[i];
|
buf[pointer + i] = tempBuf[i];
|
||||||
|
@ -150,35 +234,31 @@ int H8300::readSerialPort(){
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// printf("STOPPED\n");
|
||||||
|
// getchar();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
recvLen = pointer;
|
recvLen = pointer;
|
||||||
|
|
||||||
if (recvLen == 0) return 0;
|
if (recvLen == 0) return 0;
|
||||||
|
|
||||||
|
|
||||||
printf("\nrecieved a packet of len: %d\n", recvLen);
|
printf("\nrecieved a packet of len: %d\n", recvLen);
|
||||||
|
|
||||||
for (int i = 0; i < recvLen; i++){
|
// for (int i = 0; i < recvLen; i++){
|
||||||
printf("0x%02x ", (u8)buf[i] ^ 0xaa);
|
// printf("0x%02x ", (u8)buf[i] ^ 0xaa);
|
||||||
}
|
// }
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
|
|
||||||
return recvLen;
|
return recvLen;
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
int H8300::sendSerialPort(){
|
int H8300::sendSerialPort(){
|
||||||
|
|
||||||
|
|
||||||
tcflush(fd, TCIFLUSH);
|
|
||||||
|
|
||||||
|
|
||||||
//printf("Send packet requested\n");
|
// printf("\n Sending %d Bytes: %d\n", sendLen);
|
||||||
printf("\n Sending %d Bytes: %d", sendLen);
|
|
||||||
/*
|
/*
|
||||||
for (int i = 0; i < sendLen; i++){
|
for (int i = 0; i < sendLen; i++){
|
||||||
|
|
||||||
|
@ -198,71 +278,8 @@ int H8300::sendSerialPort(){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int H8300::debugSerialPort(){
|
|
||||||
|
|
||||||
|
|
||||||
int option = 0;
|
|
||||||
while(option != 9){
|
|
||||||
|
|
||||||
printf("\n\nWelcome to the mini H8/300 Debugger. Please select an option.\n");
|
|
||||||
printf("1. Read\n");
|
|
||||||
printf("2. Write\n");
|
|
||||||
printf("3. FD status\n");
|
|
||||||
printf("4. Configure Serial Port\n");
|
|
||||||
printf("5. Close serial port\n");
|
|
||||||
printf("8. Exit without closing port\n");
|
|
||||||
printf("9. Exit and close serial port\n");
|
|
||||||
scanf("%d", &option);
|
|
||||||
|
|
||||||
if (option ==1){
|
|
||||||
//printf("You have 5 seconds to send me some data!!!\n");
|
|
||||||
//sleep(5);
|
|
||||||
|
|
||||||
memset(buf, 0, sizeof(buf));
|
|
||||||
int len = -1;
|
|
||||||
|
|
||||||
while (len < 0){
|
|
||||||
|
|
||||||
len = read(fd, buf, sizeof(buf));
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("Rxed %d bytes\n", len);
|
|
||||||
|
|
||||||
for (int i = 0; i < len; i++){
|
|
||||||
printf("0x%02x ", (unsigned char)buf[i]);
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (option == 2){
|
|
||||||
printf("writing not implemented\n");
|
|
||||||
}
|
|
||||||
else if (option == 3){
|
|
||||||
|
|
||||||
printf("FD status: %d\n", fd);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (option == 4){
|
|
||||||
configureSerialPort();
|
|
||||||
}
|
|
||||||
else if (option == 5){
|
|
||||||
close(fd);
|
|
||||||
printf("hopefully closed fd\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (option == 8){
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (option == 9){
|
|
||||||
close(fd);
|
|
||||||
printf("Exiting.\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -280,7 +297,7 @@ u8 H8300::handleSPI(u8& IRCmd, u8& val, u32&pos, bool& last){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// printf("IRCmd: %d val:%02x pos: %ld last: %d\n", IRCmd, val, pos, last);
|
// printf("IRCmd: %d val:%02x pos: %ld last: %d\n", IRCmd, val, pos, last);
|
||||||
switch (IRCmd)
|
switch (IRCmd)
|
||||||
{
|
{
|
||||||
case 0x00: // pass-through
|
case 0x00: // pass-through
|
||||||
|
@ -291,6 +308,7 @@ u8 H8300::handleSPI(u8& IRCmd, u8& val, u32&pos, bool& last){
|
||||||
case 0x01:
|
case 0x01:
|
||||||
|
|
||||||
if (pos == 0){
|
if (pos == 0){
|
||||||
|
printf("beginning new spi seq\n");
|
||||||
return 0x00;
|
return 0x00;
|
||||||
}
|
}
|
||||||
if (pos == 1){
|
if (pos == 1){
|
||||||
|
@ -329,6 +347,8 @@ u8 H8300::handleSPI(u8& IRCmd, u8& val, u32&pos, bool& last){
|
||||||
if (fd <0){
|
if (fd <0){
|
||||||
printf("Configuring port during IR init sequence\n");
|
printf("Configuring port during IR init sequence\n");
|
||||||
configureSerialPort();
|
configureSerialPort();
|
||||||
|
|
||||||
|
tcflush(fd, TCIFLUSH);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0xAA;
|
return 0xAA;
|
||||||
|
|
Loading…
Add table
Reference in a new issue