1 | // Represents a pwm parameter
|
2 | struct pwmParameter
|
3 | {
|
4 | // name of the pwm parameter
|
5 | char name[10];
|
6 | // value of the pwm parameter
|
7 | uint16 value;
|
8 | // max value of the pwm parameter value (255 for 8-bit pwm, 20000 for 16-bit pwm)
|
9 | uint16 maxValue;
|
10 | // pointer to the next parameter (lsingle-linked-list)
|
11 | struct pwmParameter* next;
|
12 | // Pointer to a function which increases the pwm parameter value by one ( + 1)
|
13 | void (*increase)(struct pwmParameter*);
|
14 | // // Pointer to a function which decreases the pwm parameter value by one (- 1)
|
15 | void (*decrease)(struct pwmParameter*);
|
16 | // Updates the pwm parameter. Not needed to be called after increase/decrease! Its called within increase/decrease functions
|
17 | void (*update)(struct pwmParameter*);
|
18 | };
|
19 |
|
20 | typedef struct pwmParameter* psPwmParameter;
|
21 |
|
22 | // Initializes the pwm parameters (Should be called before getFirstParameter() is called!!!)
|
23 | void initPwmParameters(void);
|
24 | // Gets the first parameter of the of the linked-list of parameters
|
25 | psPwmParameter getFirstParameter(void);
|
26 |
|
27 | void increase(psPwmParameter);
|
28 | void decrease(psPwmParameter);
|
29 |
|
30 | void updatePwm16_1(psPwmParameter);
|
31 | void updatePwm16_2(psPwmParameter);
|
32 | void updatePwm8_1(psPwmParameter);
|
33 | void updatePwm8_2(psPwmParameter);
|
34 |
|
35 | struct pwmParameter pwm16_1 = {"pwm16_1", (uint16) 1500,(uint16) 20000u, 0, &increase, &decrease, &updatePwm16_1};
|
36 | struct pwmParameter pwm16_2 = {"pwm16_2", (uint16) 1500, (uint16)20000u, 0, &increase, &decrease, &updatePwm16_2 };
|
37 | struct pwmParameter pwm8_1 = {"pwm8_1", (uint16)20, (uint16)255, 0 , &increase, &decrease, &updatePwm8_1};
|
38 | struct pwmParameter pwm8_2 = {"pwm8_2", (uint16)20, (uint16)255, 0, &increase, &decrease, &updatePwm8_2};
|
39 |
|
40 | // initialize function (bind together the linked-list
|
41 | void initPwmParameters()
|
42 | {
|
43 | pwm16_1.next = &pwm16_2;
|
44 | pwm16_2.next = &pwm8_1;
|
45 | pwm8_1.next = &pwm8_2;
|
46 | pwm8_2.next = &pwm16_1;
|
47 | }
|
48 |
|
49 | // Gets the first parameter of a single linked list of pwm parameters
|
50 | psPwmParameter getFirstParameter(void)
|
51 | {
|
52 | return &pwm16_1;
|
53 | }
|
54 |
|
55 | void increase(psPwmParameter parameter)
|
56 | {
|
57 | if( parameter->value < parameter->maxValue )
|
58 | parameter->value = (parameter->value)++;
|
59 |
|
60 | parameter->update(parameter);
|
61 | }
|
62 |
|
63 | void decrease(psPwmParameter parameter)
|
64 | {
|
65 | if( parameter->value > 0 )
|
66 | parameter->value = (parameter->value)--;
|
67 |
|
68 | parameter->update(parameter);
|
69 | }
|
70 |
|
71 | void updatePwm16_1(psPwmParameter pwm16_1)
|
72 | {
|
73 | setPwm16_1(pwm16_1->value);
|
74 | }
|
75 |
|
76 | void updatePwm16_2(psPwmParameter pwm16_2)
|
77 | {
|
78 | setPwm16_2((pwm16_2->value));
|
79 | }
|
80 |
|
81 | void updatePwm8_1(psPwmParameter pwm8_1)
|
82 | {
|
83 | setPwm8_1((uint8) (pwm8_1->value));
|
84 | }
|
85 |
|
86 | void updatePwm8_2(psPwmParameter pwm8_2)
|
87 | {
|
88 | setPwm8_2((uint8) (pwm8_2->value));
|
89 | }
|