Advertisement
Guest User

Untitled

a guest
Jan 25th, 2015
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. typedef struct {
  2.     uint32_t timestamp;
  3.     uint8_t  messageType;
  4. } InterruptMessage;
  5.  
  6. static void interruptButton(EXTDriver *extp, expchannel_t channel) {
  7.   (void)extp;
  8.   (void)channel;
  9.   if (thread != NULL) {
  10.       chSysLockFromIsr();
  11.       palSetPad(GPIOB, 8);
  12.       InterruptMessage message;
  13.       message.timestamp =  10002;
  14.       message.messageType = tmButton; // 1
  15.       chMBPost(&mb[1], (msg_t) &message, TIME_IMMEDIATE);
  16.       palClearPad(GPIOB, 8);
  17.       chSysUnlockFromIsr();
  18.   }
  19. }
  20.  
  21. static void interruptRotation(EXTDriver *extp, expchannel_t channel) {
  22.   (void)extp;
  23.   (void)channel;
  24.   if (thread != NULL) {
  25.       chSysLockFromIsr();
  26.       palSetPad(GPIOB, 8);
  27.       InterruptMessage message;
  28.       message.timestamp =  10001;
  29.       message.messageType = tmRotationSignal; // 2
  30.       chMBPost(&mb[1], (msg_t) &message, TIME_IMMEDIATE);
  31.       palClearPad(GPIOB, 8);
  32.       chSysUnlockFromIsr();
  33.   }
  34. }
  35.  
  36. static msg_t Thread(void *arg) {
  37. ...
  38.     InterruptMessage *interruptMessage;
  39.     thread = chThdSelf();
  40. ...
  41.     while (true) {
  42.         // sleep and wait for message
  43.         chSysLock();
  44.         chMBFetch(&mb[1], (msg_t*) &interruptMessage, TIME_INFINITE);
  45. ...
  46.         chSysUnlock();
  47.   }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement