Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #ifdef __cplusplus
- extern "C" {
- #endif
- // callbacks
- void onmessage();
- void onpin(uint8_t pinvalue);
- // function
- void handle_receive(uint8_t value);
- void reset_sync_state();
- #ifdef __cplusplus
- }
- #endif
- enum messagetype
- {
- message_nop,
- message_needs_reset,
- message_relax_watchdog,
- message_set_config, //stm8_expander_config follows stm8_expander_message
- // message_tx_ir,
- };
- #define PIN_MSG 0x75 //a single header byte follows a pin update message
- #define HDR0 0x73 //four header bytes follow stm8_expander_message
- #define HDR1 0xAF
- #define HDR2 0xBC
- #define HDR3 0x5E
- #define STM8_BAUDRATE 460800
- struct stm8_expander_message
- {
- uint8_t message;
- uint8_t data1;
- uint8_t data2;
- uint8_t data3;
- };
- enum pinmode
- {
- pinmode_off,
- pinmode_input0,
- pinmode_input1,
- pinmode_input2,
- pinmode_input3,
- pinmode_input4,
- pinmode_output0,
- pinmode_output1,
- pinmode_output2,
- pinmode_output3,
- pinmode_output4,
- };
- /*
- #define SIG0 0x70
- #define SIG1 0x35
- #define SIG2 0x84
- #define SIG3 0xB2
- #define SIG4 0x65
- #define SIG5 0x12
- #define SIG6 0xA5
- #define SIG7 0xF3
- */
- struct stm8_expander_config
- {
- // uint8_t signature[8];
- uint8_t gpio0_mode;
- uint8_t gpio2_mode;
- };
- extern struct stm8_expander_message msg;
- extern struct stm8_expander_config cfg;
- //extern uint8_t stm8_temp_buffer[512];
- /*
- struct stm8_expander_config cfg;
- void receive_config()
- {
- uint32_t startTime=millis();
- int init_fill=0;
- int sync_state=0;
- int cfg_idx=0;
- uint8_t sig_compare[]={SIG0,SIG1,SIG2,SIG3,SIG4,SIG5,SIG6,SIG7};
- uint8_t * dest=(uint8_t *) &cfg;
- while(millis()-startTime<2500 && cfg_idx<sizeof(cfg))
- {
- if(!Serial_available()) continue;
- uint8_t value=Serial_read();
- switch(sync_state)
- {
- case 0:
- cfg_idx=0;
- if(value==0xAA) init_fill++;
- if(init_fill>=30 && value==SIG0)
- {
- dest[cfg_idx]=value;
- cfg_idx++;
- sync_state++;
- }
- break;
- case 1:
- if(cfg_idx<8)
- {
- if(value==sig_compare[cfg_idx])
- {
- dest[cfg_idx]=value;
- cfg_idx++;
- }
- else
- {
- sync_state=0;
- }
- }
- else if(cfg_idx<sizeof(cfg))
- {
- dest[cfg_idx]=value;
- cfg_idx++;
- }
- break;
- } //switch
- } //while
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment