int16 ASERDPort::prime_out(uint32 pb, uint32 dce) { // Send output command to serial process D(bug("primeout\n")); write_done = false; write_pending = true; WriteMacInt32(output_dt + serdtDCE, dce); send_to_proc(MSG_PRIME_OUT, pb); return 1; // Command in progress }
int16 ASERDPort::prime_in(uint32 pb, uint32 dce) { // Send input command to serial process D(bug("primein\n")); read_done = false; read_pending = true; WriteMacInt32(input_dt + serdtDCE, dce); send_to_proc(MSG_PRIME_IN, pb); return 1; // Command in progress }
bool ASERDPort::set_params(void) { // Set/clear RadBoogie UBYTE flags = control_io->io_SerFlags; if (!(flags & SERF_PARTY_ON) && (flags & SERF_XDISABLED) && control_io->io_ReadLen == 8) control_io->io_SerFlags |= SERF_RAD_BOOGIE; else control_io->io_SerFlags &= ~SERF_RAD_BOOGIE; // Send message to serial process send_to_proc(MSG_SET_PARAMS); return control_io->IOSer.io_Error == 0; }
bool ASERDPort::set_par_params(void) { send_to_proc(MSG_SET_PAR_PARAMS); return control_io->IOSer.io_Error == 0; }
bool ASERDPort::query(void) { send_to_proc(MSG_QUERY); return control_io->IOSer.io_Error == 0; }
int16 ASERDPort::control(uint32 pb, uint32 dce, uint16 code) { D(bug("control(%ld)\n", (uint32)code)); switch (code) { case 1: // KillIO send_to_proc(MSG_KILL_IO); return noErr; case kSERDConfiguration: if (configure(ReadMacInt16(pb + csParam))) return noErr; else return paramErr; case kSERDInputBuffer: { if (is_parallel) return noErr; int buf = ReadMacInt16(pb + csParam + 4) & 0xffffffc0; if (buf < 1024) // 1k minimum buf = 1024; D(bug(" buffer size is now %08lx\n", buf)); control_io->io_RBufLen = buf; return set_params() ? noErr : paramErr; } case kSERDSerHShake: set_handshake(pb + csParam, false); return noErr; case kSERDSetBreak: if (!is_parallel) send_to_proc(MSG_BREAK); return noErr; case kSERDClearBreak: return noErr; case kSERDBaudRate: if (is_parallel) return noErr; control_io->io_Baud = ReadMacInt16(pb + csParam); D(bug(" baud rate %ld\n", control_io->io_Baud)); return set_params() ? noErr : paramErr; case kSERDHandshake: case kSERDHandshakeRS232: set_handshake(pb + csParam, true); return noErr; case kSERDClockMIDI: if (is_parallel) return noErr; control_io->io_Baud = 31250; control_io->io_SerFlags = SERF_XDISABLED | SERF_SHARED; control_io->io_StopBits = 1; control_io->io_ReadLen = control_io->io_WriteLen = 8; return set_params() ? noErr : paramErr; case kSERDMiscOptions: case kSERDAssertDTR: case kSERDNegateDTR: case kSERDSetPEChar: case kSERDSetPEAltChar: case kSERDAssertRTS: case kSERDNegateRTS: return noErr; // Not supported under AmigaOS case kSERD115KBaud: if (is_parallel) return noErr; control_io->io_Baud = 115200; return set_params() ? noErr : paramErr; case kSERD230KBaud: case kSERDSetHighSpeed: if (is_parallel) return noErr; control_io->io_Baud = 230400; return set_params() ? noErr : paramErr; case kSERDResetChannel: send_to_proc(MSG_RESET); return noErr; default: printf("WARNING: SerialControl(): unimplemented control code %d\n", code); return controlErr; } }
int16 ether_write(uint32 wds) { send_to_proc(MSG_WRITE, wds); return 1; // Command in progress }
int16 ether_detach_ph(uint16 type) { return send_to_proc(MSG_DETACH_PH, type); }
int16 ether_attach_ph(uint16 type, uint32 handler) { return send_to_proc(MSG_ATTACH_PH, handler, type); }
int16 ether_del_multicast(uint32 pb) { return send_to_proc(MSG_DEL_MULTI, pb); }
int16 ether_add_multicast(uint32 pb) { return send_to_proc(MSG_ADD_MULTI, pb); }
void ether_reset(void) { // Remove all protocols if (net_proc) send_to_proc(MSG_CLEANUP); }