66
77#define SERIAL_BUF_SIZE 16
88
9+ static xQueueHandle serial_out_queue = NULL ;
10+
11+ void serial_task (void *param)
12+ {
13+ adamSerial *sp = (adamSerial *)param;
14+ uint8_t c=0 ;
15+
16+ while (1 )
17+ {
18+ if (xQueueReceive (serial_out_queue,&c,portMAX_DELAY))
19+ {
20+ sp->client .write (c);
21+ }
22+ }
23+ }
24+
925adamSerial::adamSerial ()
1026{
1127 Debug_printf (" Serial Start\n " );
1228 server = new fnTcpServer (1235 , 1 ); // Run a TCP server on port 1235.
1329 server->begin (1235 );
14- response_len= 0 ;
30+ response_len = 0 ;
1531 status_response[3 ] = 0x00 ; // character device
32+ serial_out_queue = xQueueCreate (16 , sizeof (uint8_t ));
33+ xTaskCreatePinnedToCore (serial_task, " adamnet_serial" , 2048 , this , 10 , NULL ,1 );
1634}
1735
1836adamSerial::~adamSerial ()
@@ -26,8 +44,8 @@ void adamSerial::command_recv()
2644 if ((response_len == 0 ) && client.available ())
2745 {
2846 adamnet_response_nack ();
29- response_len= client.available () > SERIAL_BUF_SIZE ? SERIAL_BUF_SIZE : client.available ();
30- int c = client.read (response,response_len);
47+ response_len = client.available () > SERIAL_BUF_SIZE ? SERIAL_BUF_SIZE : client.available ();
48+ int c = client.read (response, response_len);
3149 }
3250 else
3351 adamnet_response_ack ();
@@ -36,9 +54,9 @@ void adamSerial::command_recv()
3654void adamSerial::adamnet_response_status ()
3755{
3856 unsigned short s = SERIAL_BUF_SIZE;
39-
40- status_response[1 ]= s & 0xFF ;
41- status_response[2 ]= s >> 8 ;
57+
58+ status_response[1 ] = s & 0xFF ;
59+ status_response[2 ] = s >> 8 ;
4260
4361 if (!client.connected () && server->hasClient ())
4462 {
@@ -49,10 +67,7 @@ void adamSerial::adamnet_response_status()
4967 if (client.available ())
5068 {
5169 status_response[4 ] = client.available () > SERIAL_BUF_SIZE ? SERIAL_BUF_SIZE : client.available ();
52- status_response[3 ] = sizeof (sendbuf)-outc;
5370 }
54- else
55- status_response[3 ] = sizeof (sendbuf)-outc;
5671
5772 adamNetDevice::adamnet_response_status ();
5873}
@@ -70,7 +85,7 @@ void adamSerial::adamnet_control_clr()
7085 adamnet_send_buffer (response, response_len);
7186 adamnet_send (adamnet_checksum (response, response_len));
7287 memset (response, 0 , sizeof (response));
73- response_len = 0 ;
88+ response_len = 0 ;
7489 }
7590}
7691
@@ -81,11 +96,6 @@ void adamSerial::adamnet_control_ready()
8196
8297void adamSerial::adamnet_idle ()
8398{
84- if (outc > 0 )
85- {
86- client.write (sendbuf,outc);
87- outc=0 ;
88- }
8999}
90100
91101void adamSerial::adamnet_control_send ()
@@ -98,7 +108,8 @@ void adamSerial::adamnet_control_send()
98108
99109 AdamNet.start_time = esp_timer_get_time ();
100110 adamnet_response_ack ();
101- outc = s;
111+
112+ xQueueSend (serial_out_queue,&sendbuf[0 ],portMAX_DELAY);
102113}
103114
104115void adamSerial::adamnet_process (uint8_t b)
0 commit comments