Commit 0b2f7c19 authored by Robert Sprowson's avatar Robert Sprowson Committed by ROOL

Fix OS_SerialOp default handshaking use on Pi

The default state for the Serial device (aka OS_SerialOp, and redirection to serial via *FX) is to expect hardware handshaking. However the implementation of HAL_UARTModemStatus when ModemControl = {FALSE} state didn't set a return value so ended up returning a1 = the port number (=0) rather than valid status bits. In turn, DualSerial took that to mean CTS/DSR deasserted and refused to send anything.
To a lesser extent HAL_UARTModemControl also affected, returning a1 = port number 0 too.
For both, set a return value; the value is as though a cable is always present with RTS=CTS and DTR=DSR.

Also, fix the bugs in ModemControl = {TRUE}. This also fakes DTR=DSR which status/control bits don't appear to be implemented in the UART peripheral. Tested briefly, checking CTS state when plugging/unplugging a cable.

Version 0.82. Tagged as 'HAL_BCM2835-0_82'
parent 699a746a
/* (0.81) /* (0.82)
* *
* This file is automatically maintained by srccommit, do not edit manually. * This file is automatically maintained by srccommit, do not edit manually.
* *
*/ */
#define Module_MajorVersion_CMHG 0.81 #define Module_MajorVersion_CMHG 0.82
#define Module_MinorVersion_CMHG #define Module_MinorVersion_CMHG
#define Module_Date_CMHG 10 Aug 2019 #define Module_Date_CMHG 05 Feb 2020
#define Module_MajorVersion "0.81" #define Module_MajorVersion "0.82"
#define Module_Version 81 #define Module_Version 82
#define Module_MinorVersion "" #define Module_MinorVersion ""
#define Module_Date "10 Aug 2019" #define Module_Date "05 Feb 2020"
#define Module_ApplicationDate "10-Aug-19" #define Module_ApplicationDate "05-Feb-20"
#define Module_ComponentName "HAL_BCM2835" #define Module_ComponentName "HAL_BCM2835"
#define Module_FullVersion "0.81" #define Module_FullVersion "0.82"
#define Module_HelpVersion "0.81 (10 Aug 2019)" #define Module_HelpVersion "0.82 (05 Feb 2020)"
#define Module_LibraryVersionInfo "0:81" #define Module_LibraryVersionInfo "0:82"
...@@ -122,6 +122,9 @@ HAL_UARTStartUp ...@@ -122,6 +122,9 @@ HAL_UARTStartUp
LDR a2, PeriBase ; first turn on the serial pins LDR a2, PeriBase ; first turn on the serial pins
ADD a3, a2, #GPIO_Base ; (for setting pins up) ADD a3, a2, #GPIO_Base ; (for setting pins up)
LDR a2, [a3, #GPFSel1] ; LDR a2, [a3, #GPFSel1] ;
[ ModemControl
ORR a2, a2, #8_77000000 ; set GPIO 16 + 17 to alt3 (111)
]
BIC a2, a2, #8_00770000 ; BIC a2, a2, #8_00770000 ;
ORR a2, a2, #8_00440000 ; set GPIO 14 + 15 to alt0 (100) ORR a2, a2, #8_00440000 ; set GPIO 14 + 15 to alt0 (100)
STR a2, [a3, #GPFSel1] ; STR a2, [a3, #GPFSel1] ;
...@@ -637,9 +640,12 @@ HAL_UARTModemControl ...@@ -637,9 +640,12 @@ HAL_UARTModemControl
STRNE a2, [a1, #UARTCR] STRNE a2, [a1, #UARTCR]
PLP PLP
DataSyncBarrier a2 DataSyncBarrier a2
MOV a1, ip ; Ensure DTR
ORR a1, ip, #1:SHL:0
EXIT EXIT
| |
; Fake control lines as though a modem is plugged in
MOV a1, #2_00011
MOV pc, lr MOV pc, lr
] ]
...@@ -672,7 +678,7 @@ HAL_UARTModemStatus ...@@ -672,7 +678,7 @@ HAL_UARTModemStatus
; Get current status ; Get current status
LDR a2, [a1, #UARTFLAG] LDR a2, [a1, #UARTFLAG]
DataSyncBarrier a4 DataSyncBarrier a4
AND a2, a2, #FLAG_CTS AND a2, a2, #1:SHL:FLAG_CTS
; Get old status ; Get old status
LDR a4, UARTOldModemStatus LDR a4, UARTOldModemStatus
; Store new status ; Store new status
...@@ -680,8 +686,13 @@ HAL_UARTModemStatus ...@@ -680,8 +686,13 @@ HAL_UARTModemStatus
PLP a3 PLP a3
; Calc return value ; Calc return value
EOR a1, a4, a2 EOR a1, a4, a2
MOV a1, a1, LSR #UI_CTS MOV a1, a1, LSR #FLAG_CTS
ORR a1, a1, a2, LSL #4-UI_CTS ORR a1, a1, a2, LSL #4-FLAG_CTS
; Ensure DSR
ORR a1, a1, #1:SHL:5
|
; Fake control lines as though a modem is plugged in but offline
MOV a1, #2_00110000
] ]
MOV pc, lr MOV pc, lr
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment