Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef struct {
- uint32_t timestamp;
- uint8_t messageType;
- } InterruptMessage;
- static void interruptButton(EXTDriver *extp, expchannel_t channel) {
- (void)extp;
- (void)channel;
- if (thread != NULL) {
- chSysLockFromIsr();
- palSetPad(GPIOB, 8);
- InterruptMessage message;
- message.timestamp = 10002;
- message.messageType = tmButton; // 1
- chMBPost(&mb[1], (msg_t) &message, TIME_IMMEDIATE);
- palClearPad(GPIOB, 8);
- chSysUnlockFromIsr();
- }
- }
- static void interruptRotation(EXTDriver *extp, expchannel_t channel) {
- (void)extp;
- (void)channel;
- if (thread != NULL) {
- chSysLockFromIsr();
- palSetPad(GPIOB, 8);
- InterruptMessage message;
- message.timestamp = 10001;
- message.messageType = tmRotationSignal; // 2
- chMBPost(&mb[1], (msg_t) &message, TIME_IMMEDIATE);
- palClearPad(GPIOB, 8);
- chSysUnlockFromIsr();
- }
- }
- static msg_t Thread(void *arg) {
- ...
- InterruptMessage *interruptMessage;
- thread = chThdSelf();
- ...
- while (true) {
- // sleep and wait for message
- chSysLock();
- chMBFetch(&mb[1], (msg_t*) &interruptMessage, TIME_INFINITE);
- ...
- chSysUnlock();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement