@@ -633,6 +633,24 @@ STATIC mp_obj_t esp_flash_size(void) {
633633}
634634STATIC MP_DEFINE_CONST_FUN_OBJ_0 (esp_flash_size_obj ,esp_flash_size );
635635
636+ STATIC mp_obj_t esp_check_fw (void ) {
637+ MD5_CTX ctx ;
638+ uint32_t * sz_p = (uint32_t * )0x40208ffc ;
639+ printf ("size: %d\n" ,* sz_p );
640+ MD5Init (& ctx );
641+ MD5Update (& ctx , (char * )0x40200004 ,* sz_p - 4 );
642+ unsignedchar digest [16 ];
643+ MD5Final (digest ,& ctx );
644+ printf ("md5: " );
645+ for (int i = 0 ;i < 16 ;i ++ ) {
646+ printf ("%02x" ,digest [i ]);
647+ }
648+ printf ("\n" );
649+ return mp_obj_new_bool (memcmp (digest , (void * )(0x40200000 + * sz_p ),sizeof (digest ))== 0 );
650+ }
651+ STATIC MP_DEFINE_CONST_FUN_OBJ_0 (esp_check_fw_obj ,esp_check_fw );
652+
653+
636654STATIC mp_obj_t esp_neopixel_write_ (mp_obj_t pin ,mp_obj_t buf ,mp_obj_t is800k ) {
637655mp_buffer_info_t bufinfo ;
638656mp_get_buffer_raise (buf ,& bufinfo ,MP_BUFFER_READ );
@@ -703,6 +721,7 @@ STATIC const mp_map_elem_t esp_module_globals_table[] = {
703721 {MP_OBJ_NEW_QSTR (MP_QSTR_dht_readinto ), (mp_obj_t )& dht_readinto_obj },
704722 {MP_OBJ_NEW_QSTR (MP_QSTR_freemem ), (mp_obj_t )& esp_freemem_obj },
705723 {MP_OBJ_NEW_QSTR (MP_QSTR_meminfo ), (mp_obj_t )& esp_meminfo_obj },
724+ {MP_OBJ_NEW_QSTR (MP_QSTR_check_fw ), (mp_obj_t )& esp_check_fw_obj },
706725 {MP_OBJ_NEW_QSTR (MP_QSTR_info ), (mp_obj_t )& pyb_info_obj },// TODO delete/rename/move elsewhere
707726 {MP_OBJ_NEW_QSTR (MP_QSTR_malloc ), (mp_obj_t )& esp_malloc_obj },
708727 {MP_OBJ_NEW_QSTR (MP_QSTR_free ), (mp_obj_t )& esp_free_obj },