#ifndef AD0X0_I2C_EXT_H #define AD0X0_I2C_EXT_H #include "main.h" #include "ad0x0_i2c.h" typedef __packed struct{ uint8_t *pbuf_tx,*pbuf_rx; uint16_t pbuf_count; uint8_t addr_w,addr_r; //uint8_t calls_count; uint8_t sf_id;//в пуше присваиваем, когда вызываем ф-ю, передаем как пар-р //void (*pSetTXRXBuf)(__packed struct ad0x0_sfunc_t *self); //ф-ии pre вызываются ПЕРЕД командами SPI, НЕ ОСВОБОЖДАЕТ ячейку void (*p_pre_SetTXRXBuf)(ad0x0_i2c_desc_s *pdspi,void *_p_ad0x0_i2c_ext_t);//void EXT_SetTXRXBuf(ad0x0_i2c_desc_s *pdspi,uint8_t _handle) void (*_p_pre_cb_func)(uint8_t _sf_id,ad0x0_i2c_desc_s *pdspi,void *p_i2c_ext_t); //ф-ии post вызываются ПОСЛЕ команд SPI и освобождает ячейку void (*_p_post_cb_func)(uint8_t _sf_id,ad0x0_i2c_desc_s *pdspi,void *p_i2c_ext_t); uint8_t OLED_i2c_databyte; uint32_t user_data0,user_data1; void *user_pointer0,*user_pointer1;// uint8_t reference_count;//ячейка не освобождается >0!!!!!!!!!!!!! //SPI_TypeDef *spi; }ad0x0_i2c_ext_t; //typedef void (*p_i2c_ext_func_t)(uint8_t _sf_id,ad0x0_i2c_desc_s *pdspi,void *p_i2c_ext_t); void ad0x0_i2c_ext_init(void (*perr)(void)); void ad0x0_i2c_ext_clear(ad0x0_i2c_ext_t *pf);//вызывать после get //выдать ячейку EXT. Может и не выдать!!! проверять надо возвр. значение uint8_t ad0x0_i2c_ext_get(uint8_t *_p_out_handle,ad0x0_i2c_ext_t **_p_out_desc); //void ad0x0_sfunc_SetBufParams(ad0x0_i2c_desc_s *pdspi,ad0x0_sfunc_t *pf);// //вызывает ф-ии EXT перед командой SPI (иниц.буферов и т.п.) void ad0x0_i2c_ext_pre_process(ad0x0_i2c_desc_s *pdspi,uint8_t _handle); //вызывает ф-ии EXT ПОСЛЕ команды SPI (логика ветвлений) и ОСВОБОЖДАЕТ ячейку (не всегда, ref_count...) void ad0x0_i2c_ext_post_process(ad0x0_i2c_desc_s *pdspi,uint8_t _handle); ad0x0_i2c_ext_t *ad0x0_i2c_ext_get_pdesc(uint8_t _handle); void ad0x0_i2c_ext_release(uint8_t _handle); uint8_t ad0x0_i2c_ext_get_count(void);//убрать после отладки!!!!! нужно чтобы понять что все или не все очистил при перезагрузке и2ц void EXT_SetTXRXBuf_i2c(ad0x0_i2c_desc_s *pdspi,void *_p_ad0x0_i2c_ext_t); #endif