@@ -43,12 +43,15 @@ typedef struct {
4343
4444 gboolean ack ;
4545 gboolean reply ;
46+ gboolean tls ;
4647
4748 GoodixCmdCallback callback ;
4849 gpointer user_data ;
4950
5051 guint8 * data ;
5152 guint32 length ;
53+
54+ GoodixCallbackInfo * tls_ready_callback ;
5255} FpiDeviceGoodixTlsPrivate ;
5356
5457G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (FpiDeviceGoodixTls , fpi_device_goodixtls ,
@@ -360,6 +363,7 @@ void goodix_receive_pack(FpDevice *dev, guint8 *data, guint32 length) {
360363 if (!goodix_decode_pack (priv -> data , priv -> length , & flags , & payload ,
361364 & payload_len , & valid_checksum )) {
362365 // Packet is not full, we still need data.
366+ fp_dbg ("not full packet" );
363367 return ;
364368 }
365369
@@ -371,6 +375,9 @@ void goodix_receive_pack(FpDevice *dev, guint8 *data, guint32 length) {
371375
372376 case GOODIX_FLAGS_TLS :
373377 fp_dbg ("Got TLS msg" );
378+ if (!priv -> tls ) {
379+ fp_warn ("unexpected tls packet" );
380+ }
374381 goodix_receive_done (dev , payload , payload_len , NULL );
375382
376383 // TLS message sending it to TLS server.
@@ -534,7 +541,7 @@ void goodix_send_nop(FpDevice *dev, GoodixNoneCallback callback,
534541 goodix_receive_done (dev , NULL , 0 , NULL );
535542}
536543
537- void goodix_send_mcu_get_image (FpDevice * dev , GoodixNoneCallback callback ,
544+ void goodix_send_mcu_get_image (FpDevice * dev , GoodixImageCallback callback ,
538545 gpointer user_data )
539546{
540547 GoodixDefault payload = {.unused_flags = 0x01 };
@@ -547,13 +554,13 @@ void goodix_send_mcu_get_image(FpDevice* dev, GoodixNoneCallback callback,
547554 cb_info -> user_data = user_data ;
548555
549556 goodix_send_protocol (dev , GOODIX_CMD_MCU_GET_IMAGE , (guint8 * ) & payload ,
550- sizeof (payload ), NULL , TRUE, GOODIX_TIMEOUT , FALSE ,
551- goodix_receive_none , cb_info );
557+ sizeof (payload ), NULL , TRUE, GOODIX_TIMEOUT , TRUE ,
558+ goodix_receive_default , cb_info );
552559 return ;
553560 }
554561
555562 goodix_send_protocol (dev , GOODIX_CMD_MCU_GET_IMAGE , (guint8 * ) & payload ,
556- sizeof (payload ), NULL , TRUE, GOODIX_TIMEOUT , FALSE ,
563+ sizeof (payload ), NULL , TRUE, GOODIX_TIMEOUT , TRUE ,
557564 NULL , NULL );
558565}
559566
@@ -1024,6 +1031,7 @@ void goodix_read_tls(FpDevice* dev, GoodixTlsCallback callback,
10241031 priv -> callback = callback ;
10251032 priv -> user_data = user_data ;
10261033 priv -> reply = TRUE;
1034+ priv -> cmd = 0 ;
10271035 goodix_receive_data (FP_DEVICE (self ));
10281036}
10291037
@@ -1040,9 +1048,6 @@ static void on_goodix_tls_server_ready(GoodixTlsServer* server, GError* err,
10401048 fp_err ("server ready failed: %s" , err -> message );
10411049 return ;
10421050 }
1043- FpiDeviceGoodixTls * self = FPI_DEVICE_GOODIXTLS (dev );
1044- FpiDeviceGoodixTlsPrivate * priv =
1045- fpi_device_goodixtls_get_instance_private (self );
10461051 fp_dbg ("TLS connection ready" );
10471052}
10481053
@@ -1081,15 +1086,26 @@ enum goodix_tls_handshake_stages {
10811086
10821087 TLS_HANDSHAKE_STAGE_NUM ,
10831088};
1089+
1090+ static void on_tls_successfully_established (FpDevice * dev , gpointer user_data ,
1091+ GError * error )
1092+ {
1093+
1094+ fp_dbg ("HANDSHAKE DONE" );
1095+ FpiDeviceGoodixTls * self = FPI_DEVICE_GOODIXTLS (dev );
1096+ FpiDeviceGoodixTlsPrivate * priv =
1097+ fpi_device_goodixtls_get_instance_private (self );
1098+ ((GoodixNoneCallback ) priv -> tls_ready_callback -> callback )(
1099+ dev , priv -> tls_ready_callback -> user_data , NULL );
1100+ }
10841101static void tls_handshake_done (FpiSsm * ssm , FpDevice * dev , GError * error )
10851102{
10861103 if (error ) {
10871104 fp_dbg ("failed to do tls handshake: %s (code: %d)" , error -> message ,
10881105 error -> code );
10891106 }
1090- goodix_send_tls_successfully_established (dev , NULL , NULL );
1091-
1092- fp_dbg ("HANDSHAKE DONE" );
1107+ goodix_send_tls_successfully_established (
1108+ dev , on_tls_successfully_established , NULL );
10931109}
10941110static void tls_handshake_run (FpiSsm * ssm , FpDevice * dev )
10951111{
@@ -1178,13 +1194,20 @@ void goodix_tls_complete(FpiSsm *ssm, FpDevice *dev, GError *error) {
11781194 fpi_image_device_activate_complete (FP_IMAGE_DEVICE (dev ), error );
11791195}
11801196
1181- void goodix_tls (FpDevice * dev ) {
1197+ void goodix_tls (FpDevice * dev , GoodixNoneCallback callback , gpointer user_data )
1198+ {
11821199 fp_dbg ("Starting up goodix tls server" );
11831200 FpiDeviceGoodixTls * self = FPI_DEVICE_GOODIXTLS (dev );
11841201 FpiDeviceGoodixTlsPrivate * priv =
11851202 fpi_device_goodixtls_get_instance_private (self );
11861203 g_assert (priv -> tls_hop == NULL );
11871204 priv -> tls_hop = malloc (sizeof (GoodixTlsServer ));
1205+
1206+ if (!priv -> tls_ready_callback ) {
1207+ priv -> tls_ready_callback = malloc (sizeof (GoodixCallbackInfo ));
1208+ }
1209+ priv -> tls_ready_callback -> callback = G_CALLBACK (callback );
1210+ priv -> tls_ready_callback -> user_data = user_data ;
11881211 GoodixTlsServer * s = priv -> tls_hop ;
11891212 s -> connection_callback = on_goodix_tls_server_ready ;
11901213 s -> user_data = self ;
@@ -1197,6 +1220,47 @@ void goodix_tls(FpDevice *dev) {
11971220
11981221 goodix_tls_ready (s , err , self );
11991222}
1223+ static void goodix_tls_ready_image_handler (FpDevice * dev , guint8 * data ,
1224+ guint16 length , gpointer user_data ,
1225+ GError * error )
1226+ {
1227+
1228+ g_autofree GoodixCallbackInfo * cb_info = user_data ;
1229+ GoodixImageCallback callback = (GoodixImageCallback ) cb_info -> callback ;
1230+ if (error ) {
1231+ callback (dev , NULL , 0 , error , cb_info -> user_data );
1232+ return ;
1233+ }
1234+ FpiDeviceGoodixTls * self = FPI_DEVICE_GOODIXTLS (dev );
1235+ FpiDeviceGoodixTlsPrivate * priv =
1236+ fpi_device_goodixtls_get_instance_private (self );
1237+ goodix_tls_client_send (priv -> tls_hop , data , length );
1238+
1239+ const guint16 size = -1 ;
1240+ guint8 * buff = malloc (size );
1241+ GError * err = NULL ;
1242+ if (!goodix_tls_server_receive (priv -> tls_hop , buff , size , & err )) {
1243+ callback (dev , NULL , 0 , err , cb_info -> user_data );
1244+ return ;
1245+ }
1246+
1247+ callback (dev , buff , size , cb_info -> user_data , NULL );
1248+ }
1249+
1250+ void goodix_tls_read_image (FpDevice * dev , GoodixImageCallback callback ,
1251+ gpointer user_data )
1252+ {
1253+ g_assert (callback );
1254+ FpiDeviceGoodixTls * self = FPI_DEVICE_GOODIXTLS (dev );
1255+ FpiDeviceGoodixTlsPrivate * priv =
1256+ fpi_device_goodixtls_get_instance_private (self );
1257+ GoodixCallbackInfo * cb_info = malloc (sizeof (GoodixImageCallback ));
1258+
1259+ cb_info -> callback = G_CALLBACK (callback );
1260+ cb_info -> user_data = user_data ;
1261+
1262+ goodix_send_mcu_get_image (dev , goodix_tls_ready_image_handler , cb_info );
1263+ }
12001264
12011265// ---- TLS SECTION END ----
12021266
0 commit comments