android
2024-07-25 2dcf9cc893a27c50d538baf8b5d47ff06fe495d8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package com.example.serial;
import androidx.appcompat.app.AppCompatActivity;
 
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
 
public class BuzzerActivity extends AppCompatActivity {
 
    private Button play;
    private Button stop;
    private EditText period;
    private EditText duty_cycle;
 
    private String periodBuf;
    private String dutyBuf;
    private BuzzerControl buzzerControl;
    private int rv;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_buzzer);
        buzzerControl = new BuzzerControl();
 
        play = findViewById(R.id.play);
        period = findViewById(R.id.period);
        duty_cycle = findViewById(R.id.duty_cycle);
        stop = findViewById(R.id.stop);
 
 
        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                periodBuf = period.getText().toString();
                dutyBuf = duty_cycle.getText().toString();
 
                if(periodBuf.isEmpty() || dutyBuf.isEmpty()){
                    periodBuf = period.getHint().toString();
                    dutyBuf = duty_cycle.getHint().toString();
                    period.setText(periodBuf);
                    duty_cycle.setText(dutyBuf);
                }
                // 打开pwmchip2/pwm0
                rv = buzzerControl.pwmOpen("2");
                if (rv == 1) {
                    // 表示缺少权限
                    Toast.makeText(BuzzerActivity.this, "请添加/sys/class/pwm/pwmchip2/export的权限", Toast.LENGTH_SHORT).show();
                }else if( rv < 0 ){
                    Toast.makeText(BuzzerActivity.this, "打开PWM失败", Toast.LENGTH_SHORT).show();
                } else {
                    // 首先设置周期
                    rv = buzzerControl.pwmConfig("period", periodBuf);
                    if (rv == 1) {
                        // 表示缺少权限
                        Toast.makeText(BuzzerActivity.this, "请添加/sys/class/pwm/pwmchip2/pwm0/period的权限", Toast.LENGTH_SHORT).show();
                    } else if (rv == 2) {
                        Toast.makeText(BuzzerActivity.this, "周期的值无效,请重新输入", Toast.LENGTH_SHORT).show();
                    }else if (rv < 0) {
                        Toast.makeText(BuzzerActivity.this, "设置周期失败", Toast.LENGTH_SHORT).show();
                    }else {
                        // 其次设置占空比
                        rv = buzzerControl.pwmConfig("duty_cycle", dutyBuf);
                        if (rv == 1) {
                            // 表示缺少权限
                            Toast.makeText(BuzzerActivity.this, "请添加/sys/class/pwm/pwmchip2/pwm0/duty_cycle的权限", Toast.LENGTH_SHORT).show();
                        } else if (rv == 2) {
                            Toast.makeText(BuzzerActivity.this, "占空比的值无效,请重新输入", Toast.LENGTH_SHORT).show();
                        }
                        if (rv < 0) {
                            Toast.makeText(BuzzerActivity.this, "设置占空比失败", Toast.LENGTH_SHORT).show();
                        } else {
                            // 最后使能pwm
                            rv = buzzerControl.pwmConfig("enable", "1");
                            if (rv == 1) {
                                // 表示缺少权限
                                Toast.makeText(BuzzerActivity.this, "请添加/sys/class/pwm/pwmchip2/pwm0/enable的权限", Toast.LENGTH_SHORT).show();
                            } else if (rv < 0) {
                                Toast.makeText(BuzzerActivity.this, "使能PWM失败", Toast.LENGTH_SHORT).show();
                            } else
                                Toast.makeText(BuzzerActivity.this, "打开PWM, 正在播放", Toast.LENGTH_SHORT).show();
                        }
                    }
                }
            }
        });
 
        stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                rv = buzzerControl.pwmConfig("enable", "0");
                if(  rv < 0 || rv == 1 || rv == 2)
                    Toast.makeText(BuzzerActivity.this, "禁止PWM失败", Toast.LENGTH_SHORT).show();
                else {
                    Toast.makeText(BuzzerActivity.this, "禁止PWM,暂停播放", Toast.LENGTH_SHORT).show();
                }
            }
        });
 
    }
}