@@ -116,10 +116,10 @@ void handle_config_buffer(uint8_t * buffer, uint32_t size)
116116 /* TODO: Add something along the line
117117 like this: sidfile = (uint8_t*)calloc(1, 0x10000); */
118118 switch (buffer [1 ]) {
119- case FULL_CONFIG :
120- case SOCKET_CONFIG :
121- case MIDI_CONFIG :
122- case MIDI_CCVALUES :
119+ case FULL_CONFIG : break ;
120+ case SOCKET_CONFIG : break ;
121+ case MIDI_CONFIG : break ;
122+ case MIDI_CCVALUES : break ;
123123 default :
124124 break ;
125125 }
@@ -471,7 +471,7 @@ void handle_config_request(uint8_t * buffer, uint32_t size)
471471 memset (write_buffer_p , 0 , 64 );
472472 write_buffer_p [0 ] = (uint8_t )config_unacknowledged ();
473473#else
474- usCFG ("READ_CONFIGACK\n" );
474+ usCFG ("READ_CONFIGACK Not supported \n" );
475475 memset (write_buffer_p , 0 , 64 );
476476#endif
477477 write_back_data (1 );
@@ -698,7 +698,7 @@ void handle_config_request(uint8_t * buffer, uint32_t size)
698698 apply_config (false); /* Not at boot */
699699 }
700700 break ;
701- case WRITE_CONFIG : /* TODO: FINISH */
701+ case WRITE_CONFIG : /* Incoming write from Host */ /* TODO: FINISH */
702702 /* Max size of incoming buffer = 61 */
703703 usCFG ("WRITE_CONFIG\n" );
704704 handle_config_buffer (buffer , size );
@@ -814,11 +814,21 @@ void handle_config_request(uint8_t * buffer, uint32_t size)
814814 }
815815 } else {
816816 usCFG ("Audio switch is %s, requested change to %d (%s)\n" ,
817- monostereo_str ((int )usbsid_config .stereo_en ), buffer [1 ], monostereo_str (buffer [1 ]));
817+ monostereo_str ((int )usbsid_config .stereo_en ),
818+ buffer [1 ], monostereo_str (buffer [1 ]));
818819 return ;
819820 }
820821 break ;
821- case GET_AUDIO : /* TODO: Finish */
822+ case GET_AUDIO : /* Returns the audio switch state */
823+ #if PCB_VERSION_INT >= 13
824+ usCFG ("GET_AUDIO: %d\n" , (int )usbsid_config .stereo_en );
825+ memset (write_buffer_p , 0 , 64 );
826+ write_buffer_p [0 ] = (uint8_t )usbsid_config .stereo_en ;
827+ #else
828+ usCFG ("GET_AUDIO Not supported\n" );
829+ memset (write_buffer_p , 0 , 64 );
830+ #endif
831+ write_back_data (1 );
822832 break ;
823833 case LOCK_AUDIO :
824834 usCFG ("LOCK_AUDIO\n" );
@@ -868,14 +878,7 @@ void handle_config_request(uint8_t * buffer, uint32_t size)
868878 memset (write_buffer_p , 0 ,64 ); /* Empty the write buffer pointer */
869879 read_config (& usbsid_config ); /* Read the config into the config buffer */
870880 memcpy (write_buffer_p , config_array , 64 ); /* Copy the first 64 bytes from the buffer into the write buffer */
871- switch (rtype ) {
872- case 'C' :
873- cdc_write (cdc_itf , 64 );
874- break ;
875- case 'W' :
876- webserial_write (wusb_itf , 64 );
877- break ;
878- }
881+ write_back_data (64 );
879882 } else if (buffer [1 ] == 1 ) { /* Only if 1, else just skip! */
880883 if (buffer [2 ] < 4 ) {
881884 usCFG ("DETECT_SIDS @ $%02x\n" , buffer [3 ]);
@@ -903,14 +906,7 @@ void handle_config_request(uint8_t * buffer, uint32_t size)
903906 memset (write_buffer_p , 0 ,64 ); /* Empty the write buffer pointer */
904907 read_config (& usbsid_config ); /* Read the config into the config buffer */
905908 memcpy (write_buffer_p , config_array , 64 ); /* Copy the first 64 bytes from the buffer into the write buffer */
906- switch (rtype ) {
907- case 'C' :
908- cdc_write (cdc_itf , 64 );
909- break ;
910- case 'W' :
911- webserial_write (wusb_itf , 64 );
912- break ;
913- }
909+ write_back_data (64 );
914910 break ;
915911 case AUTO_DETECT :
916912 usCFG ("AUTO_DETECT\n" );
@@ -930,14 +926,7 @@ void handle_config_request(uint8_t * buffer, uint32_t size)
930926 memset (write_buffer_p , 0 ,64 ); /* Empty the write buffer pointer */
931927 read_config (& usbsid_config ); /* Read the config into the config buffer */
932928 memcpy (write_buffer_p , config_array , 64 ); /* Copy the first 64 bytes from the buffer into the write buffer */
933- switch (rtype ) {
934- case 'C' :
935- cdc_write (cdc_itf , 64 );
936- break ;
937- case 'W' :
938- webserial_write (wusb_itf , 64 );
939- break ;
940- }
929+ write_back_data (64 );
941930 }
942931 break ;
943932 case TEST_ALLSIDS :
@@ -984,14 +973,7 @@ void handle_config_request(uint8_t * buffer, uint32_t size)
984973 read_firmware_version ();
985974 memset (write_buffer_p , 0 , MAX_BUFFER_SIZE );
986975 memcpy (write_buffer_p , p_version_array , MAX_BUFFER_SIZE );
987- switch (rtype ) {
988- case 'C' :
989- cdc_write (cdc_itf , MAX_BUFFER_SIZE );
990- break ;
991- case 'W' :
992- webserial_write (wusb_itf , MAX_BUFFER_SIZE );
993- break ;
994- }
976+ write_back_data (MAX_BUFFER_SIZE );
995977 break ;
996978 case US_PCB_VERSION :
997979 usCFG ("READ_PCB_VERSION\n" );
@@ -1000,14 +982,7 @@ void handle_config_request(uint8_t * buffer, uint32_t size)
1000982 read_pcb_version ();
1001983 memset (write_buffer_p , 0 , MAX_BUFFER_SIZE );
1002984 memcpy (write_buffer_p , p_version_array , MAX_BUFFER_SIZE );
1003- switch (rtype ) {
1004- case 'C' :
1005- cdc_write (cdc_itf , MAX_BUFFER_SIZE );
1006- break ;
1007- case 'W' :
1008- webserial_write (wusb_itf , MAX_BUFFER_SIZE );
1009- break ;
1010- }
985+ write_back_data (MAX_BUFFER_SIZE );
1011986 } else { /* Small write single byte */
1012987 memset (write_buffer_p , 0 , 64 );
1013988 /* int pcbver = (strcmp(pcb_version, "1.3") == 0 ? 13 : 10); */
@@ -1138,7 +1113,7 @@ void handle_config_request(uint8_t * buffer, uint32_t size)
11381113 // set_sidemu_sidtype(buffer[2], buffer[3]);
11391114 extern uint8_t get_pin_states (void );
11401115 uint8_t pinstates = get_pin_states ();
1141- printf ("PINSTATES: 0b%04b\n" ,pinstates );
1116+ usNFO ("PINSTATES: 0b%04b\n" ,pinstates );
11421117 }
11431118 break ;
11441119 case TEST_FN2 :
@@ -1149,10 +1124,23 @@ void handle_config_request(uint8_t * buffer, uint32_t size)
11491124 }
11501125 usNFO ("\n" );
11511126 break ;
1152- case FPGASID : break ; /* Reserved for config implementation */
1153- case SKPICO : break ; /* Reserved for config implementation */
1154- case ARMSID : break ; /* Reserved for config implementation */
1155- case PDSID :
1127+ case READ_CLONECHIP : /* Read configuration / data from clone Chips */
1128+ usCFG ("READ_CLONECHIP: $%02x @ $%02x\n" , buffer [1 ], buffer [2 ]);
1129+ if ((buffer [1 ]& 0x0f ) > CHIP_COUNT ) break ;
1130+ memset (write_buffer_p , 0 , MAX_BUFFER_SIZE );
1131+ if (!read_chip_configuration (buffer [2 ], buffer [1 ], write_buffer_p )) {
1132+ usNFO ("READ ERROR!\n" );
1133+ }
1134+ usNFO ("WRITE BACK:\n" );
1135+ for (int i = 0 ; i < MAX_BUFFER_SIZE ; i ++ ) usNFO ("%02x " , write_buffer_p [i ]);
1136+ usNFO ("\n" );
1137+ usNFO ("SENDING\n" );
1138+ write_back_data (MAX_BUFFER_SIZE );
1139+ break ;
1140+ case WRITE_CLONECHIP : /* Write configuration / data to clone Chips */
1141+ write_chip_configuration (buffer [2 ]);
1142+ break ;
1143+ case PDSID : /* TODO: Deprecate and remove */
11561144 if (buffer [1 ] == 0 ) {
11571145 usCFG ("Toggle PDSID type\n" );
11581146 reset_switch_pdsid_type ();
0 commit comments